Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

form-hooks.ts 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { useTranslate } from '@/hooks/common-hooks';
  2. import { useCallback, useMemo } from 'react';
  3. import { Operator, RestrictedUpstreamMap } from './constant';
  4. import useGraphStore from './store';
  5. export const useBuildFormSelectOptions = (
  6. operatorName: Operator,
  7. selfId?: string, // exclude the current node
  8. ) => {
  9. const nodes = useGraphStore((state) => state.nodes);
  10. const buildCategorizeToOptions = useCallback(
  11. (toList: string[]) => {
  12. const excludedNodes: Operator[] = [
  13. Operator.Note,
  14. ...(RestrictedUpstreamMap[operatorName] ?? []),
  15. ];
  16. return nodes
  17. .filter(
  18. (x) =>
  19. excludedNodes.every((y) => y !== x.data.label) &&
  20. x.id !== selfId &&
  21. !toList.some((y) => y === x.id), // filter out selected values ​​in other to fields from the current drop-down box options
  22. )
  23. .map((x) => ({ label: x.data.name, value: x.id }));
  24. },
  25. [nodes, operatorName, selfId],
  26. );
  27. return buildCategorizeToOptions;
  28. };
  29. /**
  30. * dumped
  31. * @param nodeId
  32. * @returns
  33. */
  34. export const useHandleFormSelectChange = (nodeId?: string) => {
  35. const { addEdge, deleteEdgeBySourceAndSourceHandle } = useGraphStore(
  36. (state) => state,
  37. );
  38. const handleSelectChange = useCallback(
  39. (name?: string) => (value?: string) => {
  40. if (nodeId && name) {
  41. if (value) {
  42. addEdge({
  43. source: nodeId,
  44. target: value,
  45. sourceHandle: name,
  46. targetHandle: null,
  47. });
  48. } else {
  49. // clear selected value
  50. deleteEdgeBySourceAndSourceHandle({
  51. source: nodeId,
  52. sourceHandle: name,
  53. });
  54. }
  55. }
  56. },
  57. [addEdge, nodeId, deleteEdgeBySourceAndSourceHandle],
  58. );
  59. return { handleSelectChange };
  60. };
  61. export const useBuildSortOptions = () => {
  62. const { t } = useTranslate('flow');
  63. const options = useMemo(() => {
  64. return ['data', 'relevance'].map((x) => ({
  65. value: x,
  66. label: t(x),
  67. }));
  68. }, [t]);
  69. return options;
  70. };