| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import { useCallback } from 'react';
- import { Operator } from './constant';
- import useGraphStore from './store';
-
- const ExcludedNodesMap = {
- // exclude some nodes downstream of the classification node
- [Operator.Categorize]: [
- Operator.Categorize,
- Operator.Answer,
- Operator.Begin,
- Operator.Relevant,
- ],
- [Operator.Relevant]: [Operator.Begin, Operator.Answer, Operator.Relevant],
- [Operator.Generate]: [Operator.Begin],
- };
-
- export const useBuildFormSelectOptions = (
- operatorName: Operator,
- selfId?: string, // exclude the current node
- ) => {
- const nodes = useGraphStore((state) => state.nodes);
-
- const buildCategorizeToOptions = useCallback(
- (toList: string[]) => {
- const excludedNodes: Operator[] = ExcludedNodesMap[operatorName] ?? [];
- return nodes
- .filter(
- (x) =>
- excludedNodes.every((y) => y !== x.data.label) &&
- x.id !== selfId &&
- !toList.some((y) => y === x.id), // filter out selected values in other to fields from the current drop-down box options
- )
- .map((x) => ({ label: x.data.name, value: x.id }));
- },
- [nodes, operatorName, selfId],
- );
-
- return buildCategorizeToOptions;
- };
-
- /**
- * dumped
- * @param nodeId
- * @returns
- */
- export const useHandleFormSelectChange = (nodeId?: string) => {
- const { addEdge, deleteEdgeBySourceAndSourceHandle } = useGraphStore(
- (state) => state,
- );
- const handleSelectChange = useCallback(
- (name?: string) => (value?: string) => {
- if (nodeId && name) {
- if (value) {
- addEdge({
- source: nodeId,
- target: value,
- sourceHandle: name,
- targetHandle: null,
- });
- } else {
- // clear selected value
- deleteEdgeBySourceAndSourceHandle({
- source: nodeId,
- sourceHandle: name,
- });
- }
- }
- },
- [addEdge, nodeId, deleteEdgeBySourceAndSourceHandle],
- );
-
- return { handleSelectChange };
- };
|