| @@ -8,6 +8,7 @@ import type { WorkflowProps } from '@/app/components/workflow' | |||
| import WorkflowChildren from './workflow-children' | |||
| import { | |||
| useNodesSyncDraft, | |||
| useWorkflowRefreshDraft, | |||
| useWorkflowRun, | |||
| useWorkflowStartRun, | |||
| } from '../hooks' | |||
| @@ -32,6 +33,7 @@ const WorkflowMain = ({ | |||
| doSyncWorkflowDraft, | |||
| syncWorkflowDraftWhenPageClose, | |||
| } = useNodesSyncDraft() | |||
| const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft() | |||
| const { | |||
| handleBackupDraft, | |||
| handleLoadBackupDraft, | |||
| @@ -49,6 +51,7 @@ const WorkflowMain = ({ | |||
| return { | |||
| syncWorkflowDraftWhenPageClose, | |||
| doSyncWorkflowDraft, | |||
| handleRefreshWorkflowDraft, | |||
| handleBackupDraft, | |||
| handleLoadBackupDraft, | |||
| handleRestoreFromPublishedWorkflow, | |||
| @@ -61,6 +64,7 @@ const WorkflowMain = ({ | |||
| }, [ | |||
| syncWorkflowDraftWhenPageClose, | |||
| doSyncWorkflowDraft, | |||
| handleRefreshWorkflowDraft, | |||
| handleBackupDraft, | |||
| handleLoadBackupDraft, | |||
| handleRestoreFromPublishedWorkflow, | |||
| @@ -4,3 +4,4 @@ export * from './use-nodes-sync-draft' | |||
| export * from './use-workflow-run' | |||
| export * from './use-workflow-start-run' | |||
| export * from './use-is-chat-mode' | |||
| export * from './use-workflow-refresh-draft' | |||
| @@ -6,20 +6,20 @@ import { | |||
| useWorkflowStore, | |||
| } from '@/app/components/workflow/store' | |||
| import { BlockEnum } from '@/app/components/workflow/types' | |||
| import { useWorkflowUpdate } from '@/app/components/workflow/hooks' | |||
| import { | |||
| useNodesReadOnly, | |||
| } from '@/app/components/workflow/hooks/use-workflow' | |||
| import { syncWorkflowDraft } from '@/service/workflow' | |||
| import { useFeaturesStore } from '@/app/components/base/features/hooks' | |||
| import { API_PREFIX } from '@/config' | |||
| import { useWorkflowRefreshDraft } from '.' | |||
| export const useNodesSyncDraft = () => { | |||
| const store = useStoreApi() | |||
| const workflowStore = useWorkflowStore() | |||
| const featuresStore = useFeaturesStore() | |||
| const { getNodesReadOnly } = useNodesReadOnly() | |||
| const { handleRefreshWorkflowDraft } = useWorkflowUpdate() | |||
| const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft() | |||
| const params = useParams() | |||
| const getPostParams = useCallback(() => { | |||
| @@ -0,0 +1,36 @@ | |||
| import { useCallback } from 'react' | |||
| import { useWorkflowStore } from '@/app/components/workflow/store' | |||
| import { fetchWorkflowDraft } from '@/service/workflow' | |||
| import type { WorkflowDataUpdater } from '@/app/components/workflow/types' | |||
| import { useWorkflowUpdate } from '@/app/components/workflow/hooks' | |||
| export const useWorkflowRefreshDraft = () => { | |||
| const workflowStore = useWorkflowStore() | |||
| const { handleUpdateWorkflowCanvas } = useWorkflowUpdate() | |||
| const handleRefreshWorkflowDraft = useCallback(() => { | |||
| const { | |||
| appId, | |||
| setSyncWorkflowDraftHash, | |||
| setIsSyncingWorkflowDraft, | |||
| setEnvironmentVariables, | |||
| setEnvSecrets, | |||
| setConversationVariables, | |||
| } = workflowStore.getState() | |||
| setIsSyncingWorkflowDraft(true) | |||
| fetchWorkflowDraft(`/apps/${appId}/workflows/draft`).then((response) => { | |||
| handleUpdateWorkflowCanvas(response.graph as WorkflowDataUpdater) | |||
| setSyncWorkflowDraftHash(response.hash) | |||
| setEnvSecrets((response.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => { | |||
| acc[env.id] = env.value | |||
| return acc | |||
| }, {} as Record<string, string>)) | |||
| setEnvironmentVariables(response.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || []) | |||
| setConversationVariables(response.conversation_variables || []) | |||
| }).finally(() => setIsSyncingWorkflowDraft(false)) | |||
| }, [handleUpdateWorkflowCanvas, workflowStore]) | |||
| return { | |||
| handleRefreshWorkflowDraft, | |||
| } | |||
| } | |||
| @@ -18,6 +18,7 @@ type CommonHooksFnMap = { | |||
| } | |||
| ) => Promise<void> | |||
| syncWorkflowDraftWhenPageClose: () => void | |||
| handleRefreshWorkflowDraft: () => void | |||
| handleBackupDraft: () => void | |||
| handleLoadBackupDraft: () => void | |||
| handleRestoreFromPublishedWorkflow: (...args: any[]) => void | |||
| @@ -35,6 +36,7 @@ export type Shape = { | |||
| export const createHooksStore = ({ | |||
| doSyncWorkflowDraft = async () => noop(), | |||
| syncWorkflowDraftWhenPageClose = noop, | |||
| handleRefreshWorkflowDraft = noop, | |||
| handleBackupDraft = noop, | |||
| handleLoadBackupDraft = noop, | |||
| handleRestoreFromPublishedWorkflow = noop, | |||
| @@ -48,6 +50,7 @@ export const createHooksStore = ({ | |||
| refreshAll: props => set(state => ({ ...state, ...props })), | |||
| doSyncWorkflowDraft, | |||
| syncWorkflowDraftWhenPageClose, | |||
| handleRefreshWorkflowDraft, | |||
| handleBackupDraft, | |||
| handleLoadBackupDraft, | |||
| handleRestoreFromPublishedWorkflow, | |||
| @@ -16,3 +16,4 @@ export * from './use-shortcuts' | |||
| export * from './use-workflow-interactions' | |||
| export * from './use-workflow-mode' | |||
| export * from './use-format-time-from-now' | |||
| export * from './use-workflow-refresh-draft' | |||
| @@ -313,7 +313,6 @@ export const useWorkflowZoom = () => { | |||
| export const useWorkflowUpdate = () => { | |||
| const reactflow = useReactFlow() | |||
| const workflowStore = useWorkflowStore() | |||
| const { eventEmitter } = useEventEmitterContextContext() | |||
| const handleUpdateWorkflowCanvas = useCallback((payload: WorkflowDataUpdater) => { | |||
| @@ -333,32 +332,8 @@ export const useWorkflowUpdate = () => { | |||
| setViewport(viewport) | |||
| }, [eventEmitter, reactflow]) | |||
| const handleRefreshWorkflowDraft = useCallback(() => { | |||
| const { | |||
| appId, | |||
| setSyncWorkflowDraftHash, | |||
| setIsSyncingWorkflowDraft, | |||
| setEnvironmentVariables, | |||
| setEnvSecrets, | |||
| setConversationVariables, | |||
| } = workflowStore.getState() | |||
| setIsSyncingWorkflowDraft(true) | |||
| fetchWorkflowDraft(`/apps/${appId}/workflows/draft`).then((response) => { | |||
| handleUpdateWorkflowCanvas(response.graph as WorkflowDataUpdater) | |||
| setSyncWorkflowDraftHash(response.hash) | |||
| setEnvSecrets((response.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => { | |||
| acc[env.id] = env.value | |||
| return acc | |||
| }, {} as Record<string, string>)) | |||
| setEnvironmentVariables(response.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || []) | |||
| // #TODO chatVar sync# | |||
| setConversationVariables(response.conversation_variables || []) | |||
| }).finally(() => setIsSyncingWorkflowDraft(false)) | |||
| }, [handleUpdateWorkflowCanvas, workflowStore]) | |||
| return { | |||
| handleUpdateWorkflowCanvas, | |||
| handleRefreshWorkflowDraft, | |||
| } | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| import { useHooksStore } from '@/app/components/workflow/hooks-store' | |||
| export const useWorkflowRefreshDraft = () => { | |||
| const handleRefreshWorkflowDraft = useHooksStore(s => s.handleRefreshWorkflowDraft) | |||
| return { | |||
| handleRefreshWorkflowDraft, | |||
| } | |||
| } | |||
| @@ -44,7 +44,7 @@ import { | |||
| useShortcuts, | |||
| useWorkflow, | |||
| useWorkflowReadOnly, | |||
| useWorkflowUpdate, | |||
| useWorkflowRefreshDraft, | |||
| } from './hooks' | |||
| import CustomNode from './nodes' | |||
| import CustomNoteNode from './note-node' | |||
| @@ -160,7 +160,7 @@ export const Workflow: FC<WorkflowProps> = memo(({ | |||
| // eslint-disable-next-line react-hooks/exhaustive-deps | |||
| }, []) | |||
| const { handleRefreshWorkflowDraft } = useWorkflowUpdate() | |||
| const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft() | |||
| const handleSyncWorkflowDraftWhenPageClose = useCallback(() => { | |||
| if (document.visibilityState === 'hidden') | |||
| syncWorkflowDraftWhenPageClose() | |||