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.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 nodes = useNodes<StartNodeType>()
  36. const selectedNode = nodes.find(node => node.data.selected)
  37. const { handleBackupDraft } = useWorkflowRun()
  38. const onStartRestoring = useCallback(() => {
  39. workflowStore.setState({ isRestoring: true })
  40. handleBackupDraft()
  41. // clear right panel
  42. if (selectedNode)
  43. handleNodeSelect(selectedNode.id, true)
  44. setShowWorkflowVersionHistoryPanel(true)
  45. setShowEnvPanel(false)
  46. setShowDebugAndPreviewPanel(false)
  47. }, [handleBackupDraft, workflowStore, handleNodeSelect, selectedNode,
  48. setShowWorkflowVersionHistoryPanel, setShowEnvPanel, setShowDebugAndPreviewPanel])
  49. return (
  50. <>
  51. <div>
  52. <EditingTitle />
  53. </div>
  54. <div className='flex items-center gap-2'>
  55. {components?.left}
  56. <EnvButton disabled={nodesReadOnly} />
  57. <Divider type='vertical' className='mx-auto h-3.5' />
  58. <RunAndHistory />
  59. {components?.middle}
  60. <VersionHistoryButton onClick={onStartRestoring} />
  61. </div>
  62. </>
  63. )
  64. }
  65. export default HeaderInNormal