### What problem does this PR solve? feat: The order of the category operator form is messed up after refreshing the page #3088 ### 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):tags/v0.13.0
| idx: number; | idx: number; | ||||
| }> = []; | }> = []; | ||||
| Object.keys(categoryData).forEach((x, idx) => { | |||||
| list.push({ | |||||
| text: x, | |||||
| idx, | |||||
| top: idx === 0 ? 98 : list[idx - 1].top + 8 + 26, | |||||
| Object.keys(categoryData) | |||||
| .sort((a, b) => categoryData[a].index - categoryData[b].index) | |||||
| .forEach((x, idx) => { | |||||
| list.push({ | |||||
| text: x, | |||||
| idx, | |||||
| top: idx === 0 ? 98 : list[idx - 1].top + 8 + 26, | |||||
| }); | |||||
| }); | }); | ||||
| }); | |||||
| return list; | return list; | ||||
| }, [categoryData]); | }, [categoryData]); |
| <Form.List name="items"> | <Form.List name="items"> | ||||
| {(fields, { add, remove }) => { | {(fields, { add, remove }) => { | ||||
| const handleAdd = () => { | const handleAdd = () => { | ||||
| add({ name: humanId() }); | |||||
| const idx = form.getFieldValue([ | |||||
| 'items', | |||||
| fields.at(-1)?.name, | |||||
| 'index', | |||||
| ]); | |||||
| add({ | |||||
| name: humanId(), | |||||
| index: fields.length === 0 ? 0 : idx + 1, | |||||
| }); | |||||
| if (nodeId) updateNodeInternals(nodeId); | if (nodeId) updateNodeInternals(nodeId); | ||||
| }; | }; | ||||
| return ( | return ( | ||||
| )} | )} | ||||
| /> | /> | ||||
| </Form.Item> | </Form.Item> | ||||
| <Form.Item hidden name={[field.name, 'index']}> | |||||
| <Input /> | |||||
| </Form.Item> | |||||
| </Card> | </Card> | ||||
| ))} | ))} | ||||
| ) => { | ) => { | ||||
| // Categorize's to field has two data sources, with edges as the data source. | // Categorize's to field has two data sources, with edges as the data source. | ||||
| // Changes in the edge or to field need to be synchronized to the form field. | // Changes in the edge or to field need to be synchronized to the form field. | ||||
| return Object.keys(categorizeItem).reduce<Array<ICategorizeItem>>( | |||||
| (pre, cur) => { | |||||
| return Object.keys(categorizeItem) | |||||
| .reduce<Array<ICategorizeItem>>((pre, cur) => { | |||||
| // synchronize edge data to the to field | // synchronize edge data to the to field | ||||
| pre.push({ name: cur, ...categorizeItem[cur] }); | pre.push({ name: cur, ...categorizeItem[cur] }); | ||||
| return pre; | return pre; | ||||
| }, | |||||
| [], | |||||
| ); | |||||
| }, []) | |||||
| .sort((a, b) => a.index - b.index); | |||||
| }; | }; | ||||
| /** | /** |
| description?: string; | description?: string; | ||||
| examples?: string; | examples?: string; | ||||
| to?: string; | to?: string; | ||||
| index: number; | |||||
| } | } | ||||
| export interface IGenerateParameter { | export interface IGenerateParameter { |