mirror of
https://github.com/langgenius/dify.git
synced 2026-04-29 12:37:20 +08:00
sync draft
This commit is contained in:
parent
cf0c96e0d1
commit
f5a3069913
@ -7,6 +7,7 @@ import {
|
|||||||
} from '../store'
|
} from '../store'
|
||||||
import {
|
import {
|
||||||
useIsChatMode,
|
useIsChatMode,
|
||||||
|
useNodesSyncDraft,
|
||||||
useWorkflowRun,
|
useWorkflowRun,
|
||||||
} from '../hooks'
|
} from '../hooks'
|
||||||
import { WorkflowRunningStatus } from '../types'
|
import { WorkflowRunningStatus } from '../types'
|
||||||
@ -23,12 +24,14 @@ const RunMode = memo(() => {
|
|||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const workflowStore = useWorkflowStore()
|
const workflowStore = useWorkflowStore()
|
||||||
const { handleStopRun } = useWorkflowRun()
|
const { handleStopRun } = useWorkflowRun()
|
||||||
|
const { handleSyncWorkflowDraft } = useNodesSyncDraft()
|
||||||
const runningStatus = useStore(s => s.runningStatus)
|
const runningStatus = useStore(s => s.runningStatus)
|
||||||
const showInputsPanel = useStore(s => s.showInputsPanel)
|
const showInputsPanel = useStore(s => s.showInputsPanel)
|
||||||
const isRunning = runningStatus === WorkflowRunningStatus.Running
|
const isRunning = runningStatus === WorkflowRunningStatus.Running
|
||||||
|
|
||||||
const handleClick = () => {
|
const handleClick = () => {
|
||||||
workflowStore.setState({ showInputsPanel: true })
|
workflowStore.setState({ showInputsPanel: true })
|
||||||
|
handleSyncWorkflowDraft(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -76,9 +79,11 @@ RunMode.displayName = 'RunMode'
|
|||||||
const PreviewMode = memo(() => {
|
const PreviewMode = memo(() => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const { handleRunSetting } = useWorkflowRun()
|
const { handleRunSetting } = useWorkflowRun()
|
||||||
|
const { handleSyncWorkflowDraft } = useNodesSyncDraft()
|
||||||
const runningStatus = useStore(s => s.runningStatus)
|
const runningStatus = useStore(s => s.runningStatus)
|
||||||
|
|
||||||
const handleClick = () => {
|
const handleClick = () => {
|
||||||
|
handleSyncWorkflowDraft(true)
|
||||||
handleRunSetting()
|
handleRunSetting()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,7 @@ export const useNodeDataUpdate = () => {
|
|||||||
return
|
return
|
||||||
|
|
||||||
handleNodeDataUpdate(payload)
|
handleNodeDataUpdate(payload)
|
||||||
handleSyncWorkflowDraft(true)
|
handleSyncWorkflowDraft()
|
||||||
}, [handleSyncWorkflowDraft, handleNodeDataUpdate, workflowStore])
|
}, [handleSyncWorkflowDraft, handleNodeDataUpdate, workflowStore])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
import produce from 'immer'
|
import produce from 'immer'
|
||||||
import { useDebounceFn } from 'ahooks'
|
|
||||||
import {
|
import {
|
||||||
useReactFlow,
|
useReactFlow,
|
||||||
useStoreApi,
|
useStoreApi,
|
||||||
} from 'reactflow'
|
} from 'reactflow'
|
||||||
import { useWorkflowStore } from '../store'
|
import {
|
||||||
|
useStore,
|
||||||
|
useWorkflowStore,
|
||||||
|
} from '../store'
|
||||||
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 { useStore as useAppStore } from '@/app/components/app/store'
|
import { useStore as useAppStore } from '@/app/components/app/store'
|
||||||
@ -15,8 +17,9 @@ export const useNodesSyncDraft = () => {
|
|||||||
const workflowStore = useWorkflowStore()
|
const workflowStore = useWorkflowStore()
|
||||||
const reactFlow = useReactFlow()
|
const reactFlow = useReactFlow()
|
||||||
const featuresStore = useFeaturesStore()
|
const featuresStore = useFeaturesStore()
|
||||||
|
const debouncedSyncWorkflowDraft = useStore(s => s.debouncedSyncWorkflowDraft)
|
||||||
|
|
||||||
const shouldDebouncedSyncWorkflowDraft = useCallback(() => {
|
const doSyncWorkflowDraft = useCallback(() => {
|
||||||
const {
|
const {
|
||||||
getNodes,
|
getNodes,
|
||||||
edges,
|
edges,
|
||||||
@ -67,12 +70,7 @@ export const useNodesSyncDraft = () => {
|
|||||||
}
|
}
|
||||||
}, [store, reactFlow, featuresStore, workflowStore])
|
}, [store, reactFlow, featuresStore, workflowStore])
|
||||||
|
|
||||||
const { run: debouncedSyncWorkflowDraft } = useDebounceFn(shouldDebouncedSyncWorkflowDraft, {
|
const handleSyncWorkflowDraft = useCallback((sync?: boolean) => {
|
||||||
wait: 2000,
|
|
||||||
trailing: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
const handleSyncWorkflowDraft = useCallback((shouldDelay?: boolean) => {
|
|
||||||
const {
|
const {
|
||||||
runningStatus,
|
runningStatus,
|
||||||
isRestoring,
|
isRestoring,
|
||||||
@ -81,11 +79,11 @@ export const useNodesSyncDraft = () => {
|
|||||||
if (runningStatus || isRestoring)
|
if (runningStatus || isRestoring)
|
||||||
return
|
return
|
||||||
|
|
||||||
if (shouldDelay)
|
if (sync)
|
||||||
debouncedSyncWorkflowDraft()
|
doSyncWorkflowDraft()
|
||||||
else
|
else
|
||||||
shouldDebouncedSyncWorkflowDraft()
|
debouncedSyncWorkflowDraft(doSyncWorkflowDraft)
|
||||||
}, [debouncedSyncWorkflowDraft, shouldDebouncedSyncWorkflowDraft, workflowStore])
|
}, [debouncedSyncWorkflowDraft, doSyncWorkflowDraft, workflowStore])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
handleSyncWorkflowDraft,
|
handleSyncWorkflowDraft,
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import {
|
|||||||
create,
|
create,
|
||||||
useStore as useZustandStore,
|
useStore as useZustandStore,
|
||||||
} from 'zustand'
|
} from 'zustand'
|
||||||
|
import { debounce } from 'lodash-es'
|
||||||
import type { Viewport } from 'reactflow'
|
import type { Viewport } from 'reactflow'
|
||||||
import type {
|
import type {
|
||||||
HelpLineHorizontalPosition,
|
HelpLineHorizontalPosition,
|
||||||
@ -71,6 +72,7 @@ type Action = {
|
|||||||
setNodesDefaultConfigs: (nodesDefaultConfigs: Record<string, any>) => void
|
setNodesDefaultConfigs: (nodesDefaultConfigs: Record<string, any>) => void
|
||||||
setNodeAnimation: (nodeAnimation: boolean) => void
|
setNodeAnimation: (nodeAnimation: boolean) => void
|
||||||
setIsRestoring: (isRestoring: boolean) => void
|
setIsRestoring: (isRestoring: boolean) => void
|
||||||
|
debouncedSyncWorkflowDraft: (fn: () => void) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export const createWorkflowStore = () => {
|
export const createWorkflowStore = () => {
|
||||||
@ -117,6 +119,9 @@ export const createWorkflowStore = () => {
|
|||||||
setNodeAnimation: nodeAnimation => set(() => ({ nodeAnimation })),
|
setNodeAnimation: nodeAnimation => set(() => ({ nodeAnimation })),
|
||||||
isRestoring: false,
|
isRestoring: false,
|
||||||
setIsRestoring: isRestoring => set(() => ({ isRestoring })),
|
setIsRestoring: isRestoring => set(() => ({ isRestoring })),
|
||||||
|
debouncedSyncWorkflowDraft: debounce((syncWorkflowDraft) => {
|
||||||
|
syncWorkflowDraft()
|
||||||
|
}, 5000),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user