@sumaris-net/ngx-components 1.18.6 → 1.19.1

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 (62) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +806 -425
  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/local-settings.service.js +5 -5
  11. package/esm2015/src/app/core/services/model/referential.model.js +1 -1
  12. package/esm2015/src/app/core/services/platform.service.js +3 -4
  13. package/esm2015/src/app/shared/dates.js +3 -3
  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/pipes/date-format.pipe.js +7 -1
  18. package/esm2015/src/app/shared/platforms.js +20 -4
  19. package/esm2015/src/app/shared/validator/validators.js +2 -2
  20. package/esm2015/src/app/social/message/message.form.js +73 -0
  21. package/esm2015/src/app/social/message/message.modal.js +96 -0
  22. package/esm2015/src/app/social/message/message.model.js +65 -0
  23. package/esm2015/src/app/social/message/message.service.js +87 -0
  24. package/esm2015/src/app/social/social.errors.js +6 -0
  25. package/esm2015/src/app/social/social.module.js +12 -15
  26. package/esm2015/src/app/social/user-event/user-event.fragments.js +27 -0
  27. package/esm2015/src/app/social/user-event/user-event.model.js +46 -0
  28. package/esm2015/src/app/social/user-event/user-event.service.js +367 -0
  29. package/esm2015/src/app/social/user-event/user-events.table.js +154 -0
  30. package/fesm2015/sumaris-net.ngx-components.js +737 -408
  31. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  32. package/package.json +4 -3
  33. package/public_api.d.ts +9 -4
  34. package/src/app/admin/users/list/users.d.ts +10 -6
  35. package/src/app/core/services/local-settings.service.d.ts +3 -2
  36. package/src/app/core/services/model/referential.model.d.ts +7 -7
  37. package/src/app/shared/material/datetime/material.date.d.ts +6 -8
  38. package/src/app/shared/material/datetime/material.datetime.d.ts +2 -2
  39. package/src/app/shared/pipes/date-format.pipe.d.ts +2 -0
  40. package/src/app/shared/platforms.d.ts +1 -1
  41. package/src/app/social/message/message.form.d.ts +27 -0
  42. package/src/app/social/message/message.modal.d.ts +36 -0
  43. package/src/app/social/message/message.model.d.ts +31 -0
  44. package/src/app/social/message/message.service.d.ts +24 -0
  45. package/src/app/social/{services/errors.d.ts → social.errors.d.ts} +2 -1
  46. package/src/app/social/social.module.d.ts +0 -2
  47. package/src/app/social/{services/social.fragments.d.ts → user-event/user-event.fragments.d.ts} +1 -1
  48. package/src/app/social/{services/model → user-event}/user-event.model.d.ts +1 -1
  49. package/src/app/social/{services → user-event}/user-event.service.d.ts +4 -3
  50. package/src/app/social/{list → user-event}/user-events.table.d.ts +2 -2
  51. package/src/assets/i18n/en-US.json +4 -4
  52. package/src/assets/i18n/en.json +5 -4
  53. package/src/assets/i18n/fr.json +24 -4
  54. package/src/theme/_ionic.globals.scss +2 -1
  55. package/sumaris-net.ngx-components.metadata.json +1 -1
  56. package/esm2015/src/app/admin/services/errors.js +0 -6
  57. package/esm2015/src/app/social/list/user-events.table.js +0 -154
  58. package/esm2015/src/app/social/services/errors.js +0 -5
  59. package/esm2015/src/app/social/services/model/user-event.model.js +0 -46
  60. package/esm2015/src/app/social/services/social.fragments.js +0 -27
  61. package/esm2015/src/app/social/services/user-event.service.js +0 -367
  62. 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 === 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 === 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;
@@ -2261,9 +2254,15 @@
2261
2254
  var date = momentImported.isMoment(value) ? value : this.dateAdapter.parse(value, DATE_ISO_PATTERN);
2262
2255
  return date && this.dateAdapter.format(date, pattern) || '';
2263
2256
  };
2257
+ DateFormatPipe.prototype.format = function (date, pattern) {
2258
+ return this.dateAdapter.format(date, pattern);
2259
+ };
2260
+ DateFormatPipe.prototype.parse = function (value, parseFormat) {
2261
+ return momentImported.isMoment(value) ? value : this.dateAdapter.parse(value, parseFormat || DATE_ISO_PATTERN);
2262
+ };
2264
2263
  return DateFormatPipe;
2265
2264
  }());
