mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-05-30 10:05:15 +08:00
chore: slice workflow refresh draft hook (#19292)
This commit is contained in:
parent
9565fe9b1b
commit
a6827493f0
@ -8,6 +8,7 @@ import type { WorkflowProps } from '@/app/components/workflow'
|
|||||||
import WorkflowChildren from './workflow-children'
|
import WorkflowChildren from './workflow-children'
|
||||||
import {
|
import {
|
||||||
useNodesSyncDraft,
|
useNodesSyncDraft,
|
||||||
|
useWorkflowRefreshDraft,
|
||||||
useWorkflowRun,
|
useWorkflowRun,
|
||||||
useWorkflowStartRun,
|
useWorkflowStartRun,
|
||||||
} from '../hooks'
|
} from '../hooks'
|
||||||
@ -32,6 +33,7 @@ const WorkflowMain = ({
|
|||||||
doSyncWorkflowDraft,
|
doSyncWorkflowDraft,
|
||||||
syncWorkflowDraftWhenPageClose,
|
syncWorkflowDraftWhenPageClose,
|
||||||
} = useNodesSyncDraft()
|
} = useNodesSyncDraft()
|
||||||
|
const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft()
|
||||||
const {
|
const {
|
||||||
handleBackupDraft,
|
handleBackupDraft,
|
||||||
handleLoadBackupDraft,
|
handleLoadBackupDraft,
|
||||||
@ -49,6 +51,7 @@ const WorkflowMain = ({
|
|||||||
return {
|
return {
|
||||||
syncWorkflowDraftWhenPageClose,
|
syncWorkflowDraftWhenPageClose,
|
||||||
doSyncWorkflowDraft,
|
doSyncWorkflowDraft,
|
||||||
|
handleRefreshWorkflowDraft,
|
||||||
handleBackupDraft,
|
handleBackupDraft,
|
||||||
handleLoadBackupDraft,
|
handleLoadBackupDraft,
|
||||||
handleRestoreFromPublishedWorkflow,
|
handleRestoreFromPublishedWorkflow,
|
||||||
@ -61,6 +64,7 @@ const WorkflowMain = ({
|
|||||||
}, [
|
}, [
|
||||||
syncWorkflowDraftWhenPageClose,
|
syncWorkflowDraftWhenPageClose,
|
||||||
doSyncWorkflowDraft,
|
doSyncWorkflowDraft,
|
||||||
|
handleRefreshWorkflowDraft,
|
||||||
handleBackupDraft,
|
handleBackupDraft,
|
||||||
handleLoadBackupDraft,
|
handleLoadBackupDraft,
|
||||||
handleRestoreFromPublishedWorkflow,
|
handleRestoreFromPublishedWorkflow,
|
||||||
|
@ -4,3 +4,4 @@ export * from './use-nodes-sync-draft'
|
|||||||
export * from './use-workflow-run'
|
export * from './use-workflow-run'
|
||||||
export * from './use-workflow-start-run'
|
export * from './use-workflow-start-run'
|
||||||
export * from './use-is-chat-mode'
|
export * from './use-is-chat-mode'
|
||||||
|
export * from './use-workflow-refresh-draft'
|
||||||
|
@ -6,20 +6,20 @@ import {
|
|||||||
useWorkflowStore,
|
useWorkflowStore,
|
||||||
} from '@/app/components/workflow/store'
|
} from '@/app/components/workflow/store'
|
||||||
import { BlockEnum } from '@/app/components/workflow/types'
|
import { BlockEnum } from '@/app/components/workflow/types'
|
||||||
import { useWorkflowUpdate } from '@/app/components/workflow/hooks'
|
|
||||||
import {
|
import {
|
||||||
useNodesReadOnly,
|
useNodesReadOnly,
|
||||||
} from '@/app/components/workflow/hooks/use-workflow'
|
} from '@/app/components/workflow/hooks/use-workflow'
|
||||||
import { syncWorkflowDraft } from '@/service/workflow'
|
import { syncWorkflowDraft } from '@/service/workflow'
|
||||||
import { useFeaturesStore } from '@/app/components/base/features/hooks'
|
import { useFeaturesStore } from '@/app/components/base/features/hooks'
|
||||||
import { API_PREFIX } from '@/config'
|
import { API_PREFIX } from '@/config'
|
||||||
|
import { useWorkflowRefreshDraft } from '.'
|
||||||
|
|
||||||
export const useNodesSyncDraft = () => {
|
export const useNodesSyncDraft = () => {
|
||||||
const store = useStoreApi()
|
const store = useStoreApi()
|
||||||
const workflowStore = useWorkflowStore()
|
const workflowStore = useWorkflowStore()
|
||||||
const featuresStore = useFeaturesStore()
|
const featuresStore = useFeaturesStore()
|
||||||
const { getNodesReadOnly } = useNodesReadOnly()
|
const { getNodesReadOnly } = useNodesReadOnly()
|
||||||
const { handleRefreshWorkflowDraft } = useWorkflowUpdate()
|
const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft()
|
||||||
const params = useParams()
|
const params = useParams()
|
||||||
|
|
||||||
const getPostParams = useCallback(() => {
|
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>
|
) => Promise<void>
|
||||||
syncWorkflowDraftWhenPageClose: () => void
|
syncWorkflowDraftWhenPageClose: () => void
|
||||||
|
handleRefreshWorkflowDraft: () => void
|
||||||
handleBackupDraft: () => void
|
handleBackupDraft: () => void
|
||||||
handleLoadBackupDraft: () => void
|
handleLoadBackupDraft: () => void
|
||||||
handleRestoreFromPublishedWorkflow: (...args: any[]) => void
|
handleRestoreFromPublishedWorkflow: (...args: any[]) => void
|
||||||
@ -35,6 +36,7 @@ export type Shape = {
|
|||||||
export const createHooksStore = ({
|
export const createHooksStore = ({
|
||||||
doSyncWorkflowDraft = async () => noop(),
|
doSyncWorkflowDraft = async () => noop(),
|
||||||
syncWorkflowDraftWhenPageClose = noop,
|
syncWorkflowDraftWhenPageClose = noop,
|
||||||
|
handleRefreshWorkflowDraft = noop,
|
||||||
handleBackupDraft = noop,
|
handleBackupDraft = noop,
|
||||||
handleLoadBackupDraft = noop,
|
handleLoadBackupDraft = noop,
|
||||||
handleRestoreFromPublishedWorkflow = noop,
|
handleRestoreFromPublishedWorkflow = noop,
|
||||||
@ -48,6 +50,7 @@ export const createHooksStore = ({
|
|||||||
refreshAll: props => set(state => ({ ...state, ...props })),
|
refreshAll: props => set(state => ({ ...state, ...props })),
|
||||||
doSyncWorkflowDraft,
|
doSyncWorkflowDraft,
|
||||||
syncWorkflowDraftWhenPageClose,
|
syncWorkflowDraftWhenPageClose,
|
||||||
|
handleRefreshWorkflowDraft,
|
||||||
handleBackupDraft,
|
handleBackupDraft,
|
||||||
handleLoadBackupDraft,
|
handleLoadBackupDraft,
|
||||||
handleRestoreFromPublishedWorkflow,
|
handleRestoreFromPublishedWorkflow,
|
||||||
|
@ -16,3 +16,4 @@ export * from './use-shortcuts'
|
|||||||
export * from './use-workflow-interactions'
|
export * from './use-workflow-interactions'
|
||||||
export * from './use-workflow-mode'
|
export * from './use-workflow-mode'
|
||||||
export * from './use-format-time-from-now'
|
export * from './use-format-time-from-now'
|
||||||
|
export * from './use-workflow-refresh-draft'
|
||||||
|
@ -313,7 +313,6 @@ export const useWorkflowZoom = () => {
|
|||||||
|
|
||||||
export const useWorkflowUpdate = () => {
|
export const useWorkflowUpdate = () => {
|
||||||
const reactflow = useReactFlow()
|
const reactflow = useReactFlow()
|
||||||
const workflowStore = useWorkflowStore()
|
|
||||||
const { eventEmitter } = useEventEmitterContextContext()
|
const { eventEmitter } = useEventEmitterContextContext()
|
||||||
|
|
||||||
const handleUpdateWorkflowCanvas = useCallback((payload: WorkflowDataUpdater) => {
|
const handleUpdateWorkflowCanvas = useCallback((payload: WorkflowDataUpdater) => {
|
||||||
@ -333,32 +332,8 @@ export const useWorkflowUpdate = () => {
|
|||||||
setViewport(viewport)
|
setViewport(viewport)
|
||||||
}, [eventEmitter, reactflow])
|
}, [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 {
|
return {
|
||||||
handleUpdateWorkflowCanvas,
|
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,
|
useShortcuts,
|
||||||
useWorkflow,
|
useWorkflow,
|
||||||
useWorkflowReadOnly,
|
useWorkflowReadOnly,
|
||||||
useWorkflowUpdate,
|
useWorkflowRefreshDraft,
|
||||||
} from './hooks'
|
} from './hooks'
|
||||||
import CustomNode from './nodes'
|
import CustomNode from './nodes'
|
||||||
import CustomNoteNode from './note-node'
|
import CustomNoteNode from './note-node'
|
||||||
@ -160,7 +160,7 @@ export const Workflow: FC<WorkflowProps> = memo(({
|
|||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
const { handleRefreshWorkflowDraft } = useWorkflowUpdate()
|
const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft()
|
||||||
const handleSyncWorkflowDraftWhenPageClose = useCallback(() => {
|
const handleSyncWorkflowDraftWhenPageClose = useCallback(() => {
|
||||||
if (document.visibilityState === 'hidden')
|
if (document.visibilityState === 'hidden')
|
||||||
syncWorkflowDraftWhenPageClose()
|
syncWorkflowDraftWhenPageClose()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user