@sumaris-net/ngx-components 1.23.9 → 1.23.12

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 (28) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +453 -430
  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 +6 -4
  13. package/esm2015/src/app/core/table/testing/table.testing.js +2 -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 +78 -32
  18. package/esm2015/src/app/shared/services/startable-service.class.js +21 -13
  19. package/esm2015/src/app/shared/upload-file/upload-file.component.js +1 -1
  20. package/fesm2015/sumaris-net.ngx-components.js +384 -348
  21. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  22. package/package.json +3 -3
  23. package/src/app/core/form/editor.class.d.ts +2 -1
  24. package/src/app/core/services/network.service.d.ts +1 -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 -5
  27. package/src/app/shared/services/startable-service.class.d.ts +4 -2
  28. 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
  ];
@@ -19413,7 +19397,7 @@
19413
19397
  { type: i0.Component, args: [{
19414
19398
  selector: 'app-upload-file',
19415
19399
  template: "<div *ngIf=\"!uniqueFile || files.length === 0\"\n class=\"container\"\n appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n multiple\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\">file_upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <div *ngFor=\"let file of files; index as i\"\n class=\"single-file\"\n [class.deleting]=\"file.deleting\">\n <mat-icon>description</mat-icon>\n <div class=\"info\">\n <h4 class=\"name\">\n {{ file.name }}\n </h4>\n <p class=\"size\">\n {{ file.size | fileSize }}\n </p>\n <ion-progress-bar *ngIf=\"!file.error\"\n [value]=\"file.progress||0\"\n [type]=\"(file.deleting || file.progress === -1) ? 'indeterminate' : 'determinate'\"></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!(file.progress) || file.error\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n</div>\n",
19416
- styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:1px dashed #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{-webkit-animation:shake 1s;animation:shake 1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:1px dashed #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:grey!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}@-webkit-keyframes shake{0%{transform:translate(1px,1px) rotate(0deg)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0deg)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0deg)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0deg)}to{transform:translate(1px,-2px) rotate(-1deg)}}@keyframes shake{0%{transform:translate(1px,1px) rotate(0deg)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0deg)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0deg)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0deg)}to{transform:translate(1px,-2px) rotate(-1deg)}}"]
19400
+ styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:1px dashed #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{animation:shake 1s;animation-iteration-count:infinite}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:1px dashed #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:grey!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}@keyframes shake{0%{transform:translate(1px,1px) rotate(0deg)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0deg)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0deg)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0deg)}to{transform:translate(1px,-2px) rotate(-1deg)}}"]
19417
19401
  },] }
19418
19402
  ];
19419
19403
  UploadFileComponent.ctorParameters = function () { return [
@@ -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,53 @@
20851
20824
  enumerable: false,
20852
20825
  configurable: true
20853
20826
  });
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
+ });
20862
+ };
20854
20863
  InMemoryEntitiesService.prototype.ngOnDestroy = function () {
20855
- if (this.debug)
20856
- console.debug('[memory-data-service] Destroying...');
20857
- this.dataSubject.complete();
20858
- this.dataSubject.unsubscribe();
20864
+ this.stop();
20859
20865
  };
20860
20866
  InMemoryEntitiesService.prototype.setValue = function (data) {
20861
20867
  if (this.dataSubject.value !== data) {
20868
+ if (!this.started)
20869
+ this.start();
20862
20870
  this._hiddenData = [];
20863
20871
  this.dataSubject.next(data);
20864
20872
  }
20865
- this.dirty = false;
20873
+ this.markAsPristine();
20866
20874
  };
20867
20875
  InMemoryEntitiesService.prototype.loadAll = function (offset, size, sortBy, sortDirection, filter, opts) {
20868
20876
  return __awaiter(this, void 0, void 0, function () {
@@ -20877,26 +20885,25 @@
20877
20885
  if (isNil(originalData)) {
20878
20886
  console.warn('[memory-data-service] Cannot load all: no value set. Will return empty result');
20879
20887
  }
20880
- if (!this._saving) return [3 /*break*/, 2];
20881
- return [4 /*yield*/, waitFor(function () { return !_this._saving; })];
20888
+ // Wait while idle
20889
+ return [4 /*yield*/, this.waitWhileSaving()];
20882
20890
  case 1:
20891
+ // Wait while idle
20883
20892
  _b.sent();
20893
+ excludedDataByFilter = [];
20884
20894
  _b.label = 2;
20885
20895
  case 2:
20886
- excludedDataByFilter = [];
20887
- _b.label = 3;
20888
- case 3:
20889
- _b.trys.push([3, , 6, 7]);
20896
+ _b.trys.push([2, , 5, 6]);
20890
20897
  if (isEmptyArray(originalData)) {
20891
20898
  return [2 /*return*/, { data: [], total: 0 }];
20892
20899
  }
20893
20900
  data = this._sortFn(originalData, sortBy, sortDirection);
20894
- if (!this._onLoad) return [3 /*break*/, 5];
20901
+ if (!this._onLoad) return [3 /*break*/, 4];
20895
20902
  return [4 /*yield*/, this._onLoad(data)];
20896
- case 4:
20903
+ case 3:
20897
20904
  data = _b.sent();
20898
- _b.label = 5;
20899
- case 5:
20905
+ _b.label = 4;
20906
+ case 4:
20900
20907
  // Apply filter (will update hiddenData)
20901
20908
  data = this.filter(data, filter, excludedDataByFilter);
20902
20909
  total = data.length;
@@ -20953,13 +20960,13 @@
20953
20960
  }); };
20954
20961
  }
20955
20962
  return [2 /*return*/, res];
20956
- case 6:
20963
+ case 5:
20957
20964
  // Remember hidden data
20958
20965
  if (offset === 0) {
20959
20966
  this._hiddenData = !excludedDataByPagination ? excludedDataByFilter : excludedDataByFilter.concat.apply(excludedDataByFilter, __spread(excludedDataByPagination));
20960
20967
  }
20961
20968
  return [7 /*endfinally*/];
20962
- case 7: return [2 /*return*/];
20969
+ case 6: return [2 /*return*/];
20963
20970
  }
20964
20971
  });
20965
20972
  });
@@ -20969,9 +20976,9 @@
20969
20976
  offset = offset >= 0 ? offset : 0;
20970
20977
  size = size >= 0 ? size : -1;
20971
20978
  return this.dataSubject
