| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | import type { FC } from 'react'import { memo } from 'react'import { useNodes } from 'reactflow'import cn from 'classnames'import { useShallow } from 'zustand/react/shallow'import type { CommonNodeType } from '../types'import { Panel as NodePanel } from '../nodes'import { useStore } from '../store'import {  useIsChatMode,  useWorkflow,} 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<CommonNodeType>()  const isChatMode = useIsChatMode()  const selectedNode = nodes.find(node => node.data.selected)  const historyWorkflowData = useStore(s => s.historyWorkflowData)  const showDebugAndPreviewPanel = useStore(s => s.showDebugAndPreviewPanel)  const isRestoring = useStore(s => s.isRestoring)  const {    enableShortcuts,    disableShortcuts,  } = useWorkflow()  const { currentLogItem, setCurrentLogItem, showMessageLogModal, setShowMessageLogModal, currentLogModalActiveTab } = useAppStore(useShallow(state => ({    currentLogItem: state.currentLogItem,    setCurrentLogItem: state.setCurrentLogItem,    showMessageLogModal: state.showMessageLogModal,    setShowMessageLogModal: state.setShowMessageLogModal,    currentLogModalActiveTab: state.currentLogModalActiveTab,  })))  return (    <div      tabIndex={-1}      className={cn(        'absolute top-14 right-0 bottom-2 flex z-10 outline-none',      )}      onFocus={disableShortcuts}      onBlur={enableShortcuts}      key={`${isRestoring}`}    >      {        showMessageLogModal && (          <MessageLogModal            fixedWidth            width={400}            currentLogItem={currentLogItem}            onCancel={() => {              setCurrentLogItem()              setShowMessageLogModal(false)            }}            defaultTab={currentLogModalActiveTab}          />        )      }      {        !!selectedNode && (          <NodePanel {...selectedNode!} />        )      }      {        historyWorkflowData && !isChatMode && (          <Record />        )      }      {        historyWorkflowData && isChatMode && (          <ChatRecord />        )      }      {        showDebugAndPreviewPanel && isChatMode && (          <DebugAndPreview />        )      }      {        showDebugAndPreviewPanel && !isChatMode && (          <WorkflowPreview />        )      }    </div>  )}export default memo(Panel)
 |