Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

use-show-drawer.tsx 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import { useSetModalState } from '@/hooks/common-hooks';
  2. import { Node, NodeMouseHandler } from '@xyflow/react';
  3. import get from 'lodash/get';
  4. import { useCallback, useEffect } from 'react';
  5. import { Operator } from '../constant';
  6. import { BeginQuery } from '../interface';
  7. import useGraphStore from '../store';
  8. import { useGetBeginNodeDataQuery } from './use-get-begin-query';
  9. import { useSaveGraph } from './use-save-graph';
  10. export const useShowFormDrawer = () => {
  11. const {
  12. clickedNodeId: clickNodeId,
  13. setClickedNodeId,
  14. getNode,
  15. } = useGraphStore((state) => state);
  16. const {
  17. visible: formDrawerVisible,
  18. hideModal: hideFormDrawer,
  19. showModal: showFormDrawer,
  20. } = useSetModalState();
  21. const handleShow = useCallback(
  22. (node: Node) => {
  23. setClickedNodeId(node.id);
  24. showFormDrawer();
  25. },
  26. [showFormDrawer, setClickedNodeId],
  27. );
  28. return {
  29. formDrawerVisible,
  30. hideFormDrawer,
  31. showFormDrawer: handleShow,
  32. clickedNode: getNode(clickNodeId),
  33. };
  34. };
  35. export const useShowSingleDebugDrawer = () => {
  36. const { visible, showModal, hideModal } = useSetModalState();
  37. const { saveGraph } = useSaveGraph();
  38. const showSingleDebugDrawer = useCallback(async () => {
  39. const saveRet = await saveGraph();
  40. if (saveRet?.code === 0) {
  41. showModal();
  42. }
  43. }, [saveGraph, showModal]);
  44. return {
  45. singleDebugDrawerVisible: visible,
  46. hideSingleDebugDrawer: hideModal,
  47. showSingleDebugDrawer,
  48. };
  49. };
  50. const ExcludedNodes = [Operator.IterationStart, Operator.Note];
  51. export function useShowDrawer({
  52. drawerVisible,
  53. hideDrawer,
  54. }: {
  55. drawerVisible: boolean;
  56. hideDrawer(): void;
  57. }) {
  58. const {
  59. visible: runVisible,
  60. showModal: showRunModal,
  61. hideModal: hideRunModal,
  62. } = useSetModalState();
  63. const {
  64. visible: chatVisible,
  65. showModal: showChatModal,
  66. hideModal: hideChatModal,
  67. } = useSetModalState();
  68. const {
  69. singleDebugDrawerVisible,
  70. showSingleDebugDrawer,
  71. hideSingleDebugDrawer,
  72. } = useShowSingleDebugDrawer();
  73. const { formDrawerVisible, hideFormDrawer, showFormDrawer, clickedNode } =
  74. useShowFormDrawer();
  75. const getBeginNodeDataQuery = useGetBeginNodeDataQuery();
  76. useEffect(() => {
  77. if (drawerVisible) {
  78. const query: BeginQuery[] = getBeginNodeDataQuery();
  79. if (query.length > 0) {
  80. showRunModal();
  81. hideChatModal();
  82. } else {
  83. showChatModal();
  84. hideRunModal();
  85. }
  86. }
  87. }, [
  88. hideChatModal,
  89. hideRunModal,
  90. showChatModal,
  91. showRunModal,
  92. drawerVisible,
  93. getBeginNodeDataQuery,
  94. ]);
  95. const hideRunOrChatDrawer = useCallback(() => {
  96. hideChatModal();
  97. hideRunModal();
  98. hideDrawer();
  99. }, [hideChatModal, hideDrawer, hideRunModal]);
  100. const onPaneClick = useCallback(() => {
  101. hideFormDrawer();
  102. }, [hideFormDrawer]);
  103. const onNodeClick: NodeMouseHandler = useCallback(
  104. (e, node) => {
  105. if (!ExcludedNodes.some((x) => x === node.data.label)) {
  106. hideSingleDebugDrawer();
  107. hideRunOrChatDrawer();
  108. showFormDrawer(node);
  109. }
  110. // handle single debug icon click
  111. if (
  112. get(e.target, 'dataset.play') === 'true' ||
  113. get(e.target, 'parentNode.dataset.play') === 'true'
  114. ) {
  115. showSingleDebugDrawer();
  116. }
  117. },
  118. [
  119. hideRunOrChatDrawer,
  120. hideSingleDebugDrawer,
  121. showFormDrawer,
  122. showSingleDebugDrawer,
  123. ],
  124. );
  125. return {
  126. chatVisible,
  127. runVisible,
  128. onPaneClick,
  129. singleDebugDrawerVisible,
  130. showSingleDebugDrawer,
  131. hideSingleDebugDrawer,
  132. formDrawerVisible,
  133. showFormDrawer,
  134. clickedNode,
  135. onNodeClick,
  136. hideFormDrawer,
  137. hideRunOrChatDrawer,
  138. showChatModal,
  139. };
  140. }