From 121e17d2a71148b8c984d448f2197d0275507a82 Mon Sep 17 00:00:00 2001 From: gguio Date: Wed, 6 Mar 2024 14:44:56 +0400 Subject: [PATCH 01/14] Scoreboard component + storybook --- src/react/Scoreboard.css | 26 ++++++++++++++++++++++ src/react/Scoreboard.stories.tsx | 27 +++++++++++++++++++++++ src/react/Scoreboard.tsx | 37 ++++++++++++++++++++++++++++++++ src/react/ScoreboardProvider.tsx | 32 +++++++++++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 src/react/Scoreboard.css create mode 100644 src/react/Scoreboard.stories.tsx create mode 100644 src/react/Scoreboard.tsx create mode 100644 src/react/ScoreboardProvider.tsx diff --git a/src/react/Scoreboard.css b/src/react/Scoreboard.css new file mode 100644 index 000000000..79ff16591 --- /dev/null +++ b/src/react/Scoreboard.css @@ -0,0 +1,26 @@ +.scoreboard-container { + position: fixed; + right: 0px; + top: 50%; + transform: translateY(-50%); + opacity: 0.7; + background-color: black; + min-width: 100px; + max-width: 400px; + display: flex; + flex-direction: column; + padding-inline: 5px; +} + +.scoreboard-title { + text-align: center; +} + +.item-container { + display: flex; +} + +.item-value { + margin-left: auto; + color: lightcoral; +} diff --git a/src/react/Scoreboard.stories.tsx b/src/react/Scoreboard.stories.tsx new file mode 100644 index 000000000..76d37c171 --- /dev/null +++ b/src/react/Scoreboard.stories.tsx @@ -0,0 +1,27 @@ +import type { Meta, StoryObj } from '@storybook/react' + +import Scoreboard from './Scoreboard' + +const meta: Meta = { + component: Scoreboard +} + +export default meta +type Story = StoryObj; + +export const Primary: Story = { + args: { + title: 'Scoreboard', + items: [ + { + name: 'item 1', + value: 9 + }, + { + name: 'item 2', + value: 8 + } + ], + open: true + } +} diff --git a/src/react/Scoreboard.tsx b/src/react/Scoreboard.tsx new file mode 100644 index 000000000..3e4b5d3e5 --- /dev/null +++ b/src/react/Scoreboard.tsx @@ -0,0 +1,37 @@ +import './Scoreboard.css' + + +export type ScoreboardItems = Array<{name: string, value: number}> + +type ScoreboardProps = { + title: string, + items: ScoreboardItems, + open: boolean +} + + +export default function Scoreboard ({ title, items, open }: ScoreboardProps) { + + if (!open) return null + return ( +
+
+ {title} +
+ { + items.map((item, index) => { + return( +
+
+ {item.name} +
+
+ {item.value} +
+
+ ) + }) + } +
+ ) +} diff --git a/src/react/ScoreboardProvider.tsx b/src/react/ScoreboardProvider.tsx new file mode 100644 index 000000000..455c46696 --- /dev/null +++ b/src/react/ScoreboardProvider.tsx @@ -0,0 +1,32 @@ +import { useEffect, useState } from 'react' +import Scoreboard from './Scoreboard' +import type { ScoreboardItems } from './Scoreboard' + + +const updateScoreboard = () => { + console.log(bot.scoreboard.sidebar) +} + +export default function ScoreboardProvider () { + const [title, setTitle] = useState('Scoreboard') + const [items, setItems] = useState([]) + const [open, setOpen] = useState(false) + + useEffect(() => { + bot.on('scoreboardCreated', (scoreboard) => { + setOpen(open) + }) + bot.on('scoreUpdated', (scoreboard, item) => { + console.log(scoreboard) + console.log(item) + }) + }, []) + + return( + + ) +} From 2da256a7c61b2db06a4ebb34a334ce71786d5c02 Mon Sep 17 00:00:00 2001 From: gguio Date: Wed, 6 Mar 2024 15:31:09 +0400 Subject: [PATCH 02/14] Packet handling (not tested) --- src/react/Scoreboard.css | 3 +++ src/react/ScoreboardProvider.tsx | 25 +++++++++++++++++++------ src/reactUi.tsx | 2 ++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/react/Scoreboard.css b/src/react/Scoreboard.css index 79ff16591..41a159587 100644 --- a/src/react/Scoreboard.css +++ b/src/react/Scoreboard.css @@ -1,4 +1,7 @@ .scoreboard-container { + z-index: -1; + pointer-events: none; + white-space: nowrap; position: fixed; right: 0px; top: 50%; diff --git a/src/react/ScoreboardProvider.tsx b/src/react/ScoreboardProvider.tsx index 455c46696..f677058ef 100644 --- a/src/react/ScoreboardProvider.tsx +++ b/src/react/ScoreboardProvider.tsx @@ -3,22 +3,35 @@ import Scoreboard from './Scoreboard' import type { ScoreboardItems } from './Scoreboard' -const updateScoreboard = () => { - console.log(bot.scoreboard.sidebar) -} export default function ScoreboardProvider () { + const [name, setName] = useState('') const [title, setTitle] = useState('Scoreboard') const [items, setItems] = useState([]) const [open, setOpen] = useState(false) + const updateScoreboard = (scoreboard, HandlerFunction) => { + if (scoreboard.name === name) HandlerFunction() + } + useEffect(() => { bot.on('scoreboardCreated', (scoreboard) => { - setOpen(open) + setName(scoreboard.name) + setTitle(scoreboard.title) + setItems(scoreboard.items) + setOpen(true) + }) + bot.on('scoreboardTitleChanged', (scoreboard) => { + updateScoreboard(scoreboard, () => {setTitle(scoreboard.title)}) }) bot.on('scoreUpdated', (scoreboard, item) => { - console.log(scoreboard) - console.log(item) + updateScoreboard(scoreboard, () => {setItems(scoreboard.items)}) + }) + bot.on('scoreRemoved', (scoreboard, item) => { + updateScoreboard(scoreboard, () => {setItems(scoreboard.items)}) + }) + bot.on('scoreboardDeleted', (scoreboard) => { + updateScoreboard(scoreboard, () => {setOpen(false)}) }) }, []) diff --git a/src/reactUi.tsx b/src/reactUi.tsx index af637853d..45415578a 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -15,6 +15,7 @@ import SelectOption from './react/SelectOption' import EnterFullscreenButton from './react/EnterFullscreenButton' import ChatProvider from './react/ChatProvider' import TitleProvider from './react/TitleProvider' +import ScoreboardProvider from './react/ScoreboardProvider' import SoundMuffler from './react/SoundMuffler' import TouchControls from './react/TouchControls' import widgets from './react/widgets' @@ -62,6 +63,7 @@ const InGameUi = () => { + From 9a11d876ab82263eae9e9996c8fef25392409c3d Mon Sep 17 00:00:00 2001 From: gguio Date: Wed, 6 Mar 2024 16:20:47 +0400 Subject: [PATCH 03/14] Name state in ScoreboardProvider doesnt change --- src/react/Scoreboard.tsx | 2 +- src/react/ScoreboardProvider.tsx | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/react/Scoreboard.tsx b/src/react/Scoreboard.tsx index 3e4b5d3e5..37a04027b 100644 --- a/src/react/Scoreboard.tsx +++ b/src/react/Scoreboard.tsx @@ -21,7 +21,7 @@ export default function Scoreboard ({ title, items, open }: ScoreboardProps) { { items.map((item, index) => { return( -
+
{item.name}
diff --git a/src/react/ScoreboardProvider.tsx b/src/react/ScoreboardProvider.tsx index f677058ef..74d448cf2 100644 --- a/src/react/ScoreboardProvider.tsx +++ b/src/react/ScoreboardProvider.tsx @@ -5,7 +5,7 @@ import type { ScoreboardItems } from './Scoreboard' export default function ScoreboardProvider () { - const [name, setName] = useState('') + const [name, setName] = useState('scoreboard') const [title, setTitle] = useState('Scoreboard') const [items, setItems] = useState([]) const [open, setOpen] = useState(false) @@ -16,19 +16,25 @@ export default function ScoreboardProvider () { useEffect(() => { bot.on('scoreboardCreated', (scoreboard) => { - setName(scoreboard.name) + console.log(scoreboard) setTitle(scoreboard.title) setItems(scoreboard.items) + setName(scoreboard.name) // name state doesnt change. Why ?? + // to test locally: + // 1. bot._client.emit('scoreboard_objective', {action: 0, name: 'name', displayText: 'test'}) + // 2. bot._client.emit('scoreboard_score', {action: 0, scoreName: 'name', itemName: 'item 1', value: 5}) setOpen(true) }) bot.on('scoreboardTitleChanged', (scoreboard) => { updateScoreboard(scoreboard, () => {setTitle(scoreboard.title)}) }) bot.on('scoreUpdated', (scoreboard, item) => { - updateScoreboard(scoreboard, () => {setItems(scoreboard.items)}) + console.log(name) + console.log(scoreboard.name) + if (scoreboard.name === name) setItems([...items, ...scoreboard.items]) }) bot.on('scoreRemoved', (scoreboard, item) => { - updateScoreboard(scoreboard, () => {setItems(scoreboard.items)}) + if (scoreboard.name === name) setItems([...items, ...scoreboard.items]) }) bot.on('scoreboardDeleted', (scoreboard) => { updateScoreboard(scoreboard, () => {setOpen(false)}) From 4bb5d695c88859a00581db1651ff60483b186320 Mon Sep 17 00:00:00 2001 From: gguio Date: Thu, 7 Mar 2024 00:52:37 +0400 Subject: [PATCH 04/14] Tested on play.minemalia.com --- src/react/Scoreboard.css | 3 +++ src/react/Scoreboard.tsx | 8 ++++---- src/react/ScoreboardProvider.tsx | 23 +++++------------------ 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/react/Scoreboard.css b/src/react/Scoreboard.css index 41a159587..43f0c99eb 100644 --- a/src/react/Scoreboard.css +++ b/src/react/Scoreboard.css @@ -13,6 +13,9 @@ display: flex; flex-direction: column; padding-inline: 5px; + font-size: 0.5rem; + max-height: 70%; + overflow: hidden; } .scoreboard-title { diff --git a/src/react/Scoreboard.tsx b/src/react/Scoreboard.tsx index 37a04027b..318dec8fc 100644 --- a/src/react/Scoreboard.tsx +++ b/src/react/Scoreboard.tsx @@ -1,7 +1,8 @@ import './Scoreboard.css' +import MessageFormattedString from './MessageFormattedString' -export type ScoreboardItems = Array<{name: string, value: number}> +export type ScoreboardItems = Array<{name: string, value: number, displayName?: any}> type ScoreboardProps = { title: string, @@ -9,21 +10,20 @@ type ScoreboardProps = { open: boolean } - export default function Scoreboard ({ title, items, open }: ScoreboardProps) { if (!open) return null return (
- {title} +
{ items.map((item, index) => { return(
- {item.name} +
{item.value} diff --git a/src/react/ScoreboardProvider.tsx b/src/react/ScoreboardProvider.tsx index 74d448cf2..8164c411e 100644 --- a/src/react/ScoreboardProvider.tsx +++ b/src/react/ScoreboardProvider.tsx @@ -3,41 +3,28 @@ import Scoreboard from './Scoreboard' import type { ScoreboardItems } from './Scoreboard' - export default function ScoreboardProvider () { - const [name, setName] = useState('scoreboard') const [title, setTitle] = useState('Scoreboard') const [items, setItems] = useState([]) const [open, setOpen] = useState(false) - const updateScoreboard = (scoreboard, HandlerFunction) => { - if (scoreboard.name === name) HandlerFunction() - } - useEffect(() => { bot.on('scoreboardCreated', (scoreboard) => { - console.log(scoreboard) setTitle(scoreboard.title) - setItems(scoreboard.items) - setName(scoreboard.name) // name state doesnt change. Why ?? - // to test locally: - // 1. bot._client.emit('scoreboard_objective', {action: 0, name: 'name', displayText: 'test'}) - // 2. bot._client.emit('scoreboard_score', {action: 0, scoreName: 'name', itemName: 'item 1', value: 5}) + setItems([...scoreboard.items]) setOpen(true) }) bot.on('scoreboardTitleChanged', (scoreboard) => { - updateScoreboard(scoreboard, () => {setTitle(scoreboard.title)}) + setTitle(scoreboard.title) }) bot.on('scoreUpdated', (scoreboard, item) => { - console.log(name) - console.log(scoreboard.name) - if (scoreboard.name === name) setItems([...items, ...scoreboard.items]) + setItems([...items, ...scoreboard.items]) }) bot.on('scoreRemoved', (scoreboard, item) => { - if (scoreboard.name === name) setItems([...items, ...scoreboard.items]) + setItems([...items, ...scoreboard.items]) }) bot.on('scoreboardDeleted', (scoreboard) => { - updateScoreboard(scoreboard, () => {setOpen(false)}) + setOpen(false) }) }, []) From 85b95327a24c6ce72a8d3f6636f1d2225b913c08 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 7 Mar 2024 00:56:03 +0300 Subject: [PATCH 05/14] fix listeners --- src/react/ScoreboardProvider.tsx | 43 +++++++++++++++++--------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/react/ScoreboardProvider.tsx b/src/react/ScoreboardProvider.tsx index 8164c411e..c354513b4 100644 --- a/src/react/ScoreboardProvider.tsx +++ b/src/react/ScoreboardProvider.tsx @@ -1,5 +1,5 @@ -import { useEffect, useState } from 'react' -import Scoreboard from './Scoreboard' +import { useMemo, useState } from 'react' +import Scoreboard from './Scoreboard' import type { ScoreboardItems } from './Scoreboard' @@ -8,28 +8,31 @@ export default function ScoreboardProvider () { const [items, setItems] = useState([]) const [open, setOpen] = useState(false) - useEffect(() => { - bot.on('scoreboardCreated', (scoreboard) => { - setTitle(scoreboard.title) - setItems([...scoreboard.items]) - setOpen(true) - }) - bot.on('scoreboardTitleChanged', (scoreboard) => { - setTitle(scoreboard.title) - }) - bot.on('scoreUpdated', (scoreboard, item) => { - setItems([...items, ...scoreboard.items]) - }) - bot.on('scoreRemoved', (scoreboard, item) => { - setItems([...items, ...scoreboard.items]) - }) - bot.on('scoreboardDeleted', (scoreboard) => { - setOpen(false) + useMemo(() => { // useMemo instead of useEffect to register them asap and not after the initial dom render + const updateSidebarScoreboard = () => { + if (bot.scoreboard.sidebar) { + setTitle(bot.scoreboard.sidebar.title) + setItems([...bot.scoreboard.sidebar.items]) + setOpen(true) + } else { + setOpen(false) + } + } + + bot.on('scoreboardCreated', updateSidebarScoreboard) // not used atm but still good to have + bot.on('scoreboardTitleChanged', updateSidebarScoreboard) + bot.on('scoreUpdated', updateSidebarScoreboard) + bot.on('scoreRemoved', updateSidebarScoreboard) + bot.on('scoreboardDeleted', updateSidebarScoreboard) + bot.on('scoreboardPosition', () => { + void Promise.resolve().then(() => { + updateSidebarScoreboard() + }) // mineflayer bug: wait for the next tick to get the correct scoreboard position }) }, []) return( - Date: Thu, 7 Mar 2024 02:06:00 +0400 Subject: [PATCH 06/14] full opacity --- src/react/Scoreboard.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/react/Scoreboard.css b/src/react/Scoreboard.css index 43f0c99eb..73811e7c8 100644 --- a/src/react/Scoreboard.css +++ b/src/react/Scoreboard.css @@ -6,7 +6,6 @@ right: 0px; top: 50%; transform: translateY(-50%); - opacity: 0.7; background-color: black; min-width: 100px; max-width: 400px; From df71afbcd38fdfdb81ba03e3b80231890018be52 Mon Sep 17 00:00:00 2001 From: gguio Date: Thu, 7 Mar 2024 14:51:45 +0400 Subject: [PATCH 07/14] fixed opacity --- src/react/Scoreboard.css | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/react/Scoreboard.css b/src/react/Scoreboard.css index 73811e7c8..7abaa8b9e 100644 --- a/src/react/Scoreboard.css +++ b/src/react/Scoreboard.css @@ -6,7 +6,7 @@ right: 0px; top: 50%; transform: translateY(-50%); - background-color: black; + background-color: rgba(0, 0, 0, 0.4); min-width: 100px; max-width: 400px; display: flex; @@ -17,6 +17,12 @@ overflow: hidden; } +@media (max-width: 800px) { + .scoreboard-container { + font-size: 0.4rem; + } +} + .scoreboard-title { text-align: center; } From 16997588a5ae9b52d71730a325370bc3698a2d97 Mon Sep 17 00:00:00 2001 From: gguio Date: Thu, 7 Mar 2024 14:59:12 +0400 Subject: [PATCH 08/14] scoreboard below title --- src/react/Scoreboard.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/react/Scoreboard.css b/src/react/Scoreboard.css index 7abaa8b9e..b2bb85213 100644 --- a/src/react/Scoreboard.css +++ b/src/react/Scoreboard.css @@ -1,5 +1,5 @@ .scoreboard-container { - z-index: -1; + z-index: -2; pointer-events: none; white-space: nowrap; position: fixed; From 5a426d09ad9213e1c4a51c6218941d1255fa4c03 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 9 Mar 2024 21:08:45 +0300 Subject: [PATCH 09/14] up inventory gui --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07ca67ae7..a7c206ba9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -247,7 +247,7 @@ importers: version: 1.0.0 minecraft-inventory-gui: specifier: github:zardoy/minecraft-inventory-gui#next - version: github.com/zardoy/minecraft-inventory-gui/bf2e7ba3afdc606604d85682d081778281d533cb(@types/react@18.2.20)(react@18.2.0) + version: github.com/zardoy/minecraft-inventory-gui/9371b804525d2d7f857767898b2bd1d9b7acb093(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:PrismarineJS/mineflayer version: github.com/PrismarineJS/mineflayer/d77a0511d02fe552170249ec19c2ff3030d17137 @@ -15419,9 +15419,9 @@ packages: vec3: 0.1.8 dev: false - github.com/zardoy/minecraft-inventory-gui/bf2e7ba3afdc606604d85682d081778281d533cb(@types/react@18.2.20)(react@18.2.0): - resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/bf2e7ba3afdc606604d85682d081778281d533cb} - id: github.com/zardoy/minecraft-inventory-gui/bf2e7ba3afdc606604d85682d081778281d533cb + github.com/zardoy/minecraft-inventory-gui/9371b804525d2d7f857767898b2bd1d9b7acb093(@types/react@18.2.20)(react@18.2.0): + resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/9371b804525d2d7f857767898b2bd1d9b7acb093} + id: github.com/zardoy/minecraft-inventory-gui/9371b804525d2d7f857767898b2bd1d9b7acb093 name: minecraft-inventory-gui version: 1.0.1 dependencies: From 72070b6ddb1fd6762d6eeaadf3313c80be8dc2ee Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 11 Mar 2024 00:09:09 +0300 Subject: [PATCH 10/14] try to fix react ui crash --- src/react/MessageFormattedString.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/react/MessageFormattedString.tsx b/src/react/MessageFormattedString.tsx index 11b29e6be..d1f8a10f0 100644 --- a/src/react/MessageFormattedString.tsx +++ b/src/react/MessageFormattedString.tsx @@ -4,10 +4,16 @@ import { formatMessage } from '../botUtils' import MessageFormatted from './MessageFormatted' /** like MessageFormatted, but receives raw string or json instead, uses window.loadedData */ -export default ({ message }: { message: string | Record }) => { +export default ({ message }: { message: string | Record | null }) => { const messageJson = useMemo(() => { - return formatMessage(typeof message === 'string' ? fromFormattedString(message) : message) + if (!message) return null + try { + return formatMessage(typeof message === 'string' ? fromFormattedString(message) : message) + } catch (err) { + console.error(err) // todo ensure its being logged + return null + } }, [message]) - return + return messageJson ? : null } From 848802c689ba757f70878045c1a80cd18c5201d9 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 11 Mar 2024 00:28:12 +0300 Subject: [PATCH 11/14] up inv --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a7c206ba9..91a178d05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -247,7 +247,7 @@ importers: version: 1.0.0 minecraft-inventory-gui: specifier: github:zardoy/minecraft-inventory-gui#next - version: github.com/zardoy/minecraft-inventory-gui/9371b804525d2d7f857767898b2bd1d9b7acb093(@types/react@18.2.20)(react@18.2.0) + version: github.com/zardoy/minecraft-inventory-gui/6685fa4a10590a5decef90a454ba0b9e045e7737(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:PrismarineJS/mineflayer version: github.com/PrismarineJS/mineflayer/d77a0511d02fe552170249ec19c2ff3030d17137 @@ -15419,9 +15419,9 @@ packages: vec3: 0.1.8 dev: false - github.com/zardoy/minecraft-inventory-gui/9371b804525d2d7f857767898b2bd1d9b7acb093(@types/react@18.2.20)(react@18.2.0): - resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/9371b804525d2d7f857767898b2bd1d9b7acb093} - id: github.com/zardoy/minecraft-inventory-gui/9371b804525d2d7f857767898b2bd1d9b7acb093 + github.com/zardoy/minecraft-inventory-gui/6685fa4a10590a5decef90a454ba0b9e045e7737(@types/react@18.2.20)(react@18.2.0): + resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/6685fa4a10590a5decef90a454ba0b9e045e7737} + id: github.com/zardoy/minecraft-inventory-gui/6685fa4a10590a5decef90a454ba0b9e045e7737 name: minecraft-inventory-gui version: 1.0.1 dependencies: From 3f1f65bd5e3fc3bc7df8d5825ecdb6c65f2a7b11 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 11 Mar 2024 00:44:18 +0300 Subject: [PATCH 12/14] improve performance of too frequent formatted strings (eg chat) --- src/react/ChatContainer.tsx | 3 ++- src/react/Scoreboard.tsx | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/react/ChatContainer.tsx b/src/react/ChatContainer.tsx index a468313ec..8186712a5 100644 --- a/src/react/ChatContainer.tsx +++ b/src/react/ChatContainer.tsx @@ -6,6 +6,7 @@ import { miscUiState } from '../globalState' import { MessagePart } from './MessageFormatted' import './ChatContainer.css' import { isIos } from './utils' +import { reactKeyForMessage } from './Scoreboard' export type Message = { parts: MessageFormatPart[], @@ -206,7 +207,7 @@ export default ({ messages, opacity = 1, fetchCompletionItems, opened, sendMessa }}> {opacity &&
{messages.map((m) => ( - + ))}
|| undefined}
diff --git a/src/react/Scoreboard.tsx b/src/react/Scoreboard.tsx index 318dec8fc..546a0f586 100644 --- a/src/react/Scoreboard.tsx +++ b/src/react/Scoreboard.tsx @@ -10,6 +10,10 @@ type ScoreboardProps = { open: boolean } +export const reactKeyForMessage = (message) => { + return typeof message === 'string' ? message : JSON.stringify(message) +} + export default function Scoreboard ({ title, items, open }: ScoreboardProps) { if (!open) return null @@ -19,17 +23,16 @@ export default function Scoreboard ({ title, items, open }: ScoreboardProps) {
{ - items.map((item, index) => { - return( -
-
- -
-
- {item.value} -
+ items.map((item) => { + const message = item.displayName ?? item.name + return
+
+ +
+
+ {item.value}
- ) +
}) }
From 45c290f5e493acc818a99c86549c23351d4f2ac7 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 11 Mar 2024 02:54:56 +0300 Subject: [PATCH 13/14] fix: fix chat completions display on mobile --- src/react/ChatContainer.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/react/ChatContainer.css b/src/react/ChatContainer.css index 69da94b02..419177835 100644 --- a/src/react/ChatContainer.css +++ b/src/react/ChatContainer.css @@ -47,7 +47,8 @@ div.chat-wrapper { .input-mobile .chat-completions { transform: none; top: 100%; - padding-left: 0; + padding-left: calc(env(safe-area-inset-left) / 2); + margin-top: 20px; /* input height */ } From af43339ca94ad00bc1ea98e00cb14baff51e5315 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 11 Mar 2024 02:55:10 +0300 Subject: [PATCH 14/14] fix: fix chat history navigation on ios --- src/react/ChatContainer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/react/ChatContainer.tsx b/src/react/ChatContainer.tsx index 8186712a5..e965a3265 100644 --- a/src/react/ChatContainer.tsx +++ b/src/react/ChatContainer.tsx @@ -146,7 +146,7 @@ export default ({ messages, opacity = 1, fetchCompletionItems, opened, sendMessa const auxInputFocus = (fireKey: string) => { chatInput.current.focus() - document.dispatchEvent(new KeyboardEvent('keydown', { code: fireKey })) + chatInput.current.dispatchEvent(new KeyboardEvent('keydown', { code: fireKey, bubbles: true })) } const getDefaultCompleteValue = () => {