@@ -9,14 +9,15 @@ import {
9
9
Record ,
10
10
SortPayload ,
11
11
ReduxState ,
12
+ Identifier ,
12
13
} from '../../types' ;
13
14
import { useGetMany } from '../../dataProvider' ;
14
15
import { FieldInputProps , useForm } from 'react-final-form' ;
15
16
import useGetMatching from '../../dataProvider/useGetMatching' ;
16
17
import { useTranslate } from '../../i18n' ;
17
18
import { getStatusForArrayInput as getDataStatus } from './referenceDataStatus' ;
18
19
import { useResourceContext } from '../../core' ;
19
- import { usePaginationState , useSelectionState , useSortState } from '..' ;
20
+ import { usePaginationState , useSortState } from '..' ;
20
21
import { ListControllerProps } from '../useListController' ;
21
22
import { indexById , removeEmpty , useSafeSetState } from '../../util' ;
22
23
import { SORT_DESC } from '../../reducer/admin/resource/list/queryReducer' ;
@@ -126,20 +127,36 @@ const useReferenceArrayInputController = (
126
127
perPage : initialPerPage ,
127
128
} ) ;
128
129
129
- // selection logic
130
- const {
131
- selectedIds,
132
- onSelect,
133
- onToggleItem,
134
- onUnselectItems,
135
- } = useSelectionState ( input . value ) ;
136
-
137
130
const form = useForm ( ) ;
138
- useEffect ( ( ) => {
139
- if ( ! isEqual ( input . value , selectedIds ) ) {
140
- form . change ( input . name , selectedIds ) ;
141
- }
142
- } , [ input . name , input . value , selectedIds , form ] ) ;
131
+ const onSelect = useCallback (
132
+ ( newIds : Identifier [ ] ) => {
133
+ const newValue = new Set ( input . value ) ;
134
+ newIds . forEach ( newId => {
135
+ newValue . add ( newId ) ;
136
+ } ) ;
137
+
138
+ form . change ( input . name , Array . from ( newValue ) ) ;
139
+ } ,
140
+ [ form , input . name , input . value ]
141
+ ) ;
142
+
143
+ const onUnselectItems = useCallback ( ( ) => {
144
+ form . change ( input . name , [ ] ) ;
145
+ } , [ form , input . name ] ) ;
146
+
147
+ const onToggleItem = useCallback (
148
+ ( id : Identifier ) => {
149
+ if ( input . value . contains ( id ) ) {
150
+ form . change (
151
+ input . name ,
152
+ input . value . filter ( selectedId => selectedId !== id )
153
+ ) ;
154
+ } else {
155
+ form . change ( input . name , [ ...input . value , id ] ) ;
156
+ }
157
+ } ,
158
+ [ form , input . name , input . value ]
159
+ ) ;
143
160
144
161
// sort logic
145
162
const sortRef = useRef ( initialSort ) ;
@@ -296,7 +313,7 @@ const useReferenceArrayInputController = (
296
313
page,
297
314
perPage,
298
315
resource,
299
- selectedIds,
316
+ selectedIds : input . value ,
300
317
setFilter,
301
318
setFilters,
302
319
setPage,
0 commit comments