@sumaris-net/ngx-components 1.23.8 → 1.23.11

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 (29) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +530 -492
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
  5. package/doc/changelog.md +8 -0
  6. package/esm2015/src/app/admin/users/list/users.js +2 -2
  7. package/esm2015/src/app/core/form/editor.class.js +40 -37
  8. package/esm2015/src/app/core/services/account.service.js +2 -2
  9. package/esm2015/src/app/core/services/config.service.js +2 -2
  10. package/esm2015/src/app/core/services/network.service.js +6 -6
  11. package/esm2015/src/app/core/table/entities-table-datasource.class.js +2 -2
  12. package/esm2015/src/app/core/table/table.class.js +63 -54
  13. package/esm2015/src/app/core/table/testing/table.testing.js +3 -2
  14. package/esm2015/src/app/shared/directives/autofocus.directive.js +1 -1
  15. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +2 -2
  16. package/esm2015/src/app/shared/services/entity-service.class.js +1 -10
  17. package/esm2015/src/app/shared/services/memory-entity-service.class.js +76 -33
  18. package/esm2015/src/app/shared/services/startable-service.class.js +21 -13
  19. package/fesm2015/sumaris-net.ngx-components.js +438 -397
  20. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  21. package/package.json +3 -3
  22. package/src/app/core/form/editor.class.d.ts +2 -1
  23. package/src/app/core/services/network.service.d.ts +1 -1
  24. package/src/app/core/table/table.class.d.ts +2 -1
  25. package/src/app/shared/services/entity-service.class.d.ts +0 -8
  26. package/src/app/shared/services/memory-entity-service.class.d.ts +14 -7
  27. package/src/app/shared/services/startable-service.class.d.ts +4 -2
  28. package/src/theme/_ngx-components.scss +5 -0
  29. package/sumaris-net.ngx-components.metadata.json +1 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/cdk/table'), require('@angular/cdk/a11y'), require('@angular/cdk/overlay'), require('@angular/cdk/scrolling'), require('@angular/material/core'), require('@angular/material/table'), require('@angular/material/sort'), require('@angular/material/paginator'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/checkbox'), require('@angular/material/expansion'), require('@angular/material/toolbar'), require('@angular/material/icon'), require('@angular/material/button'), require('@angular/material/menu'), require('@angular/material/select'), require('@angular/material/card'), require('@angular/material/tabs'), require('@angular/material/stepper'), require('@angular/material/list'), require('@angular/material/button-toggle'), require('@angular/material/progress-spinner'), require('@angular/material/progress-bar'), require('@angular/material/radio'), require('@angular/material/badge'), require('@angular/material/slide-toggle'), require('@angular/material/dialog'), require('@angular/material/autocomplete'), require('@angular/forms'), require('rxjs'), require('rxjs/operators'), require('@angular/animations'), require('@ngx-translate/core'), require('@ionic/angular'), require('moment'), require('@angular/material-moment-adapter'), require('@ionic-native/keyboard/ngx'), require('angular2-text-mask'), require('ngx-material-timepicker'), require('@angular/material/datepicker'), require('@angular/material/divider'), require('@angular/material/tooltip'), require('@angular/material/chips'), require('@angular/router'), require('@angular/platform-browser'), require('@angular/common/http'), require('ngx-color-picker'), require('@ionic-native/native-audio/ngx'), require('@ionic-native/vibration/ngx'), require('@ionic-native/audio-management/ngx'), require('@ionic-native/native-audio/ngx/index'), require('@ionic-native/vibration/ngx/index'), require('@ionic-native/audio-management/ngx/index'), require('uuid/v4'), require('@angular/cdk/drag-drop'), require('ngx-markdown'), require('tweetnacl'), require('@ionic/storage'), require('zone.js/dist/zone-error'), require('@ionic-native/splash-screen/ngx'), require('@ionic-native/network/ngx'), require('ionic-cache'), require('ionic-cache/dist/cache.service'), require('@ionic-native/network/ngx/index'), require('@ionic-native/splash-screen/ngx/index'), require('@ionic-native/status-bar/ngx'), require('@angular/cdk/platform'), require('@ionic-native/in-app-browser/ngx'), require('@apollo/client/core'), require('apollo-angular'), require('@apollo/client/link/ws'), require('@apollo/client/utilities'), require('@apollo/client/link/retry'), require('apollo-link-queue'), require('apollo-link-serialize'), require('apollo-link-logger'), require('apollo-angular/http'), require('apollo3-cache-persist'), require('@ionic-native/downloader/ngx'), require('@ionic-native/status-bar/ngx/index'), require('@ionic-native/keyboard/ngx/index'), require('@ionic-native/in-app-browser/ngx/index'), require('@ionic-native/downloader/ngx/index'), require('@angular/cdk/text-field'), require('@e-is/ngx-material-table'), require('@angular/cdk/collections'), require('ngx-jdenticon'), require('tweetnacl-util'), require('scrypt-async'), require('hammerjs'), require('moment-timezone')) :
3
3
  typeof define === 'function' && define.amd ? define('@sumaris-net/ngx-components', ['exports', '@angular/core', '@angular/common', '@angular/cdk/table', '@angular/cdk/a11y', '@angular/cdk/overlay', '@angular/cdk/scrolling', '@angular/material/core', '@angular/material/table', '@angular/material/sort', '@angular/material/paginator', '@angular/material/form-field', '@angular/material/input', '@angular/material/checkbox', '@angular/material/expansion', '@angular/material/toolbar', '@angular/material/icon', '@angular/material/button', '@angular/material/menu', '@angular/material/select', '@angular/material/card', '@angular/material/tabs', '@angular/material/stepper', '@angular/material/list', '@angular/material/button-toggle', '@angular/material/progress-spinner', '@angular/material/progress-bar', '@angular/material/radio', '@angular/material/badge', '@angular/material/slide-toggle', '@angular/material/dialog', '@angular/material/autocomplete', '@angular/forms', 'rxjs', 'rxjs/operators', '@angular/animations', '@ngx-translate/core', '@ionic/angular', 'moment', '@angular/material-moment-adapter', '@ionic-native/keyboard/ngx', 'angular2-text-mask', 'ngx-material-timepicker', '@angular/material/datepicker', '@angular/material/divider', '@angular/material/tooltip', '@angular/material/chips', '@angular/router', '@angular/platform-browser', '@angular/common/http', 'ngx-color-picker', '@ionic-native/native-audio/ngx', '@ionic-native/vibration/ngx', '@ionic-native/audio-management/ngx', '@ionic-native/native-audio/ngx/index', '@ionic-native/vibration/ngx/index', '@ionic-native/audio-management/ngx/index', 'uuid/v4', '@angular/cdk/drag-drop', 'ngx-markdown', 'tweetnacl', '@ionic/storage', 'zone.js/dist/zone-error', '@ionic-native/splash-screen/ngx', '@ionic-native/network/ngx', 'ionic-cache', 'ionic-cache/dist/cache.service', '@ionic-native/network/ngx/index', '@ionic-native/splash-screen/ngx/index', '@ionic-native/status-bar/ngx', '@angular/cdk/platform', '@ionic-native/in-app-browser/ngx', '@apollo/client/core', 'apollo-angular', '@apollo/client/link/ws', '@apollo/client/utilities', '@apollo/client/link/retry', 'apollo-link-queue', 'apollo-link-serialize', 'apollo-link-logger', 'apollo-angular/http', 'apollo3-cache-persist', '@ionic-native/downloader/ngx', '@ionic-native/status-bar/ngx/index', '@ionic-native/keyboard/ngx/index', '@ionic-native/in-app-browser/ngx/index', '@ionic-native/downloader/ngx/index', '@angular/cdk/text-field', '@e-is/ngx-material-table', '@angular/cdk/collections', 'ngx-jdenticon', 'tweetnacl-util', 'scrypt-async', 'hammerjs', 'moment-timezone'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global["sumaris-net"] = global["sumaris-net"] || {}, global["sumaris-net"]["ngx-components"] = {}), global.ng.core, global.ng.common, global.ng.cdk.table, global.ng.cdk.a11y, global.ng.cdk.overlay, global.ng.cdk.scrolling, global.ng.material.core, global.ng.material.table, global.ng.material.sort, global.ng.material.paginator, global.ng.material.formField, global.ng.material.input, global.ng.material.checkbox, global.ng.material.expansion, global.ng.material.toolbar, global.ng.material.icon, global.ng.material.button, global.ng.material.menu, global.ng.material.select, global.ng.material.card, global.ng.material.tabs, global.ng.material.stepper, global.ng.material.list, global.ng.material.buttonToggle, global.ng.material.progressSpinner, global.ng.material.progressBar, global.ng.material.radio, global.ng.material.badge, global.ng.material.slideToggle, global.ng.material.dialog, global.ng.material.autocomplete, global.ng.forms, global.rxjs, global.rxjs.operators, global.ng.animations, global["ngx-translate"].core, global.ionic.angular, global.moment, global.ng.materialMomentAdapter, global["ionic-native"].keyboard.ngx, global["angular2-text-mask"], global["ngx-material-timepicker"], global.ng.material.datepicker, global.ng.material.divider, global.ng.material.tooltip, global.ng.material.chips, global.ng.router, global.ng.platformBrowser, global.ng.common.http, global["ngx-color-picker"], global["ionic-native"]["native-audio"].ngx, global["ionic-native"].vibration.ngx, global["ionic-native"]["audio-management"].ngx, global["ionic-native"]["native-audio"].ngx.index, global["ionic-native"].vibration.ngx.index, global["ionic-native"]["audio-management"].ngx.index, global.uuid.v4, global.ng.cdk.dragDrop, global["ngx-markdown"], global.tweetnacl, global.ionic.storage, null, global["ionic-native"]["splash-screen"].ngx, global["ionic-native"].network.ngx, global["ionic-cache"], global["ionic-cache/dist/cache"].service, global["ionic-native"].network.ngx.index, global["ionic-native"]["splash-screen"].ngx.index, global["ionic-native"]["status-bar"].ngx, global.ng.cdk.platform, global["ionic-native"]["in-app-browser"].ngx, global.apollo.client.core, global["apollo-angular"], global.apollo.client.link.ws, global.apollo.client.utilities, global.apollo.client.link.retry, global["apollo-link-queue"], global["apollo-link-serialize"], global["apollo-link-logger"], global["apollo-angular"].http, global["apollo3-cache-persist"], global["ionic-native"].downloader.ngx, global["ionic-native"]["status-bar"].ngx.index, global["ionic-native"].keyboard.ngx.index, global["ionic-native"]["in-app-browser"].ngx.index, global["ionic-native"].downloader.ngx.index, global.ng.cdk.textField, global["e-is"]["ngx-material-table"], global.ng.cdk.collections, global["ngx-jdenticon"], null, null, null, global["moment-timezone"]));
5
- })(this, (function (exports, i0, i1$4, table$1, a11y, overlay, scrolling, i1$3, table, sort$1, paginator, formField, input, checkbox, expansion, toolbar, icon, button, menu, select, card, tabs, stepper, list, buttonToggle, progressSpinner, progressBar, radio, badge, slideToggle, i2, autocomplete, i1, rxjs, operators, animations, i1$2, i1$5, momentImported, i1$1, ngx, angular2TextMask, ngxMaterialTimepicker, datepicker, divider, tooltip, chips, i3, i1$6, i2$1, ngxColorPicker, ngx$2, ngx$3, ngx$1, i2$2, i3$1, i4, uuidv4Imported, dragDrop, ngxMarkdown, tweetnacl, i3$2, zoneError, ngx$5, ngx$4, ionicCache, i6, i9, i10, ngx$7, i2$4, ngx$8, core, i2$3, ws, utilities, retry, QueueLink, SerializingLink, loggerLink, i3$3, apollo3CachePersist, ngx$6, i14, i15, i17, i18, textField, ngxMaterialTable, collections, ngxJdenticon, tweetnaclUtil, scryptAsync, hammerjs, momentTZImported) { 'use strict';
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global['sumaris-net'] = global['sumaris-net'] || {}, global['sumaris-net']['ngx-components'] = {}), global.ng.core, global.ng.common, global.ng.cdk.table, global.ng.cdk.a11y, global.ng.cdk.overlay, global.ng.cdk.scrolling, global.ng.material.core, global.ng.material.table, global.ng.material.sort, global.ng.material.paginator, global.ng.material.formField, global.ng.material.input, global.ng.material.checkbox, global.ng.material.expansion, global.ng.material.toolbar, global.ng.material.icon, global.ng.material.button, global.ng.material.menu, global.ng.material.select, global.ng.material.card, global.ng.material.tabs, global.ng.material.stepper, global.ng.material.list, global.ng.material.buttonToggle, global.ng.material.progressSpinner, global.ng.material.progressBar, global.ng.material.radio, global.ng.material.badge, global.ng.material.slideToggle, global.ng.material.dialog, global.ng.material.autocomplete, global.ng.forms, global.rxjs, global.rxjs.operators, global.ng.animations, global['ngx-translate'].core, global.ionic.angular, global.moment, global.ng.materialMomentAdapter, global['ionic-native'].keyboard.ngx, global['angular2-text-mask'], global['ngx-material-timepicker'], global.ng.material.datepicker, global.ng.material.divider, global.ng.material.tooltip, global.ng.material.chips, global.ng.router, global.ng.platformBrowser, global.ng.common.http, global['ngx-color-picker'], global['ionic-native']['native-audio'].ngx, global['ionic-native'].vibration.ngx, global['ionic-native']['audio-management'].ngx, global['ionic-native']['native-audio'].ngx.index, global['ionic-native'].vibration.ngx.index, global['ionic-native']['audio-management'].ngx.index, global.uuid.v4, global.ng.cdk.dragDrop, global['ngx-markdown'], global.tweetnacl, global.ionic.storage, null, global['ionic-native']['splash-screen'].ngx, global['ionic-native'].network.ngx, global['ionic-cache'], global['ionic-cache/dist/cache'].service, global['ionic-native'].network.ngx.index, global['ionic-native']['splash-screen'].ngx.index, global['ionic-native']['status-bar'].ngx, global.ng.cdk.platform, global['ionic-native']['in-app-browser'].ngx, global.apollo.client.core, global['apollo-angular'], global.apollo.client.link.ws, global.apollo.client.utilities, global.apollo.client.link.retry, global['apollo-link-queue'], global['apollo-link-serialize'], global['apollo-link-logger'], global['apollo-angular'].http, global['apollo3-cache-persist'], global['ionic-native'].downloader.ngx, global['ionic-native']['status-bar'].ngx.index, global['ionic-native'].keyboard.ngx.index, global['ionic-native']['in-app-browser'].ngx.index, global['ionic-native'].downloader.ngx.index, global.ng.cdk.textField, global['e-is']['ngx-material-table'], global.ng.cdk.collections, global['ngx-jdenticon'], null, null, null, global['moment-timezone']));
5
+ }(this, (function (exports, i0, i1$4, table$1, a11y, overlay, scrolling, i1$3, table, sort$1, paginator, formField, input, checkbox, expansion, toolbar, icon, button, menu, select, card, tabs, stepper, list, buttonToggle, progressSpinner, progressBar, radio, badge, slideToggle, i2, autocomplete, i1, rxjs, operators, animations, i1$2, i1$5, momentImported, i1$1, ngx, angular2TextMask, ngxMaterialTimepicker, datepicker, divider, tooltip, chips, i3, i1$6, i2$1, ngxColorPicker, ngx$2, ngx$3, ngx$1, i2$2, i3$1, i4, uuidv4Imported, dragDrop, ngxMarkdown, tweetnacl, i3$2, zoneError, ngx$5, ngx$4, ionicCache, i6, i9, i10, ngx$7, i2$4, ngx$8, core, i2$3, ws, utilities, retry, QueueLink, SerializingLink, loggerLink, i3$3, apollo3CachePersist, ngx$6, i14, i15, i17, i18, textField, ngxMaterialTable, collections, ngxJdenticon, tweetnaclUtil, scryptAsync, hammerjs, momentTZImported) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -15,45 +15,22 @@
15
15
  var d = Object.getOwnPropertyDescriptor(e, k);
16
16
  Object.defineProperty(n, k, d.get ? d : {
17
17
  enumerable: true,
18
- get: function () { return e[k]; }
18
+ get: function () {
19
+ return e[k];
20
+ }
19
21
  });
20
22
  }
21
23
  });
22
24
  }
23
- n["default"] = e;
25
+ n['default'] = e;
24
26
  return Object.freeze(n);
25
27
  }
26
28
 
27
- var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
28
- var i1__namespace$3 = /*#__PURE__*/_interopNamespace(i1$4);
29
- var i1__namespace$2 = /*#__PURE__*/_interopNamespace(i1$3);
30
- var i2__namespace$1 = /*#__PURE__*/_interopNamespace(i2);
31
- var i1__namespace$6 = /*#__PURE__*/_interopNamespace(i1);
32
- var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1$2);
33
- var i1__namespace$4 = /*#__PURE__*/_interopNamespace(i1$5);
34
29
  var momentImported__namespace = /*#__PURE__*/_interopNamespace(momentImported);
35
- var i1__namespace = /*#__PURE__*/_interopNamespace(i1$1);
36
- var i3__namespace$3 = /*#__PURE__*/_interopNamespace(i3);
37
- var i1__namespace$5 = /*#__PURE__*/_interopNamespace(i1$6);
38
- var i2__namespace$2 = /*#__PURE__*/_interopNamespace(i2$1);
39
- var i2__namespace = /*#__PURE__*/_interopNamespace(i2$2);
40
- var i3__namespace = /*#__PURE__*/_interopNamespace(i3$1);
41
- var i4__namespace = /*#__PURE__*/_interopNamespace(i4);
42
30
  var uuidv4Imported__namespace = /*#__PURE__*/_interopNamespace(uuidv4Imported);
43
- var i3__namespace$1 = /*#__PURE__*/_interopNamespace(i3$2);
44
- var i6__namespace = /*#__PURE__*/_interopNamespace(i6);
45
- var i9__namespace = /*#__PURE__*/_interopNamespace(i9);
46
- var i10__namespace = /*#__PURE__*/_interopNamespace(i10);
47
- var i2__namespace$4 = /*#__PURE__*/_interopNamespace(i2$4);
48
- var i2__namespace$3 = /*#__PURE__*/_interopNamespace(i2$3);
49
31
  var QueueLink__default = /*#__PURE__*/_interopDefaultLegacy(QueueLink);
50
32
  var SerializingLink__default = /*#__PURE__*/_interopDefaultLegacy(SerializingLink);
51
33
  var loggerLink__default = /*#__PURE__*/_interopDefaultLegacy(loggerLink);
52
- var i3__namespace$2 = /*#__PURE__*/_interopNamespace(i3$3);
53
- var i14__namespace = /*#__PURE__*/_interopNamespace(i14);
54
- var i15__namespace = /*#__PURE__*/_interopNamespace(i15);
55
- var i17__namespace = /*#__PURE__*/_interopNamespace(i17);
56
- var i18__namespace = /*#__PURE__*/_interopNamespace(i18);
57
34
  var momentTZImported__namespace = /*#__PURE__*/_interopNamespace(momentTZImported);
58
35
 
59
36
  var ENVIRONMENT = new i0.InjectionToken('ENV');
@@ -1343,7 +1320,7 @@
1343
1320
  }
1344
1321
  return false;
1345
1322
  };
1346
- var ɵ0$c = isIpad;
1323
+ var ɵ0 = isIpad;
1347
1324
  var isIOS = function (win) { return testUserAgent(win, /iPhone|iPod/i) || isIpad(win); };
1348
1325
  var isAndroid = function (win) { return testUserAgent(win, /android|sink/i); };
1349
1326
  var isCordova = function (win) {
@@ -1482,14 +1459,14 @@
1482
1459
  };
1483
1460
  return MatAutocompleteFieldUtils;
1484
1461
  }());
