@@ -355,31 +355,34 @@ export class ContextService {
355
355
) : T {
356
356
const filter = cloneDeep ( f ) ;
357
357
const filterValue = this . filterValue ( this . filter . getValue ( ) ) ;
358
- // Regex to detect {{filter.}} in object
359
358
const filterRegex = this . filterValueRegex ;
360
- // Regex to detect {{context.}} in object
361
359
const contextRegex = / (?< = { { context\. ) ( .* ?) (? = } } ) / gim;
362
360
363
- if ( 'field' in filter && filter . field ) {
364
- // If it's a filter descriptor, replace value ( if string )
365
- if ( filter . value && typeof filter . value === 'string' ) {
366
- const filterName = filter . value ?. match ( filterRegex ) ?. [ 0 ] ;
361
+ // Helper to replace a property value if it matches filter/context pattern
362
+ const replaceProp = ( obj : any , prop : string ) => {
363
+ if ( obj [ prop ] && typeof obj [ prop ] === 'string' ) {
364
+ const filterName = obj [ prop ] ?. match ( filterRegex ) ?. [ 0 ] ;
367
365
if ( filterName ) {
368
- filter . value = get ( filterValue , filterName ) ;
366
+ obj [ prop ] = get ( filterValue , filterName ) ;
369
367
} else {
370
- const contextName = filter . value ?. match ( contextRegex ) ?. [ 0 ] ;
368
+ const contextName = obj [ prop ] ?. match ( contextRegex ) ?. [ 0 ] ;
371
369
if ( contextName ) {
372
- filter . value = get ( this . context , contextName ) ;
370
+ obj [ prop ] = get ( this . context , contextName ) ;
373
371
}
374
372
}
375
373
}
374
+ } ;
375
+
376
+ if ( 'field' in filter && filter . field ) {
377
+ // If it's a filter descriptor, replace value/operator/field
378
+ replaceProp ( filter , 'value' ) ;
379
+ replaceProp ( filter , 'operator' ) ;
380
+ replaceProp ( filter , 'field' ) ;
376
381
} else if ( 'filters' in filter && filter . filters ) {
377
- // If it's a composite filter, replace values in filters
382
+ // If it's a composite filter, replace values in filters and replace logic
378
383
filter . filters = filter . filters
379
384
. map ( ( f ) => this . injectContext ( f ) )
380
385
. filter ( ( f ) => {
381
- // Filter out fields that are not in the available filter field
382
- // Meaning, their values are still using the {{filter.}} syntax
383
386
if ( 'value' in f ) {
384
387
return isObject ( f . value )
385
388
? ! isNil ( f . value ) && ! isEmpty ( f . value )
@@ -388,6 +391,7 @@ export class ContextService {
388
391
return true ;
389
392
}
390
393
} ) ;
394
+ replaceProp ( filter , 'logic' ) ;
391
395
}
392
396
return filter ;
393
397
}
0 commit comments