2266
- 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" });
2267
2266
  DateFormatPipe.decorators = [
2268
2267
  { type: i0.Pipe, args: [{
2269
2268
  name: 'dateFormat'
@@ -2275,7 +2274,7 @@
2275
2274
  { type: i1$2.TranslateService }
2276
2275
  ]; };
2277
2276
 
2278
- var moment$7 = momentImported__namespace;
2277
+ var moment = momentImported__namespace;
2279
2278
  var DateDiffDurationPipe = /** @class */ (function () {
2280
2279
  function DateDiffDurationPipe(dateAdapter, translate) {
2281
2280
  var _this = this;
@@ -2292,10 +2291,10 @@
2292
2291
  return this.format(startDate, endDate);
2293
2292
  };
2294
2293
  DateDiffDurationPipe.prototype.format = function (startDate, endDate) {
2295
- var duration = moment$7.duration(endDate.diff(startDate));
2294
+ var duration = moment.duration(endDate.diff(startDate));
2296
2295
  if (duration.asMinutes() < 0)
2297
2296
  return '';
2298
- var timeDuration = moment$7(0)
2297
+ var timeDuration = moment(0)
2299
2298
  .hour(duration.hours())
2300
2299
  .minute(duration.minutes());
2301
2300
  var days = Math.floor(duration.asDays());
@@ -2303,7 +2302,7 @@
2303
2302
  };
2304
2303
  return DateDiffDurationPipe;
2305
2304
  }());
2306
- 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" });
2307
2306
  DateDiffDurationPipe.decorators = [
2308
2307
  { type: i0.Pipe, args: [{
2309
2308
  name: 'dateDiffDuration'
@@ -2325,7 +2324,7 @@
2325
2324
  };
2326
2325
  return DateFromNowPipe;
2327
2326
  }());
2328
- 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" });
2329
2328
  DateFromNowPipe.decorators = [
2330
2329
  { type: i0.Pipe, args: [{
2331
2330
  name: 'dateFromNow'
@@ -2394,7 +2393,7 @@
2394
2393
  value *= -1;
2395
2394
  }
2396
2395
  }
2397
- var degrees = roundFloat$1(value, opts.maxDecimals).toString();
2396
+ var degrees = roundFloat(value, opts.maxDecimals).toString();
2398
2397
  // Add sign
2399
2398
  var sign = negative ? '-' : '+';
2400
2399
  if (opts.placeholderChar) {
@@ -2445,7 +2444,7 @@
2445
2444
  }
2446
2445
  var degrees = Math.trunc(value);
2447
2446
  var minutes = Math.trunc((value - degrees) * 60);
2448
- var seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
2447
+ var seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
2449
2448
  while (seconds >= 60) {
2450
2449
  seconds -= 60;
2451
2450
  minutes += 1;
@@ -2513,7 +2512,7 @@
2513
2512
  }
2514
2513
  }
2515
2514
  var degrees = Math.trunc(value);
2516
- var minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
2515
+ var minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
2517
2516
  while (minutes >= 60) {
2518
2517
  minutes -= 60;
2519
2518
  degrees += 1;
@@ -2564,15 +2563,15 @@
2564
2563
  return NaN;
2565
2564
  }
2566
2565
  if (pattern === 'DD')
2567
- return roundFloat$1(degrees, maxDecimals);
2566
+ return roundFloat(degrees, maxDecimals);
2568
2567
  var minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
2569
2568
  var seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
2570
2569
  var direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
2571
2570
  var sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
2572
2571
  degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
2573
- return roundFloat$1(degrees, maxDecimals);
2572
+ return roundFloat(degrees, maxDecimals);
2574
2573
  }
2575
- function roundFloat$1(input, maxDecimals) {
2574
+ function roundFloat(input, maxDecimals) {
2576
2575
  if (maxDecimals > 0) {
2577
2576
  var powDecimal = Math.pow(10, maxDecimals);
2578
2577
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -2595,7 +2594,7 @@
2595
2594
  };
2596
2595
  return LatLongFormatPipe;
2597
2596
  }());
2598
- 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" });
2599
2598
  LatLongFormatPipe.decorators = [
2600
2599
  { type: i0.Pipe, args: [{
2601
2600
  name: 'latLongFormat'
@@ -2608,7 +2607,7 @@
2608
2607
  }
2609
2608
  return LatitudeFormatPipe;
2610
2609
  }());
2611
- 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" });
2612
2611
  LatitudeFormatPipe.decorators = [
2613
2612
  { type: i0.Pipe, args: [{
2614
2613
  name: 'latitudeFormat'
@@ -2621,7 +2620,7 @@
2621
2620
  }
2622
2621
  return LongitudeFormatPipe;
2623
2622
  }());
2624
- 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" });
2625
2624
  LongitudeFormatPipe.decorators = [
2626
2625
  { type: i0.Pipe, args: [{
2627
2626
  name: 'longitudeFormat'
@@ -2644,7 +2643,7 @@
2644
2643
  };
2645
2644
  return NumberFormatPipe;
2646
2645
  }());
2647
- 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" });
2648
2647
  NumberFormatPipe.decorators = [
2649
2648
  { type: i0.Pipe, args: [{
2650
2649
  name: 'numberFormat'
@@ -2687,7 +2686,7 @@
2687
2686
  };
2688
2687
  return HighlightPipe;
2689
2688
  }());
2690
- 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" });
2691
2690
  HighlightPipe.decorators = [
2692
2691
  { type: i0.Pipe, args: [{
2693
2692
  name: 'highlight'
@@ -2755,7 +2754,7 @@
2755
2754
  { type: i0.Pipe, args: [{ name: 'fileSize' },] }
2756
2755
  ];
2757
2756
 
2758
- var moment$6 = momentImported__namespace;
2757
+ var moment$1 = momentImported__namespace;
2759
2758
  var tz = momentTZImported__namespace;
2760
2759
  var DATE_UNIX_TIMESTAMP = 'X';
2761
2760
  var DATE_UNIX_MS_TIMESTAMP = 'x';
@@ -2766,10 +2765,10 @@
2766
2765
  this.toDuration = toDuration;
2767
2766
  }
2768
2767
  DateUtils.min = function (date1, date2) {
2769
- return date1 && date2 && date1.isSameOrBefore(date2) ? date1 : date2;
2768
+ return date1 && (!date2 || date1.isSameOrBefore(date2)) ? date1 : date2;
2770
2769
  };
2771
2770
  DateUtils.max = function (date1, date2) {
2772
- return !date1 ? date2 : (!date2 || date1.isSameOrAfter(date2) ? date1 : date2);
2771
+ return date1 && (!date2 || date1.isSameOrAfter(date2)) ? date1 : date2;
2773
2772
  };
2774
2773
  DateUtils.equals = function (date1, date2) {
2775
2774
  return DateUtils.isSame(date1, date2);
@@ -2833,32 +2832,32 @@
2833
2832
  if (!value || momentImported.isMoment(value))
2834
2833
  return value;
2835
2834
  // Parse the input value, as a ISO date time
2836
- var date = moment$6(value, DATE_ISO_PATTERN);
2835
+ var date = moment$1(value, DATE_ISO_PATTERN);
2837
2836
  if (date.isValid())
2838
2837
  return date;
2839
2838
  // Not valid: trying to convert from unix timestamp
2840
2839
  if (typeof value === 'string') {
2841
2840
  console.warn('Wrong date format - Trying to convert from local time: ' + value);
2842
2841
  if (value.length === 10) {
2843
- return moment$6(value, DATE_UNIX_TIMESTAMP);
2842
+ return moment$1(value, DATE_UNIX_TIMESTAMP);
2844
2843
  }
2845
2844
  else if (value.length === 13) {
2846
- return moment$6(value, DATE_UNIX_MS_TIMESTAMP);
2845
+ return moment$1(value, DATE_UNIX_MS_TIMESTAMP);
2847
2846
  }
2848
2847
  }
2849
2848
  console.warn('Unable to parse date: ' + value);
2850
2849
  return undefined;
2851
2850
  }
2852
2851
  function fromUnixTimestamp(timeInSec) {
2853
- return moment$6(timeInSec, DATE_UNIX_TIMESTAMP);
2852
+ return moment$1(timeInSec, DATE_UNIX_TIMESTAMP);
2854
2853
  }
2855
2854
  function fromUnixMsTimestamp(timeInMs) {
2856
- return moment$6(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2855
+ return moment$1(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2857
2856
  }
2858
2857
  function toDuration(value, unit) {
2859
2858
  if (!value)
2860
2859
  return undefined;
2861
- var duration = moment$6.duration(value, unit);
2860
+ var duration = moment$1.duration(value, unit);
2862
2861
  // fix 990+ ms
2863
2862
  if (duration.milliseconds() >= 990) {
2864
2863
  duration.add(1000 - duration.milliseconds(), 'ms');
@@ -2888,7 +2887,7 @@
2888
2887
  };
2889
2888
  return DurationPipe;
2890
2889
  }());
2891
- 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" });
2892
2891
  DurationPipe.decorators = [
2893
2892
  { type: i0.Pipe, args: [{
2894
2893
  name: 'duration'
@@ -2912,7 +2911,7 @@
2912
2911
  };
2913
2912
  return MathAbsPipe;
2914
2913
  }());
2915
- 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" });
2916
2915
  MathAbsPipe.decorators = [
2917
2916
  { type: i0.Pipe, args: [{
2918
2917
  name: 'mathAbs'
@@ -2927,7 +2926,7 @@
2927
2926
  };
2928
2927
  return EvenPipe;
2929
2928
  }());
2930
- 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" });
2931
2930
  EvenPipe.decorators = [
2932
2931
  { type: i0.Pipe, args: [{
2933
2932
  name: 'even'
@@ -2942,7 +2941,7 @@
2942
2941
  };
2943
2942
  return OddPipe;
2944
2943
  }());
2945
- 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" });
2946
2945
  OddPipe.decorators = [
2947
2946
  { type: i0.Pipe, args: [{
2948
2947
  name: 'odd'
@@ -3074,7 +3073,7 @@
3074
3073
  };
3075
3074
  return MapGetPipe;
3076
3075
  }());
3077
- 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" });
3078
3077
  MapGetPipe.decorators = [
3079
3078
  { type: i0.Pipe, args: [{
3080
3079
  name: 'mapGet'
@@ -3091,7 +3090,7 @@
3091
3090
  };
3092
3091
  return MapKeysPipe;
3093
3092
  }());
3094
- 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" });
3095
3094
  MapKeysPipe.decorators = [
3096
3095
  { type: i0.Pipe, args: [{
3097
3096
  name: 'mapKeys'
@@ -3108,7 +3107,7 @@
3108
3107
  };
3109
3108
  return MapValuesPipe;
3110
3109
  }());
3111
- 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" });
3112
3111
  MapValuesPipe.decorators = [
3113
3112
  { type: i0.Pipe, args: [{
3114
3113
  name: 'mapValues'
@@ -3124,7 +3123,7 @@
3124
3123
  };
3125
3124
  return IsNotNilOrBlankPipe;
3126
3125
  }());
3127
- 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" });
3128
3127
  IsNotNilOrBlankPipe.decorators = [
3129
3128
  { type: i0.Pipe, args: [{
3130
3129
  name: 'isNotNilOrBlank'
@@ -3139,7 +3138,7 @@
3139
3138
  };
3140
3139
  return IsNilOrBlankPipe;
3141
3140
  }());
3142
- 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" });
3143
3142
  IsNilOrBlankPipe.decorators = [
3144
3143
  { type: i0.Pipe, args: [{
3145
3144
  name: 'isNilOrBlank'
@@ -3154,7 +3153,7 @@
3154
3153
  };
3155
3154
  return ToStringPipe;
3156
3155
  }());
3157
- 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" });
3158
3157
  ToStringPipe.decorators = [
3159
3158
  { type: i0.Pipe, args: [{
3160
3159
  name: 'toString'
@@ -3169,7 +3168,7 @@
3169
3168
  };
3170
3169
  return StrLengthPipe;
3171
3170
  }());
3172
- 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" });
3173
3172
  StrLengthPipe.decorators = [
3174
3173
  { type: i0.Pipe, args: [{
3175
3174
  name: 'strLength'
@@ -3184,7 +3183,7 @@
3184
3183
  };
3185
3184
  return StrIncludesPipe;
3186
3185
  }());
3187
- 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" });
3188
3187
  StrIncludesPipe.decorators = [
3189
3188
  { type: i0.Pipe, args: [{
3190
3189
  name: 'strIncludes'
@@ -3275,7 +3274,7 @@
3275
3274
  };
3276
3275
  return TranslateContextService;
3277
3276
  }());
3278
- 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" });
3279
3278
  TranslateContextService.decorators = [
3280
3279
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3281
3280
  ];
@@ -3332,7 +3331,7 @@
3332
3331
  };
3333
3332
  return PropertyGetPipe;
3334
3333
  }());
3335
- 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" });
3336
3335
  PropertyGetPipe.decorators = [
3337
3336
  { type: i0.Pipe, args: [{
3338
3337
  name: 'propertyGet'
@@ -3358,7 +3357,7 @@
3358
3357
  ngInit: [{ type: i0.Output }]
3359
3358
  };
3360
3359
 
3361
- var moment$5 = momentImported__namespace;
3360
+ var moment$2 = momentImported__namespace;
3362
3361
  // @dynamic
3363
3362
  var SharedValidators = /** @class */ (function () {
3364
3363
  function SharedValidators() {
@@ -3441,7 +3440,7 @@
3441
3440
  };
3442
3441
  SharedValidators.validDate = function (control) {
3443
3442
  var value = control.value;
3444
- 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);
3445
3444
  if (date && (!date.isValid() || date.year() < 1970)) {
3446
3445
  return { validDate: true };
3447
3446
  }
@@ -4648,7 +4647,7 @@
4648
4647
  };
4649
4648
  return FormErrorTranslator;
4650
4649
  }());
4651
- 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" });
4652
4651
  FormErrorTranslator.decorators = [
4653
4652
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
4654
4653
  ];
@@ -4733,7 +4732,7 @@
4733
4732
  };
4734
4733
  return FormGetPipe;
4735
4734
  }());
4736
- 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" });
4737
4736
  FormGetPipe.decorators = [
4738
4737
  { type: i0.Pipe, args: [{
4739
4738
  name: 'formGet'
@@ -4748,7 +4747,7 @@
4748
4747
  };
4749
4748
  return FormGetControlPipe;
4750
4749
  }());
4751
- 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" });
4752
4751
  FormGetControlPipe.decorators = [
4753
4752
  { type: i0.Pipe, args: [{
4754
4753
  name: 'formGetControl'
@@ -4763,7 +4762,7 @@
4763
4762
  };
4764
4763
  return FormGetArrayPipe;
4765
4764
  }());
4766
- 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" });
4767
4766
  FormGetArrayPipe.decorators = [
4768
4767
  { type: i0.Pipe, args: [{
4769
4768
  name: 'formGetArray'
@@ -4778,7 +4777,7 @@
4778
4777
  };
4779
4778
  return FormGetGroupPipe;
4780
4779
  }());
4781
- 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" });
4782
4781
  FormGetGroupPipe.decorators = [
4783
4782
  { type: i0.Pipe, args: [{
4784
4783
  name: 'formGetGroup'
@@ -5124,9 +5123,9 @@
5124
5123
  var hour = parseInt(durationParts[0] || '0');
5125
5124
  var minute = parseInt(durationParts[1] || '0');
5126
5125
  var value = hour + (minute + 0.5) / 60;
5127
- return roundFloat(value, maxDecimals);
5126
+ return roundFloat$1(value, maxDecimals);
5128
5127
  }
5129
- function roundFloat(input, maxDecimals) {
5128
+ function roundFloat$1(input, maxDecimals) {
5130
5129
  if (maxDecimals > 0) {
5131
5130
  var powDecimal = Math.pow(10, maxDecimals);
5132
5131
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -5150,17 +5149,17 @@
5150
5149
  DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
5151
5150
  }
5152
5151
  };
5153
- var noop$7 = function () {
5152
+ var noop$1 = function () {
5154
5153
  };
5155
- var ɵ0$a = noop$7;
5154
+ var ɵ0$2 = noop$1;
5156
5155
  var MatLatLongField = /** @class */ (function () {
5157
5156
  function MatLatLongField(translate, formBuilder, cd, formGroupDir) {
5158
5157
  this.translate = translate;
5159
5158
  this.formBuilder = formBuilder;
5160
5159
  this.cd = cd;
5161
5160
  this.formGroupDir = formGroupDir;
5162
- this._onChangeCallback = noop$7;
5163
- this._onTouchedCallback = noop$7;
5161
+ this._onChangeCallback = noop$1;
5162
+ this._onTouchedCallback = noop$1;
5164
5163
  this._subscription = new rxjs.Subscription();
5165
5164
  this.disabling = false;
5166
5165
  this.writing = false;
@@ -5511,14 +5510,14 @@
5511
5510
  },] }
5512
5511
  ];
5513
5512
 
5514
- var DEFAULT_VALUE_ACCESSOR$5 = {
5513
+ var DEFAULT_VALUE_ACCESSOR = {
5515
5514
  provide: i1.NG_VALUE_ACCESSOR,
5516
5515
  useExisting: i0.forwardRef(function () { return MatDate; }),
5517
5516
  multi: true
5518
5517
  };
5519
- var DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
5520
- var noop$6 = function () { };
5521
- 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;
5522
5521
  var MatDate = /** @class */ (function () {
5523
5522
  function MatDate(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
5524
5523
  this.dateAdapter = dateAdapter;
@@ -5527,13 +5526,13 @@
5527
5526
  this.cd = cd;
5528
5527
  this.keyboard = keyboard;
5529
5528
  this.formGroupDir = formGroupDir;
5530
- this._onChangeCallback = noop$6;
5531
- this._onTouchedCallback = noop$6;
5529
+ this._onChangeCallback = noop$2;
5530
+ this._onTouchedCallback = noop$2;
5532
5531
  this._subscription = new rxjs.Subscription();
5533
5532
  this._writing = true;
5534
5533
  this._disabling = false;
5535
5534
  this._readonly = false;
5536
- this.dayMask = DAY_MASK$2;
5535
+ this.mask = TEXT_MASK;
5537
5536
  this.floatLabel = 'auto';
5538
5537
  this.compact = false;
5539
5538
  this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
@@ -5592,22 +5591,24 @@
5592
5591
  this.formControl.setValidators(this.required ? [this.formControl.validator, i1.Validators.required, SharedValidators.validDate] :
5593
5592
  [this.formControl.validator, SharedValidators.validDate]);
5594
5593
  }
5595
- // Create the day control
5596
- 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; });
5597
5598
  // Get patterns to display date
5598
5599
  this.updatePattern(this.translate.instant('COMMON.DATE_PATTERN'));
5599
5600
  this._subscription.add(this.translate.get('COMMON.DATE_PATTERN')
5600
5601
  .subscribe(function (pattern) { return _this.updatePattern(pattern); }));
5601
- this._subscription.add(this.dayControl.valueChanges
5602
+ this._subscription.add(this.textControl.valueChanges
5602
5603
  .subscribe(function (value) { return _this.onFormChange(value); }));
5603
5604
  // Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl)
5604
5605
  this._subscription.add(this.formControl.statusChanges
5605
5606
  .pipe(operators.filter(function (_) { return !_this.readonly && !_this._writing && !_this._disabling; }) // Skip
5606
5607
  )
5607
5608
  .subscribe(function () {
5608
- _this.dayControl.updateValueAndValidity({ emitEvent: false });
5609
- if (_this.formControl.touched && !_this.dayControl.touched) {
5610
- _this.dayControl.markAsTouched();
5609
+ _this.textControl.updateValueAndValidity({ emitEvent: false });
5610
+ if (_this.formControl.touched && !_this.textControl.touched) {
5611
+ _this.textControl.markAsTouched();
5611
5612
  }
5612
5613
  _this.markForCheck();
5613
5614
  }));
@@ -5623,27 +5624,25 @@
5623
5624
  this._writing = true;
5624
5625
  // DEBUG
5625
5626
  //console.debug("[mat-date] writeValue() with:", value);
5626
- // Convert into date, and clone if necessary
5627
+ // Convert into date
5628
+ // Important: do a clone()
5627
5629
  var date = momentImported.isMoment(value) ? value.clone() : fromDateISOString(value);
5628
5630
  if (!date || !date.isValid()) {
5629
- this.dayControl.patchValue(null, { emitEvent: false });
5631
+ this.textControl.patchValue(null, { emitEvent: false });
5630
5632
  if (this.formControl.value) {
5631
5633
  this.formControl.patchValue(null, { emitEvent: false });
5632
5634
  this._onChangeCallback(null);
5633
5635
  }
5634
5636
  }
5635
5637
  else {
5636
- // Format day
5637
- var day = date && this.timezone
5638
- // Move to the expected TZ (keeping local hour - e.g. midnight)
5639
- ? date.tz(this.timezone)
5640
- // Not TZ: important: do a clone
5641
- : date;
5642
- day = day.startOf('day');
5643
- var dayStr = this.dateAdapter.format(day, this.dayPattern);
5644
- if (this.dayControl.value !== dayStr) {
5645
- // Update control
5646
- 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 });
5647
5646
  }
5648
5647
  }
5649
5648
  this._writing = false;
@@ -5660,10 +5659,10 @@
5660
5659
  return;
5661
5660
  this._disabling = true;
5662
5661
  if (isDisabled) {
5663
- this.dayControl.disable({ emitEvent: false });
5662
+ this.textControl.disable({ emitEvent: false });
5664
5663
  }
5665
5664
  else {
5666
- this.dayControl.enable({ emitEvent: false });
5665
+ this.textControl.enable({ emitEvent: false });
5667
5666
  }
5668
5667
  this._disabling = false;
5669
5668
  this.markForCheck();
@@ -5680,12 +5679,12 @@
5680
5679
  .locale(this.locale) // set as time as locale time
5681
5680
  .minute(0).seconds(0).millisecond(0) // Reset hour
5682
5681
  .utc(true);
5683
- dateStr = this.dateAdapter.format(date, this.dayPattern) || null;
5682
+ dateStr = this.dateAdapter.format(date, this.datePattern) || null;
5684
5683
  }
5685
- if (this.dayControl.value !== dateStr) {
5684
+ if (this.textControl.value !== dateStr) {
5686
5685
  // DEBUG
5687
5686
  //console.debug("[mat-date] onDatePickerChange() new value:", dateStr);
5688
- this.dayControl.setValue(dateStr, {
5687
+ this.textControl.setValue(dateStr, {
5689
5688
  emitEvent: true // Will call onFormChange
5690
5689
  });
5691
5690
  }
@@ -5740,7 +5739,7 @@
5740
5739
  });
5741
5740
  };
5742
5741
  MatDate.prototype.clear = function () {
5743
- this.dayControl.patchValue(null, { emitEvent: false });
5742
+ this.textControl.patchValue(null, { emitEvent: false });
5744
5743
  this.formControl.setValue(null, { emitEvent: false });
5745
5744
  this._onChangeCallback(null);
5746
5745
  this.markAsTouched();
@@ -5749,43 +5748,70 @@
5749
5748
  /* -- private method -- */
5750
5749
  MatDate.prototype.updatePattern = function (pattern) {
5751
5750
  pattern = pattern !== 'COMMON.DATE_PATTERN' ? pattern : 'L';
5752
- if (this.displayPattern !== pattern) {
5753
- this.displayPattern = pattern;
5754
- this.dayPattern = pattern;
5751
+ if (this.datePattern !== pattern) {
5752
+ this.datePattern = pattern;
5755
5753
  this.markForCheck();
5756
5754
  }
5757
5755
  };
5758
5756
  MatDate.prototype.checkIfTouched = function (opts) {
5759
- if (this.dayControl.touched) {
5757
+ if (this.textControl.touched) {
5760
5758
  this._onTouchedCallback();
5761
5759
  if (!opts || opts.emitEvent !== false) {
5762
5760
  this.markForCheck();
5763
5761
  }
5764
5762
  }
5765
5763
  };
5766
- MatDate.prototype.onFormChange = function (dayStr) {
5764
+ MatDate.prototype.onFormChange = function (value) {
5767
5765
  if (this._writing)
5768
5766
  return; // Skip if call by self
5769
5767
  this._writing = true;
5770
- if (this.dayControl.invalid) {
5771
- this.formControl.markAsPending({ onlySelf: true });
5772
- this.formControl.setErrors(Object.assign(Object.assign({}, this.formControl.errors), this.dayControl.errors));
5773
- this.formControl.markAsDirty();
5774
- this._writing = false;
5775
- return;
5776
- }
5777
- // Make to remove placeholder chars
5778
- while (dayStr && dayStr.indexOf(this.placeholderChar) !== -1) {
5779
- 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');
5780
5789
  }
5781
- // Parse day
5782
- 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;
5783
5792
  // Move to the expected TZ, and keep the local hour (= midnight) to have midnight at local time
5784
- dayDate = dayDate && (this.timezone ? dayDate.tz(this.timezone, true) : dayDate);
5785
- dayDate = dayDate && dayDate
5793
+ date = date && (this.timezone ? date.tz(this.timezone, true) : date) || null;
5794
+ date = date && date
5786
5795
  .startOf('day') // Reset hour
5787
- .utc(); // Convert to UTC (avoid TZ offset in final string)
5788
- 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();
5789
5815
  this._writing = false;
5790
5816
  };
5791
5817
  MatDate.prototype.waitKeyboardHide = function (waitKeyboardDelay) {
@@ -5812,21 +5838,6 @@
5812
5838
  });
5813
5839
  });
5814
5840
  };
5815
- MatDate.prototype.emitChange = function (value) {
5816
- // Get the model value
5817
- var dateStr = toDateISOString(value) || null;
5818
- if (this.formControl.value !== dateStr) {
5819
- // DEBUG
5820
- //console.debug('[mat-date] Emit new value: ' + dateStr);
5821
- // Apply to form control. => Will call writeValue()
5822
- // NOT NEED, because a formControl should NOT be used by multiple fields
5823
- //this.formControl.setValue(dateStr, {emitEvent: false})
5824
- // Changes comes from inside function: use the callback
5825
- this._onChangeCallback(dateStr);
5826
- // Check if need to update controls
5827
- this.checkIfTouched();
5828
- }
5829
- };
5830
5841
  MatDate.prototype.updateTabIndex = function () {
5831
5842
  var _this = this;
5832
5843
  if (isNil(this._tabindex) || this._tabindex === -1)
@@ -5840,7 +5851,7 @@
5840
5851
  });
5841
5852
  };
5842
5853
  MatDate.prototype.markAsTouched = function (opts) {
5843
- this.dayControl.markAsTouched(opts);
5854
+ this.textControl.markAsTouched(opts);
5844
5855
  this._onTouchedCallback();
5845
5856
  this.markForCheck();
5846
5857
  };
@@ -5855,16 +5866,16 @@
5855
5866
  MatDate.decorators = [
5856
5867
  { type: i0.Component, args: [{
5857
5868
  selector: 'mat-date-field',
5858
- 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",
5859
5870
  providers: [
5860
- DEFAULT_VALUE_ACCESSOR$5,
5871
+ DEFAULT_VALUE_ACCESSOR,
5861
5872
  ],
5862
5873
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
5863
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%}"]
5864
5875
  },] }
5865
5876
  ];
5866
5877
  MatDate.ctorParameters = function () { return [
5867
- { type: i1$3.DateAdapter },
5878
+ { type: i1$1.MomentDateAdapter },
5868
5879
  { type: i1$2.TranslateService },
5869
5880
  { type: i1.FormBuilder },
5870
5881
  { type: i0.ChangeDetectorRef },
@@ -5891,16 +5902,16 @@
5891
5902
  matInputs: [{ type: i0.ViewChildren, args: ['matInput',] }]
5892
5903
  };
5893
5904
 
5894
- var DEFAULT_VALUE_ACCESSOR$4 = {
5905
+ var DEFAULT_VALUE_ACCESSOR$1 = {
5895
5906
  provide: i1.NG_VALUE_ACCESSOR,
5896
5907
  useExisting: i0.forwardRef(function () { return MatDateTime; }),
5897
5908
  multi: true
5898
5909
  };
5899
- var DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
5910
+ var DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
5900
5911
  var HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
5901
- var HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
5902
- var noop$5 = function () { };
5903
- var ɵ0$8 = noop$5;
5912
+ var HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
5913
+ var noop$3 = function () { };
5914
+ var ɵ0$4 = noop$3;
5904
5915
  var MatDateTime = /** @class */ (function () {
5905
5916
  function MatDateTime(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
5906
5917
  this.dateAdapter = dateAdapter;
@@ -5909,14 +5920,14 @@
5909
5920
  this.cd = cd;
5910
5921
  this.keyboard = keyboard;
5911
5922
  this.formGroupDir = formGroupDir;
5912
- this._onChangeCallback = noop$5;
5913
- this._onTouchedCallback = noop$5;
5923
+ this._onChangeCallback = noop$3;
5924
+ this._onTouchedCallback = noop$3;
5914
5925
  this._subscription = new rxjs.Subscription();
5915
5926
  this._writing = true;
5916
5927
  this._disabling = false;
5917
5928
  this._readonly = false;
5918
- this.dayMask = DAY_MASK$1;
5919
- this.hourMask = HOUR_MASK$1;
5929
+ this.dayMask = DAY_MASK;
5930
+ this.hourMask = HOUR_MASK;
5920
5931
  this.floatLabel = 'auto';
5921
5932
  this.compact = false;
5922
5933
  this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
@@ -6275,14 +6286,14 @@
6275
6286
  selector: 'mat-date-time-field',
6276
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",
6277
6288
  providers: [
6278
- DEFAULT_VALUE_ACCESSOR$4,
6289
+ DEFAULT_VALUE_ACCESSOR$1,
6279
6290
  ],
6280
6291
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6281
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%}"]
6282
6293
  },] }
6283
6294
  ];
6284
6295
  MatDateTime.ctorParameters = function () { return [
6285
- { type: i1$3.DateAdapter },
6296
+ { type: i1$1.MomentDateAdapter },
6286
6297
  { type: i1$2.TranslateService },
6287
6298
  { type: i1.FormBuilder },
6288
6299
  { type: i0.ChangeDetectorRef },
@@ -6309,15 +6320,15 @@
6309
6320
  matInputs: [{ type: i0.ViewChildren, args: ['matInput',] }]
6310
6321
  };
6311
6322
 
6312
- var DEFAULT_VALUE_ACCESSOR$3 = {
6323
+ var DEFAULT_VALUE_ACCESSOR$2 = {
6313
6324
  provide: i1.NG_VALUE_ACCESSOR,
6314
6325
  useExisting: i0.forwardRef(function () { return MatDateShort; }),
6315
6326
  multi: true
6316
6327
  };
6317
- var DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
6328
+ var DAY_MASK$1 = [/\d/, /\d/, /\d/, /\d/];
6318
6329
  var noop$4 = function () {
6319
6330
  };
6320
- var ɵ0$7 = noop$4;
6331
+ var ɵ0$5 = noop$4;
6321
6332
  var MatDateShort = /** @class */ (function () {
6322
6333
  function MatDateShort(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
6323
6334
  this.dateAdapter = dateAdapter;
@@ -6330,7 +6341,7 @@
6330
6341
  this._onTouchedCallback = noop$4;
6331
6342
  this.writing = true;
6332
6343
  this.disabling = false;
6333
- this.dayMask = DAY_MASK;
6344
+ this.dayMask = DAY_MASK$1;
6334
6345
  this.disabled = false;
6335
6346
  this.floatLabel = 'auto';
6336
6347
  this.readonly = false;
@@ -6607,7 +6618,7 @@
6607
6618
  selector: 'mat-date-short-field',
6608
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",
6609
6620
  providers: [
6610
- DEFAULT_VALUE_ACCESSOR$3,
6621
+ DEFAULT_VALUE_ACCESSOR$2,
6611
6622
  ],
6612
6623
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6613
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%}"]
@@ -6678,16 +6689,16 @@
6678
6689
  },] }
6679
6690
  ];
6680
6691
 
6681
- var DEFAULT_VALUE_ACCESSOR$2 = {
6692
+ var DEFAULT_VALUE_ACCESSOR$3 = {
6682
6693
  provide: i1.NG_VALUE_ACCESSOR,
6683
6694
  useExisting: i0.forwardRef(function () { return MatDuration; }),
6684
6695
  multi: true
6685
6696
  };
6686
6697
  var HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
6687
- var HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
6688
- var noop$3 = function () {
6698
+ var HOUR_MASK$1 = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
6699
+ var noop$5 = function () {
6689
6700
  };
6690
- var ɵ0$6 = noop$3;
6701
+ var ɵ0$6 = noop$5;
6691
6702
  var MatDuration = /** @class */ (function () {
6692
6703
  function MatDuration(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
6693
6704
  this.dateAdapter = dateAdapter;
@@ -6696,11 +6707,11 @@
6696
6707
  this.cd = cd;
6697
6708
  this.formGroupDir = formGroupDir;
6698
6709
  this._subscription = new rxjs.Subscription();
6699
- this._onChangeCallback = noop$3;
6700
- this._onTouchedCallback = noop$3;
6710
+ this._onChangeCallback = noop$5;
6711
+ this._onTouchedCallback = noop$5;
6701
6712
  this.writing = true;
6702
6713
  this.disabling = false;
6703
- this.hourMask = HOUR_MASK;
6714
+ this.hourMask = HOUR_MASK$1;
6704
6715
  this.disabled = false;
6705
6716
  this.floatLabel = 'auto';
6706
6717
  this.readonly = false;
@@ -6893,7 +6904,7 @@
6893
6904
  selector: 'mat-duration-field',
6894
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",
6895
6906
  providers: [
6896
- DEFAULT_VALUE_ACCESSOR$2,
6907
+ DEFAULT_VALUE_ACCESSOR$3,
6897
6908
  ],
6898
6909
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6899
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%}"]
@@ -6953,22 +6964,22 @@
6953
6964
  },] }
6954
6965
  ];
6955
6966
 
6956
- var DEFAULT_VALUE_ACCESSOR$1 = {
6967
+ var DEFAULT_VALUE_ACCESSOR$4 = {
6957
6968
  provide: i1.NG_VALUE_ACCESSOR,
6958
6969
  useExisting: i0.forwardRef(function () { return MatBooleanField; }),
6959
6970
  multi: true
6960
6971
  };
6961
- var noop$2 = function () {
6972
+ var noop$6 = function () {
6962
6973
  };
6963
- var ɵ0$5 = noop$2;
6974
+ var ɵ0$7 = noop$6;
6964
6975
  var MatBooleanField = /** @class */ (function () {
6965
6976
  function MatBooleanField(translate, formBuilder, cd, formGroupDir) {
6966
6977
  this.translate = translate;
6967
6978
  this.formBuilder = formBuilder;
6968
6979
  this.cd = cd;
6969
6980
  this.formGroupDir = formGroupDir;
6970
- this._onChangeCallback = noop$2;
6971
- this._onTouchedCallback = noop$2;
6981
+ this._onChangeCallback = noop$6;
6982
+ this._onTouchedCallback = noop$6;
6972
6983
  this._writing = false;
6973
6984
  this.showRadio = false;
6974
6985
  this.disabled = false;
@@ -7143,7 +7154,7 @@
7143
7154
  selector: 'mat-boolean-field',
7144
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",
7145
7156
  providers: [
7146
- DEFAULT_VALUE_ACCESSOR$1
7157
+ DEFAULT_VALUE_ACCESSOR$4
7147
7158
  ],
7148
7159
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
7149
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}"]
@@ -7230,7 +7241,6 @@
7230
7241
  return MatNumpadEvent;
7231
7242
  }(KeyboardEvent));
7232
7243
 
7233
- exports.AnimationState = void 0;
7234
7244
  (function (AnimationState) {
7235
7245
  AnimationState["ENTER"] = "enter";
7236
7246
  AnimationState["ENTER_INPUT"] = "enter-input";
@@ -7398,7 +7408,7 @@
7398
7408
  };
7399
7409
  return MatNumpadDomService;
7400
7410
  }());
7401
- 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" });
7402
7412
  MatNumpadDomService.decorators = [
7403
7413
  { type: i0.Injectable, args: [{
7404
7414
  providedIn: 'root'
@@ -7804,7 +7814,7 @@
7804
7814
  },] }
7805
7815
  ];
7806
7816
 
7807
- var DEFAULT_VALUE_ACCESSOR = {
7817
+ var DEFAULT_VALUE_ACCESSOR$5 = {
7808
7818
  provide: i1.NG_VALUE_ACCESSOR,
7809
7819
  useExisting: i0.forwardRef(function () { return MatSwipeField; }),
7810
7820
  multi: true
@@ -8124,7 +8134,7 @@
8124
8134
  { type: i0.Component, args: [{
8125
8135
  selector: 'mat-swipe-field',
8126
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",
8127
- providers: [DEFAULT_VALUE_ACCESSOR],
8137
+ providers: [DEFAULT_VALUE_ACCESSOR$5],
8128
8138
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
8129
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}"]
8130
8140
  },] }
@@ -8185,14 +8195,14 @@
8185
8195
  },] }
8186
8196
  ];
8187
8197
 
8188
- var noop$1 = function () { };
8189
- var ɵ0$4 = noop$1;
8198
+ var noop$7 = function () { };
8199
+ var ɵ0$8 = noop$7;
8190
8200
  var MatChipsField = /** @class */ (function () {
8191
8201
  function MatChipsField(cd, formGroupDir) {
8192
8202
  this.cd = cd;
8193
8203
  this.formGroupDir = formGroupDir;
8194
- this._onChangeCallback = noop$1;
8195
- this._onTouchedCallback = noop$1;
8204
+ this._onChangeCallback = noop$7;
8205
+ this._onTouchedCallback = noop$7;
8196
8206
  this.logPrefix = '[mat-chips] ';
8197
8207
  this.formControlName = null;
8198
8208
  this.required = false;
@@ -9163,7 +9173,7 @@
9163
9173
  };
9164
9174
  return ProgressBarService;
9165
9175
  }());
9166
- 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" });
9167
9177
  ProgressBarService.decorators = [
9168
9178
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9169
9179
  ];
@@ -9210,7 +9220,7 @@
9210
9220
  };
9211
9221
  return AppGestureConfig;
9212
9222
  }(i1$6.HammerGestureConfig));
9213
- 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" });
9214
9224
  AppGestureConfig.decorators = [
9215
9225
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9216
9226
  ];
@@ -9477,7 +9487,7 @@
9477
9487
  };
9478
9488
  return MatPaginatorI18n;
9479
9489
  }(paginator.MatPaginatorIntl));
9480
- 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" });
9481
9491
  MatPaginatorI18n.decorators = [
9482
9492
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
9483
9493
  ];
@@ -9569,17 +9579,17 @@
9569
9579
  return rgbArrayToHex(rgb.map(function (v) { return 255 - v; }));
9570
9580
  }
9571
9581
 
9572
- var noop = function () {
9582
+ var noop$8 = function () {
9573
9583
  };
9574
- var ɵ0$3 = noop;
9584
+ var ɵ0$9 = noop$8;
9575
9585
  var AppFormField = /** @class */ (function () {
9576
9586
  function AppFormField(translate, cd, injector, formGroupDir) {
9577
9587
  this.translate = translate;
9578
9588
  this.cd = cd;
9579
9589
  this.injector = injector;
9580
9590
  this.formGroupDir = formGroupDir;
9581
- this._onChangeCallback = noop;
9582
- this._onTouchedCallback = noop;
9591
+ this._onChangeCallback = noop$8;
9592
+ this._onTouchedCallback = noop$8;
9583
9593
  this.readonly = false;
9584
9594
  this.compact = false;
9585
9595
  this.floatLabel = 'auto';
@@ -10137,7 +10147,7 @@
10137
10147
  };
10138
10148
  return AudioProvider;
10139
10149
  }(StartableService));
10140
- 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" });
10141
10151
  AudioProvider.decorators = [
10142
10152
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
10143
10153
  ];
@@ -10247,7 +10257,7 @@
10247
10257
  };
10248
10258
  return Hotkeys;
10249
10259
  }());
10250
- 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" });
10251
10261
  Hotkeys.decorators = [
10252
10262
  { type: i0.Injectable, args: [{
10253
10263
  providedIn: 'root'
@@ -10452,7 +10462,7 @@
10452
10462
  return Base64ImageReader;
10453
10463
  }());
10454
10464
 
10455
- var uuidv4$1 = uuidv4Imported__namespace;
10465
+ var uuidv4 = uuidv4Imported__namespace;
10456
10466
  var FileService = /** @class */ (function () {
10457
10467
  function FileService(platform,
10458
10468
  //private transfer: FileTransfer,
@@ -10498,7 +10508,7 @@
10498
10508
  lastSlashIndex = source.lastIndexOf('/');
10499
10509
  if (lastSlashIndex === -1)
10500
10510
  throw new Error('Invalid URL: ' + source);
10501
- fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4$1();
10511
+ fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();
10502
10512
  if (!(responseType === 'file' && this.canUseFileSystem)) return [3 /*break*/, 4];
10503
10513
  console.warn("WARN: [file] Fetching image {" + source + "} in local file...");
10504
10514
  targetFilePath = this._imageDirectory + fileName;
@@ -10561,7 +10571,7 @@
10561
10571
  };
10562
10572
  return FileService;
10563
10573
  }());
10564
- 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" });
10565
10575
  FileService.decorators = [
10566
10576
  { type: i0.Injectable, args: [{
10567
10577
  providedIn: 'root',
@@ -10728,7 +10738,7 @@
10728
10738
  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
10729
10739
 
10730
10740
  var scrypt = require('scrypt-async');
10731
- var sha256$1 = require('hash.js/lib/hash/sha/256');
10741
+ var sha256 = require('hash.js/lib/hash/sha/256');
10732
10742
  var sha512 = require('hash.js/lib/hash/sha/512');
10733
10743
  var nacl = {
10734
10744
  sign: tweetnacl.sign,
@@ -10834,7 +10844,7 @@
10834
10844
  * Hash (using SHA256) a message
10835
10845
  */
10836
10846
  CryptoService.prototype.sha256 = function (message) {
10837
- return sha256$1().update(message).digest('hex');
10847
+ return sha256().update(message).digest('hex');
10838
10848
  };
10839
10849
  /**
10840
10850
  * Hash (using SHA512) a message
@@ -10848,7 +10858,7 @@
10848
10858
  };
10849
10859
  return CryptoService;
10850
10860
  }());
10851
- 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" });
10852
10862
  CryptoService.decorators = [
10853
10863
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
10854
10864
  ];
@@ -11718,7 +11728,7 @@
11718
11728
  onRefresh: [{ type: i0.Input }]
11719
11729
  };
11720
11730
 
11721
- var moment$4 = momentImported__namespace;
11731
+ var moment$3 = momentImported__namespace;
11722
11732
  var SETTINGS_STORAGE_KEY = 'settings';
11723
11733
  var SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
11724
11734
  // fixme: this constant points to static environment
@@ -12020,11 +12030,11 @@
12020
12030
  if (!feature) {
12021
12031
  feature = {
12022
12032
  name: featureName.toLowerCase(),
12023
- lastSyncDate: moment$4().toISOString()
12033
+ lastSyncDate: moment$3().toISOString()
12024
12034
  };
12025
12035
  }
12026
12036
  else {
12027
- feature.lastSyncDate = moment$4().toISOString();
12037
+ feature.lastSyncDate = moment$3().toISOString();
12028
12038
  }
12029
12039
  this.saveOfflineFeature(feature);
12030
12040
  };
@@ -12218,7 +12228,7 @@
12218
12228
  if (!page || !page.title || !page.path)
12219
12229
  throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
12220
12230
  // Set time
12221
- page.time = page.time || moment$4();
12231
+ page.time = page.time || moment$3();
12222
12232
  // Clean the title (remove <small> tags)
12223
12233
  if (!opts || opts.removeTitleSmallTag !== false) {
12224
12234
  var tagIndex = page.title.indexOf('</small>');
@@ -12235,18 +12245,18 @@
12235
12245
  };
12236
12246
  return LocalSettingsService;
12237
12247
  }(StartableService));
12238
- 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" });
12239
12249
  LocalSettingsService.decorators = [
12240
12250
  { type: i0.Injectable, args: [{
12241
- providedIn: 'root',
12242
- deps: [APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS]
12251
+ providedIn: 'root'
12252
+ //deps: [APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS]
12243
12253
  },] }
12244
12254
  ];
12245
12255
  LocalSettingsService.ctorParameters = function () { return [
12246
12256
  { type: i1$2.TranslateService },
12247
12257
  { type: i1$5.Platform },
12248
12258
  { type: i3$2.Storage },
12249
- { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
12259
+ { type: Environment, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
12250
12260
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_LOCAL_SETTINGS,] }] },
12251
12261
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_LOCAL_SETTINGS_OPTIONS,] }] }
12252
12262
  ]; };
@@ -13116,7 +13126,7 @@
13116
13126
  };
13117
13127
  return NetworkService;
13118
13128
  }(StartableService));
13119
- 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" });
13120
13130
  NetworkService.decorators = [
13121
13131
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
13122
13132
  ];
@@ -13136,7 +13146,7 @@
13136
13146
  { type: i1$5.ToastController, decorators: [{ type: i0.Optional }] }
13137
13147
  ]; };
13138
13148
 
13139
- var ErrorCodes$2 = {
13149
+ var ErrorCodes = {
13140
13150
  UNKNOWN_ERROR: 0,
13141
13151
  LOAD_ACCOUNT_ERROR: 1,
13142
13152
  BAD_PASSWORD: 2,
@@ -13553,7 +13563,7 @@
13553
13563
  case 13:
13554
13564
  err_1 = _b.sent();
13555
13565
  console.error(err_1);
13556
- 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 };
13557
13567
  case 14:
13558
13568
  // Emit update event
13559
13569
  if (!opts || opts.emitEvent !== false) {
@@ -14330,7 +14340,7 @@
14330
14340
  }(StartableService));
14331
14341
  EntitiesStorage.TRASH_PREFIX = 'Trash#';
14332
14342
  EntitiesStorage.REMOTE_PREFIX = 'Remote#';
14333
- 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" });
14334
14344
  EntitiesStorage.decorators = [
14335
14345
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
14336
14346
  ];
@@ -14486,10 +14496,10 @@
14486
14496
  function referentialsToString(values, properties, separator) {
14487
14497
  return (values || []).map(function (v) { return referentialToString(v, properties); }).join(separator || ', ');
14488
14498
  }
14489
- var ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
14499
+ var ɵ0$a = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
14490
14500
  var StatusList = Object.freeze([
14491
14501
  {
14492
- id: ɵ0$2,
14502
+ id: ɵ0$a,
14493
14503
  icon: 'checkmark',
14494
14504
  label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
14495
14505
  },
@@ -14792,7 +14802,7 @@
14792
14802
  (data.lastName || '')) || '';
14793
14803
  }
14794
14804
 
14795
- var uuidv4 = uuidv4Imported__namespace;
14805
+ var uuidv4$1 = uuidv4Imported__namespace;
14796
14806
  var _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
14797
14807
  var NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
14798
14808
  /**
@@ -14836,7 +14846,7 @@
14836
14846
  // Skip if not tracked
14837
14847
  if (!context || !context.tracked)
14838
14848
  return forward(operation);
14839
- var id = context.serializationKey || uuidv4();
14849
+ var id = context.serializationKey || uuidv4$1();
14840
14850
  console.debug("[apollo-tracker-link] Watching tracked query {" + operation.operationName + "#" + id + "}");
14841
14851
  // Clean context, before calling JSON.stringify (remove unused attributes)
14842
14852
  var cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
@@ -15467,14 +15477,14 @@
15467
15477
  mutationLinks = void 0;
15468
15478
  // Add queue to store tracked queries, when offline
15469
15479
  if (enableTrackMutationQueries) {
15470
- serializingLink = new SerializingLink__default["default"]();
15480
+ serializingLink = new SerializingLink__default['default']();
15471
15481
  trackerLink = createTrackerLink({
15472
15482
  storage: storage,
15473
15483
  onNetworkStatusChange: this._networkStatusChanged$,
15474
15484
  debounce: 1000,
15475
15485
  debug: true
15476
15486
  });
15477
- queueLink_1 = new QueueLink__default["default"]();
15487
+ queueLink_1 = new QueueLink__default['default']();
15478
15488
  this.registerSubscription(this._networkStatusChanged$
15479
15489
  .subscribe(function (type) {
15480
15490
  // Network is offline: start buffering into queue
@@ -15489,7 +15499,7 @@
15489
15499
  }
15490
15500
  }));
15491
15501
  mutationLinks = [
15492
- loggerLink__default["default"],
15502
+ loggerLink__default['default'],
15493
15503
  queueLink_1,
15494
15504
  trackerLink,
15495
15505
  queueLink_1,
@@ -15596,7 +15606,7 @@
15596
15606
  (err.networkError && ((err.networkError.error && this.toAppError(err.networkError.error))
15597
15607
  || this.toAppError(err.networkError)
15598
15608
  || (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))
15599
- || this.createAppErrorByCode(ErrorCodes$2.UNKNOWN_NETWORK_ERROR)))
15609
+ || this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)))
15600
15610
  // If graphQL: try to convert the first error found
15601
15611
  || (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))
15602
15612
  || this.toAppError(err)
@@ -15604,7 +15614,7 @@
15604
15614
  || (err.graphQLErrors && err.graphQLErrors[0])
15605
15615
  || err;
15606
15616
  console.error('[graphql] ' + (error && error.message || error), error.stack || '');
15607
- 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) {
15608
15618
  console.error('[graphql] original error: ' + err.networkError.message);
15609
15619
  this.onNetworkError.next(error);
15610
15620
  }
@@ -15640,7 +15650,7 @@
15640
15650
  return 'ERROR.UNAUTHORIZED';
15641
15651
  case ServerErrorCodes.FORBIDDEN:
15642
15652
  return 'ERROR.FORBIDDEN';
15643
- case ErrorCodes$2.UNKNOWN_NETWORK_ERROR:
15653
+ case ErrorCodes.UNKNOWN_NETWORK_ERROR:
15644
15654
  return 'ERROR.UNKNOWN_NETWORK_ERROR';
15645
15655
  case ServerErrorCodes.BAD_UPDATE_DATE:
15646
15656
  return 'ERROR.BAD_UPDATE_DATE';
@@ -15672,7 +15682,7 @@
15672
15682
  };
15673
15683
  return GraphqlService;
15674
15684
  }(StartableService));
15675
- 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" });
15676
15686
  GraphqlService.decorators = [
15677
15687
  { type: i0.Injectable, args: [{
15678
15688
  providedIn: 'root'
@@ -15689,7 +15699,7 @@
15689
15699
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
15690
15700
  ]; };
15691
15701
 
15692
- var sha256 = require('hash.js/lib/hash/sha/256');
15702
+ var sha256$1 = require('hash.js/lib/hash/sha/256');
15693
15703
  var BaseGraphqlServiceOptions = /** @class */ (function () {
15694
15704
  function BaseGraphqlServiceOptions() {
15695
15705
  }
@@ -15859,8 +15869,8 @@
15859
15869
  };
15860
15870
  /* -- protected methods -- */
15861
15871
  BaseGraphqlService.prototype.computeMutableWatchQueryId = function (opts) {
15862
- var queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
15863
- 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) || '';
15864
15874
  return [queryName, opts.arrayFieldName, variablesKey].join('|');
15865
15875
  };
15866
15876
  BaseGraphqlService.prototype.findMutableWatchQueries = function (opts) {
@@ -15933,19 +15943,19 @@
15933
15943
  /* ------------------------------------
15934
15944
  * GraphQL queries
15935
15945
  * ------------------------------------*/
15936
- var Fragments$1 = {
15937
- 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 }"]))),
15938
- 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 }"])))
15939
15949
  };
15940
15950
  // Load account query
15941
- 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);
15942
15952
  // Check email query
15943
- 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"])));
15944
15954
  // Save (create or update) account mutation
15945
15955
  var AccountMutations = {
15946
- 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),
15947
- 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),
15948
- 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)
15949
15959
  };
15950
15960
  // Sent confirmation email
15951
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"])));
@@ -16313,7 +16323,7 @@
16313
16323
  error_3 = _b.sent();
16314
16324
  console.error(error_3);
16315
16325
  this.resetData();
16316
- throw { code: ErrorCodes$2.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
16326
+ throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
16317
16327
  case 4:
16318
16328
  // Store pubkey+keypair
16319
16329
  this._cache.pubkey = Base58.encode(keypair.publicKey);
@@ -16349,7 +16359,7 @@
16349
16359
  return [3 /*break*/, 18];
16350
16360
  case 11:
16351
16361
  err_1 = _b.sent();
16352
- 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];
16353
16363
  if (!(data.username.indexOf('@') !== -1)) return [3 /*break*/, 16];
16354
16364
  isEmailExists = void 0;
16355
16365
  _b.label = 12;
@@ -16365,12 +16375,12 @@
16365
16375
  case 15:
16366
16376
  // Email not exists (no account)
16367
16377
  if (!isEmailExists) {
16368
- throw { code: ErrorCodes$2.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
16378
+ throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
16369
16379
  }
16370
16380
  _b.label = 16;
16371
16381
  case 16:
16372
16382
  // Email exists, so error = 'bad password'
16373
- throw { code: ErrorCodes$2.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
16383
+ throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
16374
16384
  case 17: throw err_1; // resend the first error
16375
16385
  case 18:
16376
16386
  _b.trys.push([18, 20, , 21]);
@@ -16566,8 +16576,8 @@
16566
16576
  _b.label = 3;
16567
16577
  case 3: return [3 /*break*/, 6];
16568
16578
  case 4: return [4 /*yield*/, this.graphql.query({
16569
- query: LoadQuery$1,
16570
- 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' },
16571
16581
  fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
16572
16582
  })];
16573
16583
  case 5:
@@ -16605,7 +16615,7 @@
16605
16615
  case 1:
16606
16616
  isEmailExists = _b.sent();
16607
16617
  if (isEmailExists) {
16608
- throw { code: ErrorCodes$2.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
16618
+ throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
16609
16619
  }
16610
16620
  return [2 /*return*/];
16611
16621
  }
@@ -16655,7 +16665,7 @@
16655
16665
  locale: locale
16656
16666
  },
16657
16667
  error: {
16658
- code: ErrorCodes$2.SENT_CONFIRMATION_EMAIL_FAILED,
16668
+ code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,
16659
16669
  message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'
16660
16670
  }
16661
16671
  })];
@@ -16678,7 +16688,7 @@
16678
16688
  code: code
16679
16689
  },
16680
16690
  error: {
16681
- code: ErrorCodes$2.CONFIRM_EMAIL_FAILED,
16691
+ code: ErrorCodes.CONFIRM_EMAIL_FAILED,
16682
16692
  message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'
16683
16693
  }
16684
16694
  })];
@@ -16778,7 +16788,7 @@
16778
16788
  throw error_7;
16779
16789
  console.error(error_7);
16780
16790
  throw {
16781
- code: ErrorCodes$2.LOAD_ACCOUNT_ERROR,
16791
+ code: ErrorCodes.LOAD_ACCOUNT_ERROR,
16782
16792
  message: 'ERROR.LOAD_ACCOUNT_ERROR'
16783
16793
  };
16784
16794
  case 6: return [2 /*return*/];
@@ -16989,7 +16999,7 @@
16989
16999
  case 1:
16990
17000
  existingAccount = _b.sent();
16991
17001
  if (!existingAccount || !existingAccount.updateDate) {
16992
- throw { code: ErrorCodes$2.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
17002
+ throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
16993
17003
  }
16994
17004
  this.copyIdAndUpdateDate(existingAccount, account);
16995
17005
  _b.label = 2;
@@ -17001,7 +17011,7 @@
17001
17011
  mutation: isNew ? AccountMutations.create : AccountMutations.save,
17002
17012
  variables: { data: json },
17003
17013
  error: {
17004
- code: ErrorCodes$2.SAVE_ACCOUNT_ERROR,
17014
+ code: ErrorCodes.SAVE_ACCOUNT_ERROR,
17005
17015
  message: 'ERROR.SAVE_ACCOUNT_ERROR'
17006
17016
  }
17007
17017
  })];
@@ -17035,7 +17045,7 @@
17035
17045
  mutation: AccountMutations.saveSettings,
17036
17046
  variables: { data: json },
17037
17047
  error: {
17038
- code: ErrorCodes$2.SAVE_SETTINGS_ERROR,
17048
+ code: ErrorCodes.SAVE_SETTINGS_ERROR,
17039
17049
  message: 'ERROR.SAVE_SETTINGS_ERROR'
17040
17050
  }
17041
17051
  })];
@@ -17066,7 +17076,7 @@
17066
17076
  if (counter > 4) {
17067
17077
  if (this._debug)
17068
17078
  console.debug("[account] Failed to authentication on pod (after " + counter + " attempts)");
17069
- throw { code: ErrorCodes$2.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
17079
+ throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
17070
17080
  }
17071
17081
  if (!token) return [3 /*break*/, 2];
17072
17082
  return [4 /*yield*/, this.graphql.query({
@@ -17075,7 +17085,7 @@
17075
17085
  token: token
17076
17086
  },
17077
17087
  error: {
17078
- code: ErrorCodes$2.UNAUTHORIZED,
17088
+ code: ErrorCodes.UNAUTHORIZED,
17079
17089
  message: 'ERROR.UNAUTHORIZED'
17080
17090
  },
17081
17091
  fetchPolicy: 'no-cache'
@@ -17092,7 +17102,7 @@
17092
17102
  _b.label = 2;
17093
17103
  case 2:
17094
17104
  challengeError = {
17095
- code: ErrorCodes$2.AUTH_CHALLENGE_ERROR,
17105
+ code: ErrorCodes.AUTH_CHALLENGE_ERROR,
17096
17106
  message: 'ERROR.AUTH_CHALLENGE_ERROR'
17097
17107
  };
17098
17108
  return [4 /*yield*/, this.graphql.query({
@@ -17179,7 +17189,7 @@
17179
17189
  query: AccountSubscriptions.listenChanges,
17180
17190
  variables: variables,
17181
17191
  error: {
17182
- code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
17192
+ code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,
17183
17193
  message: 'ERROR.ACCOUNT.SUBSCRIBE_ERROR'
17184
17194
  }
17185
17195
  }).pipe(operators.map(function (_b) {
@@ -17212,7 +17222,7 @@
17212
17222
  };
17213
17223
  return AccountService;
17214
17224
  }(BaseGraphqlService));
17215
- 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" });
17216
17226
  AccountService.decorators = [
17217
17227
  { type: i0.Injectable, args: [{ providedIn: 'root', deps: [ENVIRONMENT] },] }
17218
17228
  ];
@@ -17227,7 +17237,7 @@
17227
17237
  { type: i1$5.ToastController, decorators: [{ type: i0.Optional }] },
17228
17238
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
17229
17239
  ]; };
17230
- 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;
17231
17241
 
17232
17242
  var Software_1, Configuration_1;
17233
17243
  // @dynamic
@@ -17485,13 +17495,13 @@
17485
17495
  /* ------------------------------------
17486
17496
  * GraphQL queries
17487
17497
  * ------------------------------------*/
17488
- var Fragments = {
17489
- 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 "])))
17490
17500
  };
17491
- 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);
17492
17502
  // Save (create or update) account mutation
17493
- 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);
17494
- 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"])));
17495
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"])));
17496
17506
  var APP_CONFIG_OPTIONS = new i0.InjectionToken('defaultOptions');
17497
17507
  var ConfigService = /** @class */ (function (_super) {
@@ -17551,12 +17561,12 @@
17551
17561
  case 0:
17552
17562
  now = Date.now();
17553
17563
  console.debug('[config] Loading Pod configuration...');
17554
- query = opts && opts.query || LoadQuery;
17564
+ query = opts && opts.query || LoadQuery$1;
17555
17565
  variables = opts && opts.variables || undefined;
17556
17566
  return [4 /*yield*/, this.graphql.query({
17557
17567
  query: query,
17558
17568
  variables: variables,
17559
- error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17569
+ error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17560
17570
  fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/
17561
17571
  })];
17562
17572
  case 1:
@@ -17598,7 +17608,7 @@
17598
17608
  data: json
17599
17609
  },
17600
17610
  error: {
17601
- code: ErrorCodes$2.SAVE_CONFIG_ERROR,
17611
+ code: ErrorCodes.SAVE_CONFIG_ERROR,
17602
17612
  message: 'ERROR.SAVE_CONFIG_ERROR'
17603
17613
  }
17604
17614
  })];
