@sumaris-net/ngx-components 1.18.7 → 1.19.2

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 (60) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +804 -429
  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 +10 -0
  6. package/esm2015/public_api.js +10 -5
  7. package/esm2015/src/app/admin/admin-routing.module.js +3 -1
  8. package/esm2015/src/app/admin/admin.module.js +2 -1
  9. package/esm2015/src/app/admin/users/list/users.js +45 -7
  10. package/esm2015/src/app/core/services/base-entity-service.class.js +6 -6
  11. package/esm2015/src/app/core/services/local-settings.service.js +5 -5
  12. package/esm2015/src/app/core/services/model/referential.model.js +1 -1
  13. package/esm2015/src/app/core/services/platform.service.js +3 -4
  14. package/esm2015/src/app/shared/material/datetime/material.date.js +82 -70
  15. package/esm2015/src/app/shared/material/datetime/material.datetime.js +3 -3
  16. package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +7 -5
  17. package/esm2015/src/app/shared/platforms.js +20 -4
  18. package/esm2015/src/app/shared/validator/validators.js +2 -2
  19. package/esm2015/src/app/social/message/message.form.js +73 -0
  20. package/esm2015/src/app/social/message/message.modal.js +96 -0
  21. package/esm2015/src/app/social/message/message.model.js +65 -0
  22. package/esm2015/src/app/social/message/message.service.js +87 -0
  23. package/esm2015/src/app/social/social.errors.js +6 -0
  24. package/esm2015/src/app/social/social.module.js +12 -15
  25. package/esm2015/src/app/social/user-event/user-event.fragments.js +27 -0
  26. package/esm2015/src/app/social/user-event/user-event.model.js +46 -0
  27. package/esm2015/src/app/social/user-event/user-event.service.js +367 -0
  28. package/esm2015/src/app/social/user-event/user-events.table.js +154 -0
  29. package/fesm2015/sumaris-net.ngx-components.js +734 -411
  30. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  31. package/package.json +4 -3
  32. package/public_api.d.ts +9 -4
  33. package/src/app/admin/users/list/users.d.ts +10 -6
  34. package/src/app/core/services/local-settings.service.d.ts +3 -2
  35. package/src/app/core/services/model/referential.model.d.ts +7 -7
  36. package/src/app/shared/material/datetime/material.date.d.ts +6 -8
  37. package/src/app/shared/material/datetime/material.datetime.d.ts +2 -2
  38. package/src/app/shared/platforms.d.ts +1 -1
  39. package/src/app/social/message/message.form.d.ts +27 -0
  40. package/src/app/social/message/message.modal.d.ts +36 -0
  41. package/src/app/social/message/message.model.d.ts +31 -0
  42. package/src/app/social/message/message.service.d.ts +24 -0
  43. package/src/app/social/{services/errors.d.ts → social.errors.d.ts} +2 -1
  44. package/src/app/social/social.module.d.ts +0 -2
  45. package/src/app/social/{services/social.fragments.d.ts → user-event/user-event.fragments.d.ts} +1 -1
  46. package/src/app/social/{services/model → user-event}/user-event.model.d.ts +1 -1
  47. package/src/app/social/{services → user-event}/user-event.service.d.ts +4 -3
  48. package/src/app/social/{list → user-event}/user-events.table.d.ts +2 -2
  49. package/src/assets/i18n/en-US.json +23 -4
  50. package/src/assets/i18n/en.json +23 -4
  51. package/src/assets/i18n/fr.json +25 -5
  52. package/src/theme/_ionic.globals.scss +2 -1
  53. package/sumaris-net.ngx-components.metadata.json +1 -1
  54. package/esm2015/src/app/admin/services/errors.js +0 -6
  55. package/esm2015/src/app/social/list/user-events.table.js +0 -154
  56. package/esm2015/src/app/social/services/errors.js +0 -5
  57. package/esm2015/src/app/social/services/model/user-event.model.js +0 -46
  58. package/esm2015/src/app/social/services/social.fragments.js +0 -27
  59. package/esm2015/src/app/social/services/user-event.service.js +0 -367
  60. package/src/app/admin/services/errors.d.ts +0 -5
@@ -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('moment-timezone'), 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')) :
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', 'moment-timezone', '@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'], 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["moment-timezone"], 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"]));
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, momentTZImported, 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) { '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['moment-timezone'], 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']));
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, momentTZImported, 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) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -15,46 +15,23 @@
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
30
  var momentTZImported__namespace = /*#__PURE__*/_interopNamespace(momentTZImported);
37
- var i3__namespace$3 = /*#__PURE__*/_interopNamespace(i3);
38
- var i1__namespace$5 = /*#__PURE__*/_interopNamespace(i1$6);
39
- var i2__namespace$2 = /*#__PURE__*/_interopNamespace(i2$1);
40
- var i2__namespace = /*#__PURE__*/_interopNamespace(i2$2);
41
- var i3__namespace = /*#__PURE__*/_interopNamespace(i3$1);
42
- var i4__namespace = /*#__PURE__*/_interopNamespace(i4);
43
31
  var uuidv4Imported__namespace = /*#__PURE__*/_interopNamespace(uuidv4Imported);
44
- var i3__namespace$1 = /*#__PURE__*/_interopNamespace(i3$2);
45
- var i6__namespace = /*#__PURE__*/_interopNamespace(i6);
46
- var i9__namespace = /*#__PURE__*/_interopNamespace(i9);
47
- var i10__namespace = /*#__PURE__*/_interopNamespace(i10);
48
- var i2__namespace$4 = /*#__PURE__*/_interopNamespace(i2$4);
49
- var i2__namespace$3 = /*#__PURE__*/_interopNamespace(i2$3);
50
32
  var QueueLink__default = /*#__PURE__*/_interopDefaultLegacy(QueueLink);
51
33
  var SerializingLink__default = /*#__PURE__*/_interopDefaultLegacy(SerializingLink);
52
34
  var loggerLink__default = /*#__PURE__*/_interopDefaultLegacy(loggerLink);
53
- var i3__namespace$2 = /*#__PURE__*/_interopNamespace(i3$3);
54
- var i14__namespace = /*#__PURE__*/_interopNamespace(i14);
55
- var i15__namespace = /*#__PURE__*/_interopNamespace(i15);
56
- var i17__namespace = /*#__PURE__*/_interopNamespace(i17);
57
- var i18__namespace = /*#__PURE__*/_interopNamespace(i18);
58
35
 
59
36
  var ENVIRONMENT = new i0.InjectionToken('ENV');