1485
- var noop$8 = function (_) { };
1486
- var ɵ0$b = noop$8;
1462
+ var noop = function (_) { };
1463
+ var ɵ0$1 = noop;
1487
1464
  var MatAutocompleteField = /** @class */ (function () {
1488
1465
  function MatAutocompleteField(cd, formGroupDir) {
1489
1466
  this.cd = cd;
1490
1467
  this.formGroupDir = formGroupDir;
1491
- this._onChangeCallback = noop$8;
1492
- this._onTouchedCallback = noop$8;
1468
+ this._onChangeCallback = noop;
1469
+ this._onTouchedCallback = noop;
1493
1470
  this.logPrefix = '[mat-autocomplete] ';
1494
1471
  this.formControlName = null;
1495
1472
  this.required = false;
@@ -2249,7 +2226,7 @@
2249
2226
  { type: i0.Component, args: [{
2250
2227
  // eslint-disable-next-line @angular-eslint/component-selector
2251
2228
  selector: 'mat-autocomplete-field',
2252
- template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <!-- readonly -->\n <mat-form-field *ngIf=\"_readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [title]=\"displayValue\"\n class=\"mat-form-field-disabled\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\" >\n <ion-text>{{displayWith(value)}}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n\n <ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Mobile or Multiple (use <mat-select>) -->\n <mat-select #matSelect\n *ngIf=\"mobile || multiple; else desktopTemplate\"\n [disableRipple]=\"true\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n [compareWith]=\"equals\"\n [multiple]=\"multiple\"\n [typeaheadDebounceInterval]=\"debounceTime * 10\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- Search bar -->\n <mat-option class=\"mat-select-searchbar\" *ngIf=\"showSearchBar\"\n [class.mat-select-searchbar-sticky]=\"stickySearchBar\"\n disabled>\n <ion-searchbar #ionSearchbar\n inputmode=\"search\"\n autocomplete=\"off\"\n animated=\"true\"\n showClearButton=\"true\"\n [debounce]=\"debounceTime\"\n (ionClear)=\"markAsLoading()\"\n (ionInput)=\"markAsLoading()\"\n (ionChange)=\"ionSearchBarChanged($event, $event.detail.value)\"\n [placeholder]=\"'COMMON.BTN_SEARCH'|translate\"\n ></ion-searchbar>\n </mat-option>\n\n <!-- Headers -->\n <ion-row class=\"mat-select-header column ion-no-padding\"\n [class.multiple]=\"multiple\"\n [class.mat-select-searchbar-sticky]=\"showSearchBar && stickySearchBar\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required && !multiple && !clearable\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></ion-label>\n </mat-option>\n\n <!-- Options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initMatSelectInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- footer -->\n <mat-option *ngIf=\"itemCount as count\" class=\"mat-option-footer mat-autocomplete-footer ion-no-padding\" disabled>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </mat-option>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-select>\n\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #desktopTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [required]=\"required\"\n (click)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- Options -->\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initAutocompleteInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n\n <!-- footer -->\n <ion-row *ngIf=\"itemCount; let count\" class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n </mat-autocomplete>\n\n </ng-template>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-grid>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n\n<ng-template #matSuffixTemplate>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"!mobile && !multiple\"\n (click)=\"dropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #headers>\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n</ng-template>\n\n",
2229
+ template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <!-- readonly -->\n <mat-form-field *ngIf=\"_readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [title]=\"displayValue\"\n class=\"mat-form-field-disabled\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\" >\n <ion-text>{{displayWith(value)}}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n\n <ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Mobile or Multiple (use <mat-select>) -->\n <mat-select #matSelect\n *ngIf=\"mobile || multiple; else desktopTemplate\"\n [disableRipple]=\"true\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n [compareWith]=\"equals\"\n [multiple]=\"multiple\"\n [typeaheadDebounceInterval]=\"debounceTime * 10\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- Search bar -->\n <mat-option class=\"mat-select-searchbar\" *ngIf=\"showSearchBar\"\n [class.mat-select-searchbar-sticky]=\"stickySearchBar\"\n disabled>\n <ion-searchbar #ionSearchbar\n inputmode=\"search\"\n autocomplete=\"off\"\n animated=\"true\"\n showClearButton=\"true\"\n [debounce]=\"debounceTime\"\n (ionClear)=\"markAsLoading()\"\n (ionInput)=\"markAsLoading()\"\n (ionChange)=\"ionSearchBarChanged($event, $event.detail.value)\"\n [placeholder]=\"'COMMON.BTN_SEARCH'|translate\"\n ></ion-searchbar>\n </mat-option>\n\n <!-- Headers -->\n <ion-row class=\"mat-select-header column ion-no-padding\"\n [class.multiple]=\"multiple\"\n [class.mat-select-searchbar-sticky]=\"showSearchBar && stickySearchBar\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required && !multiple && !clearable\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></ion-label>\n </mat-option>\n\n <!-- Options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initMatSelectInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- footer -->\n <mat-option *ngIf=\"itemCount as count\" class=\"mat-option-footer mat-autocomplete-footer ion-no-padding\" disabled>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </mat-option>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-select>\n\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #desktopTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [required]=\"required\"\n (click)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- Options -->\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\"\n [title]=\"text.innerText\">\n <ion-text><span #text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></span></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initAutocompleteInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n\n <!-- footer -->\n <ion-row *ngIf=\"itemCount; let count\" class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n </mat-autocomplete>\n\n </ng-template>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-grid>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n\n<ng-template #matSuffixTemplate>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"!mobile && !multiple\"\n (click)=\"dropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #headers>\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n</ng-template>\n\n",
2253
2230
  providers: [{
2254
2231
  provide: i1.NG_VALUE_ACCESSOR,
2255
2232
  multi: true,
@@ -2340,7 +2317,7 @@
2340
2317
  };
2341
2318
  return DateFormatPipe;
2342
2319
  }());
2343
- DateFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0__namespace.ɵɵinject(i1__namespace.MomentDateAdapter), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
2320
+ DateFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0.ɵɵinject(i1$1.MomentDateAdapter), i0.ɵɵinject(i1$2.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
2344
2321
  DateFormatPipe.decorators = [
2345
2322
  { type: i0.Pipe, args: [{
2346
2323
  name: 'dateFormat'
@@ -2352,7 +2329,7 @@
2352
2329
  { type: i1$2.TranslateService }
2353
2330
  ]; };
2354
2331
 
2355
- var moment$a = momentImported__namespace;
2332
+ var moment = momentImported__namespace;
2356
2333
  var DateDiffDurationPipe = /** @class */ (function () {
2357
2334
  function DateDiffDurationPipe(dateAdapter, translate) {
2358
2335
  var _this = this;
@@ -2369,11 +2346,11 @@
2369
2346
  return this.format(startDate, endDate, args);
2370
2347
  };
2371
2348
  DateDiffDurationPipe.prototype.format = function (startDate, endDate, args) {
2372
- var duration = moment$a.duration(endDate.diff(startDate));
2349
+ var duration = moment.duration(endDate.diff(startDate));
2373
2350
  if (duration.asMinutes() < 0)
2374
2351
  return '';
2375
2352
  var withSeconds = args === null || args === void 0 ? void 0 : args.seconds;
2376
- var timeDuration = moment$a(0)
2353
+ var timeDuration = moment(0)
2377
2354
  .hour(duration.hours())
2378
2355
  .minute(duration.minutes());
2379
2356
  if (withSeconds) {
@@ -2384,7 +2361,7 @@
2384
2361
  };
2385
2362
  return DateDiffDurationPipe;
2386
2363
  }());
2387
- DateDiffDurationPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(i0__namespace.ɵɵinject(i1__namespace$2.DateAdapter), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
2364
+ DateDiffDurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(i0.ɵɵinject(i1$3.DateAdapter), i0.ɵɵinject(i1$2.TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
2388
2365
  DateDiffDurationPipe.decorators = [
2389
2366
  { type: i0.Pipe, args: [{
2390
2367
  name: 'dateDiffDuration'
@@ -2406,7 +2383,7 @@
2406
2383
  };
2407
2384
  return DateFromNowPipe;
2408
2385
  }());
2409
- DateFromNowPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0__namespace.ɵɵinject(i1__namespace.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
2386
+ DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1$1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
2410
2387
  DateFromNowPipe.decorators = [
2411
2388
  { type: i0.Pipe, args: [{
2412
2389
  name: 'dateFromNow'
@@ -2475,7 +2452,7 @@
2475
2452
  value *= -1;
2476
2453
  }
2477
2454
  }
2478
- var degrees = roundFloat$1(value, opts.maxDecimals).toString();
2455
+ var degrees = roundFloat(value, opts.maxDecimals).toString();
2479
2456
  // Add sign
2480
2457
  var sign = negative ? '-' : '+';
2481
2458
  if (opts.placeholderChar) {
@@ -2526,7 +2503,7 @@
2526
2503
  }
2527
2504
  var degrees = Math.trunc(value);
2528
2505
  var minutes = Math.trunc((value - degrees) * 60);
2529
- var seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
2506
+ var seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
2530
2507
  while (seconds >= 60) {
2531
2508
  seconds -= 60;
2532
2509
  minutes += 1;
@@ -2594,7 +2571,7 @@
2594
2571
  }
2595
2572
  }
2596
2573
  var degrees = Math.trunc(value);
2597
- var minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
2574
+ var minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
2598
2575
  while (minutes >= 60) {
2599
2576
  minutes -= 60;
2600
2577
  degrees += 1;
@@ -2645,15 +2622,15 @@
2645
2622
  return NaN;
2646
2623
  }
2647
2624
  if (pattern === 'DD')
2648
- return roundFloat$1(degrees, maxDecimals);
2625
+ return roundFloat(degrees, maxDecimals);
2649
2626
  var minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
2650
2627
  var seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
2651
2628
  var direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
2652
2629
  var sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
2653
2630
  degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
2654
- return roundFloat$1(degrees, maxDecimals);
2631
+ return roundFloat(degrees, maxDecimals);
2655
2632
  }
2656
- function roundFloat$1(input, maxDecimals) {
2633
+ function roundFloat(input, maxDecimals) {
2657
2634
  if (maxDecimals > 0) {
2658
2635
  var powDecimal = Math.pow(10, maxDecimals);
2659
2636
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -2722,7 +2699,7 @@
2722
2699
  };
2723
2700
  return NumberFormatPipe;
2724
2701
  }());
2725
- NumberFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
2702
+ NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
2726
2703
  NumberFormatPipe.decorators = [
2727
2704
  { type: i0.Pipe, args: [{
2728
2705
  name: 'numberFormat'
@@ -2765,7 +2742,7 @@
2765
2742
  };
2766
2743
  return HighlightPipe;
2767
2744
  }());
2768
- HighlightPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
2745
+ HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
2769
2746
  HighlightPipe.decorators = [
2770
2747
  { type: i0.Pipe, args: [{
2771
2748
  name: 'highlight'
@@ -2833,7 +2810,7 @@
2833
2810
  { type: i0.Pipe, args: [{ name: 'fileSize' },] }
2834
2811
  ];
2835
2812
 
2836
- var moment$9 = momentImported__namespace;
2813
+ var moment$1 = momentImported__namespace;
2837
2814
  var DATE_UNIX_TIMESTAMP = 'X';
2838
2815
  var DATE_UNIX_MS_TIMESTAMP = 'x';
2839
2816
  var MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
@@ -2925,37 +2902,37 @@
2925
2902
  return value;
2926
2903
  if (typeof value === 'string' && value.length === 10) {
2927
2904
  // Parse the input value, as a date only
2928
- var dateOnly = moment$9(value, DATE_PATTERN);
2905
+ var dateOnly = moment$1(value, DATE_PATTERN);
2929
2906
  if (dateOnly.isValid())
2930
2907
  return DateUtils.markNoTime(dateOnly);
2931
2908
  }
2932
2909
  // Parse the input value, as a ISO date time
2933
- var date = moment$9(value, DATE_ISO_PATTERN);
2910
+ var date = moment$1(value, DATE_ISO_PATTERN);
2934
2911
  if (date.isValid())
2935
2912
  return date;
2936
2913
  // Not valid: trying to convert from unix timestamp
2937
2914
  if (typeof value === 'string') {
2938
2915
  console.warn('Wrong date format - Trying to convert from local time: ' + value);
2939
2916
  if (value.length === 10) {
2940
- return moment$9(value, DATE_UNIX_TIMESTAMP);
2917
+ return moment$1(value, DATE_UNIX_TIMESTAMP);
2941
2918
  }
2942
2919
  else if (value.length === 13) {
2943
- return moment$9(value, DATE_UNIX_MS_TIMESTAMP);
2920
+ return moment$1(value, DATE_UNIX_MS_TIMESTAMP);
2944
2921
  }
2945
2922
  }
2946
2923
  console.warn('Unable to parse date: ' + value);
2947
2924
  return undefined;
2948
2925
  }
2949
2926
  function fromUnixTimestamp(timeInSec) {
2950
- return moment$9(timeInSec, DATE_UNIX_TIMESTAMP);
2927
+ return moment$1(timeInSec, DATE_UNIX_TIMESTAMP);
2951
2928
  }
2952
2929
  function fromUnixMsTimestamp(timeInMs) {
2953
- return moment$9(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2930
+ return moment$1(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2954
2931
  }
2955
2932
  function toDuration(value, unit) {
2956
2933
  if (!value)
2957
2934
  return undefined;
2958
- var duration = moment$9.duration(value, unit);
2935
+ var duration = moment$1.duration(value, unit);
2959
2936
  // fix 990+ ms
2960
2937
  if (duration.milliseconds() >= 990) {
2961
2938
  duration.add(1000 - duration.milliseconds(), 'ms');
@@ -2985,7 +2962,7 @@
2985
2962
  };
2986
2963
  return DurationPipe;
2987
2964
  }());
2988
- DurationPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
2965
+ DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$2.TranslateService)); }, token: DurationPipe, providedIn: "root" });
2989
2966
  DurationPipe.decorators = [
2990
2967
  { type: i0.Pipe, args: [{
2991
2968
  name: 'duration'
@@ -3009,7 +2986,7 @@
3009
2986
  };
3010
2987
  return MathAbsPipe;
3011
2988
  }());
3012
- MathAbsPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2989
+ MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
3013
2990
  MathAbsPipe.decorators = [
3014
2991
  { type: i0.Pipe, args: [{
3015
2992
  name: 'mathAbs'
@@ -3024,7 +3001,7 @@
3024
3001
  };
3025
3002
  return EvenPipe;
3026
3003
  }());
3027
- EvenPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
3004
+ EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
3028
3005
  EvenPipe.decorators = [
3029
3006
  { type: i0.Pipe, args: [{
3030
3007
  name: 'even'
@@ -3039,7 +3016,7 @@
3039
3016
  };
3040
3017
  return OddPipe;
3041
3018
  }());
3042
- OddPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
3019
+ OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
3043
3020
  OddPipe.decorators = [
3044
3021
  { type: i0.Pipe, args: [{
3045
3022
  name: 'odd'
@@ -3171,7 +3148,7 @@
3171
3148
  };
3172
3149
  return MapGetPipe;
3173
3150
  }());
3174
- MapGetPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
3151
+ MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
3175
3152
  MapGetPipe.decorators = [
3176
3153
  { type: i0.Pipe, args: [{
3177
3154
  name: 'mapGet'
@@ -3188,7 +3165,7 @@
3188
3165
  };
3189
3166
  return MapKeysPipe;
3190
3167
  }());
3191
- MapKeysPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
3168
+ MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
3192
3169
  MapKeysPipe.decorators = [
3193
3170
  { type: i0.Pipe, args: [{
3194
3171
  name: 'mapKeys'
@@ -3205,7 +3182,7 @@
3205
3182
  };
3206
3183
  return MapValuesPipe;
3207
3184
  }());
3208
- MapValuesPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
3185
+ MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
3209
3186
  MapValuesPipe.decorators = [
3210
3187
  { type: i0.Pipe, args: [{
3211
3188
  name: 'mapValues'
@@ -3362,7 +3339,7 @@
3362
3339
  };
3363
3340
  return TranslateContextService;
3364
3341
  }());
3365
- TranslateContextService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
3342
+ TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$2.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
3366
3343
  TranslateContextService.decorators = [
3367
3344
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3368
3345
  ];
@@ -3425,7 +3402,7 @@
3425
3402
  ngInit: [{ type: i0.Output }]
3426
3403
  };
3427
3404
 
3428
- var moment$8 = momentImported__namespace;
3405
+ var moment$2 = momentImported__namespace;
3429
3406
  // @dynamic
3430
3407
  var SharedValidators = /** @class */ (function () {
3431
3408
  function SharedValidators() {
@@ -3508,7 +3485,7 @@
3508
3485
  };
3509
3486
  SharedValidators.validDate = function (control) {
3510
3487
  var value = control.value;
3511
- var date = !value || moment$8.isMoment(value) ? value : moment$8(value, DATE_ISO_PATTERN);
3488
+ var date = !value || moment$2.isMoment(value) ? value : moment$2(value, DATE_ISO_PATTERN);
3512
3489
  if (date && (!date.isValid() || date.year() < 1970)) {
3513
3490
  return { validDate: true };
3514
3491
  }
@@ -4728,7 +4705,7 @@
4728
4705
  };
4729
4706
  return FormErrorTranslator;
4730
4707
  }());
4731
- FormErrorTranslator.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function FormErrorTranslator_Factory() { return new FormErrorTranslator(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(APP_FORM_ERROR_I18N_KEYS, 8)); }, token: FormErrorTranslator, providedIn: "root" });
4708
+ FormErrorTranslator.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormErrorTranslator_Factory() { return new FormErrorTranslator(i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(APP_FORM_ERROR_I18N_KEYS, 8)); }, token: FormErrorTranslator, providedIn: "root" });
4732
4709
  FormErrorTranslator.decorators = [
4733
4710
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
4734
4711
  ];
@@ -5019,7 +4996,7 @@
5019
4996
  });
5020
4997
  return PropertyFormatPipe;
5021
4998
  }());
5022
- PropertyFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(i0__namespace.ɵɵinject(DateFormatPipe), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: PropertyFormatPipe, providedIn: "root" });
4999
+ PropertyFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(i0.ɵɵinject(DateFormatPipe), i0.ɵɵinject(i1$2.TranslateService)); }, token: PropertyFormatPipe, providedIn: "root" });
5023
5000
  PropertyFormatPipe.decorators = [
5024
5001
  { type: i0.Pipe, args: [{
5025
5002
  name: 'propertyFormat'
@@ -5403,9 +5380,9 @@
5403
5380
  var hour = parseInt(durationParts[0] || '0');
5404
5381
  var minute = parseInt(durationParts[1] || '0');
5405
5382
  var value = hour + (minute + 0.5) / 60;
5406
- return roundFloat(value, maxDecimals);
5383
+ return roundFloat$1(value, maxDecimals);
5407
5384
  }
5408
- function roundFloat(input, maxDecimals) {
5385
+ function roundFloat$1(input, maxDecimals) {
5409
5386
  if (maxDecimals > 0) {
5410
5387
  var powDecimal = Math.pow(10, maxDecimals);
5411
5388
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -5429,16 +5406,16 @@
5429
5406
  DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
5430
5407
  }
5431
5408
  };
5432
- var noop$7 = function () {
5409
+ var noop$1 = function () {
5433
5410
  };
5434
- var ɵ0$a = noop$7;
5411
+ var ɵ0$2 = noop$1;
5435
5412
  var MatLatLongField = /** @class */ (function () {
5436
5413
  function MatLatLongField(formBuilder, cd, formGroupDir) {
5437
5414
  this.formBuilder = formBuilder;
5438
5415
  this.cd = cd;
5439
5416
  this.formGroupDir = formGroupDir;
5440
- this._onChangeCallback = noop$7;
5441
- this._onTouchedCallback = noop$7;
5417
+ this._onChangeCallback = noop$1;
5418
+ this._onTouchedCallback = noop$1;
5442
5419
  this._subscription = new rxjs.Subscription();
5443
5420
  this._disabling = false;
5444
5421
  this._writing = false;
@@ -5798,14 +5775,14 @@
5798
5775
  },] }
5799
5776
  ];
5800
5777
 
5801
- var DEFAULT_VALUE_ACCESSOR$5 = {
5778
+ var DEFAULT_VALUE_ACCESSOR = {
5802
5779
  provide: i1.NG_VALUE_ACCESSOR,
5803
5780
  useExisting: i0.forwardRef(function () { return MatDate; }),
5804
5781
  multi: true
5805
5782
  };
5806
5783
  var TEXT_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
5807
- var noop$6 = function () { };
5808
- var ɵ0$9 = noop$6;
5784
+ var noop$2 = function () { };
5785
+ var ɵ0$3 = noop$2;
5809
5786
  var MatDate = /** @class */ (function () {
5810
5787
  function MatDate(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
5811
5788
  this.dateAdapter = dateAdapter;
@@ -5814,8 +5791,8 @@
5814
5791
  this.cd = cd;
5815
5792
  this.keyboard = keyboard;
5816
5793
  this.formGroupDir = formGroupDir;
5817
- this._onChangeCallback = noop$6;
5818
- this._onTouchedCallback = noop$6;
5794
+ this._onChangeCallback = noop$2;
5795
+ this._onTouchedCallback = noop$2;
5819
5796
  this._subscription = new rxjs.Subscription();
5820
5797
  this._writing = true;
5821
5798
  this._disabling = false;
@@ -6156,7 +6133,7 @@
6156
6133
  selector: 'mat-date-field',
6157
6134
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: datePattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: mask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"textControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</span>\n <span *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </mat-form-field>\n\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"\n ></mat-datepicker>\n\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
6158
6135
  providers: [
6159
- DEFAULT_VALUE_ACCESSOR$5,
6136
+ DEFAULT_VALUE_ACCESSOR,
6160
6137
  ],
6161
6138
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6162
6139
  styles: [":host{display:inline-block;width:100%;position:relative}:host [no-padding]{--ion-grid-column-padding:0}:host [nowrap]{flex-wrap:nowrap}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md,mat-form-field ion-datetime{padding:0!important}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
@@ -6191,16 +6168,16 @@
6191
6168
  matInputs: [{ type: i0.ViewChildren, args: ['matInput',] }]
6192
6169
  };
6193
6170
 
6194
- var DEFAULT_VALUE_ACCESSOR$4 = {
6171
+ var DEFAULT_VALUE_ACCESSOR$1 = {
6195
6172
  provide: i1.NG_VALUE_ACCESSOR,
6196
6173
  useExisting: i0.forwardRef(function () { return MatDateTime; }),
6197
6174
  multi: true
6198
6175
  };
6199
- var DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
6176
+ var DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
6200
6177
  var HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
6201
- var HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
6202
- var noop$5 = function () { };
6203
- var ɵ0$8 = noop$5;
6178
+ var HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
6179
+ var noop$3 = function () { };
6180
+ var ɵ0$4 = noop$3;
6204
6181
  var MatDateTime = /** @class */ (function () {
6205
6182
  function MatDateTime(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
6206
6183
  this.dateAdapter = dateAdapter;
@@ -6209,14 +6186,14 @@
6209
6186
  this.cd = cd;
6210
6187
  this.keyboard = keyboard;
6211
6188
  this.formGroupDir = formGroupDir;
6212
- this._onChangeCallback = noop$5;
6213
- this._onTouchedCallback = noop$5;
6189
+ this._onChangeCallback = noop$3;
6190
+ this._onTouchedCallback = noop$3;
6214
6191
  this._subscription = new rxjs.Subscription();
6215
6192
  this._writing = true;
6216
6193
  this._disabling = false;
6217
6194
  this._readonly = false;
6218
- this.dayMask = DAY_MASK$1;
6219
- this.hourMask = HOUR_MASK$1;
6195
+ this.dayMask = DAY_MASK;
6196
+ this.hourMask = HOUR_MASK;
6220
6197
  this.floatLabel = 'auto';
6221
6198
  this.compact = false;
6222
6199
  this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
@@ -6581,7 +6558,7 @@
6581
6558
  selector: 'mat-date-time-field',
6582
6559
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding mat-form-field-{{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"></mat-datepicker>\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && (hourControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n <input matInput #matInput type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"hourControl\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowdown)=\"openTimePicker($event)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input matInput #matInput type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"hourControl\"\n (click)=\"openTimePickerIfMobile($event)\"\n readonly>\n\n <input matInput type=\"text\"\n [formControl]=\"hourControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\">\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
6583
6560
  providers: [
6584
- DEFAULT_VALUE_ACCESSOR$4,
6561
+ DEFAULT_VALUE_ACCESSOR$1,
6585
6562
  ],
6586
6563
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6587
6564
  styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.mat-form-field-outline ion-col.day{min-width:153px}.mat-form-field-outline ion-col.hour{min-width:100px;max-width:110px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
@@ -6616,15 +6593,15 @@
6616
6593
  matInputs: [{ type: i0.ViewChildren, args: ['matInput',] }]
6617
6594
  };
6618
6595
 
6619
- var DEFAULT_VALUE_ACCESSOR$3 = {
6596
+ var DEFAULT_VALUE_ACCESSOR$2 = {
6620
6597
  provide: i1.NG_VALUE_ACCESSOR,
6621
6598
  useExisting: i0.forwardRef(function () { return MatDateShort; }),
6622
6599
  multi: true
6623
6600
  };
6624
- var DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
6601
+ var DAY_MASK$1 = [/\d/, /\d/, /\d/, /\d/];
6625
6602
  var noop$4 = function () {
6626
6603
  };
6627
- var ɵ0$7 = noop$4;
6604
+ var ɵ0$5 = noop$4;
6628
6605
  var MatDateShort = /** @class */ (function () {
6629
6606
  function MatDateShort(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
6630
6607
  this.dateAdapter = dateAdapter;
@@ -6637,7 +6614,7 @@
6637
6614
  this._onTouchedCallback = noop$4;
6638
6615
  this.writing = true;
6639
6616
  this.disabling = false;
6640
- this.dayMask = DAY_MASK;
6617
+ this.dayMask = DAY_MASK$1;
6641
6618
  this.disabled = false;
6642
6619
  this.floatLabel = 'auto';
6643
6620
  this.readonly = false;
@@ -6914,7 +6891,7 @@
6914
6891
  selector: 'mat-date-short-field',
6915
6892
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_YEAR_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker1)\"\n (keyup.escape)=\"preventEvent($event)\"\n (click)=\"matInput.select()\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker1)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final control -->\n <input matInput type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker1\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"openDatePicker($event, datePicker1)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"writeValue(null)\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <mat-datepicker #datePicker1\n startView=\"multi-year\"\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n (yearSelected)=\"closeDatePicker($event, datePicker1)\"\n [startAt]=\"startDate\"></mat-datepicker>\n\n <ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n </ng-template>\n\n <ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n </ng-template>\n\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
6916
6893
  providers: [
6917
- DEFAULT_VALUE_ACCESSOR$3,
6894
+ DEFAULT_VALUE_ACCESSOR$2,
6918
6895
  ],
6919
6896
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6920
6897
  styles: [":host{display:inline-block;width:100%;position:relative}:host [no-padding]{--ion-grid-column-padding:0}:host [nowrap]{flex-wrap:nowrap}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md,mat-form-field ion-datetime{padding:0!important}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
@@ -6986,16 +6963,16 @@
6986
6963
  },] }
6987
6964
  ];
6988
6965
 
6989
- var DEFAULT_VALUE_ACCESSOR$2 = {
6966
+ var DEFAULT_VALUE_ACCESSOR$3 = {
6990
6967
  provide: i1.NG_VALUE_ACCESSOR,
6991
6968
  useExisting: i0.forwardRef(function () { return MatDuration; }),
6992
6969
  multi: true
6993
6970
  };
6994
6971
  var HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
6995
- var HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
6996
- var noop$3 = function () {
6972
+ var HOUR_MASK$1 = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
6973
+ var noop$5 = function () {
6997
6974
  };
6998
- var ɵ0$6 = noop$3;
6975
+ var ɵ0$6 = noop$5;
6999
6976
  var MatDuration = /** @class */ (function () {
7000
6977
  function MatDuration(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
7001
6978
  this.dateAdapter = dateAdapter;
@@ -7004,11 +6981,11 @@
7004
6981
  this.cd = cd;
7005
6982
  this.formGroupDir = formGroupDir;
7006
6983
  this._subscription = new rxjs.Subscription();
7007
- this._onChangeCallback = noop$3;
7008
- this._onTouchedCallback = noop$3;
6984
+ this._onChangeCallback = noop$5;
6985
+ this._onTouchedCallback = noop$5;
7009
6986
  this.writing = true;
7010
6987
  this.disabling = false;
7011
- this.hourMask = HOUR_MASK;
6988
+ this.hourMask = HOUR_MASK$1;
7012
6989
  this.disabled = false;
7013
6990
  this.floatLabel = 'auto';
7014
6991
  this.readonly = false;
@@ -7201,7 +7178,7 @@
7201
7178
  selector: 'mat-duration-field',
7202
7179
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{ formControl.value|duration }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput type=\"text\"\n autocomplete=\"off\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n\n <!-- errors -->\n <mat-error *ngIf=\"!formControl.hasError('required') && textControl.hasError('pattern')\" translate>ERROR.FIELD_NOT_VALID_PATTERN</mat-error>\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('min')\">\n {{(compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate:formControl.errors.min }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('max')\">\n {{(compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate:formControl.errors.max }}</mat-error>\n\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n</ng-template>\n\n",
7203
7180
  providers: [
7204
- DEFAULT_VALUE_ACCESSOR$2,
7181
+ DEFAULT_VALUE_ACCESSOR$3,
7205
7182
  ],
7206
7183
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
7207
7184
  styles: [":host{display:inline-block;min-width:140px;position:relative;--ion-grid-column-padding:0}:host,mat-form-field{width:100%}mat-form-field .mat-form-field-subscript-wrapper{overflow:visible;top:100%}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}mat-error{text-align:right;width:100%}"]
@@ -7262,22 +7239,22 @@
7262
7239
  },] }
7263
7240
  ];
7264
7241
 
7265
- var DEFAULT_VALUE_ACCESSOR$1 = {
7242
+ var DEFAULT_VALUE_ACCESSOR$4 = {
7266
7243
  provide: i1.NG_VALUE_ACCESSOR,
7267
7244
  useExisting: i0.forwardRef(function () { return MatBooleanField; }),
7268
7245
  multi: true
7269
7246
  };
7270
- var noop$2 = function () {
7247
+ var noop$6 = function () {
7271
7248
  };
7272
- var ɵ0$5 = noop$2;
7249
+ var ɵ0$7 = noop$6;
7273
7250
  var MatBooleanField = /** @class */ (function () {
7274
7251
  function MatBooleanField(translate, formBuilder, cd, formGroupDir) {
7275
7252
  this.translate = translate;
7276
7253
  this.formBuilder = formBuilder;
7277
7254
  this.cd = cd;
7278
7255
  this.formGroupDir = formGroupDir;
7279
- this._onChangeCallback = noop$2;
7280
- this._onTouchedCallback = noop$2;
7256
+ this._onChangeCallback = noop$6;
7257
+ this._onTouchedCallback = noop$6;
7281
7258
  this._writing = false;
7282
7259
  this.showRadio = false;
7283
7260
  this.disabled = false;
@@ -7452,7 +7429,7 @@
7452
7429
  selector: 'mat-boolean-field',
7453
7430
  template: "<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{(value == null ? 'COMMON.EMPTY_OPTION' : (value === true ? yesLabel : noLabel)) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n\n <!-- Radio -->\n <mat-form-field *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-radio {{classList}}\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n <span [hidden]=\"showRadio\">({{yesLabel|translate}}/{{'COMMON.NO'|translate}})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #fakeInput type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{yesLabel|translate}}</span>\n </mat-radio-button>&nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{noLabel|translate}}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field *ngSwitchCase=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{classList}}\">\n <mat-label *ngIf=\"placeholder && !showRadio\">\n {{placeholder}}\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #matInput\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <ion-label>&nbsp;</ion-label>\n\n <!-- checkbox, when compact -->\n <mat-checkbox #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value===null\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\">\n </mat-checkbox>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel === 'never' ? 'never' : 'always'\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-button {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput type=\"text\" hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\">\n <div class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\">\n <!-- yes -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === true) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{yesLabel|translate}}\n </ion-button>\n\n <!-- No button -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? (_tabindex + 1) : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === false) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{noLabel|translate}}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n </ng-container>\n\n</ng-template>\n\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
7454
7431
  providers: [
7455
- DEFAULT_VALUE_ACCESSOR$1
7432
+ DEFAULT_VALUE_ACCESSOR$4
7456
7433
  ],
7457
7434
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
7458
7435
  styles: [":host{width:100%}.mat-form-field.mat-boolean-field-radio{margin-top:-2px}.mat-form-field.mat-boolean-field-button{margin-top:-4px}.mat-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis:calc(100% / var(--buttons-col-count, 2));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:40px}"]
@@ -7540,7 +7517,6 @@
7540
7517
  return MatNumpadEvent;
7541
7518
  }(KeyboardEvent));
7542
7519
 
7543
- exports.AnimationState = void 0;
7544
7520
  (function (AnimationState) {
7545
7521
  AnimationState["ENTER"] = "enter";
7546
7522
  AnimationState["ENTER_INPUT"] = "enter-input";
@@ -7708,7 +7684,7 @@
7708
7684
  };
7709
7685
  return MatNumpadDomService;
7710
7686
  }());
7711
- MatNumpadDomService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(i0__namespace.ɵɵinject(i0__namespace.ComponentFactoryResolver), i0__namespace.ɵɵinject(i0__namespace.ApplicationRef), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(i1__namespace$3.DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
7687
+ MatNumpadDomService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1$4.DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
7712
7688
  MatNumpadDomService.decorators = [
7713
7689
  { type: i0.Injectable, args: [{
7714
7690
  providedIn: 'root'
@@ -8114,7 +8090,7 @@
8114
8090
  },] }
8115
8091
  ];
8116
8092
 
8117
- var DEFAULT_VALUE_ACCESSOR = {
8093
+ var DEFAULT_VALUE_ACCESSOR$5 = {
8118
8094
  provide: i1.NG_VALUE_ACCESSOR,
8119
8095
  useExisting: i0.forwardRef(function () { return MatSwipeField; }),
8120
8096
  multi: true
@@ -8434,7 +8410,7 @@
8434
8410
  { type: i0.Component, args: [{
8435
8411
  selector: 'mat-swipe-field',
8436
8412
  template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [appearance]=\"appearance\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n </mat-label>\n <input matInput #fakeInput type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\">\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <ion-slides #slides\n [options]=\"slidesOptions\"\n (ionSlidesDidLoad)=\"slidesLoaded()\"\n (ionSlideReachStart)=\"reachStart(true)\"\n (ionSlideReachEnd)=\"reachEnd(true)\"\n (ionSlideNextEnd)=\"reachStart(false)\"\n (ionSlidePrevEnd)=\"reachEnd(false)\"\n (ionSlideDidChange)=\"slideChanged()\"\n >\n <ion-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </ion-slide>\n\n </ion-slides>\n </div>\n\n <button #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n\n</mat-form-field>\n",
8437
- providers: [DEFAULT_VALUE_ACCESSOR],
8413
+ providers: [DEFAULT_VALUE_ACCESSOR$5],
8438
8414
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
8439
8415
  styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-next,.button-prev{position:absolute;top:calc(50% - 20px);z-index:10}.button-prev{left:0;right:auto}.button-next{left:auto;right:0}"]
8440
8416
  },] }
@@ -8496,14 +8472,14 @@
8496
8472
  },] }
8497
8473
  ];
8498
8474
 
8499
- var noop$1 = function () { };
8500
- var ɵ0$4 = noop$1;
8475
+ var noop$7 = function () { };
8476
+ var ɵ0$8 = noop$7;
8501
8477
  var MatChipsField = /** @class */ (function () {
8502
8478
  function MatChipsField(cd, formGroupDir) {
8503
8479
  this.cd = cd;
8504
8480
  this.formGroupDir = formGroupDir;
8505
- this._onChangeCallback = noop$1;
8506
- this._onTouchedCallback = noop$1;
8481
+ this._onChangeCallback = noop$7;
8482
+ this._onTouchedCallback = noop$7;
8507
8483
  this.logPrefix = '[mat-chips] ';
8508
8484
  this.formControlName = null;
8509
8485
  this.required = false;
@@ -9474,7 +9450,7 @@
9474
9450
  };
9475
9451
  return ProgressBarService;
9476
9452
  }());
9477
- ProgressBarService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
9453
+ ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
9478
9454
  ProgressBarService.decorators = [
9479
9455
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9480
9456
  ];
@@ -9521,7 +9497,7 @@
9521
9497
  };
9522
9498
  return AppGestureConfig;
9523
9499
  }(i1$6.HammerGestureConfig));
9524
- AppGestureConfig.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
9500
+ AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
9525
9501
  AppGestureConfig.decorators = [
9526
9502
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9527
9503
  ];
@@ -9805,7 +9781,7 @@
9805
9781
  };
9806
9782
  return MatPaginatorI18n;
9807
9783
  }(paginator.MatPaginatorIntl));
9808
- MatPaginatorI18n.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
9784
+ MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$2.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
9809
9785
  MatPaginatorI18n.decorators = [
9810
9786
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9811
9787
  ];
@@ -9897,17 +9873,17 @@
9897
9873
  return rgbArrayToHex(rgb.map(function (v) { return 255 - v; }));
9898
9874
  }
9899
9875
 
9900
- var noop = function () {
9876
+ var noop$8 = function () {
9901
9877
  };
9902
- var ɵ0$3 = noop;
9878
+ var ɵ0$9 = noop$8;
9903
9879
  var AppFormField = /** @class */ (function () {
9904
9880
  function AppFormField(translate, cd, injector, formGroupDir) {
9905
9881
  this.translate = translate;
9906
9882
  this.cd = cd;
9907
9883
  this.injector = injector;
9908
9884
  this.formGroupDir = formGroupDir;
9909
- this._onChangeCallback = noop;
9910
- this._onTouchedCallback = noop;
9885
+ this._onChangeCallback = noop$8;
9886
+ this._onTouchedCallback = noop$8;
9911
9887
  this.readonly = false;
9912
9888
  this.compact = false;
9913
9889
  this.floatLabel = 'auto';
@@ -10108,7 +10084,8 @@
10108
10084
 
10109
10085
  var StartableService = /** @class */ (function () {
10110
10086
  function StartableService(prerequisiteService) {
10111
- this.onStart = new rxjs.Subject();
10087
+ this.startSubject = new rxjs.Subject();
10088
+ this.stopSubject = new rxjs.Subject();
10112
10089
  this._debug = false;
10113
10090
  this._startByReadyFunction = true; // should start when calling ready() ?
10114
10091
  this._data = null;
@@ -10132,7 +10109,7 @@
10132
10109
  _this._data = data;
10133
10110
  _this._started = true;
10134
10111
  _this._startPromise = undefined;
10135
- _this.onStart.next(_this._data);
10112
+ _this.startSubject.next(_this._data);
10136
10113
  return _this._data;
10137
10114
  })
10138
10115
  .catch(function (err) {
@@ -10146,45 +10123,46 @@
10146
10123
  StartableService.prototype.stop = function () {
10147
10124
  return __awaiter(this, void 0, void 0, function () {
10148
10125
  var err_1;
10149
- return __generator(this, function (_a) {
10150
- switch (_a.label) {
10126
+ return __generator(this, function (_b) {
10127
+ switch (_b.label) {
10151
10128
  case 0:
10152
- _a.trys.push([0, 2, , 3]);
10153
- if (this._subscription) {
10154
- this._subscription.unsubscribe();
10155
- this._subscription = null;
10156
- }
10129
+ _b.trys.push([0, 2, 3, 4]);
10130
+ this.unsubscribe();
10157
10131
  return [4 /*yield*/, this.ngOnStop()];
10158
10132
  case 1:
10159
- _a.sent();
10160
- this._started = false;
10161
- this._startPromise = undefined;
10162
- return [3 /*break*/, 3];
10133
+ _b.sent();
10134
+ return [3 /*break*/, 4];
10163
10135
  case 2:
10164
- err_1 = _a.sent();
10136
+ err_1 = _b.sent();
10165
10137
  console.error('Failed to stop a service: ' + (err_1 && err_1.message || err_1), err_1);
10166
- return [3 /*break*/, 3];
10167
- case 3: return [2 /*return*/];
10138
+ return [3 /*break*/, 4];
10139
+ case 3:
10140
+ this.stopSubject.next();
10141
+ this._data = null;
10142
+ this._started = false;
10143
+ this._startPromise = undefined;
10144
+ return [7 /*endfinally*/];
10145
+ case 4: return [2 /*return*/];
10168
10146
  }
10169
10147
  });
10170
10148
  });
10171
10149
  };
10172
10150
  StartableService.prototype.restart = function () {
10173
10151
  return __awaiter(this, void 0, void 0, function () {
10174
- return __generator(this, function (_a) {
10175
- switch (_a.label) {
10152
+ return __generator(this, function (_b) {
10153
+ switch (_b.label) {
10176
10154
  case 0:
10177
10155
  if (!this._startPromise) return [3 /*break*/, 2];
10178
10156
  return [4 /*yield*/, this._startPromise];
10179
10157
  case 1:
10180
- _a.sent(); // Wait end of previous loading
10181
- _a.label = 2;
10158
+ _b.sent(); // Wait end of previous loading
10159
+ _b.label = 2;
10182
10160
  case 2:
10183
10161
  if (!this._started) return [3 /*break*/, 4];
10184
10162
  return [4 /*yield*/, this.stop()];
10185
10163
  case 3:
10186
- _a.sent(); // Then stop if started
10187
- _a.label = 4;
10164
+ _b.sent(); // Then stop if started
10165
+ _b.label = 4;
10188
10166
  case 4: // Then stop if started
10189
10167
  return [2 /*return*/, this.start()]; // Then start again
10190
10168
  }
@@ -10206,15 +10184,15 @@
10206
10184
  configurable: true
10207
10185
  });
10208
10186
  StartableService.prototype.ready = function () {
10209
- var _this = this;
10210
10187
  if (this._started)
10211
10188
  return Promise.resolve(this._data);
10212
10189
  if (this._startPromise)
10213
10190
  return this._startPromise;
10214
10191
  if (this._startByReadyFunction)
10215
10192
  return this.start();
10216
- return waitFor(function () { return _this._started; })
10217
- .then(function () { return _this._data; });
10193
+ return this.startSubject
10194
+ .pipe(operators.takeUntil(this.stopSubject))
10195
+ .toPromise();
10218
10196
  };
10219
10197
  StartableService.prototype.registerSubscription = function (sub) {
10220
10198
  this._subscription = this._subscription || new rxjs.Subscription();
@@ -10223,9 +10201,14 @@
10223
10201
  StartableService.prototype.unregisterSubscription = function (sub) {
10224
10202
  this._subscription.remove(sub);
10225
10203
  };
10204
+ StartableService.prototype.unsubscribe = function () {
10205
+ var _a;
10206
+ (_a = this._subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
10207
+ this._subscription = null;
10208
+ };
10226
10209
  StartableService.prototype.ngOnStop = function () {
10227
10210
  return __awaiter(this, void 0, void 0, function () {
10228
- return __generator(this, function (_a) {
10211
+ return __generator(this, function (_b) {
10229
10212
  return [2 /*return*/];
10230
10213
  });
10231
10214
  });
@@ -10465,7 +10448,7 @@
10465
10448
  };
10466
10449
  return AudioProvider;
10467
10450
  }(StartableService));
10468
- AudioProvider.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i2__namespace.NativeAudio, 8), i0__namespace.ɵɵinject(i3__namespace.Vibration, 8), i0__namespace.ɵɵinject(i4__namespace.AudioManagement, 8)); }, token: AudioProvider, providedIn: "root" });
10451
+ AudioProvider.ɵprov = i0.ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i2$2.NativeAudio, 8), i0.ɵɵinject(i3$1.Vibration, 8), i0.ɵɵinject(i4.AudioManagement, 8)); }, token: AudioProvider, providedIn: "root" });
10469
10452
  AudioProvider.decorators = [
10470
10453
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
10471
10454
  ];
@@ -10575,7 +10558,7 @@
10575
10558
  };
10576
10559
  return Hotkeys;
10577
10560
  }());
10578
- Hotkeys.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0__namespace.ɵɵinject(i1__namespace$5.EventManager), i0__namespace.ɵɵinject(i2__namespace$1.MatDialog), i0__namespace.ɵɵinject(i1__namespace$3.DOCUMENT), i0__namespace.ɵɵinject(i1__namespace$4.ModalController), i0__namespace.ɵɵinject(i1__namespace$4.PopoverController)); }, token: Hotkeys, providedIn: "root" });
10561
+ Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1$6.EventManager), i0.ɵɵinject(i2.MatDialog), i0.ɵɵinject(i1$4.DOCUMENT), i0.ɵɵinject(i1$5.ModalController), i0.ɵɵinject(i1$5.PopoverController)); }, token: Hotkeys, providedIn: "root" });
10579
10562
  Hotkeys.decorators = [
10580
10563
  { type: i0.Injectable, args: [{
10581
10564
  providedIn: 'root'
@@ -10825,7 +10808,7 @@
10825
10808
  return ImagesUtils;
10826
10809
  }());
10827
10810
 
10828
- var uuidv4$1 = uuidv4Imported__namespace;
10811
+ var uuidv4 = uuidv4Imported__namespace;
10829
10812
  var FileService = /** @class */ (function () {
10830
10813
  function FileService(platform,
10831
10814
  //private transfer: FileTransfer,
@@ -10871,7 +10854,7 @@
10871
10854
  lastSlashIndex = fileUrl.lastIndexOf('/');
10872
10855
  if (lastSlashIndex === -1)
10873
10856
  throw new Error('Invalid URL: ' + fileUrl);
10874
- fileName = lastSlashIndex < (fileUrl.length - 1) && fileUrl.substring(lastSlashIndex + 1) || uuidv4$1();
10857
+ fileName = lastSlashIndex < (fileUrl.length - 1) && fileUrl.substring(lastSlashIndex + 1) || uuidv4();
10875
10858
  if (!(outputType === 'fileUrl' && this.canUseFileSystem)) return [3 /*break*/, 4];
10876
10859
  console.warn("WARN: [file] Downloading image {" + fileUrl + "} in local filesystem...");
10877
10860
  targetFilePath = this._imageDirectory + fileName;
@@ -10934,7 +10917,7 @@
10934
10917
  };
10935
10918
  return FileService;
10936
10919
  }());
10937
- FileService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i2__namespace$2.HttpClient), i0__namespace.ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
10920
+ FileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i2$1.HttpClient), i0.ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
10938
10921
  FileService.decorators = [
10939
10922
  { type: i0.Injectable, args: [{
10940
10923
  providedIn: 'root',
@@ -11101,7 +11084,7 @@
11101
11084
  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
11102
11085
 
11103
11086
  var scrypt = require('scrypt-async');
11104
- var sha256$1 = require('hash.js/lib/hash/sha/256');
11087
+ var sha256 = require('hash.js/lib/hash/sha/256');
11105
11088
  var sha512 = require('hash.js/lib/hash/sha/512');
11106
11089
  var nacl = {
11107
11090
  sign: tweetnacl.sign,
@@ -11207,7 +11190,7 @@
11207
11190
  * Hash (using SHA256) a message
11208
11191
  */
11209
11192
  CryptoService.prototype.sha256 = function (message) {
11210
- return sha256$1().update(message).digest('hex');
11193
+ return sha256().update(message).digest('hex');
11211
11194
  };
11212
11195
  /**
11213
11196
  * Hash (using SHA512) a message
@@ -11221,7 +11204,7 @@
11221
11204
  };
11222
11205
  return CryptoService;
11223
11206
  }());
11224
- CryptoService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
11207
+ CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
11225
11208
  CryptoService.decorators = [
11226
11209
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
11227
11210
  ];
@@ -12093,7 +12076,7 @@
12093
12076
  onRefresh: [{ type: i0.Input }]
12094
12077
  };
12095
12078
 
12096
- var moment$7 = momentImported__namespace;
12079
+ var moment$3 = momentImported__namespace;
12097
12080
  var SETTINGS_STORAGE_KEY = 'settings';
12098
12081
  var SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
12099
12082
  // fixme: this constant points to static environment
@@ -12395,11 +12378,11 @@
12395
12378
  if (!feature) {
12396
12379
  feature = {
12397
12380
  name: featureName.toLowerCase(),
12398
- lastSyncDate: moment$7().toISOString()
12381
+ lastSyncDate: moment$3().toISOString()
12399
12382
  };
12400
12383
  }
12401
12384
  else {
12402
- feature.lastSyncDate = moment$7().toISOString();
12385
+ feature.lastSyncDate = moment$3().toISOString();
12403
12386
  }
12404
12387
  this.saveOfflineFeature(feature);
12405
12388
  };
@@ -12593,7 +12576,7 @@
12593
12576
  if (!page || !page.title || !page.path)
12594
12577
  throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
12595
12578
  // Set time
12596
- page.time = page.time || moment$7();
12579
+ page.time = page.time || moment$3();
12597
12580
  // Clean the title (remove <small> tags)
12598
12581
  if (!opts || opts.removeTitleSmallTag !== false) {
12599
12582
  var tagIndex = page.title.indexOf('</small>');
@@ -12610,7 +12593,7 @@
12610
12593
  };
12611
12594
  return LocalSettingsService;
12612
12595
  }(StartableService));
12613
- LocalSettingsService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(APP_LOCAL_SETTINGS, 8), i0__namespace.ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
12596
+ LocalSettingsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_SETTINGS, 8), i0.ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
12614
12597
  LocalSettingsService.decorators = [
12615
12598
  { type: i0.Injectable, args: [{
12616
12599
  providedIn: 'root'
@@ -12797,7 +12780,7 @@
12797
12780
  _this.splashScreen = splashScreen;
12798
12781
  _this.translate = translate;
12799
12782
  _this.toastController = toastController;
12800
- _this.onPeerChanges = _this.onStart.pipe(operators.map(function (peer) { return peer && peer.url; }), operators.filter(isNotNilOrBlank), operators.distinctUntilChanged());
12783
+ _this.onPeerChanges = _this.startSubject.pipe(operators.map(function (peer) { return peer && peer.url; }), operators.filter(isNotNilOrBlank), operators.distinctUntilChanged());
12801
12784
  _this.onNetworkStatusChanges = new rxjs.BehaviorSubject(null);
12802
12785
  _this.onResetNetworkCache = new i0.EventEmitter(true);
12803
12786
  _this._listeners = {};
@@ -12811,7 +12794,7 @@
12811
12794
  _this._timerRefreshCondition = function () { return true; }; // Always check
12812
12795
  }
12813
12796
  _this.resetData();
12814
- _this.onStart.subscribe(function () { return _this.ngOnAfterStart(); });
12797
+ _this.startSubject.subscribe(function () { return _this.ngOnAfterStart(); });
12815
12798
  // For DEV only
12816
12799
  _this._debug = !environment.production;
12817
12800
  return _this;
@@ -12860,7 +12843,7 @@
12860
12843
  NetworkService.prototype.on = function (eventType, callback) {
12861
12844
  switch (eventType) {
12862
12845
  case 'start':
12863
- return this.onStart.subscribe(function () { return callback(); });
12846
+ return this.startSubject.subscribe(function () { return callback(); });
12864
12847
  case 'peerChanged':
12865
12848
  return this.onPeerChanges.subscribe(function () { return callback(); });
12866
12849
  case 'statusChanged':
@@ -13099,6 +13082,7 @@
13099
13082
  });
13100
13083
  };
13101
13084
  NetworkService.prototype.getAppVersion = function (peer, opts) {
13085
+ if (opts === void 0) { opts = { nocache: true }; }
13102
13086
  return __awaiter(this, void 0, void 0, function () {
13103
13087
  var path, appVersion, err_4, manifest;
13104
13088
  return __generator(this, function (_b) {
@@ -13106,7 +13090,7 @@
13106
13090
  case 0:
13107
13091
  _b.trys.push([0, 2, , 3]);
13108
13092
  path = this.computePeerPath(peer, 'version.appup');
13109
- if (opts === null || opts === void 0 ? void 0 : opts.nocache) {
13093
+ if (opts.nocache) {
13110
13094
  path += '?t=' + Date.now();
13111
13095
  }
13112
13096
  return [4 /*yield*/, this.getText(path, opts)];
@@ -13491,7 +13475,7 @@
13491
13475
  };
13492
13476
  return NetworkService;
13493
13477
  }(StartableService));
13494
- NetworkService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(i0__namespace.ɵɵinject(i1__namespace$3.DOCUMENT), i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i1__namespace$4.ModalController), i0__namespace.ɵɵinject(CryptoService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(LocalSettingsService), i0__namespace.ɵɵinject(i6__namespace.CacheService), i0__namespace.ɵɵinject(i2__namespace$2.HttpClient), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(i9__namespace.Network, 8), i0__namespace.ɵɵinject(i10__namespace.SplashScreen, 8), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService, 8), i0__namespace.ɵɵinject(i1__namespace$4.ToastController, 8)); }, token: NetworkService, providedIn: "root" });
13478
+ NetworkService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(i0.ɵɵinject(i1$4.DOCUMENT), i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i1$5.ModalController), i0.ɵɵinject(CryptoService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i2$1.HttpClient), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i9.Network, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i1$2.TranslateService, 8), i0.ɵɵinject(i1$5.ToastController, 8)); }, token: NetworkService, providedIn: "root" });
13495
13479
  NetworkService.decorators = [
13496
13480
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
13497
13481
  ];
@@ -14715,7 +14699,7 @@
14715
14699
  }(StartableService));
14716
14700
  EntitiesStorage.TRASH_PREFIX = 'Trash#';
14717
14701
  EntitiesStorage.REMOTE_PREFIX = 'Remote#';
14718
- EntitiesStorage.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(ProgressBarService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
14702
+ EntitiesStorage.ɵprov = i0.ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(ProgressBarService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
14719
14703
  EntitiesStorage.decorators = [
14720
14704
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
14721
14705
  ];
@@ -14871,10 +14855,10 @@
14871
14855
  function referentialsToString(values, properties, separator) {
14872
14856
  return (values || []).map(function (v) { return referentialToString(v, properties); }).join(separator || ', ');
14873
14857
  }
14874
- var ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
14858
+ var ɵ0$a = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
14875
14859
  var StatusList = Object.freeze([
14876
14860
  {
14877
- id: ɵ0$2,
14861
+ id: ɵ0$a,
14878
14862
  icon: 'checkmark',
14879
14863
  label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
14880
14864
  },
@@ -15177,7 +15161,7 @@
15177
15161
  (data.lastName || '')) || '';
15178
15162
  }
15179
15163
 
15180
- var uuidv4 = uuidv4Imported__namespace;
15164
+ var uuidv4$1 = uuidv4Imported__namespace;
15181
15165
  var _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
15182
15166
  var NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
15183
15167
  /**
@@ -15221,7 +15205,7 @@
15221
15205
  // Skip if not tracked
15222
15206
  if (!context || !context.tracked)
15223
15207
  return forward(operation);
15224
- var id = context.serializationKey || uuidv4();
15208
+ var id = context.serializationKey || uuidv4$1();
15225
15209
  console.debug("[apollo-tracker-link] Watching tracked query {" + operation.operationName + "#" + id + "}");
15226
15210
  // Clean context, before calling JSON.stringify (remove unused attributes)
15227
15211
  var cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
@@ -15854,14 +15838,14 @@
15854
15838
  mutationLinks = void 0;
15855
15839
  // Add queue to store tracked queries, when offline
15856
15840
  if (enableTrackMutationQueries) {
15857
- serializingLink = new SerializingLink__default["default"]();
15841
+ serializingLink = new SerializingLink__default['default']();
15858
15842
  trackerLink = createTrackerLink({
15859
15843
  storage: storage,
15860
15844
  onNetworkStatusChange: this._networkStatusChanged$,
15861
15845
  debounce: 1000,
15862
15846
  debug: true
15863
15847
  });
15864
- queueLink_1 = new QueueLink__default["default"]();
15848
+ queueLink_1 = new QueueLink__default['default']();
15865
15849
  this.registerSubscription(this._networkStatusChanged$
15866
15850
  .subscribe(function (type) {
15867
15851
  // Network is offline: start buffering into queue
@@ -15876,7 +15860,7 @@
15876
15860
  }
15877
15861
  }));
15878
15862
  mutationLinks = [
15879
- loggerLink__default["default"],
15863
+ loggerLink__default['default'],
15880
15864
  queueLink_1,
15881
15865
  trackerLink,
15882
15866
  queueLink_1,
@@ -16059,7 +16043,7 @@
16059
16043
  };
16060
16044
  return GraphqlService;
16061
16045
  }(StartableService));
16062
- GraphqlService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i2__namespace$3.Apollo), i0__namespace.ɵɵinject(i3__namespace$2.HttpLink), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(CryptoService), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
16046
+ GraphqlService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i2$3.Apollo), i0.ɵɵinject(i3$3.HttpLink), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(CryptoService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
16063
16047
  GraphqlService.decorators = [
16064
16048
  { type: i0.Injectable, args: [{
16065
16049
  providedIn: 'root'
@@ -16076,7 +16060,7 @@
16076
16060
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
16077
16061
  ]; };
16078
16062
 
16079
- var sha256 = require('hash.js/lib/hash/sha/256');
16063
+ var sha256$1 = require('hash.js/lib/hash/sha/256');
16080
16064
  var BaseGraphqlServiceOptions = /** @class */ (function () {
16081
16065
  function BaseGraphqlServiceOptions() {
16082
16066
  }
@@ -16246,8 +16230,8 @@
16246
16230
  };
16247
16231
  /* -- protected methods -- */
16248
16232
  BaseGraphqlService.prototype.computeMutableWatchQueryId = function (opts) {
16249
- var queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
16250
- var variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
16233
+ var queryName = opts.queryName || sha256$1().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
16234
+ var variablesKey = opts.variables && sha256$1().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
16251
16235
  return [queryName, opts.arrayFieldName, variablesKey].join('|');
16252
16236
  };
16253
16237
  BaseGraphqlService.prototype.findMutableWatchQueries = function (opts) {
@@ -16320,19 +16304,19 @@
16320
16304
  /* ------------------------------------
16321
16305
  * GraphQL queries
16322
16306
  * ------------------------------------*/
16323
- var Fragments$1 = {
16324
- account: core.gql(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n fragment AccountFragment on AccountVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n settings {\n ...UserSettingsFragment\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }"], ["\n fragment AccountFragment on AccountVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n settings {\n ...UserSettingsFragment\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }"]))),
16325
- settings: core.gql(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["fragment UserSettingsFragment on UserSettingsVO {\n id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }"], ["fragment UserSettingsFragment on UserSettingsVO {\n id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }"])))
16307
+ var Fragments = {
16308
+ account: core.gql(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n fragment AccountFragment on AccountVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n settings {\n ...UserSettingsFragment\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }"], ["\n fragment AccountFragment on AccountVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n settings {\n ...UserSettingsFragment\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }"]))),
16309
+ settings: core.gql(templateObject_2 || (templateObject_2 = __makeTemplateObject(["fragment UserSettingsFragment on UserSettingsVO {\n id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }"], ["fragment UserSettingsFragment on UserSettingsVO {\n id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }"])))
16326
16310
  };
16327
16311
  // Load account query
16328
- var LoadQuery$1 = core.gql(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ", "\n ", "\n"], ["\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ", "\n ", "\n"])), Fragments$1.account, Fragments$1.settings);
16312
+ var LoadQuery = core.gql(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ", "\n ", "\n"], ["\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ", "\n ", "\n"])), Fragments.account, Fragments.settings);
16329
16313
  // Check email query
16330
- var IsEmailExistsQuery = core.gql(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n"], ["\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n"])));
16314
+ var IsEmailExistsQuery = core.gql(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n"], ["\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n"])));
16331
16315
  // Save (create or update) account mutation
16332
16316
  var AccountMutations = {
16333
- save: core.gql(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject([" mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n ", ""], [" mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n ", ""])), Fragments$1.account, Fragments$1.settings),
16334
- create: core.gql(templateObject_6 || (templateObject_6 = __makeTemplateObject(["mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n ", ""], ["mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n ", ""])), Fragments$1.account, Fragments$1.settings),
16335
- saveSettings: core.gql(templateObject_7 || (templateObject_7 = __makeTemplateObject(["mutation SaveSettings($data:UserSettingsVOInput){\n data: saveSettings(settings: $data){\n ...UserSettingsFragment\n }\n }\n ", ""], ["mutation SaveSettings($data:UserSettingsVOInput){\n data: saveSettings(settings: $data){\n ...UserSettingsFragment\n }\n }\n ", ""])), Fragments$1.settings)
16317
+ save: core.gql(templateObject_5 || (templateObject_5 = __makeTemplateObject([" mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n ", ""], [" mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n ", ""])), Fragments.account, Fragments.settings),
16318
+ create: core.gql(templateObject_6 || (templateObject_6 = __makeTemplateObject(["mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n ", ""], ["mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n ", ""])), Fragments.account, Fragments.settings),
16319
+ saveSettings: core.gql(templateObject_7 || (templateObject_7 = __makeTemplateObject(["mutation SaveSettings($data:UserSettingsVOInput){\n data: saveSettings(settings: $data){\n ...UserSettingsFragment\n }\n }\n ", ""], ["mutation SaveSettings($data:UserSettingsVOInput){\n data: saveSettings(settings: $data){\n ...UserSettingsFragment\n }\n }\n ", ""])), Fragments.settings)
16336
16320
  };
16337
16321
  // Sent confirmation email
16338
16322
  var SendConfirmEmailMutation = core.gql(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n mutation sendAccountConfirmationEmail($email:String, $locale:String){\n sendAccountConfirmationEmail(email: $email, locale: $locale)\n }\n"], ["\n mutation sendAccountConfirmationEmail($email:String, $locale:String){\n sendAccountConfirmationEmail(email: $email, locale: $locale)\n }\n"])));
@@ -16464,7 +16448,7 @@
16464
16448
  case 1:
16465
16449
  _b.sent();
16466
16450
  // Listen graphql start (or restart)
16467
- this.registerSubscription(this.graphql.onStart.subscribe(function () {
16451
+ this.registerSubscription(this.graphql.stopSubject.subscribe(function () {
16468
16452
  if (_this.started && _this.isLogin()) {
16469
16453
  console.debug('[account] Restarting, to retry to authenticate...');
16470
16454
  _this.restart();
@@ -16953,7 +16937,7 @@
16953
16937
  _b.label = 3;
16954
16938
  case 3: return [3 /*break*/, 6];
16955
16939
  case 4: return [4 /*yield*/, this.graphql.query({
16956
- query: LoadQuery$1,
16940
+ query: LoadQuery,
16957
16941
  error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
16958
16942
  fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
16959
16943
  })];
@@ -17599,7 +17583,7 @@
17599
17583
  };
17600
17584
  return AccountService;
17601
17585
  }(BaseGraphqlService));
17602
- AccountService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0__namespace.ɵɵinject(CryptoService), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(LocalSettingsService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(FileService), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService, 8), i0__namespace.ɵɵinject(i1__namespace$4.ToastController, 8), i0__namespace.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
17586
+ AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(CryptoService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$2.TranslateService, 8), i0.ɵɵinject(i1$5.ToastController, 8), i0.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
17603
17587
  AccountService.decorators = [
17604
17588
  { type: i0.Injectable, args: [{ providedIn: 'root', deps: [ENVIRONMENT] },] }
17605
17589
  ];
@@ -17614,7 +17598,7 @@
17614
17598
  { type: i1$5.ToastController, decorators: [{ type: i0.Optional }] },
17615
17599
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
17616
17600
  ]; };
17617
- var templateObject_1$4, templateObject_2$2, templateObject_3$2, templateObject_4$2, templateObject_5$2, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12;
17601
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12;
17618
17602
 
17619
17603
  var Software_1, Configuration_1;
17620
17604
  // @dynamic
@@ -17872,12 +17856,12 @@
17872
17856
  /* ------------------------------------
17873
17857
  * GraphQL queries
17874
17858
  * ------------------------------------*/
17875
- var Fragments = {
17876
- config: core.gql(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n fragment ConfigFragment on ConfigurationVO {\n id\n label\n name\n description\n comments\n properties\n smallLogo\n largeLogo\n backgroundImages\n partners {\n id\n label\n name\n logo\n siteUrl\n __typename\n }\n updateDate\n creationDate\n statusId\n __typename\n }\n "], ["\n fragment ConfigFragment on ConfigurationVO {\n id\n label\n name\n description\n comments\n properties\n smallLogo\n largeLogo\n backgroundImages\n partners {\n id\n label\n name\n logo\n siteUrl\n __typename\n }\n updateDate\n creationDate\n statusId\n __typename\n }\n "])))
17859
+ var Fragments$1 = {
17860
+ config: core.gql(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n fragment ConfigFragment on ConfigurationVO {\n id\n label\n name\n description\n comments\n properties\n smallLogo\n largeLogo\n backgroundImages\n partners {\n id\n label\n name\n logo\n siteUrl\n __typename\n }\n updateDate\n creationDate\n statusId\n __typename\n }\n "], ["\n fragment ConfigFragment on ConfigurationVO {\n id\n label\n name\n description\n comments\n properties\n smallLogo\n largeLogo\n backgroundImages\n partners {\n id\n label\n name\n logo\n siteUrl\n __typename\n }\n updateDate\n creationDate\n statusId\n __typename\n }\n "])))
17877
17861
  };
17878
- var LoadQuery = core.gql(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ", "\n"], ["\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ", "\n"])), Fragments.config);
17862
+ var LoadQuery$1 = core.gql(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ", "\n"], ["\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ", "\n"])), Fragments$1.config);
17879
17863
  // Save (create or update) account mutation
17880
- var SaveMutation = core.gql(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ", "\n"], ["\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ", "\n"])), Fragments.config);
17864
+ var SaveMutation = core.gql(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ", "\n"], ["\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ", "\n"])), Fragments$1.config);
17881
17865
  var ClearCache = core.gql(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n"], ["\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n"])));
17882
17866
  var CacheStatistics = core.gql(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n query CacheStatistics {\n cacheStatistics\n }\n"], ["\n query CacheStatistics {\n cacheStatistics\n }\n"])));
17883
17867
  var APP_CONFIG_OPTIONS = new i0.InjectionToken('defaultOptions');
@@ -17924,7 +17908,7 @@
17924
17908
  data = _a.sent();
17925
17909
  this.$data.next(data);
17926
17910
  // Restart if graphql service restart
17927
- this.registerSubscription(this.graphql.onStart.subscribe(function () { return _this.restart(); }));
17911
+ this.registerSubscription(this.graphql.stopSubject.subscribe(function () { return _this.restart(); }));
17928
17912
  return [2 /*return*/, data];
17929
17913
  }
17930
17914
  });
@@ -17938,7 +17922,7 @@
17938
17922
  case 0:
17939
17923
  now = Date.now();
17940
17924
  console.debug('[config] Loading Pod configuration...');
17941
- query = opts && opts.query || LoadQuery;
17925
+ query = opts && opts.query || LoadQuery$1;
17942
17926
  variables = opts && opts.variables || undefined;
17943
17927
  return [4 /*yield*/, this.graphql.query({
17944
17928
  query: query,
@@ -18244,7 +18228,7 @@
18244
18228
  };
18245
18229
  return ConfigService;
18246
18230
  }(BaseGraphqlService));
18247
- ConfigService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(FileService), i0__namespace.ɵɵinject(i1__namespace$4.ToastController), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(AccountService), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
18231
+ ConfigService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(NetworkService), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$5.ToastController), i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(AccountService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
18248
18232
  ConfigService.decorators = [
18249
18233
  { type: i0.Injectable, args: [{
18250
18234
  providedIn: 'root',
@@ -18263,7 +18247,7 @@
18263
18247
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
18264
18248
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_CONFIG_OPTIONS,] }] }
18265
18249
  ]; };
18266
- var templateObject_1$3, templateObject_2$1, templateObject_3$1, templateObject_4$1, templateObject_5$1;
18250
+ var templateObject_1$1, templateObject_2$1, templateObject_3$1, templateObject_4$1, templateObject_5$1;
18267
18251
 
18268
18252
  var UploadFilePopover = /** @class */ (function () {
18269
18253
  function UploadFilePopover(popoverController, translate, cd) {
@@ -18541,7 +18525,7 @@
18541
18525
  return UriUtils;
18542
18526
  }());
18543
18527
 
18544
- var moment$6 = momentImported__namespace;
18528
+ var moment$4 = momentImported__namespace;
18545
18529
  var AndroidOsEnvironment = Object.freeze({
18546
18530
  DIRECTORY_DOWNLOADS: 'Download',
18547
18531
  DIRECTORY_DOWNLOADS_OLD: 'Downloads',
@@ -18841,16 +18825,16 @@
18841
18825
  }
18842
18826
  // config moment lib
18843
18827
  try {
18844
- moment$6.locale(event.lang);
18828
+ moment$4.locale(event.lang);
18845
18829
  console.debug('[platform] Use locale {' + event.lang + '}');
18846
18830
  }
18847
18831
  // If error, fallback to en
18848
18832
  catch (err) {
18849
- moment$6.locale('en');
18833
+ moment$4.locale('en');
18850
18834
  console.warn('[platform] Unknown local for moment lib. Using default [en]');
18851
18835
  }
18852
18836
  // Config date adapter
18853
- _this.dateAdapter.setLocale(moment$6.locale());
18837
+ _this.dateAdapter.setLocale(moment$4.locale());
18854
18838
  }
18855
18839
  });
18856
18840
  this.settings.onChange.subscribe(function (data) {
@@ -19102,7 +19086,7 @@
19102
19086
  };
19103
19087
  return PlatformService;
19104
19088
  }(StartableService));
19105
- PlatformService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i2__namespace$4.Platform), i0__namespace.ɵɵinject(i1__namespace$4.ToastController), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(i1__namespace.MomentDateAdapter), i0__namespace.ɵɵinject(EntitiesStorage), i0__namespace.ɵɵinject(LocalSettingsService), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(AccountService), i0__namespace.ɵɵinject(ConfigService), i0__namespace.ɵɵinject(i6__namespace.CacheService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(AudioProvider), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(i14__namespace.StatusBar, 8), i0__namespace.ɵɵinject(i15__namespace.Keyboard, 8), i0__namespace.ɵɵinject(i10__namespace.SplashScreen, 8), i0__namespace.ɵɵinject(i17__namespace.InAppBrowser, 8), i0__namespace.ɵɵinject(i18__namespace.Downloader, 8)); }, token: PlatformService, providedIn: "root" });
19089
+ PlatformService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i2$4.Platform), i0.ɵɵinject(i1$5.ToastController), i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(i1$1.MomentDateAdapter), i0.ɵɵinject(EntitiesStorage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(AccountService), i0.ɵɵinject(ConfigService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(AudioProvider), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i14.StatusBar, 8), i0.ɵɵinject(i15.Keyboard, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i17.InAppBrowser, 8), i0.ɵɵinject(i18.Downloader, 8)); }, token: PlatformService, providedIn: "root" });
19106
19090
  PlatformService.decorators = [
19107
19091
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
19108
19092
  ];
@@ -19194,7 +19178,7 @@
19194
19178
  };
19195
19179
  return MatStepperI18n;
19196
19180
  }(stepper.MatStepperIntl));
19197
- MatStepperI18n.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
19181
+ MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$2.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
19198
19182
  MatStepperI18n.decorators = [
19199
19183
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
19200
19184
  ];
@@ -20727,17 +20711,6 @@
20727
20711
  total: ((res1.total || ((_a = res1.data) === null || _a === void 0 ? void 0 : _a.length) || 0) + (res2.total || ((_b = res2.data) === null || _b === void 0 ? void 0 : _b.length) || 0))
20728
20712
  };
20729
20713
  }
20730
- var EntitiesService = /** @class */ (function () {
20731
- function EntitiesService() {
20732
- }
20733
- EntitiesService.prototype.ngOnDestroy = function () {
20734
- // Can be override by subclasses
20735
- };
20736
- return EntitiesService;
20737
- }());
20738
- EntitiesService.decorators = [
20739
- { type: i0.Directive }
20740
- ];
20741
20714
 
20742
20715
  var EntityFilter = /** @class */ (function (_super) {
20743
20716
  __extends(EntityFilter, _super);
@@ -20816,13 +20789,13 @@
20816
20789
  var InMemoryEntitiesService = /** @class */ (function (_super) {
20817
20790
  __extends(InMemoryEntitiesService, _super);
20818
20791
  function InMemoryEntitiesService(dataType, filterType, options) {
20819
- var _this = _super.call(this) || this;
20792
+ var _this = _super.call(this, null) || this;
20820
20793
  _this.dataType = dataType;
20821
20794
  _this.filterType = filterType;
20822
20795
  _this.debug = false;
20823
- _this.dirty = false;
20824
- _this._saving = false;
20825
20796
  _this.dataSubject = new rxjs.BehaviorSubject(null);
20797
+ _this.dirtySubject = new rxjs.BehaviorSubject(false);
20798
+ _this.savingSubject = new rxjs.BehaviorSubject(false);
20826
20799
  options = Object.assign({ onSort: _this.sort }, options);
20827
20800
  _this._sortFn = options.onSort;
20828
20801
  _this._onLoad = options.onLoad;
@@ -20851,18 +20824,50 @@
20851
20824
  enumerable: false,
20852
20825
  configurable: true
20853
20826
  });
20854
- InMemoryEntitiesService.prototype.ngOnDestroy = function () {
20855
- if (this.debug)
20856
- console.debug('[memory-data-service] Destroying...');
20857
- this.dataSubject.complete();
20858
- this.dataSubject.unsubscribe();
20827
+ Object.defineProperty(InMemoryEntitiesService.prototype, "saving", {
20828
+ get: function () {
20829
+ return this.savingSubject.value;
20830
+ },
20831
+ enumerable: false,
20832
+ configurable: true
20833
+ });
20834
+ Object.defineProperty(InMemoryEntitiesService.prototype, "dirty", {
20835
+ get: function () {
20836
+ return this.dirtySubject.value;
20837
+ },
20838
+ enumerable: false,
20839
+ configurable: true
20840
+ });
20841
+ InMemoryEntitiesService.prototype.ngOnStart = function () {
20842
+ return __awaiter(this, void 0, void 0, function () {
20843
+ return __generator(this, function (_b) {
20844
+ if (this.debug)
20845
+ console.debug('[memory-data-service] Starting...');
20846
+ return [2 /*return*/, firstNotNilPromise(this.dataSubject, { stop: this.stopSubject })];
20847
+ });
20848
+ });
20849
+ };
20850
+ InMemoryEntitiesService.prototype.ngOnStop = function () {
20851
+ return __awaiter(this, void 0, void 0, function () {
20852
+ return __generator(this, function (_b) {
20853
+ if (this.debug)
20854
+ console.debug('[memory-data-service] Stopping...');
20855
+ this.savingSubject.next(false);
20856
+ this.dirtySubject.next(false);
20857
+ this.dataSubject.complete();
20858
+ this.dataSubject = new rxjs.BehaviorSubject(null);
20859
+ return [2 /*return*/];
20860
+ });
20861
+ });
20859
20862
  };
20860
20863
  InMemoryEntitiesService.prototype.setValue = function (data) {
20861
20864
  if (this.dataSubject.value !== data) {
20865
+ if (!this.started)
20866
+ this.start();
20862
20867
  this._hiddenData = [];
20863
20868
  this.dataSubject.next(data);
20864
20869
  }
20865
- this.dirty = false;
20870
+ this.markAsPristine();
20866
20871
  };
20867
20872
  InMemoryEntitiesService.prototype.loadAll = function (offset, size, sortBy, sortDirection, filter, opts) {
20868
20873
  return __awaiter(this, void 0, void 0, function () {
@@ -20877,26 +20882,25 @@
20877
20882
  if (isNil(originalData)) {
20878
20883
  console.warn('[memory-data-service] Cannot load all: no value set. Will return empty result');
20879
20884
  }
20880
- if (!this._saving) return [3 /*break*/, 2];
20881
- return [4 /*yield*/, waitFor(function () { return !_this._saving; })];
20885
+ // Wait while idle
20886
+ return [4 /*yield*/, this.waitWhileSaving()];
20882
20887
  case 1:
20888
+ // Wait while idle
20883
20889
  _b.sent();
20890
+ excludedDataByFilter = [];
20884
20891
  _b.label = 2;
20885
20892
  case 2:
20886
- excludedDataByFilter = [];
20887
- _b.label = 3;
20888
- case 3:
20889
- _b.trys.push([3, , 6, 7]);
20893
+ _b.trys.push([2, , 5, 6]);
20890
20894
  if (isEmptyArray(originalData)) {
20891
20895
  return [2 /*return*/, { data: [], total: 0 }];
20892
20896
  }
20893
20897
  data = this._sortFn(originalData, sortBy, sortDirection);
20894
- if (!this._onLoad) return [3 /*break*/, 5];
20898
+ if (!this._onLoad) return [3 /*break*/, 4];
20895
20899
  return [4 /*yield*/, this._onLoad(data)];
20896
- case 4:
20900
+ case 3:
20897
20901
  data = _b.sent();
20898
- _b.label = 5;
20899
- case 5:
20902
+ _b.label = 4;
20903
+ case 4:
20900
20904
  // Apply filter (will update hiddenData)
20901
20905
  data = this.filter(data, filter, excludedDataByFilter);
20902
20906
  total = data.length;
@@ -20953,13 +20957,13 @@
20953
20957
  }); };
20954
20958
  }
20955
20959
  return [2 /*return*/, res];
20956
- case 6:
20960
+ case 5:
20957
20961
  // Remember hidden data
20958
20962
  if (offset === 0) {
20959
20963
  this._hiddenData = !excludedDataByPagination ? excludedDataByFilter : excludedDataByFilter.concat.apply(excludedDataByFilter, __spread(excludedDataByPagination));
20960
20964
  }
20961
20965
  return [7 /*endfinally*/];
20962
- case 7: return [2 /*return*/];
20966
+ case 6: return [2 /*return*/];
20963
20967
  }
20964
20968
  });
20965
20969
  });
