@@ -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