@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
|
-
|
|
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
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
-
|
|
295
|
-
|
|
310
|
+
break;
|
|
311
|
+
default:
|
|
312
|
+
if (valueClean !== undefined) {
|
|
313
|
+
value = this.formatFilterEntryVal(entry, filterEl, { regex: true });
|
|
296
314
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
if (value !== undefined) {
|
|
318
|
+
out[key] = value;
|
|
319
|
+
}
|
|
302
320
|
}
|
|
303
|
-
|
|
304
|
-
|
|
321
|
+
return out;
|
|
322
|
+
});
|
|
305
323
|
}
|
|
306
324
|
}
|
|
307
325
|
exports.Datatable = Datatable;
|
package/package.json
CHANGED
|
@@ -251,11 +251,35 @@ export class Datatable {
|
|
|
251
251
|
return this.onPressLink;
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
-
|
|
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 =
|
|
305
|
+
value = this.formatFilterEntryVal(entry, filterEl);
|
|
280
306
|
break;
|
|
281
307
|
case "!=":
|
|
282
|
-
|
|
283
|
-
|
|
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]:
|
|
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
|
-
|
|
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
|
}
|