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.

use-input-field-panel.ts 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { useCallback, useMemo } from 'react'
  2. import { useStore, useWorkflowStore } from '@/app/components/workflow/store'
  3. import type { InputFieldEditorProps } from '../components/panel/input-field/editor'
  4. export const useInputFieldPanel = () => {
  5. const workflowStore = useWorkflowStore()
  6. const showInputFieldPreviewPanel = useStore(state => state.showInputFieldPreviewPanel)
  7. const inputFieldEditPanelProps = useStore(state => state.inputFieldEditPanelProps)
  8. const isPreviewing = useMemo(() => {
  9. return showInputFieldPreviewPanel
  10. }, [showInputFieldPreviewPanel])
  11. const isEditing = useMemo(() => {
  12. return !!inputFieldEditPanelProps
  13. }, [inputFieldEditPanelProps])
  14. const closeAllInputFieldPanels = useCallback(() => {
  15. const {
  16. setShowInputFieldPanel,
  17. setShowInputFieldPreviewPanel,
  18. setInputFieldEditPanelProps,
  19. } = workflowStore.getState()
  20. setShowInputFieldPanel?.(false)
  21. setShowInputFieldPreviewPanel?.(false)
  22. setInputFieldEditPanelProps?.(null)
  23. }, [workflowStore])
  24. const toggleInputFieldPreviewPanel = useCallback(() => {
  25. const {
  26. showInputFieldPreviewPanel,
  27. setShowInputFieldPreviewPanel,
  28. } = workflowStore.getState()
  29. setShowInputFieldPreviewPanel?.(!showInputFieldPreviewPanel)
  30. }, [workflowStore])
  31. const toggleInputFieldEditPanel = useCallback((editContent: InputFieldEditorProps | null) => {
  32. const {
  33. setInputFieldEditPanelProps,
  34. } = workflowStore.getState()
  35. setInputFieldEditPanelProps?.(editContent)
  36. }, [workflowStore])
  37. return {
  38. closeAllInputFieldPanels,
  39. toggleInputFieldPreviewPanel,
  40. toggleInputFieldEditPanel,
  41. isPreviewing,
  42. isEditing,
  43. }
  44. }