20972
- .pipe(
20979
+ .pipe(operators.takeUntil(this.stopSubject),
20973
20980
  // 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); }));
20981
+ 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
20982
  };
20976
20983
  InMemoryEntitiesService.prototype.saveAll = function (data, options) {
20977
20984
  return __awaiter(this, void 0, void 0, function () {
@@ -21003,7 +21010,7 @@
21003
21010
  _c.label = 5;
21004
21011
  case 5:
21005
21012
  this.dataSubject.next(data);
21006
- this.dirty = true;
21013
+ this.markAsDirty();
21007
21014
  return [2 /*return*/, data];
21008
21015
  case 6:
21009
21016
  this.markAsSaved();
@@ -21021,15 +21028,21 @@
21021
21028
  data = this.dataSubject.value;
21022
21029
  if (!data)
21023
21030
  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);
21031
+ this.markAsSaving();
21032
+ try {
21033
+ updatedData = data.filter(function (entity) {
21034
+ var removed = dataToRemove.findIndex(function (entityToRemove) { return _this.equals(entityToRemove, entity); }) !== -1;
21035
+ return !removed;
21036
+ });
21037
+ deleteCount = data.length - updatedData.length;
21038
+ if (deleteCount > 0) {
21039
+ data = updatedData;
21040
+ this.dataSubject.next(data);
21041
+ this.markAsDirty();
21042
+ }
21043
+ }
21044
+ finally {
21045
+ this.markAsSaved();
21033
21046
  }
21034
21047
  return [2 /*return*/];
21035
21048
  });
@@ -21096,14 +21109,33 @@
21096
21109
  return { data: data, total: total };
21097
21110
  }));
21098
21111
  };
21112
+ InMemoryEntitiesService.prototype.waitWhileSaving = function (opts) {
21113
+ if (!this.saving)
21114
+ return;
21115
+ return firstFalsePromise(this.savingSubject, Object.assign({ stop: (opts === null || opts === void 0 ? void 0 : opts.stop) || rxjs.merge(this.stopSubject, this.dataSubject) }, opts));
21116
+ };
21099
21117
  InMemoryEntitiesService.prototype.markAsSaving = function () {
21100
- this._saving = true;
21118
+ if (!this.savingSubject.value) {
21119
+ this.savingSubject.next(true);
21120
+ }
21101
21121
  };
21102
21122
  InMemoryEntitiesService.prototype.markAsSaved = function () {
21103
- this._saving = false;
21123
+ if (this.savingSubject.value) {
21124
+ this.savingSubject.next(false);
21125
+ }
21126
+ };
21127
+ InMemoryEntitiesService.prototype.markAsDirty = function () {
21128
+ if (!this.dirtySubject.value) {
21129
+ this.dirtySubject.next(true);
21130
+ }
21131
+ };
21132
+ InMemoryEntitiesService.prototype.markAsPristine = function () {
21133
+ if (this.dirtySubject.value) {
21134
+ this.dirtySubject.next(false);
21135
+ }
21104
21136
  };
21105
21137
  return InMemoryEntitiesService;
21106
- }(EntitiesService));
21138
+ }(StartableService));
21107
21139
  InMemoryEntitiesService.decorators = [
21108
21140
  { type: i0.Directive }
21109
21141
  ];
@@ -21479,7 +21511,7 @@
21479
21511
  return 1;
21480
21512
  }
21481
21513
  }
