From fc391d28b09735ef9fdb2364c37dd37a10294196 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Mon, 29 Jan 2024 12:15:33 +0800 Subject: [PATCH] feat: support edit message and delete message (#51) and improve working state --- app/src/api/conversation.ts | 17 ++---- app/src/assets/main.less | 4 ++ app/src/assets/pages/home.less | 2 +- app/src/components/EditorProvider.tsx | 58 ++++++++++++++++--- app/src/components/Message.tsx | 35 +++++++++-- app/src/components/home/ChatInterface.tsx | 9 +-- app/src/components/home/ChatSpace.tsx | 8 ++- app/src/components/home/ChatWrapper.tsx | 7 +++ .../components/home/ConversationSegment.tsx | 1 + .../components/home/assemblies/ChatInput.tsx | 2 +- app/src/resources/i18n/cn.json | 3 + app/src/resources/i18n/en.json | 7 ++- app/src/resources/i18n/ja.json | 7 ++- app/src/resources/i18n/ru.json | 7 ++- 14 files changed, 123 insertions(+), 44 deletions(-) diff --git a/app/src/api/conversation.ts b/app/src/api/conversation.ts index b0965fb..bf3dd47 100644 --- a/app/src/api/conversation.ts +++ b/app/src/api/conversation.ts @@ -76,7 +76,8 @@ export class Conversation { const idx = ev.index ?? -1; if (this.isValidIndex(idx)) { - delete this.data[idx]; + this.data.splice(idx, 1); + this.sendRemoveEvent(idx); this.triggerCallback(); } @@ -116,21 +117,11 @@ export class Conversation { } public sendEditEvent(id: number, message: string) { - this.sendEvent( - "edit", - JSON.stringify({ - message: `${id}:${message}`, - }), - ); + this.sendEvent("edit", `${id}:${message}`); } public sendRemoveEvent(id: number) { - this.sendEvent( - "remove", - JSON.stringify({ - message: `${id}`, - }), - ); + this.sendEvent("remove", id.toString()); } public sendShareEvent(refer: string) { diff --git a/app/src/assets/main.less b/app/src/assets/main.less index 59aa0ae..1b2e27e 100644 --- a/app/src/assets/main.less +++ b/app/src/assets/main.less @@ -81,6 +81,10 @@ strong { display: flex; flex-direction: row; align-items: center; + + &.gold { + color: hsl(var(--gold)); + } } .flex-dialog { diff --git a/app/src/assets/pages/home.less b/app/src/assets/pages/home.less index 3858fcc..0eaea17 100644 --- a/app/src/assets/pages/home.less +++ b/app/src/assets/pages/home.less @@ -446,7 +446,7 @@ transition: 0.2s; opacity: 0; border: 1px solid var(--border); - outline: 0; + outline: none; &:hover { color: hsl(var(--text)); diff --git a/app/src/components/EditorProvider.tsx b/app/src/components/EditorProvider.tsx index 4510c5b..8c80910 100644 --- a/app/src/components/EditorProvider.tsx +++ b/app/src/components/EditorProvider.tsx @@ -11,7 +11,7 @@ import { useTranslation } from "react-i18next"; import "@/assets/common/editor.less"; import { Textarea } from "./ui/textarea.tsx"; import Markdown from "./Markdown.tsx"; -import { useEffect, useRef, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import { Toggle } from "./ui/toggle.tsx"; import { mobile } from "@/utils/device.ts"; import { Button } from "./ui/button.tsx"; @@ -22,9 +22,25 @@ type RichEditorProps = { value: string; onChange: (value: string) => void; maxLength?: number; + + open?: boolean; + setOpen?: (open: boolean) => void; + children?: React.ReactNode; + + submittable?: boolean; + onSubmit?: (value: string) => void; + closeOnSubmit?: boolean; }; -function RichEditor({ value, onChange, maxLength }: RichEditorProps) { +function RichEditor({ + value, + onChange, + maxLength, + submittable, + onSubmit, + setOpen, + closeOnSubmit, +}: RichEditorProps) { const { t } = useTranslation(); const input = useRef(null); const [openPreview, setOpenPreview] = useState(!mobile); @@ -113,7 +129,7 @@ function RichEditor({ value, onChange, maxLength }: RichEditorProps) { > {openInput && (