fix: monitor changes in the data.form field of the categorize and relevant operators and then synchronize them to the edge #918 (#1469)
### What problem does this PR solve? feat: monitor changes in the table of relevant operators and synchronize them to the edge #918 feat: fixed the issue of repeated requests when opening the graph page #918 feat: cache node anchor coordinate information #918 feat: monitor changes in the data.form field of the categorize and relevant operators and then synchronize them to the edge #918 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
@@ -2,13 +2,13 @@ import { DSLComponents } from '@/interfaces/database/flow';
|
||||
import { removeUselessFieldsFromValues } from '@/utils/form';
|
||||
import dagre from 'dagre';
|
||||
import { humanId } from 'human-id';
|
||||
import { curry } from 'lodash';
|
||||
import { curry, sample } from 'lodash';
|
||||
import pipe from 'lodash/fp/pipe';
|
||||
import isObject from 'lodash/isObject';
|
||||
import { Edge, Node, Position } from 'reactflow';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { NodeMap, Operator } from './constant';
|
||||
import { ICategorizeItemResult, NodeData } from './interface';
|
||||
import { CategorizeAnchorPointPositions, NodeMap, Operator } from './constant';
|
||||
import { ICategorizeItemResult, IPosition, NodeData } from './interface';
|
||||
|
||||
const buildEdges = (
|
||||
operatorIds: string[],
|
||||
@@ -208,3 +208,27 @@ export const replaceIdWithText = (
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
export const isEdgeEqual = (previous: Edge, current: Edge) =>
|
||||
previous.source === current.source &&
|
||||
previous.target === current.target &&
|
||||
previous.sourceHandle === current.sourceHandle;
|
||||
|
||||
export const buildNewPositionMap = (
|
||||
categoryDataKeys: string[],
|
||||
indexesInUse: number[],
|
||||
) => {
|
||||
return categoryDataKeys.reduce<Record<string, IPosition>>((pre, cur) => {
|
||||
// take a coordinate
|
||||
const effectiveIdxes = CategorizeAnchorPointPositions.map(
|
||||
(x, idx) => idx,
|
||||
).filter((x) => !indexesInUse.some((y) => y === x));
|
||||
const idx = sample(effectiveIdxes);
|
||||
if (idx !== undefined) {
|
||||
indexesInUse.push(idx);
|
||||
pre[cur] = { ...CategorizeAnchorPointPositions[idx], idx };
|
||||
}
|
||||
|
||||
return pre;
|
||||
}, {});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user