@@ -20969,9 +20973,9 @@
20969
20973
  offset = offset >= 0 ? offset : 0;
20970
20974
  size = size >= 0 ? size : -1;
20971
20975
  return this.dataSubject
20972
- .pipe(
20976
+ .pipe(operators.takeUntil(this.stopSubject),
20973
20977
  // Warn if waiting value to be set
20974
- operators.tap(function (data) { return !data && console.warn('[memory-data-service] Waiting value to be set...'); }), operators.filter(isNotNil), operators.mergeMap(function (_) { return _this.loadAll(offset, size, sortBy, sortDirection, filterData, options); }));
20978
+ operators.tap(function (data) { return !data && console.debug('[memory-data-service] Waiting value to be set...'); }), operators.filter(isNotNil), operators.mergeMap(function (_) { return _this.loadAll(offset, size, sortBy, sortDirection, filterData, options); }));
20975
20979
  };
20976
20980
  InMemoryEntitiesService.prototype.saveAll = function (data, options) {
20977
20981
  return __awaiter(this, void 0, void 0, function () {
@@ -21003,7 +21007,7 @@
21003
21007
  _c.label = 5;
21004
21008
  case 5:
21005
21009
  this.dataSubject.next(data);
21006
- this.dirty = true;
21010
+ this.markAsDirty();
21007
21011
  return [2 /*return*/, data];
21008
21012
  case 6:
21009
21013
  this.markAsSaved();
@@ -21021,15 +21025,21 @@
21021
21025
  data = this.dataSubject.value;
21022
21026
  if (!data)
21023
21027
  throw new Error('[memory-service] Could not delete, because value not set');
21024
- updatedData = data.filter(function (entity) {
21025
- var removed = dataToRemove.findIndex(function (entityToRemove) { return _this.equals(entityToRemove, entity); }) !== -1;
21026
- return !removed;
21027
- });
21028
- deleteCount = data.length - updatedData.length;
21029
- if (deleteCount > 0) {
21030
- data = updatedData;
21031
- this.dirty = true;
21032
- this.dataSubject.next(data);
21028
+ this.markAsSaving();
21029
+ try {
21030
+ updatedData = data.filter(function (entity) {
21031
+ var removed = dataToRemove.findIndex(function (entityToRemove) { return _this.equals(entityToRemove, entity); }) !== -1;
21032
+ return !removed;
21033
+ });
21034
+ deleteCount = data.length - updatedData.length;
21035
+ if (deleteCount > 0) {
21036
+ data = updatedData;
21037
+ this.dataSubject.next(data);
21038
+ this.markAsDirty();
21039
+ }
21040
+ }
21041
+ finally {
21042
+ this.markAsSaved();
21033
21043
  }
21034
21044
  return [2 /*return*/];
21035
21045
  });
@@ -21096,14 +21106,33 @@
21096
21106
  return { data: data, total: total };
21097
21107
  }));
