From 8201069169f2f6791f92e5744f4b7733d8889715 Mon Sep 17 00:00:00 2001 From: FelixKirschKern Date: Tue, 7 Nov 2023 16:18:57 +0100 Subject: [PATCH 1/5] extends transferNestedDicts for Arrays --- general.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/general.ts b/general.ts index 7b77480..5179f63 100644 --- a/general.ts +++ b/general.ts @@ -74,8 +74,22 @@ export function transferNestedDict(dictA: any, dictB: any, ignoreNoneExistingKey for (let key in dictA) { if (dictB[key] == null && ignoreNoneExistingKeys) continue; - if (typeof dictA[key] === 'object') { - if (typeof dictB[key] !== 'object') { + if (Array.isArray(dictA[key])) { + if (!Array.isArray(dictB[key])) { + dictB[key] = []; + } + for (let i = 0; i < dictA[key].length; i++) { + if (typeof dictA[key][i] === 'object' && !Array.isArray(dictA[key][i])) { + if (!(i in dictB[key]) || typeof dictB[key][i] !== 'object' || Array.isArray(dictB[key][i])) { + dictB[key][i] = {}; + } + transferNestedDict(dictA[key][i], dictB[key][i], ignoreNoneExistingKeys); + } else { + dictB[key][i] = dictA[key][i]; + } + } + } else if (typeof dictA[key] === 'object') { + if (typeof dictB[key] !== 'object' || Array.isArray(dictB[key])) { dictB[key] = {}; } transferNestedDict(dictA[key], dictB[key], ignoreNoneExistingKeys); From fbc7591c2c249e589be13942872c8049ebed9674 Mon Sep 17 00:00:00 2001 From: FelixKirschKern Date: Wed, 8 Nov 2023 09:35:15 +0100 Subject: [PATCH 2/5] overwrite arrays on transfer --- general.ts | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/general.ts b/general.ts index 5179f63..42e27b1 100644 --- a/general.ts +++ b/general.ts @@ -75,21 +75,9 @@ export function transferNestedDict(dictA: any, dictB: any, ignoreNoneExistingKey for (let key in dictA) { if (dictB[key] == null && ignoreNoneExistingKeys) continue; if (Array.isArray(dictA[key])) { - if (!Array.isArray(dictB[key])) { - dictB[key] = []; - } - for (let i = 0; i < dictA[key].length; i++) { - if (typeof dictA[key][i] === 'object' && !Array.isArray(dictA[key][i])) { - if (!(i in dictB[key]) || typeof dictB[key][i] !== 'object' || Array.isArray(dictB[key][i])) { - dictB[key][i] = {}; - } - transferNestedDict(dictA[key][i], dictB[key][i], ignoreNoneExistingKeys); - } else { - dictB[key][i] = dictA[key][i]; - } - } + dictB[key] = dictA[key]; } else if (typeof dictA[key] === 'object') { - if (typeof dictB[key] !== 'object' || Array.isArray(dictB[key])) { + if (typeof dictB[key] !== 'object') { dictB[key] = {}; } transferNestedDict(dictA[key], dictB[key], ignoreNoneExistingKeys); From e16b924a359869547715e8bee9e840ecbd49baaa Mon Sep 17 00:00:00 2001 From: Lennart Schmidt Date: Fri, 10 Nov 2023 11:10:00 +0100 Subject: [PATCH 3/5] add new validation method for name input --- validations.ts | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 validations.ts diff --git a/validations.ts b/validations.ts new file mode 100644 index 0000000..a219c6a --- /dev/null +++ b/validations.ts @@ -0,0 +1,4 @@ +export function isNameValidForInput(name: string | undefined | null , regexCheck: boolean = false): boolean { + if (regexCheck) return !!name && name.replace(/\s/g,'') != ""; + else return !!name && name.trim() != ""; +} \ No newline at end of file From 3e8f56d8b15c9de8fc3d8927c5268792c3f14e1c Mon Sep 17 00:00:00 2001 From: Lennart Schmidt Date: Wed, 22 Nov 2023 09:26:16 +0100 Subject: [PATCH 4/5] added objectdepth function --- general.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/general.ts b/general.ts index 42e27b1..f875505 100644 --- a/general.ts +++ b/general.ts @@ -213,4 +213,8 @@ export function percentRoundString(value: number | string, decimals: number = 0, export function isDict(o: any): boolean { return o === Object(o) && !Array.isArray(o) && typeof o !== 'function'; -} \ No newline at end of file +} + +export function objectDepth(o) { + return Object(o) === o ? 1 + Math.max(-1, ...Object.values(o).map(objectDepth)) : 0 +} From 3137dbe641df4ed54630b3517a2c77374b2bd5e1 Mon Sep 17 00:00:00 2001 From: JWittmeyer Date: Thu, 23 Nov 2023 09:14:15 +0100 Subject: [PATCH 5/5] Adds string list validation wrapper --- validations.ts | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/validations.ts b/validations.ts index a219c6a..fa05cfd 100644 --- a/validations.ts +++ b/validations.ts @@ -1,4 +1,47 @@ -export function isNameValidForInput(name: string | undefined | null , regexCheck: boolean = false): boolean { - if (regexCheck) return !!name && name.replace(/\s/g,'') != ""; +export function isNameValidForInput(name: string | undefined | null, regexCheck: boolean = false): boolean { + if (regexCheck) return !!name && name.replace(/\s/g, '') != ""; else return !!name && name.trim() != ""; +} + + + +// multiple are considered AND connected +export enum CompareOptions { + IGNORE_CASE, // compares string and string list in lower case + TRIM, // trims string and string list + STARTS_WITH, //some start with string + ENDS_WITH, //some end with string + CONTAINS, //some contain string + EQUAL //some are equal to string +} + +export function inStringList(value: string, list: string[], compareOptions?: CompareOptions[]): boolean { + if (!value || !list || list.length === 0) return false; + if (!compareOptions) return list.includes(value); + + const [finalValue, finalList] = applyCompareOptions(value, list, compareOptions); + return finalList.some((item) => { + let result = true; + if (compareOptions.includes(CompareOptions.STARTS_WITH)) result = result && finalValue.startsWith(item); + if (compareOptions.includes(CompareOptions.ENDS_WITH)) result = result && finalValue.endsWith(item); + if (compareOptions.includes(CompareOptions.CONTAINS)) result = result && finalValue.includes(item); + if (compareOptions.includes(CompareOptions.EQUAL)) result = result && item === finalValue; + + if (result) return true; + }); + +} + +function applyCompareOptions(value: string, list: string[], compareOptions?: CompareOptions[]): [string, string[]] { + if (compareOptions) { + if (compareOptions.includes(CompareOptions.IGNORE_CASE)) { + value = value.toLowerCase(); + list = list.map((item) => item.toLowerCase()); + } + if (compareOptions.includes(CompareOptions.TRIM)) { + value = value.trim(); + list = list.map((item) => item.trim()); + } + } + return [value, list]; } \ No newline at end of file