@@ -17633,7 +17643,7 @@
17633
17643
  return [4 /*yield*/, this.graphql.query({
17634
17644
  query: CacheStatistics,
17635
17645
  variables: null,
17636
- error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17646
+ error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17637
17647
  fetchPolicy: 'network-only'
17638
17648
  })];
17639
17649
  case 1:
@@ -17657,7 +17667,7 @@
17657
17667
  return [4 /*yield*/, this.graphql.query({
17658
17668
  query: ClearCache,
17659
17669
  variables: variables,
17660
- error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17670
+ error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
17661
17671
  fetchPolicy: 'no-cache'
17662
17672
  })];
17663
17673
  case 1:
@@ -17857,7 +17867,7 @@
17857
17867
  };
17858
17868
  return ConfigService;
17859
17869
  }(BaseGraphqlService));
17860
- 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" });
17861
17871
  ConfigService.decorators = [
17862
17872
  { type: i0.Injectable, args: [{
17863
17873
  providedIn: 'root',
@@ -17876,9 +17886,9 @@
17876
17886
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
17877
17887
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_CONFIG_OPTIONS,] }] }
17878
17888
  ]; };
17879
- 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;
17880
17890
 
17881
- var moment$3 = momentImported__namespace;
17891
+ var moment$4 = momentImported__namespace;
17882
17892
  var AndroidOsEnvironment = Object.freeze({
17883
17893
  DIRECTORY_DOWNLOADS: 'Download',
17884
17894
  DIRECTORY_DOWNLOADS_OLD: 'Downloads',
@@ -18149,16 +18159,16 @@
18149
18159
  }
18150
18160
  // config moment lib
18151
18161
  try {
18152
- moment$3.locale(event.lang);
18162
+ moment$4.locale(event.lang);
18153
18163
  console.debug('[platform] Use locale {' + event.lang + '}');
18154
18164
  }
18155
18165
  // If error, fallback to en
18156
18166
  catch (err) {
18157
- moment$3.locale('en');
18167
+ moment$4.locale('en');
18158
18168
  console.warn('[platform] Unknown local for moment lib. Using default [en]');
18159
18169
  }
18160
18170
  // Config date adapter
18161
- _this.dateAdapter.setLocale(moment$3.locale());
18171
+ _this.dateAdapter.setLocale(moment$4.locale());
18162
18172
  }
