index.tsx 3.0 KB

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