21098
21108
  };
21109
+ InMemoryEntitiesService.prototype.waitWhileSaving = function (opts) {
21110
+ if (!this.saving)
21111
+ return;
21112
+ return firstFalsePromise(this.savingSubject, Object.assign({ stop: (opts === null || opts === void 0 ? void 0 : opts.stop) || rxjs.merge(this.stopSubject, this.dataSubject) }, opts));
21113
+ };
21099
21114
  InMemoryEntitiesService.prototype.markAsSaving = function () {
21100
- this._saving = true;
21115
+ if (!this.savingSubject.value) {
21116
+ this.savingSubject.next(true);
21117
+ }
21101
21118
  };
21102
21119
  InMemoryEntitiesService.prototype.markAsSaved = function () {
21103
- this._saving = false;
21120
+ if (this.savingSubject.value) {
21121
+ this.savingSubject.next(false);
21122
+ }
21123
+ };
21124
+ InMemoryEntitiesService.prototype.markAsDirty = function () {
21125
+ if (!this.dirtySubject.value) {
21126
+ this.dirtySubject.next(true);
21127
+ }
21128
+ };
21129
+ InMemoryEntitiesService.prototype.markAsPristine = function () {
21130
+ if (this.dirtySubject.value) {
21131
+ this.dirtySubject.next(false);
21132
+ }
21104
21133
  };
