@@ -57,6 +57,8 @@ const types = {
5757const searchConditions = {
5858 'any' : 'Any' ,
5959 'all' : 'All' ,
60+ 'any2any' : 'Any2Any' ,
61+ 'all2any' : 'All2Any' ,
6062} ;
6163
6264export default class Criteria extends React . Component {
@@ -85,7 +87,33 @@ export default class Criteria extends React.Component {
8587 } ) ;
8688 }
8789
88- handleChangeSearchPattern ( key , pattern ) {
90+
91+ handleChangeSearchItemKey ( key , oldItemKey , itemKey ) {
92+ const { onChange } = this . props ;
93+
94+ if ( oldItemKey !== itemKey ) {
95+ const data = { ...this . props . data } ;
96+ const dataItem = { ...data [ key ] . pattern } ;
97+ delete dataItem [ oldItemKey ] ;
98+
99+ return onChange ( {
100+ ...data ,
101+ [ key ] : {
102+ ...data [ key ] ,
103+ pattern : {
104+ ...dataItem ,
105+ [ itemKey ] : {
106+ ...data [ key ] . pattern [ oldItemKey ] ,
107+ } ,
108+ } ,
109+ } ,
110+ } ) ;
111+ }
112+ return onChange ( this . props . data ) ;
113+
114+ }
115+
116+ handleChangeSearchPattern ( key , itemKey , pattern ) {
89117 const { data, onChange } = this . props ;
90118
91119 return onChange ( {
@@ -94,16 +122,16 @@ export default class Criteria extends React.Component {
94122 ...data [ key ] ,
95123 pattern : {
96124 ...data [ key ] . pattern ,
97- [ 'item.data' ] : {
98- ...data [ key ] . pattern [ 'item.data' ] ,
125+ [ itemKey ] : {
126+ ...data [ key ] . pattern [ itemKey ] ,
99127 pattern,
100128 } ,
101129 } ,
102130 } ,
103131 } ) ;
104132 }
105133
106- handleChangeSearchType ( key , type ) {
134+ handleChangeSearchType ( key , itemKey , type ) {
107135 const { data, onChange } = this . props ;
108136
109137 return onChange ( {
@@ -112,27 +140,65 @@ export default class Criteria extends React.Component {
112140 ...data [ key ] ,
113141 pattern : {
114142 ...data [ key ] . pattern ,
115- [ 'item.data' ] : {
116- ...data [ key ] . pattern [ 'item.data' ] ,
143+ [ itemKey ] : {
144+ ...data [ key ] . pattern [ itemKey ] ,
117145 type,
118146 } ,
119147 } ,
120148 } ,
121149 } ) ;
122150 }
123151
124- handleChangeKey ( oldKey , key ) {
152+ handleAddSearchPatternItem ( key ) {
153+ const { data, onChange } = this . props ;
154+
155+ return onChange ( {
156+ ...data ,
157+ [ key ] : {
158+ ...data [ key ] ,
159+ pattern : {
160+ ...data [ key ] . pattern ,
161+ [ '' ] : {
162+ type : Object . keys ( types ) [ 0 ] ,
163+ } ,
164+ } ,
165+ } ,
166+ } ) ;
167+ }
168+
169+ handleRemoveSearchPatternItem ( key , itemKey ) {
125170 const { onChange } = this . props ;
126171
127172 const data = { ...this . props . data } ;
128- delete data [ oldKey ] ;
173+ const dataPattern = { ...this . props . data [ key ] . pattern } ;
174+ delete dataPattern [ itemKey ] ;
129175
130176 return onChange ( {
131177 ...data ,
132- [ key ] : this . props . data [ oldKey ] ,
178+ [ key ] : {
179+ ...data [ key ] ,
180+ pattern : {
181+ ...dataPattern ,
182+ } ,
183+ } ,
133184 } ) ;
134185 }
135186
187+ handleChangeKey ( oldKey , key ) {
188+ const { onChange } = this . props ;
189+
190+ if ( oldKey !== key ) {
191+ const data = { ...this . props . data } ;
192+ delete data [ oldKey ] ;
193+
194+ return onChange ( {
195+ ...data ,
196+ [ key ] : this . props . data [ oldKey ] ,
197+ } ) ;
198+ }
199+ return onChange ( this . props . data ) ;
200+ }
201+
136202 handleChangeType ( key , type ) {
137203 const { data, onChange } = this . props ;
138204
@@ -145,9 +211,7 @@ export default class Criteria extends React.Component {
145211 type,
146212 condition : 'all' ,
147213 pattern : {
148- ...data [ key ] . pattern ,
149- [ 'item.data' ] : {
150- ...data [ key ] . pattern [ 'item.data' ] ,
214+ [ '' ] : {
151215 type : Object . keys ( types ) [ 0 ] ,
152216 } ,
153217 } ,
@@ -211,13 +275,15 @@ export default class Criteria extends React.Component {
211275 { _ . map ( data , ( { type, pattern, condition } , key ) => (
212276 < div className = { style . line } key = { key } >
213277 < AutoFormCombobox
278+ name = 'Key'
214279 className = { style . entity }
215280 disabled = { disabled }
216281 data = { key }
217282 spec = { spec }
218283 onChange = { ( value ) => this . handleChangeKey ( key , value ) }
219284 />
220285 < AutoFormSelect
286+ name = 'Type'
221287 className = { style . entity }
222288 disabled = { disabled }
223289 data = { type }
@@ -240,30 +306,47 @@ export default class Criteria extends React.Component {
240306 } }
241307 onChange = { ( value ) => this . handleChangeSearchCondition ( key , value ) }
242308 />
243- < AutoFormInput
244- name = { 'Pattern' }
245- className = { style . entity }
246- disabled = { disabled }
247- data = { pattern [ 'item.data' ] ? pattern [ 'item.data' ] . pattern : '' }
248- spec = { {
249- required : true ,
250- } }
251- onChange = { ( value ) => this . handleChangeSearchPattern ( key , value ) }
252- />
253- < AutoFormSelect
254- name = { 'Type' }
255- className = { style . entity }
256- disabled = { disabled }
257- data = { pattern [ 'item.data' ] ? pattern [ 'item.data' ] . type : '' }
258- spec = { {
259- required : true ,
260- enum : types ,
261- } }
262- onChange = { ( value ) => this . handleChangeSearchType ( key , value ) }
263- />
309+ < div className = { style . break } />
310+ < h5 > Search Patterns < i className = { cx ( 'icon-plus' , style . remove ) } onClick = { ( ) => this . handleAddSearchPatternItem ( key ) } /> </ h5 >
311+ < div className = { style . break } />
312+ { _ . map ( pattern , ( { type, pattern } , itemKey ) => (
313+ < div style = { { display : 'flex' } } key = { itemKey } >
314+ < AutoFormCombobox
315+ name = { 'Item name' }
316+ className = { style . entity }
317+ disabled = { disabled }
318+ data = { itemKey }
319+ spec = { spec }
320+ onChange = { ( value ) => this . handleChangeSearchItemKey ( key , itemKey , value ) }
321+ />
322+ < AutoFormSelect
323+ name = { 'Type' }
324+ className = { style . entity }
325+ disabled = { disabled }
326+ data = { type }
327+ spec = { {
328+ required : true ,
329+ enum : types ,
330+ } }
331+ onChange = { ( value ) => this . handleChangeSearchType ( key , itemKey , value ) }
332+ />
333+ < AutoFormInput
334+ name = { 'Pattern' }
335+ className = { style . entity }
336+ disabled = { disabled }
337+ data = { pattern || '' }
338+ spec = { {
339+ required : true ,
340+ } }
341+ onChange = { ( value ) => this . handleChangeSearchPattern ( key , itemKey , value ) }
342+ />
343+ < i className = { cx ( 'icon-cross' , style . remove ) } onClick = { ( ) => this . handleRemoveSearchPatternItem ( key , itemKey ) } />
344+ </ div >
345+ ) ) }
264346 </ >
265347 ) : (
266348 < AutoFormInput
349+ name = { 'Pattern' }
267350 className = { style . entity }
268351 disabled = { disabled }
269352 data = { pattern }
@@ -273,6 +356,7 @@ export default class Criteria extends React.Component {
273356 onChange = { ( value ) => this . handleChangePattern ( key , value ) }
274357 />
275358 ) }
359+ < div className = { style . break } />
276360 { disabled ? null :
277361 < i className = { cx ( 'icon-cross' , style . remove ) } onClick = { ( ) => this . handleRemove ( key ) } />
278362 }
0 commit comments