@cocreate/utils 1.12.6 → 1.13.0

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.
Files changed (3) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/package.json +2 -2
  3. package/src/utils.js +204 -121
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # [1.13.0](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.12.7...v1.13.0) (2022-12-02)
2
+
3
+
4
+ ### Features
5
+
6
+ * 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))
7
+ * search param caseSensitive and search can be an array ([50cd481](https://github.com/CoCreate-app/CoCreate-utils/commit/50cd4810bfa0b1e286b30d8418246045e67a2b37))
8
+
9
+ ## [1.12.7](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.12.6...v1.12.7) (2022-11-28)
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * bump dependencies ([36a7c1c](https://github.com/CoCreate-app/CoCreate-utils/commit/36a7c1c273c6767f6202241659172fd76ebd452a))
15
+
1
16
  ## [1.12.6](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.12.5...v1.12.6) (2022-11-28)
2
17
 
3
18
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/utils",
3
- "version": "1.12.6",
3
+ "version": "1.13.0",
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.7"
64
+ "@cocreate/docs": "^1.4.8"
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(item, query) {
251
- //. $contain, $range, $eq, $ne, $lt, $lte, $gt, $gte, $in, $nin, $geoWithin
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
- for (let i = 0; i < query.length; i++) {
262
- let fieldValue = item[query[i].name];
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
- function searchData(data, searches) {
320
- const search = searches['value']
321
- const operator = searches['type']
322
- if (!search.length)
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
- if (typeof value == 'object') {
333
- // run keys of object or JSON.stringify
334
- }
335
-
336
- if (typeof value == 'string') {
337
- value = value.toUpperCase();
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
- for (let i = 0; i < search.length; i++) {
341
- if (typeof search[i] == 'string' && typeof value == 'string') {
342
- if (value.indexOf(search[i].toUpperCase()) > -1) {
343
- status = true;
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
- } else {
346
- if (value == search[i]) {
347
- status = true;
367
+ if (queryStatus == true) {
368
+ queryResult = true
369
+ break;
348
370
  }
371
+
349
372
  }
350
- if (operator == 'or' && status) {
351
- return true;
373
+ switch (logicalOperator) {
374
+ case 'and':
375
+ if (queryStatus == false)
376
+ return false
377
+ break;
352
378
  }
353
- if (operator == 'and' && !status) {
354
- return false;
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
- if (search.length && operator == 'or')
360
- return false
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, sorts) {
365
- if (!Array.isArray(sorts))
366
- sorts = [sorts]
367
- for (let sort of sorts) {
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
- data.sort((a, b) => {
371
- if (!a[name])
372
- a[name] = ''
373
- if (!b[name])
374
- b[name] = ''
375
- if (sort.type == '-1') {
376
- if (sort.valueType == 'number')
377
- return b[name] - a[name]
378
- else
379
- return b[name].localeCompare(a[name])
380
- } else {
381
- if (sort.valueType == 'number')
382
- return a[name] - b[name]
383
- else
384
- return a[name].localeCompare(b[name])
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,