21105
21134
  return InMemoryEntitiesService;
21106
- }(EntitiesService));
21135
+ }(StartableService));
21107
21136
  InMemoryEntitiesService.decorators = [
21108
21137
  { type: i0.Directive }
21109
21138
  ];
@@ -21479,7 +21508,7 @@
21479
21508
  return 1;
21480
21509
  }
21481
21510
  }
21482
- var ɵ0$1 = function (defaultStateSize) { return [
21511
+ var ɵ0$b = function (defaultStateSize) { return [
21483
21512
  Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
21484
21513
  Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
21485
21514
  Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
@@ -21487,7 +21516,7 @@
21487
21516
  var SCALE_OPTIONS_DEFAULT = {
21488
21517
  startColor: rgbArrayMap.red,
21489
21518
  startStates: [0, 2, 3],
21490
- startStepsFn: ɵ0$1
21519
+ startStepsFn: ɵ0$b
21491
21520
  };
21492
21521
  /**
21493
21522
  * Internal function, that create a colors scale, using iteration
@@ -22444,7 +22473,7 @@
22444
22473
  };
22445
22474
  return UserSettingsValidatorService;
22446
22475
  }(AppValidatorService));
22447
- UserSettingsValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
22476
+ UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
22448
22477
  UserSettingsValidatorService.decorators = [
22449
22478
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
22450
22479
  ];
@@ -22492,7 +22521,7 @@
22492
22521
  };
22493
22522
  return AccountValidatorService;
22494
22523
  }(AppValidatorService));
22495
- AccountValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder), i0__namespace.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
22524
+ AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
22496
22525
  AccountValidatorService.decorators = [
22497
22526
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
22498
22527
  ];
@@ -22839,7 +22868,7 @@
22839
22868
  };
22840
22869
  return MenuService;
22841
22870
  }());
22842
- MenuService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
22871
+ MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
22843
22872
  MenuService.decorators = [
22844
22873
  { type: i0.Injectable, args: [{
22845
22874
  providedIn: 'root'
@@ -23205,7 +23234,7 @@
23205
23234
  };
23206
23235
  return LocalSettingsValidatorService;
23207
23236
  }(AppValidatorService));
23208
- LocalSettingsValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder), i0__namespace.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
23237
+ LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
23209
23238
  LocalSettingsValidatorService.decorators = [
23210
23239
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
23211
23240
  ];
@@ -23985,7 +24014,7 @@
23985
24014
  };
23986
24015
  return IsOnFieldModePipe;
23987
24016
  }());
23988
- IsOnFieldModePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
24017
+ IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
23989
24018
  IsOnFieldModePipe.decorators = [
23990
24019
  { type: i0.Pipe, args: [{
23991
24020
  name: 'isOnField'
@@ -24000,7 +24029,7 @@
24000
24029
  };
24001
24030
  return IsNotOnFieldModePipe;
24002
24031
  }());
24003
- IsNotOnFieldModePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
24032
+ IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
24004
24033
  IsNotOnFieldModePipe.decorators = [
24005
24034
  { type: i0.Pipe, args: [{
24006
24035
  name: 'isNotOnField'
@@ -24018,7 +24047,7 @@
24018
24047
  };
24019
24048
  return PersonToStringPipe;
24020
24049
  }());
24021
- PersonToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
24050
+ PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
24022
24051
  PersonToStringPipe.decorators = [
24023
24052
  { type: i0.Pipe, args: [{
24024
24053
  name: 'personToString'
@@ -24446,7 +24475,7 @@
24446
24475
  };
24447
24476
  return IsLoginAccountPipe;
24448
24477
  }());
24449
- IsLoginAccountPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
24478
+ IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
24450
24479
  IsLoginAccountPipe.decorators = [
24451
24480
  { type: i0.Pipe, args: [{
24452
24481
  name: 'isLogin'
@@ -24461,7 +24490,7 @@
24461
24490
  };
24462
24491
  return AccountToStringPipe;
24463
24492
  }());
24464
- AccountToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
24493
+ AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
24465
24494
  AccountToStringPipe.decorators = [
24466
24495
  { type: i0.Pipe, args: [{
24467
24496
  name: 'accountToString'
@@ -24479,7 +24508,7 @@
24479
24508
  };
24480
24509
  return DepartmentToStringPipe;
24481
24510
  }());
24482
- DepartmentToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
24511
+ DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
24483
24512
  DepartmentToStringPipe.decorators = [
24484
24513
  { type: i0.Pipe, args: [{
24485
24514
  name: 'departmentToString'
@@ -25245,7 +25274,7 @@
25245
25274
  };
25246
25275
  return AuthGuardService;
25247
25276
  }());
25248
- AuthGuardService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(i0__namespace.ɵɵinject(AccountService), i0__namespace.ɵɵinject(i1__namespace$4.ModalController), i0__namespace.ɵɵinject(i3__namespace$3.Router), i0__namespace.ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
25277
+ AuthGuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(i0.ɵɵinject(AccountService), i0.ɵɵinject(i1$5.ModalController), i0.ɵɵinject(i3.Router), i0.ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
25249
25278
  AuthGuardService.decorators = [
25250
25279
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
25251
25280
  ];
@@ -26120,7 +26149,7 @@
26120
26149
  this.handleServiceError(err_1);
26121
26150
  return [3 /*break*/, 5];
26122
26151
  case 4:
26123
- this.loadingSubject.next(false);
26152
+ this.markAsLoaded();
26124
26153
  return [7 /*endfinally*/];
26125
26154
  case 5: return [2 /*return*/];
26126
26155
  }
@@ -26688,47 +26717,11 @@
26688
26717
  this.listenDatasourceLoading(this._dataSource);
26689
26718
  };
26690
26719
  AppTable.prototype.ngAfterViewInit = function () {
26691
- var _this = this;
26692
- if (this.debug) {
26693
- // Warn if table not exists
26694
- if (!this.table) {
26695
- setTimeout(function () {
26696
- if (!_this.table) {
26697
- console.warn("[table] Missing <mat-table> in the HTML template (after waiting 500ms)! Component: " + _this.constructor.name);
26698
- }
26699
- }, 500);
26700
- }
26701
- if (!this.displayedColumns)
26702
- console.warn("[table] Missing 'displayedColumns'. Did you call super.ngOnInit() in component " + this.constructor.name + " ?");
26703
- }
26704
- rxjs.merge(
26705
- // Listen sort events
26706
- this.sort && this.sort.sortChange
26707
- .pipe(operators.filter(function () { return !_this.sort.disabled; }), operators.mergeMap(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_e) {
26708
- return [2 /*return*/, this.saveBeforeAction('sort')];
26709
- }); }); }), operators.filter(function (res) { return res === true; }),
26710
- // Save sort in settings
26711
- operators.tap(function () {
26712
- var value = [_this.sort.active, _this.sort.direction || 'asc'].join(':');
26713
- _this.settings.savePageSetting(_this.settingsId, value, SETTINGS_SORTED_COLUMN);
26714
- }))
26715
- || rxjs.EMPTY,
26716
- // Listen paginator events
26717
- this.paginator && this.paginator.page
26718
- .pipe(operators.mergeMap(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_e) {
26719
- return [2 /*return*/, this.saveBeforeAction('sort')];
26720
- }); }); }), operators.filter(function (res) { return res === true; }),
26721
- // Save page size
26722
- operators.tap(function () { return _this.settings.savePageSetting(_this.settingsId, _this.paginator.pageSize, SETTINGS_PAGE_SIZE); })) || rxjs.EMPTY).subscribe(function (value) {
26723
- _this.onSort.emit();
26724
- _this.onRefresh.emit(value);
26725
- });
26726
- // If the user changes the sort order, reset back to the first page.
26727
- if (this.sort && this.paginator) {
26728
- this.registerSubscription(this.sort.sortChange
26729
- .pipe(operators.filter(function () { return !_this.sort.disabled; }))
26730
- .subscribe(function () { return _this.paginator.pageIndex = 0; }));
26731
- }
26720
+ // Detect when super.ngOnInit() not call
26721
+ if (this.debug && !this.displayedColumns)
26722
+ console.warn("[table] Missing 'displayedColumns'. Did you call super.ngOnInit() in component " + this.constructor.name + " ?");
26723
+ // Start listening sort and paginator events
26724
+ this.listenSortAndPaginationEvents();
26732
26725
  };