60
37
  var Environment = /** @class */ (function () {
@@ -1354,6 +1331,10 @@
1354
1331
  /* ---
1355
1332
  * Source: https://github.com/ionic-team/ionic-framework/blob/b0d53ca73619585671d8cf4dc24e47f826495a0a/core/src/utils/platform.ts
1356
1333
  * --- */
1334
+ var _cache = {
1335
+ mobile: null,
1336
+ cordova: null
1337
+ };
1357
1338
  var matchMedia = function (win, query) { return win.matchMedia(query).matches; };
1358
1339
  var testUserAgent = function (win, expr) {
1359
1340
  var userAgent = win.navigator.userAgent || win.navigator.vendor || window.opera;
@@ -1361,22 +1342,34 @@
1361
1342
  };
1362
1343
  var isWindows = function (win) { return testUserAgent(win, /windows/i); };
1363
1344
  var isTouchUi = function (win) { return matchMedia(win, '(any-pointer:coarse)'); };
1364
- var isMobile = function (win) { return isCordova(window) || isAndroid(win) || isIOS(window) || (isTouchUi(win) && !isWindows(win)); };
1365
1345
  var isIpad = function (win) {
1366
1346
  // iOS 12 and below
1367
1347
  if (testUserAgent(win, /iPad/i)) {
1368
1348
  return true;
1369
1349
  }
1370
1350
  // iOS 13+
1371
- if (testUserAgent(win, /Macintosh/i) && isMobile(win)) {
1351
+ if (testUserAgent(win, /Macintosh/i) && isTouchUi(win)) {
1372
1352
  return true;
1373
1353
  }
1374
1354
  return false;
1375
1355
  };
1376
- var ɵ0$c = isIpad;
1356
+ var ɵ0 = isIpad;
1377
1357
  var isIOS = function (win) { return testUserAgent(win, /iPhone|iPod/i) || isIpad(win); };
1378
1358
  var isAndroid = function (win) { return testUserAgent(win, /android|sink/i); };
1379
- var isCordova = function (win) { return !!(win['cordova'] || win['phonegap'] || win['PhoneGap']); };
1359
+ var isCordova = function (win) {
1360
+ if (_cache.cordova === null || _cache.cordova === undefined) {
1361
+ _cache.cordova = !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
1362
+ }
1363
+ return _cache.cordova;
1364
+ };
1365
+ var isMobile = function (win) {
1366
+ if (_cache.mobile === null || _cache.mobile === undefined) {
1367
+ _cache.mobile = isCordova(window)
1368
+ || isAndroid(win) || isIOS(window)
1369
+ || (isTouchUi(win) && !isWindows(win));
1370
+ }
1371
+ return _cache.mobile;
1372
+ };
1380
1373
 
1381
1374
  var MatAutocompleteConfigHolder = /** @class */ (function () {
1382
1375
  function MatAutocompleteConfigHolder(options) {
@@ -1436,14 +1429,14 @@
1436
1429
  };
1437
1430
  return MatAutocompleteFieldUtils;
1438
1431
  }());
1439
- var noop$8 = function (_) { };
1440
- var ɵ0$b = noop$8;
1432
+ var noop = function (_) { };
1433
+ var ɵ0$1 = noop;
1441
1434
  var MatAutocompleteField = /** @class */ (function () {
1442
1435
  function MatAutocompleteField(cd, formGroupDir) {
1443
1436
  this.cd = cd;
1444
1437
  this.formGroupDir = formGroupDir;
1445
- this._onChangeCallback = noop$8;
1446
- this._onTouchedCallback = noop$8;
1438
+ this._onChangeCallback = noop;
1439
+ this._onTouchedCallback = noop;
1447
1440
  this.logPrefix = '[mat-autocomplete] ';
1448
1441
  this.formControlName = null;
1449
1442
  this.required = false;
@@ -2269,7 +2262,7 @@
2269
2262
  };
2270
2263
  return DateFormatPipe;
2271
2264
  }());
2272
- 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" });
2265
+ 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" });
2273
2266
  DateFormatPipe.decorators = [
2274
2267
  { type: i0.Pipe, args: [{
2275
2268
  name: 'dateFormat'
@@ -2281,7 +2274,7 @@
2281
2274
  { type: i1$2.TranslateService }
2282
2275
  ]; };
2283
2276
 
2284
- var moment$7 = momentImported__namespace;
2277
+ var moment = momentImported__namespace;
2285
2278
  var DateDiffDurationPipe = /** @class */ (function () {
2286
2279
  function DateDiffDurationPipe(dateAdapter, translate) {
2287
2280
  var _this = this;
@@ -2298,10 +2291,10 @@
2298
2291
  return this.format(startDate, endDate);
2299
2292
  };
2300
2293
  DateDiffDurationPipe.prototype.format = function (startDate, endDate) {
2301
- var duration = moment$7.duration(endDate.diff(startDate));
2294
+ var duration = moment.duration(endDate.diff(startDate));
2302
2295
  if (duration.asMinutes() < 0)
2303
2296
  return '';
2304
- var timeDuration = moment$7(0)
2297
+ var timeDuration = moment(0)
2305
2298
  .hour(duration.hours())
2306
2299
  .minute(duration.minutes());
2307
2300
  var days = Math.floor(duration.asDays());
@@ -2309,7 +2302,7 @@
2309
2302
  };
2310
2303
  return DateDiffDurationPipe;
2311
2304
  }());
2312
- 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" });
2305
+ 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" });
2313
2306
  DateDiffDurationPipe.decorators = [
2314
2307
  { type: i0.Pipe, args: [{
2315
2308
  name: 'dateDiffDuration'
@@ -2331,7 +2324,7 @@
2331
2324
  };
2332
2325
  return DateFromNowPipe;
2333
2326
  }());
2334
- DateFromNowPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0__namespace.ɵɵinject(i1__namespace.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
2327
+ DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1$1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
2335
2328
  DateFromNowPipe.decorators = [
2336
2329
  { type: i0.Pipe, args: [{
2337
2330
  name: 'dateFromNow'
@@ -2400,7 +2393,7 @@
2400
2393
  value *= -1;
2401
2394
  }
2402
2395
  }
2403
- var degrees = roundFloat$1(value, opts.maxDecimals).toString();
2396
+ var degrees = roundFloat(value, opts.maxDecimals).toString();
2404
2397
  // Add sign
2405
2398
  var sign = negative ? '-' : '+';
2406
2399
  if (opts.placeholderChar) {
@@ -2451,7 +2444,7 @@
2451
2444
  }
2452
2445
  var degrees = Math.trunc(value);
2453
2446
  var minutes = Math.trunc((value - degrees) * 60);
2454
- var seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
2447
+ var seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
2455
2448
  while (seconds >= 60) {
2456
2449
  seconds -= 60;
2457
2450
  minutes += 1;
@@ -2519,7 +2512,7 @@
2519
2512
  }
2520
2513
  }
2521
2514
  var degrees = Math.trunc(value);
2522
- var minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
2515
+ var minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
2523
2516
  while (minutes >= 60) {
2524
2517
  minutes -= 60;
2525
2518
  degrees += 1;
@@ -2570,15 +2563,15 @@
2570
2563
  return NaN;
2571
2564
  }
2572
2565
  if (pattern === 'DD')
2573
- return roundFloat$1(degrees, maxDecimals);
2566
+ return roundFloat(degrees, maxDecimals);
2574
2567
  var minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
2575
2568
  var seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
2576
2569
  var direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
2577
2570
  var sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
2578
2571
  degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
2579
- return roundFloat$1(degrees, maxDecimals);
2572
+ return roundFloat(degrees, maxDecimals);
2580
2573
  }
2581
- function roundFloat$1(input, maxDecimals) {
2574
+ function roundFloat(input, maxDecimals) {
2582
2575
  if (maxDecimals > 0) {
2583
2576
  var powDecimal = Math.pow(10, maxDecimals);
2584
2577
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -2601,7 +2594,7 @@
2601
2594
  };
2602
2595
  return LatLongFormatPipe;
2603
2596
  }());
2604
- LatLongFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
2597
+ LatLongFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
2605
2598
  LatLongFormatPipe.decorators = [
2606
2599
  { type: i0.Pipe, args: [{
2607
2600
  name: 'latLongFormat'
@@ -2614,7 +2607,7 @@
2614
2607
  }
2615
2608
  return LatitudeFormatPipe;
2616
2609
  }());
2617
- LatitudeFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
2610
+ LatitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
2618
2611
  LatitudeFormatPipe.decorators = [
2619
2612
  { type: i0.Pipe, args: [{
2620
2613
  name: 'latitudeFormat'
@@ -2627,7 +2620,7 @@
2627
2620
  }
2628
2621
  return LongitudeFormatPipe;
2629
2622
  }());
2630
- LongitudeFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
2623
+ LongitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
2631
2624
  LongitudeFormatPipe.decorators = [
2632
2625
  { type: i0.Pipe, args: [{
2633
2626
  name: 'longitudeFormat'
@@ -2650,7 +2643,7 @@
2650
2643
  };
2651
2644
  return NumberFormatPipe;
2652
2645
  }());
2653
- NumberFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
2646
+ NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
2654
2647
  NumberFormatPipe.decorators = [
2655
2648
  { type: i0.Pipe, args: [{
2656
2649
  name: 'numberFormat'
@@ -2693,7 +2686,7 @@
2693
2686
  };
2694
2687
  return HighlightPipe;
2695
2688
  }());
2696
- HighlightPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
2689
+ HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
2697
2690
  HighlightPipe.decorators = [
2698
2691
  { type: i0.Pipe, args: [{
2699
2692
  name: 'highlight'
@@ -2761,7 +2754,7 @@
2761
2754
  { type: i0.Pipe, args: [{ name: 'fileSize' },] }
2762
2755
  ];
2763
2756
 
2764
- var moment$6 = momentImported__namespace;
2757
+ var moment$1 = momentImported__namespace;
2765
2758
  var tz = momentTZImported__namespace;
2766
2759
  var DATE_UNIX_TIMESTAMP = 'X';
2767
2760
  var DATE_UNIX_MS_TIMESTAMP = 'x';
@@ -2839,32 +2832,32 @@
2839
2832
  if (!value || momentImported.isMoment(value))
2840
2833
  return value;
2841
2834
  // Parse the input value, as a ISO date time
2842
- var date = moment$6(value, DATE_ISO_PATTERN);
2835
+ var date = moment$1(value, DATE_ISO_PATTERN);
2843
2836
  if (date.isValid())
2844
2837
  return date;
2845
2838
  // Not valid: trying to convert from unix timestamp
2846
2839
  if (typeof value === 'string') {
2847
2840
  console.warn('Wrong date format - Trying to convert from local time: ' + value);
2848
2841
  if (value.length === 10) {
2849
- return moment$6(value, DATE_UNIX_TIMESTAMP);
2842
+ return moment$1(value, DATE_UNIX_TIMESTAMP);
2850
2843
  }
2851
2844
  else if (value.length === 13) {
2852
- return moment$6(value, DATE_UNIX_MS_TIMESTAMP);
2845
+ return moment$1(value, DATE_UNIX_MS_TIMESTAMP);
2853
2846
  }
2854
2847
  }
2855
2848
  console.warn('Unable to parse date: ' + value);
2856
2849
  return undefined;
2857
2850
  }
2858
2851
  function fromUnixTimestamp(timeInSec) {
2859
- return moment$6(timeInSec, DATE_UNIX_TIMESTAMP);
2852
+ return moment$1(timeInSec, DATE_UNIX_TIMESTAMP);
2860
2853
  }
2861
2854
  function fromUnixMsTimestamp(timeInMs) {
2862
- return moment$6(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2855
+ return moment$1(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2863
2856
  }
2864
2857
  function toDuration(value, unit) {
2865
2858
  if (!value)
2866
2859
  return undefined;
2867
- var duration = moment$6.duration(value, unit);
2860
+ var duration = moment$1.duration(value, unit);
2868
2861
  // fix 990+ ms
2869
2862
  if (duration.milliseconds() >= 990) {
2870
2863
  duration.add(1000 - duration.milliseconds(), 'ms');
@@ -2894,7 +2887,7 @@
2894
2887
  };
2895
2888
  return DurationPipe;
2896
2889
  }());
2897
- DurationPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
2890
+ DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$2.TranslateService)); }, token: DurationPipe, providedIn: "root" });
2898
2891
  DurationPipe.decorators = [
2899
2892
  { type: i0.Pipe, args: [{
2900
2893
  name: 'duration'
@@ -2918,7 +2911,7 @@
2918
2911
  };
2919
2912
  return MathAbsPipe;
2920
2913
  }());
2921
- MathAbsPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2914
+ MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2922
2915
  MathAbsPipe.decorators = [
2923
2916
  { type: i0.Pipe, args: [{
2924
2917
  name: 'mathAbs'
@@ -2933,7 +2926,7 @@
2933
2926
  };
2934
2927
  return EvenPipe;
2935
2928
  }());
2936
- EvenPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
2929
+ EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
2937
2930
  EvenPipe.decorators = [
2938
2931
  { type: i0.Pipe, args: [{
2939
2932
  name: 'even'
@@ -2948,7 +2941,7 @@
2948
2941
  };
2949
2942
  return OddPipe;
2950
2943
  }());
2951
- OddPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
2944
+ OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
2952
2945
  OddPipe.decorators = [
2953
2946
  { type: i0.Pipe, args: [{
2954
2947
  name: 'odd'
@@ -3080,7 +3073,7 @@
3080
3073
  };
3081
3074
  return MapGetPipe;
3082
3075
  }());
3083
- MapGetPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
3076
+ MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
3084
3077
  MapGetPipe.decorators = [
3085
3078
  { type: i0.Pipe, args: [{
3086
3079
  name: 'mapGet'
@@ -3097,7 +3090,7 @@
3097
3090
  };
3098
3091
  return MapKeysPipe;
3099
3092
  }());
3100
- MapKeysPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
3093
+ MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
3101
3094
  MapKeysPipe.decorators = [
3102
3095
  { type: i0.Pipe, args: [{
3103
3096
  name: 'mapKeys'
@@ -3114,7 +3107,7 @@
3114
3107
  };
3115
3108
  return MapValuesPipe;
3116
3109
  }());
3117
- MapValuesPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
3110
+ MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
3118
3111
  MapValuesPipe.decorators = [
3119
3112
  { type: i0.Pipe, args: [{
3120
3113
  name: 'mapValues'
@@ -3130,7 +3123,7 @@
3130
3123
  };
3131
3124
  return IsNotNilOrBlankPipe;
3132
3125
  }());
3133
- IsNotNilOrBlankPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
3126
+ IsNotNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
3134
3127
  IsNotNilOrBlankPipe.decorators = [
3135
3128
  { type: i0.Pipe, args: [{
3136
3129
  name: 'isNotNilOrBlank'
@@ -3145,7 +3138,7 @@
3145
3138
  };
3146
3139
  return IsNilOrBlankPipe;
3147
3140
  }());
3148
- IsNilOrBlankPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
3141
+ IsNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
3149
3142
  IsNilOrBlankPipe.decorators = [
3150
3143
  { type: i0.Pipe, args: [{
3151
3144
  name: 'isNilOrBlank'
@@ -3160,7 +3153,7 @@
3160
3153
  };
3161
3154
  return ToStringPipe;
3162
3155
  }());
3163
- ToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
3156
+ ToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
3164
3157
  ToStringPipe.decorators = [
3165
3158
  { type: i0.Pipe, args: [{
3166
3159
  name: 'toString'
@@ -3175,7 +3168,7 @@
3175
3168
  };
3176
3169
  return StrLengthPipe;
3177
3170
  }());
3178
- StrLengthPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
3171
+ StrLengthPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
3179
3172
  StrLengthPipe.decorators = [
3180
3173
  { type: i0.Pipe, args: [{
3181
3174
  name: 'strLength'
@@ -3190,7 +3183,7 @@
3190
3183
  };
3191
3184
  return StrIncludesPipe;
3192
3185
  }());
3193
- StrIncludesPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function StrIncludesPipe_Factory() { return new StrIncludesPipe(); }, token: StrIncludesPipe, providedIn: "root" });
3186
+ StrIncludesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrIncludesPipe_Factory() { return new StrIncludesPipe(); }, token: StrIncludesPipe, providedIn: "root" });
3194
3187
  StrIncludesPipe.decorators = [
3195
3188
  { type: i0.Pipe, args: [{
3196
3189
  name: 'strIncludes'
@@ -3281,7 +3274,7 @@
3281
3274
  };
3282
3275
  return TranslateContextService;
3283
3276
  }());
3284
- TranslateContextService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
3277
+ TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$2.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
3285
3278
  TranslateContextService.decorators = [
3286
3279
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3287
3280
  ];
@@ -3338,7 +3331,7 @@
3338
3331
  };
3339
3332
  return PropertyGetPipe;
3340
3333
  }());
3341
- PropertyGetPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
3334
+ PropertyGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
3342
3335
  PropertyGetPipe.decorators = [
3343
3336
  { type: i0.Pipe, args: [{
3344
3337
  name: 'propertyGet'
@@ -3364,7 +3357,7 @@
3364
3357
  ngInit: [{ type: i0.Output }]
3365
3358
  };
3366
3359
 
3367
- var moment$5 = momentImported__namespace;
3360
+ var moment$2 = momentImported__namespace;
3368
3361
  // @dynamic
3369
3362
  var SharedValidators = /** @class */ (function () {
3370
3363
  function SharedValidators() {
@@ -3447,7 +3440,7 @@
3447
3440
  };
3448
3441
  SharedValidators.validDate = function (control) {
3449
3442
  var value = control.value;
3450
- var date = !value || moment$5.isMoment(value) ? value : moment$5(control.value, DATE_ISO_PATTERN);
3443
+ var date = !value || moment$2.isMoment(value) ? value : moment$2(value, DATE_ISO_PATTERN);
3451
3444
  if (date && (!date.isValid() || date.year() < 1970)) {
3452
3445
  return { validDate: true };
3453
3446
  }
@@ -4654,7 +4647,7 @@
4654
4647
  };
4655
4648
  return FormErrorTranslator;
4656
4649
  }());
4657
- 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" });
4650
+ 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" });
4658
4651
  FormErrorTranslator.decorators = [
4659
4652
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
4660
4653
  ];
@@ -4739,7 +4732,7 @@
4739
4732
  };
4740
4733
  return FormGetPipe;
4741
4734
  }());
4742
- FormGetPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function FormGetPipe_Factory() { return new FormGetPipe(); }, token: FormGetPipe, providedIn: "root" });
4735
+ FormGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormGetPipe_Factory() { return new FormGetPipe(); }, token: FormGetPipe, providedIn: "root" });
4743
4736
  FormGetPipe.decorators = [
4744
4737
  { type: i0.Pipe, args: [{
4745
4738
  name: 'formGet'
@@ -4754,7 +4747,7 @@
4754
4747
  };
4755
4748
  return FormGetControlPipe;
4756
4749
  }());
4757
- FormGetControlPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function FormGetControlPipe_Factory() { return new FormGetControlPipe(); }, token: FormGetControlPipe, providedIn: "root" });
4750
+ FormGetControlPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormGetControlPipe_Factory() { return new FormGetControlPipe(); }, token: FormGetControlPipe, providedIn: "root" });
4758
4751
  FormGetControlPipe.decorators = [
4759
4752
  { type: i0.Pipe, args: [{
4760
4753
  name: 'formGetControl'
@@ -4769,7 +4762,7 @@
4769
4762
  };
4770
4763
  return FormGetArrayPipe;
4771
4764
  }());
4772
- FormGetArrayPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function FormGetArrayPipe_Factory() { return new FormGetArrayPipe(); }, token: FormGetArrayPipe, providedIn: "root" });
4765
+ FormGetArrayPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormGetArrayPipe_Factory() { return new FormGetArrayPipe(); }, token: FormGetArrayPipe, providedIn: "root" });
4773
4766
  FormGetArrayPipe.decorators = [
4774
4767
  { type: i0.Pipe, args: [{
4775
4768
  name: 'formGetArray'
@@ -4784,7 +4777,7 @@
4784
4777
  };
4785
4778
  return FormGetGroupPipe;
4786
4779
  }());
4787
- FormGetGroupPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function FormGetGroupPipe_Factory() { return new FormGetGroupPipe(); }, token: FormGetGroupPipe, providedIn: "root" });
4780
+ FormGetGroupPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormGetGroupPipe_Factory() { return new FormGetGroupPipe(); }, token: FormGetGroupPipe, providedIn: "root" });
4788
4781
  FormGetGroupPipe.decorators = [
4789
4782
  { type: i0.Pipe, args: [{
4790
4783
  name: 'formGetGroup'
@@ -5130,9 +5123,9 @@
5130
5123
  var hour = parseInt(durationParts[0] || '0');
5131
5124
  var minute = parseInt(durationParts[1] || '0');
5132
5125
  var value = hour + (minute + 0.5) / 60;
5133
- return roundFloat(value, maxDecimals);
5126
+ return roundFloat$1(value, maxDecimals);
5134
5127
  }
5135
- function roundFloat(input, maxDecimals) {
5128
+ function roundFloat$1(input, maxDecimals) {
5136
5129
  if (maxDecimals > 0) {
5137
5130
  var powDecimal = Math.pow(10, maxDecimals);
5138
5131
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -5156,17 +5149,17 @@
5156
5149
  DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
5157
5150
  }
5158
5151
  };
5159
- var noop$7 = function () {
5152
+ var noop$1 = function () {
5160
5153
  };
5161
- var ɵ0$a = noop$7;
5154
+ var ɵ0$2 = noop$1;
5162
5155
  var MatLatLongField = /** @class */ (function () {
5163
5156
  function MatLatLongField(translate, formBuilder, cd, formGroupDir) {
5164
5157
  this.translate = translate;
5165
5158
  this.formBuilder = formBuilder;
5166
5159
  this.cd = cd;
5167
5160
  this.formGroupDir = formGroupDir;
5168
- this._onChangeCallback = noop$7;
5169
- this._onTouchedCallback = noop$7;
5161
+ this._onChangeCallback = noop$1;
5162
+ this._onTouchedCallback = noop$1;
5170
5163
  this._subscription = new rxjs.Subscription();
5171
5164
  this.disabling = false;
5172
5165
  this.writing = false;
@@ -5517,14 +5510,14 @@
5517
5510
  },] }
5518
5511
  ];
5519
5512
 
5520
- var DEFAULT_VALUE_ACCESSOR$5 = {
5513
+ var DEFAULT_VALUE_ACCESSOR = {
5521
5514
  provide: i1.NG_VALUE_ACCESSOR,
5522
5515
  useExisting: i0.forwardRef(function () { return MatDate; }),
5523
5516
  multi: true
5524
5517
  };
5525
- var DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
5526
- var noop$6 = function () { };
5527
- var ɵ0$9 = noop$6;
5518
+ var TEXT_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
5519
+ var noop$2 = function () { };
5520
+ var ɵ0$3 = noop$2;
5528
5521
  var MatDate = /** @class */ (function () {
5529
5522
  function MatDate(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
5530
5523
  this.dateAdapter = dateAdapter;
@@ -5533,13 +5526,13 @@
5533
5526
  this.cd = cd;
5534
5527
  this.keyboard = keyboard;
5535
5528
  this.formGroupDir = formGroupDir;
5536
- this._onChangeCallback = noop$6;
5537
- this._onTouchedCallback = noop$6;
5529
+ this._onChangeCallback = noop$2;
5530
+ this._onTouchedCallback = noop$2;
5538
5531
  this._subscription = new rxjs.Subscription();
5539
5532
  this._writing = true;
5540
5533
  this._disabling = false;
5541
5534
  this._readonly = false;
5542
- this.dayMask = DAY_MASK$2;
5535
+ this.mask = TEXT_MASK;
5543
5536
  this.floatLabel = 'auto';
5544
5537
  this.compact = false;
5545
5538
  this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
@@ -5598,22 +5591,24 @@
5598
5591
  this.formControl.setValidators(this.required ? [this.formControl.validator, i1.Validators.required, SharedValidators.validDate] :
5599
5592
  [this.formControl.validator, SharedValidators.validDate]);
5600
5593
  }
5601
- // Create the day control
5602
- this.dayControl = this.formBuilder.control(null, function () { return _this.formControl.errors; });
5594
+ // Create the text control
5595
+ this.textControl = this.formBuilder.control(null,
5596
+ // Important: should copy errors from the model formControl
5597
+ function () { return _this.formControl.errors; });
5603
5598
  // Get patterns to display date
5604
5599
  this.updatePattern(this.translate.instant('COMMON.DATE_PATTERN'));
5605
5600
  this._subscription.add(this.translate.get('COMMON.DATE_PATTERN')
5606
5601
  .subscribe(function (pattern) { return _this.updatePattern(pattern); }));
5607
- this._subscription.add(this.dayControl.valueChanges
5602
+ this._subscription.add(this.textControl.valueChanges
5608
5603
  .subscribe(function (value) { return _this.onFormChange(value); }));
5609
5604
  // Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl)
5610
5605
  this._subscription.add(this.formControl.statusChanges
5611
5606
  .pipe(operators.filter(function (_) { return !_this.readonly && !_this._writing && !_this._disabling; }) // Skip
5612
5607
  )
5613
5608
  .subscribe(function () {
5614
- _this.dayControl.updateValueAndValidity({ emitEvent: false });
5615
- if (_this.formControl.touched && !_this.dayControl.touched) {
5616
- _this.dayControl.markAsTouched();
5609
+ _this.textControl.updateValueAndValidity({ emitEvent: false });
5610
+ if (_this.formControl.touched && !_this.textControl.touched) {
5611
+ _this.textControl.markAsTouched();
5617
5612
  }
5618
5613
  _this.markForCheck();
5619
5614
  }));
@@ -5629,27 +5624,25 @@
5629
5624
  this._writing = true;
5630
5625
  // DEBUG
5631
5626
  //console.debug("[mat-date] writeValue() with:", value);
5632
- // Convert into date, and clone if necessary
5627
+ // Convert into date
5628
+ // Important: do a clone()
5633
5629
  var date = momentImported.isMoment(value) ? value.clone() : fromDateISOString(value);
5634
5630
  if (!date || !date.isValid()) {
5635
- this.dayControl.patchValue(null, { emitEvent: false });
5631
+ this.textControl.patchValue(null, { emitEvent: false });
5636
5632
  if (this.formControl.value) {
5637
5633
  this.formControl.patchValue(null, { emitEvent: false });
5638
5634
  this._onChangeCallback(null);
5639
5635
  }
5640
5636
  }
5641
5637
  else {
5642
- // Format day
5643
- var day = date && this.timezone
5644
- // Move to the expected TZ (keeping local hour - e.g. midnight)
5645
- ? date.tz(this.timezone)
5646
- // Not TZ: important: do a clone
5647
- : date;
5648
- day = day.startOf('day');
5649
- var dayStr = this.dateAdapter.format(day, this.dayPattern);
5650
- if (this.dayControl.value !== dayStr) {
5651
- // Update control
5652
- this.dayControl.patchValue(dayStr, { emitEvent: false });
5638
+ // Move to the expected TZ (keeping local hour - e.g. midnight)
5639
+ date = (this.timezone && date.tz(this.timezone) || date)
5640
+ // Reset hour
5641
+ .startOf('day');
5642
+ var dayStr = this.dateAdapter.format(date, this.datePattern);
5643
+ if (this.textControl.value !== dayStr) {
5644
+ // Update day control
5645
+ this.textControl.patchValue(dayStr, { emitEvent: false });
5653
5646
  }
5654
5647
  }
5655
5648
  this._writing = false;
@@ -5666,10 +5659,10 @@
5666
5659
  return;
5667
5660
  this._disabling = true;
5668
5661
  if (isDisabled) {
5669
- this.dayControl.disable({ emitEvent: false });
5662
+ this.textControl.disable({ emitEvent: false });
5670
5663
  }
5671
5664
  else {
5672
- this.dayControl.enable({ emitEvent: false });
5665
+ this.textControl.enable({ emitEvent: false });
5673
5666
  }
5674
5667
  this._disabling = false;
5675
5668
  this.markForCheck();
@@ -5686,12 +5679,12 @@
5686
5679
  .locale(this.locale) // set as time as locale time
5687
5680
  .minute(0).seconds(0).millisecond(0) // Reset hour
5688
5681
  .utc(true);
5689
- dateStr = this.dateAdapter.format(date, this.dayPattern) || null;
5682
+ dateStr = this.dateAdapter.format(date, this.datePattern) || null;
5690
5683
  }
5691
- if (this.dayControl.value !== dateStr) {
5684
+ if (this.textControl.value !== dateStr) {
5692
5685
  // DEBUG
5693
5686
  //console.debug("[mat-date] onDatePickerChange() new value:", dateStr);
5694
- this.dayControl.setValue(dateStr, {
5687
+ this.textControl.setValue(dateStr, {
5695
5688
  emitEvent: true // Will call onFormChange
5696
5689
  });
5697
5690
  }
@@ -5746,7 +5739,7 @@
5746
5739
  });
5747
5740
  };
5748
5741
  MatDate.prototype.clear = function () {
5749
- this.dayControl.patchValue(null, { emitEvent: false });
5742
+ this.textControl.patchValue(null, { emitEvent: false });
5750
5743
  this.formControl.setValue(null, { emitEvent: false });
5751
5744
  this._onChangeCallback(null);
5752
5745
  this.markAsTouched();
@@ -5755,43 +5748,70 @@
5755
5748
  /* -- private method -- */
5756
5749
  MatDate.prototype.updatePattern = function (pattern) {
5757
5750
  pattern = pattern !== 'COMMON.DATE_PATTERN' ? pattern : 'L';
5758
- if (this.displayPattern !== pattern) {
5759
- this.displayPattern = pattern;
5760
- this.dayPattern = pattern;
5751
+ if (this.datePattern !== pattern) {
5752
+ this.datePattern = pattern;
5761
5753
  this.markForCheck();
5762
5754
  }
5763
5755
  };
5764
5756
  MatDate.prototype.checkIfTouched = function (opts) {
5765
- if (this.dayControl.touched) {
5757
+ if (this.textControl.touched) {
5766
5758
  this._onTouchedCallback();
5767
5759
  if (!opts || opts.emitEvent !== false) {
5768
5760
  this.markForCheck();
5769
5761
  }
5770
5762
  }
5771
5763
  };
5772
- MatDate.prototype.onFormChange = function (dayStr) {
5764
+ MatDate.prototype.onFormChange = function (value) {
5773
5765
  if (this._writing)
5774
5766
  return; // Skip if call by self
5775
5767
  this._writing = true;
5776
- if (this.dayControl.invalid) {
5777
- this.formControl.markAsPending({ onlySelf: true });
5778
- this.formControl.setErrors(Object.assign(Object.assign({}, this.formControl.errors), this.dayControl.errors));
5779
- this.formControl.markAsDirty();
5780
- this._writing = false;
5781
- return;
5782
- }
5783
- // Make to remove placeholder chars
5784
- while (dayStr && dayStr.indexOf(this.placeholderChar) !== -1) {
5785
- dayStr = dayStr.replace(this.placeholderChar, '');
5768
+ // DEBUG
5769
+ //console.debug(`[mat-date-time] onFormChange() from event: ${event} - controls values: `, [dayStr, time]);
5770
+ /*if (this.dayControl.invalid) {
5771
+ this.formControl.markAsPending({onlySelf: true});
5772
+ this.formControl.setErrors({
5773
+ ...this.formControl.errors,
5774
+ ...this.dayControl.errors
5775
+ });
5776
+ this.formControl.markAsDirty();
5777
+ this._writing = false;
5778
+ return;
5779
+ }*/
5780
+ if (value) {
5781
+ // Make to remove placeholder chars
5782
+ while (value.indexOf(this.placeholderChar) !== -1) {
5783
+ value = value.replace(this.placeholderChar, '');
5784
+ }
5785
+ // Force '0' for empty month (otherwise moment will use the current month)
5786
+ value = value.replace('//', '/0/')
5787
+ // Force '0' for empty year (otherwise moment will use the current year)
5788
+ .replace(/\/$/, '/0');
5786
5789
  }
5787
- // Parse day
5788
- var dayDate = dayStr && this.dateAdapter.parse(dayStr, this.dayPattern);
5790
+ // Parse date (strict = false)
5791
+ var date = isNotNilOrBlank(value) && this.dateAdapter.parse(value, this.datePattern) || null;
5789
5792
  // Move to the expected TZ, and keep the local hour (= midnight) to have midnight at local time
5790
- dayDate = dayDate && (this.timezone ? dayDate.tz(this.timezone, true) : dayDate);
5791
- dayDate = dayDate && dayDate
5793
+ date = date && (this.timezone ? date.tz(this.timezone, true) : date) || null;
5794
+ date = date && date
5792
5795
  .startOf('day') // Reset hour
5793
- .utc(); // Convert to UTC (avoid TZ offset in final string)
5794
- this.emitChange(dayDate);
5796
+ .utc() // Convert to UTC (avoid TZ offset in final string)
5797
+ || null;
5798
+ // Convert to model value (ISO date string)
5799
+ // IMPORTANT: If date is invalid, then keep the invalid string value
5800
+ // to allow SharedValidators.validDate() to raise an error
5801
+ var formControlValue = date && date.isValid() ? toDateISOString(date) : (value || null);
5802
+ if (this.formControl.value !== formControlValue) {
5803
+ // DEBUG
5804
+ //console.debug('[mat-date] Emit new value: ' + dateStr);
5805
+ // Apply to form control. => Will call writeValue()
5806
+ // NOT NEED, because a formControl should NOT be used by multiple fields
5807
+ //this.formControl.setValue(dateStr, {emitEvent: false})
5808
+ // Changes comes from inside function: use the callback
5809
+ this._onChangeCallback(formControlValue);
5810
+ // Check if need to update controls
5811
+ this.checkIfTouched();
5812
+ }
5813
+ // Force the day control to update its validity (same errors as formControl - see ngOnInit())
5814
+ this.textControl.updateValueAndValidity();
5795
5815
  this._writing = false;
5796
5816
  };
5797
5817
  MatDate.prototype.waitKeyboardHide = function (waitKeyboardDelay) {
@@ -5818,21 +5838,6 @@
5818
5838
  });
5819
5839
  });
5820
5840
  };
5821
- MatDate.prototype.emitChange = function (value) {
5822
- // Get the model value
5823
- var dateStr = toDateISOString(value) || null;
5824
- if (this.formControl.value !== dateStr) {
5825
- // DEBUG
5826
- //console.debug('[mat-date] Emit new value: ' + dateStr);
5827
- // Apply to form control. => Will call writeValue()
5828
- // NOT NEED, because a formControl should NOT be used by multiple fields
5829
- //this.formControl.setValue(dateStr, {emitEvent: false})
5830
- // Changes comes from inside function: use the callback
5831
- this._onChangeCallback(dateStr);
5832
- // Check if need to update controls
5833
- this.checkIfTouched();
5834
- }
5835
- };
5836
5841
  MatDate.prototype.updateTabIndex = function () {
5837
5842
  var _this = this;
5838
5843
  if (isNil(this._tabindex) || this._tabindex === -1)
@@ -5846,7 +5851,7 @@
5846
5851
  });
5847
5852
  };
5848
5853
  MatDate.prototype.markAsTouched = function (opts) {
5849
- this.dayControl.markAsTouched(opts);
5854
+ this.textControl.markAsTouched(opts);
5850
5855
  this._onTouchedCallback();
5851
5856
  this.markForCheck();
5852
5857
  };
@@ -5861,16 +5866,16 @@
5861
5866
  MatDate.decorators = [
5862
5867
  { type: i0.Component, args: [{
5863
5868
  selector: 'mat-date-field',
5864
- template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\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 -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\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\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\">\n <ng-container [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</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 </ng-container>\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",
5869
+ template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\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\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\">\n <ng-container [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 </ng-container>\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",
5865
5870
  providers: [
5866
- DEFAULT_VALUE_ACCESSOR$5,
5871
+ DEFAULT_VALUE_ACCESSOR,
5867
5872
  ],
5868
5873
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
5869
5874
  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%}"]
5870
5875
  },] }
5871
5876
  ];
5872
5877
  MatDate.ctorParameters = function () { return [
5873
- { type: i1$3.DateAdapter },
5878
+ { type: i1$1.MomentDateAdapter },
5874
5879
  { type: i1$2.TranslateService },
5875
5880
  { type: i1.FormBuilder },
5876
5881
  { type: i0.ChangeDetectorRef },
@@ -5897,16 +5902,16 @@
5897
5902
  matInputs: [{ type: i0.ViewChildren, args: ['matInput',] }]
5898
5903
  };
5899
5904
 
5900
- var DEFAULT_VALUE_ACCESSOR$4 = {
5905
+ var DEFAULT_VALUE_ACCESSOR$1 = {
5901
5906
  provide: i1.NG_VALUE_ACCESSOR,
5902
5907
  useExisting: i0.forwardRef(function () { return MatDateTime; }),
5903
5908
  multi: true
5904
5909
  };
5905
- var DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
5910
+ var DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
5906
5911
  var HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
5907
- var HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
5908
- var noop$5 = function () { };
5909
- var ɵ0$8 = noop$5;
5912
+ var HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
5913
+ var noop$3 = function () { };
5914
+ var ɵ0$4 = noop$3;
5910
5915
  var MatDateTime = /** @class */ (function () {
5911
5916
  function MatDateTime(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
5912
5917
  this.dateAdapter = dateAdapter;
@@ -5915,14 +5920,14 @@
5915
5920
  this.cd = cd;
5916
5921
  this.keyboard = keyboard;
5917
5922
  this.formGroupDir = formGroupDir;
5918
- this._onChangeCallback = noop$5;
5919
- this._onTouchedCallback = noop$5;
5923
+ this._onChangeCallback = noop$3;
5924
+ this._onTouchedCallback = noop$3;
5920
5925
  this._subscription = new rxjs.Subscription();
5921
5926
  this._writing = true;
5922
5927
  this._disabling = false;
5923
5928
  this._readonly = false;
5924
- this.dayMask = DAY_MASK$1;
5925
- this.hourMask = HOUR_MASK$1;
5929
+ this.dayMask = DAY_MASK;
5930
+ this.hourMask = HOUR_MASK;
5926
5931
  this.floatLabel = 'auto';
5927
5932
  this.compact = false;
5928
5933
  this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
@@ -6281,14 +6286,14 @@
6281
6286
  selector: 'mat-date-time-field',
6282
6287
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\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\">\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 [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 [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",
6283
6288
  providers: [
6284
- DEFAULT_VALUE_ACCESSOR$4,
6289
+ DEFAULT_VALUE_ACCESSOR$1,
6285
6290
  ],
6286
6291
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6287
6292
  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}.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%}"]
6288
6293
  },] }
6289
6294
  ];
6290
6295
  MatDateTime.ctorParameters = function () { return [
6291
- { type: i1$3.DateAdapter },
6296
+ { type: i1$1.MomentDateAdapter },
6292
6297
  { type: i1$2.TranslateService },
6293
6298
  { type: i1.FormBuilder },
6294
6299
  { type: i0.ChangeDetectorRef },
@@ -6315,15 +6320,15 @@
6315
6320
  matInputs: [{ type: i0.ViewChildren, args: ['matInput',] }]
6316
6321
  };
6317
6322
 
6318
- var DEFAULT_VALUE_ACCESSOR$3 = {
6323
+ var DEFAULT_VALUE_ACCESSOR$2 = {
6319
6324
  provide: i1.NG_VALUE_ACCESSOR,
6320
6325
  useExisting: i0.forwardRef(function () { return MatDateShort; }),
6321
6326
  multi: true
6322
6327
  };
6323
- var DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
6328
+ var DAY_MASK$1 = [/\d/, /\d/, /\d/, /\d/];
6324
6329
  var noop$4 = function () {
6325
6330
  };
6326
- var ɵ0$7 = noop$4;
6331
+ var ɵ0$5 = noop$4;
6327
6332
  var MatDateShort = /** @class */ (function () {
6328
6333
  function MatDateShort(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
6329
6334
  this.dateAdapter = dateAdapter;
@@ -6336,7 +6341,7 @@
6336
6341
  this._onTouchedCallback = noop$4;
6337
6342
  this.writing = true;
6338
6343
  this.disabling = false;
6339
- this.dayMask = DAY_MASK;
6344
+ this.dayMask = DAY_MASK$1;
6340
6345
  this.disabled = false;
6341
6346
  this.floatLabel = 'auto';
6342
6347
  this.readonly = false;
@@ -6613,7 +6618,7 @@
6613
6618
  selector: 'mat-date-short-field',
6614
6619
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\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.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('validDate')\" translate>ERROR.FIELD_NOT_VALID_DATE</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateIsAfter')\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateRange')\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMaxDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMinDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngIf=\"formControl.hasError('msg')\">{{formControl.errors.msg}}</mat-error>\n <ng-content select=\"mat-error\"></ng-content>\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",
6615
6620
  providers: [
6616
- DEFAULT_VALUE_ACCESSOR$3,
6621
+ DEFAULT_VALUE_ACCESSOR$2,
6617
6622
  ],
6618
6623
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6619
6624
  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%}"]
@@ -6684,16 +6689,16 @@
6684
6689
  },] }
6685
6690
  ];
6686
6691
 
6687
- var DEFAULT_VALUE_ACCESSOR$2 = {
6692
+ var DEFAULT_VALUE_ACCESSOR$3 = {
6688
6693
  provide: i1.NG_VALUE_ACCESSOR,
6689
6694
  useExisting: i0.forwardRef(function () { return MatDuration; }),
6690
6695
  multi: true
6691
6696
  };
6692
6697
  var HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
6693
- var HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
6694
- var noop$3 = function () {
6698
+ var HOUR_MASK$1 = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
6699
+ var noop$5 = function () {
6695
6700
  };
6696
- var ɵ0$6 = noop$3;
6701
+ var ɵ0$6 = noop$5;
6697
6702
  var MatDuration = /** @class */ (function () {
6698
6703
  function MatDuration(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
6699
6704
  this.dateAdapter = dateAdapter;
@@ -6702,11 +6707,11 @@
6702
6707
  this.cd = cd;
6703
6708
  this.formGroupDir = formGroupDir;
6704
6709
  this._subscription = new rxjs.Subscription();
6705
- this._onChangeCallback = noop$3;
6706
- this._onTouchedCallback = noop$3;
6710
+ this._onChangeCallback = noop$5;
6711
+ this._onTouchedCallback = noop$5;
6707
6712
  this.writing = true;
6708
6713
  this.disabling = false;
6709
- this.hourMask = HOUR_MASK;
6714
+ this.hourMask = HOUR_MASK$1;
6710
6715
  this.disabled = false;
6711
6716
  this.floatLabel = 'auto';
6712
6717
  this.readonly = false;
@@ -6899,7 +6904,7 @@
6899
6904
  selector: 'mat-duration-field',
6900
6905
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\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 [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",
6901
6906
  providers: [
6902
- DEFAULT_VALUE_ACCESSOR$2,
6907
+ DEFAULT_VALUE_ACCESSOR$3,
6903
6908
  ],
6904
6909
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6905
6910
  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%}"]
@@ -6959,22 +6964,22 @@
6959
6964
  },] }
6960
6965
  ];
6961
6966
 
6962
- var DEFAULT_VALUE_ACCESSOR$1 = {
6967
+ var DEFAULT_VALUE_ACCESSOR$4 = {
6963
6968
  provide: i1.NG_VALUE_ACCESSOR,
6964
6969
  useExisting: i0.forwardRef(function () { return MatBooleanField; }),
6965
6970
  multi: true
6966
6971
  };
6967
- var noop$2 = function () {
6972
+ var noop$6 = function () {
6968
6973
  };
6969
- var ɵ0$5 = noop$2;
6974
+ var ɵ0$7 = noop$6;
6970
6975
  var MatBooleanField = /** @class */ (function () {
6971
6976
  function MatBooleanField(translate, formBuilder, cd, formGroupDir) {
6972
6977
  this.translate = translate;
6973
6978
  this.formBuilder = formBuilder;
6974
6979
  this.cd = cd;
6975
6980
  this.formGroupDir = formGroupDir;
6976
- this._onChangeCallback = noop$2;
6977
- this._onTouchedCallback = noop$2;
6981
+ this._onChangeCallback = noop$6;
6982
+ this._onTouchedCallback = noop$6;
6978
6983
  this._writing = false;
6979
6984
  this.showRadio = false;
6980
6985
  this.disabled = false;
@@ -7149,7 +7154,7 @@
7149
7154
  selector: 'mat-boolean-field',
7150
7155
  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>{{(formControl.value == null && 'COMMON.EMPTY_OPTION' || (formControl.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 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 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===undefined\"\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 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",
7151
7156
  providers: [
7152
- DEFAULT_VALUE_ACCESSOR$1
7157
+ DEFAULT_VALUE_ACCESSOR$4
7153
7158
  ],
7154
7159
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
7155
7160
  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}"]
@@ -7236,7 +7241,6 @@
7236
7241
  return MatNumpadEvent;
7237
7242
  }(KeyboardEvent));
7238
7243
 
7239
- exports.AnimationState = void 0;
7240
7244
  (function (AnimationState) {
7241
7245
  AnimationState["ENTER"] = "enter";
7242
7246
  AnimationState["ENTER_INPUT"] = "enter-input";
@@ -7404,7 +7408,7 @@
7404
7408
  };
7405
7409
  return MatNumpadDomService;
7406
7410
  }());
7407
- 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" });
7411
+ 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" });
7408
7412
  MatNumpadDomService.decorators = [
7409
7413
  { type: i0.Injectable, args: [{
7410
7414
  providedIn: 'root'
@@ -7810,7 +7814,7 @@
7810
7814
  },] }
7811
7815
  ];
7812
7816
 
7813
- var DEFAULT_VALUE_ACCESSOR = {
7817
+ var DEFAULT_VALUE_ACCESSOR$5 = {
7814
7818
  provide: i1.NG_VALUE_ACCESSOR,
7815
7819
  useExisting: i0.forwardRef(function () { return MatSwipeField; }),
7816
7820
  multi: true
@@ -8130,7 +8134,7 @@
8130
8134
  { type: i0.Component, args: [{
8131
8135
  selector: 'mat-swipe-field',
8132
8136
  template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\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",
8133
- providers: [DEFAULT_VALUE_ACCESSOR],
8137
+ providers: [DEFAULT_VALUE_ACCESSOR$5],
8134
8138
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
8135
8139
  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}"]
8136
8140
  },] }
@@ -8191,14 +8195,14 @@
8191
8195
  },] }
8192
8196
  ];
8193
8197
 
8194
- var noop$1 = function () { };
8195
- var ɵ0$4 = noop$1;
8198
+ var noop$7 = function () { };
8199
+ var ɵ0$8 = noop$7;
8196
8200
  var MatChipsField = /** @class */ (function () {
8197
8201
  function MatChipsField(cd, formGroupDir) {
8198
8202
  this.cd = cd;
8199
8203
  this.formGroupDir = formGroupDir;
8200
- this._onChangeCallback = noop$1;
8201
- this._onTouchedCallback = noop$1;
8204
+ this._onChangeCallback = noop$7;
8205
+ this._onTouchedCallback = noop$7;
8202
8206
  this.logPrefix = '[mat-chips] ';
8203
8207
  this.formControlName = null;
8204
8208
  this.required = false;
@@ -9169,7 +9173,7 @@
9169
9173
  };
9170
9174
  return ProgressBarService;
9171
9175
  }());
9172
- ProgressBarService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
9176
+ ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
9173
9177
  ProgressBarService.decorators = [
9174
9178
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9175
9179
  ];
@@ -9216,7 +9220,7 @@
9216
9220
  };
9217
9221
  return AppGestureConfig;
9218
9222
  }(i1$6.HammerGestureConfig));
9219
- AppGestureConfig.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
9223
+ AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
9220
9224
  AppGestureConfig.decorators = [
9221
9225
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9222
9226
  ];
@@ -9483,7 +9487,7 @@
9483
9487
  };
9484
9488
  return MatPaginatorI18n;
9485
9489
  }(paginator.MatPaginatorIntl));
9486
- MatPaginatorI18n.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
9490
+ MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$2.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
9487
9491
  MatPaginatorI18n.decorators = [
9488
9492
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9489
9493
  ];
@@ -9575,17 +9579,17 @@
9575
9579
  return rgbArrayToHex(rgb.map(function (v) { return 255 - v; }));
9576
9580
  }
9577
9581
 
9578
- var noop = function () {
9582
+ var noop$8 = function () {
9579
9583
  };
9580
- var ɵ0$3 = noop;
9584
+ var ɵ0$9 = noop$8;
9581
9585
  var AppFormField = /** @class */ (function () {
9582
9586
  function AppFormField(translate, cd, injector, formGroupDir) {
9583
9587
  this.translate = translate;
9584
9588
  this.cd = cd;
9585
9589
  this.injector = injector;
9586
9590
  this.formGroupDir = formGroupDir;
9587
- this._onChangeCallback = noop;
9588
- this._onTouchedCallback = noop;
9591
+ this._onChangeCallback = noop$8;
9592
+ this._onTouchedCallback = noop$8;
9589
9593
  this.readonly = false;
9590
9594
  this.compact = false;
9591
9595
  this.floatLabel = 'auto';
@@ -10143,7 +10147,7 @@
10143
10147
  };
10144
10148
  return AudioProvider;
10145
10149
  }(StartableService));
10146
- 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" });
10150
+ 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" });
10147
10151
  AudioProvider.decorators = [
10148
10152
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
10149
10153
  ];
@@ -10253,7 +10257,7 @@
10253
10257
  };
10254
10258
  return Hotkeys;
10255
10259
  }());
10256
- 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" });
10260
+ 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" });
10257
10261
  Hotkeys.decorators = [
10258
10262
  { type: i0.Injectable, args: [{
10259
10263
  providedIn: 'root'
@@ -10458,7 +10462,7 @@
10458
10462
  return Base64ImageReader;
10459
10463
  }());
10460
10464
 
10461
- var uuidv4$1 = uuidv4Imported__namespace;
10465
+ var uuidv4 = uuidv4Imported__namespace;
10462
10466
  var FileService = /** @class */ (function () {
10463
10467
  function FileService(platform,
10464
10468
  //private transfer: FileTransfer,
@@ -10504,7 +10508,7 @@
10504
10508
  lastSlashIndex = source.lastIndexOf('/');
10505
10509
  if (lastSlashIndex === -1)
10506
10510
  throw new Error('Invalid URL: ' + source);
10507
- fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4$1();
10511
+ fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();
10508
10512
  if (!(responseType === 'file' && this.canUseFileSystem)) return [3 /*break*/, 4];
10509
10513
  console.warn("WARN: [file] Fetching image {" + source + "} in local file...");
10510
10514
  targetFilePath = this._imageDirectory + fileName;
@@ -10567,7 +10571,7 @@
10567
10571
  };
10568
10572
  return FileService;
10569
10573
  }());
10570
- 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" });
10574
+ 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" });
10571
10575
  FileService.decorators = [
10572
10576
  { type: i0.Injectable, args: [{
10573
10577
  providedIn: 'root',
@@ -10734,7 +10738,7 @@
10734
10738
  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
10735
10739
 
10736
10740
  var scrypt = require('scrypt-async');
10737
- var sha256$1 = require('hash.js/lib/hash/sha/256');
10741
+ var sha256 = require('hash.js/lib/hash/sha/256');
10738
10742
  var sha512 = require('hash.js/lib/hash/sha/512');
10739
10743
  var nacl = {
10740
10744
  sign: tweetnacl.sign,
@@ -10840,7 +10844,7 @@
10840
10844
  * Hash (using SHA256) a message
10841
10845
  */
10842
10846
  CryptoService.prototype.sha256 = function (message) {
10843
- return sha256$1().update(message).digest('hex');
10847
+ return sha256().update(message).digest('hex');
10844
10848
  };
10845
10849
  /**
10846
10850
  * Hash (using SHA512) a message
@@ -10854,7 +10858,7 @@
10854
10858
  };
10855
10859
  return CryptoService;
10856
10860
  }());
10857
- CryptoService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
10861
+ CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
10858
10862
  CryptoService.decorators = [
10859
10863
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
10860
10864
  ];
@@ -11724,7 +11728,7 @@
11724
11728
  onRefresh: [{ type: i0.Input }]
11725
11729
  };
11726
11730
 
11727
- var moment$4 = momentImported__namespace;
11731
+ var moment$3 = momentImported__namespace;
11728
11732
  var SETTINGS_STORAGE_KEY = 'settings';
11729
11733
  var SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
11730
11734
  // fixme: this constant points to static environment
@@ -12026,11 +12030,11 @@
12026
12030
  if (!feature) {
12027
12031
  feature = {
12028
12032
  name: featureName.toLowerCase(),
12029
- lastSyncDate: moment$4().toISOString()
12033
+ lastSyncDate: moment$3().toISOString()
12030
12034
  };
12031
12035
  }
12032
12036
  else {
12033
- feature.lastSyncDate = moment$4().toISOString();
12037
+ feature.lastSyncDate = moment$3().toISOString();
12034
12038
  }
12035
12039
  this.saveOfflineFeature(feature);
12036
12040
  };
@@ -12224,7 +12228,7 @@
12224
12228
  if (!page || !page.title || !page.path)
12225
12229
  throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
12226
12230
  // Set time
12227
- page.time = page.time || moment$4();
12231
+ page.time = page.time || moment$3();
12228
12232
  // Clean the title (remove <small> tags)
12229
12233
  if (!opts || opts.removeTitleSmallTag !== false) {
12230
12234
  var tagIndex = page.title.indexOf('</small>');
@@ -12241,18 +12245,18 @@
12241
12245
  };
12242
12246
  return LocalSettingsService;
12243
12247
  }(StartableService));
12244
- 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" });
12248
+ 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" });
12245
12249
  LocalSettingsService.decorators = [
12246
12250
  { type: i0.Injectable, args: [{
12247
- providedIn: 'root',
12248
- deps: [APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS]
12251
+ providedIn: 'root'
12252
+ //deps: [APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS]
12249
12253
  },] }
12250
12254
  ];
12251
12255
  LocalSettingsService.ctorParameters = function () { return [
12252
12256
  { type: i1$2.TranslateService },
12253
12257
  { type: i1$5.Platform },
12254
12258
  { type: i3$2.Storage },
12255
- { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
12259
+ { type: Environment, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
12256
12260
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_LOCAL_SETTINGS,] }] },
12257
12261
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_LOCAL_SETTINGS_OPTIONS,] }] }
12258
12262
  ]; };
@@ -13122,7 +13126,7 @@
13122
13126
  };
13123
13127
  return NetworkService;
13124
13128
  }(StartableService));
13125
- 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" });
13129
+ 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" });
13126
13130
  NetworkService.decorators = [
13127
13131
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
13128
13132
  ];
@@ -13142,7 +13146,7 @@
13142
13146
  { type: i1$5.ToastController, decorators: [{ type: i0.Optional }] }
13143
13147
  ]; };
13144
13148
 
13145
- var ErrorCodes$2 = {
13149
+ var ErrorCodes = {
13146
13150
  UNKNOWN_ERROR: 0,
13147
13151
  LOAD_ACCOUNT_ERROR: 1,
13148
13152
  BAD_PASSWORD: 2,
@@ -13559,7 +13563,7 @@
13559
13563
  case 13:
13560
13564
  err_1 = _b.sent();
13561
13565
  console.error(err_1);
13562
- throw { code: ErrorCodes$2.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err_1 };
13566
+ throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err_1 };
13563
13567
  case 14:
13564
13568
  // Emit update event
13565
13569
  if (!opts || opts.emitEvent !== false) {
@@ -14336,7 +14340,7 @@
14336
14340
  }(StartableService));
14337
14341
  EntitiesStorage.TRASH_PREFIX = 'Trash#';
14338
14342
  EntitiesStorage.REMOTE_PREFIX = 'Remote#';
14339
- 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" });
14343
+ 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" });
14340
14344
  EntitiesStorage.decorators = [
14341
14345
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
14342
14346
  ];
@@ -14492,10 +14496,10 @@
14492
14496
  function referentialsToString(values, properties, separator) {
14493
14497
  return (values || []).map(function (v) { return referentialToString(v, properties); }).join(separator || ', ');
14494
14498
  }
14495
- var ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
14499
+ var ɵ0$a = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
14496
14500
  var StatusList = Object.freeze([
14497
14501
  {
14498
- id: ɵ0$2,
14502
+ id: ɵ0$a,
14499
14503
  icon: 'checkmark',
14500
14504
  label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
14501
14505
  },
@@ -14798,7 +14802,7 @@
14798
14802
  (data.lastName || '')) || '';
14799
14803
  }
14800
14804
 
14801
- var uuidv4 = uuidv4Imported__namespace;
14805
+ var uuidv4$1 = uuidv4Imported__namespace;
14802
14806
  var _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
14803
14807
  var NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
14804
14808
  /**
@@ -14842,7 +14846,7 @@
14842
14846
  // Skip if not tracked
14843
14847
  if (!context || !context.tracked)
14844
14848
  return forward(operation);
14845
- var id = context.serializationKey || uuidv4();
14849
+ var id = context.serializationKey || uuidv4$1();
14846
14850
  console.debug("[apollo-tracker-link] Watching tracked query {" + operation.operationName + "#" + id + "}");
14847
14851
  // Clean context, before calling JSON.stringify (remove unused attributes)
14848
14852
  var cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
@@ -15473,14 +15477,14 @@
15473
15477
  mutationLinks = void 0;
15474
15478
  // Add queue to store tracked queries, when offline
15475
15479
  if (enableTrackMutationQueries) {
15476
- serializingLink = new SerializingLink__default["default"]();
15480
+ serializingLink = new SerializingLink__default['default']();
15477
15481
  trackerLink = createTrackerLink({
15478
15482
  storage: storage,
15479
15483
  onNetworkStatusChange: this._networkStatusChanged$,
15480
15484
  debounce: 1000,
15481
15485
  debug: true
15482
15486
  });
15483
- queueLink_1 = new QueueLink__default["default"]();
15487
+ queueLink_1 = new QueueLink__default['default']();
15484
15488
  this.registerSubscription(this._networkStatusChanged$
15485
15489
  .subscribe(function (type) {
15486
15490
  // Network is offline: start buffering into queue
@@ -15495,7 +15499,7 @@
15495
15499
  }
15496
15500
  }));
15497
15501
  mutationLinks = [
15498
- loggerLink__default["default"],
15502
+ loggerLink__default['default'],
15499
15503
  queueLink_1,
15500
15504
  trackerLink,
15501
15505
  queueLink_1,
@@ -15602,7 +15606,7 @@
15602
15606
  (err.networkError && ((err.networkError.error && this.toAppError(err.networkError.error))
15603
15607
  || this.toAppError(err.networkError)
15604
15608
  || (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))
15605
- || this.createAppErrorByCode(ErrorCodes$2.UNKNOWN_NETWORK_ERROR)))
15609
+ || this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)))
15606
15610
  // If graphQL: try to convert the first error found
15607
15611
  || (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))
15608
15612
  || this.toAppError(err)
@@ -15610,7 +15614,7 @@
15610
15614
  || (err.graphQLErrors && err.graphQLErrors[0])
15611
15615
  || err;
15612
15616
  console.error('[graphql] ' + (error && error.message || error), error.stack || '');
15613
- if (error && error.code === ErrorCodes$2.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
15617
+ if (error && error.code === ErrorCodes.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
15614
15618
  console.error('[graphql] original error: ' + err.networkError.message);
15615
15619
  this.onNetworkError.next(error);
15616
15620
  }
@@ -15646,7 +15650,7 @@
15646
15650
  return 'ERROR.UNAUTHORIZED';
15647
15651
  case ServerErrorCodes.FORBIDDEN:
15648
15652
  return 'ERROR.FORBIDDEN';
15649
- case ErrorCodes$2.UNKNOWN_NETWORK_ERROR:
15653
+ case ErrorCodes.UNKNOWN_NETWORK_ERROR:
15650
15654
  return 'ERROR.UNKNOWN_NETWORK_ERROR';
15651
15655
  case ServerErrorCodes.BAD_UPDATE_DATE:
15652
15656
  return 'ERROR.BAD_UPDATE_DATE';
@@ -15678,7 +15682,7 @@
15678
15682
  };
15679
15683
  return GraphqlService;
15680
15684
  }(StartableService));
15681
- 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" });
15685
+ 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" });
15682
15686
  GraphqlService.decorators = [
15683
15687
  { type: i0.Injectable, args: [{
15684
15688
  providedIn: 'root'
@@ -15695,7 +15699,7 @@
15695
15699
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
15696
15700
  ]; };
15697
15701
 
15698
- var sha256 = require('hash.js/lib/hash/sha/256');
15702
+ var sha256$1 = require('hash.js/lib/hash/sha/256');
15699
15703
  var BaseGraphqlServiceOptions = /** @class */ (function () {
15700
15704
  function BaseGraphqlServiceOptions() {
15701
15705
  }
@@ -15865,8 +15869,8 @@
15865
15869
  };
15866
15870
  /* -- protected methods -- */
15867
15871
  BaseGraphqlService.prototype.computeMutableWatchQueryId = function (opts) {
15868
- var queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
15869
- var variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
15872
+ var queryName = opts.queryName || sha256$1().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
15873
+ var variablesKey = opts.variables && sha256$1().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
15870
15874
  return [queryName, opts.arrayFieldName, variablesKey].join('|');
15871
15875
  };
15872
15876
  BaseGraphqlService.prototype.findMutableWatchQueries = function (opts) {
@@ -15939,19 +15943,19 @@
15939
15943
  /* ------------------------------------
15940
15944
  * GraphQL queries
15941
15945
  * ------------------------------------*/
15942
- var Fragments$1 = {
15943
- 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 }"]))),
15944
- settings: core.gql(templateObject_2$4 || (templateObject_2$4 = __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 }"])))
15946
+ var Fragments = {
15947
+ 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 }"]))),
15948
+ 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 }"])))
15945
15949
  };
15946
15950
  // Load account query
15947
- var LoadQuery$1 = core.gql(templateObject_3$3 || (templateObject_3$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$1.account, Fragments$1.settings);
15951
+ 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);
15948
15952
  // Check email query
15949
- var IsEmailExistsQuery = core.gql(templateObject_4$3 || (templateObject_4$3 = __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"])));
15953
+ 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"])));
15950
15954
  // Save (create or update) account mutation
15951
15955
  var AccountMutations = {
15952
- 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),
15953
- 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),
15954
- 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)
15956
+ 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),
15957
+ 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),
15958
+ 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)
15955
15959
  };
15956
15960
  // Sent confirmation email
15957
15961
  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"])));
@@ -16319,7 +16323,7 @@
16319
16323
  error_3 = _b.sent();
16320
16324
  console.error(error_3);
16321
16325
  this.resetData();
16322
- throw { code: ErrorCodes$2.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
16326
+ throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
16323
16327
  case 4:
16324
16328
  // Store pubkey+keypair
16325
16329
  this._cache.pubkey = Base58.encode(keypair.publicKey);
@@ -16355,7 +16359,7 @@
16355
16359
  return [3 /*break*/, 18];
16356
16360
  case 11:
16357
16361
  err_1 = _b.sent();
16358
- if (!(err_1 && +(err_1.code) === ErrorCodes$2.LOAD_ACCOUNT_ERROR)) return [3 /*break*/, 17];
16362
+ if (!(err_1 && +(err_1.code) === ErrorCodes.LOAD_ACCOUNT_ERROR)) return [3 /*break*/, 17];
16359
16363
  if (!(data.username.indexOf('@') !== -1)) return [3 /*break*/, 16];
16360
16364
  isEmailExists = void 0;
16361
16365
  _b.label = 12;
@@ -16371,12 +16375,12 @@
16371
16375
  case 15:
16372
16376
  // Email not exists (no account)
16373
16377
  if (!isEmailExists) {
16374
- throw { code: ErrorCodes$2.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
16378
+ throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
16375
16379
  }
16376
16380
  _b.label = 16;
16377
16381
  case 16:
16378
16382
  // Email exists, so error = 'bad password'
16379
- throw { code: ErrorCodes$2.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
16383
+ throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
16380
16384
  case 17: throw err_1; // resend the first error
16381
16385
  case 18:
16382
16386
  _b.trys.push([18, 20, , 21]);
@@ -16572,8 +16576,8 @@
16572
16576
  _b.label = 3;
16573
16577
  case 3: return [3 /*break*/, 6];
16574
16578
  case 4: return [4 /*yield*/, this.graphql.query({
16575
- query: LoadQuery$1,
16576
- error: { code: ErrorCodes$2.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
16579
+ query: LoadQuery,
16580
+ error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
16577
16581
  fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
16578
16582
  })];
16579
16583
  case 5:
@@ -16611,7 +16615,7 @@
16611
16615
  case 1:
16612
16616
  isEmailExists = _b.sent();
16613
16617
  if (isEmailExists) {
16614
- throw { code: ErrorCodes$2.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
16618
+ throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
16615
16619
  }
16616
16620
  return [2 /*return*/];
16617
16621
  }
@@ -16661,7 +16665,7 @@
16661
16665
  locale: locale
16662
16666
  },
16663
16667
  error: {
16664
- code: ErrorCodes$2.SENT_CONFIRMATION_EMAIL_FAILED,
16668
+ code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,
16665
16669
  message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'
16666
16670
  }
16667
16671
  })];
@@ -16684,7 +16688,7 @@
16684
16688
  code: code
16685
16689
  },
16686
16690
  error: {
16687
- code: ErrorCodes$2.CONFIRM_EMAIL_FAILED,
16691
+ code: ErrorCodes.CONFIRM_EMAIL_FAILED,
16688
16692
  message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'
16689
16693
  }
16690
16694
  })];
@@ -16784,7 +16788,7 @@
16784
16788
  throw error_7;
16785
16789
  console.error(error_7);
16786
16790
  throw {
16787
- code: ErrorCodes$2.LOAD_ACCOUNT_ERROR,
16791
+ code: ErrorCodes.LOAD_ACCOUNT_ERROR,
16788
16792
  message: 'ERROR.LOAD_ACCOUNT_ERROR'
16789
16793
  };
16790
16794
  case 6: return [2 /*return*/];
@@ -16995,7 +16999,7 @@
16995
16999
  case 1:
16996
17000
  existingAccount = _b.sent();
16997
17001
  if (!existingAccount || !existingAccount.updateDate) {
16998
- throw { code: ErrorCodes$2.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
17002
+ throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
16999
17003
  }
17000
17004
  this.copyIdAndUpdateDate(existingAccount, account);
17001
17005
  _b.label = 2;
@@ -17007,7 +17011,7 @@
17007
17011
  mutation: isNew ? AccountMutations.create : AccountMutations.save,
17008
17012
  variables: { data: json },
17009
17013
  error: {
17010
- code: ErrorCodes$2.SAVE_ACCOUNT_ERROR,
17014
+ code: ErrorCodes.SAVE_ACCOUNT_ERROR,
17011
17015
  message: 'ERROR.SAVE_ACCOUNT_ERROR'
17012
17016
  }
17013
17017
  })];