21482
- var ɵ0$1 = function (defaultStateSize) { return [
21514
+ var ɵ0$b = function (defaultStateSize) { return [
21483
21515
  Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
21484
21516
  Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
21485
21517
  Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
@@ -21487,7 +21519,7 @@
21487
21519
  var SCALE_OPTIONS_DEFAULT = {
21488
21520
  startColor: rgbArrayMap.red,
21489
21521
  startStates: [0, 2, 3],
21490
- startStepsFn: ɵ0$1
21522
+ startStepsFn: ɵ0$b
21491
21523
  };
21492
21524
  /**
21493
21525
  * Internal function, that create a colors scale, using iteration
@@ -22444,7 +22476,7 @@
22444
22476
  };
22445
22477
  return UserSettingsValidatorService;
22446
22478
  }(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" });
22479
+ UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
22448
22480
  UserSettingsValidatorService.decorators = [
22449
22481
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
22450
22482
  ];
@@ -22492,7 +22524,7 @@
22492
22524
  };
22493
22525
  return AccountValidatorService;
22494
22526
  }(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" });
22527
+ AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
22496
22528
  AccountValidatorService.decorators = [
22497
22529
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
22498
22530
  ];
@@ -22839,7 +22871,7 @@
22839
22871
  };
22840
22872
  return MenuService;
22841
22873
  }());
22842
- MenuService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
22874
+ MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
22843
22875
  MenuService.decorators = [
22844
22876
  { type: i0.Injectable, args: [{
22845
22877
  providedIn: 'root'
@@ -23205,7 +23237,7 @@
23205
23237
  };
23206
23238
  return LocalSettingsValidatorService;
23207
23239
  }(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" });
23240
+ LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
23209
23241
  LocalSettingsValidatorService.decorators = [
23210
23242
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
23211
23243
  ];
@@ -23985,7 +24017,7 @@
23985
24017
  };
23986
24018
  return IsOnFieldModePipe;
23987
24019
  }());
23988
- IsOnFieldModePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
24020
+ IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
23989
24021
  IsOnFieldModePipe.decorators = [
23990
24022
  { type: i0.Pipe, args: [{
23991
24023
  name: 'isOnField'
@@ -24000,7 +24032,7 @@
24000
24032
  };
24001
24033
  return IsNotOnFieldModePipe;
24002
24034
  }());
24003
- IsNotOnFieldModePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
24035
+ IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
24004
24036
  IsNotOnFieldModePipe.decorators = [
24005
24037
  { type: i0.Pipe, args: [{
24006
24038
  name: 'isNotOnField'
@@ -24018,7 +24050,7 @@
24018
24050
  };
24019
24051
  return PersonToStringPipe;
24020
24052
  }());
24021
- PersonToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
24053
+ PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
24022
24054
  PersonToStringPipe.decorators = [
24023
24055
  { type: i0.Pipe, args: [{
24024
24056
  name: 'personToString'
@@ -24446,7 +24478,7 @@
24446
24478
  };
24447
24479
  return IsLoginAccountPipe;
24448
24480
  }());
24449
- IsLoginAccountPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
24481
+ IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
24450
24482
  IsLoginAccountPipe.decorators = [
24451
24483
  { type: i0.Pipe, args: [{
24452
24484
  name: 'isLogin'
@@ -24461,7 +24493,7 @@
24461
24493
  };
24462
24494
  return AccountToStringPipe;
24463
24495
  }());
24464
- AccountToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
24496
+ AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
24465
24497
  AccountToStringPipe.decorators = [
24466
24498
  { type: i0.Pipe, args: [{
24467
24499
  name: 'accountToString'
@@ -24479,7 +24511,7 @@
24479
24511
  };
24480
24512
  return DepartmentToStringPipe;
24481
24513
  }());
24482
- DepartmentToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
24514
+ DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
24483
24515
  DepartmentToStringPipe.decorators = [
24484
24516
  { type: i0.Pipe, args: [{
24485
24517
  name: 'departmentToString'
@@ -25245,7 +25277,7 @@
25245
25277
  };
25246
25278
  return AuthGuardService;
25247
25279
  }());
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" });
25280
+ 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
25281
  AuthGuardService.decorators = [
25250
25282
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
25251
25283
  ];
@@ -26120,7 +26152,7 @@
26120
26152
  this.handleServiceError(err_1);
26121
26153
  return [3 /*break*/, 5];
26122
26154
  case 4:
26123
- this.loadingSubject.next(false);
26155
+ this.markAsLoaded();
26124
26156
  return [7 /*endfinally*/];
26125
26157
  case 5: return [2 /*return*/];
26126
26158
  }
@@ -26850,6 +26882,7 @@
26850
26882
  // Stop event
26851
26883
  event === null || event === void 0 ? void 0 : event.stopPropagation();
26852
26884
  // Confirmation edition or creation
26885
+ // TODO: add await ?
26853
26886
  var confirmed = row.confirmEditCreate();
26854
26887
  if (confirmed) {
26855
26888
  // If edit finished, forget edited row
@@ -26868,6 +26901,7 @@
26868
26901
  }
26869
26902
  if (row.validator) {
26870
26903
  // If pending: Wait end of validation, then loop
26904
+ // TODO: remove when using async isValid() function
26871
26905
  if (row.validator.pending) {
26872
26906
  AppFormUtils.waitWhilePending(row.validator).then(function () { return _this.confirmEditCreate(event, row); });
26873
26907
  return false;
@@ -27036,20 +27070,16 @@
27036
27070
  var rows;
27037
27071
  var _this = this;
27038
27072
  return __generator(this, function (_e) {
27039
- switch (_e.label) {
27040
- case 0:
27041
- if (this.loading)
27042
- return [2 /*return*/];
27043
- if (!this.isAllSelected()) return [3 /*break*/, 1];
27044
- this.selection.clear();
27045
- return [3 /*break*/, 3];
27046
- case 1: return [4 /*yield*/, this._dataSource.getRows()];
27047
- case 2:
27048
- rows = _e.sent();
27049
- rows.forEach(function (row) { return _this.selection.select(row); });
27050
- _e.label = 3;
27051
- case 3: return [2 /*return*/];
27073
+ if (this.loading)
27074
+ return [2 /*return*/];
27075
+ if (this.isAllSelected()) {
27076
+ this.selection.clear();
27052
27077
  }
27078
+ else {
27079
+ rows = this._dataSource.getRows();
27080
+ rows.forEach(function (row) { return _this.selection.select(row); });
27081
+ }
27082
+ return [2 /*return*/];
27053
27083
  });
27054
27084
  });
27055
27085
  };
@@ -27213,9 +27243,7 @@
27213
27243
  return [4 /*yield*/, this.waitIdle()];
27214
27244
  case 1:
27215
27245
  _e.sent();
27216
- return [4 /*yield*/, this.dataSource.getRows()];
27217
- case 2:
27218
- row = ((_e.sent()) || [])
27246
+ row = this.dataSource.getRows()
27219
27247
  .find(function (row) { return _this.equals(row.currentData, data); });
27220
27248
  if (!row)
27221
27249
  return [2 /*return*/, false];
@@ -27494,40 +27522,33 @@
27494
27522
  };
27495
27523
  AppTable.prototype.canCancelRows = function (rows, opts) {
27496
27524
  return __awaiter(this, void 0, void 0, function () {
27497
- var _e, isCancel, err_5;
27498
- return __generator(this, function (_f) {
27499
- switch (_f.label) {
27525
+ var isCancel, err_5;
27526
+ return __generator(this, function (_e) {
27527
+ switch (_e.label) {
27500
27528
  case 0:
27501
- _e = rows;
27502
- if (_e) return [3 /*break*/, 2];
27503
- return [4 /*yield*/, this.dataSource.getRows()];
27504
- case 1:
27505
- _e = (_f.sent()).filter(function (row) { var _a; return (_a = row.validator) === null || _a === void 0 ? void 0 : _a.dirty; });
27506
- _f.label = 2;
27507
- case 2:
27508
27529
  // Get dirty rows
27509
- rows = _e;
27530
+ rows = rows || this.dataSource.getRows().filter(function (row) { var _a; return (_a = row.validator) === null || _a === void 0 ? void 0 : _a.dirty; });
27510
27531
  if (isEmptyArray(rows))
27511
27532
  return [2 /*return*/, true]; // No dirty: OK
27512
- if (!(this.onBeforeCancelRows.observers.length > 0)) return [3 /*break*/, 6];
27513
- _f.label = 3;
27514
- case 3:
27515
- _f.trys.push([3, 5, , 6]);
27533
+ if (!(this.onBeforeCancelRows.observers.length > 0)) return [3 /*break*/, 4];
27534
+ _e.label = 1;
27535
+ case 1:
27536
+ _e.trys.push([1, 3, , 4]);
27516
27537
  return [4 /*yield*/, emitPromiseEvent(this.onBeforeCancelRows, 'canCancel', {
27517
27538
  detail: { rows: rows }
27518
27539
  })];
27519
- case 4:
27520
- isCancel = _f.sent();
27540
+ case 2:
27541
+ isCancel = _e.sent();
27521
27542
  if (!isCancel)
27522
27543
  return [2 /*return*/, false];
27523
- return [3 /*break*/, 6];
27524
- case 5:
27525
- err_5 = _f.sent();
27544
+ return [3 /*break*/, 4];
27545
+ case 3:
27546
+ err_5 = _e.sent();
27526
27547
  if (err_5 === 'CANCELLED')
27527
27548
  return [2 /*return*/, false]; // User cancel
27528
27549
  console.error('Error while checking if can cancel rows', err_5);
27529
27550
  throw err_5;
27530
- case 6:
27551
+ case 4:
27531
27552
  // Ask user confirmation
27532
27553
  if (this.confirmBeforeCancel && (!opts || opts.interactive !== false)) {
27533
27554
  return [2 /*return*/, this.askCancelConfirmation(null, rows)];
@@ -28426,13 +28447,14 @@
28426
28447
  }
28427
28448
  };
28428
28449
  AppEditor.prototype.markAsLoaded = function (opts) {
28429
- var _a;
28450
+ var _a, _b;
28430
28451
  if (this.loadingSubject.value) {
28431
28452
  this.loadingSubject.next(false);
28432
28453
  if (!opts || opts.onlySelf !== true) {
28433
- // Emit to children forms
28434
- // Tables should be changed by parent
28435
- (_a = this.forms) === null || _a === void 0 ? void 0 : _a.forEach(function (c) { return c.markAsLoaded(opts); });
28454
+ // Emit to children forms and editors
28455
+ // note: tables should be changed by parent
28456
+ (_a = this.forms) === null || _a === void 0 ? void 0 : _a.forEach(function (f) { return f.markAsLoaded(opts); });
28457
+ (_b = this.editors) === null || _b === void 0 ? void 0 : _b.forEach(function (e) { return e.markAsLoaded(opts); });
28436
28458
  }
28437
28459
  if (!opts || opts.emitEvent !== false) {
28438
28460
  this.markForCheck();
@@ -28456,20 +28478,20 @@
28456
28478
  };
28457
28479
  AppEditor.prototype.cancel = function (event) {
28458
28480
  return __awaiter(this, void 0, void 0, function () {
28459
- return __generator(this, function (_b) {
28460
- switch (_b.label) {
28481
+ return __generator(this, function (_c) {
28482
+ switch (_c.label) {
28461
28483
  case 0:
28462
28484
  if (!this.isNewData) return [3 /*break*/, 2];
28463
28485
  return [4 /*yield*/, this.unload()];
28464
28486
  case 1:
28465
- _b.sent(); // async reset
28487
+ _c.sent(); // async reset
28466
28488
  return [3 /*break*/, 4];
28467
28489
  case 2:
28468
28490
  if (!this.dirty) return [3 /*break*/, 4];
28469
28491
  return [4 /*yield*/, this.reload()];
28470
28492
  case 3:
28471
- _b.sent(); // async reload
28472
- _b.label = 4;
28493
+ _c.sent(); // async reload
28494
+ _c.label = 4;
28473
28495
  case 4: return [2 /*return*/];
28474
28496
  }
28475
28497
  });
@@ -28483,7 +28505,7 @@
28483
28505
  AppEditor.prototype.unload = function (opts) {
28484
28506
  var _a;
28485
28507
  return __awaiter(this, void 0, void 0, function () {
28486
- return __generator(this, function (_b) {
28508
+ return __generator(this, function (_c) {
28487
28509
  console.debug('[tab-page] Unloading data...');
28488
28510
  this.markAsLoading();
28489
28511
  (_a = this._children) === null || _a === void 0 ? void 0 : _a.forEach(function (f) {
@@ -28501,8 +28523,8 @@
28501
28523
  AppEditor.prototype.reloadWithConfirmation = function (confirm) {
28502
28524
  return __awaiter(this, void 0, void 0, function () {
28503
28525
  var needConfirm, translations, alert;
28504
- return __generator(this, function (_b) {
28505
- switch (_b.label) {
28526
+ return __generator(this, function (_c) {
28527
+ switch (_c.label) {
28506
28528
  case 0:
28507
28529
  needConfirm = this.dirty;
28508
28530
  if (!(!confirm && needConfirm)) return [3 /*break*/, 4];
@@ -28527,20 +28549,20 @@
28527
28549
  ]
28528
28550
  })];
28529
28551
  case 1:
28530
- alert = _b.sent();
28552
+ alert = _c.sent();
28531
28553
  return [4 /*yield*/, alert.present()];
28532
28554
  case 2:
28533
- _b.sent();
28555
+ _c.sent();
28534
28556
  return [4 /*yield*/, alert.onDidDismiss()];
28535
28557
  case 3:
28536
- _b.sent();
28537
- _b.label = 4;
28558
+ _c.sent();
28559
+ _c.label = 4;
28538
28560
  case 4:
28539
28561
  if (!(confirm || !needConfirm)) return [3 /*break*/, 6];
28540
28562
  this.scrollToTop();
28541
28563
  this.disable();
28542
28564
  return [4 /*yield*/, this.reload()];
28543
- case 5: return [2 /*return*/, _b.sent()];
28565
+ case 5: return [2 /*return*/, _c.sent()];
28544
28566
  case 6: return [2 /*return*/];
28545
28567
  }
28546
28568
  });
@@ -28549,7 +28571,7 @@
28549
28571
  AppEditor.prototype.goBack = function (event) {
28550
28572
  var _a;
28551
28573
  return __awaiter(this, void 0, void 0, function () {
28552
- return __generator(this, function (_b) {
28574
+ return __generator(this, function (_c) {
28553
28575
  // Go back
28554
28576
  if ((_a = this.toolbar) === null || _a === void 0 ? void 0 : _a.canGoBack) {
28555
28577
  return [2 /*return*/, this.toolbar.goBack()];
@@ -28573,7 +28595,7 @@
28573
28595
  AppEditor.prototype.scrollToTop = function (duration) {
28574
28596
  return __awaiter(this, void 0, void 0, function () {
28575
28597
  var scrollToTop_1;
28576
- return __generator(this, function (_b) {
28598
+ return __generator(this, function (_c) {
28577
28599
  duration = toNumber(duration, 500);
28578
28600
  if (!this.content) {
28579
28601
  console.warn("[tab-editor] Cannot scroll to top. (no 'ion-content' tag found " + this.constructor.name);
@@ -28600,14 +28622,15 @@
28600
28622
  };
28601
28623
  AppEditor.prototype.saveIfDirtyAndConfirm = function (event, opts) {
28602
28624
  return __awaiter(this, void 0, void 0, function () {
28603
- var confirm, cancel, translations, alert;
28604
- return __generator(this, function (_b) {
28605
- switch (_b.label) {
28625
+ var confirmed, cancel_1, translations, alert;
28626
+ return __generator(this, function (_c) {
28627
+ switch (_c.label) {
28606
28628
  case 0:
28607
28629
  if (!this.dirty)
28608
28630
  return [2 /*return*/, true];
28609
- confirm = false;
28610
- cancel = false;
28631
+ confirmed = (opts === null || opts === void 0 ? void 0 : opts.confirmed) || false;
28632
+ if (!!confirmed) return [3 /*break*/, 4];
28633
+ cancel_1 = false;
28611
28634
  translations = this.translate.instant(['COMMON.BTN_SAVE', 'COMMON.BTN_CANCEL', 'COMMON.BTN_ABORT_CHANGES', 'CONFIRM.SAVE', 'CONFIRM.ALERT_HEADER']);
28612
28635
  return [4 /*yield*/, this.alertCtrl.create({
28613
28636
  header: translations['CONFIRM.ALERT_HEADER'],
@@ -28618,7 +28641,7 @@
28618
28641
  role: 'cancel',
28619
28642
  cssClass: 'secondary',
28620
28643
  handler: function () {
28621
- cancel = true;
28644
+ cancel_1 = true;
28622
28645
  }
28623
28646
  },
28624
28647
  {
@@ -28630,38 +28653,39 @@
28630
28653
  {
28631
28654
  text: translations['COMMON.BTN_SAVE'],
28632
28655
  handler: function () {
28633
- confirm = true; // update upper value
28656
+ confirmed = true; // update upper value
28634
28657
  }
28635
28658
  }
28636
28659
  ]
28637
28660
  })];
28638
28661
  case 1:
28639
- alert = _b.sent();
28662
+ alert = _c.sent();
28640
28663
  return [4 /*yield*/, alert.present()];
28641
28664
  case 2:
28642
- _b.sent();
28665
+ _c.sent();
28643
28666
  return [4 /*yield*/, alert.onDidDismiss()];
28644
28667
  case 3:
28645
- _b.sent();
28646
- if (!confirm) {
28647
- return [2 /*return*/, !cancel];
28668
+ _c.sent();
28669
+ if (!confirmed) {
28670
+ return [2 /*return*/, !cancel_1];
28648
28671
  }
28649
- return [4 /*yield*/, this.save(event, opts)];
28650
- case 4: return [2 /*return*/, _b.sent()];
28672
+ _c.label = 4;
28673
+ case 4: return [4 /*yield*/, this.save(event, opts)];
28674
+ case 5: return [2 /*return*/, _c.sent()];
28651
28675
  }
28652
28676
  });
28653
28677
  });
28654
28678
  };
28655
28679
  AppEditor.prototype.showToast = function (opts) {
28656
28680
  return __awaiter(this, void 0, void 0, function () {
28657
- return __generator(this, function (_b) {
28658
- switch (_b.label) {
28681
+ return __generator(this, function (_c) {
28682
+ switch (_c.label) {
28659
28683
  case 0:
28660
28684
  if (!this.toastController)
28661
28685
  throw new Error('Missing toastController in component\'s constructor');
28662
28686
  return [4 /*yield*/, Toasts.show(this.toastController, this.translate, opts)];
28663
28687
  case 1:
28664
- _b.sent();
28688
+ _c.sent();
28665
28689
  return [2 /*return*/];
28666
28690
  }
28667
28691
  });
@@ -28886,13 +28910,13 @@
28886
28910
  unload: { get: function () { return _super_1.prototype.unload; } }
28887
28911
  });
28888
28912
  return __awaiter(this, void 0, void 0, function () {
28889
- return __generator(this, function (_b) {
28890
- switch (_b.label) {
28913
+ return __generator(this, function (_c) {
28914
+ switch (_c.label) {
28891
28915
  case 0:
28892
28916
  this.selectedTabIndex = 0;
28893
28917
  return [4 /*yield*/, _super.unload.call(this, opts)];
28894
28918
  case 1:
28895
- _b.sent();
28919
+ _c.sent();
28896
28920
  return [2 /*return*/];
28897
28921
  }
28898
28922
  });
@@ -28901,13 +28925,13 @@
28901
28925
  AppTabEditor.prototype.saveDirtyTables = function () {
28902
28926
  return __awaiter(this, void 0, void 0, function () {
28903
28927
  var results, saved;
28904
- return __generator(this, function (_b) {
28905
- switch (_b.label) {
28928
+ return __generator(this, function (_c) {
28929
+ switch (_c.label) {
28906
28930
  case 0: return [4 /*yield*/, Promise.all((this.tables || [])
28907
28931
  .filter(function (c) { return c.dirty; })
28908
28932
  .map(function (c) { return c.save(); }))];
28909
28933
  case 1:
28910
- results = _b.sent();
28934
+ results = _c.sent();
28911
28935
  saved = results.findIndex(function (result) { return result !== true; }) === -1;
28912
28936
  return [2 /*return*/, saved];
28913
28937
  }
@@ -30398,7 +30422,7 @@
30398
30422
  SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
30399
30423
  };
30400
30424
 
30401
- var moment$4 = momentImported__namespace;
30425
+ var moment$6 = momentImported__namespace;
30402
30426
  var USER_EVENT_SERVICE = new i0.InjectionToken('UserEventService');
30403
30427
  var AbstractUserEventService = /** @class */ (function (_super) {
30404
30428
  __extends(AbstractUserEventService, _super);
@@ -30920,7 +30944,7 @@
30920
30944
  };
30921
30945
  AbstractUserEventService.prototype.resetCount = function () {
30922
30946
  this._countSubject.next(undefined);
30923
- this.resetCountDate = moment$4();
30947
+ this.resetCountDate = moment$6();
30924
30948
  // restart listening count changes
30925
30949
  this.startListenCountChanges();
30926
30950
  };
@@ -31024,7 +31048,7 @@
31024
31048
  if (!userEvents.length)
31025
31049
  return [2 /*return*/];
31026
31050
  // set read date
31027
- userEvents.forEach(function (userEvent) { return userEvent.readDate = moment$4(); });
31051
+ userEvents.forEach(function (userEvent) { return userEvent.readDate = moment$6(); });
31028
31052
  localEntities = userEvents.filter(function (userEvent) { return !userEvent.id || userEvent.id < 0; });
31029
31053
  remoteEntities = userEvents.filter(function (userEvent) { return userEvent.id > 0; });
31030
31054
  // save local entities
@@ -32070,7 +32094,7 @@
32070
32094
  ];
32071
32095
 
32072
32096
  var Mutations = {
32073
- 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 }"])))
32097
+ 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 }"])))
32074
32098
  };
32075
32099
  var MessageService = /** @class */ (function (_super) {
32076
32100
  __extends(MessageService, _super);
@@ -32144,7 +32168,7 @@
32144
32168
  };
32145
32169
  return MessageService;
32146
32170
  }(BaseGraphqlService));
32147
- 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" });
32171
+ 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" });
32148
32172
  MessageService.decorators = [
32149
32173
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
32150
32174
  ];
@@ -32154,7 +32178,7 @@
32154
32178
  { type: i1$5.ToastController },
32155
32179
  { type: Environment, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [ENVIRONMENT,] }] }
32156
32180
  ]; };
32157
- var templateObject_1$1;
32181
+ var templateObject_1$3;
32158
32182
 
32159
32183
  var PersonFilter_1;
32160
32184
  // @dynamic
@@ -32213,16 +32237,16 @@
32213
32237
  ], exports.PersonFilter);
32214
32238
 
32215
32239
  var PersonFragments = {
32216
- 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 }"])))
32240
+ 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 }"])))
32217
32241
  };
32218
32242
  // Load persons query
32219
32243
  var PersonQueries = {
32220
- 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),
32221
- 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)
32244
+ 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),
32245
+ 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)
32222
32246
  };
32223
32247
  var PersonMutations = {
32224
- 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),
32225
- 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 }"])))
32248
+ 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),
32249
+ 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 }"])))
32226
32250
  };
32227
32251
  var PersonService = /** @class */ (function (_super_1) {
32228
32252
  __extends(PersonService, _super_1);
@@ -32343,7 +32367,7 @@
32343
32367
  };
32344
32368
  return PersonService;
32345
32369
  }(BaseEntityService));
32346
- 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" });
32370
+ 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" });
32347
32371
  PersonService.decorators = [
32348
32372
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
32349
32373
  ];
@@ -32353,7 +32377,7 @@
32353
32377
  { type: NetworkService },
32354
32378
  { type: EntitiesStorage }
32355
32379
  ]; };
32356
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
32380
+ var templateObject_1$4, templateObject_2$2, templateObject_3$2, templateObject_4$2, templateObject_5$2;
32357
32381
 
32358
32382
  var PersonValidatorService = /** @class */ (function () {
32359
32383
  function PersonValidatorService(formBuilder, accountValidatorService) {
@@ -32376,7 +32400,7 @@
32376
32400
  };
32377
32401
  return PersonValidatorService;
32378
32402
  }());
32379
- 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" });
32403
+ PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
32380
32404
  PersonValidatorService.decorators = [
32381
32405
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
32382
32406
  ];
@@ -32587,7 +32611,7 @@
32587
32611
  UsersPage.decorators = [
32588
32612
  { type: i0.Component, args: [{
32589
32613
  selector: 'app-users-table',
32590
- 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",
32614
+ 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",
32591
32615
  providers: [
32592
32616
  { provide: ngxMaterialTable.ValidatorService, useExisting: PersonValidatorService }
32593
32617
  ],
@@ -32639,17 +32663,17 @@
32639
32663
  ];
32640
32664
  AdminModule.ctorParameters = function () { return []; };
32641
32665
 
32642
- var ɵ0 = {
32666
+ var ɵ0$c = {
32643
32667
  profile: 'ADMIN'
32644
32668
  };
32645
- var routes$6 = [
32669
+ var routes = [
32646
32670
  {
32647
32671
  path: 'users',
32648
32672
  pathMatch: 'full',
32649
32673
  component: UsersPage,
32650
32674
  canActivate: [AuthGuardService],
32651
32675
  canDeactivate: [ComponentDirtyGuard],
32652
- data: ɵ0
32676
+ data: ɵ0$c
32653
32677
  }
32654
32678
  ];
32655
32679
  var AdminRoutingModule = /** @class */ (function () {
@@ -32662,30 +32686,30 @@
32662
32686
  imports: [
32663
32687
  SharedRoutingModule,
32664
32688
  AdminModule,
32665
- i3.RouterModule.forChild(routes$6)
32689
+ i3.RouterModule.forChild(routes)
32666
32690
  ],
32667
32691
  exports: [i3.RouterModule]
32668
32692
  },] }
32669
32693
  ];
32670
32694
 
32671
- var EntityTestClass$1 = /** @class */ (function () {
32695
+ var EntityTestClass = /** @class */ (function () {
32672
32696
  function EntityTestClass() {
32673
32697
  }
32674
32698
  return EntityTestClass;
32675
32699
  }());
32676
- var FAKE_ENTITIES$1 = [
32700
+ var FAKE_ENTITIES = [
32677
32701
  { id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
32678
32702
  { id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
32679
32703
  { id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
32680
32704
  ];
32681
- function deepCopy$1(values, size) {
32705
+ function deepCopy(values, size) {
32682
32706
  if (isNil(size)) {
32683
- return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
32707
+ return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
32684
32708
  }
32685
32709
  var result = [];
32686
32710
  var i = 1;
32687
32711
  while (result.length < size) {
32688
- result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
32712
+ result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
32689
32713
  var name = entity.name + ' #' + i;
32690
32714
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
32691
32715
  }));
@@ -32695,7 +32719,7 @@
32695
32719
  var AutocompleteTestPage = /** @class */ (function () {
32696
32720
  function AutocompleteTestPage(formBuilder) {
32697
32721
  this.formBuilder = formBuilder;
32698
- this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
32722
+ this._items = deepCopy(FAKE_ENTITIES, 100);
32699
32723
  this._$items = new rxjs.BehaviorSubject(undefined);
32700
32724
  this.autocompleteFields = new MatAutocompleteConfigHolder();
32701
32725
  this.memoryHide = false;
@@ -32741,7 +32765,7 @@
32741
32765
  });
32742
32766
  // From items
32743
32767
  this.autocompleteFields.add('entity-items-large', {
32744
- items: FAKE_ENTITIES$1.slice(),
32768
+ items: FAKE_ENTITIES.slice(),
32745
32769
  attributes: ['label', 'name', 'description', 'comments'],
32746
32770
  displayWith: this.entityToString
32747
32771
  });
@@ -32777,14 +32801,14 @@
32777
32801
  var _this = this;
32778
32802
  return __generator(this, function (_a) {
32779
32803
  data = {
32780
- entity: deepCopy$1(FAKE_ENTITIES$1)[0],
32781
- farEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
32804
+ entity: deepCopy(FAKE_ENTITIES)[0],
32805
+ farEntity: deepCopy(FAKE_ENTITIES)[2],
32782
32806
  // This item is NOT in the items list => i should be displayed anyway
32783
32807
  missingEntity: {
32784
32808
  id: -1, label: '??', name: 'Missing item'
32785
32809
  },
32786
- disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
32787
- entities: deepCopy$1(FAKE_ENTITIES$1)
32810
+ disableEntity: deepCopy(FAKE_ENTITIES)[2],
32811
+ entities: deepCopy(FAKE_ENTITIES)
32788
32812
  };
32789
32813
  this.form.setValue(data);
32790
32814
  // Load observables
@@ -32956,13 +32980,13 @@
32956
32980
  { type: i1.FormBuilder }
32957
32981
  ]; };
32958
32982
 
32959
- var moment$3 = momentImported__namespace;
32983
+ var moment$7 = momentImported__namespace;
32960
32984
  var SwipeTestPage = /** @class */ (function () {
32961
32985
  function SwipeTestPage(formBuilder, dateFormatPipe) {
32962
32986
  this.formBuilder = formBuilder;
32963
32987
  this.dateFormatPipe = dateFormatPipe;
32964
32988
  this.$dates = new rxjs.BehaviorSubject(undefined);
32965
- this._today = moment$3().startOf('day');
32989
+ this._today = moment$7().startOf('day');
32966
32990
  this.form = formBuilder.group({
32967
32991
  empty: [null, i1.Validators.required],
32968
32992
  date: [null, i1.Validators.compose([i1.Validators.required, SharedValidators.validDate])],
@@ -32976,7 +33000,7 @@
32976
33000
  var _this = this;
32977
33001
  var dates = [];
32978
33002
  for (var d = 0; d < 7; d++) {
32979
- dates[d] = moment$3(this._today).add(d - 3, 'day');
33003
+ dates[d] = moment$7(this._today).add(d - 3, 'day');
32980
33004
  }
32981
33005
  this.$dates.next(dates);
32982
33006
  this.loadData();
@@ -33023,7 +33047,7 @@
33023
33047
  { type: DateFormatPipe }
33024
33048
  ]; };
33025
33049
 
33026
- var moment$2 = momentImported__namespace;
33050
+ var moment$8 = momentImported__namespace;
33027
33051
  var DateTimeTestPage = /** @class */ (function () {
33028
33052
  function DateTimeTestPage(platform, formBuilder, cd) {
33029
33053
  this.platform = platform;
@@ -33061,7 +33085,7 @@
33061
33085
  var now, data;
33062
33086
  var _this = this;
33063
33087
  return __generator(this, function (_a) {
33064
- now = moment$2();
33088
+ now = moment$8();
33065
33089
  data = {
33066
33090
  empty: null,
33067
33091
  emptyRequired: null,
@@ -33131,12 +33155,12 @@
33131
33155
  { type: i0.ChangeDetectorRef }
33132
33156
  ]; };
33133
33157
 
33134
- var EntityTestClass = /** @class */ (function () {
33158
+ var EntityTestClass$1 = /** @class */ (function () {
33135
33159
  function EntityTestClass() {
33136
33160
  }
33137
33161
  return EntityTestClass;
33138
33162
  }());
33139
- var FAKE_ENTITIES = [
33163
+ var FAKE_ENTITIES$1 = [
33140
33164
  { id: 1, label: 'AAA', name: 'Item A' },
33141
33165
  { id: 2, label: 'BBB', name: 'Item B' },
33142
33166
  { id: 3, label: 'CCC', name: 'Item C' },
@@ -33145,14 +33169,14 @@
33145
33169
  { id: 6, label: 'FFF', name: 'Item F' },
33146
33170
  { id: 7, label: 'GGG', name: 'Item G' }
33147
33171
  ];
33148
- function deepCopy(values, size) {
33172
+ function deepCopy$1(values, size) {
33149
33173
  if (isNil(size)) {
33150
- return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
33174
+ return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
33151
33175
  }
33152
33176
  var result = [];
33153
33177
  var i = 1;
33154
33178
  while (result.length < size) {
33155
- result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
33179
+ result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
33156
33180
  var name = entity.name + ' #' + i;
33157
33181
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
33158
33182
  }));
@@ -33162,7 +33186,7 @@
33162
33186
  var ChipsTestPage = /** @class */ (function () {
33163
33187
  function ChipsTestPage(formBuilder) {
33164
33188
  this.formBuilder = formBuilder;
33165
- this._items = deepCopy(FAKE_ENTITIES, 100);
33189
+ this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
33166
33190
  this._$items = new rxjs.BehaviorSubject(undefined);
33167
33191
  this.autocompleteFields = new MatAutocompleteConfigHolder();
33168
33192
  this.appearance = 'legacy';
@@ -33206,7 +33230,7 @@
33206
33230
  var items, data;
33207
33231
  var _this = this;
33208
33232
  return __generator(this, function (_a) {
33209
- items = deepCopy(FAKE_ENTITIES);
33233
+ items = deepCopy$1(FAKE_ENTITIES$1);
33210
33234
  data = {
33211
33235
  entity: items.slice(0, 1),
33212
33236
  entityInitial: items.slice(1, 2),
@@ -33343,7 +33367,7 @@
33343
33367
  { type: i1.FormBuilder }
33344
33368
  ]; };
33345
33369
 
33346
- var moment$1 = momentImported__namespace;
33370
+ var moment$9 = momentImported__namespace;
33347
33371
  var DateTestPage = /** @class */ (function () {
33348
33372
  function DateTestPage(formBuilder, cd) {
33349
33373
  this.formBuilder = formBuilder;
@@ -33380,7 +33404,7 @@
33380
33404
  var now, nowAtMahe, data;
33381
33405
  var _this = this;
33382
33406
  return __generator(this, function (_a) {
33383
- now = moment$1();
33407
+ now = moment$9();
33384
33408
  nowAtMahe = now.clone().tz(this.timezone).startOf('day');
33385
33409
  data = {
33386
33410
  empty: null,
@@ -33462,7 +33486,7 @@
33462
33486
  { label: 'Shared directives', divider: true },
33463
33487
  { label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
33464
33488
  ];
33465
- var routes$5 = [
33489
+ var routes$1 = [
33466
33490
  {
33467
33491
  path: '',
33468
33492
  pathMatch: 'full',
@@ -33522,7 +33546,7 @@
33522
33546
  i1.ReactiveFormsModule,
33523
33547
  SharedMaterialModule,
33524
33548
  i1$2.TranslateModule.forChild(),
33525
- i3.RouterModule.forChild(routes$5)
33549
+ i3.RouterModule.forChild(routes$1)
33526
33550
  ],
33527
33551
  declarations: [
33528
33552
  DateTimeTestPage,
@@ -33584,7 +33608,7 @@
33584
33608
  { type: i1$2.TranslateService }
33585
33609
  ]; };
33586
33610
 
33587
- var routes$4 = [
33611
+ var routes$2 = [
33588
33612
  {
33589
33613
  path: 'toast',
33590
33614
  pathMatch: 'full',
@@ -33602,7 +33626,7 @@
33602
33626
  i1$4.CommonModule,
33603
33627
  i1$5.IonicModule,
33604
33628
  i1$2.TranslateModule.forChild(),
33605
- i3.RouterModule.forChild(routes$4)
33629
+ i3.RouterModule.forChild(routes$2)
33606
33630
  ],
33607
33631
  declarations: [
33608
33632
  ToastTestingPage
@@ -33905,7 +33929,7 @@
33905
33929
  console.debug('[test-table] Destroying table...');
33906
33930
  _super_1.prototype.ngOnDestroy.call(this);
33907
33931
  this.stopTimer();
33908
- this.dataService.ngOnDestroy();
33932
+ this.dataService.stop();
33909
33933
  };
33910
33934
  TableTestPage.prototype.restoreFilter = function () {
33911
33935
  var json = this.settings.getPageSettings(this.settingsId, 'filter');
@@ -34134,7 +34158,7 @@
34134
34158
  { type: i1$5.PopoverController }
34135
34159
  ]; };
34136
34160
 
34137
- var routes$2 = [
34161
+ var routes$4 = [
34138
34162
  {
34139
34163
  path: 'text-popover',
34140
34164
  pathMatch: 'full',
@@ -34152,7 +34176,7 @@
34152
34176
  i1$4.CommonModule,
34153
34177
  i1$5.IonicModule,
34154
34178
  i1$2.TranslateModule.forChild(),
34155
- i3.RouterModule.forChild(routes$2)
34179
+ i3.RouterModule.forChild(routes$4)
34156
34180
  ],
34157
34181
  declarations: [
34158
34182
  TextPopoverTestingPage
@@ -34169,7 +34193,7 @@
34169
34193
  { label: 'Table', page: '/testing/core/table' },
34170
34194
  { label: 'Text popover', page: '/testing/core/text-popover' }
34171
34195
  ];
34172
- var routes$1 = [
34196
+ var routes$5 = [
34173
34197
  {
34174
34198
  path: '',
34175
34199
  pathMatch: 'full',
@@ -34196,7 +34220,7 @@
34196
34220
  imports: [
34197
34221
  i1$4.CommonModule,
34198
34222
  i1$2.TranslateModule.forChild(),
34199
- i3.RouterModule.forChild(routes$1),
34223
+ i3.RouterModule.forChild(routes$5),
34200
34224
  // Sub modules
34201
34225
  TableTestingModule,
34202
34226
  TextPopoverTestingModule
@@ -34551,7 +34575,7 @@
34551
34575
  { type: Environment, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [ENVIRONMENT,] }] }
34552
34576
  ]; };
34553
34577
 
34554
- var moment = momentImported__namespace;
34578
+ var moment$a = momentImported__namespace;
34555
34579
  var UserEventTestingPage = /** @class */ (function () {
34556
34580
  function UserEventTestingPage(userEventService, router, alertController, translateService) {
34557
34581
  var _this = this;
@@ -34617,7 +34641,7 @@
34617
34641
  type: 'message',
34618
34642
  level: 'INFO',
34619
34643
  message: 'message test message test message test message test message test message test message test message test',
34620
- creationDate: moment(),
34644
+ creationDate: moment$a(),
34621
34645
  }));
34622
34646
  };
34623
34647
  UserEventTestingPage.prototype.addError = function () {
@@ -34627,7 +34651,7 @@
34627
34651
  type: 'upload',
34628
34652
  level: 'ERROR',
34629
34653
  message: 'message error',
34630
- creationDate: moment(),
34654
+ creationDate: moment$a(),
34631
34655
  }));
34632
34656
  };
34633
34657
  UserEventTestingPage.prototype.addWarning = function () {
@@ -34637,7 +34661,7 @@
34637
34661
  type: 'download',
34638
34662
  level: 'WARNING',
34639
34663
  message: 'message warning',
34640
- creationDate: moment(),
34664
+ creationDate: moment$a(),
34641
34665
  }));
34642
34666
  };
34643
34667
  UserEventTestingPage.prototype.addDebug = function () {
@@ -34647,7 +34671,7 @@
34647
34671
  type: 'debug',
34648
34672
  level: 'DEBUG',
34649
34673
  message: 'message DEBUG',
34650
- creationDate: moment(),
34674
+ creationDate: moment$a(),
34651
34675
  }));
34652
34676
  };
34653
34677
  UserEventTestingPage.prototype.addNotificationWithLink = function () {
@@ -34658,7 +34682,7 @@
34658
34682
  type: 'message',
34659
34683
  level: 'INFO',
34660
34684
  message: 'message with link',
34661
- creationDate: moment(),
34685
+ creationDate: moment$a(),
34662
34686
  actions: [{
34663
34687
  name: 'click here',
34664
34688
  iconRef: {
@@ -34676,7 +34700,7 @@
34676
34700
  type: 'message',
34677
34701
  level: 'INFO',
34678
34702
  message: 'message with action',
34679
- creationDate: moment(),
34703
+ creationDate: moment$a(),
34680
34704
  actions: [
34681
34705
  {
34682
34706
  name: 'click here',
@@ -34750,7 +34774,7 @@
34750
34774
  type: 'message',
34751
34775
  level: 'INFO',
34752
34776
  message: 'message with action',
34753
- creationDate: moment(),
34777
+ creationDate: moment$a(),
34754
34778
  actions: [
34755
34779
  {
34756
34780
  default: true,
@@ -34808,7 +34832,7 @@
34808
34832
  { label: 'User event', page: '/testing/social/user-event' },
34809
34833
  { label: 'Job progression', page: '/testing/social/job-progression' }
34810
34834
  ];
34811
- var routes = [
34835
+ var routes$6 = [
34812
34836
  {
34813
34837
  path: 'job-progression',
34814
34838
  pathMatch: 'full',
@@ -34830,7 +34854,7 @@
34830
34854
  imports: [
34831
34855
  i1$4.CommonModule,
34832
34856
  i1$2.TranslateModule.forChild(),
34833
- i3.RouterModule.forChild(routes),
34857
+ i3.RouterModule.forChild(routes$6),
34834
34858
  JobTestingModule,
34835
34859
  UserEventTestingModule
34836
34860
  ],
@@ -34944,7 +34968,6 @@
34944
34968
  exports.ENTITIES_STORAGE_KEY_PREFIX = ENTITIES_STORAGE_KEY_PREFIX;
34945
34969
  exports.ENVIRONMENT = ENVIRONMENT;
34946
34970
  exports.EmptyArrayPipe = EmptyArrayPipe;
34947
- exports.EntitiesService = EntitiesService;
34948
34971
  exports.EntitiesStorage = EntitiesStorage;
34949
34972
  exports.EntitiesTableDataSource = EntitiesTableDataSource;
34950
34973
  exports.Entity = Entity;
@@ -34973,7 +34996,7 @@
34973
34996
  exports.FormGetGroupPipe = FormGetGroupPipe;
34974
34997
  exports.FormGetPipe = FormGetPipe;
34975
34998
  exports.FormGetValuePipe = FormGetValuePipe;
34976
- exports.Fragments = Fragments;
34999
+ exports.Fragments = Fragments$1;
34977
35000
  exports.GraphqlService = GraphqlService;
34978
35001
  exports.HAMMER_PRESS_TIME = HAMMER_PRESS_TIME;
34979
35002
  exports.HAMMER_TAP_TIME = HAMMER_TAP_TIME;
@@ -35291,25 +35314,25 @@
35291
35314
  exports.waitForTrue = waitForTrue;
35292
35315
  exports.waitIdle = waitIdle;
35293
35316
  exports.waitWhilePending = waitWhilePending;
35294
- exports["ɵ0"] = ɵ0$c;
35295
- exports["ɵa"] = CustomReuseStrategy;
35296
- exports["ɵb"] = MatNumpadDomService;
35297
- exports["ɵc"] = isFocusableElement;
35298
- exports["ɵd"] = RegisterForm;
35299
- exports["ɵe"] = AccountValidatorService;
35300
- exports["ɵf"] = RegisterModal;
35301
- exports["ɵg"] = UserSettingsValidatorService;
35302
- exports["ɵh"] = LocalSettingsValidatorService;
35303
- exports["ɵi"] = AppUpdateOfflineModeCard;
35304
- exports["ɵj"] = UserEventNotificationList;
35305
- exports["ɵk"] = JobProgressionList;
35306
- exports["ɵl"] = DateTestPage;
35307
- exports["ɵm"] = NumpadTestPage;
35308
- exports["ɵn"] = MatBadgeIconTestPage;
35309
- exports["ɵo"] = ToastTestingModule;
35310
- exports["ɵp"] = ToastTestingPage;
35317
+ exports0 = ɵ0;
35318
+ exports.ɵa = CustomReuseStrategy;
35319
+ exports.ɵb = MatNumpadDomService;
35320
+ exports.ɵc = isFocusableElement;
35321
+ exports.ɵd = RegisterForm;
35322
+ exports.ɵe = AccountValidatorService;
35323
+ exports.ɵf = RegisterModal;
35324
+ exports.ɵg = UserSettingsValidatorService;
35325
+ exports.ɵh = LocalSettingsValidatorService;
35326
+ exports.ɵi = AppUpdateOfflineModeCard;
35327
+ exports.ɵj = UserEventNotificationList;
35328
+ exports.ɵk = JobProgressionList;
35329
+ exports.ɵl = DateTestPage;
35330
+ exports.ɵm = NumpadTestPage;
35331
+ exports.ɵn = MatBadgeIconTestPage;
35332
+ exports.ɵo = ToastTestingModule;
35333
+ exports.ɵp = ToastTestingPage;
35311
35334
 
35312
35335
  Object.defineProperty(exports, '__esModule', { value: true });
35313
35336
 
35314
- }));
35337
+ })));
35315
35338
  //# sourceMappingURL=sumaris-net.ngx-components.umd.js.map