26733
26726
  AppTable.prototype.ngOnDestroy = function () {
26734
26727
  var _this = this;
@@ -26871,27 +26864,6 @@
26871
26864
  this.editRowById(event, row.id + 1, { focusColumn: this.firstUserColumn });
26872
26865
  return true;
26873
26866
  };
26874
- AppTable.prototype.editRowById = function (event, id, opts) {
26875
- return __awaiter(this, void 0, void 0, function () {
26876
- var row;
26877
- return __generator(this, function (_e) {
26878
- switch (_e.label) {
26879
- case 0:
26880
- if (id < 0)
26881
- return [2 /*return*/];
26882
- if (!(id >= this.visibleRowCount)) return [3 /*break*/, 1];
26883
- this.addRow(event, undefined, Object.assign(Object.assign({}, opts), { editing: true }));
26884
- return [3 /*break*/, 3];
26885
- case 1: return [4 /*yield*/, this.dataSource.getRow(id)];
26886
- case 2:
26887
- row = _e.sent();
26888
- this.editRow(event, row, opts);
26889
- _e.label = 3;
26890
- case 3: return [2 /*return*/];
26891
- }
26892
- });
26893
- });
26894
- };
26895
26867
  /**
26896
26868
  * Confirm the creation of the given row, or if not specified the currently edited row
26897
26869
  *
@@ -26907,6 +26879,7 @@
26907
26879
  // Stop event
26908
26880
  event === null || event === void 0 ? void 0 : event.stopPropagation();
26909
26881
  // Confirmation edition or creation
26882
+ // TODO: add await ?
26910
26883
  var confirmed = row.confirmEditCreate();
26911
26884
  if (confirmed) {
26912
26885
  // If edit finished, forget edited row
@@ -26925,6 +26898,7 @@
26925
26898
  }
26926
26899
  if (row.validator) {
26927
26900
  // If pending: Wait end of validation, then loop
26901
+ // TODO: remove when using async isValid() function
26928
26902
  if (row.validator.pending) {
26929
26903
  AppFormUtils.waitWhilePending(row.validator).then(function () { return _this.confirmEditCreate(event, row); });
26930
26904
  return false;
@@ -27093,20 +27067,16 @@
27093
27067
  var rows;
27094
27068
  var _this = this;
27095
27069
  return __generator(this, function (_e) {
27096
- switch (_e.label) {
27097
- case 0:
27098
- if (this.loading)
27099
- return [2 /*return*/];
27100
- if (!this.isAllSelected()) return [3 /*break*/, 1];
27101
- this.selection.clear();
27102
- return [3 /*break*/, 3];
27103
- case 1: return [4 /*yield*/, this._dataSource.getRows()];
27104
- case 2:
27105
- rows = _e.sent();
27106
- rows.forEach(function (row) { return _this.selection.select(row); });
27107
- _e.label = 3;
27108
- case 3: return [2 /*return*/];
27070
+ if (this.loading)
27071
+ return [2 /*return*/];
27072
+ if (this.isAllSelected()) {
27073
+ this.selection.clear();
27109
27074
  }
27075
+ else {
27076
+ rows = this._dataSource.getRows();
27077
+ rows.forEach(function (row) { return _this.selection.select(row); });
27078
+ }
27079
+ return [2 /*return*/];
27110
27080
  });
27111
27081
  });
27112
27082
  };
@@ -27270,9 +27240,7 @@
27270
27240
  return [4 /*yield*/, this.waitIdle()];
27271
27241
  case 1:
27272
27242
  _e.sent();
27273
- return [4 /*yield*/, this.dataSource.getRows()];
27274
- case 2:
27275
- row = ((_e.sent()) || [])
27243
+ row = this.dataSource.getRows()
27276
27244
  .find(function (row) { return _this.equals(row.currentData, data); });
27277
27245
  if (!row)
27278
27246
  return [2 /*return*/, false];
@@ -27551,40 +27519,33 @@
27551
27519
  };
27552
27520
  AppTable.prototype.canCancelRows = function (rows, opts) {
27553
27521
  return __awaiter(this, void 0, void 0, function () {
27554
- var _e, isCancel, err_5;
27555
- return __generator(this, function (_f) {
27556
- switch (_f.label) {
27522
+ var isCancel, err_5;
27523
+ return __generator(this, function (_e) {
27524
+ switch (_e.label) {
27557
27525
  case 0:
27558
- _e = rows;
27559
- if (_e) return [3 /*break*/, 2];
27560
- return [4 /*yield*/, this.dataSource.getRows()];
27561
- case 1:
27562
- _e = (_f.sent()).filter(function (row) { var _a; return (_a = row.validator) === null || _a === void 0 ? void 0 : _a.dirty; });
27563
- _f.label = 2;
27564
- case 2:
27565
27526
  // Get dirty rows
27566
- rows = _e;
27527
+ rows = rows || this.dataSource.getRows().filter(function (row) { var _a; return (_a = row.validator) === null || _a === void 0 ? void 0 : _a.dirty; });
27567
27528
  if (isEmptyArray(rows))
27568
27529
  return [2 /*return*/, true]; // No dirty: OK
27569
- if (!(this.onBeforeCancelRows.observers.length > 0)) return [3 /*break*/, 6];
27570
- _f.label = 3;
27571
- case 3:
27572
- _f.trys.push([3, 5, , 6]);
27530
+ if (!(this.onBeforeCancelRows.observers.length > 0)) return [3 /*break*/, 4];
27531
+ _e.label = 1;
27532
+ case 1:
27533
+ _e.trys.push([1, 3, , 4]);
27573
27534
  return [4 /*yield*/, emitPromiseEvent(this.onBeforeCancelRows, 'canCancel', {
27574
27535
  detail: { rows: rows }
27575
27536
  })];
27576
- case 4:
27577
- isCancel = _f.sent();
27537
+ case 2:
27538
+ isCancel = _e.sent();
27578
27539
  if (!isCancel)
27579
27540
  return [2 /*return*/, false];
27580
- return [3 /*break*/, 6];
27581
- case 5:
27582
- err_5 = _f.sent();
27541
+ return [3 /*break*/, 4];
27542
+ case 3:
27543
+ err_5 = _e.sent();
27583
27544
  if (err_5 === 'CANCELLED')
27584
27545
  return [2 /*return*/, false]; // User cancel
27585
27546
  console.error('Error while checking if can cancel rows', err_5);
27586
27547
  throw err_5;
27587
- case 6:
27548
+ case 4:
27588
27549
  // Ask user confirmation
27589
27550
  if (this.confirmBeforeCancel && (!opts || opts.interactive !== false)) {
27590
27551
  return [2 /*return*/, this.askCancelConfirmation(null, rows)];
@@ -27925,6 +27886,80 @@
27925
27886
  this.markAsDirty(opts);
27926
27887
  };
27927
27888
  /* -- private method -- */
27889
+ AppTable.prototype.listenSortAndPaginationEvents = function () {
27890
+ return __awaiter(this, void 0, void 0, function () {
27891
+ var _this = this;
27892
+ return __generator(this, function (_e) {
27893
+ switch (_e.label) {
27894
+ case 0:
27895
+ if (!!this.table) return [3 /*break*/, 2];
27896
+ // DEBUG only -- alert user that table not found in template
27897
+ if (this.debug) {
27898
+ setTimeout(function () { return !_this.table && console.warn("[table] Missing <mat-table> in the HTML template (after waiting 500ms)! Component: " + _this.constructor.name); }, 500);
27899
+ }
27900
+ // Make sure to wait the table
27901
+ return [4 /*yield*/, waitFor(function () { return !!_this.table; }, { stop: this.destroySubject })];
27902
+ case 1:
27903
+ // Make sure to wait the table
27904
+ _e.sent();
27905
+ _e.label = 2;
27906
+ case 2:
27907
+ this.registerSubscription(rxjs.merge(
27908
+ // Listen sort events
27909
+ this.sort && this.sort.sortChange
27910
+ .pipe(operators.filter(function () { return !_this.sort.disabled; }), operators.mergeMap(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_e) {
27911
+ return [2 /*return*/, this.saveBeforeAction('sort')];
27912
+ }); }); }), operators.filter(function (res) { return res === true; }),
27913
+ // Save sort in settings
27914
+ operators.tap(function () {
27915
+ var value = [_this.sort.active, _this.sort.direction || 'asc'].join(':');
27916
+ _this.settings.savePageSetting(_this.settingsId, value, SETTINGS_SORTED_COLUMN);
27917
+ }))
27918
+ || rxjs.EMPTY,
27919
+ // Listen paginator events
27920
+ this.paginator && this.paginator.page
27921
+ .pipe(operators.mergeMap(function (event) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_e) {
27922
+ return [2 /*return*/, this.saveBeforeAction('sort')];
27923
+ }); }); }), operators.filter(function (res) { return res === true; }),
27924
+ // Save page size in settings
27925
+ operators.tap(function () { return _this.settings.savePageSetting(_this.settingsId, _this.paginator.pageSize, SETTINGS_PAGE_SIZE); })) || rxjs.EMPTY)
27926
+ // Refresh on any sort or paginator events
27927
+ .subscribe(function (value) {
27928
+ _this.onSort.emit(value);
27929
+ _this.onRefresh.emit(value);
27930
+ }));
27931
+ // If the user changes the sort order, reset back to the first page.
27932
+ if (this.sort && this.paginator) {
27933
+ this.registerSubscription(this.sort.sortChange
27934
+ .pipe(operators.filter(function () { return !_this.sort.disabled; }))
27935
+ .subscribe(function () { return _this.paginator.pageIndex = 0; }));
27936
+ }
27937
+ return [2 /*return*/];
27938
+ }
27939
+ });
27940
+ });
27941
+ };
27942
+ AppTable.prototype.editRowById = function (event, id, opts) {
27943
+ return __awaiter(this, void 0, void 0, function () {
27944
+ var row;
27945
+ return __generator(this, function (_e) {
27946
+ switch (_e.label) {
27947
+ case 0:
27948
+ if (id < 0)
27949
+ return [2 /*return*/];
27950
+ if (!(id >= this.visibleRowCount)) return [3 /*break*/, 1];
27951
+ this.addRow(event, undefined, Object.assign(Object.assign({}, opts), { editing: true }));
27952
+ return [3 /*break*/, 3];
27953
+ case 1: return [4 /*yield*/, this.dataSource.getRow(id)];
27954
+ case 2:
27955
+ row = _e.sent();
27956
+ this.editRow(event, row, opts);
27957
+ _e.label = 3;
27958
+ case 3: return [2 /*return*/];
27959
+ }
27960
+ });
27961
+ });
27962
+ };
27928
27963
  AppTable.prototype.setLoading = function (value, opts) {
27929
27964
  if (this.loadingSubject.value !== value) {
27930
27965
  this.loadingSubject.next(value);
@@ -28409,13 +28444,14 @@
28409
28444
  }
28410
28445
  };
