Skip to content
Snippets Groups Projects
Commit a3911ab5 authored by Christian Knecht's avatar Christian Knecht
Browse files

feature: allow to filter array of strings using filter$Text if no indexedProperties are passed

parent 35466db4
No related branches found
No related tags found
No related merge requests found
......@@ -103,21 +103,26 @@ exports.filter = filter;
* @param {Boolean} [diacriticSensitive]
* @param {Array<String>} indexedProperties
*/
function filter$Text(value, search, diacriticSensitive, indexedProperties = []) {
function filter$Text(value, search, diacriticSensitive, indexedProperties) {
let filter = false;
for (const indexedProperty of indexedProperties) {
if (Array.isArray(value[indexedProperty])) {
for (value of value[indexedProperty]) {
filter = search.test(diacriticSensitive ? value : (0, deburr_1.default)(value));
if (Array.isArray(indexedProperties)) {
for (const indexedProperty of indexedProperties) {
if (Array.isArray(value[indexedProperty])) {
for (value of value[indexedProperty]) {
filter = search.test(diacriticSensitive ? value : (0, deburr_1.default)(value));
if (filter)
break;
}
}
else {
filter = search.test(diacriticSensitive ? value[indexedProperty] : (0, deburr_1.default)(value[indexedProperty]));
if (filter)
break;
}
}
else {
filter = search.test(diacriticSensitive ? value[indexedProperty] : (0, deburr_1.default)(value[indexedProperty]));
if (filter)
break;
}
}
else {
filter = search.test(diacriticSensitive ? value : (0, deburr_1.default)(value));
}
return filter;
}
......
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/utilities/filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,6CAAiD;AACjD,2DAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,SAAgB,MAAM,CAAC,KAAY,EAAE,SAAuB,EAAE,iBAA4B;IACtF,OAAO,KAAK,CAAC,MAAM,CAAC,IAAA,cAAI,EAAC,SAAS,EAC9B;QACI,UAAU,EAAE;YACR,KAAK,CAAC,MAAoH,EAAE,UAAU,EAAE,OAAO;gBAC3I,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,gBAAM,EAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClI,OAAO,IAAA,4BAAqB,EAAC,CAAC,KAAU,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACjJ,CAAC;SACJ;KACJ,CAAC,CAAC,CAAC;AACZ,CAAC;AAVD,wBAUC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,WAAW,CAAC,KAAU,EAAE,MAAc,EAAE,kBAA4B,EAAE,oBAA8B,EAAE;IAC3G,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE;YACvC,KAAK,KAAK,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE;gBAClC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,gBAAM,EAAC,KAAK,CAAC,CAAC,CAAC;gBACjE,IAAI,MAAM;oBAAE,MAAM;aACrB;SACJ;aAAM;YACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAA,gBAAM,EAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACnG,IAAI,MAAM;gBAAE,MAAM;SACrB;KACJ;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
\ No newline at end of file
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/utilities/filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,6CAAiD;AACjD,2DAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,SAAgB,MAAM,CAAC,KAAY,EAAE,SAAuB,EAAE,iBAA4B;IACtF,OAAO,KAAK,CAAC,MAAM,CAAC,IAAA,cAAI,EAAC,SAAS,EAC9B;QACI,UAAU,EAAE;YACR,KAAK,CAAC,MAAoH,EAAE,UAAU,EAAE,OAAO;gBAC3I,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,gBAAM,EAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClI,OAAO,IAAA,4BAAqB,EAAC,CAAC,KAAU,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACjJ,CAAC;SACJ;KACJ,CAAC,CAAC,CAAC;AACZ,CAAC;AAVD,wBAUC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,WAAW,CAAC,KAAU,EAAE,MAAc,EAAE,kBAA4B,EAAE,iBAA4B;IACvG,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;QAClC,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE;YAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE;gBACvC,KAAK,KAAK,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE;oBAClC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,gBAAM,EAAC,KAAK,CAAC,CAAC,CAAC;oBACjE,IAAI,MAAM;wBAAE,MAAM;iBACrB;aACJ;iBAAM;gBACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAA,gBAAM,EAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACnG,IAAI,MAAM;oBAAE,MAAM;aACrB;SACJ;KACJ;SAAM;QACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,gBAAM,EAAC,KAAK,CAAC,CAAC,CAAC;KACpE;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
\ No newline at end of file
This diff is collapsed.
{
"name": "value-converters",
"version": "1.4.2",
"version": "1.5.0",
"description": "extended filtering function, sorting, localization, dissolving urls and reusable validators",
"main": "dist/index.js",
"scripts": {
......@@ -23,20 +23,20 @@
"author": "Christian Knecht <christian.knecht@iao.fraunhofer.de>",
"license": "BSD-3-Clause-Clear",
"devDependencies": {
"@types/jest": "^29.2.5",
"@types/lodash": "^4.14.191",
"@types/jest": "^29.5.3",
"@types/lodash": "^4.14.195",
"@types/traverse": "^0.6.32",
"@typescript-eslint/eslint-plugin": "^5.48.1",
"@typescript-eslint/parser": "^5.48.1",
"eslint": "^8.31.0",
"jest": "^29.3.1",
"rimraf": "^3.0.2",
"ts-jest": "^29.0.3",
"typescript": "^4.9.4"
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.44.0",
"jest": "^29.6.1",
"rimraf": "^5.0.1",
"ts-jest": "^29.1.1",
"typescript": "^5.1.6"
},
"dependencies": {
"lodash": "^4.17.21",
"sift": "^16.0.1",
"sift": "^17.0.1",
"traverse": "^0.6.7"
},
"jest": {
......
......@@ -76,18 +76,22 @@ export function filter(array: any[], predicate: string | any, indexedProperties?
* @param {Boolean} [diacriticSensitive]
* @param {Array<String>} indexedProperties
*/
function filter$Text(value: any, search: RegExp, diacriticSensitive?: boolean, indexedProperties: string[] = []): boolean {
function filter$Text(value: any, search: RegExp, diacriticSensitive?: boolean, indexedProperties?: string[]): boolean {
let filter = false;
for (const indexedProperty of indexedProperties) {
if (Array.isArray(value[indexedProperty])) {
for (value of value[indexedProperty]) {
filter = search.test(diacriticSensitive ? value : deburr(value));
if (Array.isArray(indexedProperties)) {
for (const indexedProperty of indexedProperties) {
if (Array.isArray(value[indexedProperty])) {
for (value of value[indexedProperty]) {
filter = search.test(diacriticSensitive ? value : deburr(value));
if (filter) break;
}
} else {
filter = search.test(diacriticSensitive ? value[indexedProperty] : deburr(value[indexedProperty]));
if (filter) break;
}
} else {
filter = search.test(diacriticSensitive ? value[indexedProperty] : deburr(value[indexedProperty]));
if (filter) break;
}
} else {
filter = search.test(diacriticSensitive ? value : deburr(value));
}
return filter;
}
......@@ -90,3 +90,16 @@ test.each([
expect(filter(items, predicate, ['name', 'description']).length).toBe(expected);
}
);
test.each([
[{$text: {$caseSensitive: true, $search: 'test'}}, 3],
[{$text: {$caseSensitive: false, $search: 'test'}}, 4],
[{$text: {$caseSensitive: true, $search: 'test1'}}, 1],
[{$text: {$caseSensitive: true, $search: 'TEST1'}}, 0],
[{$text: {$caseSensitive: false, $search: 'TEST1'}}, 1]
])(
'filter with predicate %j = %i',
(predicate, expected) => {
expect(filter(['test1', 'test2', 'test3', 'TEST4'], predicate).length).toBe(expected);
}
);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment