Skip to content

Commit 9dbb22b

Browse files
committed
fix: fix array setter sort and data change bugs
1 parent d9b32b5 commit 9dbb22b

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed

src/setter/array-setter/index.tsx

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ interface ArraySetterState {
2121
* @param target
2222
* @param value
2323
*/
24-
function onItemChange (target: IPublicModelSettingField, items: IPublicModelSettingField[], props: ArraySetterProps) {
24+
function onItemChange (target: IPublicModelSettingField, index: number, item: IPublicModelSettingField, props: ArraySetterProps) {
2525
const targetPath: Array<string | number> = target?.path;
2626
if (!targetPath || targetPath.length < 2) {
2727
console.warn(
@@ -31,8 +31,7 @@ function onItemChange (target: IPublicModelSettingField, items: IPublicModelSett
3131
);
3232
return;
3333
}
34-
const { field, value: fieldValue } = props;
35-
// const { items } = this.state;
34+
const { field } = props;
3635
const { path } = field;
3736
if (path[0] !== targetPath[0]) {
3837
console.warn(
@@ -41,11 +40,9 @@ function onItemChange (target: IPublicModelSettingField, items: IPublicModelSett
4140
return;
4241
}
4342
try {
44-
const index = +targetPath[targetPath.length - 2];
45-
if (typeof index === 'number' && !isNaN(index)) {
46-
fieldValue[index] = items[index].getValue();
47-
field?.extraProps?.setValue?.call(field, field, fieldValue);
48-
}
43+
const fieldValue = field.getValue();
44+
fieldValue[index] = item.getValue();
45+
field?.extraProps?.setValue?.call(field, field, fieldValue);
4946
} catch (e) {
5047
console.warn('[ArraySetter] extraProps.setValue failed :', e);
5148
}
@@ -89,10 +86,11 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
8986
extraProps: {
9087
defaultValue: value[i],
9188
setValue: (target: IPublicModelSettingField) => {
92-
onItemChange(target, items, props);
89+
onItemChange(target, i, item, props);
9390
},
9491
},
9592
});
93+
item.setValue(value[i]);
9694
}
9795
items.push(item);
9896
}
@@ -108,10 +106,9 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
108106
const values: any[] = [];
109107
const newItems: IPublicModelSettingField[] = [];
110108
sortedIds.map((id, index) => {
111-
const item = items[+id];
112-
item.setKey(index);
113-
values[index] = oldValues[id];
114-
newItems[index] = item;
109+
const itemIndex = items.findIndex(item => item.id === id);
110+
values[index] = oldValues[itemIndex];
111+
newItems[index] = items[itemIndex];
115112
return id;
116113
});
117114
this.setState({
@@ -174,7 +171,7 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
174171
<Sortable itemClassName="lc-setter-list-card" onSort={this.onSort.bind(this)}>
175172
{items.map((field, index) => (
176173
<ArrayItem
177-
key={index}
174+
key={field.id}
178175
scrollIntoView={scrollToLast && index === lastIndex}
179176
field={field}
180177
onRemove={this.onRemove.bind(this, field)}

0 commit comments

Comments
 (0)