|
166 | 166 |
|
167 | 167 | return data; |
168 | 168 | } catch (error) { |
169 | | - console.error("Error in getValueFromObject:", error); |
| 169 | + // console.error("Error in getValueFromObject:", error); |
170 | 170 | if (throwError) |
171 | 171 | throw error; |
172 | 172 | } |
|
422 | 422 | return selector |
423 | 423 | } |
424 | 424 |
|
425 | | - |
426 | 425 | function queryData(data, query) { |
427 | | - if (!data) |
428 | | - return false; |
429 | | - |
430 | | - if (!Array.isArray(data)) |
431 | | - data = [data] |
432 | | - |
433 | | - if (!query) |
434 | | - return true |
435 | | - |
436 | | - if (!Array.isArray(query)) |
437 | | - query = [query] |
438 | | - if (!query.length) |
439 | | - return true |
440 | | - |
441 | | - let queryResult = false |
442 | | - for (let n = 0; n < data.length; n++) { |
443 | | - for (let i = 0; i < query.length; i++) { |
444 | | - let dataValue |
445 | | - if (query[i].key.includes('.') || /\[([0-9]*)\]/g.test(query[i].key)) |
446 | | - dataValue = getValueFromObject(data[n], query[i].key) |
447 | | - else |
448 | | - dataValue = data[n][query[i].key] |
449 | | - if (dataValue == undefined) |
450 | | - dataValue = '' |
451 | | - let logicalOperator = query[i].logicalOperator || 'and' |
452 | | - let queryValues = query[i].value |
453 | | - |
454 | | - let queryIsArray = false |
455 | | - if (!Array.isArray(queryValues)) |
456 | | - queryValues = [queryValues] |
457 | | - else |
458 | | - queryIsArray = true |
459 | | - |
460 | | - |
461 | | - let queryStatus = false |
462 | | - for (let queryValue of queryValues) { |
463 | | - if (query[i].caseSensitive != 'true' || query[i].caseSensitive != true) { |
464 | | - if (typeof dataValue == 'string') |
465 | | - dataValue = dataValue.toLowerCase() |
466 | | - if (typeof queryValue == 'string') |
467 | | - queryValue = queryValue.toLowerCase() |
468 | | - } |
469 | | - |
470 | | - if (isValidDate(dataValue) && isValidDate(queryValue)) { |
471 | | - dataValue = new Date(dataValue) |
472 | | - queryValue = new Date(queryValue) |
473 | | - } |
474 | | - switch (query[i].operator) { |
475 | | - case '$includes': |
476 | | - case 'includes': |
477 | | - if (dataValue.includes(queryValue)) |
478 | | - queryStatus = true |
479 | | - // if (queryValue === "" && logicalOperator === 'and') { |
480 | | - // if (dataValue !== "") |
481 | | - // queryStatus = false |
482 | | - // } |
483 | | - break; |
484 | | - case '$eq': |
485 | | - if (dataValue == queryValue) |
486 | | - queryStatus = true |
487 | | - break; |
488 | | - case '$ne': |
489 | | - if (Array.isArray(dataValue)) { |
490 | | - // Check if the entire array is different from queryValue |
491 | | - queryStatus = !isEqualArray(dataValue, queryValue); |
492 | | - } else if (Array.isArray(queryValue)) { |
493 | | - // If queryValue is an array, check if dataValue is different from this array |
494 | | - queryStatus = !isEqualArray(queryValue, dataValue); |
495 | | - } else { |
496 | | - // If neither is an array, simple comparison |
497 | | - queryStatus = (dataValue != queryValue); |
498 | | - } |
499 | | - break; |
500 | | - case '$lt': |
501 | | - if (dataValue < queryValue) |
502 | | - queryStatus = true |
503 | | - break; |
504 | | - case '$lte': |
505 | | - if (dataValue <= queryValue) |
506 | | - queryStatus = true |
507 | | - break; |
508 | | - case '$gt': |
509 | | - if (dataValue > queryValue) |
510 | | - queryStatus = true |
511 | | - break; |
512 | | - case '$gte': |
513 | | - if (dataValue >= queryValue) |
514 | | - queryStatus = true |
515 | | - break; |
516 | | - case '$in': |
517 | | - if (Array.isArray(dataValue)) { |
518 | | - queryStatus = dataValue.some(element => queryValue.includes(element)); |
519 | | - } else { |
520 | | - queryStatus = queryValue.includes(dataValue); |
521 | | - } |
522 | | - break; |
523 | | - case '$nin': |
524 | | - if (Array.isArray(dataValue)) { |
525 | | - queryStatus = !dataValue.some(element => queryValue.includes(element)); |
526 | | - } else { |
527 | | - queryStatus = !queryValue.includes(dataValue); |
528 | | - } |
529 | | - break; |
530 | | - case '$range': |
531 | | - if (queryValue[0] !== null && queryValue[1] !== null) { |
532 | | - if (dataValue >= queryValue[0] && dataValue <= queryValue[1]) |
533 | | - queryStatus = true |
534 | | - } else if (queryValue[0] == null && dataValue <= queryValue[1]) { |
535 | | - queryStatus = true |
536 | | - } else if (queryValue[1] == null && dataValue >= queryValue[0]) { |
537 | | - queryStatus = true |
538 | | - } |
539 | | - break; |
540 | | - |
541 | | - default: |
542 | | - if (dataValue.includes(queryValue)) |
543 | | - queryStatus = true |
544 | | - break; |
545 | | - } |
546 | | - if (!queryIsArray || query[i].operator === "$nin") { |
547 | | - switch (logicalOperator) { |
548 | | - case 'and': |
549 | | - if (queryStatus == false) |
550 | | - return false |
551 | | - break; |
552 | | - // case 'or': |
553 | | - // if (queryStatus == true) |
554 | | - // queryResult = queryStatus |
555 | | - // break; |
556 | | - } |
557 | | - } else if (queryStatus && query[i].operator === "$in") |
558 | | - return true |
559 | | - queryResult = queryStatus |
560 | | - } |
561 | | - } |
562 | | - } |
563 | | - |
564 | | - return queryResult; |
565 | | - } |
566 | | - |
567 | | - function query(data, query) { |
568 | 426 | if (query.$and) { |
569 | 427 | for (let i = 0; i < query.$and.length; i++) { |
570 | | - if (!query(data, query.$and[i])) |
| 428 | + if (!queryData(data, query.$and[i])) |
571 | 429 | return false |
572 | 430 | } |
573 | 431 | } |
574 | 432 |
|
575 | 433 | if (query.$nor) { |
576 | 434 | for (let i = 0; i < query.$nor.length; i++) { |
577 | | - if (query(data, query.$nor[i])) |
| 435 | + if (queryData(data, query.$nor[i])) |
578 | 436 | return false; |
579 | 437 | } |
580 | 438 | } |
|
588 | 446 |
|
589 | 447 | if (query.$or) { |
590 | 448 | for (let i = 0; i < query.$or.length; i++) { |
591 | | - if (query(data, query.$or[i])) |
| 449 | + if (queryData(data, query.$or[i])) |
592 | 450 | return true |
593 | 451 | } |
594 | 452 | } |
|
605 | 463 | try { |
606 | 464 | dataValue = getValueFromObject(data, key, true) |
607 | 465 | } catch (error) { |
608 | | - |
| 466 | + return false |
609 | 467 | } |
610 | 468 |
|
611 | 469 | if (typeof query[key] === 'string' || typeof query[key] === 'number' || typeof query[key] === 'boolean') { |
|
907 | 765 | cssPath, |
908 | 766 | queryElements, |
909 | 767 | checkMediaQueries, |
910 | | - query, |
911 | 768 | queryData, |
912 | 769 | searchData, |
913 | 770 | sortData, |
|
0 commit comments