index.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import type { FC } from 'react'
  2. import {
  3. memo,
  4. useMemo,
  5. } from 'react'
  6. import { useNodes } from 'reactflow'
  7. import { useShallow } from 'zustand/react/shallow'
  8. import type { CommonNodeType } from '../types'
  9. import { Panel as NodePanel } from '../nodes'
  10. import { useStore } from '../store'
  11. import { useIsChatMode } from '../hooks'
  12. import DebugAndPreview from './debug-and-preview'
  13. import Record from './record'
  14. import WorkflowPreview from './workflow-preview'
  15. import ChatRecord from './chat-record'
  16. import { useStore as useAppStore } from '@/app/components/app/store'
  17. import MessageLogModal from '@/app/components/base/message-log-modal'
  18. const Panel: FC = () => {
  19. const nodes = useNodes<CommonNodeType>()
  20. const isChatMode = useIsChatMode()
  21. const selectedNode = nodes.find(node => node.data.selected)
  22. const showInputsPanel = useStore(s => s.showInputsPanel)
  23. const workflowRunningData = useStore(s => s.workflowRunningData)
  24. const historyWorkflowData = useStore(s => s.historyWorkflowData)
  25. const isRestoring = useStore(s => s.isRestoring)
  26. const { currentLogItem, setCurrentLogItem, showMessageLogModal, setShowMessageLogModal } = useAppStore(useShallow(state => ({
  27. currentLogItem: state.currentLogItem,
  28. setCurrentLogItem: state.setCurrentLogItem,
  29. showMessageLogModal: state.showMessageLogModal,
  30. setShowMessageLogModal: state.setShowMessageLogModal,
  31. })))
  32. const {
  33. showNodePanel,
  34. showDebugAndPreviewPanel,
  35. showWorkflowPreview,
  36. } = useMemo(() => {
  37. return {
  38. showNodePanel: !!selectedNode && !workflowRunningData && !historyWorkflowData && !showInputsPanel,
  39. showDebugAndPreviewPanel: isChatMode && workflowRunningData && !historyWorkflowData,
  40. showWorkflowPreview: !isChatMode && !historyWorkflowData && (workflowRunningData || showInputsPanel),
  41. }
  42. }, [
  43. showInputsPanel,
  44. selectedNode,
  45. isChatMode,
  46. workflowRunningData,
  47. historyWorkflowData,
  48. ])
  49. return (
  50. <div className='absolute top-14 right-0 bottom-2 flex z-10' key={`${isRestoring}`}>
  51. {
  52. showMessageLogModal && (
  53. <MessageLogModal
  54. fixedWidth
  55. width={400}
  56. currentLogItem={currentLogItem}
  57. onCancel={() => {
  58. setCurrentLogItem()
  59. setShowMessageLogModal(false)
  60. }}
  61. />
  62. )
  63. }
  64. {
  65. historyWorkflowData && !isChatMode && (
  66. <Record />
  67. )
  68. }
  69. {
  70. historyWorkflowData && isChatMode && (
  71. <ChatRecord />
  72. )
  73. }
  74. {
  75. showDebugAndPreviewPanel && (
  76. <DebugAndPreview />
  77. )
  78. }
  79. {
  80. showWorkflowPreview && (
  81. <WorkflowPreview />
  82. )
  83. }
  84. {
  85. showNodePanel && (
  86. <NodePanel {...selectedNode!} />
  87. )
  88. }
  89. </div>
  90. )
  91. }
  92. export default memo(Panel)