@@ -17041,7 +17045,7 @@
17041
17045
  mutation: AccountMutations.saveSettings,
17042
17046
  variables: { data: json },
17043
17047
  error: {
17044
- code: ErrorCodes$2.SAVE_SETTINGS_ERROR,
17048
+ code: ErrorCodes.SAVE_SETTINGS_ERROR,
17045
17049
  message: 'ERROR.SAVE_SETTINGS_ERROR'
17046
17050
  }
17047
17051
  })];
@@ -17072,7 +17076,7 @@
17072
17076
  if (counter > 4) {
17073
17077
  if (this._debug)
17074
17078
  console.debug("[account] Failed to authentication on pod (after " + counter + " attempts)");
17075
- throw { code: ErrorCodes$2.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
17079
+ throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
17076
17080
  }
17077
17081
  if (!token) return [3 /*break*/, 2];
17078
17082
  return [4 /*yield*/, this.graphql.query({
@@ -17081,7 +17085,7 @@
17081
17085
  token: token
17082
17086
  },
17083
17087
  error: {
17084
- code: ErrorCodes$2.UNAUTHORIZED,
17088
+ code: ErrorCodes.UNAUTHORIZED,
17085
17089
  message: 'ERROR.UNAUTHORIZED'
17086
17090
  },
17087
17091
  fetchPolicy: 'no-cache'
@@ -17098,7 +17102,7 @@
17098
17102
  _b.label = 2;
17099
17103
  case 2:
17100
17104
  challengeError = {
17101
- code: ErrorCodes$2.AUTH_CHALLENGE_ERROR,
17105
+ code: ErrorCodes.AUTH_CHALLENGE_ERROR,
17102
17106
  message: 'ERROR.AUTH_CHALLENGE_ERROR'
17103
17107
  };
17104
17108
  return [4 /*yield*/, this.graphql.query({
@@ -17185,7 +17189,7 @@
17185
17189
  query: AccountSubscriptions.listenChanges,
17186
17190
  variables: variables,
17187
17191
  error: {
17188
- code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
17192
+ code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,
17189
17193
  message: 'ERROR.ACCOUNT.SUBSCRIBE_ERROR'
17190
17194
  }
17191
17195
  }).pipe(operators.map(function (_b) {
@@ -17218,7 +17222,7 @@
17218
17222
  };
17219
17223
  return AccountService;
17220
17224
  }(BaseGraphqlService));
17221
- 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" });
17225
+ 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" });
17222
17226
  AccountService.decorators = [
17223
17227
  { type: i0.Injectable, args: [{ providedIn: 'root', deps: [ENVIRONMENT] },] }
17224
17228
  ];
@@ -17233,7 +17237,7 @@
17233
17237
  { type: i1$5.ToastController, decorators: [{ type: i0.Optional }] },
17234
17238
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
17235
17239
  ]; };
17236
- var templateObject_1$4, templateObject_2$4, templateObject_3$3, templateObject_4$3, templateObject_5$2, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12;
17240
+ 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;
17237
17241
 
17238
17242
  var Software_1, Configuration_1;
17239
17243
  // @dynamic
@@ -17491,13 +17495,13 @@
17491
17495
  /* ------------------------------------
17492
17496
  * GraphQL queries
17493
17497
  * ------------------------------------*/
17494
- var Fragments = {
17495
- 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 "])))
17498
+ var Fragments$1 = {
17499
+ 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 "])))
17496
17500
  };
17497
- var LoadQuery = core.gql(templateObject_2$3 || (templateObject_2$3 = __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);
17501
+ 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);
17498
17502
  // Save (create or update) account mutation
17499
- var SaveMutation = core.gql(templateObject_3$2 || (templateObject_3$2 = __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);
17500
- var ClearCache = core.gql(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n"], ["\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n"])));
17503
+ 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);
17504
+ 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"])));
17501
17505
  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"])));
17502
17506
  var APP_CONFIG_OPTIONS = new i0.InjectionToken('defaultOptions');
17503
17507
  var ConfigService = /** @class */ (function (_super) {
@@ -17557,12 +17561,12 @@
17557
17561
  case 0:
17558
17562
  now = Date.now();
17559
17563
  console.debug('[config] Loading Pod configuration...');
17560
- query = opts && opts.query || LoadQuery;
17564
+ query = opts && opts.query || LoadQuery$1;
17561
17565
  variables = opts && opts.variables || undefined;
17562
17566
  return [4 /*yield*/, this.graphql.query({
17563
17567
  query: query,
17564
17568
  variables: variables,
17565
- error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17569
+ error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17566
17570
  fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/
17567
17571
  })];
17568
17572
  case 1:
@@ -17604,7 +17608,7 @@
17604
17608
  data: json
17605
17609
  },
17606
17610
  error: {
17607
- code: ErrorCodes$2.SAVE_CONFIG_ERROR,
17611
+ code: ErrorCodes.SAVE_CONFIG_ERROR,
17608
17612
  message: 'ERROR.SAVE_CONFIG_ERROR'
17609
17613
  }
17610
17614
  })];
@@ -17639,7 +17643,7 @@
17639
17643
  return [4 /*yield*/, this.graphql.query({
17640
17644
  query: CacheStatistics,
17641
17645
  variables: null,
17642
- error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17646
+ error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17643
17647
  fetchPolicy: 'network-only'
17644
17648
  })];
17645
17649
  case 1:
@@ -17663,7 +17667,7 @@
17663
17667
  return [4 /*yield*/, this.graphql.query({
17664
17668
  query: ClearCache,
17665
17669
  variables: variables,
17666
- error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17670
+ error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17667
17671
  fetchPolicy: 'no-cache'
17668
17672
  })];
17669
17673
  case 1:
@@ -17863,7 +17867,7 @@
17863
17867
  };
17864
17868
  return ConfigService;
17865
17869
  }(BaseGraphqlService));
