balibabu
commited on
Commit
·
63eb0ad
1
Parent(s):
64508f3
feat: Generate operator names in an auto-incremental manner #1739 (#2844)
Browse files### What problem does this PR solve?
feat: Generate operator names in an auto-incremental manner #1739
### Type of change
- [ ] Bug Fix (non-breaking change which fixes an issue)
- [x] New Feature (non-breaking change which adds functionality)
- [ ] Documentation Update
- [ ] Refactoring
- [ ] Performance Improvement
- [ ] Other (please describe):
web/src/pages/flow/constant.tsx
CHANGED
|
@@ -75,6 +75,10 @@ export enum Operator {
|
|
| 75 |
Note = 'Note',
|
| 76 |
}
|
| 77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
export const operatorIconMap = {
|
| 79 |
[Operator.Retrieval]: RocketOutlined,
|
| 80 |
[Operator.Generate]: MergeCellsOutlined,
|
|
|
|
| 75 |
Note = 'Note',
|
| 76 |
}
|
| 77 |
|
| 78 |
+
export const CommonOperatorList = Object.values(Operator).filter(
|
| 79 |
+
(x) => x !== Operator.Note,
|
| 80 |
+
);
|
| 81 |
+
|
| 82 |
export const operatorIconMap = {
|
| 83 |
[Operator.Retrieval]: RocketOutlined,
|
| 84 |
[Operator.Generate]: MergeCellsOutlined,
|
web/src/pages/flow/hooks.ts
CHANGED
|
@@ -23,7 +23,9 @@ import api from '@/utils/api';
|
|
| 23 |
import { useDebounceEffect } from 'ahooks';
|
| 24 |
import { FormInstance, message } from 'antd';
|
| 25 |
import { humanId } from 'human-id';
|
|
|
|
| 26 |
import trim from 'lodash/trim';
|
|
|
|
| 27 |
import { useParams } from 'umi';
|
| 28 |
import { v4 as uuid } from 'uuid';
|
| 29 |
import {
|
|
@@ -152,17 +154,68 @@ export const useHandleDrag = () => {
|
|
| 152 |
return { handleDragStart };
|
| 153 |
};
|
| 154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
export const useHandleDrop = () => {
|
| 156 |
const addNode = useGraphStore((state) => state.addNode);
|
|
|
|
| 157 |
const [reactFlowInstance, setReactFlowInstance] =
|
| 158 |
useState<ReactFlowInstance<any, any>>();
|
| 159 |
const initializeOperatorParams = useInitializeOperatorParams();
|
|
|
|
| 160 |
|
| 161 |
const onDragOver = useCallback((event: React.DragEvent<HTMLDivElement>) => {
|
| 162 |
event.preventDefault();
|
| 163 |
event.dataTransfer.dropEffect = 'move';
|
| 164 |
}, []);
|
| 165 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 166 |
const onDrop = useCallback(
|
| 167 |
(event: React.DragEvent<HTMLDivElement>) => {
|
| 168 |
event.preventDefault();
|
|
@@ -190,7 +243,7 @@ export const useHandleDrop = () => {
|
|
| 190 |
},
|
| 191 |
data: {
|
| 192 |
label: `${type}`,
|
| 193 |
-
name:
|
| 194 |
form: initializeOperatorParams(type as Operator),
|
| 195 |
},
|
| 196 |
sourcePosition: Position.Right,
|
|
@@ -199,7 +252,7 @@ export const useHandleDrop = () => {
|
|
| 199 |
|
| 200 |
addNode(newNode);
|
| 201 |
},
|
| 202 |
-
[reactFlowInstance, addNode, initializeOperatorParams],
|
| 203 |
);
|
| 204 |
|
| 205 |
return { onDrop, onDragOver, setReactFlowInstance };
|
|
|
|
| 23 |
import { useDebounceEffect } from 'ahooks';
|
| 24 |
import { FormInstance, message } from 'antd';
|
| 25 |
import { humanId } from 'human-id';
|
| 26 |
+
import { lowerFirst } from 'lodash';
|
| 27 |
import trim from 'lodash/trim';
|
| 28 |
+
import { useTranslation } from 'react-i18next';
|
| 29 |
import { useParams } from 'umi';
|
| 30 |
import { v4 as uuid } from 'uuid';
|
| 31 |
import {
|
|
|
|
| 154 |
return { handleDragStart };
|
| 155 |
};
|
| 156 |
|
| 157 |
+
const splitName = (name: string) => {
|
| 158 |
+
const names = name.split('_');
|
| 159 |
+
const type = names.at(0);
|
| 160 |
+
const index = Number(names.at(-1));
|
| 161 |
+
|
| 162 |
+
return { type, index };
|
| 163 |
+
};
|
| 164 |
+
|
| 165 |
export const useHandleDrop = () => {
|
| 166 |
const addNode = useGraphStore((state) => state.addNode);
|
| 167 |
+
const nodes = useGraphStore((state) => state.nodes);
|
| 168 |
const [reactFlowInstance, setReactFlowInstance] =
|
| 169 |
useState<ReactFlowInstance<any, any>>();
|
| 170 |
const initializeOperatorParams = useInitializeOperatorParams();
|
| 171 |
+
const { t } = useTranslation();
|
| 172 |
|
| 173 |
const onDragOver = useCallback((event: React.DragEvent<HTMLDivElement>) => {
|
| 174 |
event.preventDefault();
|
| 175 |
event.dataTransfer.dropEffect = 'move';
|
| 176 |
}, []);
|
| 177 |
|
| 178 |
+
const generateNodeName = useCallback(
|
| 179 |
+
(type: string) => {
|
| 180 |
+
const name = t(`flow.${lowerFirst(type)}`);
|
| 181 |
+
const templateNameList = nodes
|
| 182 |
+
.filter((x) => {
|
| 183 |
+
const temporaryName = x.data.name;
|
| 184 |
+
|
| 185 |
+
const { type, index } = splitName(temporaryName);
|
| 186 |
+
|
| 187 |
+
return (
|
| 188 |
+
temporaryName.match(/_/g)?.length === 1 &&
|
| 189 |
+
type === name &&
|
| 190 |
+
!isNaN(index)
|
| 191 |
+
);
|
| 192 |
+
})
|
| 193 |
+
.map((x) => {
|
| 194 |
+
const temporaryName = x.data.name;
|
| 195 |
+
const { index } = splitName(temporaryName);
|
| 196 |
+
|
| 197 |
+
return {
|
| 198 |
+
idx: index,
|
| 199 |
+
name: temporaryName,
|
| 200 |
+
};
|
| 201 |
+
})
|
| 202 |
+
.sort((a, b) => a.idx - b.idx);
|
| 203 |
+
|
| 204 |
+
let index: number = 0;
|
| 205 |
+
for (let i = 0; i < templateNameList.length; i++) {
|
| 206 |
+
const idx = templateNameList[i]?.idx;
|
| 207 |
+
const nextIdx = templateNameList[i + 1]?.idx;
|
| 208 |
+
if (idx + 1 !== nextIdx) {
|
| 209 |
+
index = idx + 1;
|
| 210 |
+
break;
|
| 211 |
+
}
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
return `${name}_${index}`;
|
| 215 |
+
},
|
| 216 |
+
[t, nodes],
|
| 217 |
+
);
|
| 218 |
+
|
| 219 |
const onDrop = useCallback(
|
| 220 |
(event: React.DragEvent<HTMLDivElement>) => {
|
| 221 |
event.preventDefault();
|
|
|
|
| 243 |
},
|
| 244 |
data: {
|
| 245 |
label: `${type}`,
|
| 246 |
+
name: generateNodeName(type),
|
| 247 |
form: initializeOperatorParams(type as Operator),
|
| 248 |
},
|
| 249 |
sourcePosition: Position.Right,
|
|
|
|
| 252 |
|
| 253 |
addNode(newNode);
|
| 254 |
},
|
| 255 |
+
[reactFlowInstance, addNode, initializeOperatorParams, generateNodeName],
|
| 256 |
);
|
| 257 |
|
| 258 |
return { onDrop, onDragOver, setReactFlowInstance };
|