import type { FC } from 'react' import { memo, useMemo, } from 'react' import { useNodes } from 'reactflow' import type { CommonNodeType } from '../types' import { Panel as NodePanel } from '../nodes' import { useStore } from '../store' import { useIsChatMode } from '../hooks' import DebugAndPreview from './debug-and-preview' import Record from './record' import WorkflowPreview from './workflow-preview' import ChatRecord from './chat-record' import { useStore as useAppStore } from '@/app/components/app/store' import MessageLogModal from '@/app/components/base/message-log-modal' const Panel: FC = () => { const nodes = useNodes() const isChatMode = useIsChatMode() const selectedNode = nodes.find(node => node.data.selected) const showInputsPanel = useStore(s => s.showInputsPanel) const workflowRunningData = useStore(s => s.workflowRunningData) const historyWorkflowData = useStore(s => s.historyWorkflowData) const { currentLogItem, setCurrentLogItem, showMessageLogModal, setShowMessageLogModal } = useAppStore() const { showNodePanel, showDebugAndPreviewPanel, showWorkflowPreview, } = useMemo(() => { return { showNodePanel: !!selectedNode && !workflowRunningData && !historyWorkflowData && !showInputsPanel, showDebugAndPreviewPanel: isChatMode && workflowRunningData && !historyWorkflowData, showWorkflowPreview: !isChatMode && !historyWorkflowData && (workflowRunningData || showInputsPanel), } }, [ showInputsPanel, selectedNode, isChatMode, workflowRunningData, historyWorkflowData, ]) return (
{ showMessageLogModal && ( { setCurrentLogItem() setShowMessageLogModal(false) }} /> ) } { historyWorkflowData && !isChatMode && ( ) } { historyWorkflowData && isChatMode && ( ) } { showDebugAndPreviewPanel && ( ) } { showWorkflowPreview && ( ) } { showNodePanel && ( ) }
) } export default memo(Panel)