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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. }, [handleBackupDraft, workflowStore, handleNodeSelect, selectedNode,
  52. setShowWorkflowVersionHistoryPanel, setShowEnvPanel, setShowDebugAndPreviewPanel, setShowVariableInspectPanel])
  53. return (
  54. <>
  55. <div>
  56. <EditingTitle />
  57. </div>
  58. <div className='flex items-center gap-2'>
  59. {components?.left}
  60. <EnvButton disabled={nodesReadOnly} />
  61. <Divider type='vertical' className='mx-auto h-3.5' />
  62. <RunAndHistory />
  63. {components?.middle}
  64. <VersionHistoryButton onClick={onStartRestoring} />
  65. </div>
  66. </>
  67. )
  68. }
  69. export default HeaderInNormal