From 16b6fff6dc0fd9c51c2ed7f51f17423aa59241a6 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Sun, 13 Nov 2022 20:21:47 +0100 Subject: [PATCH] #362 - Case sensitive + insensitive option --- src/utils/fieldWhenClause.ts | 61 ++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/src/utils/fieldWhenClause.ts b/src/utils/fieldWhenClause.ts index 7e84c82a..f20c539c 100644 --- a/src/utils/fieldWhenClause.ts +++ b/src/utils/fieldWhenClause.ts @@ -1,15 +1,51 @@ +import { WhenClause } from './../models/PanelSettings'; import { Field, WhenOperator } from "../models"; import { IMetadata } from "../panelWebView/components/Metadata"; - +/** + * Validate the field its "when" clause + * @param field + * @param parent + * @returns + */ export const fieldWhenClause = (field: Field, parent: IMetadata): boolean => { const when = field.when; if (!when) { return true; } - const whenValue = parent[when.fieldRef]; + let whenValue = parent[when.fieldRef]; + if (when.caseSensitive || typeof when.caseSensitive === "undefined") { + return caseSensitive(when, field, whenValue); + } else { + return caseInsensitive(when, field, whenValue); + } +} +/** + * Case sensitive checks + * @param when + * @param field + * @param whenValue + * @returns + */ +const caseInsensitive = (when: WhenClause, field: Field, whenValue: string | IMetadata | string[] | null) => { + whenValue = lowerValue(whenValue); + + const whenClone = Object.assign({}, when); + whenClone.value = lowerValue(whenClone.value); + + return caseSensitive(whenClone, field, whenValue); +} + +/** + * Case insensitive checks + * @param when + * @param field + * @param whenValue + * @returns + */ +const caseSensitive = (when: WhenClause, field: Field, whenValue: string | IMetadata | string[] | null) => { switch (when.operator) { case WhenOperator.equals: if (whenValue !== when.value) { @@ -66,4 +102,25 @@ export const fieldWhenClause = (field: Field, parent: IMetadata): boolean => { } return true; +} + +/** + * Lower the value(s) + * @param value + * @returns + */ +const lowerValue = (value: string | string[] | any) => { + if (typeof value === "string") { + value = value.toLowerCase(); + } else if (value instanceof Array) { + value = value.map(crntValue => { + if (typeof crntValue === "string") { + return crntValue.toLowerCase(); + } + + return crntValue; + }); + } + + return value; } \ No newline at end of file