您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

form-hooks.ts 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { useCallback } from 'react';
  2. import { Operator } from './constant';
  3. import useGraphStore from './store';
  4. const ExcludedNodesMap = {
  5. // exclude some nodes downstream of the classification node
  6. [Operator.Categorize]: [Operator.Categorize, Operator.Answer, Operator.Begin],
  7. [Operator.Relevant]: [Operator.Begin],
  8. [Operator.Generate]: [Operator.Begin],
  9. };
  10. export const useBuildFormSelectOptions = (
  11. operatorName: Operator,
  12. selfId?: string, // exclude the current node
  13. ) => {
  14. const nodes = useGraphStore((state) => state.nodes);
  15. const buildCategorizeToOptions = useCallback(
  16. (toList: string[]) => {
  17. const excludedNodes: Operator[] = ExcludedNodesMap[operatorName] ?? [];
  18. return nodes
  19. .filter(
  20. (x) =>
  21. excludedNodes.every((y) => y !== x.data.label) &&
  22. x.id !== selfId &&
  23. !toList.some((y) => y === x.id), // filter out selected values ​​in other to fields from the current drop-down box options
  24. )
  25. .map((x) => ({ label: x.data.name, value: x.id }));
  26. },
  27. [nodes, operatorName, selfId],
  28. );
  29. return buildCategorizeToOptions;
  30. };
  31. export const useHandleFormSelectChange = (nodeId?: string) => {
  32. const { addEdge, deleteEdgeBySourceAndSourceHandle } = useGraphStore(
  33. (state) => state,
  34. );
  35. const handleSelectChange = useCallback(
  36. (name?: string) => (value?: string) => {
  37. if (nodeId && name) {
  38. if (value) {
  39. addEdge({
  40. source: nodeId,
  41. target: value,
  42. sourceHandle: name,
  43. targetHandle: null,
  44. });
  45. } else {
  46. // clear selected value
  47. deleteEdgeBySourceAndSourceHandle({
  48. source: nodeId,
  49. sourceHandle: name,
  50. });
  51. }
  52. }
  53. },
  54. [addEdge, nodeId, deleteEdgeBySourceAndSourceHandle],
  55. );
  56. return { handleSelectChange };
  57. };