diff --git a/web/src/pages/flow/canvas/node/hooks.ts b/web/src/pages/flow/canvas/node/hooks.ts index f9fb9c2d4..cdfecd7fe 100644 --- a/web/src/pages/flow/canvas/node/hooks.ts +++ b/web/src/pages/flow/canvas/node/hooks.ts @@ -4,7 +4,11 @@ import { useEffect, useMemo, useState } from 'react'; import { useUpdateNodeInternals } from 'reactflow'; import { Operator } from '../../constant'; import { IPosition, NodeData } from '../../interface'; -import { buildNewPositionMap, isKeysEqual } from '../../utils'; +import { + buildNewPositionMap, + generateSwitchHandleText, + isKeysEqual, +} from '../../utils'; export const useBuildCategorizeHandlePositions = ({ data, @@ -32,7 +36,7 @@ export const useBuildCategorizeHandlePositions = ({ const position = positionMap[x]; let text = x; if (operatorName === Operator.Switch) { - text = `Item ${idx + 1}`; + text = generateSwitchHandleText(idx); } return { text, ...position }; }) diff --git a/web/src/pages/flow/categorize-form/dynamic-categorize.tsx b/web/src/pages/flow/categorize-form/dynamic-categorize.tsx index aa85830fd..dea244160 100644 --- a/web/src/pages/flow/categorize-form/dynamic-categorize.tsx +++ b/web/src/pages/flow/categorize-form/dynamic-categorize.tsx @@ -28,14 +28,15 @@ interface INameInputProps { const getOtherFieldValues = ( form: FormInstance, + formListName: string = 'items', field: FormListFieldData, latestField: string, ) => - (form.getFieldValue(['items']) ?? []) + (form.getFieldValue([formListName]) ?? []) .map((x: any) => x[latestField]) .filter( (x: string) => - x !== form.getFieldValue(['items', field.name, latestField]), + x !== form.getFieldValue([formListName, field.name, latestField]), ); const NameInput = ({ @@ -132,7 +133,12 @@ const DynamicCategorize = ({ nodeId }: IProps) => { ]} > form.setFields([ { @@ -159,7 +165,7 @@ const DynamicCategorize = ({ nodeId }: IProps) => { + @@ -65,7 +71,13 @@ const SwitchForm: React.FC = ({ - diff --git a/web/src/pages/flow/utils.ts b/web/src/pages/flow/utils.ts index 96177658f..7943c8525 100644 --- a/web/src/pages/flow/utils.ts +++ b/web/src/pages/flow/utils.ts @@ -1,7 +1,8 @@ import { DSLComponents } from '@/interfaces/database/flow'; import { removeUselessFieldsFromValues } from '@/utils/form'; +import { FormInstance, FormListFieldData } from 'antd'; import { humanId } from 'human-id'; -import { curry, intersectionWith, isEqual, sample } from 'lodash'; +import { curry, get, intersectionWith, isEqual, sample } from 'lodash'; import pipe from 'lodash/fp/pipe'; import isObject from 'lodash/isObject'; import { Edge, Node, Position } from 'reactflow'; @@ -209,3 +210,27 @@ export const buildNewPositionMap = ( export const isKeysEqual = (currentKeys: string[], previousKeys: string[]) => { return isEqual(currentKeys.sort(), previousKeys.sort()); }; + +export const getOperatorIndex = (handleTitle: string) => { + return handleTitle.split(' ').at(-1); +}; + +// Get the value of other forms except itself +export const getOtherFieldValues = ( + form: FormInstance, + formListName: string = 'items', + field: FormListFieldData, + latestField: string, +) => + (form.getFieldValue([formListName]) ?? []) + .map((x: any) => { + return get(x, latestField); + }) + .filter( + (x: string) => + x !== form.getFieldValue([formListName, field.name, latestField]), + ); + +export const generateSwitchHandleText = (idx: number) => { + return `Item ${idx + 1}`; +};