You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

header-in-normal.tsx 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import {
  2. useCallback,
  3. } from 'react'
  4. import { useNodes } from 'reactflow'
  5. import {
  6. useStore,
  7. useWorkflowStore,
  8. } from '../store'
  9. import type { StartNodeType } from '../nodes/start/types'
  10. import {
  11. useNodesInteractions,
  12. useNodesReadOnly,
  13. useWorkflowRun,
  14. } from '../hooks'
  15. import Divider from '../../base/divider'
  16. import RunAndHistory from './run-and-history'
  17. import EditingTitle from './editing-title'
  18. import EnvButton from './env-button'
  19. import VersionHistoryButton from './version-history-button'
  20. export type HeaderInNormalProps = {
  21. components?: {
  22. left?: React.ReactNode
  23. middle?: React.ReactNode
  24. }
  25. }
  26. const HeaderInNormal = ({
  27. components,
  28. }: HeaderInNormalProps) => {
  29. const workflowStore = useWorkflowStore()
  30. const { nodesReadOnly } = useNodesReadOnly()
  31. const { handleNodeSelect } = useNodesInteractions()
  32. const setShowWorkflowVersionHistoryPanel = useStore(s => s.setShowWorkflowVersionHistoryPanel)
  33. const setShowEnvPanel = useStore(s => s.setShowEnvPanel)
  34. const setShowDebugAndPreviewPanel = useStore(s => s.setShowDebugAndPreviewPanel)
  35. const setShowVariableInspectPanel = useStore(s => s.setShowVariableInspectPanel)
  36. const setShowChatVariablePanel = useStore(s => s.setShowChatVariablePanel)
  37. const nodes = useNodes<StartNodeType>()
  38. const selectedNode = nodes.find(node => node.data.selected)
  39. const { handleBackupDraft } = useWorkflowRun()
  40. const onStartRestoring = useCallback(() => {
  41. workflowStore.setState({ isRestoring: true })
  42. handleBackupDraft()
  43. // clear right panel
  44. if (selectedNode)
  45. handleNodeSelect(selectedNode.id, true)
  46. setShowWorkflowVersionHistoryPanel(true)
  47. setShowEnvPanel(false)
  48. setShowDebugAndPreviewPanel(false)
  49. setShowVariableInspectPanel(false)
  50. setShowChatVariablePanel(false)
  51. }, [workflowStore, handleBackupDraft, selectedNode, handleNodeSelect, setShowWorkflowVersionHistoryPanel, setShowEnvPanel, setShowDebugAndPreviewPanel, setShowVariableInspectPanel, setShowChatVariablePanel])
  52. return (
  53. <>
  54. <div>
  55. <EditingTitle />
  56. </div>
  57. <div className='flex items-center gap-2'>
  58. {components?.left}
  59. <EnvButton disabled={nodesReadOnly} />
  60. <Divider type='vertical' className='mx-auto h-3.5' />
  61. <RunAndHistory />
  62. {components?.middle}
  63. <VersionHistoryButton onClick={onStartRestoring} />
  64. </div>
  65. </>
  66. )
  67. }
  68. export default HeaderInNormal