@cocreate/utils 1.12.7 → 1.13.1
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.
- package/CHANGELOG.md +16 -0
- package/package.json +2 -2
- package/src/utils.js +204 -121
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## [1.13.1](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.13.0...v1.13.1) (2022-12-02)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* bump dependencies ([d260b53](https://github.com/CoCreate-app/CoCreate-utils/commit/d260b531473a55becb72c25bc79b1e4924b9331e))
|
|
7
|
+
* docs ([8c98304](https://github.com/CoCreate-app/CoCreate-utils/commit/8c98304bb530b7d1357788ef9b03589cef1fcf4b))
|
|
8
|
+
|
|
9
|
+
# [1.13.0](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.12.7...v1.13.0) (2022-12-02)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
* getValueFromObject returns the defined key value, supports dot notation string. queryData supports logicalOperators and, or ([4d3c5e2](https://github.com/CoCreate-app/CoCreate-utils/commit/4d3c5e273ebe6042f78cb8f85d535468c1bd049d))
|
|
15
|
+
* search param caseSensitive and search can be an array ([50cd481](https://github.com/CoCreate-app/CoCreate-utils/commit/50cd4810bfa0b1e286b30d8418246045e67a2b37))
|
|
16
|
+
|
|
1
17
|
## [1.12.7](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.12.6...v1.12.7) (2022-11-28)
|
|
2
18
|
|
|
3
19
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocreate/utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.1",
|
|
4
4
|
"description": "A simple utils component in vanilla javascript. Easily configured using HTML5 attributes and/or JavaScript API.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"utils",
|
|
@@ -61,6 +61,6 @@
|
|
|
61
61
|
"webpack-log": "^3.0.1"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@cocreate/docs": "^1.4.
|
|
64
|
+
"@cocreate/docs": "^1.4.11"
|
|
65
65
|
}
|
|
66
66
|
}
|
package/src/utils.js
CHANGED
|
@@ -73,6 +73,31 @@
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
function getValueFromObject(json, path) {
|
|
77
|
+
try {
|
|
78
|
+
if (typeof json == 'undefined' || !path)
|
|
79
|
+
return false;
|
|
80
|
+
|
|
81
|
+
if (/\[([0-9]*)\]/g.test(path)) {
|
|
82
|
+
path = path.replace(/\[/g, '.');
|
|
83
|
+
if (path.endsWith(']'))
|
|
84
|
+
path = path.slice(0, -1)
|
|
85
|
+
path = path.replace(/\]./g, '.');
|
|
86
|
+
path = path.replace(/\]/g, '.');
|
|
87
|
+
}
|
|
88
|
+
let jsonData = json, subpath = path.split('.');
|
|
89
|
+
|
|
90
|
+
for (let i = 0; i < subpath.length; i++) {
|
|
91
|
+
jsonData = jsonData[subpath[i]];
|
|
92
|
+
if (!jsonData) return false;
|
|
93
|
+
}
|
|
94
|
+
return jsonData;
|
|
95
|
+
}catch(error){
|
|
96
|
+
console.log("Error in getValueFromObject", error);
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
76
101
|
function parseTextToHtml(text) {
|
|
77
102
|
let doc = new DOMParser().parseFromString(text, "text/html");
|
|
78
103
|
if (doc.head.children[0]) return doc.head.children[0];
|
|
@@ -247,143 +272,200 @@
|
|
|
247
272
|
}
|
|
248
273
|
}
|
|
249
274
|
|
|
250
|
-
function queryData(
|
|
251
|
-
|
|
252
|
-
let flag = true;
|
|
253
|
-
if (!item)
|
|
275
|
+
function queryData(data, query) {
|
|
276
|
+
if (!data)
|
|
254
277
|
return false;
|
|
255
|
-
if (!query.length)
|
|
256
|
-
return true;
|
|
257
|
-
|
|
258
|
-
if (Array.isArray(item))
|
|
259
|
-
return false;
|
|
260
278
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
if (fieldValue == undefined)
|
|
264
|
-
fieldValue = ''
|
|
265
|
-
let values = query[i].value
|
|
266
|
-
if (!Array.isArray(values))
|
|
267
|
-
values = [values]
|
|
268
|
-
|
|
269
|
-
for (let value of values) {
|
|
270
|
-
switch (query[i].operator) {
|
|
271
|
-
case '$contain':
|
|
272
|
-
if (!fieldValue.includes(value))
|
|
273
|
-
flag = false;
|
|
274
|
-
break;
|
|
275
|
-
case '$range':
|
|
276
|
-
if (value !== null && value !== null) {
|
|
277
|
-
if (value[0] > fieldValue || value[1] <= fieldValue)
|
|
278
|
-
flag = false;
|
|
279
|
-
} else if (item.value[0] == null && value[1] >= fieldValue) {
|
|
280
|
-
flag = false;
|
|
281
|
-
} else if (item.value[1] == null && value[0] <= fieldValue) {
|
|
282
|
-
flag = false;
|
|
283
|
-
}
|
|
284
|
-
break;
|
|
285
|
-
case '$eq':
|
|
286
|
-
if (fieldValue != value) flag = false;
|
|
287
|
-
break;
|
|
288
|
-
case '$ne':
|
|
289
|
-
if (fieldValue == value) flag = false;
|
|
290
|
-
break;
|
|
291
|
-
case '$lt':
|
|
292
|
-
if (fieldValue >= value) flag = false;
|
|
293
|
-
break;
|
|
294
|
-
case '$lte':
|
|
295
|
-
if (fieldValue > value) flag = false;
|
|
296
|
-
break;
|
|
297
|
-
case '$gt':
|
|
298
|
-
if (fieldValue <= value) flag = false;
|
|
299
|
-
break;
|
|
300
|
-
case '$gte':
|
|
301
|
-
if (fieldValue < value) flag = false;
|
|
302
|
-
break;
|
|
303
|
-
case '$in':
|
|
304
|
-
if (!Array.isArray(fieldValue) || !fieldValue.some(x => value.includes(x))) flag = false;
|
|
305
|
-
break;
|
|
306
|
-
case '$nin':
|
|
307
|
-
if (Array.isArray(fieldValue) && fieldValue.some(x => value.includes(x))) flag = false;
|
|
308
|
-
break;
|
|
309
|
-
default:
|
|
310
|
-
// if (!Array.isArray(fieldValue) || !fieldValue.some(x => value.includes(x))) flag = false;
|
|
311
|
-
if (fieldValue && !fieldValue.includes(value)) flag = false;
|
|
312
|
-
break;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
return flag;
|
|
317
|
-
}
|
|
279
|
+
if (!Array.isArray(data))
|
|
280
|
+
data = [data]
|
|
318
281
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
if (!
|
|
282
|
+
if (!query)
|
|
283
|
+
return true
|
|
284
|
+
|
|
285
|
+
if (!Array.isArray(query))
|
|
286
|
+
query = [query]
|
|
287
|
+
if (!query.length)
|
|
323
288
|
return true
|
|
324
|
-
for (var key in data) {
|
|
325
|
-
let value = data[key];
|
|
326
|
-
let status = false;
|
|
327
|
-
|
|
328
|
-
if (Array.isArray(value) || typeof value == 'number') {
|
|
329
|
-
value = value.toString();
|
|
330
|
-
}
|
|
331
289
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
290
|
+
let queryResult = false
|
|
291
|
+
for (let n = 0; n < data.length; n++) {
|
|
292
|
+
for (let i = 0; i < query.length; i++) {
|
|
293
|
+
let dataValue
|
|
294
|
+
if (query[i].name.includes('.') || /\[([0-9]*)\]/g.test(query[i].name))
|
|
295
|
+
dataValue = getValueFromObject(data[n], query[i].name)
|
|
296
|
+
else
|
|
297
|
+
dataValue = data[n][query[i].name]
|
|
298
|
+
if (dataValue == undefined)
|
|
299
|
+
dataValue = ''
|
|
300
|
+
let logicalOperator = query[i].logicalOperator || 'or'
|
|
301
|
+
let queryValues = query[i].value
|
|
302
|
+
if (!Array.isArray(queryValues))
|
|
303
|
+
queryValues = [queryValues]
|
|
304
|
+
|
|
305
|
+
let queryStatus = false
|
|
306
|
+
for (let queryValue of queryValues) {
|
|
307
|
+
if (query[i].caseSensitive != 'true' || query[i].caseSensitive != true) {
|
|
308
|
+
if (typeof dataValue == 'string')
|
|
309
|
+
dataValue = dataValue.toLowerCase()
|
|
310
|
+
if (typeof queryValue == 'string')
|
|
311
|
+
queryValue = queryValue.toLowerCase()
|
|
312
|
+
}
|
|
339
313
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
314
|
+
switch (query[i].operator) {
|
|
315
|
+
case '$includes':
|
|
316
|
+
if (dataValue.includes(queryValue))
|
|
317
|
+
queryStatus = true
|
|
318
|
+
break;
|
|
319
|
+
case '$eq':
|
|
320
|
+
if (dataValue == queryValue)
|
|
321
|
+
queryStatus = true
|
|
322
|
+
break;
|
|
323
|
+
case '$ne':
|
|
324
|
+
if (dataValue != queryValue)
|
|
325
|
+
queryStatus = true
|
|
326
|
+
break;
|
|
327
|
+
case '$lt':
|
|
328
|
+
if (dataValue > queryValue)
|
|
329
|
+
queryStatus = true
|
|
330
|
+
break;
|
|
331
|
+
case '$lte':
|
|
332
|
+
if (dataValue >= queryValue)
|
|
333
|
+
queryStatus = true
|
|
334
|
+
break;
|
|
335
|
+
case '$gt':
|
|
336
|
+
if (dataValue < queryValue)
|
|
337
|
+
queryStatus = true
|
|
338
|
+
break;
|
|
339
|
+
case '$gte':
|
|
340
|
+
if (dataValue <= queryValue)
|
|
341
|
+
queryStatus = true
|
|
342
|
+
break;
|
|
343
|
+
case '$in':
|
|
344
|
+
if (Array.isArray(dataValue) && dataValue.some(x => queryValue.includes(x)))
|
|
345
|
+
queryStatus = true
|
|
346
|
+
break;
|
|
347
|
+
case '$nin':
|
|
348
|
+
if (!Array.isArray(dataValue) || !dataValue.some(x => queryValue.includes(x)))
|
|
349
|
+
queryStatus = true
|
|
350
|
+
break;
|
|
351
|
+
case '$range':
|
|
352
|
+
if (queryValue[0] !== null && queryValue[1] !== null) {
|
|
353
|
+
if (dataValue >= queryValue[0] && dataValue <= queryValue[1])
|
|
354
|
+
queryStatus = true
|
|
355
|
+
} else if (queryValue[0] == null && dataValue <= queryValue[1]) {
|
|
356
|
+
queryStatus = true
|
|
357
|
+
} else if (queryValue[1] == null && dataValue >= queryValue[0]) {
|
|
358
|
+
queryStatus = true
|
|
359
|
+
}
|
|
360
|
+
break;
|
|
361
|
+
|
|
362
|
+
default:
|
|
363
|
+
if (dataValue.includes(queryValue))
|
|
364
|
+
queryStatus = true
|
|
365
|
+
break;
|
|
344
366
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
367
|
+
if (queryStatus == true) {
|
|
368
|
+
queryResult = true
|
|
369
|
+
break;
|
|
348
370
|
}
|
|
371
|
+
|
|
349
372
|
}
|
|
350
|
-
|
|
351
|
-
|
|
373
|
+
switch (logicalOperator) {
|
|
374
|
+
case 'and':
|
|
375
|
+
if (queryStatus == false)
|
|
376
|
+
return false
|
|
377
|
+
break;
|
|
352
378
|
}
|
|
353
|
-
if (
|
|
354
|
-
|
|
379
|
+
// if (logicalOperator == 'and' && queryStatus == false)
|
|
380
|
+
// return false
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
return queryResult;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
function searchData(data, search) {
|
|
388
|
+
if (!search)
|
|
389
|
+
return true
|
|
390
|
+
if (!Array.isArray(search))
|
|
391
|
+
search = [search]
|
|
392
|
+
for (let i = 0; i < search.length; i++) {
|
|
393
|
+
let searchValue = search[i].value
|
|
394
|
+
if (!Array.isArray(searchValue))
|
|
395
|
+
searchValue = [searchValue]
|
|
396
|
+
for (let key in data) {
|
|
397
|
+
let value = data[key];
|
|
398
|
+
let status = false;
|
|
399
|
+
switch (typeof value) {
|
|
400
|
+
case 'number':
|
|
401
|
+
value = value.toString();
|
|
402
|
+
break;
|
|
403
|
+
case 'object':
|
|
404
|
+
value = JSON.stringify(value)
|
|
405
|
+
break;
|
|
406
|
+
case 'function':
|
|
407
|
+
value = value.toString();
|
|
408
|
+
break;
|
|
355
409
|
}
|
|
410
|
+
if (search[i].caseSensitive != 'true' || search[i].caseSensitive != true)
|
|
411
|
+
value = value.toLowerCase()
|
|
412
|
+
|
|
413
|
+
for (let i = 0; i < searchValue.length; i++) {
|
|
414
|
+
let searchString = searchValue[i]
|
|
415
|
+
if (search[i].caseSensitive != 'true' || search[i].caseSensitive != true)
|
|
416
|
+
searchString = searchString.toLowerCase()
|
|
417
|
+
|
|
418
|
+
if (value.indexOf(searchString) > -1)
|
|
419
|
+
status = true;
|
|
356
420
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
421
|
+
if (search[i].operator == 'or' && status)
|
|
422
|
+
return true;
|
|
423
|
+
|
|
424
|
+
if (search[i].operator == 'and' && !status)
|
|
425
|
+
return false;
|
|
361
426
|
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
if (search[i].value.length && operator == 'or')
|
|
430
|
+
return false
|
|
431
|
+
|
|
432
|
+
}
|
|
433
|
+
return true
|
|
362
434
|
}
|
|
363
435
|
|
|
364
|
-
function sortData(data,
|
|
365
|
-
if (!Array.isArray(
|
|
366
|
-
|
|
367
|
-
for (let sort
|
|
368
|
-
let name = sort.name
|
|
436
|
+
function sortData(data, sort) {
|
|
437
|
+
if (!Array.isArray(sort))
|
|
438
|
+
sort = [sort]
|
|
439
|
+
for (let i = 0; i < sort.length; i++) {
|
|
440
|
+
let name = sort[i].name
|
|
369
441
|
if (name) {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
442
|
+
try {
|
|
443
|
+
data.sort((a, b) => {
|
|
444
|
+
if (sort[i].direction == '-1') {
|
|
445
|
+
switch (typeof b[name]) {
|
|
446
|
+
case 'string':
|
|
447
|
+
return b[name].localeCompare(a[name])
|
|
448
|
+
case 'number':
|
|
449
|
+
return b[name] - a[name]
|
|
450
|
+
case 'array':
|
|
451
|
+
case 'object':
|
|
452
|
+
break;
|
|
453
|
+
}
|
|
454
|
+
} else {
|
|
455
|
+
switch (typeof a[name]) {
|
|
456
|
+
case 'string':
|
|
457
|
+
return a[name].localeCompare(b[name])
|
|
458
|
+
case 'number':
|
|
459
|
+
return a[name] - b[name]
|
|
460
|
+
case 'array':
|
|
461
|
+
case 'object':
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
} catch (error) {
|
|
467
|
+
console.log(error)
|
|
468
|
+
}
|
|
387
469
|
}
|
|
388
470
|
}
|
|
389
471
|
return data;
|
|
@@ -416,6 +498,7 @@
|
|
|
416
498
|
return {
|
|
417
499
|
parseTextToHtml,
|
|
418
500
|
dotNotationToObject,
|
|
501
|
+
getValueFromObject,
|
|
419
502
|
cssPath,
|
|
420
503
|
domParser,
|
|
421
504
|
queryDocumentSelector,
|