17866
- 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" });
17870
+ 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" });
17867
17871
  ConfigService.decorators = [
17868
17872
  { type: i0.Injectable, args: [{
17869
17873
  providedIn: 'root',
@@ -17882,9 +17886,9 @@
17882
17886
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
17883
17887
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_CONFIG_OPTIONS,] }] }
17884
17888
  ]; };
17885
- var templateObject_1$3, templateObject_2$3, templateObject_3$2, templateObject_4$2, templateObject_5$1;
17889
+ var templateObject_1$1, templateObject_2$1, templateObject_3$1, templateObject_4$1, templateObject_5$1;
17886
17890
 
17887
- var moment$3 = momentImported__namespace;
17891
+ var moment$4 = momentImported__namespace;
17888
17892
  var AndroidOsEnvironment = Object.freeze({
17889
17893
  DIRECTORY_DOWNLOADS: 'Download',
17890
17894
  DIRECTORY_DOWNLOADS_OLD: 'Downloads',
@@ -18155,16 +18159,16 @@
18155
18159
  }
18156
18160
  // config moment lib
18157
18161
  try {
18158
- moment$3.locale(event.lang);
18162
+ moment$4.locale(event.lang);
18159
18163
  console.debug('[platform] Use locale {' + event.lang + '}');
18160
18164
  }
18161
18165
  // If error, fallback to en
18162
18166
  catch (err) {
18163
- moment$3.locale('en');
18167
+ moment$4.locale('en');
18164
18168
  console.warn('[platform] Unknown local for moment lib. Using default [en]');
18165
18169
  }
18166
18170
  // Config date adapter
18167
- _this.dateAdapter.setLocale(moment$3.locale());
18171
+ _this.dateAdapter.setLocale(moment$4.locale());
18168
18172
  }