18163
18173
  });
18164
18174
  this.settings.onChange.subscribe(function (data) {
@@ -18184,7 +18194,7 @@
18184
18194
  PlatformService.prototype.checkAppVersion = function (opts) {
18185
18195
  var _a, _b, _c;
18186
18196
  return __awaiter(this, void 0, void 0, function () {
18187
- var silent, production, canAutoReload, actualVersion, peer, remoteVersion, reloadPath;
18197
+ var silent, production, canAutoReload, actualVersion, remoteVersion, reloadPath;
18188
18198
  return __generator(this, function (_d) {
18189
18199
  switch (_d.label) {
18190
18200
  case 0:
@@ -18201,8 +18211,7 @@
18201
18211
  (_a = this.checkAppVersionTimer) === null || _a === void 0 ? void 0 : _a.unsubscribe(); // Stop timer if exists
18202
18212
  return [2 /*return*/]; // Skip
18203
18213
  }
18204
- peer = undefined;
18205
- return [4 /*yield*/, this.networkService.getAppVersion(peer)];
18214
+ return [4 /*yield*/, this.networkService.getAppVersion()];
18206
18215
  case 1:
18207
18216
  remoteVersion = _d.sent();
18208
18217
  if (isNilOrBlank(remoteVersion)) {
@@ -18213,7 +18222,7 @@
18213
18222
  }
18214
18223
  if (VersionUtils.isCompatible(remoteVersion, actualVersion)) {
18215
18224
  if (!silent)
18216
- console.info('[platform] Checking remote app version [OK]');
18225
+ console.info("[platform] Checking remote app version [OK] {remote: '" + remoteVersion + "', actual: '" + actualVersion + "'}");
18217
18226
  return [2 /*return*/];
18218
18227
  }
18219
18228
  reloadPath = location.href.replace(/[&]?version=[0-9.]+/gi, '');
@@ -18411,7 +18420,7 @@
18411
18420
  };
18412
18421
  return PlatformService;
18413
18422
  }(StartableService));
18414
- 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" });
18415
18424
  PlatformService.decorators = [
18416
18425
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
18417
18426
  ];
@@ -18509,7 +18518,7 @@
18509
18518
  };
18510
18519
  return MatStepperI18n;
18511
18520
  }(stepper.MatStepperIntl));
18512
- 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" });
18513
18522
  MatStepperI18n.decorators = [
18514
18523
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
18515
18524
  ];
@@ -20722,7 +20731,7 @@
20722
20731
  return 1;
20723
20732
  }
