@@ -9,6 +9,8 @@ export class Filter {
9
9
to ?: Date ;
10
10
options ?: string ;
11
11
range ?: string ;
12
+ dots ?: { name : string , only ?: number [ ] , contains ?: number [ ] }
13
+ ft_select ?: boolean | number ;
12
14
}
13
15
14
16
export class FilterHelper {
@@ -35,9 +37,9 @@ export class FilterHelper {
35
37
36
38
updateAppliedFilters = ( appliedFilters : Filter [ ] , filter : Filter ) => {
37
39
appliedFilters = appliedFilters . filter ( ( x : Filter ) => x . property !== filter . property &&
38
- ( x . from === undefined || filter . from === undefined ) ||
40
+ ( x . from === undefined || filter . from === undefined ) ||
39
41
( x . to === undefined || filter . to === undefined ) ) ;
40
- if ( filter . value || filter . state !== undefined || filter . options || filter . range || filter . from || filter . to ) {
42
+ if ( filter . value || filter . state !== undefined || filter . options || filter . range || filter . from || filter . to || filter . dots ) {
41
43
appliedFilters . push ( filter ) ;
42
44
}
43
45
return appliedFilters ;
@@ -60,6 +62,11 @@ export class FilterHelper {
60
62
queryParam [ `f_${ filter . property } _opt` ] = filter . options ;
61
63
} else if ( filter . range ) {
62
64
queryParam [ `f_${ filter . property } _rng` ] = filter . range ;
65
+ } else if ( filter . dots ) {
66
+ queryParam [ `f_${ filter . property } _dots` ]
67
+ = `name_${ filter . dots . name } _only_${
68
+ filter . dots . only ? filter . dots . only . join ( ',' ) : '' } _contains_${
69
+ filter . dots . contains ? filter . dots . contains . join ( ',' ) : '' } `;
63
70
} else {
64
71
this . route . queryParams . subscribe ( params => {
65
72
const filterKeys = Object . keys ( params ) ;
@@ -96,6 +103,8 @@ export class FilterHelper {
96
103
return this . filterRange ( data , filter ) ;
97
104
} else if ( filter . hasOwnProperty ( 'state' ) ) {
98
105
return this . filterState ( data , filter ) ;
106
+ } else if ( filter . hasOwnProperty ( 'dots' ) ) {
107
+ return this . filterDots ( data , filter ) ;
99
108
} else {
100
109
return data ;
101
110
}
@@ -164,6 +173,23 @@ export class FilterHelper {
164
173
return data ;
165
174
}
166
175
176
+ filterDots ( filteredData : any [ ] , filter : Filter ) {
177
+ let data = filteredData ;
178
+ if ( filter . dots !== undefined ) {
179
+ data = filteredData . filter ( x => {
180
+ const value = x [ filter . property ] as number [ ] ;
181
+ if ( filter . dots . only && filter . dots . only . length > 0 ) {
182
+ return value . every ( dot => filter . dots . only . includes ( dot ) ) ;
183
+ } else if ( filter . dots . contains && filter . dots . contains . length > 0 ) {
184
+ return value . some ( dot => filter . dots . contains . includes ( dot ) ) ;
185
+ } else {
186
+ return true ;
187
+ }
188
+ } ) ;
189
+ }
190
+ return data ;
191
+ }
192
+
167
193
applyNewFilter = ( data : any [ ] , appliedFilters : Filter [ ] , newFilter : Filter , queryParams : boolean ) : {
168
194
filteredData : any [ ] ,
169
195
newFilters : Filter [ ]
@@ -203,6 +229,8 @@ export class FilterHelper {
203
229
const range = / f _ ( .* ) _ r n g / ;
204
230
const state = / f _ ( .* ) _ s t / ;
205
231
const value = / f _ ( .* ) / ;
232
+ const dots = / f _ ( .* ) _ d o t s / ;
233
+ const dotsValue = / n a m e _ ( .* ) _ o n l y _ ( .* ) _ c o n t a i n s _ ( .* ) / ;
206
234
const filter : Filter = new Filter ( ) ;
207
235
208
236
if ( dateFrom . test ( parameter ) ) {
@@ -220,6 +248,15 @@ export class FilterHelper {
220
248
} else if ( state . test ( parameter ) ) {
221
249
filter . property = parameter . match ( state ) [ 1 ] ;
222
250
filter . state = parameters [ parameter ] === 'true' ? true : parameters [ parameter ] === 'false' ? false : undefined ;
251
+ } else if ( dots . test ( parameter ) ) {
252
+ filter . property = parameter . match ( dots ) [ 1 ] ;
253
+ if ( parameters [ parameter ] ) {
254
+ filter . dots = {
255
+ name : parameters [ parameter ] . match ( dotsValue ) [ 1 ] ,
256
+ only : JSON . parse ( `[${ parameters [ parameter ] . match ( dotsValue ) [ 2 ] } ]` ) as number [ ] ,
257
+ contains : JSON . parse ( `[${ parameters [ parameter ] . match ( dotsValue ) [ 3 ] } ]` ) as number [ ]
258
+ } ;
259
+ }
223
260
} else if ( value . test ( parameter ) ) {
224
261
filter . property = parameter . match ( value ) [ 1 ] ;
225
262
filter . value = parameters [ parameter ] ;
0 commit comments