18169
18173
  });
18170
18174
  this.settings.onChange.subscribe(function (data) {
@@ -18190,7 +18194,7 @@
18190
18194
  PlatformService.prototype.checkAppVersion = function (opts) {
18191
18195
  var _a, _b, _c;
18192
18196
  return __awaiter(this, void 0, void 0, function () {
18193
- var silent, production, canAutoReload, actualVersion, peer, remoteVersion, reloadPath;
18197
+ var silent, production, canAutoReload, actualVersion, remoteVersion, reloadPath;
18194
18198
  return __generator(this, function (_d) {
18195
18199
  switch (_d.label) {
18196
18200
  case 0:
@@ -18207,8 +18211,7 @@
18207
18211
  (_a = this.checkAppVersionTimer) === null || _a === void 0 ? void 0 : _a.unsubscribe(); // Stop timer if exists
18208
18212
  return [2 /*return*/]; // Skip
18209
18213
  }
18210
- peer = undefined;
18211
- return [4 /*yield*/, this.networkService.getAppVersion(peer)];
18214
+ return [4 /*yield*/, this.networkService.getAppVersion()];
18212
18215
  case 1:
18213
18216
  remoteVersion = _d.sent();
18214
18217
  if (isNilOrBlank(remoteVersion)) {
@@ -18219,7 +18222,7 @@
18219
18222
  }
18220
18223
  if (VersionUtils.isCompatible(remoteVersion, actualVersion)) {
18221
18224
  if (!silent)
18222
- console.info('[platform] Checking remote app version [OK]');
18225
+ console.info("[platform] Checking remote app version [OK] {remote: '" + remoteVersion + "', actual: '" + actualVersion + "'}");
18223
18226
  return [2 /*return*/];
18224
18227
  }
18225
18228
  reloadPath = location.href.replace(/[&]?version=[0-9.]+/gi, '');
@@ -18417,7 +18420,7 @@
18417
18420
  };
18418
18421
  return PlatformService;
18419
18422
  }(StartableService));
18420
- 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" });
18423
+ 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" });
18421
18424
  PlatformService.decorators = [
18422
18425
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
18423
18426
  ];
@@ -18515,7 +18518,7 @@
18515
18518
  };
18516
18519
  return MatStepperI18n;
18517
18520
  }(stepper.MatStepperIntl));
18518
- MatStepperI18n.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
18521
+ MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$2.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
18519
18522
  MatStepperI18n.decorators = [
18520
18523
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
18521
18524
  ];
@@ -20728,7 +20731,7 @@
20728
20731
  return 1;
20729
20732
  }
20730
20733
  }
20731
- var ɵ0$1 = function (defaultStateSize) { return [
20734
+ var ɵ0$b = function (defaultStateSize) { return [
20732
20735
  Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
20733
20736
  Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
20734
20737
  Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
@@ -20736,7 +20739,7 @@
20736
20739
  var SCALE_OPTIONS_DEFAULT = {
20737
20740
  startColor: rgbArrayMap.red,
20738
20741
  startStates: [0, 2, 3],
20739
- startStepsFn: ɵ0$1
20742
+ startStepsFn: ɵ0$b
20740
20743
  };
20741
20744
  /**
20742
20745
  * Internal function, that create a colors scale, using iteration
@@ -21667,7 +21670,7 @@
21667
21670
  };
21668
21671
  return UserSettingsValidatorService;
21669
21672
  }(AppValidatorService));
21670
- UserSettingsValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
21673
+ UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
21671
21674
  UserSettingsValidatorService.decorators = [
21672
21675
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
21673
21676
  ];
@@ -21715,7 +21718,7 @@
21715
21718
  };
21716
21719
  return AccountValidatorService;
21717
21720
  }(AppValidatorService));
21718
- 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" });
21721
+ AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
21719
21722
  AccountValidatorService.decorators = [
21720
21723
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
21721
21724
  ];
@@ -22346,7 +22349,7 @@
22346
22349
  };
22347
22350
  return LocalSettingsValidatorService;
22348
22351
  }(AppValidatorService));
22349
- 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" });
22352
+ LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
22350
22353
  LocalSettingsValidatorService.decorators = [
22351
22354
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
22352
22355
  ];
@@ -23126,7 +23129,7 @@
23126
23129
  };
23127
23130
  return IsOnFieldModePipe;
23128
23131
  }());
23129
- IsOnFieldModePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
23132
+ IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
23130
23133
  IsOnFieldModePipe.decorators = [
23131
23134
  { type: i0.Pipe, args: [{
23132
23135
  name: 'isOnField'
@@ -23141,7 +23144,7 @@
23141
23144
  };
23142
23145
  return IsNotOnFieldModePipe;
23143
23146
  }());
23144
- IsNotOnFieldModePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
23147
+ IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
23145
23148
  IsNotOnFieldModePipe.decorators = [
23146
23149
  { type: i0.Pipe, args: [{
23147
23150
  name: 'isNotOnField'
@@ -23159,7 +23162,7 @@
23159
23162
  };
23160
23163
  return PersonToStringPipe;
23161
23164
  }());
23162
- PersonToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
23165
+ PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
23163
23166
  PersonToStringPipe.decorators = [
23164
23167
  { type: i0.Pipe, args: [{
23165
23168
  name: 'personToString'
@@ -23623,7 +23626,7 @@
23623
23626
  };
23624
23627
  return IsLoginAccountPipe;
23625
23628
  }());
23626
- IsLoginAccountPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
23629
+ IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
23627
23630
  IsLoginAccountPipe.decorators = [
23628
23631
  { type: i0.Pipe, args: [{
23629
23632
  name: 'isLogin'
@@ -23638,7 +23641,7 @@
23638
23641
  };
23639
23642
  return AccountToStringPipe;
23640
23643
  }());
23641
- AccountToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
23644
+ AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
23642
23645
  AccountToStringPipe.decorators = [
23643
23646
  { type: i0.Pipe, args: [{
23644
23647
  name: 'accountToString'
@@ -23656,7 +23659,7 @@
23656
23659
  };
23657
23660
  return DepartmentToStringPipe;
23658
23661
  }());
23659
- DepartmentToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
23662
+ DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
23660
23663
  DepartmentToStringPipe.decorators = [
23661
23664
  { type: i0.Pipe, args: [{
23662
23665
  name: 'departmentToString'
@@ -23762,7 +23765,7 @@
23762
23765
  };
23763
23766
  return MenuService;
23764
23767
  }());
23765
- MenuService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
23768
+ MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
23766
23769
  MenuService.decorators = [
23767
23770
  { type: i0.Injectable, args: [{
23768
23771
  providedIn: 'root'
@@ -24307,7 +24310,7 @@
24307
24310
  };
24308
24311
  return AuthGuardService;
24309
24312
  }());
24310
- 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" });
24313
+ 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" });
24311
24314
  AuthGuardService.decorators = [
24312
24315
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
24313
24316
  ];
@@ -24352,7 +24355,7 @@
24352
24355
  query: query,
24353
24356
  variables: { id: id },
24354
24357
  fetchPolicy: opts && opts.fetchPolicy || undefined,
24355
- error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
24358
+ error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
24356
24359
  })
24357
24360
  .pipe(operators.map(function (_b) {
24358
24361
  var data = _b.data;
@@ -24374,7 +24377,7 @@
24374
24377
  query: query,
24375
24378
  variables: { id: id },
24376
24379
  fetchPolicy: opts && opts.fetchPolicy || undefined,
24377
- error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
24380
+ error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
24378
24381
  })];
24379
24382
  case 1:
24380
24383
  data = (_b.sent()).data;
@@ -24410,7 +24413,7 @@
24410
24413
  totalFieldName: withTotal ? 'total' : undefined,
24411
24414
  insertFilterFn: filter && filter.asFilterFn(),
24412
24415
  variables: variables,
24413
- error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
24416
+ error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
24414
24417
  fetchPolicy: opts && opts.fetchPolicy || undefined
24415
24418
  })
24416
24419
  .pipe(operators.map(function (_b) {
@@ -24428,7 +24431,7 @@
24428
24431
  };
24429
24432
  BaseEntityService.prototype.loadAll = function (offset, size, sortBy, sortDirection, filter, opts) {
24430
24433
  return __awaiter(this, void 0, void 0, function () {
24431
- var debug, variables, now, withTotal, query, _b, data, total, entities, res, nextOffset_1;
24434
+ var debug, variables, now, withTotal, query, _b, data, total, entities, result, nextOffset_1;
24432
24435
  var _this = this;
24433
24436
  return __generator(this, function (_c) {
24434
24437
  switch (_c.label) {
@@ -24452,7 +24455,7 @@
24452
24455
  return [4 /*yield*/, this.graphql.query({
24453
24456
  query: query,
24454
24457
  variables: variables,
24455
- error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
24458
+ error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
24456
24459
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
24457
24460
  })];
24458
24461
  case 1:
@@ -24462,18 +24465,18 @@
24462
24465
  (data || []);
24463
24466
  if (debug)
24464
24467
  console.debug(this._logPrefix + (this._logTypeName + " items loaded in " + (Date.now() - now) + "ms"));
24465
- res = {
24468
+ result = {
24466
24469
  data: entities,
24467
- total: total
24470
+ total: total || entities.length
24468
24471
  };
24469
24472
  // Add fetch more capability, if total was fetched
24470
24473
  if (withTotal) {
24471
24474
  nextOffset_1 = (offset || 0) + entities.length;
24472
- if (nextOffset_1 < res.total) {
24473
- res.fetchMore = function () { return _this.loadAll(nextOffset_1, size, sortBy, sortDirection, filter, opts); };
24475
+ if (nextOffset_1 < result.total) {
24476
+ result.fetchMore = function () { return _this.loadAll(nextOffset_1, size, sortBy, sortDirection, filter, opts); };
24474
24477
  }
24475
24478
  }
24476
- return [2 /*return*/, res];
24479
+ return [2 /*return*/, result];
24477
24480
  }
24478
24481
  });
24479
24482
  });
@@ -24500,7 +24503,7 @@
24500
24503
  variables: {
24501
24504
  filter: filter && filter.asPodObject()
24502
24505
  },
24503
- error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
24506
+ error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
24504
24507
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
24505
24508
  })];
24506
24509
  case 3:
@@ -24545,7 +24548,7 @@
24545
24548
  variables: {
24546
24549
  data: json
24547
24550
  },
24548
- error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
24551
+ error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
24549
24552
  update: function (proxy, _b) {
24550
24553
  var data = _b.data;
24551
24554
  var savedEntities = data && data.data;
@@ -24612,7 +24615,7 @@
24612
24615
  variables: {
24613
24616
  data: json
24614
24617
  },
24615
- error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
24618
+ error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
24616
24619
  update: function (cache, _b) {
24617
24620
  var data = _b.data;
24618
24621
  // Update entity
@@ -24670,7 +24673,7 @@
24670
24673
  refetchQueries: this.getRefetchQueriesForMutation(opts),
24671
24674
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
24672
24675
  variables: { ids: ids },
24673
- error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
24676
+ error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
24674
24677
  update: function (cache, res) {
24675
24678
  // Remove from cache
24676
24679
  if (_this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -24723,7 +24726,7 @@
24723
24726
  refetchQueries: this.getRefetchQueriesForMutation(opts),
24724
24727
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
24725
24728
  variables: { id: id },
24726
- error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
24729
+ error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
24727
24730
  update: function (proxy, res) {
24728
24731
  // Remove from cache
24729
24732
  if (_this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -24765,7 +24768,7 @@
24765
24768
  fetchPolicy: opts && opts.fetchPolicy || 'no-cache',
24766
24769
  variables: variables,
24767
24770
  error: {
24768
- code: ErrorCodes$2.SUBSCRIBE_DATA_ERROR,
24771
+ code: ErrorCodes.SUBSCRIBE_DATA_ERROR,
24769
24772
  message: 'ERROR.SUBSCRIBE_DATA_ERROR'
24770
24773
  }
24771
24774
  })
@@ -24988,7 +24991,7 @@
24988
24991
  if (this._debug)
24989
24992
  invalidRows.forEach(function (row) { return AppTableUtils.logRowErrors(row, "[table-datasource] " + _this._logTypeName + " row #" + row.id); });
24990
24993
  // Stop with an error
24991
- throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
24994
+ throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
24992
24995
  }
24993
24996
  this._editingRowCount = 0;
24994
24997
  data = void 0;
@@ -26008,14 +26011,14 @@
26008
26011
  case 0:
26009
26012
  opts = Object.assign({ keepEditing: this.keepEditedRowOnSave }, opts);
26010
26013
  if (this.readOnly) {
26011
- throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
26014
+ throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
26012
26015
  }
26013
26016
  this.resetError();
26014
26017
  // Keep edited row id (should be done BEFORE confirmEditCreate() )
26015
26018
  this.previouslyEditedRowId = opts.keepEditing ? ((((_a = this.editedRow) === null || _a === void 0 ? void 0 : _a.editing) ? this.editedRow.id : undefined) || ((_b = this.singleSelectedRow) === null || _b === void 0 ? void 0 : _b.id)) : undefined;
26016
26019
  previouslyEditedData = opts.keepEditing ? (isNotNil(this.previouslyEditedRowId) && ((_c = this.editedRow) === null || _c === void 0 ? void 0 : _c.currentData) || ((_d = this.singleSelectedRow) === null || _d === void 0 ? void 0 : _d.currentData)) : undefined;
26017
26020
  if (!this.confirmEditCreate()) {
26018
- throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
26021
+ throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
26019
26022
  }
26020
26023
  // Mark as saving
26021
26024
  this.markAsSaving();
@@ -26172,7 +26175,7 @@
26172
26175
  switch (_e.label) {
26173
26176
  case 0:
26174
26177
  if (this.readOnly) {
26175
- throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
26178
+ throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
26176
26179
  }
26177
26180
  if (event === null || event === void 0 ? void 0 : event.defaultPrevented)
26178
26181
  return [2 /*return*/, 0]; // SKip
@@ -28072,7 +28075,7 @@
28072
28075
  case 8:
28073
28076
  data = _c.sent();
28074
28077
  if (!data)
28075
- throw { code: ErrorCodes$2.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
28078
+ throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
28076
28079
  this._usageMode = this.computeUsageMode(data);
28077
28080
  return [4 /*yield*/, this.onEntityLoaded(data, opts)];
28078
28081
  case 9:
@@ -28779,9 +28782,10 @@
28779
28782
  canDelete: [{ type: i0.Input }]
28780
28783
  };
28781
28784
 
28782
- var ErrorCodes$1 = {
28785
+ var SocialErrorCodes = {
28783
28786
  LOAD_USER_EVENTS_ERROR: 50000,
28784
- SAVE_USER_EVENT_ERROR: 50001
28787
+ SAVE_USER_EVENT_ERROR: 50001,
28788
+ SEND_MESSAGE_ERROR: 50003
28785
28789
  };
28786
28790
 
28787
28791
  var UserEvent_1;
@@ -28827,7 +28831,7 @@
28827
28831
  EntityClass({ typename: 'UserEventVO' })
28828
28832
  ], exports.UserEvent);
28829
28833
 
28830
- var SocialFragments = {
28834
+ var UserEventFragments = {
28831
28835
  userEvent: core.gql(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["fragment UserEventFragment on UserEventVO {\n id\n issuer\n updateDate\n creationDate\n eventType\n recipient\n content\n hash\n signature\n readSignature\n __typename\n }"], ["fragment UserEventFragment on UserEventVO {\n id\n issuer\n updateDate\n creationDate\n eventType\n recipient\n content\n hash\n signature\n readSignature\n __typename\n }"]))),
28832
28836
  lightUserEvent: core.gql(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["fragment LightUserEventFragment on UserEventVO {\n id\n issuer\n recipient\n updateDate\n creationDate\n eventType\n readSignature\n __typename\n }"], ["fragment LightUserEventFragment on UserEventVO {\n id\n issuer\n recipient\n updateDate\n creationDate\n eventType\n readSignature\n __typename\n }"])))
28833
28837
  };
@@ -28862,12 +28866,12 @@
28862
28866
  return UserEventFilter;
28863
28867
  }(EntityFilter));
28864
28868
  exports.UserEventFilter = __decorate([
28865
- EntityClass({ typename: 'UserEventVO' })
28869
+ EntityClass({ typename: 'UserEventFilterVO' })
28866
28870
  ], exports.UserEventFilter);
