@@ -18,34 +18,33 @@ export function CompositeEntitiesByKind<E, K>(
18
18
props : EntitiesSearch . CompositeEntitiesKinds < E , K >
19
19
) : JSX . Element {
20
20
// TODO Move the local state into the reducer. Let's see if it is possible.
21
- const { state, dispatch } = useEntitiesOptionsStorage < E > ( ) ;
22
- const [ searchPhrase , setSearchPhrase ] = useState ( '' ) ;
23
- const [ entitiesAndKind , setEntitiesAndKind ] = useState ( {
21
+ const { state, dispatch } = useEntitiesOptionsStorage < E , K > ( {
24
22
entities : props . entities . value ,
25
23
kind : props . kind . value ,
26
24
} ) ;
25
+ const [ searchPhrase , setSearchPhrase ] = useState ( '' ) ;
27
26
28
27
useEffect ( ( ) => {
29
28
const promises = Set < ReturnType < SearchEntities < E , K > > > ( ) . asMutable ( ) ;
30
29
31
30
promises . add (
32
- props . searchEntities ( '' , entitiesAndKind . kind , {
33
- exclude : entitiesAndKind . entities ,
31
+ props . searchEntities ( '' , state . kind , {
32
+ exclude : state . entities ,
34
33
} )
35
34
) ;
36
35
37
- if ( entitiesAndKind . entities . size > 0 ) {
36
+ if ( state . entities . size > 0 ) {
38
37
promises . add (
39
- props . searchEntities ( '' , entitiesAndKind . kind , {
40
- include : entitiesAndKind . entities ,
38
+ props . searchEntities ( '' , state . kind , {
39
+ include : state . entities ,
41
40
per_page : '-1' ,
42
41
} )
43
42
) ;
44
43
}
45
44
46
45
Promise . all ( promises )
47
46
. then ( ( result ) => {
48
- const entitiesOptions = result [ 0 ] ?? OrderedSet ( [ ] ) ;
47
+ const currentEntitiesOptions = result [ 0 ] ?? OrderedSet ( [ ] ) ;
49
48
const selectedEntitiesOptions = result [ 1 ] ?? OrderedSet ( [ ] ) ;
50
49
51
50
dispatch ( {
@@ -54,11 +53,11 @@ export function CompositeEntitiesByKind<E, K>(
54
53
} ) ;
55
54
dispatch ( {
56
55
type : 'UPDATE_CONTEXTUAL_ENTITIES_OPTIONS' ,
57
- contextualEntitiesOptions : entitiesOptions ,
56
+ contextualEntitiesOptions : currentEntitiesOptions ,
58
57
} ) ;
59
58
dispatch ( {
60
- type : 'UPDATE_ENTITIES_OPTIONS ' ,
61
- entitiesOptions ,
59
+ type : 'UPDATE_CURRENT_ENTITIES_OPTIONS ' ,
60
+ currentEntitiesOptions : currentEntitiesOptions ,
62
61
} ) ;
63
62
} )
64
63
. catch ( ( error ) => {
@@ -68,11 +67,6 @@ export function CompositeEntitiesByKind<E, K>(
68
67
} , [ ] ) ;
69
68
70
69
const onChangeEntities = ( entities : Entities < E > ) => {
71
- // TODO It is the state still necessary having the reducer?
72
- setEntitiesAndKind ( {
73
- ...entitiesAndKind ,
74
- entities : entities ?? OrderedSet ( [ ] ) ,
75
- } ) ;
76
70
props . entities . onChange ( entities ) ;
77
71
78
72
if ( ( entities ?. size ?? 0 ) <= 0 ) {
@@ -81,34 +75,32 @@ export function CompositeEntitiesByKind<E, K>(
81
75
selectedEntitiesOptions : OrderedSet ( [ ] ) ,
82
76
} ) ;
83
77
dispatch ( {
84
- type : 'UPDATE_ENTITIES_OPTIONS ' ,
85
- entitiesOptions : state . contextualEntitiesOptions ,
78
+ type : 'UPDATE_CURRENT_ENTITIES_OPTIONS ' ,
79
+ currentEntitiesOptions : state . currentEntitiesOptions ,
86
80
} ) ;
87
81
return ;
88
82
}
89
83
90
84
const promises = Set < ReturnType < SearchEntities < E , K > > > ( [
91
- props . searchEntities ( searchPhrase , entitiesAndKind . kind , {
92
- exclude : entities ,
93
- } ) ,
94
- props . searchEntities ( '' , entitiesAndKind . kind , {
85
+ props . searchEntities ( searchPhrase , state . kind ) ,
86
+ props . searchEntities ( '' , state . kind , {
95
87
include : entities ,
96
88
per_page : '-1' ,
97
89
} ) ,
98
90
] ) ;
99
91
100
92
Promise . all ( promises )
101
93
. then ( ( result ) => {
102
- const entitiesOptions = result [ 0 ] ?? OrderedSet ( [ ] ) ;
94
+ const currentEntitiesOptions = result [ 0 ] ?? OrderedSet ( [ ] ) ;
103
95
const selectedEntitiesOptions = result [ 1 ] ?? OrderedSet ( [ ] ) ;
104
96
105
97
dispatch ( {
106
98
type : 'UPDATE_SELECTED_ENTITIES_OPTIONS' ,
107
99
selectedEntitiesOptions,
108
100
} ) ;
109
101
dispatch ( {
110
- type : 'UPDATE_ENTITIES_OPTIONS ' ,
111
- entitiesOptions ,
102
+ type : 'UPDATE_CURRENT_ENTITIES_OPTIONS ' ,
103
+ currentEntitiesOptions : currentEntitiesOptions ,
112
104
} ) ;
113
105
} )
114
106
. catch ( ( error ) => {
@@ -123,7 +115,14 @@ export function CompositeEntitiesByKind<E, K>(
123
115
kind instanceof OrderedSet ? kind : OrderedSet < K > ( [ kind as K ] ) ;
124
116
125
117
const entities = OrderedSet ( [ ] ) ;
126
- setEntitiesAndKind ( { kind : _kind , entities } ) ;
118
+ dispatch ( {
119
+ type : 'UPDATE_ENTITIES' ,
120
+ entities,
121
+ } ) ;
122
+ dispatch ( {
123
+ type : 'UPDATE_KIND' ,
124
+ kind : _kind ,
125
+ } ) ;
127
126
props . kind . onChange ( _kind ) ;
128
127
props . entities . onChange ( entities ) ;
129
128
@@ -133,24 +132,24 @@ export function CompositeEntitiesByKind<E, K>(
133
132
selectedEntitiesOptions : entities ,
134
133
} ) ;
135
134
dispatch ( {
136
- type : 'UPDATE_ENTITIES_OPTIONS ' ,
137
- entitiesOptions : entities ,
135
+ type : 'UPDATE_CURRENT_ENTITIES_OPTIONS ' ,
136
+ currentEntitiesOptions : entities ,
138
137
} ) ;
139
138
return ;
140
139
}
141
140
142
141
props
143
142
. searchEntities ( '' , _kind , {
144
- exclude : entitiesAndKind . entities ,
143
+ exclude : state . entities ,
145
144
} )
146
145
. then ( ( result ) => {
147
146
dispatch ( {
148
147
type : 'UPDATE_CONTEXTUAL_ENTITIES_OPTIONS' ,
149
148
contextualEntitiesOptions : result ,
150
149
} ) ;
151
150
dispatch ( {
152
- type : 'UPDATE_ENTITIES_OPTIONS ' ,
153
- entitiesOptions : result ,
151
+ type : 'UPDATE_CURRENT_ENTITIES_OPTIONS ' ,
152
+ currentEntitiesOptions : result ,
154
153
} ) ;
155
154
dispatch ( {
156
155
type : 'UPDATE_SELECTED_ENTITIES_OPTIONS' ,
@@ -166,19 +165,21 @@ export function CompositeEntitiesByKind<E, K>(
166
165
167
166
const entities : EntitiesSearch . BaseControl < E > = {
168
167
...props . entities ,
169
- value : entitiesAndKind . entities ,
168
+ value : state . entities ,
170
169
options : orderSelectedOptionsAtTheTop < E > (
171
170
uniqueControlOptions (
172
- state . selectedEntitiesOptions . merge ( state . entitiesOptions )
171
+ state . selectedEntitiesOptions . merge (
172
+ state . currentEntitiesOptions
173
+ )
173
174
) ,
174
- entitiesAndKind . entities
175
+ state . entities
175
176
) ,
176
177
onChange : onChangeEntities ,
177
178
} ;
178
179
179
180
const kind : EntitiesSearch . BaseControl < K > = {
180
181
...props . kind ,
181
- value : entitiesAndKind . kind ,
182
+ value : state . kind ,
182
183
onChange : onChangeKind ,
183
184
} ;
184
185
@@ -190,28 +191,28 @@ export function CompositeEntitiesByKind<E, K>(
190
191
191
192
if ( _phrase === '' ) {
192
193
dispatch ( {
193
- type : 'UPDATE_ENTITIES_OPTIONS ' ,
194
- entitiesOptions : state . contextualEntitiesOptions ,
194
+ type : 'UPDATE_CURRENT_ENTITIES_OPTIONS ' ,
195
+ currentEntitiesOptions : state . contextualEntitiesOptions ,
195
196
} ) ;
196
197
return ;
197
198
}
198
199
199
200
props
200
- . searchEntities ( _phrase , entitiesAndKind . kind , {
201
- exclude : entitiesAndKind . entities ,
201
+ . searchEntities ( _phrase , state . kind , {
202
+ exclude : state . entities ,
202
203
} )
203
204
. then ( ( result ) =>
204
205
dispatch ( {
205
- type : 'UPDATE_ENTITIES_OPTIONS ' ,
206
- entitiesOptions : result ,
206
+ type : 'UPDATE_CURRENT_ENTITIES_OPTIONS ' ,
207
+ currentEntitiesOptions : result ,
207
208
} )
208
209
)
209
210
. catch ( ( ) => {
210
211
// TODO Add warning for user feedback.
211
212
const emptySet = OrderedSet ( [ ] ) ;
212
213
dispatch ( {
213
- type : 'UPDATE_ENTITIES_OPTIONS ' ,
214
- entitiesOptions : emptySet ,
214
+ type : 'UPDATE_CURRENT_ENTITIES_OPTIONS ' ,
215
+ currentEntitiesOptions : emptySet ,
215
216
} ) ;
216
217
return emptySet ;
217
218
} ) ;
0 commit comments