20724
20733
  }
20725
- var ɵ0$1 = function (defaultStateSize) { return [
20734
+ var ɵ0$b = function (defaultStateSize) { return [
20726
20735
  Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
20727
20736
  Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
20728
20737
  Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
@@ -20730,7 +20739,7 @@
20730
20739
  var SCALE_OPTIONS_DEFAULT = {
20731
20740
  startColor: rgbArrayMap.red,
20732
20741
  startStates: [0, 2, 3],
20733
- startStepsFn: ɵ0$1
20742
+ startStepsFn: ɵ0$b
20734
20743
  };
20735
20744
  /**
20736
20745
  * Internal function, that create a colors scale, using iteration
@@ -21661,7 +21670,7 @@
21661
21670
  };
21662
21671
  return UserSettingsValidatorService;
21663
21672
  }(AppValidatorService));
21664
- 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" });
21665
21674
  UserSettingsValidatorService.decorators = [
21666
21675
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
21667
21676
  ];
@@ -21709,7 +21718,7 @@
21709
21718
  };
21710
21719
  return AccountValidatorService;
21711
21720
  }(AppValidatorService));
21712
- 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" });
21713
21722
  AccountValidatorService.decorators = [
21714
21723
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
21715
21724
  ];
@@ -22340,7 +22349,7 @@
22340
22349
  };
22341
22350
  return LocalSettingsValidatorService;
22342
22351
  }(AppValidatorService));
22343
- 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" });
22344
22353
  LocalSettingsValidatorService.decorators = [
22345
22354
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
22346
22355
  ];
@@ -23120,7 +23129,7 @@
23120
23129
  };
23121
23130
  return IsOnFieldModePipe;
23122
23131
  }());
23123
- 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" });
23124
23133
  IsOnFieldModePipe.decorators = [
23125
23134
  { type: i0.Pipe, args: [{
23126
23135
  name: 'isOnField'
@@ -23135,7 +23144,7 @@
23135
23144
  };
23136
23145
  return IsNotOnFieldModePipe;
23137
23146
  }());
23138
- 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" });
23139
23148
  IsNotOnFieldModePipe.decorators = [
23140
23149
  { type: i0.Pipe, args: [{
23141
23150
  name: 'isNotOnField'
@@ -23153,7 +23162,7 @@
23153
23162
  };
23154
23163
  return PersonToStringPipe;
23155
23164
  }());
23156
- 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" });
23157
23166
  PersonToStringPipe.decorators = [
23158
23167
  { type: i0.Pipe, args: [{
23159
23168
  name: 'personToString'
@@ -23617,7 +23626,7 @@
23617
23626
  };
23618
23627
  return IsLoginAccountPipe;
23619
23628
  }());
23620
- 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" });
23621
23630
  IsLoginAccountPipe.decorators = [
23622
23631
  { type: i0.Pipe, args: [{
23623
23632
  name: 'isLogin'
@@ -23632,7 +23641,7 @@
23632
23641
  };
23633
23642
  return AccountToStringPipe;
23634
23643
  }());
23635
- 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" });
23636
23645
  AccountToStringPipe.decorators = [
23637
23646
  { type: i0.Pipe, args: [{
23638
23647
  name: 'accountToString'
@@ -23650,7 +23659,7 @@
23650
23659
  };
23651
23660
  return DepartmentToStringPipe;
23652
23661
  }());
23653
- 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" });
23654
23663
  DepartmentToStringPipe.decorators = [
23655
23664
  { type: i0.Pipe, args: [{
23656
23665
  name: 'departmentToString'
@@ -23756,7 +23765,7 @@
23756
23765
  };
23757
23766
  return MenuService;
23758
23767
  }());
23759
- 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" });
23760
23769
  MenuService.decorators = [
23761
23770
  { type: i0.Injectable, args: [{
23762
23771
  providedIn: 'root'
@@ -24301,7 +24310,7 @@
24301
24310
  };
24302
24311
  return AuthGuardService;
24303
24312
  }());
24304
- 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" });
24305
24314
  AuthGuardService.decorators = [
24306
24315
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
24307
24316
  ];
@@ -24346,7 +24355,7 @@
24346
24355
  query: query,
24347
24356
  variables: { id: id },
24348
24357
  fetchPolicy: opts && opts.fetchPolicy || undefined,
24349
- 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' }
24350
24359
  })
24351
24360
  .pipe(operators.map(function (_b) {
24352
24361
  var data = _b.data;
@@ -24368,7 +24377,7 @@
24368
24377
  query: query,
24369
24378
  variables: { id: id },
24370
24379
  fetchPolicy: opts && opts.fetchPolicy || undefined,
24371
- 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' }
24372
24381
  })];
24373
24382
  case 1:
24374
24383
  data = (_b.sent()).data;
@@ -24404,7 +24413,7 @@
24404
24413
  totalFieldName: withTotal ? 'total' : undefined,
24405
24414
  insertFilterFn: filter && filter.asFilterFn(),
24406
24415
  variables: variables,
24407
- 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' },
24408
24417
  fetchPolicy: opts && opts.fetchPolicy || undefined
24409
24418
  })
24410
24419
  .pipe(operators.map(function (_b) {
@@ -24446,7 +24455,7 @@
24446
24455
  return [4 /*yield*/, this.graphql.query({
24447
24456
  query: query,
24448
24457
  variables: variables,
24449
- error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
24458
+ error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
24450
24459
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
24451
24460
  })];
24452
24461
  case 1:
@@ -24494,7 +24503,7 @@
24494
24503
  variables: {
24495
24504
  filter: filter && filter.asPodObject()
24496
24505
  },
24497
- error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
24506
+ error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
24498
24507
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
24499
24508
  })];
