mirror of
https://github.com/langgenius/dify.git
synced 2026-04-27 11:06:46 +08:00
sync workflow draft
This commit is contained in:
parent
76fe3c1d76
commit
54d9cdaabf
@ -24,6 +24,7 @@ import { getLayoutByDagre } from './utils'
|
|||||||
import { useStore } from './store'
|
import { useStore } 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'
|
||||||
|
|
||||||
export const useNodesInitialData = () => {
|
export const useNodesInitialData = () => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
@ -46,17 +47,20 @@ export const useWorkflow = () => {
|
|||||||
getNodes,
|
getNodes,
|
||||||
edges,
|
edges,
|
||||||
} = store.getState()
|
} = store.getState()
|
||||||
|
const appId = useAppStore.getState().appDetail?.id
|
||||||
|
|
||||||
syncWorkflowDraft({
|
if (appId) {
|
||||||
url: `/apps/${''}/workflows/draft`,
|
syncWorkflowDraft({
|
||||||
params: {
|
url: `/apps/${appId}/workflows/draft`,
|
||||||
graph: {
|
params: {
|
||||||
nodes: getNodes(),
|
graph: {
|
||||||
edges,
|
nodes: getNodes(),
|
||||||
|
edges,
|
||||||
|
},
|
||||||
|
features: {},
|
||||||
},
|
},
|
||||||
features: {},
|
})
|
||||||
},
|
}
|
||||||
})
|
|
||||||
}, [store])
|
}, [store])
|
||||||
|
|
||||||
const handleLayout = useCallback(async () => {
|
const handleLayout = useCallback(async () => {
|
||||||
@ -136,7 +140,8 @@ export const useWorkflow = () => {
|
|||||||
} = useStore.getState()
|
} = useStore.getState()
|
||||||
setIsDragging(false)
|
setIsDragging(false)
|
||||||
setHelpLine()
|
setHelpLine()
|
||||||
}, [])
|
handleSyncWorkflowDraft()
|
||||||
|
}, [handleSyncWorkflowDraft])
|
||||||
|
|
||||||
const handleNodeEnter = useCallback<NodeMouseHandler>((_, node) => {
|
const handleNodeEnter = useCallback<NodeMouseHandler>((_, node) => {
|
||||||
const {
|
const {
|
||||||
@ -198,7 +203,8 @@ export const useWorkflow = () => {
|
|||||||
selectedNode.data._selected = true
|
selectedNode.data._selected = true
|
||||||
})
|
})
|
||||||
setNodes(newNodes)
|
setNodes(newNodes)
|
||||||
}, [store])
|
handleSyncWorkflowDraft()
|
||||||
|
}, [store, handleSyncWorkflowDraft])
|
||||||
|
|
||||||
const handleNodeClick = useCallback<NodeMouseHandler>((_, node) => {
|
const handleNodeClick = useCallback<NodeMouseHandler>((_, node) => {
|
||||||
if (useStore.getState().isDragging)
|
if (useStore.getState().isDragging)
|
||||||
@ -233,7 +239,8 @@ export const useWorkflow = () => {
|
|||||||
return filtered
|
return filtered
|
||||||
})
|
})
|
||||||
setEdges(newEdges)
|
setEdges(newEdges)
|
||||||
}, [store])
|
handleSyncWorkflowDraft()
|
||||||
|
}, [store, handleSyncWorkflowDraft])
|
||||||
|
|
||||||
const handleNodeDelete = useCallback((nodeId: string) => {
|
const handleNodeDelete = useCallback((nodeId: string) => {
|
||||||
const {
|
const {
|
||||||
@ -255,7 +262,8 @@ export const useWorkflow = () => {
|
|||||||
return draft.filter(edge => !connectedEdges.find(connectedEdge => connectedEdge.id === edge.id))
|
return draft.filter(edge => !connectedEdges.find(connectedEdge => connectedEdge.id === edge.id))
|
||||||
})
|
})
|
||||||
setEdges(newEdges)
|
setEdges(newEdges)
|
||||||
}, [store])
|
handleSyncWorkflowDraft()
|
||||||
|
}, [store, handleSyncWorkflowDraft])
|
||||||
|
|
||||||
const handleNodeDataUpdate = useCallback(({ id, data }: { id: string; data: Record<string, any> }) => {
|
const handleNodeDataUpdate = useCallback(({ id, data }: { id: string; data: Record<string, any> }) => {
|
||||||
const {
|
const {
|
||||||
@ -310,7 +318,8 @@ export const useWorkflow = () => {
|
|||||||
draft.push(newEdge)
|
draft.push(newEdge)
|
||||||
})
|
})
|
||||||
setEdges(newEdges)
|
setEdges(newEdges)
|
||||||
}, [store, nodesInitialData])
|
handleSyncWorkflowDraft()
|
||||||
|
}, [store, nodesInitialData, handleSyncWorkflowDraft])
|
||||||
|
|
||||||
const handleNodeChange = useCallback((currentNodeId: string, nodeType: BlockEnum, sourceHandle?: string) => {
|
const handleNodeChange = useCallback((currentNodeId: string, nodeType: BlockEnum, sourceHandle?: string) => {
|
||||||
const {
|
const {
|
||||||
@ -360,8 +369,9 @@ export const useWorkflow = () => {
|
|||||||
return filtered
|
return filtered
|
||||||
})
|
})
|
||||||
setEdges(newEdges)
|
setEdges(newEdges)
|
||||||
|
handleSyncWorkflowDraft()
|
||||||
}
|
}
|
||||||
}, [store, nodesInitialData])
|
}, [store, nodesInitialData, handleSyncWorkflowDraft])
|
||||||
|
|
||||||
const handleEdgeEnter = useCallback<EdgeMouseHandler>((_, edge) => {
|
const handleEdgeEnter = useCallback<EdgeMouseHandler>((_, edge) => {
|
||||||
const {
|
const {
|
||||||
@ -401,7 +411,8 @@ export const useWorkflow = () => {
|
|||||||
draft.splice(index, 1)
|
draft.splice(index, 1)
|
||||||
})
|
})
|
||||||
setEdges(newEdges)
|
setEdges(newEdges)
|
||||||
}, [store])
|
handleSyncWorkflowDraft()
|
||||||
|
}, [store, handleSyncWorkflowDraft])
|
||||||
|
|
||||||
const handleEdgesChange = useCallback<OnEdgesChange>((changes) => {
|
const handleEdgesChange = useCallback<OnEdgesChange>((changes) => {
|
||||||
const {
|
const {
|
||||||
|
|||||||
@ -3,7 +3,6 @@ import {
|
|||||||
memo,
|
memo,
|
||||||
useMemo,
|
useMemo,
|
||||||
} from 'react'
|
} from 'react'
|
||||||
import { useParams } from 'next/navigation'
|
|
||||||
import useSWR from 'swr'
|
import useSWR from 'swr'
|
||||||
import { useKeyPress } from 'ahooks'
|
import { useKeyPress } from 'ahooks'
|
||||||
import ReactFlow, {
|
import ReactFlow, {
|
||||||
@ -120,10 +119,7 @@ const WorkflowWrap: FC<WorkflowProps> = ({
|
|||||||
edges,
|
edges,
|
||||||
}) => {
|
}) => {
|
||||||
const appDetail = useAppStore(state => state.appDetail)
|
const appDetail = useAppStore(state => state.appDetail)
|
||||||
console.log(appDetail?.name)
|
const { data, isLoading, error } = useSWR(appDetail?.id ? `/apps/${appDetail.id}/workflows/draft` : null, fetchWorkflowDraft)
|
||||||
console.log(appDetail?.description)
|
|
||||||
const appId = useParams().appId
|
|
||||||
const { data, isLoading, error } = useSWR(`/apps/${appId}/workflows/draft`, fetchWorkflowDraft)
|
|
||||||
const nodesInitialData = useNodesInitialData()
|
const nodesInitialData = useNodesInitialData()
|
||||||
|
|
||||||
const startNode = {
|
const startNode = {
|
||||||
@ -155,9 +151,9 @@ const WorkflowWrap: FC<WorkflowProps> = ({
|
|||||||
return []
|
return []
|
||||||
}, [data, nodes])
|
}, [data, nodes])
|
||||||
|
|
||||||
if (error) {
|
if (error && appDetail) {
|
||||||
syncWorkflowDraft({
|
syncWorkflowDraft({
|
||||||
url: `/apps/${appId}/workflows/draft`,
|
url: `/apps/${appDetail.id}/workflows/draft`,
|
||||||
params: {
|
params: {
|
||||||
graph: {
|
graph: {
|
||||||
nodes: [startNode],
|
nodes: [startNode],
|
||||||
|
|||||||
@ -31,7 +31,7 @@ const NodeControl: FC<NodeControlProps> = ({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
<div
|
<div
|
||||||
className='flex items-center justify-center w-5 h-5 cursor-pointer'
|
className='flex items-center justify-center w-5 h-5 rounded-md cursor-pointer hover:bg-black/5'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
handleNodeDataUpdate({
|
handleNodeDataUpdate({
|
||||||
id: nodeId,
|
id: nodeId,
|
||||||
@ -45,7 +45,7 @@ const NodeControl: FC<NodeControlProps> = ({
|
|||||||
: <Play className='w-3 h-3' />
|
: <Play className='w-3 h-3' />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div className='flex items-center justify-center w-5 h-5 cursor-pointer'>
|
<div className='flex items-center justify-center w-5 h-5 rounded-md cursor-pointer hover:bg-black/5'>
|
||||||
<DotsHorizontal className='w-3 h-3' />
|
<DotsHorizontal className='w-3 h-3' />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user