@sumaris-net/ngx-components 1.5.6 → 1.5.10

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,53 +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 res = {
547
- total: target.length || 0,
548
- data: undefined // will be below
549
- };
550
- // Page (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;
551
553
  if (opts) {
552
- if (isNil(opts.offset) && opts.offset > 0) {
553
- res.data = target.slice(opts.offset);
554
+ if ((opts.offset || 0) > 0) {
555
+ pageData = pageData.slice(opts.offset);
554
556
  }
555
- if (isNotNil(opts.size) && target.length > opts.size) {
556
- res.data = target.slice(0, opts.size);
557
+ if (isNotNil(opts.size) && pageData.length > opts.size) {
558
+ pageData = pageData.slice(0, opts.size);
557
559
  }
558
560
  }
559
- else {
560
- res.data = target;
561
- }
561
+ var result = {
562
+ data: pageData,
563
+ total: total
564
+ };
562
565
  // Add fetch more capability, if total was fetched
563
- var nextOffset = (opts && opts.offset || 0) + target.length;
564
- if (nextOffset < res.total) {
565
- res.fetchMore = function (_) { return __awaiter(_this, void 0, void 0, function () {
566
+ var nextOffset = (opts && opts.offset || 0) + pageData.length;
567
+ if (nextOffset < total) {
568
+ result.fetchMore = function (_) { return __awaiter(_this, void 0, void 0, function () {
566
569
  return __generator(this, function (_a) {
567
- return [2 /*return*/, suggestFromArray(target, undefined /*already applied*/, Object.assign(Object.assign({}, opts), { offset: nextOffset, excludedIds: undefined // not need (already applied)
570
+ return [2 /*return*/, suggestFromArray(filteredItems, undefined /*OPTIMISATION: already applied*/, Object.assign(Object.assign({}, opts), { offset: nextOffset, skipSort: true, excludedIds: undefined // OPTIMISATION: already filtered
568
571
  }))];
569
572
  });
570
573
  }); };
571
574
  }
572
- return res;
575
+ return result;
573
576
  }
574
577
  function suggestFromStringArray(values, value, options) {
575
578
  value = (typeof value === 'string' && value !== '*') && value.toUpperCase() || undefined;
@@ -24889,8 +24892,10 @@
24889
24892
  * @param opts Use interactive=false to avoid user interaction (e.g. user confirmation)
24890
24893
  */
24891
24894
  AppTable.prototype.deleteRows = function (event, rows, opts) {
24895
+ var _a;
24892
24896
  return __awaiter(this, void 0, void 0, function () {
24893
- var canDelete, saved, rowsToDelete, deleteCount, err_2;
24897
+ var confirmed, canDelete, saved, rowsToDelete, deleteCount, err_2;
24898
+ var _this = this;
24894
24899
  return __generator(this, function (_d) {
24895
24900
  switch (_d.label) {
24896
24901
  case 0:
@@ -24904,15 +24909,29 @@
24904
24909
  return [2 /*return*/, 0];
24905
24910
  if (this.loading || isEmptyArray(rows))
24906
24911
  return [2 /*return*/, 0];
24912
+ // Make sure to keep newly created row
24913
+ if (((_a = this.editedRow) === null || _a === void 0 ? void 0 : _a.id) === -1 && this.editedRow.editing && !rows.includes(this.editedRow)) {
24914
+ confirmed = this.confirmEditCreate();
24915
+ if (!confirmed)
24916
+ return [2 /*return*/, 0]; // Cannot delete (e.g. edited row is invalid)
24917
+ }
24907
24918
  return [4 /*yield*/, this.canDeleteRows(rows, opts)];
24908
24919
  case 1:
24909
24920
  canDelete = _d.sent();
24910
24921
  if (!canDelete)
24911
24922
  return [2 /*return*/, 0]; // Cannot delete
24912
24923
  if (!this.saveBeforeDelete) return [3 /*break*/, 3];
24913
- // Cancel invalid rows (because of save() will failed if there is invalid rows)
24924
+ // Cancel invalid rows (because of save() will fail, if invalid rows exists)
24914
24925
  rows.filter(function (row) { var _a; return !((_a = row.validator) === null || _a === void 0 ? void 0 : _a.valid); })
24915
- .forEach(function (row) { return row.cancelOrDelete(); });
24926
+ .forEach(function (row) {
24927
+ var deleted = row.id === -1;
24928
+ row.cancelOrDelete();
24929
+ // When deleted (= newly created row) : decrement counter
24930
+ if (deleted) {
24931
+ _this.visibleRowCount--;
24932
+ _this.totalRowCount--;
24933
+ }
24934
+ });
24916
24935
  return [4 /*yield*/, this.saveBeforeAction('delete')];
24917
24936
  case 2:
24918
24937
  saved = _d.sent();
@@ -24936,7 +24955,7 @@
24936
24955
  return [4 /*yield*/, this._dataSource.deleteAll(rowsToDelete)];
24937
24956
  case 5:
24938
24957
  _d.sent();
24939
- // Not need to update manually, because watchALl().subscribe() will update this count
24958
+ // DO not update manually, because watchALl().subscribe() will update this count
24940
24959
  //this.totalRowCount -= deleteCount;
24941
24960
  //this.visibleRowCount -= deleteCount;
24942
24961
  this.selection.clear();