diff --git a/client/ui/chat/ChatFragment.tsx b/client/ui/chat/ChatFragment.tsx index 2420216..65561ed 100644 --- a/client/ui/chat/ChatFragment.tsx +++ b/client/ui/chat/ChatFragment.tsx @@ -119,6 +119,7 @@ export default function ChatFragment({ target, showReturnButton, onReturnButtonC const [isMessageSending, setIsMessageSending] = React.useState(false) const cachedFiles = React.useRef({} as { [fileName: string]: ArrayBuffer }) + const cachedFileNamesCount = React.useRef({} as { [fileName: string]: number }) async function sendMessage() { try { let text = inputRef.current!.value @@ -133,7 +134,7 @@ export default function ChatFragment({ target, showReturnButton, onReturnButtonC data: cachedFiles.current[fileName], }, 5000) if (checkApiSuccessOrSncakbar(re, `文件[${fileName}] 上傳失敗`)) return - text = text.replaceAll(fileName, re.data!.file_path as string) + text = text.replaceAll('(' + fileName + ')', '(' + re.data!.file_path as string + ')') } } @@ -154,6 +155,25 @@ export default function ChatFragment({ target, showReturnButton, onReturnButtonC setIsMessageSending(false) } + function insertText(text: string) { + const input = inputRef.current!.shadowRoot!.querySelector('[part=input]') as HTMLTextAreaElement + inputRef.current!.value = input.value!.substring(0, input.selectionStart as number) + text + input.value!.substring(input.selectionEnd as number, input.value.length) + } + async function addFile(type: string, name_: string, data: Blob | Response) { + let name = name_ + while (cachedFiles.current[name] != null) { + name = name_ + '_' + cachedFileNamesCount.current[name] + cachedFileNamesCount.current[name]++ + } + + cachedFiles.current[name] = await data.arrayBuffer() + cachedFileNamesCount.current[name] = 1 + if (type.startsWith('image/')) + insertText(``) + else + insertText(``) + } + return (