balibabu
Feat: The Begin and IterationStart operators cannot be deleted using shortcut keys #4287 (#4288)
b1ea792
import { useSetModalState } from '@/hooks/common-hooks'; | |
import { Node, NodeMouseHandler } from '@xyflow/react'; | |
import get from 'lodash/get'; | |
import { useCallback, useEffect } from 'react'; | |
import { Operator } from '../constant'; | |
import { BeginQuery } from '../interface'; | |
import useGraphStore from '../store'; | |
import { useGetBeginNodeDataQuery } from './use-get-begin-query'; | |
import { useSaveGraph } from './use-save-graph'; | |
export const useShowFormDrawer = () => { | |
const { | |
clickedNodeId: clickNodeId, | |
setClickedNodeId, | |
getNode, | |
} = useGraphStore((state) => state); | |
const { | |
visible: formDrawerVisible, | |
hideModal: hideFormDrawer, | |
showModal: showFormDrawer, | |
} = useSetModalState(); | |
const handleShow = useCallback( | |
(node: Node) => { | |
setClickedNodeId(node.id); | |
showFormDrawer(); | |
}, | |
[showFormDrawer, setClickedNodeId], | |
); | |
return { | |
formDrawerVisible, | |
hideFormDrawer, | |
showFormDrawer: handleShow, | |
clickedNode: getNode(clickNodeId), | |
}; | |
}; | |
export const useShowSingleDebugDrawer = () => { | |
const { visible, showModal, hideModal } = useSetModalState(); | |
const { saveGraph } = useSaveGraph(); | |
const showSingleDebugDrawer = useCallback(async () => { | |
const saveRet = await saveGraph(); | |
if (saveRet?.code === 0) { | |
showModal(); | |
} | |
}, [saveGraph, showModal]); | |
return { | |
singleDebugDrawerVisible: visible, | |
hideSingleDebugDrawer: hideModal, | |
showSingleDebugDrawer, | |
}; | |
}; | |
const ExcludedNodes = [Operator.IterationStart, Operator.Note]; | |
export function useShowDrawer({ | |
drawerVisible, | |
hideDrawer, | |
}: { | |
drawerVisible: boolean; | |
hideDrawer(): void; | |
}) { | |
const { | |
visible: runVisible, | |
showModal: showRunModal, | |
hideModal: hideRunModal, | |
} = useSetModalState(); | |
const { | |
visible: chatVisible, | |
showModal: showChatModal, | |
hideModal: hideChatModal, | |
} = useSetModalState(); | |
const { | |
singleDebugDrawerVisible, | |
showSingleDebugDrawer, | |
hideSingleDebugDrawer, | |
} = useShowSingleDebugDrawer(); | |
const { formDrawerVisible, hideFormDrawer, showFormDrawer, clickedNode } = | |
useShowFormDrawer(); | |
const getBeginNodeDataQuery = useGetBeginNodeDataQuery(); | |
useEffect(() => { | |
if (drawerVisible) { | |
const query: BeginQuery[] = getBeginNodeDataQuery(); | |
if (query.length > 0) { | |
showRunModal(); | |
hideChatModal(); | |
} else { | |
showChatModal(); | |
hideRunModal(); | |
} | |
} | |
}, [ | |
hideChatModal, | |
hideRunModal, | |
showChatModal, | |
showRunModal, | |
drawerVisible, | |
getBeginNodeDataQuery, | |
]); | |
const hideRunOrChatDrawer = useCallback(() => { | |
hideChatModal(); | |
hideRunModal(); | |
hideDrawer(); | |
}, [hideChatModal, hideDrawer, hideRunModal]); | |
const onPaneClick = useCallback(() => { | |
hideFormDrawer(); | |
}, [hideFormDrawer]); | |
const onNodeClick: NodeMouseHandler = useCallback( | |
(e, node) => { | |
if (!ExcludedNodes.some((x) => x === node.data.label)) { | |
hideSingleDebugDrawer(); | |
hideRunOrChatDrawer(); | |
showFormDrawer(node); | |
} | |
// handle single debug icon click | |
if ( | |
get(e.target, 'dataset.play') === 'true' || | |
get(e.target, 'parentNode.dataset.play') === 'true' | |
) { | |
showSingleDebugDrawer(); | |
} | |
}, | |
[ | |
hideRunOrChatDrawer, | |
hideSingleDebugDrawer, | |
showFormDrawer, | |
showSingleDebugDrawer, | |
], | |
); | |
return { | |
chatVisible, | |
runVisible, | |
onPaneClick, | |
singleDebugDrawerVisible, | |
showSingleDebugDrawer, | |
hideSingleDebugDrawer, | |
formDrawerVisible, | |
showFormDrawer, | |
clickedNode, | |
onNodeClick, | |
hideFormDrawer, | |
hideRunOrChatDrawer, | |
showChatModal, | |
}; | |
} | |