From a2e30e6aa9152a385769e9676a756e144b4135bd Mon Sep 17 00:00:00 2001 From: JzoNg Date: Sun, 17 Mar 2024 14:05:56 +0800 Subject: [PATCH] message log --- web/app/components/app/chat/log/index.tsx | 7 ++- web/app/components/app/log/list.tsx | 13 ++++- web/app/components/base/chat/chat/index.tsx | 14 ++++- .../base/message-log-modal/index.tsx | 56 +++++++++++++++++++ web/i18n/zh-Hans/app-log.ts | 4 ++ 5 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 web/app/components/base/message-log-modal/index.tsx diff --git a/web/app/components/app/chat/log/index.tsx b/web/app/components/app/chat/log/index.tsx index 68a36813f6..1c32c62fdc 100644 --- a/web/app/components/app/chat/log/index.tsx +++ b/web/app/components/app/chat/log/index.tsx @@ -11,7 +11,7 @@ const Log: FC = ({ logItem, }) => { const { t } = useTranslation() - const { setCurrentLogItem, setShowPromptLogModal } = useAppStore() + const { setCurrentLogItem, setShowPromptLogModal, setShowMessageLogModal } = useAppStore() const { workflow_run_id: runID } = logItem return ( @@ -21,7 +21,10 @@ const Log: FC = ({ e.stopPropagation() e.nativeEvent.stopImmediatePropagation() setCurrentLogItem(logItem) - setShowPromptLogModal(true) + if (runID) + setShowMessageLogModal(true) + else + setShowPromptLogModal(true) }} > diff --git a/web/app/components/app/log/list.tsx b/web/app/components/app/log/list.tsx index 1db85f9859..b245cbee70 100644 --- a/web/app/components/app/log/list.tsx +++ b/web/app/components/app/log/list.tsx @@ -36,6 +36,7 @@ import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import TextGeneration from '@/app/components/app/text-generate/item' import { addFileInfos, sortAgentSorts } from '@/app/components/tools/utils' import PromptLogModal from '@/app/components/base/prompt-log-modal' +import MessageLogModal from '@/app/components/base/message-log-modal' import { useStore as useAppStore } from '@/app/components/app/store' type IConversationList = { @@ -143,7 +144,7 @@ type IDetailPanel = { function DetailPanel({ detail, onFeedback }: IDetailPanel) { const { onClose, appDetail } = useContext(DrawerContext) - const { currentLogItem, setCurrentLogItem, showPromptLogModal, setShowPromptLogModal } = useAppStore() + const { currentLogItem, setCurrentLogItem, showPromptLogModal, setShowPromptLogModal, showMessageLogModal, setShowMessageLogModal } = useAppStore() const { t } = useTranslation() const [items, setItems] = React.useState([]) const [hasMore, setHasMore] = useState(true) @@ -391,6 +392,16 @@ function DetailPanel )} + {showMessageLogModal && ( + { + setCurrentLogItem() + setShowMessageLogModal(false) + }} + /> + )} ) } diff --git a/web/app/components/base/chat/chat/index.tsx b/web/app/components/base/chat/chat/index.tsx index 7313437ffb..3398e947f7 100644 --- a/web/app/components/base/chat/chat/index.tsx +++ b/web/app/components/base/chat/chat/index.tsx @@ -27,6 +27,7 @@ import Button from '@/app/components/base/button' import { StopCircle } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices' import PromptLogModal from '@/app/components/base/prompt-log-modal' import { useStore as useAppStore } from '@/app/components/app/store' +import MessageLogModal from '@/app/components/base/message-log-modal' export type ChatProps = { chatList: ChatItem[] @@ -75,7 +76,7 @@ const Chat: FC = ({ onFeedback, }) => { const { t } = useTranslation() - const { currentLogItem, setCurrentLogItem, showPromptLogModal, setShowPromptLogModal } = useAppStore() + const { currentLogItem, setCurrentLogItem, showPromptLogModal, setShowPromptLogModal, showMessageLogModal, setShowMessageLogModal } = useAppStore() const [width, setWidth] = useState(0) const chatContainerRef = useRef(null) const chatContainerInnerRef = useRef(null) @@ -233,6 +234,17 @@ const Chat: FC = ({ }} /> )} + {showMessageLogModal && ( + { + setCurrentLogItem() + setShowMessageLogModal(false) + }} + /> + )} ) diff --git a/web/app/components/base/message-log-modal/index.tsx b/web/app/components/base/message-log-modal/index.tsx new file mode 100644 index 0000000000..dc082ab401 --- /dev/null +++ b/web/app/components/base/message-log-modal/index.tsx @@ -0,0 +1,56 @@ +import type { FC } from 'react' +import { useTranslation } from 'react-i18next' +import cn from 'classnames' +import { useEffect, useRef, useState } from 'react' +import { useClickAway } from 'ahooks' +import { XClose } from '@/app/components/base/icons/src/vender/line/general' +import type { IChatItem } from '@/app/components/app/chat/type' +import Run from '@/app/components/workflow/run' + +type MessageLogModalProps = { + currentLogItem?: IChatItem + width: number + fixedWidth?: boolean + onCancel: () => void +} +const MessageLogModal: FC = ({ + currentLogItem, + width, + fixedWidth, + onCancel, +}) => { + const { t } = useTranslation() + const ref = useRef(null) + const [mounted, setMounted] = useState(false) + + useClickAway(() => { + if (mounted) + onCancel() + }, ref) + + useEffect(() => { + setMounted(true) + }, []) + + if (!currentLogItem || !currentLogItem.workflow_run_id) + return null + + return ( +
+

{t('appLog.runDetail.title')}

+ + + + +
+ ) +} + +export default MessageLogModal diff --git a/web/i18n/zh-Hans/app-log.ts b/web/i18n/zh-Hans/app-log.ts index 111297fe6a..27b2194605 100644 --- a/web/i18n/zh-Hans/app-log.ts +++ b/web/i18n/zh-Hans/app-log.ts @@ -72,6 +72,10 @@ const translation = { }, workflowTitle: '日志', workflowSubtitle: '日志记录了应用的执行情况', + runDetail: { + title: '对话日志', + workflowTitle: '日志详情', + }, promptLog: 'Prompt 日志', viewLog: '查看日志', }