28867
- var SaveQuery = core.gql(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ", "\n"], ["\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ", "\n"])), SocialFragments.userEvent);
28868
- var LoadAllQuery = core.gql(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ", "\n"], ["\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ", "\n"])), SocialFragments.lightUserEvent);
28869
- var DeleteByIdsMutation = core.gql(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n"], ["\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n"])));
28870
- var LoadAllWithContentQuery = core.gql(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ", "\n"], ["\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ", "\n"])), SocialFragments.userEvent);
28871
+ var SaveQuery = core.gql(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ", "\n"], ["\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ", "\n"])), UserEventFragments.userEvent);
28872
+ var LoadAllQuery = core.gql(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ", "\n"], ["\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ", "\n"])), UserEventFragments.lightUserEvent);
28873
+ var DeleteByIdsMutation = core.gql(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n"], ["\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n"])));
28874
+ var LoadAllWithContentQuery = core.gql(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ", "\n"], ["\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ", "\n"])), UserEventFragments.userEvent);
28871
28875
  var UserEventService = /** @class */ (function (_super) {
28872
28876
  __extends(UserEventService, _super);
28873
28877
  function UserEventService(graphql, accountService, network, translate, toastController, environment) {
@@ -28880,7 +28884,7 @@
28880
28884
  _this.environment = environment;
28881
28885
  _this._userEventActions = [];
28882
28886
  // For DEV only
28883
- _this._debug = !environment.production;
28887
+ _this._debug = environment && !environment.production;
28884
28888
  return _this;
28885
28889
  }
28886
28890
  /**
@@ -28918,7 +28922,7 @@
28918
28922
  filter: filter && filter.asPodObject()
28919
28923
  },
28920
28924
  arrayFieldName: 'data',
28921
- error: { code: ErrorCodes$1.LOAD_USER_EVENTS_ERROR, message: 'SOCIAL.ERROR.LOAD_USER_EVENTS_ERROR' },
28925
+ error: { code: SocialErrorCodes.LOAD_USER_EVENTS_ERROR, message: 'SOCIAL.ERROR.LOAD_USER_EVENTS_ERROR' },
28922
28926
  fetchPolicy: options && options.fetchPolicy || undefined
28923
28927
  })
28924
28928
  .pipe(operators.map(function (res) {
@@ -28961,7 +28965,7 @@
28961
28965
  variables: {
28962
28966
  data: json
28963
28967
  },
28964
- error: { code: ErrorCodes$1.SAVE_USER_EVENT_ERROR, message: 'SOCIAL.ERROR.SAVE_USER_EVENT_ERROR' },
28968
+ error: { code: SocialErrorCodes.SAVE_USER_EVENT_ERROR, message: 'SOCIAL.ERROR.SAVE_USER_EVENT_ERROR' },
28965
28969
  update: function (proxy, _a) {
28966
28970
  var data = _a.data;
28967
28971
  // Update entity
@@ -29188,7 +29192,7 @@
29188
29192
  };
29189
29193
  return UserEventService;
29190
29194
  }(BaseGraphqlService));
29191
- UserEventService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function UserEventService_Factory() { return new UserEventService(i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(AccountService), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(i1__namespace$4.ToastController), i0__namespace.ɵɵinject(ENVIRONMENT)); }, token: UserEventService, providedIn: "root" });
29195
+ UserEventService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserEventService_Factory() { return new UserEventService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(AccountService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(i1$5.ToastController), i0.ɵɵinject(ENVIRONMENT, 8)); }, token: UserEventService, providedIn: "root" });
29192
29196
  UserEventService.decorators = [
29193
29197
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
29194
29198
  ];
@@ -29198,9 +29202,9 @@
29198
29202
  { type: NetworkService },
29199
29203
  { type: i1$2.TranslateService },
29200
29204
  { type: i1$5.ToastController },
29201
- { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
29205
+ { type: Environment, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [ENVIRONMENT,] }] }
29202
29206
  ]; };
29203
- var templateObject_1$1, templateObject_2$1, templateObject_3$1, templateObject_4$1;
29207
+ var templateObject_1$3, templateObject_2$3, templateObject_3$2, templateObject_4$2;
29204
29208
 
29205
29209
  var ICONS_MAP = {
29206
29210
  DEBUG_DATA: { matIcon: 'bug_report' },
@@ -29356,7 +29360,7 @@
29356
29360
  UserEventsTable.decorators = [
29357
29361
  { type: i0.Component, args: [{
29358
29362
  selector: 'app-user-events-table',
29359
- template: "\n<!-- Type = options menu -->\n<mat-menu #optionsMenu=\"matMenu\" xPosition=\"after\">\n\n <!-- display columns -->\n <button mat-menu-item\n (click)=\"openSelectColumnsModal($event)\">\n <mat-icon>view_column</mat-icon>\n <ion-label translate>COMMON.DISPLAYED_COLUMNS_DOTS</ion-label>\n </button>\n\n</mat-menu>\n\n<!-- top header -->\n<mat-toolbar>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n\n <button mat-icon-button [title]=\"'COMMON.BTN_REFRESH'|translate\" (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n </ng-container>\n\n <!-- if row selection -->\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button class=\"hidden-xs hidden-sm\" *ngIf=\"canDelete\"\n [title]=\"'COMMON.BTN_DELETE'|translate\" (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" hidden-xs hidden-sm hidden-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=\"toolbar-spacer\"></div>\n\n <button mat-icon-button\n [title]=\"'COMMON.BTN_OPTIONS'|translate\"\n [matMenuTriggerFor]=\"optionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n</mat-toolbar>\n\n\n<mat-table [dataSource]=\"dataSource\" matSort\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <!-- select -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <!-- id -->\n <ng-container matColumnDef=\"id\">\n <mat-header-cell *matHeaderCellDef mat-sort-header [class.cdk-visually-hidden]=\"!isAdmin\">\n <app-loading-spinner [loading]=\"loadingSubject|async\"><ion-label>#</ion-label></app-loading-spinner>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!isAdmin\">{{ row.currentData.id | mathAbs }}</mat-cell>\n </ng-container>\n\n <!-- creationDate -->\n <ng-container matColumnDef=\"creationDate\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.CREATION_DATE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ion-text>\n {{row.currentData.creationDate | dateFromNow }}<br/>\n <ion-text color=\"medium\"><small>{{row.currentData.creationDate | dateFormat: {time: true} }}</small></ion-text>\n </ion-text>\n </mat-cell>\n </ng-container>\n\n <!-- icon -->\n <ng-container matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getIcon(row.currentData); let details\">\n <ion-icon slot=\"start\" *ngIf=\"details.icon\" [name]=\"details.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"details.matIcon\">{{details.matIcon}}</mat-icon>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- event type -->\n <ng-container matColumnDef=\"eventType\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.EVENT_TYPE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <span>{{'SOCIAL.EVENT_TYPE_ENUM.' + row.currentData.eventType | translate}}</span>\n </mat-cell>\n </ng-container>\n\n <!-- message -->\n <ng-container matColumnDef=\"message\">\n <mat-header-cell *matHeaderCellDef>\n <ion-label translate>SOCIAL.USER_EVENT.MESSAGE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <ion-text [innerHTML]=\"details.title|translate\">\n </ion-text>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- Actions buttons column -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <button mat-icon-button color=\"light\"\n *ngFor=\"let action of details.actions\"\n [title]=\"action.title |translate\"\n [color]=\"action.color\"\n (click)=\"doAction(action, row)\">\n <ion-icon slot=\"start\" *ngIf=\"action.icon\" [name]=\"action.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"action.matIcon\">{{action.matIcon}}</mat-icon>\n </button>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n class=\"mat-row-disabled\"\n (click)=\"clickRow($event, row)\"></mat-row>\n\n</mat-table>\n\n<ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col class=\"ion-no-padding\" size=\"auto\">\n <mat-paginator [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\" [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n </ion-col>\n</ion-row>\n",
29363
+ template: "\n<!-- Type = options menu -->\n<mat-menu #optionsMenu=\"matMenu\" xPosition=\"after\">\n\n <!-- display columns -->\n <button mat-menu-item\n (click)=\"openSelectColumnsModal($event)\">\n <mat-icon>view_column</mat-icon>\n <ion-label translate>COMMON.DISPLAYED_COLUMNS_DOTS</ion-label>\n </button>\n\n</mat-menu>\n\n<!-- top header -->\n<mat-toolbar>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n\n <button mat-icon-button [title]=\"'COMMON.BTN_REFRESH'|translate\" (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n </ng-container>\n\n <!-- if row selection -->\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button class=\"hidden-xs hidden-sm\" *ngIf=\"canDelete\"\n [title]=\"'COMMON.BTN_DELETE'|translate\" (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" hidden-xs hidden-sm hidden-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=\"toolbar-spacer\"></div>\n\n <button mat-icon-button\n [title]=\"'COMMON.BTN_OPTIONS'|translate\"\n [matMenuTriggerFor]=\"optionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n</mat-toolbar>\n\n\n<mat-table [dataSource]=\"dataSource\" matSort\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <!-- select -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <!-- id -->\n <ng-container matColumnDef=\"id\">\n <mat-header-cell *matHeaderCellDef mat-sort-header [class.cdk-visually-hidden]=\"!isAdmin\">\n <app-loading-spinner [loading]=\"loadingSubject|async\"><ion-label>#</ion-label></app-loading-spinner>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!isAdmin\">{{ row.currentData.id | mathAbs }}</mat-cell>\n </ng-container>\n\n <!-- creationDate -->\n <ng-container matColumnDef=\"creationDate\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.CREATION_DATE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ion-text>\n {{row.currentData.creationDate | dateFromNow }}<br/>\n <ion-text color=\"medium\"><small>{{row.currentData.creationDate | dateFormat: {time: true} }}</small></ion-text>\n </ion-text>\n </mat-cell>\n </ng-container>\n\n <!-- icon -->\n <ng-container matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getIcon(row.currentData); let details\">\n <ion-icon slot=\"start\" *ngIf=\"details.icon\" [name]=\"details.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"details.matIcon\">{{details.matIcon}}</mat-icon>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- event type -->\n <ng-container matColumnDef=\"eventType\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.EVENT_TYPE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <span>{{'SOCIAL.USER_EVENT.TYPE_ENUM.' + row.currentData.eventType | translate}}</span>\n </mat-cell>\n </ng-container>\n\n <!-- message -->\n <ng-container matColumnDef=\"message\">\n <mat-header-cell *matHeaderCellDef>\n <ion-label translate>SOCIAL.USER_EVENT.MESSAGE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <ion-text [innerHTML]=\"details.title|translate\">\n </ion-text>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- Actions buttons column -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <button mat-icon-button color=\"light\"\n *ngFor=\"let action of details.actions\"\n [title]=\"action.title |translate\"\n [color]=\"action.color\"\n (click)=\"doAction(action, row)\">\n <ion-icon slot=\"start\" *ngIf=\"action.icon\" [name]=\"action.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"action.matIcon\">{{action.matIcon}}</mat-icon>\n </button>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n class=\"mat-row-disabled\"\n (click)=\"clickRow($event, row)\"></mat-row>\n\n</mat-table>\n\n<ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col class=\"ion-no-padding\" size=\"auto\">\n <mat-paginator [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\" [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n </ion-col>\n</ion-row>\n",
29360
29364
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
29361
29365
  styles: [".mat-header-row .mat-column-icon,.mat-row .mat-column-icon{max-width:40px;padding-left:0}.mat-header-row .mat-column-icon ion-icon,.mat-header-row .mat-column-icon mat-icon,.mat-row .mat-column-icon ion-icon,.mat-row .mat-column-icon mat-icon{font-size:1.2em;height:1.2em;width:1.2em}.mat-header-row .mat-column-creationDate,.mat-row .mat-column-creationDate{min-width:100px;max-width:120px}"]
29362
29366
  },] }
@@ -29376,35 +29380,350 @@
29376
29380
  defaultSortDirection: [{ type: i0.Input }]
29377
29381
  };
29378
29382
 
29383
+ var MessageTypes = {
29384
+ INBOX_MESSAGE: 'INBOX_MESSAGE',
29385
+ EMAIL: 'EMAIL',
29386
+ FEED: 'FEED',
29387
+ };
29388
+ var MessageTypeList = Object.freeze([
29389
+ {
29390
+ id: MessageTypes.INBOX_MESSAGE,
29391
+ icon: 'notifications',
29392
+ label: 'SOCIAL.MESSAGE.TYPE_ENUM.INBOX_MESSAGE'
29393
+ },
29394
+ {
29395
+ id: MessageTypes.EMAIL,
29396
+ icon: 'mail',
29397
+ label: 'SOCIAL.MESSAGE.TYPE_ENUM.EMAIL'
29398
+ },
29399
+ {
29400
+ id: MessageTypes.FEED,
29401
+ icon: 'paper',
29402
+ label: 'SOCIAL.MESSAGE.TYPE_ENUM.FEED'
29403
+ }
29404
+ ]);
29405
+ // @dynamic
29406
+ exports.Message = /** @class */ (function (_super) {
29407
+ __extends(Message, _super);
29408
+ function Message() {
29409
+ return _super.call(this) || this;
29410
+ }
29411
+ Message.prototype.fromObject = function (source, opts) {
29412
+ _super.prototype.fromObject.call(this, source, opts);
29413
+ this.type = source.type;
29414
+ this.issuer = source.issuer && exports.Person.fromObject(source.issuer);
29415
+ this.recipients = source.recipients && source.recipients.map(exports.Person.fromObject);
29416
+ this.subject = source.subject;
29417
+ this.body = source.body;
29418
+ };
29419
+ Message.prototype.asObject = function (opts) {
29420
+ var target = _super.prototype.asObject.call(this, opts);
29421
+ target.recipients = this.recipients && this.recipients.map(function (p) { return p.asObject(opts); });
29422
+ return target;
29423
+ };
29424
+ return Message;
29425
+ }(Entity));
29426
+ exports.Message = __decorate([
29427
+ EntityClass({ typename: 'MessageVO' })
29428
+ ], exports.Message);
29429
+ // @dynamic
29430
+ exports.MessageFilter = /** @class */ (function (_super) {
29431
+ __extends(MessageFilter, _super);
29432
+ function MessageFilter() {
29433
+ return _super !== null && _super.apply(this, arguments) || this;
29434
+ }
29435
+ MessageFilter.prototype.fromObject = function (source, opts) {
29436
+ _super.prototype.fromObject.call(this, source, opts);
29437
+ };
29438
+ MessageFilter.prototype.buildFilter = function () {
29439
+ var filterFns = _super.prototype.buildFilter.call(this);
29440
+ return filterFns;
29441
+ };
29442
+ return MessageFilter;
29443
+ }(EntityFilter));
29444
+ exports.MessageFilter = __decorate([
29445
+ EntityClass({ typename: 'MessageFilterVO' })
29446
+ ], exports.MessageFilter);
29447
+
29448
+ var MessageModal = /** @class */ (function () {
29449
+ function MessageModal(settings, viewCtrl, accountService, cd) {
29450
+ this.settings = settings;
29451
+ this.viewCtrl = viewCtrl;
29452
+ this.accountService = accountService;
29453
+ this.cd = cd;
29454
+ this.mobile = this.settings.mobile;
29455
+ }
29456
+ MessageModal.prototype.ngOnInit = function () {
29457
+ this.canSelectType = toBoolean(this.canSelectType, this.accountService.isAdmin());
29458
+ };
29459
+ MessageModal.prototype.ngAfterViewInit = function () {
29460
+ this.form.markAsReady({ emitEvent: false });
29461
+ if (this.data) {
29462
+ this.data.type = this.data.type || MessageTypes.INBOX_MESSAGE;
29463
+ this.form.setValue(this.data);
29464
+ }
29465
+ this.form.markAsLoaded();
29466
+ this.form.enable();
29467
+ };
29468
+ MessageModal.prototype.cancel = function (event) {
29469
+ this.viewCtrl.dismiss();
29470
+ };
29471
+ MessageModal.prototype.doSubmit = function (event) {
29472
+ return __awaiter(this, void 0, void 0, function () {
29473
+ var data, entity;
29474
+ var _this = this;
29475
+ return __generator(this, function (_a) {
29476
+ switch (_a.label) {
29477
+ case 0:
29478
+ if (this.form.disabled)
29479
+ return [2 /*return*/];
29480
+ if (!!this.form.valid) return [3 /*break*/, 2];
29481
+ return [4 /*yield*/, AppFormUtils.waitWhilePending(this.form)];
29482
+ case 1:
29483
+ _a.sent();
29484
+ if (this.form.invalid) {
29485
+ AppFormUtils.logFormErrors(this.form.form, '[message-modal] ');
29486
+ this.form.markAllAsTouched();
29487
+ return [2 /*return*/];
29488
+ }
29489
+ _a.label = 2;
29490
+ case 2:
29491
+ this.markAsLoading();
29492
+ try {
29493
+ data = this.form.value;
29494
+ // Disable the form
29495
+ this.form.disable();
29496
+ entity = exports.Message.fromObject(data);
29497
+ return [2 /*return*/, this.viewCtrl.dismiss(entity)];
29498
+ }
29499
+ catch (err) {
29500
+ this.form.error = err && err.message || err;
29501
+ this.markAsLoaded();
29502
+ // Enable the form
29503
+ this.form.enable();
29504
+ // Reset form error on next changes
29505
+ firstNotNilPromise(this.form.form.valueChanges).then(function () {
29506
+ _this.form.error = null;
29507
+ _this.markForCheck();
29508
+ });
29509
+ return [2 /*return*/];
29510
+ }
29511
+ return [2 /*return*/];
29512
+ }
29513
+ });
29514
+ });
29515
+ };
29516
+ MessageModal.prototype.markForCheck = function () {
29517
+ this.cd.markForCheck();
29518
+ };
29519
+ MessageModal.prototype.markAsLoading = function (opts) {
29520
+ this.form.markAsLoading(opts);
29521
+ };
29522
+ MessageModal.prototype.markAsLoaded = function (opts) {
29523
+ this.form.markAsLoaded(opts);
29524
+ };
29525
+ return MessageModal;
29526
+ }());
29527
+ MessageModal.decorators = [
29528
+ { type: i0.Component, args: [{
29529
+ selector: 'app-message-modal',
29530
+ template: "<ion-header>\n <ion-toolbar color=\"secondary\">\n <ion-buttons slot=\"start\">\n <ion-button class=\"back-button\" (click)=\"cancel($event)\" visible-xs visible-sm visible-mobile>\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title>\n {{'SOCIAL.MESSAGE.NEW.TITLE' | translate}}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n\n <ion-button class=\"back-button\" (click)=\"doSubmit($event)\"\n [disabled]=\"!form.valid\"\n visible-xs visible-sm visible-mobile>\n <ion-icon slot=\"icon-only\" name=\"checkmark\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n\n<ion-content class=\"ion-padding\" >\n\n <ion-item *ngIf=\"form.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]=\"form.error|translate\"></ion-label>\n </ion-item>\n\n <app-message-form #form (onSubmit)=\"doSubmit($event)\"\n (onCancel)=\"cancel($event)\"\n [canSelectType]=\"canSelectType\"\n [suggestFn]=\"suggestFn\">\n </app-message-form>\n\n</ion-content>\n\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n\n <ion-toolbar>\n\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <!-- buttons -->\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel($event)\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n\n <ion-button [fill]=\"form.invalid ? 'clear' : 'solid'\"\n [disabled]=\"form.loading || form.invalid\"\n (keyup.enter)=\"doSubmit($event)\"\n (click)=\"doSubmit($event)\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_SEND</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n\n\n </ion-toolbar>\n</ion-footer>\n",
29531
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
29532
+ },] }
29533
+ ];
29534
+ MessageModal.ctorParameters = function () { return [
29535
+ { type: LocalSettingsService },
29536
+ { type: i1$5.ModalController },
29537
+ { type: AccountService },
29538
+ { type: i0.ChangeDetectorRef }
29539
+ ]; };
29540
+ MessageModal.propDecorators = {
29541
+ suggestFn: [{ type: i0.Input }],
29542
+ data: [{ type: i0.Input }],
29543
+ canSelectType: [{ type: i0.Input }],
29544
+ form: [{ type: i0.ViewChild, args: ['form', { static: true },] }]
29545
+ };
29546
+
29547
+ var MessageForm = /** @class */ (function (_super) {
29548
+ __extends(MessageForm, _super);
29549
+ function MessageForm(injector, formBuilder, cd) {
29550
+ var _this = _super.call(this, injector) || this;
29551
+ _this.formBuilder = formBuilder;
29552
+ _this.cd = cd;
29553
+ _this.subjectMinLength = 5;
29554
+ _this.subjectMaxLength = 255;
29555
+ _this.bodyMaxLength = 2000;
29556
+ _this.bodyAutoHeight = true;
29557
+ _this.canSelectType = false;
29558
+ _this.types = MessageTypeList;
29559
+ _this.mobile = _this.settings.mobile;
29560
+ return _this;
29561
+ }
29562
+ MessageForm.prototype.ngOnInit = function () {
29563
+ this.setForm(this.formBuilder.group({
29564
+ type: [MessageTypes.INBOX_MESSAGE, i1.Validators.required],
29565
+ recipients: [null, i1.Validators.required],
29566
+ subject: [null, this.subjectMaxLength
29567
+ ? i1.Validators.compose([i1.Validators.required, i1.Validators.minLength(this.subjectMinLength), i1.Validators.maxLength(this.subjectMaxLength)])
29568
+ : i1.Validators.required],
29569
+ body: [null, this.bodyMaxLength
29570
+ ? i1.Validators.compose([i1.Validators.maxLength(this.bodyMaxLength)])
29571
+ : i1.Validators.required]
29572
+ }));
29573
+ var personAttributes = this.settings.getFieldDisplayAttributes('person', ['lastName', 'firstName', 'department.name']);
29574
+ this.registerAutocompleteField('recipients', {
29575
+ showAllOnFocus: false,
29576
+ suggestFn: this.suggestFn,
29577
+ filter: {
29578
+ statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE]
29579
+ },
29580
+ attributes: personAttributes,
29581
+ displayWith: PersonUtils.personToString,
29582
+ multiple: true,
29583
+ mobile: this.mobile
29584
+ });
29585
+ };
29586
+ MessageForm.prototype.isSamePerson = function (o1, o2) {
29587
+ return EntityUtils.equals(o1, o2, 'id');
29588
+ };
29589
+ MessageForm.prototype.markForCheck = function () {
29590
+ this.cd.markForCheck();
29591
+ };
29592
+ return MessageForm;
29593
+ }(AppForm));
29594
+ MessageForm.decorators = [
29595
+ { type: i0.Component, args: [{
29596
+ selector: 'app-message-form',
29597
+ template: "\n\n<form [formGroup]=\"form\" class=\"form-container\">\n\n <!-- type -->\n <mat-form-field *ngIf=\"canSelectType\">\n <mat-select formControlName=\"type\" [placeholder]=\"'SOCIAL.MESSAGE.TYPE'|translate\">\n <mat-option *ngFor=\"let item of types\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <!-- Recipients -->\n <mat-chips-field *ngIf=\"(form.controls.type.valueChanges|async) !== 'FEED'\"\n formControlName=\"recipients\"\n [placeholder]=\"'SOCIAL.MESSAGE.RECIPIENTS'|translate\"\n [config]=\"autocompleteFields.recipients\"\n [equals]=\"isSamePerson\">\n </mat-chips-field>\n\n <!-- Subject -->\n <mat-form-field>\n <input matInput type=\"text\"\n [placeholder]=\"'SOCIAL.MESSAGE.SUBJECT'|translate\"\n formControlName=\"subject\"\n autocomplete=\"off\"\n required>\n <mat-error *ngIf=\"form.controls.subject.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"form.controls.subject.hasError('minlength')\">\n {{ 'ERROR.FIELD_MIN_LENGTH_COMPACT'|translate }}\n </mat-error>\n <mat-error *ngIf=\"form.controls.subject.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH_COMPACT'|translate }}\n </mat-error>\n <mat-hint *ngIf=\"subjectMaxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: form.controls.subject.value?.length || 0, max: subjectMaxLength } }}\n </mat-hint>\n </mat-form-field>\n\n <!-- Body -->\n <mat-form-field floatLabel=\"never\">\n <textarea matInput type=\"text\"\n [placeholder]=\"'SOCIAL.MESSAGE.BODY_HELP'|translate\"\n formControlName=\"body\"\n [class.fixed-height]=\"!bodyAutoHeight\"\n [cdkTextareaAutosize]=\"bodyAutoHeight\"\n (keydown.control.enter)=\"doSubmit($event)\"\n >\n </textarea>\n <mat-error *ngIf=\"form.controls.body.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: form.controls.body.errors.maxlength }}\n </mat-error>\n <mat-hint *ngIf=\"bodyMaxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: form.controls.body.value?.length || 0, max: bodyMaxLength } }}\n </mat-hint>\n </mat-form-field>\n\n</form>\n",
29598
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
29599
+ styles: ["textarea.fixed-height{height:11.5em}textarea{min-height:11.5em}"]
29600
+ },] }
29601
+ ];
29602
+ MessageForm.ctorParameters = function () { return [
29603
+ { type: i0.Injector },
29604
+ { type: i1.FormBuilder },
29605
+ { type: i0.ChangeDetectorRef }
29606
+ ]; };
29607
+ MessageForm.propDecorators = {
29608
+ suggestFn: [{ type: i0.Input }],
29609
+ subjectMinLength: [{ type: i0.Input }],
29610
+ subjectMaxLength: [{ type: i0.Input }],
29611
+ bodyMaxLength: [{ type: i0.Input }],
29612
+ bodyAutoHeight: [{ type: i0.Input }],
29613
+ canSelectType: [{ type: i0.Input }]
29614
+ };
29615
+
29379
29616
  var SocialModule = /** @class */ (function () {
29380
29617
  function SocialModule() {
29381
29618
  }
29382
- SocialModule.forRoot = function () {
29383
- console.debug('[social] Creating module (root)');
29384
- return {
29385
- ngModule: SocialModule,
29386
- providers: [
29387
- UserEventService
29388
- ]
29389
- };
29390
- };
29391
29619
  return SocialModule;
29392
29620
  }());
29393
29621
  SocialModule.decorators = [
29394
29622
  { type: i0.NgModule, args: [{
29395
29623
  imports: [
29396
29624
  i1$4.CommonModule,
29397
- CoreModule
29625
+ CoreModule,
29626
+ SharedModule
29398
29627
  ],
29399
29628
  declarations: [
29400
- UserEventsTable
29629
+ UserEventsTable,
29630
+ MessageModal,
29631
+ MessageForm
29401
29632
  ],
29402
29633
  exports: [
29403
- UserEventsTable
29634
+ UserEventsTable,
29635
+ MessageModal
29404
29636
  ]
29405
29637
  },] }
29406
29638
  ];
29407
29639
 
29640
+ var Mutations = {
29641
+ send: core.gql(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["mutation SendMessage($data: MessageVOInput){\n done: sendMessage(message: $data)\n }"], ["mutation SendMessage($data: MessageVOInput){\n done: sendMessage(message: $data)\n }"])))
29642
+ };
29643
+ var MessageService = /** @class */ (function (_super) {
29644
+ __extends(MessageService, _super);
29645
+ function MessageService(graphql, translate, toastController, environment) {
29646
+ var _this = _super.call(this, graphql, environment) || this;
29647
+ _this.graphql = graphql;
29648
+ _this.translate = translate;
29649
+ _this.toastController = toastController;
29650
+ _this.environment = environment;
29651
+ // For DEV only
29652
+ _this._debug = !environment.production;
29653
+ return _this;
29654
+ }
29655
+ /**
29656
+ * Send a message to recipient(s)
29657
+ *
29658
+ * @param entity
29659
+ * @param opts
29660
+ */
29661
+ MessageService.prototype.send = function (entity, opts) {
29662
+ return __awaiter(this, void 0, void 0, function () {
29663
+ var data, now, done, err_1, error, message;
29664
+ return __generator(this, function (_a) {
29665
+ switch (_a.label) {
29666
+ case 0:
29667
+ data = entity.asObject(MINIFY_ENTITY_FOR_POD);
29668
+ now = Date.now();
29669
+ if (this._debug)
29670
+ console.debug("[message-service] Send message...", data);
29671
+ _a.label = 1;
29672
+ case 1:
29673
+ _a.trys.push([1, 5, , 8]);
29674
+ return [4 /*yield*/, this.graphql.mutate({
29675
+ mutation: Mutations.send,
29676
+ variables: { data: data },
29677
+ error: { code: SocialErrorCodes.SEND_MESSAGE_ERROR, message: 'SOCIAL.ERROR.SEND_MESSAGE_ERROR' }
29678
+ })];
29679
+ case 2:
29680
+ done = (_a.sent()).done;
29681
+ if (this._debug)
29682
+ console.debug("[message-service] Send message [OK] in " + (Date.now() - now) + "ms");
29683
+ if (!(done && (!opts || opts.showToast !== false))) return [3 /*break*/, 4];
29684
+ return [4 /*yield*/, this.showToast({ type: 'info', message: 'SOCIAL.INFO.MESSAGE_SENT' })];
29685
+ case 3:
29686
+ _a.sent();
29687
+ _a.label = 4;
29688
+ case 4: return [2 /*return*/, done];
29689
+ case 5:
29690
+ err_1 = _a.sent();
29691
+ error = err_1 && err_1.message || err_1;
29692
+ console.error(error);
29693
+ if (!(!opts || opts.showToast !== false)) return [3 /*break*/, 7];
29694
+ message = error || 'SOCIAL.ERROR.SEND_MESSAGE_ERROR';
29695
+ return [4 /*yield*/, this.showToast({ type: 'error', message: message })];
29696
+ case 6:
29697
+ _a.sent();
29698
+ _a.label = 7;
29699
+ case 7: return [2 /*return*/, false];
29700
+ case 8: return [2 /*return*/];
29701
+ }
29702
+ });
29703
+ });
29704
+ };
29705
+ /* -- protected methods -- */
29706
+ MessageService.prototype.showToast = function (opts) {
29707
+ return __awaiter(this, void 0, void 0, function () {
29708
+ return __generator(this, function (_a) {
29709
+ return [2 /*return*/, Toasts.show(this.toastController, this.translate, Object.assign({ type: 'info', message: 'SOCIAL.INFO.MESSAGE_SENT' }, opts))];
29710
+ });
29711
+ });
29712
+ };
29713
+ return MessageService;
29714
+ }(BaseGraphqlService));
29715
+ 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" });
29716
+ MessageService.decorators = [
29717
+ { type: i0.Injectable, args: [{ providedIn: 'root' },] }
29718
+ ];
29719
+ MessageService.ctorParameters = function () { return [
29720
+ { type: GraphqlService },
29721
+ { type: i1$2.TranslateService },
29722
+ { type: i1$5.ToastController },
29723
+ { type: Environment, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [ENVIRONMENT,] }] }
29724
+ ]; };
29725
+ var templateObject_1$4;
29726
+
29408
29727
  var PersonFilter_1;
29409
29728
  // @dynamic
29410
29729
  exports.PersonFilter = PersonFilter_1 = /** @class */ (function (_super) {
@@ -29462,16 +29781,16 @@
29462
29781
  ], exports.PersonFilter);
29463
29782
 
29464
29783
  var PersonFragments = {
29465
- 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 }"])))
29784
+ person: core.gql(templateObject_1$5 || (templateObject_1$5 = __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 }"])))
29466
29785
  };
29467
29786
  // Load persons query
29468
29787
  var PersonQueries = {
29469
- 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),
29470
- 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)
29788
+ loadAll: core.gql(templateObject_2$4 || (templateObject_2$4 = __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),
29789
+ loadAllWithTotal: core.gql(templateObject_3$3 || (templateObject_3$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)
29471
29790
  };
29472
29791
  var PersonMutations = {
29473
- 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),
29474
- 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 }"])))
29792
+ saveAll: core.gql(templateObject_4$3 || (templateObject_4$3 = __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),
29793
+ 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 }"])))
29475
29794
  };
29476
29795
  var PersonService = /** @class */ (function (_super_1) {
29477
29796
  __extends(PersonService, _super_1);
@@ -29592,7 +29911,7 @@
29592
29911
  };
29593
29912
  return PersonService;
29594
29913
  }(BaseEntityService));
29595
- 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" });
29914
+ 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" });
29596
29915
  PersonService.decorators = [
29597
29916
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
29598
29917
  ];
@@ -29602,7 +29921,7 @@
29602
29921
  { type: NetworkService },
29603
29922
  { type: EntitiesStorage }
29604
29923
  ]; };
