index.tsx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 { currentLogItem, setCurrentLogItem, showMessageLogModal, setShowMessageLogModal } = useAppStore(useShallow(state => ({
  26. currentLogItem: state.currentLogItem,
  27. setCurrentLogItem: state.setCurrentLogItem,
  28. showMessageLogModal: state.showMessageLogModal,
  29. setShowMessageLogModal: state.setShowMessageLogModal,
  30. })))
  31. const {
  32. showNodePanel,
  33. showDebugAndPreviewPanel,
  34. showWorkflowPreview,
  35. } = useMemo(() => {
  36. return {
  37. showNodePanel: !!selectedNode && !workflowRunningData && !historyWorkflowData && !showInputsPanel,
  38. showDebugAndPreviewPanel: isChatMode && workflowRunningData && !historyWorkflowData,
  39. showWorkflowPreview: !isChatMode && !historyWorkflowData && (workflowRunningData || showInputsPanel),
  40. }
  41. }, [
  42. showInputsPanel,
  43. selectedNode,
  44. isChatMode,
  45. workflowRunningData,
  46. historyWorkflowData,
  47. ])
  48. return (
  49. <div className='absolute top-14 right-0 bottom-2 flex z-10'>
  50. {
  51. showMessageLogModal && (
  52. <MessageLogModal
  53. fixedWidth
  54. width={400}
  55. currentLogItem={currentLogItem}
  56. onCancel={() => {
  57. setCurrentLogItem()
  58. setShowMessageLogModal(false)
  59. }}
  60. />
  61. )
  62. }
  63. {
  64. historyWorkflowData && !isChatMode && (
  65. <Record />
  66. )
  67. }
  68. {
  69. historyWorkflowData && isChatMode && (
  70. <ChatRecord />
  71. )
  72. }
  73. {
  74. showDebugAndPreviewPanel && (
  75. <DebugAndPreview />
  76. )
  77. }
  78. {
  79. showWorkflowPreview && (
  80. <WorkflowPreview />
  81. )
  82. }
  83. {
  84. showNodePanel && (
  85. <NodePanel {...selectedNode!} />
  86. )
  87. }
  88. </div>
  89. )
  90. }
  91. export default memo(Panel)