@sumaris-net/ngx-components 1.5.4 → 1.5.8

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.
@@ -523,49 +523,56 @@
523
523
  return { data: [], total: 0 };
524
524
  }
525
525
  // Filter items
526
- var target = items;
526
+ var filteredItems = items;
527
527
  if (isNotNilOrBlank(value)) {
528
528
  // If wildcard, search using regexp
529
529
  if (value.indexOf('*') !== -1) {
530
530
  value = value.replace('*', '.*');
531
- target = target.filter(function (v) { return keys.findIndex(function (key) { return matchUpperCase(getPropertyByPathAsString(v, key), value); }) !== -1; });
531
+ filteredItems = filteredItems.filter(function (v) { return keys.findIndex(function (key) { return matchUpperCase(getPropertyByPathAsString(v, key), value); }) !== -1; });
532
532
  }
533
533
  // Else (no wildcard), search using startsWith
534
534
  else {
535
- target = target.filter(function (v) { return keys.findIndex(function (key) { return startsWithUpperCase(getPropertyByPathAsString(v, key), value); }) !== -1; });
535
+ filteredItems = filteredItems.filter(function (v) { return keys.findIndex(function (key) { return startsWithUpperCase(getPropertyByPathAsString(v, key), value); }) !== -1; });
536
536
  }
537
537
  }
538
538
  // Exclude ids
539
539
  if (isNotEmptyArray(opts === null || opts === void 0 ? void 0 : opts.excludedIds)) {
540
- target = target.filter(function (v) { return !opts.excludedIds.includes(+v['id']); });
541
- }
542
- // Sort (copy if need, before sorting)
543
- if (target === items)
544
- target = target.slice();
545
- target.sort(propertiesPathComparator(keys));
546
- var total = items.length || 0;
547
- var fetchMore;
548
- // Truncate if need
540
+ filteredItems = filteredItems.filter(function (v) { return !opts.excludedIds.includes(+v['id']); });
541
+ }
542
+ // Sort
543
+ if (!opts || opts.skipSort !== true) {
544
+ // Make to copy input items, before sorting (if not yet already done)
545
+ if (filteredItems === items)
546
+ filteredItems = filteredItems.slice();
547
+ // Sort by keys
548
+ filteredItems.sort(propertiesPathComparator(keys));
549
+ }
550
+ var total = filteredItems.length || 0;
551
+ // Pagination (truncate if need)
552
+ var pageData = filteredItems;
549
553
  if (opts) {
550
- if (isNil(opts.offset) && opts.offset > 0) {
551
- items = items.slice(opts.offset);
554
+ if (isNotNil(opts.offset) && opts.offset > 0) {
555
+ pageData = pageData.slice(opts.offset);
552
556
  }
553
- if (isNotNil(opts.size) && items.length > opts.size) {
554
- items = items.slice(0, opts.size);
557
+ if (isNotNil(opts.size) && pageData.length > opts.size) {
558
+ pageData = pageData.slice(0, opts.size);
555
559
  }
556
560
  }
557
- var res = {
558
- data: items,
561
+ var result = {
562
+ data: pageData,
559
563
  total: total
560
564
  };
561
565
  // Add fetch more capability, if total was fetched
562
- var nextOffset = (opts && opts.offset || 0) + items.length;
566
+ var nextOffset = (opts && opts.offset || 0) + pageData.length;
563
567
  if (nextOffset < total) {
564
- res.fetchMore = function (_) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
565
- return [2 /*return*/, suggestFromArray(items, value, Object.assign({ offset: nextOffset }, opts))];
566
- }); }); };
568
+ result.fetchMore = function (_) { return __awaiter(_this, void 0, void 0, function () {
569
+ return __generator(this, function (_a) {
570
+ return [2 /*return*/, suggestFromArray(filteredItems, undefined /*OPTIMISATION: already applied*/, Object.assign(Object.assign({}, opts), { offset: nextOffset, skipSort: true, excludedIds: undefined // OPTIMISATION: already filtered
571
+ }))];
572
+ });
573
+ }); };
567
574
  }
568
- return res;
575
+ return result;
569
576
  }
570
577
  function suggestFromStringArray(values, value, options) {
571
578
  value = (typeof value === 'string' && value !== '*') && value.toUpperCase() || undefined;
@@ -1146,11 +1153,11 @@
1146
1153
  });
1147
1154
  });
1148
1155
  }
1149
- function waitForTrue(predicate, opts) {
1156
+ function waitForTrue(observable, opts) {
1150
1157
  return __awaiter(this, void 0, void 0, function () {
1151
1158
  var firstTrueObservable, $timeout;
1152
1159
  return __generator(this, function (_a) {
1153
- firstTrueObservable = predicate.pipe(operators.first(function (v) { return v === true; }), operators.map(function () { }) // convert to void
1160
+ firstTrueObservable = observable.pipe(operators.first(function (v) { return v === true; }), operators.map(function () { }) // convert to void
1154
1161
  );
1155
1162
  // Timeout (+ dueTime)
1156
1163
  if (opts && opts.timeout > 0) {