index.tsx 2.5 KB

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