24500
24509
  case 3:
@@ -24539,7 +24548,7 @@
24539
24548
  variables: {
24540
24549
  data: json
24541
24550
  },
24542
- error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
24551
+ error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
24543
24552
  update: function (proxy, _b) {
24544
24553
  var data = _b.data;
24545
24554
  var savedEntities = data && data.data;
@@ -24606,7 +24615,7 @@
24606
24615
  variables: {
24607
24616
  data: json
24608
24617
  },
24609
- error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
24618
+ error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
24610
24619
  update: function (cache, _b) {
24611
24620
  var data = _b.data;
24612
24621
  // Update entity
@@ -24664,7 +24673,7 @@
24664
24673
  refetchQueries: this.getRefetchQueriesForMutation(opts),
24665
24674
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
24666
24675
  variables: { ids: ids },
24667
- error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
24676
+ error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
24668
24677
  update: function (cache, res) {
24669
24678
  // Remove from cache
24670
24679
  if (_this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -24717,7 +24726,7 @@
24717
24726
  refetchQueries: this.getRefetchQueriesForMutation(opts),
24718
24727
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
24719
24728
  variables: { id: id },
24720
- error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
24729
+ error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
24721
24730
  update: function (proxy, res) {
24722
24731
  // Remove from cache
24723
24732
  if (_this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -24759,7 +24768,7 @@
24759
24768
  fetchPolicy: opts && opts.fetchPolicy || 'no-cache',
24760
24769
  variables: variables,
24761
24770
  error: {
24762
- code: ErrorCodes$2.SUBSCRIBE_DATA_ERROR,
24771
+ code: ErrorCodes.SUBSCRIBE_DATA_ERROR,
24763
24772
  message: 'ERROR.SUBSCRIBE_DATA_ERROR'
24764
24773
  }
24765
24774
  })
@@ -24982,7 +24991,7 @@
24982
24991
  if (this._debug)
24983
24992
  invalidRows.forEach(function (row) { return AppTableUtils.logRowErrors(row, "[table-datasource] " + _this._logTypeName + " row #" + row.id); });
24984
24993
  // Stop with an error
24985
- 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' };
24986
24995
  }
24987
24996
  this._editingRowCount = 0;
24988
24997
  data = void 0;
@@ -26002,14 +26011,14 @@
26002
26011
  case 0:
26003
26012
  opts = Object.assign({ keepEditing: this.keepEditedRowOnSave }, opts);
26004
26013
  if (this.readOnly) {
26005
- throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
26014
+ throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
26006
26015
  }
26007
26016
  this.resetError();
26008
26017
  // Keep edited row id (should be done BEFORE confirmEditCreate() )
26009
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;
26010
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;
26011
26020
  if (!this.confirmEditCreate()) {
26012
- 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' };
26013
26022
  }
26014
26023
  // Mark as saving
26015
26024
  this.markAsSaving();
@@ -26166,7 +26175,7 @@
26166
26175
  switch (_e.label) {
26167
26176
  case 0:
26168
26177
  if (this.readOnly) {
26169
- throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
26178
+ throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
26170
26179
  }
26171
26180
  if (event === null || event === void 0 ? void 0 : event.defaultPrevented)
26172
26181
  return [2 /*return*/, 0]; // SKip
@@ -28066,7 +28075,7 @@
28066
28075
  case 8:
28067
28076
  data = _c.sent();
28068
28077
  if (!data)
28069
- 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' };
28070
28079
  this._usageMode = this.computeUsageMode(data);
28071
28080
  return [4 /*yield*/, this.onEntityLoaded(data, opts)];
28072
28081
  case 9:
@@ -28773,9 +28782,10 @@
28773
28782
  canDelete: [{ type: i0.Input }]
28774
28783
  };
28775
28784
 
28776
- var ErrorCodes$1 = {
28785
+ var SocialErrorCodes = {
28777
28786
  LOAD_USER_EVENTS_ERROR: 50000,
28778
- SAVE_USER_EVENT_ERROR: 50001
28787
+ SAVE_USER_EVENT_ERROR: 50001,
28788
+ SEND_MESSAGE_ERROR: 50003
28779
28789
  };
28780
28790
 
28781
28791
  var UserEvent_1;
@@ -28821,7 +28831,7 @@
28821
28831
  EntityClass({ typename: 'UserEventVO' })
28822
28832
  ], exports.UserEvent);
28823
28833
 
28824
- var SocialFragments = {
28834
+ var UserEventFragments = {
28825
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 }"]))),
28826
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 }"])))
28827
28837
  };
@@ -28856,12 +28866,12 @@
28856
28866
  return UserEventFilter;
28857
28867
  }(EntityFilter));
28858
28868
  exports.UserEventFilter = __decorate([
28859
- EntityClass({ typename: 'UserEventVO' })
28869
+ EntityClass({ typename: 'UserEventFilterVO' })
28860
28870
  ], exports.UserEventFilter);