29605
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
29924
+ var templateObject_1$5, templateObject_2$4, templateObject_3$3, templateObject_4$3, templateObject_5$2;
29606
29925
 
29607
29926
  var PersonValidatorService = /** @class */ (function () {
29608
29927
  function PersonValidatorService(formBuilder, accountValidatorService) {
@@ -29625,7 +29944,7 @@
29625
29944
  };
29626
29945
  return PersonValidatorService;
29627
29946
  }());
29628
- 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" });
29947
+ PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
29629
29948
  PersonValidatorService.decorators = [
29630
29949
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
29631
29950
  ];
@@ -29636,7 +29955,7 @@
29636
29955
 
29637
29956
  var UsersPage = /** @class */ (function (_super) {
29638
29957
  __extends(UsersPage, _super);
29639
- function UsersPage(injector, accountService, validatorService, configService, dataService, cd, formBuilder, environment) {
29958
+ function UsersPage(injector, formBuilder, accountService, validatorService, configService, dataService, messageService, cd, environment) {
29640
29959
  var _this = _super.call(this, injector, RESERVED_START_COLUMNS
29641
29960
  .concat([
29642
29961
  'avatar',
@@ -29661,16 +29980,17 @@
29661
29980
  _this.validatorService = validatorService;
29662
29981
  _this.configService = configService;
29663
29982
  _this.dataService = dataService;
29983
+ _this.messageService = messageService;
29664
29984
  _this.cd = cd;
29665
- _this.canEdit = false;
29666
29985
  _this.profiles = __spread(PRIORITIZED_AUTHORITIES).reverse();
29667
- _this.filterCriteriaCount = 0;
29668
29986
  _this.statusList = StatusList;
29669
29987
  _this.statusById = StatusById;
29988
+ _this.filterCriteriaCount = 0;
29670
29989
  _this.useSticky = false;
29671
29990
  _this.referentialToString = referentialToString;
29672
- _this.inlineEdition = accountService.isAdmin(); // Allow inline edition only if admin
29673
29991
  _this.canEdit = accountService.isAdmin();
29992
+ _this.canSendMessage = _this.canEdit;
29993
+ _this.inlineEdition = _this.canEdit;
29674
29994
  _this.confirmBeforeDelete = true;
29675
29995
  _this.autoLoad = false; // Wait config loading
29676
29996
  _this.i18nColumnPrefix = 'USER.';
@@ -29760,7 +30080,7 @@
29760
30080
  UsersPage.prototype.restoreFilterOrLoad = function () {
29761
30081
  return __awaiter(this, void 0, void 0, function () {
29762
30082
  var json, filter;
29763
- return __generator(this, function (_a) {
30083
+ return __generator(this, function (_b) {
29764
30084
  this.markAsLoading();
29765
30085
  console.debug("[users] Restoring filter from settings...");
29766
30086
  json = this.settings.getPageSettings(this.settingsId, SETTINGS_FILTER) || {};
@@ -29777,6 +30097,56 @@
29777
30097
  formControl.setValue(null);
29778
30098
  return false;
29779
30099
  };
30100
+ UsersPage.prototype.openComposeMessageModal = function (event) {
30101
+ return __awaiter(this, void 0, void 0, function () {
30102
+ var recipients, hasTopModal, modal, data;
30103
+ var _this = this;
30104
+ return __generator(this, function (_b) {
30105
+ switch (_b.label) {
30106
+ case 0:
30107
+ recipients = (this.selection.selected || [])
30108
+ .map(function (row) { return row.currentData; })
30109
+ .map(exports.Person.fromObject)
30110
+ .map(function (p) {
30111
+ var _a;
30112
+ var target = p.asObject({ minify: true });
30113
+ target.department = (_a = p.department) === null || _a === void 0 ? void 0 : _a.asObject();
30114
+ return target;
30115
+ });
30116
+ return [4 /*yield*/, this.modalCtrl.getTop()];
30117
+ case 1:
30118
+ hasTopModal = !!(_b.sent());
30119
+ return [4 /*yield*/, this.modalCtrl.create({
30120
+ component: MessageModal,
30121
+ componentProps: {
30122
+ suggestFn: function (value, filter, sortBy, sortDirection) { return _this.dataService.suggest(value, filter, sortBy, sortDirection); },
30123
+ data: {
30124
+ recipients: recipients
30125
+ }
30126
+ },
30127
+ cssClass: hasTopModal && 'stack-modal'
30128
+ })];
30129
+ case 2:
30130
+ modal = _b.sent();
30131
+ // Open the modal
30132
+ return [4 /*yield*/, modal.present()];
30133
+ case 3:
30134
+ // Open the modal
30135
+ _b.sent();
30136
+ return [4 /*yield*/, modal.onDidDismiss()];
30137
+ case 4:
30138
+ data = (_b.sent()).data;
30139
+ if (!data || !(data instanceof exports.Message))
30140
+ return [2 /*return*/]; // CANCELLED
30141
+ console.info('[users] received message to send: ', data);
30142
+ return [4 /*yield*/, this.messageService.send(data)];
30143
+ case 5:
30144
+ _b.sent();
30145
+ return [2 /*return*/];
30146
+ }
30147
+ });
30148
+ });
30149
+ };
29780
30150
  /* -- protected methods -- */
29781
30151
  UsersPage.prototype.markForCheck = function () {
29782
30152
  this.cd.markForCheck();
@@ -29786,7 +30156,7 @@
29786
30156
  UsersPage.decorators = [
29787
30157
  { type: i0.Component, args: [{
29788
30158
  selector: 'app-users-table',
29789
- 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 <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 <!-- 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'].value\"\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",
30159
+ 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",
29790
30160
  providers: [
29791
30161
  { provide: ngxMaterialTable.ValidatorService, useExisting: PersonValidatorService }
29792
30162
  ],
@@ -29797,12 +30167,13 @@
29797
30167
  ];
29798
30168
  UsersPage.ctorParameters = function () { return [
29799
30169
  { type: i0.Injector },
30170
+ { type: i1.FormBuilder },
29800
30171
  { type: AccountService },
29801
30172
  { type: ngxMaterialTable.ValidatorService },
29802
30173
  { type: ConfigService },
29803
30174
  { type: PersonService },
30175
+ { type: MessageService },
29804
30176
  { type: i0.ChangeDetectorRef },
29805
- { type: i1.FormBuilder },
29806
30177
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
29807
30178
  ]; };
29808
30179
  UsersPage.propDecorators = {
@@ -29830,22 +30201,24 @@
29830
30201
  UsersPage
29831
30202
  ],
29832
30203
  exports: [
30204
+ SocialModule,
29833
30205
  UsersPage
29834
30206
  ]
29835
30207
  },] }
29836
30208
  ];
29837
30209
  AdminModule.ctorParameters = function () { return []; };
29838
30210
 
29839
- var ɵ0 = {
30211
+ var ɵ0$c = {
29840
30212
  profile: 'ADMIN'
29841
30213
  };
29842
- var routes$5 = [
30214
+ var routes = [
29843
30215
  {
29844
30216
  path: 'users',
29845
30217
  pathMatch: 'full',
29846
30218
  component: UsersPage,
29847
30219
  canActivate: [AuthGuardService],
29848
- data: ɵ0
30220
+ canDeactivate: [ComponentDirtyGuard],
30221
+ data: ɵ0$c
29849
30222
  }
29850
30223
  ];
29851
30224
  var AdminRoutingModule = /** @class */ (function () {
@@ -29858,36 +30231,30 @@
29858
30231
  imports: [
29859
30232
  SharedRoutingModule,
29860
30233
  AdminModule,
29861
- i3.RouterModule.forChild(routes$5)
30234
+ i3.RouterModule.forChild(routes)
29862
30235
  ],
29863
30236
  exports: [i3.RouterModule]
29864
30237
  },] }
29865
30238
  ];
29866
30239
 
29867
- var ErrorCodes = {
29868
- LOAD_PERSONS_ERROR: 100,
29869
- SAVE_PERSONS_ERROR: 101,
29870
- DELETE_PERSONS_ERROR: 102,
29871
- };
29872
-
29873
- var EntityTestClass$1 = /** @class */ (function () {
30240
+ var EntityTestClass = /** @class */ (function () {
29874
30241
  function EntityTestClass() {
29875
30242
  }
29876
30243
  return EntityTestClass;
29877
30244
  }());
29878
- var FAKE_ENTITIES$1 = [
30245
+ var FAKE_ENTITIES = [
29879
30246
  { id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
29880
30247
  { id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
29881
30248
  { id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
29882
30249
  ];
29883
- function deepCopy$1(values, size) {
30250
+ function deepCopy(values, size) {
29884
30251
  if (isNil(size)) {
29885
- return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
30252
+ return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
29886
30253
  }
29887
30254
  var result = [];
29888
30255
  var i = 1;
29889
30256
  while (result.length < size) {
29890
- result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
30257
+ result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
29891
30258
  var name = entity.name + ' #' + i;
29892
30259
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
29893
30260
  }));
@@ -29897,7 +30264,7 @@
29897
30264
  var AutocompleteTestPage = /** @class */ (function () {
29898
30265
  function AutocompleteTestPage(formBuilder) {
29899
30266
  this.formBuilder = formBuilder;
29900
- this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
30267
+ this._items = deepCopy(FAKE_ENTITIES, 100);
29901
30268
  this._$items = new rxjs.BehaviorSubject(undefined);
29902
30269
  this.autocompleteFields = new MatAutocompleteConfigHolder();
29903
30270
  this.memoryHide = false;
@@ -29943,7 +30310,7 @@
29943
30310
  });
29944
30311
  // From items
29945
30312
  this.autocompleteFields.add('entity-items-large', {
29946
- items: FAKE_ENTITIES$1.slice(),
30313
+ items: FAKE_ENTITIES.slice(),
29947
30314
  attributes: ['label', 'name', 'description', 'comments'],
29948
30315
  displayWith: this.entityToString
29949
30316
  });
@@ -29965,13 +30332,13 @@
29965
30332
  var _this = this;
29966
30333
  return __generator(this, function (_a) {
29967
30334
  data = {
29968
- entity: deepCopy$1(FAKE_ENTITIES$1)[0],
30335
+ entity: deepCopy(FAKE_ENTITIES)[0],
29969
30336
  // This item is NOT in the items list => i should be displayed anyway
29970
30337
  missingEntity: {
29971
30338
  id: -1, label: '??', name: 'Missing item'
29972
30339
  },
29973
- disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
29974
- entities: deepCopy$1(FAKE_ENTITIES$1)
30340
+ disableEntity: deepCopy(FAKE_ENTITIES)[2],
30341
+ entities: deepCopy(FAKE_ENTITIES)
29975
30342
  };
29976
30343
  this.form.setValue(data);
29977
30344
  // Load observables
@@ -30140,13 +30507,13 @@
30140
30507
  { type: i1.FormBuilder }
30141
30508
  ]; };
30142
30509
 
30143
- var moment$2 = momentImported__namespace;
30510
+ var moment$5 = momentImported__namespace;
30144
30511
  var SwipeTestPage = /** @class */ (function () {
30145
30512
  function SwipeTestPage(formBuilder, dateFormatPipe) {
30146
30513
  this.formBuilder = formBuilder;
30147
30514
  this.dateFormatPipe = dateFormatPipe;
30148
30515
  this.$dates = new rxjs.BehaviorSubject(undefined);
30149
- this._today = moment$2().startOf('day');
30516
+ this._today = moment$5().startOf('day');
30150
30517
  this.form = formBuilder.group({
30151
30518
  empty: [null, i1.Validators.required],
30152
30519
  date: [null, i1.Validators.compose([i1.Validators.required, SharedValidators.validDate])],
@@ -30160,7 +30527,7 @@
30160
30527
  var _this = this;
30161
30528
  var dates = [];
30162
30529
  for (var d = 0; d < 7; d++) {
30163
- dates[d] = moment$2(this._today).add(d - 3, 'day');
30530
+ dates[d] = moment$5(this._today).add(d - 3, 'day');
30164
30531
  }
30165
30532
  this.$dates.next(dates);
30166
30533
  this.loadData();
@@ -30207,7 +30574,7 @@
30207
30574
  { type: DateFormatPipe }
30208
30575
  ]; };
30209
30576
 
30210
- var moment$1 = momentImported__namespace;
30577
+ var moment$6 = momentImported__namespace;
30211
30578
  var DateTimeTestPage = /** @class */ (function () {
30212
30579
  function DateTimeTestPage(platform, formBuilder, cd) {
30213
30580
  this.platform = platform;
@@ -30242,7 +30609,7 @@
30242
30609
  var now, data;
30243
30610
  var _this = this;
30244
30611
  return __generator(this, function (_a) {
30245
- now = moment$1();
30612
+ now = moment$6();
30246
30613
  data = {
30247
30614
  empty: toDateISOString(now.clone().add(2, 'hours')),
30248
30615
  enable: toDateISOString(now),
@@ -30307,12 +30674,12 @@
30307
30674
  { type: i0.ChangeDetectorRef }
30308
30675
  ]; };
30309
30676
 
30310
- var EntityTestClass = /** @class */ (function () {
30677
+ var EntityTestClass$1 = /** @class */ (function () {
30311
30678
  function EntityTestClass() {
30312
30679
  }
30313
30680
  return EntityTestClass;
30314
30681
  }());
30315
- var FAKE_ENTITIES = [
30682
+ var FAKE_ENTITIES$1 = [
30316
30683
  { id: 1, label: 'AAA', name: 'Item A' },
30317
30684
  { id: 2, label: 'BBB', name: 'Item B' },
30318
30685
  { id: 3, label: 'CCC', name: 'Item C' },
@@ -30321,14 +30688,14 @@
30321
30688
  { id: 6, label: 'FFF', name: 'Item F' },
30322
30689
  { id: 7, label: 'GGG', name: 'Item G' }
30323
30690
  ];
30324
- function deepCopy(values, size) {
30691
+ function deepCopy$1(values, size) {
30325
30692
  if (isNil(size)) {
30326
- return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
30693
+ return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
30327
30694
  }
30328
30695
  var result = [];
30329
30696
  var i = 1;
30330
30697
  while (result.length < size) {
30331
- result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
30698
+ result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
30332
30699
  var name = entity.name + ' #' + i;
30333
30700
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
30334
30701
  }));
@@ -30338,7 +30705,7 @@
30338
30705
  var ChipsTestPage = /** @class */ (function () {
30339
30706
  function ChipsTestPage(formBuilder) {
30340
30707
  this.formBuilder = formBuilder;
30341
- this._items = deepCopy(FAKE_ENTITIES, 100);
30708
+ this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
30342
30709
  this._$items = new rxjs.BehaviorSubject(undefined);
30343
30710
  this.autocompleteFields = new MatAutocompleteConfigHolder();
30344
30711
  this.form = formBuilder.group({
@@ -30381,7 +30748,7 @@
30381
30748
  var items, data;
30382
30749
  var _this = this;
30383
30750
  return __generator(this, function (_a) {
30384
- items = deepCopy(FAKE_ENTITIES);
30751
+ items = deepCopy$1(FAKE_ENTITIES$1);
30385
30752
  data = {
30386
30753
  entity: items.slice(0, 1),
30387
30754
  entityInitial: items.slice(1, 2),
@@ -30518,7 +30885,7 @@
30518
30885
  { type: i1.FormBuilder }
30519
30886
  ]; };
30520
30887
 
30521
- var moment = momentImported__namespace;
30888
+ var moment$7 = momentImported__namespace;
30522
30889
  var DateTestPage = /** @class */ (function () {
30523
30890
  function DateTestPage(formBuilder, cd) {
30524
30891
  this.formBuilder = formBuilder;
@@ -30530,7 +30897,8 @@
30530
30897
  this.timezone = 'Indian/Mahe';
30531
30898
  this.stringify = JSON.stringify;
30532
30899
  this.form = formBuilder.group({
30533
- empty: [null, i1.Validators.required],
30900
+ empty: [null, SharedValidators.validDate],
30901
+ emptyRequired: [null, i1.Validators.compose([i1.Validators.required, SharedValidators.validDate])],
30534
30902
  enable: [null, i1.Validators.required],
30535
30903
  disable: [null, i1.Validators.required],
30536
30904
  readonly: [null],
@@ -30554,10 +30922,11 @@
30554
30922
  var now, nowAtMahe, data;
30555
30923
  var _this = this;
30556
30924
  return __generator(this, function (_a) {
30557
- now = moment();
30925
+ now = moment$7();
30558
30926
  nowAtMahe = now.clone().tz(this.timezone).startOf('day');
30559
30927
  data = {
30560
- empty: toDateISOString(now.clone().add(2, 'hours')),
30928
+ empty: null,
30929
+ emptyRequired: null,
30561
30930
  enable: toDateISOString(now),
30562
30931
  disable: now.clone(),
30563
30932
  readonly: now.clone(),
@@ -30615,7 +30984,7 @@
30615
30984
  DateTestPage.decorators = [
30616
30985
  { type: i0.Component, args: [{
30617
30986
  selector: 'app-data-test',
30618
- template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Date field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <ion-grid>\n\n <!-- debugging memory leak -->\n <ion-row><ion-col><ion-text><h4>Debug memory leak</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\">Start timer</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\">Stop timer</ion-button>\n </ion-col>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"never\">\n <input matInput type=\"text\" hidden>\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [value]=\"memoryMobile\">\n Mobile ?\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n <ion-col>\n <mat-date-field formControlName=\"empty\"\n *ngIf=\"!memoryHide\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"memoryMobile\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-col>\n </ion-row>\n\n <!-- Mobile mode -->\n <ion-row><ion-col><ion-text><h4>Mobile mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"empty\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- TimeZone -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n TimeZone\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>timezone=\"{{timezone}}\" value=\"{{stringify(form.controls.timezone.value)}}\"</pre></small>\n <pre>Should display using the browser TZ,<br/>but serialize/deserialize for the given TZ</pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field #readonlyField formControlName=\"timezone\"\n placeholder=\"Date\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [timezone]=\"timezone\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <!-- debug console -->\n <ion-row>\n <!-- buttons -->\n <ion-col size=\"2\">\n <!-- submit form -->\n <ion-button (click)=\"doSubmit($event)\"\n fill=\"outline\">\n <ion-icon name=\"checkmark\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <!-- clear log -->\n <ion-button (click)=\"clearLogPanel()\"\n fill=\"outline\">\n <ion-icon name=\"trash\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"10\" *ngIf=\"showLogPanel\">\n <ion-text color=\"primary\">Log:<br/></ion-text>\n <div class=\"ion-padding-start\">\n <ion-text color=\"medium\">\n <small [innerHTML]=\"logContent\"></small>\n </ion-text>\n </div>\n </ion-col>\n </ion-row>\n\n <hr/>\n\n <!-- Desktop mode -->\n <ion-row><ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"empty\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- TimeZone -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n TimeZone\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>timezone=\"{{timezone}}\" value={{stringify(form.controls.timezone.value)}}</pre></small>\n <pre>Should display using the browser TZ,<br/>but serialize/deserialize for the given TZ</pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field #readonlyField formControlName=\"timezone\"\n placeholder=\"Date\"\n [mobile]=\"false\"\n [clearable]=\"true\"\n [timezone]=\"timezone\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-field #readonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n </form>\n\n</ion-content>\n"
30987
+ template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Date field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n\n <ion-grid>\n\n <!-- debugging memory leak -->\n <ion-row><ion-col><ion-text><h4>Debug memory leak</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\">Start timer</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\">Stop timer</ion-button>\n </ion-col>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"never\">\n <input matInput type=\"text\" hidden>\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [value]=\"memoryMobile\">\n Mobile ?\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n <ion-col>\n <mat-date-field formControlName=\"empty\"\n *ngIf=\"!memoryHide\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"memoryMobile\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-col>\n </ion-row>\n\n <!-- Mobile mode -->\n <ion-row><ion-col><ion-text><h4>Mobile mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"empty\"\n placeholder=\"Date\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value (required)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.emptyRequired.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"emptyRequired\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- TimeZone -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n TimeZone\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>timezone=\"{{timezone}}\" value=\"{{stringify(form.controls.timezone.value)}}\"</pre></small>\n <pre>Should display using the browser TZ,<br/>but serialize/deserialize for the given TZ</pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"timezone\"\n placeholder=\"Date\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [timezone]=\"timezone\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"mobileReadonlyField.readonly=$event.checked\" [checked]=\"mobileReadonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-field #mobileReadonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <!-- debug console -->\n <ion-row>\n <!-- buttons -->\n <ion-col size=\"2\">\n <!-- submit form -->\n <ion-button (click)=\"doSubmit($event)\"\n fill=\"outline\">\n <ion-icon name=\"checkmark\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <!-- clear log -->\n <ion-button (click)=\"clearLogPanel()\"\n fill=\"outline\">\n <ion-icon name=\"trash\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"10\" *ngIf=\"showLogPanel\">\n <ion-text color=\"primary\">Log:<br/></ion-text>\n <div class=\"ion-padding-start\">\n <ion-text color=\"medium\">\n <small [innerHTML]=\"logContent\"></small>\n </ion-text>\n </div>\n </ion-col>\n </ion-row>\n\n <hr/>\n\n <!-- Desktop mode -->\n <ion-row><ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"empty\"\n placeholder=\"Date\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value (required)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.emptyRequired.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"emptyRequired\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- TimeZone -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n TimeZone\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>timezone=\"{{timezone}}\" value={{stringify(form.controls.timezone.value)}}</pre></small>\n <pre>Should display using the browser TZ,<br/>but serialize/deserialize for the given TZ</pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"timezone\"\n placeholder=\"Date\"\n [mobile]=\"false\"\n [clearable]=\"true\"\n [timezone]=\"timezone\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"desktopReadonlyField.readonly=$event.checked\" [checked]=\"desktopReadonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-field #desktopReadonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n\n </form>\n</ion-content>\n"
30619
30988
  },] }
30620
30989
  ];
30621
30990
  DateTestPage.ctorParameters = function () { return [
@@ -30635,7 +31004,7 @@
30635
31004
  { label: 'Shared directives', divider: true },
30636
31005
  { label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
30637
31006
  ];
30638
- var routes$4 = [
31007
+ var routes$1 = [
30639
31008
  {
30640
31009
  path: '',
30641
31010
  pathMatch: 'full',
@@ -30695,7 +31064,7 @@
30695
31064
  i1.ReactiveFormsModule,
30696
31065
  SharedMaterialModule,
30697
31066
  i1$2.TranslateModule.forChild(),
30698
- i3.RouterModule.forChild(routes$4)
31067
+ i3.RouterModule.forChild(routes$1)
30699
31068
  ],
30700
31069
  declarations: [
30701
31070
  DateTimeTestPage,
@@ -30757,7 +31126,7 @@
30757
31126
  { type: i1$2.TranslateService }
30758
31127
  ]; };
30759
31128
 
30760
- var routes$3 = [
31129
+ var routes$2 = [
30761
31130
  {
30762
31131
  path: 'toast',
30763
31132
  pathMatch: 'full',
@@ -30775,7 +31144,7 @@
30775
31144
  i1$4.CommonModule,
30776
31145
  i1$5.IonicModule,
30777
31146
  i1$2.TranslateModule.forChild(),
30778
- i3.RouterModule.forChild(routes$3)
31147
+ i3.RouterModule.forChild(routes$2)
30779
31148
  ],
30780
31149
  declarations: [
30781
31150
  ToastTestingPage
@@ -30855,7 +31224,7 @@
30855
31224
  { type: i1$5.PopoverController }
30856
31225
  ]; };
30857
31226
 
30858
- var routes$2 = [
31227
+ var routes$3 = [
30859
31228
  {
30860
31229
  path: 'upload-file',
30861
31230
  pathMatch: 'full',
@@ -30873,7 +31242,7 @@
30873
31242
  i1$4.CommonModule,
30874
31243
  i1$5.IonicModule,
30875
31244
  i1$2.TranslateModule.forChild(),
30876
- i3.RouterModule.forChild(routes$2)
31245
+ i3.RouterModule.forChild(routes$3)
30877
31246
  ],
30878
31247
  declarations: [
30879
31248
  UploadFileTestingPage
@@ -31297,7 +31666,7 @@
31297
31666
  { type: i1$5.PopoverController }
31298
31667
  ]; };
31299
31668
 
31300
- var routes$1 = [
31669
+ var routes$4 = [
31301
31670
  {
31302
31671
  path: 'text-popover',
31303
31672
  pathMatch: 'full',
@@ -31315,7 +31684,7 @@
31315
31684
  i1$4.CommonModule,
31316
31685
  i1$5.IonicModule,
31317
31686
  i1$2.TranslateModule.forChild(),
31318
- i3.RouterModule.forChild(routes$1)
31687
+ i3.RouterModule.forChild(routes$4)
31319
31688
  ],
31320
31689
  declarations: [
31321
31690
  TextPopoverTestingPage
@@ -31332,7 +31701,7 @@
31332
31701
  { label: 'Table', page: '/testing/core/table' },
31333
31702
  { label: 'Text popover', page: '/testing/core/text-popover' }
31334
31703
  ];
31335
- var routes = [
31704
+ var routes$5 = [
31336
31705
  {
31337
31706
  path: '',
31338
31707
  pathMatch: 'full',
@@ -31359,7 +31728,7 @@
31359
31728
  imports: [
31360
31729
  i1$4.CommonModule,
31361
31730
  i1$2.TranslateModule.forChild(),
31362
- i3.RouterModule.forChild(routes),
31731
+ i3.RouterModule.forChild(routes$5),
31363
31732
  // Sub modules
31364
31733
  TableTestingModule,
31365
31734
  TextPopoverTestingModule
@@ -31482,7 +31851,6 @@
31482
31851
  exports.EntityStore = EntityStore;
31483
31852
  exports.EntityUtils = EntityUtils;
31484
31853
  exports.Environment = Environment;
31485
- exports.ErrorCodes = ErrorCodes;
31486
31854
  exports.EvenPipe = EvenPipe;
31487
31855
  exports.FileResponse = FileResponse;
31488
31856
  exports.FileService = FileService;
@@ -31498,7 +31866,7 @@
31498
31866
  exports.FormGetControlPipe = FormGetControlPipe;
31499
31867
  exports.FormGetGroupPipe = FormGetGroupPipe;
31500
31868
  exports.FormGetPipe = FormGetPipe;
31501
- exports.Fragments = Fragments;
31869
+ exports.Fragments = Fragments$1;
31502
31870
  exports.GraphqlService = GraphqlService;
31503
31871
  exports.HAMMER_PRESS_TIME = HAMMER_PRESS_TIME;
31504
31872
  exports.HAMMER_TAP_TIME = HAMMER_TAP_TIME;
@@ -31547,6 +31915,11 @@
31547
31915
  exports.MenuComponent = MenuComponent;
31548
31916
  exports.MenuItems = MenuItems;
31549
31917
  exports.MenuService = MenuService;
31918
+ exports.MessageForm = MessageForm;
31919
+ exports.MessageModal = MessageModal;
31920
+ exports.MessageService = MessageService;
31921
+ exports.MessageTypeList = MessageTypeList;
31922
+ exports.MessageTypes = MessageTypes;
31550
31923
  exports.ModalToolbarComponent = ModalToolbarComponent;
31551
31924
  exports.NetworkService = NetworkService;
31552
31925
  exports.NgInitDirective = NgInitDirective;
@@ -31603,6 +31976,7 @@
31603
31976
  exports.SharedTestingModule = SharedTestingModule;
31604
31977
  exports.SharedTestsPage = SharedTestsPage;
31605
31978
  exports.SharedValidators = SharedValidators;
31979
+ exports.SocialErrorCodes = SocialErrorCodes;
31606
31980
  exports.SocialModule = SocialModule;
31607
31981
  exports.StartableService = StartableService;
31608
31982
  exports.StatusById = StatusById;
@@ -31630,6 +32004,7 @@
31630
32004
  exports.UploadFilePopover = UploadFilePopover;
31631
32005
  exports.UploadFileTestingModule = UploadFileTestingModule;
31632
32006
  exports.UploadFileTestingPage = UploadFileTestingPage;
32007
+ exports.UserEventFragments = UserEventFragments;
31633
32008
  exports.UserEventService = UserEventService;
31634
32009
  exports.UserEventTypes = UserEventTypes;
31635
32010
  exports.UserEventsTable = UserEventsTable;
@@ -31781,23 +32156,23 @@
31781
32156
  exports.waitForTrue = waitForTrue;
31782
32157
  exports.waitIdle = waitIdle;
31783
32158
  exports.waitWhilePending = waitWhilePending;
31784
- exports["ɵ0"] = ɵ0$c;
31785
- exports["ɵa"] = CustomReuseStrategy;
31786
- exports["ɵb"] = MatNumpadDomService;
31787
- exports["ɵc"] = isFocusableElement;
31788
- exports["ɵd"] = RegisterForm;
31789
- exports["ɵe"] = AccountValidatorService;
31790
- exports["ɵf"] = RegisterModal;
31791
- exports["ɵg"] = UserSettingsValidatorService;
31792
- exports["ɵh"] = LocalSettingsValidatorService;
31793
- exports["ɵi"] = AppIconComponent;
31794
- exports["ɵj"] = DateTestPage;
31795
- exports["ɵk"] = NumpadTestPage;
31796
- exports["ɵl"] = MatBadgeIconTestPage;
31797
- exports["ɵm"] = ToastTestingModule;
31798
- exports["ɵn"] = ToastTestingPage;
32159
+ exports0 = ɵ0;
32160
+ exports.ɵa = CustomReuseStrategy;
32161
+ exports.ɵb = MatNumpadDomService;
32162
+ exports.ɵc = isFocusableElement;
32163
+ exports.ɵd = RegisterForm;
32164
+ exports.ɵe = AccountValidatorService;
32165
+ exports.ɵf = RegisterModal;
32166
+ exports.ɵg = UserSettingsValidatorService;
32167
+ exports.ɵh = LocalSettingsValidatorService;
32168
+ exports.ɵi = AppIconComponent;
32169
+ exports.ɵj = DateTestPage;
32170
+ exports.ɵk = NumpadTestPage;
32171
+ exports.ɵl = MatBadgeIconTestPage;
32172
+ exports.ɵm = ToastTestingModule;
32173
+ exports.ɵn = ToastTestingPage;
31799
32174
 
31800
32175
  Object.defineProperty(exports, '__esModule', { value: true });
31801
32176
 
31802
- }));
32177
+ })));
31803
32178
  //# sourceMappingURL=sumaris-net.ngx-components.umd.js.map