Commit 22e7393b authored by StyleZhang's avatar StyleZhang

fix

parent 0eb482f3
...@@ -70,7 +70,7 @@ export const useWorkflow = () => { ...@@ -70,7 +70,7 @@ export const useWorkflow = () => {
const nodesInitialData = useNodesInitialData() const nodesInitialData = useNodesInitialData()
const featuresStore = useFeaturesStore() const featuresStore = useFeaturesStore()
const shouldDebouncedSyncWorkflowDraft = () => { const shouldDebouncedSyncWorkflowDraft = useCallback(() => {
const { const {
getNodes, getNodes,
edges, edges,
...@@ -111,13 +111,20 @@ export const useWorkflow = () => { ...@@ -111,13 +111,20 @@ export const useWorkflow = () => {
useStore.setState({ draftUpdatedAt: res.updated_at }) useStore.setState({ draftUpdatedAt: res.updated_at })
}) })
} }
} }, [store, reactFlow, featuresStore])
const { run: handleSyncWorkflowDraft } = useDebounceFn(shouldDebouncedSyncWorkflowDraft, { const { run: debouncedSyncWorkflowDraft } = useDebounceFn(shouldDebouncedSyncWorkflowDraft, {
wait: 2000, wait: 2000,
trailing: true, trailing: true,
}) })
const handleSyncWorkflowDraft = useCallback((shouldDelay?: boolean) => {
if (shouldDelay)
debouncedSyncWorkflowDraft()
else
shouldDebouncedSyncWorkflowDraft()
}, [debouncedSyncWorkflowDraft, shouldDebouncedSyncWorkflowDraft])
const handleLayout = useCallback(async () => { const handleLayout = useCallback(async () => {
const { const {
getNodes, getNodes,
...@@ -332,11 +339,11 @@ export const useWorkflow = () => { ...@@ -332,11 +339,11 @@ export const useWorkflow = () => {
if (!cancelSelection && selectedNode?.id === nodeId) if (!cancelSelection && selectedNode?.id === nodeId)
return return
const newNodes = produce(getNodes(), (draft) => { const newNodes = produce(nodes, (draft) => {
draft.forEach(node => node.data.selected = false) draft.forEach(node => node.data.selected = false)
const selectedNode = draft.find(node => node.id === nodeId)! const selectedNode = draft.find(node => node.id === nodeId)!
if (!cancelSelection) if (!cancelSelection && selectedNode)
selectedNode.data.selected = true selectedNode.data.selected = true
}) })
setNodes(newNodes) setNodes(newNodes)
...@@ -433,7 +440,7 @@ export const useWorkflow = () => { ...@@ -433,7 +440,7 @@ export const useWorkflow = () => {
currentNode.data = { ...currentNode.data, ...data } currentNode.data = { ...currentNode.data, ...data }
}) })
setNodes(newNodes) setNodes(newNodes)
handleSyncWorkflowDraft() handleSyncWorkflowDraft(true)
}, [store, handleSyncWorkflowDraft]) }, [store, handleSyncWorkflowDraft])
const handleNodeAddNext = useCallback(( const handleNodeAddNext = useCallback((
......
import { memo, useMemo } from 'react' import { memo } from 'react'
import { import {
getConnectedEdges, getConnectedEdges,
getOutgoers, getOutgoers,
...@@ -10,10 +10,10 @@ import type { ...@@ -10,10 +10,10 @@ import type {
Branch, Branch,
Node, Node,
} from '../../../../types' } from '../../../../types'
import { BlockEnum } from '../../../../types'
import Add from './add' import Add from './add'
import Item from './item' import Item from './item'
import Line from './line' import Line from './line'
import { BlockEnum } from '@/app/components/workflow/types'
type NextStepProps = { type NextStepProps = {
selectedNode: Node selectedNode: Node
...@@ -22,15 +22,8 @@ const NextStep = ({ ...@@ -22,15 +22,8 @@ const NextStep = ({
selectedNode, selectedNode,
}: NextStepProps) => { }: NextStepProps) => {
const store = useStoreApi() const store = useStoreApi()
const branches = useMemo(() => { const branches = selectedNode.data._targetBranches
const nodeData = selectedNode.data const nodeWithBranches = selectedNode.data.type === BlockEnum.IfElse || selectedNode.data.type === BlockEnum.QuestionClassifier
if (nodeData.type === BlockEnum.IfElse)
return nodeData._targetBranches
if (nodeData.type === BlockEnum.QuestionClassifier)
return (nodeData as any).classes
}, [selectedNode])
const edges = useEdges() const edges = useEdges()
const outgoers = getOutgoers(selectedNode as Node, store.getState().getNodes(), edges) const outgoers = getOutgoers(selectedNode as Node, store.getState().getNodes(), edges)
const connectedEdges = getConnectedEdges([selectedNode] as Node[], edges).filter(edge => edge.source === selectedNode!.id) const connectedEdges = getConnectedEdges([selectedNode] as Node[], edges).filter(edge => edge.source === selectedNode!.id)
...@@ -46,7 +39,7 @@ const NextStep = ({ ...@@ -46,7 +39,7 @@ const NextStep = ({
<Line linesNumber={branches ? branches.length : 1} /> <Line linesNumber={branches ? branches.length : 1} />
<div className='grow'> <div className='grow'>
{ {
!branches && !!outgoers.length && ( !nodeWithBranches && !!outgoers.length && (
<Item <Item
nodeId={outgoers[0].id} nodeId={outgoers[0].id}
data={outgoers[0].data} data={outgoers[0].data}
...@@ -55,7 +48,7 @@ const NextStep = ({ ...@@ -55,7 +48,7 @@ const NextStep = ({
) )
} }
{ {
!branches && !outgoers.length && ( !nodeWithBranches && !outgoers.length && (
<Add <Add
nodeId={selectedNode!.id} nodeId={selectedNode!.id}
sourceHandle='source' sourceHandle='source'
...@@ -63,7 +56,7 @@ const NextStep = ({ ...@@ -63,7 +56,7 @@ const NextStep = ({
) )
} }
{ {
branches?.length && ( !!branches?.length && nodeWithBranches && (
branches.map((branch: Branch) => { branches.map((branch: Branch) => {
const connected = connectedEdges.find(edge => edge.sourceHandle === branch.id) const connected = connectedEdges.find(edge => edge.sourceHandle === branch.id)
const target = outgoers.find(outgoer => outgoer.id === connected?.target) const target = outgoers.find(outgoer => outgoer.id === connected?.target)
......
...@@ -35,6 +35,7 @@ const useConfig = (id: string, payload: QuestionClassifierNodeType) => { ...@@ -35,6 +35,7 @@ const useConfig = (id: string, payload: QuestionClassifierNodeType) => {
const handleClassesChange = useCallback((newClasses: any) => { const handleClassesChange = useCallback((newClasses: any) => {
const newInputs = produce(inputs, (draft) => { const newInputs = produce(inputs, (draft) => {
draft.classes = newClasses draft.classes = newClasses
draft._targetBranches = newClasses
}) })
setInputs(newInputs) setInputs(newInputs)
}, [inputs, setInputs]) }, [inputs, setInputs])
......
...@@ -95,7 +95,7 @@ const ZoomInOut: FC = () => { ...@@ -95,7 +95,7 @@ const ZoomInOut: FC = () => {
<ChevronDown className='ml-1 w-4 h-4' /> <ChevronDown className='ml-1 w-4 h-4' />
</div> </div>
</PortalToFollowElemTrigger> </PortalToFollowElemTrigger>
<PortalToFollowElemContent> <PortalToFollowElemContent className='z-10'>
<div className='w-[168px] rounded-lg border-[0.5px] border-gray-200 bg-white shadow-lg'> <div className='w-[168px] rounded-lg border-[0.5px] border-gray-200 bg-white shadow-lg'>
{ {
ZOOM_IN_OUT_OPTIONS.map((options, i) => ( ZOOM_IN_OUT_OPTIONS.map((options, i) => (
......
import produce from 'immer'
import { import {
getConnectedEdges, getConnectedEdges,
getOutgoers, getOutgoers,
...@@ -82,42 +81,38 @@ export const nodesLevelOrderTraverse = ( ...@@ -82,42 +81,38 @@ export const nodesLevelOrderTraverse = (
} }
export const initialNodes = (nodes: Node[]) => { export const initialNodes = (nodes: Node[]) => {
const newNodes = produce(nodes, (draft) => { return nodes.map((node) => {
draft.forEach((node) => { node.type = 'custom'
node.type = 'custom'
if (node.data.type === BlockEnum.IfElse) {
if (node.data.type === BlockEnum.IfElse) { node.data._targetBranches = [
node.data._targetBranches = [ {
{ id: 'true',
id: 'true', name: 'IS TRUE',
name: 'IS TRUE', },
}, {
{ id: 'false',
id: 'false', name: 'IS FALSE',
name: 'IS FALSE', },
}, ]
] }
}
if (node.data.type === BlockEnum.QuestionClassifier) { if (node.data.type === BlockEnum.QuestionClassifier) {
node.data._targetBranches = (node.data as QuestionClassifierNodeType).classes.map((topic) => { node.data._targetBranches = (node.data as QuestionClassifierNodeType).classes.map((topic) => {
return topic return topic
}) })
} }
})
})
return newNodes return node
})
} }
export const initialEdges = (edges: Edge[]) => { export const initialEdges = (edges: Edge[]) => {
const newEdges = produce(edges, (draft) => { return edges.map((edge) => {
draft.forEach((edge) => { edge.type = 'custom'
edge.type = 'custom'
})
})
return newEdges return edge
})
} }
export type PositionMap = { export type PositionMap = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment