diff --git a/projects/aca-shared/src/lib/services/app.extension.service.spec.ts b/projects/aca-shared/src/lib/services/app.extension.service.spec.ts index 6fcfa38de..5e50afe31 100644 --- a/projects/aca-shared/src/lib/services/app.extension.service.spec.ts +++ b/projects/aca-shared/src/lib/services/app.extension.service.spec.ts @@ -1087,6 +1087,16 @@ describe('AppExtensionService', () => { expect(service.evaluateRule('rule1')).toBeTrue(); }); + it('should evaluate list of rules', () => { + extensions.setEvaluators({ + rule1: () => true, + rule2: () => true, + rule3: () => true + }); + + expect(service.evaluateRule(['rule1', 'rule2', 'rule3'])).toBeTrue(); + }); + it('should not evaluate missing rule and return [false] by default', () => { expect(service.evaluateRule('missing')).toBeFalse(); }); diff --git a/projects/aca-shared/src/lib/services/app.extension.service.ts b/projects/aca-shared/src/lib/services/app.extension.service.ts index ab1781395..7c02d789a 100644 --- a/projects/aca-shared/src/lib/services/app.extension.service.ts +++ b/projects/aca-shared/src/lib/services/app.extension.service.ts @@ -532,11 +532,18 @@ export class AppExtensionService implements RuleContext { } // todo: move to ADF/RuleService - evaluateRule(ruleId: string, ...args: any[]): boolean { - const evaluator = this.getEvaluator(ruleId); - - if (evaluator) { - return evaluator(this, ...args); + evaluateRule(ruleId: string | string[], ...args: any[]): boolean { + let evaluatorList: RuleEvaluator[] = []; + if (Array.isArray(ruleId)) { + evaluatorList = ruleId.filter((rule) => !!this.getEvaluator(rule)).map((rule) => this.getEvaluator(rule)); + } else { + const evaluator = this.getEvaluator(ruleId); + if (evaluator) { + evaluatorList.push(evaluator); + } + } + if (evaluatorList?.length > 0) { + return evaluatorList.every((evaluator) => evaluator(this, ...args)); } return false;