28861
- 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);
28862
- 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);
28863
- 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"])));
28864
- 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);
28865
28875
  var UserEventService = /** @class */ (function (_super) {
28866
28876
  __extends(UserEventService, _super);
28867
28877
  function UserEventService(graphql, accountService, network, translate, toastController, environment) {
@@ -28874,7 +28884,7 @@
28874
28884
  _this.environment = environment;
28875
28885
  _this._userEventActions = [];
28876
28886
  // For DEV only
28877
- _this._debug = !environment.production;
28887
+ _this._debug = environment && !environment.production;
28878
28888
  return _this;
28879
28889
  }
28880
28890
  /**
@@ -28912,7 +28922,7 @@
28912
28922
  filter: filter && filter.asPodObject()
28913
28923
  },
28914
28924
  arrayFieldName: 'data',
28915
- 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' },
28916
28926
  fetchPolicy: options && options.fetchPolicy || undefined
28917
28927
  })
28918
28928
  .pipe(operators.map(function (res) {
@@ -28955,7 +28965,7 @@
28955
28965
  variables: {
28956
28966
  data: json
28957
28967
  },
28958
- 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' },
28959
28969
  update: function (proxy, _a) {
28960
28970
  var data = _a.data;
28961
28971
  // Update entity
@@ -29182,7 +29192,7 @@
29182
29192
  };
29183
29193
  return UserEventService;
29184
29194
  }(BaseGraphqlService));
29185
- 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" });
29186
29196
  UserEventService.decorators = [
29187
29197
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
29188
29198
  ];
@@ -29192,9 +29202,9 @@
29192
29202
  { type: NetworkService },
29193
29203
  { type: i1$2.TranslateService },
29194
29204
  { type: i1$5.ToastController },
29195
- { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
29205
+ { type: Environment, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [ENVIRONMENT,] }] }
29196
29206
  ]; };
29197
- 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;
29198
29208
 
29199
29209
  var ICONS_MAP = {
29200
29210
  DEBUG_DATA: { matIcon: 'bug_report' },
@@ -29350,7 +29360,7 @@
29350
29360
  UserEventsTable.decorators = [
29351
29361
  { type: i0.Component, args: [{
29352
29362
  selector: 'app-user-events-table',
29353
- 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",
29354
29364
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
29355
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}"]
29356
29366
  },] }
@@ -29370,35 +29380,350 @@
29370
29380
  defaultSortDirection: [{ type: i0.Input }]
29371
29381
  };
29372
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
+
29373
29616
  var SocialModule = /** @class */ (function () {
29374
29617
  function SocialModule() {
29375
29618
  }
29376
- SocialModule.forRoot = function () {
29377
- console.debug('[social] Creating module (root)');
29378
- return {
29379
- ngModule: SocialModule,
29380
- providers: [
29381
- UserEventService
29382
- ]
29383
- };
29384
- };
29385
29619
  return SocialModule;
29386
29620
  }());
29387
29621
  SocialModule.decorators = [
29388
29622
  { type: i0.NgModule, args: [{
29389
29623
  imports: [
29390
29624
  i1$4.CommonModule,
29391
- CoreModule
29625
+ CoreModule,
29626
+ SharedModule
29392
29627
  ],
29393
29628
  declarations: [
29394
- UserEventsTable
29629
+ UserEventsTable,
29630
+ MessageModal,
29631
+ MessageForm
29395
29632
  ],
29396
29633
  exports: [
29397
- UserEventsTable
29634
+ UserEventsTable,
29635
+ MessageModal
29398
29636
  ]
29399
29637
  },] }
29400
29638
  ];
29401
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
+
29402
29727
  var PersonFilter_1;
29403
29728
  // @dynamic
29404
29729
  exports.PersonFilter = PersonFilter_1 = /** @class */ (function (_super) {
@@ -29456,16 +29781,16 @@
29456
29781
  ], exports.PersonFilter);
29457
29782
 
29458
29783
  var PersonFragments = {
29459
- 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 }"])))
29460
29785
  };
29461
29786
  // Load persons query
29462
29787
  var PersonQueries = {
29463
- 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),
29464
- 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)
29465
29790
  };
29466
29791
  var PersonMutations = {
29467
- 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),
29468
- 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 }"])))
29469
29794
  };
29470
29795
  var PersonService = /** @class */ (function (_super_1) {
29471
29796
  __extends(PersonService, _super_1);
@@ -29586,7 +29911,7 @@
29586
29911
  };
29587
29912
  return PersonService;
29588
29913
  }(BaseEntityService));
29589
- 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" });
29590
29915
  PersonService.decorators = [
29591
29916
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
29592
29917
  ];
@@ -29596,7 +29921,7 @@
29596
29921
  { type: NetworkService },
29597
29922
  { type: EntitiesStorage }
29598
29923
  ]; };
29599
- 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;
29600
29925
 
29601
29926
  var PersonValidatorService = /** @class */ (function () {
29602
29927
  function PersonValidatorService(formBuilder, accountValidatorService) {
@@ -29619,7 +29944,7 @@
29619
29944
  };
29620
29945
  return PersonValidatorService;
29621
29946
  }());
29622
- 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" });
29623
29948
  PersonValidatorService.decorators = [
29624
29949
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
29625
29950
  ];
@@ -29630,7 +29955,7 @@
29630
29955
 
