@webtypen/webframez-core 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,5 +33,6 @@ export declare class Datatable {
33
33
  getFilter(req: Request): Promise<any>;
34
34
  getColumns(req: Request): Promise<any>;
35
35
  getOnPressLink(req: Request): Promise<any>;
36
- getFilterMatch(searchOrFilter: any): any;
36
+ private formatFilterEntryVal;
37
+ getFilterMatch(req: Request, searchOrFilter: any): Promise<any>;
37
38
  }
@@ -239,69 +239,87 @@ class Datatable {
239
239
  return this.onPressLink;
240
240
  });
241
241
  }
242
- getFilterMatch(searchOrFilter) {
243
- if (!searchOrFilter || Object.keys(searchOrFilter).length < 1) {
244
- return {};
242
+ formatFilterEntryVal(entry, filterEl, options) {
243
+ const valueClean = entry.value !== undefined && entry.value !== "" ? entry.value : undefined;
244
+ const entryType = entry.type && entry.type.trim() !== "" ? entry.type : filterEl && filterEl.type ? filterEl.type : null;
245
+ let value = undefined;
246
+ if (entryType === "number" || entryType === "numeric" || entryType === "currency") {
247
+ value = parseFloat(valueClean.toString().replace(",", "."));
245
248
  }
246
- const out = {};
247
- for (let key in searchOrFilter) {
248
- let value = undefined;
249
- const entry = searchOrFilter[key];
250
- const valueClean = entry.value !== undefined && entry.value !== "" ? entry.value : undefined;
251
- const operator = entry.operator && entry.operator.trim() !== ""
252
- ? entry.operator
253
- : entry.mode && entry.mode.trim() !== ""
254
- ? entry.mode
255
- : "==";
256
- switch (operator) {
257
- case "empty":
258
- value = null;
259
- break;
260
- case "not_empty":
261
- value = { $ne: null };
262
- break;
263
- case "==":
264
- value = valueClean;
265
- break;
266
- case "!=":
267
- if (valueClean !== undefined) {
268
- value = { $ne: valueClean };
269
- }
270
- break;
271
- case "$gt":
272
- case "$gte":
273
- case "$lt":
274
- case "$lte":
275
- if (valueClean !== undefined) {
276
- value = {
277
- [operator]: entry.type === "number" || entry.type === "numeric" ? parseFloat(valueClean) : valueClean,
278
- };
279
- }
280
- break;
281
- default:
282
- if (valueClean !== undefined) {
283
- if (entry.type === "number" || entry.type === "numeric" || entry.type === "currency") {
284
- value = parseFloat(valueClean.toString().replace(",", "."));
249
+ else if (entryType === "boolean") {
250
+ if (entry.value === "true") {
251
+ value = true;
252
+ }
253
+ else if (entry.value === "false") {
254
+ value = false;
255
+ }
256
+ }
257
+ else {
258
+ if (options && options.regex) {
259
+ value = new RegExp(valueClean, "i");
260
+ }
261
+ else {
262
+ value = valueClean;
263
+ }
264
+ }
265
+ return value;
266
+ }
267
+ getFilterMatch(req, searchOrFilter) {
268
+ return __awaiter(this, void 0, void 0, function* () {
269
+ if (!searchOrFilter || Object.keys(searchOrFilter).length < 1) {
270
+ return {};
271
+ }
272
+ const filterDef = yield this.getFilter(req);
273
+ const out = {};
274
+ for (let key in searchOrFilter) {
275
+ let value = undefined;
276
+ const entry = searchOrFilter[key];
277
+ const valueClean = entry.value !== undefined && entry.value !== "" ? entry.value : undefined;
278
+ const operator = entry.operator && entry.operator.trim() !== ""
279
+ ? entry.operator
280
+ : entry.mode && entry.mode.trim() !== ""
281
+ ? entry.mode
282
+ : "==";
283
+ const filterEl = filterDef && filterDef[key] ? filterDef[key] : null;
284
+ const entryType = entry.type && entry.type.trim() !== "" ? entry.type : filterEl && filterEl.type ? filterEl.type : null;
285
+ switch (operator) {
286
+ case "empty":
287
+ value = null;
288
+ break;
289
+ case "not_empty":
290
+ value = { $ne: null };
291
+ break;
292
+ case "==":
293
+ value = this.formatFilterEntryVal(entry, filterEl);
294
+ break;
295
+ case "!=":
296
+ const temp = this.formatFilterEntryVal(entry, filterEl);
297
+ if (temp !== undefined) {
298
+ value = { $ne: temp };
285
299
  }
286
- else if (entry.type === "boolean") {
287
- if (entry.value === "true") {
288
- value = true;
289
- }
290
- else if (entry.value === "false") {
291
- value = false;
292
- }
300
+ break;
301
+ case "$gt":
302
+ case "$gte":
303
+ case "$lt":
304
+ case "$lte":
305
+ if (valueClean !== undefined) {
306
+ value = {
307
+ [operator]: entryType === "number" || entryType === "numeric" ? parseFloat(valueClean) : valueClean,
308
+ };
293
309
  }
294
- else {
295
- value = new RegExp(valueClean, "i");
310
+ break;
311
+ default:
312
+ if (valueClean !== undefined) {
313
+ value = this.formatFilterEntryVal(entry, filterEl, { regex: true });
296
314
  }
297
- }
298
- break;
299
- }
300
- if (value !== undefined) {
301
- out[key] = value;
315
+ break;
316
+ }
317
+ if (value !== undefined) {
318
+ out[key] = value;
319
+ }
302
320
  }
303
- }
304
- return out;
321
+ return out;
322
+ });
305
323
  }
306
324
  }
307
325
  exports.Datatable = Datatable;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webtypen/webframez-core",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "description": "The core package of the typescript based webframez (web-framework) by webtypen.de",
5
5
  "homepage": "https://webtypen.de/",
6
6
  "license": "MIT",
@@ -251,11 +251,35 @@ export class Datatable {
251
251
  return this.onPressLink;
252
252
  }
253
253
 
254
- getFilterMatch(searchOrFilter: any) {
254
+ private formatFilterEntryVal(entry: any, filterEl: any, options?: any) {
255
+ const valueClean = entry.value !== undefined && entry.value !== "" ? entry.value : undefined;
256
+ const entryType = entry.type && entry.type.trim() !== "" ? entry.type : filterEl && filterEl.type ? filterEl.type : null;
257
+
258
+ let value: any = undefined;
259
+ if (entryType === "number" || entryType === "numeric" || entryType === "currency") {
260
+ value = parseFloat(valueClean.toString().replace(",", "."));
261
+ } else if (entryType === "boolean") {
262
+ if (entry.value === "true") {
263
+ value = true;
264
+ } else if (entry.value === "false") {
265
+ value = false;
266
+ }
267
+ } else {
268
+ if (options && options.regex) {
269
+ value = new RegExp(valueClean, "i");
270
+ } else {
271
+ value = valueClean;
272
+ }
273
+ }
274
+ return value;
275
+ }
276
+
277
+ async getFilterMatch(req: Request, searchOrFilter: any) {
255
278
  if (!searchOrFilter || Object.keys(searchOrFilter).length < 1) {
256
279
  return {};
257
280
  }
258
281
 
282
+ const filterDef = await this.getFilter(req);
259
283
  const out: any = {};
260
284
  for (let key in searchOrFilter) {
261
285
  let value: any = undefined;
@@ -268,6 +292,8 @@ export class Datatable {
268
292
  : entry.mode && entry.mode.trim() !== ""
269
293
  ? entry.mode
270
294
  : "==";
295
+ const filterEl = filterDef && filterDef[key] ? filterDef[key] : null;
296
+ const entryType = entry.type && entry.type.trim() !== "" ? entry.type : filterEl && filterEl.type ? filterEl.type : null;
271
297
  switch (operator) {
272
298
  case "empty":
273
299
  value = null;
@@ -276,11 +302,12 @@ export class Datatable {
276
302
  value = { $ne: null };
277
303
  break;
278
304
  case "==":
279
- value = valueClean;
305
+ value = this.formatFilterEntryVal(entry, filterEl);
280
306
  break;
281
307
  case "!=":
282
- if (valueClean !== undefined) {
283
- value = { $ne: valueClean };
308
+ const temp = this.formatFilterEntryVal(entry, filterEl);
309
+ if (temp !== undefined) {
310
+ value = { $ne: temp };
284
311
  }
285
312
  break;
286
313
  case "$gt":
@@ -289,23 +316,13 @@ export class Datatable {
289
316
  case "$lte":
290
317
  if (valueClean !== undefined) {
291
318
  value = {
292
- [operator]: entry.type === "number" || entry.type === "numeric" ? parseFloat(valueClean) : valueClean,
319
+ [operator]: entryType === "number" || entryType === "numeric" ? parseFloat(valueClean) : valueClean,
293
320
  };
294
321
  }
295
322
  break;
296
323
  default:
297
324
  if (valueClean !== undefined) {
298
- if (entry.type === "number" || entry.type === "numeric" || entry.type === "currency") {
299
- value = parseFloat(valueClean.toString().replace(",", "."));
300
- } else if (entry.type === "boolean") {
301
- if (entry.value === "true") {
302
- value = true;
303
- } else if (entry.value === "false") {
304
- value = false;
305
- }
306
- } else {
307
- value = new RegExp(valueClean, "i");
308
- }
325
+ value = this.formatFilterEntryVal(entry, filterEl, { regex: true });
309
326
  }
310
327
  break;
311
328
  }