From f268011e93dabe7acd79e13bbdf78becae555772 Mon Sep 17 00:00:00 2001 From: Blair Chen Date: Sun, 1 Jun 2025 17:04:39 +0800 Subject: [PATCH] Enhance chat and markdown content rendering experience. --- app/chat/PersonaModal.tsx | 50 +++++++---- app/chat/PersonaPanel.tsx | 19 +--- app/layout.tsx | 2 +- components/Chat/Chat.tsx | 59 +++++++++---- components/Chat/ChatSideBar.tsx | 20 +++-- components/Chat/Message.tsx | 49 ++++------- components/Chat/chatContext.ts | 4 +- components/Chat/index.scss | 11 +-- components/Chat/useChatHook.ts | 143 ++++++++++--------------------- components/Markdown/Markdown.tsx | 119 +++++++++++++++++++++---- components/Markdown/index.scss | 18 ---- eslint.config.mjs | 4 +- package.json | 2 +- styles/globals.scss | 18 ---- 14 files changed, 263 insertions(+), 255 deletions(-) delete mode 100644 components/Markdown/index.scss diff --git a/app/chat/PersonaModal.tsx b/app/chat/PersonaModal.tsx index e7a75dd2..3ff778cc 100644 --- a/app/chat/PersonaModal.tsx +++ b/app/chat/PersonaModal.tsx @@ -1,38 +1,58 @@ import React, { useContext, useEffect } from 'react' import { Button, Dialog, Flex, TextArea, TextField } from '@radix-ui/themes' import { useForm } from 'react-hook-form' -import { ChatContext, Persona } from '@/components' +import ChatContext from '@/components/Chat/chatContext' +import type { Persona } from '@/components/Chat/interface' const PersonaModal = () => { const { isOpenPersonaModal: open, editPersona: detail, - onCreatePersona, + onCreateOrUpdatePersona, onClosePersonaModal } = useContext(ChatContext) - const { register, handleSubmit, setValue } = useForm() - - const formSubmit = handleSubmit((values: any) => { - onCreatePersona?.(values as Persona) - }) + const { register, handleSubmit, setValue, reset } = useForm<{ + name: string + prompt: string + role: string + }>() useEffect(() => { - if (detail) { - setValue('name', detail.name, { shouldTouch: true }) - setValue('prompt', detail.prompt, { shouldTouch: true }) + if (open && detail) { + setValue('name', detail.name ?? '') + setValue('prompt', detail.prompt ?? '') + } else if (open && !detail) { + reset({ name: '', prompt: '' }) + } + if (!open) { + reset({ name: '', prompt: '' }) } - }, [detail, setValue]) + }, [open, detail, setValue, reset]) + + const formSubmit = handleSubmit(({ name, prompt }) => { + const persona: Persona = { name, prompt, role: 'assistant' } + onCreateOrUpdatePersona?.(persona) + }) return ( - + - Create or Edit Persona Prompt + {detail ? 'Edit Persona Prompt' : 'Create Persona Prompt'}
- -