28411
28446
  AppEditor.prototype.markAsLoaded = function (opts) {
28412
- var _a;
28447
+ var _a, _b;
28413
28448
  if (this.loadingSubject.value) {
28414
28449
  this.loadingSubject.next(false);
28415
28450
  if (!opts || opts.onlySelf !== true) {
28416
- // Emit to children forms
28417
- // Tables should be changed by parent
28418
- (_a = this.forms) === null || _a === void 0 ? void 0 : _a.forEach(function (c) { return c.markAsLoaded(opts); });
28451
+ // Emit to children forms and editors
28452
+ // note: tables should be changed by parent
28453
+ (_a = this.forms) === null || _a === void 0 ? void 0 : _a.forEach(function (f) { return f.markAsLoaded(opts); });
28454
+ (_b = this.editors) === null || _b === void 0 ? void 0 : _b.forEach(function (e) { return e.markAsLoaded(opts); });
28419
28455
  }
28420
28456
  if (!opts || opts.emitEvent !== false) {
28421
28457
  this.markForCheck();
@@ -28439,20 +28475,20 @@
28439
28475
  };
28440
28476
  AppEditor.prototype.cancel = function (event) {
28441
28477
  return __awaiter(this, void 0, void 0, function () {
28442
- return __generator(this, function (_b) {
28443
- switch (_b.label) {
28478
+ return __generator(this, function (_c) {
28479
+ switch (_c.label) {
28444
28480
  case 0:
28445
28481
  if (!this.isNewData) return [3 /*break*/, 2];
28446
28482
  return [4 /*yield*/, this.unload()];
28447
28483
  case 1:
28448
- _b.sent(); // async reset
28484
+ _c.sent(); // async reset
28449
28485
  return [3 /*break*/, 4];
28450
28486
  case 2:
28451
28487
  if (!this.dirty) return [3 /*break*/, 4];
28452
28488
  return [4 /*yield*/, this.reload()];
28453
28489
  case 3:
28454
- _b.sent(); // async reload
28455
- _b.label = 4;
28490
+ _c.sent(); // async reload
28491
+ _c.label = 4;
28456
28492
  case 4: return [2 /*return*/];
28457
28493
  }
28458
28494
  });
@@ -28466,7 +28502,7 @@
28466
28502
  AppEditor.prototype.unload = function (opts) {
28467
28503
  var _a;
28468
28504
  return __awaiter(this, void 0, void 0, function () {
28469
- return __generator(this, function (_b) {
28505
+ return __generator(this, function (_c) {
28470
28506
  console.debug('[tab-page] Unloading data...');
28471
28507
  this.markAsLoading();
28472
28508
  (_a = this._children) === null || _a === void 0 ? void 0 : _a.forEach(function (f) {
@@ -28484,8 +28520,8 @@
28484
28520
  AppEditor.prototype.reloadWithConfirmation = function (confirm) {
28485
28521
  return __awaiter(this, void 0, void 0, function () {
28486
28522
  var needConfirm, translations, alert;
28487
- return __generator(this, function (_b) {
28488
- switch (_b.label) {
28523
+ return __generator(this, function (_c) {
28524
+ switch (_c.label) {
28489
28525
  case 0:
28490
28526
  needConfirm = this.dirty;
28491
28527
  if (!(!confirm && needConfirm)) return [3 /*break*/, 4];
@@ -28510,20 +28546,20 @@
28510
28546
  ]
28511
28547
  })];
28512
28548
  case 1:
28513
- alert = _b.sent();
28549
+ alert = _c.sent();
28514
28550
  return [4 /*yield*/, alert.present()];
28515
28551
  case 2:
28516
- _b.sent();
28552
+ _c.sent();
28517
28553
  return [4 /*yield*/, alert.onDidDismiss()];
28518
28554
  case 3:
28519
- _b.sent();
28520
- _b.label = 4;
28555
+ _c.sent();
28556
+ _c.label = 4;
28521
28557
  case 4:
28522
28558
  if (!(confirm || !needConfirm)) return [3 /*break*/, 6];
28523
28559
  this.scrollToTop();
28524
28560
  this.disable();
28525
28561
  return [4 /*yield*/, this.reload()];
28526
- case 5: return [2 /*return*/, _b.sent()];
28562
+ case 5: return [2 /*return*/, _c.sent()];
28527
28563
  case 6: return [2 /*return*/];
28528
28564
  }
28529
28565
  });
@@ -28532,7 +28568,7 @@
28532
28568
  AppEditor.prototype.goBack = function (event) {
28533
28569
  var _a;
28534
28570
  return __awaiter(this, void 0, void 0, function () {
28535
- return __generator(this, function (_b) {
28571
+ return __generator(this, function (_c) {
28536
28572
  // Go back
28537
28573
  if ((_a = this.toolbar) === null || _a === void 0 ? void 0 : _a.canGoBack) {
28538
28574
  return [2 /*return*/, this.toolbar.goBack()];
@@ -28556,7 +28592,7 @@
28556
28592
  AppEditor.prototype.scrollToTop = function (duration) {
28557
28593
  return __awaiter(this, void 0, void 0, function () {
28558
28594
  var scrollToTop_1;
28559
- return __generator(this, function (_b) {
28595
+ return __generator(this, function (_c) {
28560
28596
  duration = toNumber(duration, 500);
28561
28597
  if (!this.content) {
28562
28598
  console.warn("[tab-editor] Cannot scroll to top. (no 'ion-content' tag found " + this.constructor.name);
@@ -28583,14 +28619,15 @@
28583
28619
  };
28584
28620
  AppEditor.prototype.saveIfDirtyAndConfirm = function (event, opts) {
28585
28621
  return __awaiter(this, void 0, void 0, function () {
28586
- var confirm, cancel, translations, alert;
28587
- return __generator(this, function (_b) {
28588
- switch (_b.label) {
28622
+ var confirmed, cancel_1, translations, alert;
28623
+ return __generator(this, function (_c) {
28624
+ switch (_c.label) {
28589
28625
  case 0:
28590
28626
  if (!this.dirty)
28591
28627
  return [2 /*return*/, true];
28592
- confirm = false;
28593
- cancel = false;
28628
+ confirmed = (opts === null || opts === void 0 ? void 0 : opts.confirmed) || false;
28629
+ if (!!confirmed) return [3 /*break*/, 4];
28630
+ cancel_1 = false;
28594
28631
  translations = this.translate.instant(['COMMON.BTN_SAVE', 'COMMON.BTN_CANCEL', 'COMMON.BTN_ABORT_CHANGES', 'CONFIRM.SAVE', 'CONFIRM.ALERT_HEADER']);
28595
28632
  return [4 /*yield*/, this.alertCtrl.create({
28596
28633
  header: translations['CONFIRM.ALERT_HEADER'],
@@ -28601,7 +28638,7 @@
28601
28638
  role: 'cancel',
28602
28639
  cssClass: 'secondary',
28603
28640
  handler: function () {
28604
- cancel = true;
28641
+ cancel_1 = true;
28605
28642
  }
28606
28643
  },
28607
28644
  {
@@ -28613,38 +28650,39 @@
28613
28650
  {
28614
28651
  text: translations['COMMON.BTN_SAVE'],
28615
28652
  handler: function () {
28616
- confirm = true; // update upper value
28653
+ confirmed = true; // update upper value
28617
28654
  }
28618
28655
  }
28619
28656
  ]
28620
28657
  })];
28621
28658
  case 1:
28622
- alert = _b.sent();
28659
+ alert = _c.sent();
28623
28660
  return [4 /*yield*/, alert.present()];
28624
28661
  case 2:
28625
- _b.sent();
28662
+ _c.sent();
28626
28663
  return [4 /*yield*/, alert.onDidDismiss()];
28627
28664
  case 3:
28628
- _b.sent();
28629
- if (!confirm) {
28630
- return [2 /*return*/, !cancel];
28665
+ _c.sent();
28666
+ if (!confirmed) {
28667
+ return [2 /*return*/, !cancel_1];
28631
28668
  }
28632
- return [4 /*yield*/, this.save(event, opts)];
28633
- case 4: return [2 /*return*/, _b.sent()];
28669
+ _c.label = 4;
28670
+ case 4: return [4 /*yield*/, this.save(event, opts)];
28671
+ case 5: return [2 /*return*/, _c.sent()];
28634
28672
  }
28635
28673
  });
28636
28674
  });
28637
28675
  };
28638
28676
  AppEditor.prototype.showToast = function (opts) {
28639
28677
  return __awaiter(this, void 0, void 0, function () {
28640
- return __generator(this, function (_b) {
28641
- switch (_b.label) {
28678
+ return __generator(this, function (_c) {
28679
+ switch (_c.label) {
28642
28680
  case 0:
28643
28681
  if (!this.toastController)
28644
28682
  throw new Error('Missing toastController in component\'s constructor');
28645
28683
  return [4 /*yield*/, Toasts.show(this.toastController, this.translate, opts)];
28646
28684
  case 1:
28647
- _b.sent();
28685
+ _c.sent();
28648
28686
  return [2 /*return*/];
28649
28687
  }
28650
28688
  });
@@ -28869,13 +28907,13 @@
28869
28907
  unload: { get: function () { return _super_1.prototype.unload; } }
28870
28908
  });
28871
28909
  return __awaiter(this, void 0, void 0, function () {
28872
- return __generator(this, function (_b) {
28873
- switch (_b.label) {
28910
+ return __generator(this, function (_c) {
28911
+ switch (_c.label) {
28874
28912
  case 0:
28875
28913
  this.selectedTabIndex = 0;
28876
28914
  return [4 /*yield*/, _super.unload.call(this, opts)];
28877
28915
  case 1:
28878
- _b.sent();
28916
+ _c.sent();
28879
28917
  return [2 /*return*/];
28880
28918
  }
28881
28919
  });
@@ -28884,13 +28922,13 @@
28884
28922
  AppTabEditor.prototype.saveDirtyTables = function () {
28885
28923
  return __awaiter(this, void 0, void 0, function () {
28886
28924
  var results, saved;
28887
- return __generator(this, function (_b) {
28888
- switch (_b.label) {
28925
+ return __generator(this, function (_c) {
28926
+ switch (_c.label) {
28889
28927
  case 0: return [4 /*yield*/, Promise.all((this.tables || [])
28890
28928
  .filter(function (c) { return c.dirty; })
28891
28929
  .map(function (c) { return c.save(); }))];
28892
28930
  case 1:
28893
- results = _b.sent();
28931
+ results = _c.sent();
28894
28932
  saved = results.findIndex(function (result) { return result !== true; }) === -1;
28895
28933
  return [2 /*return*/, saved];
28896
28934
  }
@@ -30381,7 +30419,7 @@
30381
30419
  SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
30382
30420
  };
30383
30421
 
30384
- var moment$4 = momentImported__namespace;
30422
+ var moment$6 = momentImported__namespace;
30385
30423
  var USER_EVENT_SERVICE = new i0.InjectionToken('UserEventService');
30386
30424
  var AbstractUserEventService = /** @class */ (function (_super) {
30387
30425
  __extends(AbstractUserEventService, _super);
@@ -30903,7 +30941,7 @@
30903
30941
  };
30904
30942
  AbstractUserEventService.prototype.resetCount = function () {
30905
30943
  this._countSubject.next(undefined);
30906
- this.resetCountDate = moment$4();
30944
+ this.resetCountDate = moment$6();
30907
30945
  // restart listening count changes
30908
30946
  this.startListenCountChanges();
30909
30947
  };
@@ -31007,7 +31045,7 @@
31007
31045
  if (!userEvents.length)
31008
31046
  return [2 /*return*/];
31009
31047
  // set read date
31010
- userEvents.forEach(function (userEvent) { return userEvent.readDate = moment$4(); });
31048
+ userEvents.forEach(function (userEvent) { return userEvent.readDate = moment$6(); });
31011
31049
  localEntities = userEvents.filter(function (userEvent) { return !userEvent.id || userEvent.id < 0; });
31012
31050
  remoteEntities = userEvents.filter(function (userEvent) { return userEvent.id > 0; });
31013
31051
  // save local entities
@@ -32053,7 +32091,7 @@
32053
32091
  ];
32054
32092
 
32055
32093
  var Mutations = {
32056
- send: core.gql(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["mutation SendMessage($data: MessageVOInput){\n done: sendMessage(message: $data)\n }"], ["mutation SendMessage($data: MessageVOInput){\n done: sendMessage(message: $data)\n }"])))
32094
+ send: core.gql(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["mutation SendMessage($data: MessageVOInput){\n done: sendMessage(message: $data)\n }"], ["mutation SendMessage($data: MessageVOInput){\n done: sendMessage(message: $data)\n }"])))
32057
32095
  };
32058
32096
  var MessageService = /** @class */ (function (_super) {
32059
32097
  __extends(MessageService, _super);
@@ -32127,7 +32165,7 @@
32127
32165
  };
32128
32166
  return MessageService;
32129
32167
  }(BaseGraphqlService));
32130
- MessageService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MessageService_Factory() { return new MessageService(i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(i1__namespace$4.ToastController), i0__namespace.ɵɵinject(ENVIRONMENT, 8)); }, token: MessageService, providedIn: "root" });
32168
+ MessageService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MessageService_Factory() { return new MessageService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(i1$5.ToastController), i0.ɵɵinject(ENVIRONMENT, 8)); }, token: MessageService, providedIn: "root" });
32131
32169
  MessageService.decorators = [
32132
32170
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
32133
32171
  ];
@@ -32137,7 +32175,7 @@
32137
32175
  { type: i1$5.ToastController },
32138
32176
  { type: Environment, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [ENVIRONMENT,] }] }
32139
32177
  ]; };
32140
- var templateObject_1$1;
32178
+ var templateObject_1$3;
32141
32179
 
32142
32180
  var PersonFilter_1;
32143
32181
  // @dynamic
@@ -32196,16 +32234,16 @@
32196
32234
  ], exports.PersonFilter);
32197
32235
 
32198
32236
  var PersonFragments = {
32199
- person: core.gql(templateObject_1 || (templateObject_1 = __makeTemplateObject(["fragment PersonFragment on PersonVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n username\n usernameExtranet\n department {\n id\n label\n name\n logo\n __typename\n }\n __typename\n }"], ["fragment PersonFragment on PersonVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n username\n usernameExtranet\n department {\n id\n label\n name\n logo\n __typename\n }\n __typename\n }"])))
32237
+ person: core.gql(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["fragment PersonFragment on PersonVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n username\n usernameExtranet\n department {\n id\n label\n name\n logo\n __typename\n }\n __typename\n }"], ["fragment PersonFragment on PersonVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n username\n usernameExtranet\n department {\n id\n label\n name\n logo\n __typename\n }\n __typename\n }"])))
32200
32238
  };
32201
32239
  // Load persons query
32202
32240
  var PersonQueries = {
32203
- loadAll: core.gql(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n query Persons($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n }\n ", ""], ["\n query Persons($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n }\n ", ""])), PersonFragments.person),
32204
- loadAllWithTotal: core.gql(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n query PersonsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n total: personsCount(filter: $filter)\n }\n ", ""], ["\n query PersonsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n total: personsCount(filter: $filter)\n }\n ", ""])), PersonFragments.person)
32241
+ loadAll: core.gql(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n query Persons($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n }\n ", ""], ["\n query Persons($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n }\n ", ""])), PersonFragments.person),
32242
+ loadAllWithTotal: core.gql(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n query PersonsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n total: personsCount(filter: $filter)\n }\n ", ""], ["\n query PersonsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n total: personsCount(filter: $filter)\n }\n ", ""])), PersonFragments.person)
32205
32243
  };
32206
32244
  var PersonMutations = {
32207
- saveAll: core.gql(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ", ""], ["\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ", ""])), PersonFragments.person),
32208
- deleteAll: core.gql(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }"], ["\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }"])))
32245
+ saveAll: core.gql(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ", ""], ["\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ", ""])), PersonFragments.person),
32246
+ deleteAll: core.gql(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }"], ["\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }"])))
32209
32247
  };
32210
32248
  var PersonService = /** @class */ (function (_super_1) {
32211
32249
  __extends(PersonService, _super_1);
@@ -32326,7 +32364,7 @@
32326
32364
  };
32327
32365
  return PersonService;
32328
32366
  }(BaseEntityService));
32329
- PersonService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(PlatformService), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
32367
+ PersonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(PlatformService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
32330
32368
  PersonService.decorators = [
32331
32369
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
32332
32370
  ];
@@ -32336,7 +32374,7 @@
32336
32374
  { type: NetworkService },
32337
32375
  { type: EntitiesStorage }
32338
32376
  ]; };
32339
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
32377
+ var templateObject_1$4, templateObject_2$2, templateObject_3$2, templateObject_4$2, templateObject_5$2;
32340
32378
 
32341
32379
  var PersonValidatorService = /** @class */ (function () {
32342
32380
  function PersonValidatorService(formBuilder, accountValidatorService) {
@@ -32359,7 +32397,7 @@
32359
32397
  };
32360
32398
  return PersonValidatorService;
32361
32399
  }());
32362
- PersonValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder), i0__namespace.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
32400
+ PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
32363
32401
  PersonValidatorService.decorators = [
32364
32402
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
32365
32403
  ];
@@ -32570,7 +32608,7 @@
32570
32608
  UsersPage.decorators = [
32571
32609
  { type: i0.Component, args: [{
32572
32610
  selector: 'app-users-table',
32573
- template: "<app-toolbar [title]=\"'USER.LIST.TITLE'|translate\"\n color=\"primary\"\n [canGoBack]=\"false\"\n [hasValidate]=\"!(loadingSubject|async) && dirty\"\n (onValidate)=\"save()\">\n <ion-buttons slot=\"end\">\n\n <!-- Compose message -->\n <button mat-icon-button *ngIf=\"canSendMessage\"\n [title]=\"'USER.LIST.BTN_SEND_MESSAGE'|translate\"\n (click)=\"openComposeMessageModal($event)\">\n <ion-icon name=\"mail\" slot=\"icon-only\"></ion-icon>\n </button>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n <!-- Add -->\n <button mat-icon-button\n *ngIf=\"canEdit && !mobile\"\n [title]=\"'COMMON.BTN_ADD'|translate\"\n (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- Refresh -->\n <button mat-icon-button *ngIf=\"!mobile\"\n [title]=\"'COMMON.BTN_REFRESH'|translate\"\n (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\"\n *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold;\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\">filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n </ng-container>\n\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button\n class=\"hidden-xs hidden-sm\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n </ion-buttons>\n</app-toolbar>\n\n<ion-content class=\"ion-no-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"errorSubject|async ; let error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- search -->\n <mat-expansion-panel #filterExpansionPanel class=\"ion-no-padding filter-panel filter-panel-floating\">\n <form class=\"form-container ion-padding\" [formGroup]=\"filterForm\" (ngSubmit)=\"onRefresh.emit()\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LIST.FILTER.SEARCH'|translate\" formControlName=\"searchText\">\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <!-- status -->\n <mat-form-field>\n <mat-select formControlName=\"statusId\" [placeholder]=\"'USER.STATUS'|translate\">\n <mat-option [value]=\"null\"><i><span translate>COMMON.EMPTY_OPTION</span></i></mat-option>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.statusId)\"\n [hidden]=\"filterForm.controls.statusId.disabled || !filterForm.controls.statusId.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label [hidden]=\"(loadingSubject|async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\">\n {{ (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT') | translate: {\n count: (totalRowCount |\n numberFormat)\n } }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\"\n (click)=\"filterExpansionPanel.close()\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"table-container\">\n <table #table mat-table matSort\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\" [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <ng-container matColumnDef=\"select\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id Column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData.id }}</td>\n </ng-container>\n\n <!-- avatar Column -->\n <ng-container matColumnDef=\"avatar\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <div class=\"avatar\" *ngIf=\"row.currentData.avatar; else generateIcon\"\n [ngStyle]=\"{'background-image':'url('+row.currentData.avatar+')'}\"></div>\n <ng-template #generateIcon>\n <div class=\"avatar\">\n <svg width=\"38\" width=\"38\" [data-jdenticon-value]=\"row.currentData.id\"></svg>\n </div>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- lastName -->\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.LAST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='lastName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput\n [formControl]=\"row.validator.controls['lastName']\"\n [placeholder]=\"'USER.LAST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='lastName'\">\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n </td>\n\n </ng-container>\n\n <!-- firstname -->\n <ng-container matColumnDef=\"firstName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.FIRST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n\n (click)=\"focusColumn='firstName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['firstName']\"\n [placeholder]=\"'USER.FIRST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='firstName'\">\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- email -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.EMAIL</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='email'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['email']\"\n [placeholder]=\"'USER.EMAIL'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='email'\">\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('email')\">\n <span translate>ERROR.FIELD_NOT_VALID_EMAIL</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- additional fields -->\n <ng-container *ngFor=\"let definition of additionalFields\" [matColumnDef]=\"definition.key\">\n <th mat-header-cell *matHeaderCellDef>\n <span>{{definition.label|translate}}</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn=definition.key\">\n <app-form-field floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"row.validator.controls[definition.key]\"\n [required]=\"definition.extra?.account?.required\"\n [autofocus]=\"row.editing && focusColumn===definition.ke\">\n </app-form-field>\n </td>\n </ng-container>\n\n <!-- profile column -->\n <ng-container matColumnDef=\"profile\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.PROFILE</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='profile'\">\n <mat-form-field floatLabel=\"never\">\n <mat-select [formControl]=\"row.validator.controls['mainProfile']\"\n [placeholder]=\"'USER.PROFILE'|translate\">\n <mat-option *ngFor=\"let item of profiles\" [value]=\"item\">\n {{ ('USER.PROFILE_ENUM.' + item) | uppercase |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['mainProfile'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='status'\">\n <mat-form-field floatLabel=\"never\">\n <ion-icon matPrefix *ngIf=\"row.validator.controls['statusId'].value &gt;=0\" [name]=\"statusById[row.validator.controls['statusId'].value]?.icon\"></ion-icon>\n\n <mat-select [formControl]=\"row.validator.controls['statusId']\"\n [placeholder]=\"'REFERENTIAL.STATUS'|translate\">\n <mat-select-trigger>\n <span *ngIf=\"row.validator.controls['statusId'].value &gt;=0\">\n {{ statusById[row.validator.controls['statusId'].value]?.label | translate}}</span>\n </mat-select-trigger>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username -->\n <ng-container matColumnDef=\"username\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='username'\">\n <mat-form-field floatLabel=\"never\" >\n <input matInput [formControl]=\"row.validator.controls.username\"\n [placeholder]=\"'USER.USERNAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='username'\">\n <mat-error *ngIf=\"row.validator.controls.username.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username extranet -->\n <ng-container matColumnDef=\"usernameExtranet\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME_EXTRANET</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='usernameExtranet'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls.usernameExtranet\"\n [placeholder]=\"'USER.USERNAME_EXTRANET'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='usernameExtranet'\">\n <mat-error *ngIf=\"row.validator.controls.usernameExtranet.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- pubkey -->\n <ng-container matColumnDef=\"pubkey\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.PUBKEY</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n [title]=\"row.validator.controls.pubkey.valueChanges|async\"\n (click)=\"focusColumn='pubkey'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['pubkey']\" [placeholder]=\"'USER.PUBKEY'|translate\"\n [readonly]=\"!row.editing\" autocomplete=\"off\">\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('pubkey')\">\n <span translate>ERROR.FIELD_NOT_VALID_PUBKEY</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Actions buttons column -->\n <app-actions-column [stickyEnd]=\"useSticky\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n (cancelOrDeleteClick)=\"cancelOrDelete($event.event, $event.row)\"\n (confirmAndAddClick)=\"confirmAndAdd($event.event, $event.row)\"\n (backward)=\"confirmAndBackward($event.event, $event.row)\"\n (forward)=\"confirmAndForward($event.event, $event.row)\"\n [canCancel]=\"false\">\n </app-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [class.mat-row-error]=\"row.validator.invalid\"\n [class.mat-row-dirty]=\"row.currentData.dirty\"\n [class.mat-row-disabled]=\"!row.editing\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"row.validator.invalid\"></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject|async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n </div>\n</ion-content>\n\n<ion-footer>\n <mat-paginator class=\"mat-paginator-footer\"\n [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\"\n [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n\n <app-form-buttons-bar *ngIf=\"!mobile && inlineEdition\"\n (onCancel)=\"onRefresh.emit()\" (onSave)=\"save()\" [disabled]=\"(loadingSubject|async) || !dirty\"></app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\" *ngIf=\"mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow()\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n",
32611
+ template: "<app-toolbar [title]=\"'USER.LIST.TITLE'|translate\"\n color=\"primary\"\n [canGoBack]=\"false\"\n [hasValidate]=\"!(loadingSubject|async) && dirty\"\n (onValidate)=\"save()\">\n <ion-buttons slot=\"end\">\n\n <!-- Compose message -->\n <button mat-icon-button *ngIf=\"canSendMessage\"\n [title]=\"'USER.LIST.BTN_SEND_MESSAGE'|translate\"\n (click)=\"openComposeMessageModal($event)\">\n <ion-icon name=\"mail\" slot=\"icon-only\"></ion-icon>\n </button>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n <!-- Add -->\n <button mat-icon-button\n *ngIf=\"canEdit && !mobile\"\n [title]=\"'COMMON.BTN_ADD'|translate\"\n (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- Refresh -->\n <button mat-icon-button *ngIf=\"!mobile\"\n [title]=\"'COMMON.BTN_REFRESH'|translate\"\n (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\"\n *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold;\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\">filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n </ng-container>\n\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button\n class=\"hidden-xs hidden-sm\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n </ion-buttons>\n</app-toolbar>\n\n<ion-content class=\"ion-no-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"errorSubject|async ; let error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- search -->\n <mat-expansion-panel #filterExpansionPanel class=\"ion-no-padding filter-panel filter-panel-floating\">\n <form class=\"form-container ion-padding\" [formGroup]=\"filterForm\" (ngSubmit)=\"onRefresh.emit()\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LIST.FILTER.SEARCH'|translate\" formControlName=\"searchText\">\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <!-- status -->\n <mat-form-field>\n <mat-select formControlName=\"statusId\" [placeholder]=\"'USER.STATUS'|translate\">\n <mat-option [value]=\"null\"><i><span translate>COMMON.EMPTY_OPTION</span></i></mat-option>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.statusId)\"\n [hidden]=\"filterForm.controls.statusId.disabled || !filterForm.controls.statusId.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label [hidden]=\"(loadingSubject|async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\">\n {{ (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT') | translate: {\n count: (totalRowCount |\n numberFormat)\n } }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\"\n (click)=\"filterExpansionPanel.close()\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"table-container\">\n <table #table mat-table matSort\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\" [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <ng-container matColumnDef=\"select\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id Column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData.id }}</td>\n </ng-container>\n\n <!-- avatar Column -->\n <ng-container matColumnDef=\"avatar\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <div class=\"avatar\" *ngIf=\"row.currentData.avatar; else generateIcon\"\n [ngStyle]=\"{'background-image':'url('+row.currentData.avatar+')'}\"></div>\n <ng-template #generateIcon>\n <div class=\"avatar\">\n <svg width=\"38\" width=\"38\" [data-jdenticon-value]=\"row.currentData.id\"></svg>\n </div>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- lastName -->\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.LAST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='lastName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput\n [formControl]=\"row.validator.controls['lastName']\"\n [placeholder]=\"'USER.LAST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='lastName'\">\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n\n </ng-container>\n\n <!-- firstname -->\n <ng-container matColumnDef=\"firstName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.FIRST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='firstName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['firstName']\"\n [placeholder]=\"'USER.FIRST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='firstName'\">\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- email -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.EMAIL</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='email'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['email']\"\n [placeholder]=\"'USER.EMAIL'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='email'\">\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('email')\">\n <span translate>ERROR.FIELD_NOT_VALID_EMAIL</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- additional fields -->\n <ng-container *ngFor=\"let definition of additionalFields\" [matColumnDef]=\"definition.key\">\n <th mat-header-cell *matHeaderCellDef>\n <span>{{definition.label|translate}}</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn=definition.key\">\n <app-form-field floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"row.validator.controls[definition.key]\"\n [required]=\"definition.extra?.account?.required\"\n [autofocus]=\"row.editing && focusColumn===definition.key\">\n </app-form-field>\n </td>\n </ng-container>\n\n <!-- profile column -->\n <ng-container matColumnDef=\"profile\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.PROFILE</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='profile'\">\n <mat-form-field floatLabel=\"never\">\n <mat-select [formControl]=\"row.validator.controls['mainProfile']\"\n [placeholder]=\"'USER.PROFILE'|translate\">\n <mat-option *ngFor=\"let item of profiles\" [value]=\"item\">\n {{ ('USER.PROFILE_ENUM.' + item) | uppercase |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['mainProfile'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='status'\">\n <mat-form-field floatLabel=\"never\">\n <ion-icon matPrefix *ngIf=\"row.validator.controls['statusId'].value &gt;=0\" [name]=\"statusById[row.validator.controls['statusId'].value]?.icon\"></ion-icon>\n\n <mat-select [formControl]=\"row.validator.controls['statusId']\"\n [placeholder]=\"'REFERENTIAL.STATUS'|translate\">\n <mat-select-trigger>\n <span *ngIf=\"row.validator.controls['statusId'].value &gt;=0\">\n {{ statusById[row.validator.controls['statusId'].value]?.label | translate}}</span>\n </mat-select-trigger>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username -->\n <ng-container matColumnDef=\"username\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='username'\">\n <mat-form-field floatLabel=\"never\" >\n <input matInput [formControl]=\"row.validator.controls.username\"\n [placeholder]=\"'USER.USERNAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='username'\">\n <mat-error *ngIf=\"row.validator.controls.username.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username extranet -->\n <ng-container matColumnDef=\"usernameExtranet\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME_EXTRANET</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='usernameExtranet'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls.usernameExtranet\"\n [placeholder]=\"'USER.USERNAME_EXTRANET'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='usernameExtranet'\">\n <mat-error *ngIf=\"row.validator.controls.usernameExtranet.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- pubkey -->\n <ng-container matColumnDef=\"pubkey\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.PUBKEY</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n [title]=\"row.validator.controls.pubkey.valueChanges|async\"\n (click)=\"focusColumn='pubkey'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['pubkey']\" [placeholder]=\"'USER.PUBKEY'|translate\"\n [readonly]=\"!row.editing\" autocomplete=\"off\">\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('pubkey')\">\n <span translate>ERROR.FIELD_NOT_VALID_PUBKEY</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Actions buttons column -->\n <app-actions-column [stickyEnd]=\"useSticky\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n (cancelOrDeleteClick)=\"cancelOrDelete($event.event, $event.row)\"\n (confirmAndAddClick)=\"confirmAndAdd($event.event, $event.row)\"\n (backward)=\"confirmAndBackward($event.event, $event.row)\"\n (forward)=\"confirmAndForward($event.event, $event.row)\"\n [canCancel]=\"false\">\n </app-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [class.mat-row-error]=\"row.validator.invalid\"\n [class.mat-row-dirty]=\"row.currentData.dirty\"\n [class.mat-row-disabled]=\"!row.editing\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"row.validator.invalid\"></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject|async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n </div>\n</ion-content>\n\n<ion-footer>\n <mat-paginator class=\"mat-paginator-footer\"\n [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\"\n [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n\n <app-form-buttons-bar *ngIf=\"!mobile && inlineEdition\"\n (onCancel)=\"onRefresh.emit()\" (onSave)=\"save()\" [disabled]=\"(loadingSubject|async) || !dirty\"></app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\" *ngIf=\"mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow()\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n",
32574
32612
  providers: [
32575
32613
  { provide: ngxMaterialTable.ValidatorService, useExisting: PersonValidatorService }
32576
32614
  ],
@@ -32622,17 +32660,17 @@
32622
32660
  ];
32623
32661
  AdminModule.ctorParameters = function () { return []; };
32624
32662
 
32625
- var ɵ0 = {
32663
+ var ɵ0$c = {
32626
32664
  profile: 'ADMIN'
32627
32665
  };
32628
- var routes$6 = [
32666
+ var routes = [
32629
32667
  {
32630
32668
  path: 'users',
32631
32669
  pathMatch: 'full',
32632
32670
  component: UsersPage,
32633
32671
  canActivate: [AuthGuardService],
32634
32672
  canDeactivate: [ComponentDirtyGuard],
32635
- data: ɵ0
32673
+ data: ɵ0$c
32636
32674
  }
32637
32675
  ];
32638
32676
  var AdminRoutingModule = /** @class */ (function () {
@@ -32645,30 +32683,30 @@
32645
32683
  imports: [
32646
32684
  SharedRoutingModule,
32647
32685
  AdminModule,
32648
- i3.RouterModule.forChild(routes$6)
32686
+ i3.RouterModule.forChild(routes)
32649
32687
  ],
32650
32688
  exports: [i3.RouterModule]
32651
32689
  },] }
32652
32690
  ];
32653
32691
 
32654
- var EntityTestClass$1 = /** @class */ (function () {
32692
+ var EntityTestClass = /** @class */ (function () {
32655
32693
  function EntityTestClass() {
32656
32694
  }
32657
32695
  return EntityTestClass;
32658
32696
  }());
32659
- var FAKE_ENTITIES$1 = [
32697
+ var FAKE_ENTITIES = [
32660
32698
  { id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
32661
32699
  { id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
32662
32700
  { id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
32663
32701
  ];
32664
- function deepCopy$1(values, size) {
32702
+ function deepCopy(values, size) {
32665
32703
  if (isNil(size)) {
32666
- return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
32704
+ return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
32667
32705
  }
32668
32706
  var result = [];
32669
32707
  var i = 1;
32670
32708
  while (result.length < size) {
32671
- result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
32709
+ result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
32672
32710
  var name = entity.name + ' #' + i;
32673
32711
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
32674
32712
  }));
@@ -32678,7 +32716,7 @@
32678
32716
  var AutocompleteTestPage = /** @class */ (function () {
32679
32717
  function AutocompleteTestPage(formBuilder) {
32680
32718
  this.formBuilder = formBuilder;
32681
- this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
32719
+ this._items = deepCopy(FAKE_ENTITIES, 100);
32682
32720
  this._$items = new rxjs.BehaviorSubject(undefined);
32683
32721
  this.autocompleteFields = new MatAutocompleteConfigHolder();
32684
32722
  this.memoryHide = false;
@@ -32724,7 +32762,7 @@
32724
32762
  });
32725
32763
  // From items
32726
32764
  this.autocompleteFields.add('entity-items-large', {
32727
- items: FAKE_ENTITIES$1.slice(),
32765
+ items: FAKE_ENTITIES.slice(),
32728
32766
  attributes: ['label', 'name', 'description', 'comments'],
32729
32767
  displayWith: this.entityToString
32730
32768
  });
@@ -32760,14 +32798,14 @@
32760
32798
  var _this = this;
32761
32799
  return __generator(this, function (_a) {
32762
32800
  data = {
32763
- entity: deepCopy$1(FAKE_ENTITIES$1)[0],
32764
- farEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
32801
+ entity: deepCopy(FAKE_ENTITIES)[0],
32802
+ farEntity: deepCopy(FAKE_ENTITIES)[2],
32765
32803
  // This item is NOT in the items list => i should be displayed anyway
32766
32804
  missingEntity: {
32767
32805
  id: -1, label: '??', name: 'Missing item'
32768
32806
  },
32769
- disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
32770
- entities: deepCopy$1(FAKE_ENTITIES$1)
32807
+ disableEntity: deepCopy(FAKE_ENTITIES)[2],
32808
+ entities: deepCopy(FAKE_ENTITIES)
32771
32809
  };
32772
32810
  this.form.setValue(data);
32773
32811
  // Load observables
@@ -32939,13 +32977,13 @@
32939
32977
  { type: i1.FormBuilder }
32940
32978
  ]; };
32941
32979
 
32942
- var moment$3 = momentImported__namespace;
32980
+ var moment$7 = momentImported__namespace;
32943
32981
  var SwipeTestPage = /** @class */ (function () {
32944
32982
  function SwipeTestPage(formBuilder, dateFormatPipe) {
32945
32983
  this.formBuilder = formBuilder;
32946
32984
  this.dateFormatPipe = dateFormatPipe;
32947
32985
  this.$dates = new rxjs.BehaviorSubject(undefined);
32948
- this._today = moment$3().startOf('day');
32986
+ this._today = moment$7().startOf('day');
32949
32987
  this.form = formBuilder.group({
32950
32988
  empty: [null, i1.Validators.required],
32951
32989
  date: [null, i1.Validators.compose([i1.Validators.required, SharedValidators.validDate])],
@@ -32959,7 +32997,7 @@
32959
32997
  var _this = this;
32960
32998
  var dates = [];
32961
32999
  for (var d = 0; d < 7; d++) {
32962
- dates[d] = moment$3(this._today).add(d - 3, 'day');
33000
+ dates[d] = moment$7(this._today).add(d - 3, 'day');
32963
33001
  }
32964
33002
  this.$dates.next(dates);
32965
33003
  this.loadData();
@@ -33006,7 +33044,7 @@
33006
33044
  { type: DateFormatPipe }
33007
33045
  ]; };
33008
33046
 
33009
- var moment$2 = momentImported__namespace;
33047
+ var moment$8 = momentImported__namespace;
33010
33048
  var DateTimeTestPage = /** @class */ (function () {
33011
33049
  function DateTimeTestPage(platform, formBuilder, cd) {
33012
33050
  this.platform = platform;
@@ -33044,7 +33082,7 @@
33044
33082
  var now, data;
33045
33083
  var _this = this;
33046
33084
  return __generator(this, function (_a) {
33047
- now = moment$2();
33085
+ now = moment$8();
33048
33086
  data = {
33049
33087
  empty: null,
33050
33088
  emptyRequired: null,
@@ -33114,12 +33152,12 @@
33114
33152
  { type: i0.ChangeDetectorRef }
33115
33153
  ]; };
33116
33154
 
33117
- var EntityTestClass = /** @class */ (function () {
33155
+ var EntityTestClass$1 = /** @class */ (function () {
33118
33156
  function EntityTestClass() {
33119
33157
  }
33120
33158
  return EntityTestClass;
33121
33159
  }());
33122
- var FAKE_ENTITIES = [
33160
+ var FAKE_ENTITIES$1 = [
33123
33161
  { id: 1, label: 'AAA', name: 'Item A' },
33124
33162
  { id: 2, label: 'BBB', name: 'Item B' },
33125
33163
  { id: 3, label: 'CCC', name: 'Item C' },
@@ -33128,14 +33166,14 @@
33128
33166
  { id: 6, label: 'FFF', name: 'Item F' },
33129
33167
  { id: 7, label: 'GGG', name: 'Item G' }
33130
33168
  ];
33131
- function deepCopy(values, size) {
33169
+ function deepCopy$1(values, size) {
33132
33170
  if (isNil(size)) {
33133
- return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
33171
+ return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
33134
33172
  }
33135
33173
  var result = [];
33136
33174
  var i = 1;
33137
33175
  while (result.length < size) {
33138
- result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
33176
+ result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
33139
33177
  var name = entity.name + ' #' + i;
33140
33178
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
33141
33179
  }));
@@ -33145,7 +33183,7 @@
33145
33183
  var ChipsTestPage = /** @class */ (function () {
33146
33184
  function ChipsTestPage(formBuilder) {
33147
33185
  this.formBuilder = formBuilder;
33148
- this._items = deepCopy(FAKE_ENTITIES, 100);
33186
+ this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
33149
33187
  this._$items = new rxjs.BehaviorSubject(undefined);
33150
33188
  this.autocompleteFields = new MatAutocompleteConfigHolder();
33151
33189
  this.appearance = 'legacy';
@@ -33189,7 +33227,7 @@
33189
33227
  var items, data;
33190
33228
  var _this = this;
33191
33229
  return __generator(this, function (_a) {
33192
- items = deepCopy(FAKE_ENTITIES);
33230
+ items = deepCopy$1(FAKE_ENTITIES$1);
33193
33231
  data = {
33194
33232
  entity: items.slice(0, 1),
33195
33233
  entityInitial: items.slice(1, 2),
@@ -33326,7 +33364,7 @@
33326
33364
  { type: i1.FormBuilder }
33327
33365
  ]; };
33328
33366
 
33329
- var moment$1 = momentImported__namespace;
33367
+ var moment$9 = momentImported__namespace;
33330
33368
  var DateTestPage = /** @class */ (function () {
33331
33369
  function DateTestPage(formBuilder, cd) {
33332
33370
  this.formBuilder = formBuilder;
@@ -33363,7 +33401,7 @@
33363
33401
  var now, nowAtMahe, data;
33364
33402
  var _this = this;
33365
33403
  return __generator(this, function (_a) {
33366
- now = moment$1();
33404
+ now = moment$9();
33367
33405
  nowAtMahe = now.clone().tz(this.timezone).startOf('day');
33368
33406
  data = {
33369
33407
  empty: null,
@@ -33445,7 +33483,7 @@
33445
33483
  { label: 'Shared directives', divider: true },
33446
33484
  { label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
33447
33485
  ];
33448
- var routes$5 = [
33486
+ var routes$1 = [
33449
33487
  {
33450
33488
  path: '',
33451
33489
  pathMatch: 'full',
@@ -33505,7 +33543,7 @@
33505
33543
  i1.ReactiveFormsModule,
33506
33544
  SharedMaterialModule,
33507
33545
  i1$2.TranslateModule.forChild(),
33508
- i3.RouterModule.forChild(routes$5)
33546
+ i3.RouterModule.forChild(routes$1)
33509
33547
  ],
33510
33548
  declarations: [
33511
33549
  DateTimeTestPage,
@@ -33567,7 +33605,7 @@
33567
33605
  { type: i1$2.TranslateService }
33568
33606
  ]; };
33569
33607
 
33570
- var routes$4 = [
33608
+ var routes$2 = [
33571
33609
  {
33572
33610
  path: 'toast',
33573
33611
  pathMatch: 'full',
@@ -33585,7 +33623,7 @@
33585
33623
  i1$4.CommonModule,
33586
33624
  i1$5.IonicModule,
33587
33625
  i1$2.TranslateModule.forChild(),
33588
- i3.RouterModule.forChild(routes$4)
33626
+ i3.RouterModule.forChild(routes$2)
33589
33627
  ],
33590
33628
  declarations: [
33591
33629
  ToastTestingPage
@@ -33888,7 +33926,7 @@
33888
33926
  console.debug('[test-table] Destroying table...');
33889
33927
  _super_1.prototype.ngOnDestroy.call(this);
33890
33928
  this.stopTimer();
33891
- this.dataService.ngOnDestroy();
33929
+ this.dataService.stop();
33892
33930
  };
33893
33931
  TableTestPage.prototype.restoreFilter = function () {
33894
33932
  var json = this.settings.getPageSettings(this.settingsId, 'filter');
@@ -33914,6 +33952,7 @@
33914
33952
  this.data = this.generateData(0, TableTestPage.maxRowCount);
33915
33953
  }
33916
33954
  this.dataService.value = this.data;
33955
+ this.onRefresh.emit();
33917
33956
  };
33918
33957
  TableTestPage.prototype.fetchMore = function (event) {
33919
33958
  return __awaiter(this, void 0, void 0, function () {
@@ -34116,7 +34155,7 @@
34116
34155
  { type: i1$5.PopoverController }
34117
34156
  ]; };
34118
34157
 
34119
- var routes$2 = [
34158
+ var routes$4 = [
34120
34159
  {
34121
34160
  path: 'text-popover',
34122
34161
  pathMatch: 'full',
@@ -34134,7 +34173,7 @@
34134
34173
  i1$4.CommonModule,
34135
34174
  i1$5.IonicModule,
34136
34175
  i1$2.TranslateModule.forChild(),
34137
- i3.RouterModule.forChild(routes$2)
34176
+ i3.RouterModule.forChild(routes$4)
34138
34177
  ],
34139
34178
  declarations: [
34140
34179
  TextPopoverTestingPage
@@ -34151,7 +34190,7 @@
34151
34190
  { label: 'Table', page: '/testing/core/table' },
34152
34191
  { label: 'Text popover', page: '/testing/core/text-popover' }
34153
34192
  ];
34154
- var routes$1 = [
34193
+ var routes$5 = [
34155
34194
  {
34156
34195
  path: '',
34157
34196
  pathMatch: 'full',
@@ -34178,7 +34217,7 @@
34178
34217
  imports: [
34179
34218
  i1$4.CommonModule,
34180
34219
  i1$2.TranslateModule.forChild(),
34181
- i3.RouterModule.forChild(routes$1),
34220
+ i3.RouterModule.forChild(routes$5),
34182
34221
  // Sub modules
34183
34222
  TableTestingModule,
34184
34223
  TextPopoverTestingModule
@@ -34533,7 +34572,7 @@
34533
34572
  { type: Environment, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [ENVIRONMENT,] }] }
34534
34573
  ]; };
34535
34574
 
34536
- var moment = momentImported__namespace;
34575
+ var moment$a = momentImported__namespace;
34537
34576
  var UserEventTestingPage = /** @class */ (function () {
34538
34577
  function UserEventTestingPage(userEventService, router, alertController, translateService) {
34539
34578
  var _this = this;
@@ -34599,7 +34638,7 @@
34599
34638
  type: 'message',
34600
34639
  level: 'INFO',
34601
34640
  message: 'message test message test message test message test message test message test message test message test',
34602
- creationDate: moment(),
34641
+ creationDate: moment$a(),
34603
34642
  }));
34604
34643
  };
34605
34644
  UserEventTestingPage.prototype.addError = function () {
@@ -34609,7 +34648,7 @@
34609
34648
  type: 'upload',
34610
34649
  level: 'ERROR',
34611
34650
  message: 'message error',
34612
- creationDate: moment(),
34651
+ creationDate: moment$a(),
34613
34652
  }));
34614
34653
  };
34615
34654
  UserEventTestingPage.prototype.addWarning = function () {
@@ -34619,7 +34658,7 @@
34619
34658
  type: 'download',
34620
34659
  level: 'WARNING',
34621
34660
  message: 'message warning',
34622
- creationDate: moment(),
34661
+ creationDate: moment$a(),
34623
34662
  }));
34624
34663
  };
34625
34664
  UserEventTestingPage.prototype.addDebug = function () {
@@ -34629,7 +34668,7 @@
34629
34668
  type: 'debug',
34630
34669
  level: 'DEBUG',
34631
34670
  message: 'message DEBUG',
34632
- creationDate: moment(),
34671
+ creationDate: moment$a(),
34633
34672
  }));
34634
34673
  };
34635
34674
  UserEventTestingPage.prototype.addNotificationWithLink = function () {
@@ -34640,7 +34679,7 @@
34640
34679
  type: 'message',
34641
34680
  level: 'INFO',
34642
34681
  message: 'message with link',
34643
- creationDate: moment(),
34682
+ creationDate: moment$a(),
34644
34683
  actions: [{
34645
34684
  name: 'click here',
34646
34685
  iconRef: {
@@ -34658,7 +34697,7 @@
34658
34697
  type: 'message',
34659
34698
  level: 'INFO',
34660
34699
  message: 'message with action',
34661
- creationDate: moment(),
34700
+ creationDate: moment$a(),
34662
34701
  actions: [
34663
34702
  {
34664
34703
  name: 'click here',
@@ -34732,7 +34771,7 @@
34732
34771
  type: 'message',
34733
34772
  level: 'INFO',
34734
34773
  message: 'message with action',
34735
- creationDate: moment(),
34774
+ creationDate: moment$a(),
34736
34775
  actions: [
34737
34776
  {
34738
34777
  default: true,
@@ -34790,7 +34829,7 @@
34790
34829
  { label: 'User event', page: '/testing/social/user-event' },
34791
34830
  { label: 'Job progression', page: '/testing/social/job-progression' }
34792
34831
  ];
34793
- var routes = [
34832
+ var routes$6 = [
34794
34833
  {
34795
34834
  path: 'job-progression',
34796
34835
  pathMatch: 'full',
@@ -34812,7 +34851,7 @@
34812
34851
  imports: [
34813
34852
  i1$4.CommonModule,
34814
34853
  i1$2.TranslateModule.forChild(),
34815
- i3.RouterModule.forChild(routes),
34854
+ i3.RouterModule.forChild(routes$6),
34816
34855
  JobTestingModule,
34817
34856
  UserEventTestingModule
34818
34857
  ],
@@ -34926,7 +34965,6 @@
34926
34965
  exports.ENTITIES_STORAGE_KEY_PREFIX = ENTITIES_STORAGE_KEY_PREFIX;
34927
34966
  exports.ENVIRONMENT = ENVIRONMENT;
34928
34967
  exports.EmptyArrayPipe = EmptyArrayPipe;
34929
- exports.EntitiesService = EntitiesService;
34930
34968
  exports.EntitiesStorage = EntitiesStorage;
34931
34969
  exports.EntitiesTableDataSource = EntitiesTableDataSource;
34932
34970
  exports.Entity = Entity;
@@ -34955,7 +34993,7 @@
34955
34993
  exports.FormGetGroupPipe = FormGetGroupPipe;
34956
34994
  exports.FormGetPipe = FormGetPipe;
34957
34995
  exports.FormGetValuePipe = FormGetValuePipe;
34958
- exports.Fragments = Fragments;
34996
+ exports.Fragments = Fragments$1;
34959
34997
  exports.GraphqlService = GraphqlService;
34960
34998
  exports.HAMMER_PRESS_TIME = HAMMER_PRESS_TIME;
34961
34999
  exports.HAMMER_TAP_TIME = HAMMER_TAP_TIME;
@@ -35273,25 +35311,25 @@
35273
35311
  exports.waitForTrue = waitForTrue;
35274
35312
  exports.waitIdle = waitIdle;
35275
35313
  exports.waitWhilePending = waitWhilePending;
35276
- exports["ɵ0"] = ɵ0$c;
35277
- exports["ɵa"] = CustomReuseStrategy;
35278
- exports["ɵb"] = MatNumpadDomService;
35279
- exports["ɵc"] = isFocusableElement;
35280
- exports["ɵd"] = RegisterForm;
35281
- exports["ɵe"] = AccountValidatorService;
35282
- exports["ɵf"] = RegisterModal;
35283
- exports["ɵg"] = UserSettingsValidatorService;
35284
- exports["ɵh"] = LocalSettingsValidatorService;
35285
- exports["ɵi"] = AppUpdateOfflineModeCard;
35286
- exports["ɵj"] = UserEventNotificationList;
35287
- exports["ɵk"] = JobProgressionList;
35288
- exports["ɵl"] = DateTestPage;
35289
- exports["ɵm"] = NumpadTestPage;
35290
- exports["ɵn"] = MatBadgeIconTestPage;
35291
- exports["ɵo"] = ToastTestingModule;
35292
- exports["ɵp"] = ToastTestingPage;
35314
+ exports0 = ɵ0;
35315
+ exports.ɵa = CustomReuseStrategy;
35316
+ exports.ɵb = MatNumpadDomService;
35317
+ exports.ɵc = isFocusableElement;
35318
+ exports.ɵd = RegisterForm;
35319
+ exports.ɵe = AccountValidatorService;
35320
+ exports.ɵf = RegisterModal;
35321
+ exports.ɵg = UserSettingsValidatorService;
35322
+ exports.ɵh = LocalSettingsValidatorService;
35323
+ exports.ɵi = AppUpdateOfflineModeCard;
35324
+ exports.ɵj = UserEventNotificationList;
35325
+ exports.ɵk = JobProgressionList;
35326
+ exports.ɵl = DateTestPage;
35327
+ exports.ɵm = NumpadTestPage;
35328
+ exports.ɵn = MatBadgeIconTestPage;
35329
+ exports.ɵo = ToastTestingModule;
35330
+ exports.ɵp = ToastTestingPage;
35293
35331
 
35294
35332
  Object.defineProperty(exports, '__esModule', { value: true });
35295
35333
 
35296
- }));
35334
+ })));
35297
35335
  //# sourceMappingURL=sumaris-net.ngx-components.umd.js.map