29631
29956
  var UsersPage = /** @class */ (function (_super) {
29632
29957
  __extends(UsersPage, _super);
29633
- function UsersPage(injector, accountService, validatorService, configService, dataService, cd, formBuilder, environment) {
29958
+ function UsersPage(injector, formBuilder, accountService, validatorService, configService, dataService, messageService, cd, environment) {
29634
29959
  var _this = _super.call(this, injector, RESERVED_START_COLUMNS
29635
29960
  .concat([
29636
29961
  'avatar',
@@ -29655,16 +29980,17 @@
29655
29980
  _this.validatorService = validatorService;
29656
29981
  _this.configService = configService;
29657
29982
  _this.dataService = dataService;
29983
+ _this.messageService = messageService;
29658
29984
  _this.cd = cd;
29659
- _this.canEdit = false;
29660
29985
  _this.profiles = __spread(PRIORITIZED_AUTHORITIES).reverse();
29661
- _this.filterCriteriaCount = 0;
29662
29986
  _this.statusList = StatusList;
29663
29987
  _this.statusById = StatusById;
29988
+ _this.filterCriteriaCount = 0;
29664
29989
  _this.useSticky = false;
29665
29990
  _this.referentialToString = referentialToString;
29666
- _this.inlineEdition = accountService.isAdmin(); // Allow inline edition only if admin
29667
29991
  _this.canEdit = accountService.isAdmin();
29992
+ _this.canSendMessage = _this.canEdit;
29993
+ _this.inlineEdition = _this.canEdit;
29668
29994
  _this.confirmBeforeDelete = true;
29669
29995
  _this.autoLoad = false; // Wait config loading
29670
29996
  _this.i18nColumnPrefix = 'USER.';
@@ -29754,7 +30080,7 @@
29754
30080
  UsersPage.prototype.restoreFilterOrLoad = function () {
29755
30081
  return __awaiter(this, void 0, void 0, function () {
29756
30082
  var json, filter;
29757
- return __generator(this, function (_a) {
30083
+ return __generator(this, function (_b) {
29758
30084
  this.markAsLoading();
29759
30085
  console.debug("[users] Restoring filter from settings...");
29760
30086
  json = this.settings.getPageSettings(this.settingsId, SETTINGS_FILTER) || {};
@@ -29771,6 +30097,56 @@
29771
30097
  formControl.setValue(null);
29772
30098
  return false;
29773
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
+ };
29774
30150
  /* -- protected methods -- */
29775
30151
  UsersPage.prototype.markForCheck = function () {
29776
30152
  this.cd.markForCheck();
@@ -29780,7 +30156,7 @@
29780
30156
  UsersPage.decorators = [
29781
30157
  { type: i0.Component, args: [{
29782
30158
  selector: 'app-users-table',
29783
- 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",
29784
30160
  providers: [
29785
30161
  { provide: ngxMaterialTable.ValidatorService, useExisting: PersonValidatorService }
29786
30162
  ],
@@ -29791,12 +30167,13 @@
29791
30167
  ];
29792
30168
  UsersPage.ctorParameters = function () { return [
29793
30169
  { type: i0.Injector },
30170
+ { type: i1.FormBuilder },
29794
30171
  { type: AccountService },
29795
30172
  { type: ngxMaterialTable.ValidatorService },
29796
30173
  { type: ConfigService },
29797
30174
  { type: PersonService },
30175
+ { type: MessageService },
29798
30176
  { type: i0.ChangeDetectorRef },
29799
- { type: i1.FormBuilder },
29800
30177
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
29801
30178
  ]; };
29802
30179
  UsersPage.propDecorators = {
@@ -29824,22 +30201,24 @@
29824
30201
  UsersPage
29825
30202
  ],
29826
30203
  exports: [
30204
+ SocialModule,
29827
30205
  UsersPage
29828
30206
  ]
29829
30207
  },] }
29830
30208
  ];
29831
30209
  AdminModule.ctorParameters = function () { return []; };
29832
30210
 
29833
- var ɵ0 = {
30211
+ var ɵ0$c = {
29834
30212
  profile: 'ADMIN'
29835
30213
  };
29836
- var routes$5 = [
30214
+ var routes = [
29837
30215
  {
29838
30216
  path: 'users',
29839
30217
  pathMatch: 'full',
29840
30218
  component: UsersPage,
29841
30219
  canActivate: [AuthGuardService],
29842
- data: ɵ0
30220
+ canDeactivate: [ComponentDirtyGuard],
30221
+ data: ɵ0$c
29843
30222
  }
29844
30223
  ];
29845
30224
  var AdminRoutingModule = /** @class */ (function () {
@@ -29852,36 +30231,30 @@
29852
30231
  imports: [
29853
30232
  SharedRoutingModule,
29854
30233
  AdminModule,
29855
- i3.RouterModule.forChild(routes$5)
30234
+ i3.RouterModule.forChild(routes)
29856
30235
  ],
29857
30236
  exports: [i3.RouterModule]
29858
30237
  },] }
29859
30238
  ];
29860
30239
 
29861
- var ErrorCodes = {
29862
- LOAD_PERSONS_ERROR: 100,
29863
- SAVE_PERSONS_ERROR: 101,
29864
- DELETE_PERSONS_ERROR: 102,
29865
- };
29866
-
29867
- var EntityTestClass$1 = /** @class */ (function () {
30240
+ var EntityTestClass = /** @class */ (function () {
29868
30241
  function EntityTestClass() {
29869
30242
  }
29870
30243
  return EntityTestClass;
29871
30244
  }());
29872
- var FAKE_ENTITIES$1 = [
30245
+ var FAKE_ENTITIES = [
29873
30246
  { id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
29874
30247
  { id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
29875
30248
  { id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
29876
30249
  ];
29877
- function deepCopy$1(values, size) {
30250
+ function deepCopy(values, size) {
29878
30251
  if (isNil(size)) {
29879
- return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
30252
+ return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
29880
30253
  }
29881
30254
  var result = [];
29882
30255
  var i = 1;
29883
30256
  while (result.length < size) {
29884
- result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
30257
+ result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
29885
30258
  var name = entity.name + ' #' + i;
29886
30259
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
29887
30260
  }));
@@ -29891,7 +30264,7 @@
29891
30264
  var AutocompleteTestPage = /** @class */ (function () {
29892
30265
  function AutocompleteTestPage(formBuilder) {
29893
30266
  this.formBuilder = formBuilder;
29894
- this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
30267
+ this._items = deepCopy(FAKE_ENTITIES, 100);
29895
30268
  this._$items = new rxjs.BehaviorSubject(undefined);
29896
30269
  this.autocompleteFields = new MatAutocompleteConfigHolder();
29897
30270
  this.memoryHide = false;
@@ -29937,7 +30310,7 @@
29937
30310
  });
29938
30311
  // From items
29939
30312
  this.autocompleteFields.add('entity-items-large', {
29940
- items: FAKE_ENTITIES$1.slice(),
30313
+ items: FAKE_ENTITIES.slice(),
29941
30314
  attributes: ['label', 'name', 'description', 'comments'],
29942
30315
  displayWith: this.entityToString
29943
30316
  });
@@ -29959,13 +30332,13 @@
29959
30332
  var _this = this;
29960
30333
  return __generator(this, function (_a) {
29961
30334
  data = {
29962
- entity: deepCopy$1(FAKE_ENTITIES$1)[0],
30335
+ entity: deepCopy(FAKE_ENTITIES)[0],
29963
30336
  // This item is NOT in the items list => i should be displayed anyway
29964
30337
  missingEntity: {
29965
30338
  id: -1, label: '??', name: 'Missing item'
29966
30339
  },
29967
- disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
29968
- entities: deepCopy$1(FAKE_ENTITIES$1)
30340
+ disableEntity: deepCopy(FAKE_ENTITIES)[2],
30341
+ entities: deepCopy(FAKE_ENTITIES)
29969
30342
  };
29970
30343
  this.form.setValue(data);
29971
30344
  // Load observables
@@ -30134,13 +30507,13 @@
30134
30507
  { type: i1.FormBuilder }
30135
30508
  ]; };
30136
30509
 
30137
- var moment$2 = momentImported__namespace;
30510
+ var moment$5 = momentImported__namespace;
30138
30511
  var SwipeTestPage = /** @class */ (function () {
30139
30512
  function SwipeTestPage(formBuilder, dateFormatPipe) {
30140
30513
  this.formBuilder = formBuilder;
30141
30514
  this.dateFormatPipe = dateFormatPipe;
30142
30515
  this.$dates = new rxjs.BehaviorSubject(undefined);
30143
- this._today = moment$2().startOf('day');
30516
+ this._today = moment$5().startOf('day');
30144
30517
  this.form = formBuilder.group({
30145
30518
  empty: [null, i1.Validators.required],
30146
30519
  date: [null, i1.Validators.compose([i1.Validators.required, SharedValidators.validDate])],
@@ -30154,7 +30527,7 @@
30154
30527
  var _this = this;
30155
30528
  var dates = [];
30156
30529
  for (var d = 0; d < 7; d++) {
30157
- dates[d] = moment$2(this._today).add(d - 3, 'day');
30530
+ dates[d] = moment$5(this._today).add(d - 3, 'day');
30158
30531
  }
30159
30532
  this.$dates.next(dates);
30160
30533
  this.loadData();
@@ -30201,7 +30574,7 @@
30201
30574
  { type: DateFormatPipe }
30202
30575
  ]; };
30203
30576
 
30204
- var moment$1 = momentImported__namespace;
30577
+ var moment$6 = momentImported__namespace;
30205
30578
  var DateTimeTestPage = /** @class */ (function () {
30206
30579
  function DateTimeTestPage(platform, formBuilder, cd) {
30207
30580
  this.platform = platform;
@@ -30236,7 +30609,7 @@
30236
30609
  var now, data;
30237
30610
  var _this = this;
30238
30611
  return __generator(this, function (_a) {
30239
- now = moment$1();
30612
+ now = moment$6();
30240
30613
  data = {
30241
30614
  empty: toDateISOString(now.clone().add(2, 'hours')),
30242
30615
  enable: toDateISOString(now),
@@ -30301,12 +30674,12 @@
30301
30674
  { type: i0.ChangeDetectorRef }
30302
30675
  ]; };
30303
30676
 
30304
- var EntityTestClass = /** @class */ (function () {
30677
+ var EntityTestClass$1 = /** @class */ (function () {
30305
30678
  function EntityTestClass() {
30306
30679
  }
30307
30680
  return EntityTestClass;
30308
30681
  }());
30309
- var FAKE_ENTITIES = [
30682
+ var FAKE_ENTITIES$1 = [
30310
30683
  { id: 1, label: 'AAA', name: 'Item A' },
30311
30684
  { id: 2, label: 'BBB', name: 'Item B' },
30312
30685
  { id: 3, label: 'CCC', name: 'Item C' },
@@ -30315,14 +30688,14 @@
30315
30688
  { id: 6, label: 'FFF', name: 'Item F' },
30316
30689
  { id: 7, label: 'GGG', name: 'Item G' }
30317
30690
  ];
30318
- function deepCopy(values, size) {
30691
+ function deepCopy$1(values, size) {
30319
30692
  if (isNil(size)) {
30320
- return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
30693
+ return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
30321
30694
  }
30322
30695
  var result = [];
30323
30696
  var i = 1;
30324
30697
  while (result.length < size) {
30325
- result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
30698
+ result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
30326
30699
  var name = entity.name + ' #' + i;
30327
30700
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
30328
30701
  }));
@@ -30332,7 +30705,7 @@
30332
30705
  var ChipsTestPage = /** @class */ (function () {
30333
30706
  function ChipsTestPage(formBuilder) {
30334
30707
  this.formBuilder = formBuilder;
30335
- this._items = deepCopy(FAKE_ENTITIES, 100);
30708
+ this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
30336
30709
  this._$items = new rxjs.BehaviorSubject(undefined);
30337
30710
  this.autocompleteFields = new MatAutocompleteConfigHolder();
30338
30711
  this.form = formBuilder.group({
@@ -30375,7 +30748,7 @@
30375
30748
  var items, data;
30376
30749
  var _this = this;
30377
30750
  return __generator(this, function (_a) {
30378
- items = deepCopy(FAKE_ENTITIES);
30751
+ items = deepCopy$1(FAKE_ENTITIES$1);
30379
30752
  data = {
30380
30753
  entity: items.slice(0, 1),
30381
30754
  entityInitial: items.slice(1, 2),
@@ -30512,7 +30885,7 @@
30512
30885
  { type: i1.FormBuilder }
30513
30886
  ]; };
30514
30887
 
30515
- var moment = momentImported__namespace;
30888
+ var moment$7 = momentImported__namespace;
30516
30889
  var DateTestPage = /** @class */ (function () {
30517
30890
  function DateTestPage(formBuilder, cd) {
30518
30891
  this.formBuilder = formBuilder;
@@ -30524,7 +30897,8 @@
30524
30897
  this.timezone = 'Indian/Mahe';
30525
30898
  this.stringify = JSON.stringify;
30526
30899
  this.form = formBuilder.group({
30527
- empty: [null, i1.Validators.required],
30900
+ empty: [null, SharedValidators.validDate],
30901
+ emptyRequired: [null, i1.Validators.compose([i1.Validators.required, SharedValidators.validDate])],
30528
30902
  enable: [null, i1.Validators.required],
30529
30903
  disable: [null, i1.Validators.required],
30530
30904
  readonly: [null],
@@ -30548,10 +30922,11 @@
30548
30922
  var now, nowAtMahe, data;
30549
30923
  var _this = this;
30550
30924
  return __generator(this, function (_a) {
30551
- now = moment();
30925
+ now = moment$7();
30552
30926
  nowAtMahe = now.clone().tz(this.timezone).startOf('day');
30553
30927
  data = {
30554
- empty: toDateISOString(now.clone().add(2, 'hours')),
30928
+ empty: null,
30929
+ emptyRequired: null,
30555
30930
  enable: toDateISOString(now),
30556
30931
  disable: now.clone(),
30557
30932
  readonly: now.clone(),
@@ -30609,7 +30984,7 @@
30609
30984
  DateTestPage.decorators = [
30610
30985
  { type: i0.Component, args: [{
30611
30986
  selector: 'app-data-test',
30612
- 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"
30613
30988
  },] }
30614
30989
  ];
30615
30990
  DateTestPage.ctorParameters = function () { return [
@@ -30629,7 +31004,7 @@
30629
31004
  { label: 'Shared directives', divider: true },
30630
31005
  { label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
30631
31006
  ];
30632
- var routes$4 = [
31007
+ var routes$1 = [
30633
31008
  {
30634
31009
  path: '',
30635
31010
  pathMatch: 'full',
@@ -30689,7 +31064,7 @@
30689
31064
  i1.ReactiveFormsModule,
30690
31065
  SharedMaterialModule,
30691
31066
  i1$2.TranslateModule.forChild(),
30692
- i3.RouterModule.forChild(routes$4)
31067
+ i3.RouterModule.forChild(routes$1)
30693
31068
  ],
30694
31069
  declarations: [
30695
31070
  DateTimeTestPage,
@@ -30751,7 +31126,7 @@
30751
31126
  { type: i1$2.TranslateService }
30752
31127
  ]; };
30753
31128
 
30754
- var routes$3 = [
31129
+ var routes$2 = [
30755
31130
  {
30756
31131
  path: 'toast',
30757
31132
  pathMatch: 'full',
@@ -30769,7 +31144,7 @@
30769
31144
  i1$4.CommonModule,
30770
31145
  i1$5.IonicModule,
30771
31146
  i1$2.TranslateModule.forChild(),
30772
- i3.RouterModule.forChild(routes$3)
31147
+ i3.RouterModule.forChild(routes$2)
30773
31148
  ],
30774
31149
  declarations: [
30775
31150
  ToastTestingPage
@@ -30849,7 +31224,7 @@
30849
31224
  { type: i1$5.PopoverController }
30850
31225
  ]; };
30851
31226
 
30852
- var routes$2 = [
31227
+ var routes$3 = [
30853
31228
  {
30854
31229
  path: 'upload-file',
30855
31230
  pathMatch: 'full',
@@ -30867,7 +31242,7 @@
30867
31242
  i1$4.CommonModule,
30868
31243
  i1$5.IonicModule,
30869
31244
  i1$2.TranslateModule.forChild(),
30870
- i3.RouterModule.forChild(routes$2)
31245
+ i3.RouterModule.forChild(routes$3)
30871
31246
  ],
30872
31247
  declarations: [
30873
31248
  UploadFileTestingPage
@@ -31291,7 +31666,7 @@
31291
31666
  { type: i1$5.PopoverController }
31292
31667
  ]; };
31293
31668
 
31294
- var routes$1 = [
31669
+ var routes$4 = [
31295
31670
  {
31296
31671
  path: 'text-popover',
31297
31672
  pathMatch: 'full',
@@ -31309,7 +31684,7 @@
31309
31684
  i1$4.CommonModule,
31310
31685
  i1$5.IonicModule,
31311
31686
  i1$2.TranslateModule.forChild(),
31312
- i3.RouterModule.forChild(routes$1)
31687
+ i3.RouterModule.forChild(routes$4)
31313
31688
  ],
31314
31689
  declarations: [
31315
31690
  TextPopoverTestingPage
@@ -31326,7 +31701,7 @@
31326
31701
  { label: 'Table', page: '/testing/core/table' },
31327
31702
  { label: 'Text popover', page: '/testing/core/text-popover' }
31328
31703
  ];
31329
- var routes = [
31704
+ var routes$5 = [
31330
31705
  {
31331
31706
  path: '',
31332
31707
  pathMatch: 'full',
@@ -31353,7 +31728,7 @@
31353
31728
  imports: [
31354
31729
  i1$4.CommonModule,
31355
31730
  i1$2.TranslateModule.forChild(),
31356
- i3.RouterModule.forChild(routes),
31731
+ i3.RouterModule.forChild(routes$5),
31357
31732
  // Sub modules
31358
31733
  TableTestingModule,
31359
31734
  TextPopoverTestingModule
@@ -31476,7 +31851,6 @@
31476
31851
  exports.EntityStore = EntityStore;
31477
31852
  exports.EntityUtils = EntityUtils;
31478
31853
  exports.Environment = Environment;
31479
- exports.ErrorCodes = ErrorCodes;
31480
31854
  exports.EvenPipe = EvenPipe;
31481
31855
  exports.FileResponse = FileResponse;
31482
31856
  exports.FileService = FileService;
@@ -31492,7 +31866,7 @@
31492
31866
  exports.FormGetControlPipe = FormGetControlPipe;
31493
31867
  exports.FormGetGroupPipe = FormGetGroupPipe;
31494
31868
  exports.FormGetPipe = FormGetPipe;
31495
- exports.Fragments = Fragments;
31869
+ exports.Fragments = Fragments$1;
31496
31870
  exports.GraphqlService = GraphqlService;
31497
31871
  exports.HAMMER_PRESS_TIME = HAMMER_PRESS_TIME;
31498
31872
  exports.HAMMER_TAP_TIME = HAMMER_TAP_TIME;
@@ -31541,6 +31915,11 @@
31541
31915
  exports.MenuComponent = MenuComponent;
31542
31916
  exports.MenuItems = MenuItems;
31543
31917
  exports.MenuService = MenuService;
31918
+ exports.MessageForm = MessageForm;
31919
+ exports.MessageModal = MessageModal;
31920
+ exports.MessageService = MessageService;
31921
+ exports.MessageTypeList = MessageTypeList;
31922
+ exports.MessageTypes = MessageTypes;
31544
31923
  exports.ModalToolbarComponent = ModalToolbarComponent;
31545
31924
  exports.NetworkService = NetworkService;
31546
31925
  exports.NgInitDirective = NgInitDirective;
@@ -31597,6 +31976,7 @@
31597
31976
  exports.SharedTestingModule = SharedTestingModule;
31598
31977
  exports.SharedTestsPage = SharedTestsPage;
31599
31978
  exports.SharedValidators = SharedValidators;
31979
+ exports.SocialErrorCodes = SocialErrorCodes;
31600
31980
  exports.SocialModule = SocialModule;
31601
31981
  exports.StartableService = StartableService;
31602
31982
  exports.StatusById = StatusById;
@@ -31624,6 +32004,7 @@
31624
32004
  exports.UploadFilePopover = UploadFilePopover;
31625
32005
  exports.UploadFileTestingModule = UploadFileTestingModule;
31626
32006
  exports.UploadFileTestingPage = UploadFileTestingPage;
32007
+ exports.UserEventFragments = UserEventFragments;
31627
32008
  exports.UserEventService = UserEventService;
31628
32009
  exports.UserEventTypes = UserEventTypes;
31629
32010
  exports.UserEventsTable = UserEventsTable;
@@ -31775,23 +32156,23 @@
31775
32156
  exports.waitForTrue = waitForTrue;
31776
32157
  exports.waitIdle = waitIdle;
31777
32158
  exports.waitWhilePending = waitWhilePending;
31778
- exports["ɵ0"] = ɵ0$c;
31779
- exports["ɵa"] = CustomReuseStrategy;
31780
- exports["ɵb"] = MatNumpadDomService;
31781
- exports["ɵc"] = isFocusableElement;
31782
- exports["ɵd"] = RegisterForm;
31783
- exports["ɵe"] = AccountValidatorService;
31784
- exports["ɵf"] = RegisterModal;
31785
- exports["ɵg"] = UserSettingsValidatorService;
31786
- exports["ɵh"] = LocalSettingsValidatorService;
31787
- exports["ɵi"] = AppIconComponent;
31788
- exports["ɵj"] = DateTestPage;
31789
- exports["ɵk"] = NumpadTestPage;
31790
- exports["ɵl"] = MatBadgeIconTestPage;
31791
- exports["ɵm"] = ToastTestingModule;
31792
- 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;
31793
32174
 
31794
32175
  Object.defineProperty(exports, '__esModule', { value: true });
31795
32176
 
31796
- }));
32177
+ })));
31797
32178
  //# sourceMappingURL=sumaris-net.ngx-components.umd.js.map