|
import { useSetModalState } from '@/hooks/common-hooks'; |
|
import get from 'lodash/get'; |
|
import { useCallback, useEffect } from 'react'; |
|
import { Node, NodeMouseHandler } from 'reactflow'; |
|
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); |
|
} |
|
|
|
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, |
|
}; |
|
} |
|
|