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, | |
| }; | |
| } | |