@sumaris-net/ngx-components 0.24.2 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/bundles/{ngx-sumaris-components.umd.js → sumaris-net.ngx-components.umd.js} +1038 -926
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -0
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +25 -0
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -0
  5. package/doc/changelog.md +4 -0
  6. package/esm2015/public_api.js +2 -1
  7. package/esm2015/src/app/admin/users/list/users.js +6 -4
  8. package/esm2015/src/app/core/graphql/graphql.service.js +25 -72
  9. package/esm2015/src/app/core/graphql/graphql.utils.js +1 -1
  10. package/esm2015/src/app/core/install/install-upgrade-card.component.js +105 -46
  11. package/esm2015/src/app/core/services/account.service.js +146 -149
  12. package/esm2015/src/app/core/services/config.service.js +21 -14
  13. package/esm2015/src/app/core/services/local-settings.service.js +72 -87
  14. package/esm2015/src/app/core/services/network.service.js +136 -171
  15. package/esm2015/src/app/core/services/platform.service.js +34 -17
  16. package/esm2015/src/app/core/services/storage/entities-storage.service.js +59 -63
  17. package/esm2015/src/app/shared/audio/audio.js +10 -39
  18. package/esm2015/src/app/shared/material/boolean/material.boolean.js +1 -1
  19. package/esm2015/src/app/shared/services/startable-service.class.js +77 -0
  20. package/esm2015/src/environments/environment.class.js +1 -1
  21. package/esm2015/src/environments/environment.js +5 -1
  22. package/esm2015/sumaris-net.ngx-components.js +13 -0
  23. package/fesm2015/{ngx-sumaris-components.js → sumaris-net.ngx-components.js} +669 -646
  24. package/fesm2015/sumaris-net.ngx-components.js.map +1 -0
  25. package/package.json +13 -9
  26. package/public_api.d.ts +1 -0
  27. package/src/app/admin/users/list/users.d.ts +1 -0
  28. package/src/app/core/graphql/graphql.service.d.ts +5 -13
  29. package/src/app/core/graphql/graphql.utils.d.ts +2 -1
  30. package/src/app/core/install/install-upgrade-card.component.d.ts +12 -7
  31. package/src/app/core/services/account.service.d.ts +11 -10
  32. package/src/app/core/services/config.service.d.ts +6 -5
  33. package/src/app/core/services/local-settings.service.d.ts +4 -9
  34. package/src/app/core/services/network.service.d.ts +27 -38
  35. package/src/app/core/services/platform.service.d.ts +2 -1
  36. package/src/app/core/services/storage/entities-storage.service.d.ts +13 -13
  37. package/src/app/shared/audio/audio.d.ts +4 -8
  38. package/src/app/shared/services/startable-service.class.d.ts +26 -0
  39. package/src/assets/i18n/fr.json +2 -0
  40. package/src/environments/environment.class.d.ts +1 -0
  41. package/{ngx-sumaris-components.d.ts → sumaris-net.ngx-components.d.ts} +0 -0
  42. package/sumaris-net.ngx-components.metadata.json +1 -0
  43. package/bundles/ngx-sumaris-components.umd.js.map +0 -1
  44. package/bundles/ngx-sumaris-components.umd.min.js +0 -25
  45. package/bundles/ngx-sumaris-components.umd.min.js.map +0 -1
  46. package/esm2015/ngx-sumaris-components.js +0 -13
  47. package/fesm2015/ngx-sumaris-components.js.map +0 -1
  48. package/ngx-sumaris-components.metadata.json +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sumaris-net.ngx-components.umd.js","sources":["../../src/environments/environment.class.ts","../../src/app/shared/constants.ts","../../node_modules/tslib/tslib.es6.js","../../src/app/shared/functions.ts","../../src/app/shared/focusable.ts","../../src/app/shared/inputs.ts","../../src/app/shared/observables.ts","../../src/app/shared/events.ts","../../src/app/shared/material/autocomplete/material.autocomplete.ts","../../src/app/shared/pipes/date-format.pipe.ts","../../src/app/shared/pipes/date-diff-duration.pipe.ts","../../src/app/shared/pipes/date-from-now.pipe.ts","../../src/app/shared/material/latlong/latlong.utils.ts","../../src/app/shared/pipes/latlong-format.pipe.ts","../../src/app/shared/pipes/number-format.pipe.ts","../../src/app/shared/pipes/highlight.pipe.ts","../../src/app/shared/pipes/file-size.pipe.ts","../../src/app/shared/dates.ts","../../src/app/shared/pipes/duration.pipe.ts","../../src/app/shared/pipes/math.pipes.ts","../../src/app/shared/pipes/arrays.pipe.ts","../../src/app/shared/pipes/maps.pipe.ts","../../src/app/shared/pipes/string.pipes.ts","../../src/app/shared/services/translate-context.service.ts","../../src/app/shared/pipes/translate-context.pipe.ts","../../src/app/shared/pipes/properties.pipe.ts","../../src/app/shared/pipes/ng-init.pipe.ts","../../src/app/shared/pipes/pipes.module.ts","../../src/app/shared/directives/autofocus.directive.ts","../../src/app/shared/directives/directives.module.ts","../../src/app/shared/material/autocomplete/material.autocomplete.module.ts","../../src/app/shared/validator/validators.ts","../../src/app/shared/material/duration/duration.utils.ts","../../src/app/shared/material/latlong/material.latlong.ts","../../src/app/shared/material/latlong/material.latlong.module.ts","../../src/app/shared/material/datetime/material.date.ts","../../src/app/shared/material/datetime/material.datetime.ts","../../src/app/shared/material/datetime/material.dateshort.ts","../../src/app/shared/material/datetime/datetime.module.ts","../../src/app/shared/material/duration/material.duration.ts","../../src/app/shared/material/duration/duration.module.ts","../../src/app/shared/material/boolean/material.boolean.ts","../../src/app/shared/material/boolean/boolean.module.ts","../../src/app/shared/material/numpad/numpad.model.ts","../../src/app/shared/material/numpad/numpad.container.ts","../../src/app/shared/material/numpad/numpad.dom-service.ts","../../src/app/shared/material/numpad/numpad.component.ts","../../src/app/shared/material/numpad/numpad.directive.ts","../../src/app/shared/material/numpad/numpad.content.ts","../../src/app/shared/material/numpad/numpad.append-to-input.directive.ts","../../src/app/shared/material/numpad/numpad.module.ts","../../src/app/shared/material/swipe/material.swipe.ts","../../src/app/shared/material/swipe/swipe.module.ts","../../src/app/shared/material/chips/material.chips.ts","../../src/app/shared/material/chips/chips.module.ts","../../src/app/shared/material/material.module.ts","../../src/app/shared/services/progress-bar.service.ts","../../src/app/shared/gesture/gesture-config.ts","../../src/app/shared/toolbar/toolbar.ts","../../src/app/shared/material/paginator/material.paginator-i18n.ts","../../src/app/shared/interceptors/progess.interceptor.ts","../../src/app/shared/graph/colors.utils.ts","../../src/app/shared/form/field.component.ts","../../src/app/shared/services/startable-service.class.ts","../../src/app/shared/audio/audio.ts","../../src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts","../../src/app/shared/hotkeys/hotkeys.service.ts","../../src/app/shared/hotkeys/shared-hotkeys.module.ts","../../src/app/shared/file/base64-image-reader.ts","../../src/app/shared/file/file.service.ts","../../src/app/shared/toolbar/modal-toolbar.ts","../../src/app/shared/form/loading-spinner.ts","../../src/app/core/services/base58.ts","../../src/app/core/services/crypto.service.ts","../../src/app/core/services/model/entity.model.ts","../../src/environments/environment.ts","../../src/app/core/services/model/entity.decorators.ts","../../src/app/core/services/model/peer.model.ts","../../src/app/shared/material/material.animations.ts","../../src/app/shared/http/http.utils.ts","../../src/app/core/services/network.utils.ts","../../src/app/shared/version/versions.ts","../../src/app/core/peer/select-peer.modal.ts","../../src/app/core/services/local-settings.service.ts","../../src/app/shared/toasts.ts","../../src/app/core/services/network.service.ts","../../src/app/core/services/errors.ts","../../src/app/core/services/storage/entity-store.class.ts","../../src/app/core/services/storage/entities-storage.service.ts","../../src/app/shared/services/storage.utils.ts","../../src/app/core/services/model/settings.model.ts","../../src/app/core/services/model/model.enum.ts","../../src/app/core/services/model/referential.model.ts","../../src/app/core/services/model/department.model.ts","../../src/app/core/services/model/person.model.ts","../../src/app/core/services/model/account.model.ts","../../src/app/core/graphql/graphql.utils.ts","../../src/app/core/graphql/graphql.service.ts","../../src/app/core/services/base-graphql-service.class.ts","../../src/app/core/services/account.service.ts","../../src/app/core/services/model/config.model.ts","../../src/app/core/services/config/core.config.ts","../../src/app/core/services/config.service.ts","../../src/app/core/services/platform.service.ts","../../src/app/shared/help/help.modal.ts","../../src/app/shared/material/stepper/material.stepper-i18n.ts","../../src/app/shared/shared.module.ts","../../src/app/shared/alerts.ts","../../src/app/shared/guard/component-dirty.guard.ts","../../src/app/shared/shared-routing.module.ts","../../src/app/shared/form/field.model.ts","../../src/app/shared/services/entity-service.class.ts","../../src/app/core/services/model/filter.model.ts","../../src/app/shared/services/memory-entity-service.class.ts","../../src/app/shared/services/job.utils.ts","../../src/app/shared/graph/graph-colors.ts","../../src/app/shared/material/autocomplete/testing/autocomplete.test.ts","../../src/app/shared/material/latlong/testing/latlong.test.ts","../../src/app/shared/material/testing/material.testing.page.ts","../../src/app/shared/material/swipe/testing/swipe.test.ts","../../src/app/core/form/form.utils.ts","../../src/app/shared/material/datetime/testing/mat-date-time.test.ts","../../src/app/shared/material/chips/testing/chips.test.ts","../../src/app/shared/material/testing/material.testing.module.ts","../../src/app/shared/shared.testing.module.ts","../../src/app/core/register/modal/modal-register.ts","../../src/app/core/form/form.class.ts","../../src/app/core/auth/form/form-auth.ts","../../src/app/core/auth/modal/modal-auth.ts","../../src/app/core/about/modal-about.ts","../../src/app/core/menu/menu.model.ts","../../src/app/core/home/home.ts","../../src/app/core/register/confirm/confirm.ts","../../src/app/core/services/validator/base.validator.class.ts","../../src/app/core/services/validator/user-settings.validator.ts","../../src/app/core/services/validator/account.validator.ts","../../src/app/core/account/account.ts","../../src/app/core/form/entity-metadata.component.ts","../../src/app/core/form/form-buttons-bar.component.ts","../../src/app/core/table/table-select-columns.component.ts","../../src/app/core/register/form/form-register.ts","../../src/app/core/graphql/graphql.module.ts","../../src/app/core/services/validator/local-settings.validator.ts","../../src/app/core/settings/settings.page.ts","../../src/app/core/form/properties.form.ts","../../src/app/core/form/list.form.ts","../../src/app/core/services/pipes/usage-mode.pipes.ts","../../src/app/core/services/pipes/person-to-string.pipe.ts","../../src/app/core/install/install-upgrade-card.component.ts","../../src/app/core/services/pipes/account.pipes.ts","../../src/app/core/services/pipes/department-to-string.pipe.ts","../../src/app/core/menu/menu.service.ts","../../src/app/core/menu/menu.component.ts","../../src/app/core/menu/menu.module.ts","../../src/app/core/table/actions-column.component.ts","../../src/app/core/core.module.ts","../../src/app/core/services/auth-guard.service.ts","../../src/app/core/services/base-entity-service.class.ts","../../src/app/core/table/table.utils.ts","../../src/app/core/table/entities-table-datasource.class.ts","../../src/app/core/table/table.class.ts","../../src/app/core/form/editor.class.ts","../../src/app/core/form/entity-editor.class.ts","../../src/app/core/table/memory-table.class.ts","../../src/app/social/services/errors.ts","../../src/app/social/services/model/user-event.model.ts","../../src/app/social/services/social.fragments.ts","../../src/app/social/services/user-event.service.ts","../../src/app/social/list/user-events.table.ts","../../src/app/social/social.module.ts","../../src/app/admin/services/filter/person.filter.ts","../../src/app/admin/services/person.service.ts","../../src/app/admin/services/validator/person.validator.ts","../../src/app/admin/users/list/users.ts","../../src/app/admin/admin.module.ts","../../src/app/admin/admin-routing.module.ts","../../src/app/admin/services/errors.ts","../../public_api.ts","../../sumaris-net.ngx-components.ts"],"sourcesContent":["import {FetchPolicy} from '@apollo/client/core';\nimport {StorageConfig} from '@ionic/storage';\nimport {InjectionToken} from '@angular/core';\n\nexport const ENVIRONMENT = new InjectionToken<Environment>('ENV');\n\nexport class Environment {\n name: string;\n version: string;\n production: boolean;\n baseUrl: string;\n listenRemoteChanges?: boolean;\n\n // A peer to use at startup (useful on a web site deployment)\n defaultPeer?: { host: string; port: number; useSsl?: boolean; path?: string } | undefined | null;\n\n // A list of peers, to select as peer, in settings\n defaultPeers?: { host: string; port: number; useSsl?: boolean; path?: string }[];\n\n // Min compatible version for the peer\n peerMinVersion?: string;\n\n // Enable cache persistence ?\n persistCache?: boolean;\n\n // Force offline mode ? /!\\ For DEV only\n offline?: boolean;\n\n // Apollo (graphQL) config\n apolloFetchPolicy?: FetchPolicy;\n\n // Default values\n defaultLocale: string;\n defaultLatLongFormat?: 'DD' | 'DDMM' | 'DDMMSS';\n defaultDepartmentId?: number;\n defaultAppName?: string;\n defaultAndroidInstallUrl?: string;\n\n // Storage\n storage?: Partial<StorageConfig>;\n storageSavePeriodMs?: number;\n\n // About\n sourceUrl?: string;\n reportIssueUrl?: string;\n forumUrl?: string;\n helpUrl?: string;\n\n // Development\n // (see values in the test database - XML files in Pod's module)\n defaultAuthValues?: {\n username?: string;\n password?: string;\n };\n}\n","export const DATE_ISO_PATTERN = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\nexport const DEFAULT_PLACEHOLDER_CHAR = '\\u005F';\nexport const PUBKEY_REGEXP = /^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44}$/;\nexport const SPACE_PLACEHOLDER_CHAR = '\\u2000';\n\nexport const KEYBOARD_HIDE_DELAY_MS = 250; // 1s\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { LoadResult } from './services/entity-service.class';\nimport { KeysEnum, KeyValueType } from './types';\n\nexport function isNil<T>(obj: T | null | undefined): boolean {\n return obj === undefined || obj === null;\n}\nexport function isNilOrBlank<T>(obj: T | null | undefined): boolean {\n return obj === undefined || obj === null || (typeof obj === 'string' && obj.trim() === '');\n}\nexport function isNotNil<T>(obj: T | null | undefined): boolean {\n return obj !== undefined && obj !== null;\n}\nexport function isNotNilOrBlank<T>(obj: T | null | undefined): boolean {\n return obj !== undefined && obj !== null && (typeof obj !== 'string' || obj.trim() !== '');\n}\nexport function isNotNilOrNaN<T>(obj: T | null | undefined): boolean {\n return obj !== undefined && obj !== null && (typeof obj !== 'number' || !isNaN(obj));\n}\nexport function isNilOrNaN<T>(obj: T | null | undefined): boolean {\n return obj === undefined || obj === null || (typeof obj === 'number' && isNaN(obj));\n}\nexport function isNotEmptyArray<T>(obj: T[] | null | undefined): boolean {\n return obj !== undefined && obj !== null && obj.length > 0;\n}\nexport function firstArrayValue<T>(obj: T[] | null | undefined): T | undefined {\n return isNotEmptyArray(obj) ? obj[0] : undefined;\n}\nexport function isEmptyArray<T>(obj: T[] | null | undefined): boolean {\n return obj === undefined || obj === null || !obj.length;\n}\nexport function isNotNilString(obj: any | null | undefined): obj is string {\n return obj !== undefined && obj !== null && typeof obj === 'string' || false;\n}\nexport function notNilOrDefault<T>(obj: T | null | undefined, defaultValue: T): T {\n return (obj !== undefined && obj !== null) ? obj : defaultValue;\n}\nexport function arraySize<T>(obj: T[] | null | undefined): number {\n return isNotEmptyArray(obj) && obj.length || 0;\n}\nexport function arrayGroupBy<\n T = any,\n K extends keyof T = any,\n M extends { [key: string]: T[];\n} = { [key: string]: T[] }>(obj: T[], key: keyof T): M {\n if (isNil(obj)) return null;\n return obj.reduce((rv: any, x) => {\n (rv[x[key]] = rv[x[key]] || []).push(x);\n return rv;\n }, {});\n}\nexport function arrayDistinct<T = any>(obj: T[], properties?: string[]): T[] {\n if (isEmptyArray(obj)) return obj;\n properties = properties || Object.keys(obj[0]);\n const existingIds = new Set<string>();\n return obj.reduce((res, item) => {\n const uniqueKey = joinPropertiesPath(item, properties, '|');\n if (existingIds.has(uniqueKey)) return res; // Skip\n existingIds.add(uniqueKey);\n return res.concat(item);\n }, []);\n}\nexport function nullIfUndefined<T>(obj: T | null | undefined): T | null {\n return obj === undefined ? null : obj;\n}\nexport function trimEmptyToNull<T>(str: string | null | undefined): string | null {\n const value = str && str.trim() || undefined;\n return value && value.length && value || null;\n}\nexport function toBoolean(obj: boolean | null | undefined | string, defaultValue?: boolean): boolean {\n return (obj !== undefined && obj !== null) ? (obj !== 'false' ? !!obj : false) : defaultValue;\n}\nexport function toNumber(obj: number | null | undefined, defaultValue?: number): number {\n return (obj !== undefined && obj !== null) ? +obj : defaultValue;\n}\nexport function toFloat(obj: string | null | undefined, defaultValue?: number): number | null {\n return (obj !== undefined && obj !== null) ? parseFloat(obj) : defaultValue;\n}\nexport function toInt(obj: string | null | undefined, defaultValue?: number): number | null {\n return (obj !== undefined && obj !== null) ? parseInt(obj, 0) : defaultValue;\n}\nexport function toNotNil<T = any>(obj: T, defaultValue?: T): any | null {\n return (obj !== undefined && obj !== null) ? obj : defaultValue;\n}\nexport function removeDuplicatesFromArray<T>(obj: T[] | null | undefined, property?: string): T[] | null | undefined {\n if (isEmptyArray(obj)) return obj;\n if (property) {\n return obj.filter((item, i, array) => array.findIndex(t => t && item && t[property] === item[property]) === i);\n }\n return obj.filter((item, i, array) => array.findIndex(t => t && item && t === item) === i);\n}\nexport function startsWithUpperCase(input: string, search: string): boolean {\n return input && input.toUpperCase().startsWith(search);\n}\nexport function matchUpperCase(input: string, regexp: string): boolean {\n return input && !!input.toUpperCase().match(regexp);\n}\n\n/**\n * Remove trailing slash if any. Examples :\n * - '/test/' -> '/test'\n * - '/' -> undefined\n */\nexport function noTrailingSlash(path: string): string {\n if (!path || path.trim() === '/') return undefined;\n if (path.trim().lastIndexOf('/') === path.length - 1) return path.substring(0, path.length - 1);\n return path;\n}\n\nexport function replaceAll(value: string, searchString: any, replacement): string | undefined {\n while (value && value.indexOf(searchString) !== -1) {\n value = value.replace(searchString, replacement);\n }\n return value;\n}\n\nexport function removeEnd(value: string, end: string): string {\n return value?.endsWith(end || '') ? value.substr(0, value.length - end.length) : value;\n}\n\n/**\n * Replace case change by an underscore (.e.g 'myString' becomes 'my_string')\n *\n * @param value\n */\nexport function changeCaseToUnderscore(value: string): string {\n if (isNilOrBlank(value)) return value;\n return value.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();\n}\n\nexport function removeDiacritics(text: string): string {\n return text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n\nexport function suggestFromArray<T = any>(items: T[], value: any, opts?: {\n offset?: 0;\n size?: 0;\n searchAttribute?: string;\n searchAttributes?: string[];\n excludedIds?: number[];\n}): LoadResult<T> {\n if (isNotNil(value) && typeof value === 'object') return {data: [value]};\n\n value = (typeof value === 'string' && value !== '*') && value.toUpperCase() || undefined;\n\n const keys = opts && (opts.searchAttribute && [opts.searchAttribute] || opts.searchAttributes) || ['label'];\n\n // Filter items\n if (isNotNilOrBlank(value) && items) {\n\n // If wildcard, search using regexp\n if ((value as string).indexOf('*') !== -1) {\n value = (value as string).replace('*', '.*');\n items = items.filter(v => keys.findIndex(key => matchUpperCase(getPropertyByPathAsString(v, key), value)) !== -1);\n }\n // Else (no wildcard), search using startsWith\n else {\n items = items.filter(v => keys.findIndex(key => startsWithUpperCase(getPropertyByPathAsString(v, key), value)) !== -1);\n }\n }\n\n // Exclude ids\n if (items && isNotEmptyArray(opts?.excludedIds)) {\n items = items.filter(v => !opts.excludedIds.includes(+v['id']));\n }\n\n // Sort\n items = items.sort(propertiesPathComparator(keys))\n\n // Truncate if need\n const total = items?.length || 0;\n if (opts) {\n if (opts.offset > 0) {\n items = items.slice(opts.offset);\n }\n if (isNotNil(opts.size)) {\n items = items.slice(0, opts.size);\n }\n }\n\n return {\n data: items,\n total\n };\n\n\n}\n\nexport function suggestFromStringArray(values: string[], value: any, options?: {\n searchAttribute?: string;\n searchAttributes?: string[];\n}): string[] {\n value = (typeof value === 'string' && value !== '*') && value.toUpperCase() || undefined;\n if (isNilOrBlank(value)) return values;\n\n // If wildcard, search using regexp\n if ((value as string).indexOf('*') !== -1) {\n value = (value as string).replace('*', '.*');\n return values.filter(v => matchUpperCase(v, value));\n }\n\n // If no wildcard, search using startsWith\n return values.filter(v => startsWithUpperCase(v, value));\n}\n\nexport function joinPropertiesPath<T = any>(obj: T, properties: string[], separator?: string): string | undefined {\n if (!obj) throw new Error('Could not display an undefined entity.');\n return properties\n .map(path => getPropertyByPath(obj, path))\n .filter(isNotNilOrBlank)\n .join(separator || ' - ');\n}\n\nexport function joinProperties<T = any, K extends keyof T = any>(obj: T, keys: K[], separator?: string): string | undefined {\n if (!obj) throw new Error('Could not display an undefined entity.');\n return keys\n .map(key => getProperty(obj, key))\n .filter(isNotNilOrBlank)\n .join(separator || ' - ');\n}\n\nexport function propertyPathComparator<T = any>(path: string): (a: T, b: T) => number {\n return (a: T, b: T) => {\n const valueA = getPropertyByPath(a, path);\n const valueB = getPropertyByPath(b, path);\n return valueA === valueB ? 0 : (valueA > valueB ? 1 : -1);\n };\n}\n\nexport function propertyComparator<T = any, K extends keyof T = any>(key: K, defaultValue?: any): (a: T, b: T) => number {\n return (a: T, b: T) => {\n const valueA = a[key] !== undefined ? a[key] : defaultValue;\n const valueB = b[key] ? b[key] : defaultValue;\n return valueA === valueB ? 0 : (valueA > valueB ? 1 : -1);\n };\n}\n\nexport function propertiesPathComparator<T = any>(keys: string[], defaultValues?: any[]): (a: T, b: T) => number {\n if (!keys || !keys.length || (defaultValues && keys.length > defaultValues.length)) {\n throw new Error('Invalid arguments: missing \\'keys\\' or array \\'defaultValues\\' has a bad length');\n }\n return (a: T, b: T) => keys.map((key, index) => {\n const valueA = getPropertyByPath(a, key, defaultValues && defaultValues[index]);\n const valueB = getPropertyByPath(b, key, defaultValues && defaultValues[index]);\n return valueA === valueB ? 0 : (valueA > valueB ? 1 : -1);\n })\n // Stop if not equals, otherwise continue with the next key\n .find(res => res !== 0) || 0;\n}\n\nexport function sort<T>(array: T[], attribute: string, opts?: Intl.CollatorOptions): T[] {\n if (isEmptyArray(array)) return array;\n const compareFn = opts\n ? new Intl.Collator(undefined, opts).compare\n : (v1, v2) => v1 === v2 ? 0 : v1 > v2 ? 1 : -1;\n return array\n .slice() // copy\n .sort((a, b) => compareFn(a[attribute], b[attribute]));\n}\nconst INTEGER_REGEXP = /^[-]?\\d+$/;\nexport function isInt(value: string): boolean {\n return isNotNil(value) && INTEGER_REGEXP.test(value);\n}\nconst NUMBER_REGEXP = /^[-]?\\d+(\\.\\d+)?$/;\nexport function isNumber(value: string): boolean {\n return isNotNil(value) && NUMBER_REGEXP.test(value);\n}\n\nconst NUMBER_RANGE_REGEXP = /^(\\d+-\\d+)|([><=]*\\d+)$/;\nexport function isNumberRange(value: string): boolean {\n return isNotNil(value) && NUMBER_RANGE_REGEXP.test(value);\n}\n\nexport function getPropertyByPath(obj: any, path: string, defaultValue?: any): any {\n if (isNil(obj)) return defaultValue;\n if (isNilOrBlank(path)) return obj;\n const i = path.indexOf('.');\n // Simple property path\n if (i === -1) {\n const res = obj[path];\n return (isNotNil(res) || isNil(defaultValue)) ? res : defaultValue;\n }\n // Complex property path\n const key = path.substring(0, i);\n if (isNil(obj[key])) return defaultValue;\n if (obj[key] && typeof obj[key] === 'object') {\n return getPropertyByPath(obj[key], path.substring(i + 1));\n }\n throw new Error(`Invalid property path: '${key}' is not an valid object.`);\n}\n\nexport function getProperty<T = any, K extends keyof T = any>(obj: T, key: K): T[K] {\n if (isNil(obj)) return undefined;\n return obj[key]; // Inferred type is T[K]\n}\n\nexport function getPropertyByPathAsString(obj: any, path: string): string | undefined {\n const res = getPropertyByPath(obj, path);\n return res && (typeof res === 'string' ? res : ('' + res));\n}\n\nexport function sleep(ms: number): Promise<void> {\n if (ms <= 0) return;\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function round(value: number | undefined | null): number {\n if (isNotNilOrNaN(value)) {\n return Math.round((value + Number.EPSILON) * 100) / 100;\n }\n return value;\n}\n\nexport function equalsOrNil(value1: any, value2: any) {\n return (value1 === value2) || (isNil(value1) && isNil(value2));\n}\n\n/**\n * remove elements from an array\n *\n * @return the removed elements\n * @param array the array on which elements will be removed\n * @param predicate the selection predicate\n */\nexport function removeAll<T>(array: T[], predicate: (pmfm: T) => boolean): T[] {\n let nbRemove = 0;\n return array.slice().map((value, index) => {\n if (predicate(value)) {\n nbRemove++; // glitch counter to avoid index gap\n return array.splice(index - nbRemove + 1, 1)[0];\n }\n return null;\n }).filter(isNotNil);\n}\n\n/**\n * remove the first element from an array\n *\n * @return the removed element\n * @param array the array on which the element will be removed\n * @param predicate the selection predicate\n */\nexport function remove<T>(array: T[], predicate: (pmfm: T) => boolean): T {\n return array.slice().find((value, index) => {\n if (predicate(value)) {\n array.splice(index, 1);\n return true;\n }\n return false;\n });\n}\n\nexport function capitalizeFirstLetter(value: string) {\n if (!value || value.length === 0) return value;\n return value.substr(0, 1).toUpperCase() + value.substr(1);\n}\nexport function uncapitalizeFirstLetter(value: string) {\n if (!value || value.length === 0) return value;\n return value.substr(0, 1).toLowerCase() + value.substr(1);\n}\n\nexport function splitByProperty<T, M extends KeyValueType<T> = KeyValueType<T>>(array: T[] | readonly T[], propertyName: string): M {\n return (array || []).reduce((res, value) => {\n const key = value?.[propertyName];\n if (isNotNil(key)) {\n res[key] = value;\n }\n return res;\n }, <M>{});\n}\n\nexport function splitById<T, M extends KeyValueType<T> = KeyValueType<T>>(array: T[] | readonly T[]): M {\n return (array || []).reduce((res, value) => {\n const key = value?.['id'];\n if (isNotNil(key)) {\n res[key] = value;\n }\n return res;\n }, <M>{});\n}\n\nexport class Beans {\n /**\n * Copy a source object, by including only properties of the given dataType.\n * IMPORTANT: extra properties that are NOT in the targetClass are NOT copied.\n *\n * @param source The source object to copy\n * @param dataType the class to use as target class\n * @param keys The keys to copy. If empty, will copy only NOT optional properties from the dataType\n */\n static copy<T>(source: T, dataType: new () => T, keys?: KeysEnum<T>): T {\n if (isNil(source)) return source;\n const target = new dataType();\n Object.keys(keys || target).forEach(key => {\n target[key] = source[key];\n });\n return target;\n }\n\n /**\n * Says if an object all all properties to nil\n */\n static isEmpty<T>(data: T, keys?: KeysEnum<T>|string[], opts?: {\n blankStringLikeEmpty?: boolean;\n }): boolean {\n return isNil(data) || (Array.isArray(keys) ? keys : Object.keys(keys || data))\n // Find index of the first NOT nil value\n .findIndex(key => {\n const value = data[key];\n if (value && typeof value === 'object') return !Beans.isEmpty(value, null, opts); // Loop\n if (opts && opts.blankStringLikeEmpty === true && typeof value === 'string') return isNotNilOrBlank(value);\n return isNotNil(value);\n }) === -1;\n }\n\n}\n","export interface FocusableElement {\n focus();\n}\n\nexport function isFocusableElement(object: any): object is FocusableElement {\n if (!object) return false;\n return 'focus' in object;\n}\n\n\n","import {ElementRef, QueryList} from '@angular/core';\nimport {FocusableElement, isFocusableElement} from './focusable';\nimport {isNil, isNilOrBlank, isNotEmptyArray, isNotNil, toBoolean, toNumber} from './functions';\n\n\nexport function selectInputContent(event: UIEvent) {\n if (event.defaultPrevented) return false;\n const input = (event.target as any);\n if (!input) return true;\n\n // Nothing to select\n if (isNilOrBlank(input.value)) return false;\n\n if (typeof input.selectRange === 'function') {\n try {\n input.selectRange(input.value.length, 0);\n return true;\n } catch (err) {\n console.error('Could not select input content, using selectRange()', err);\n return false;\n }\n }\n\n if (input && typeof input.select === 'function') {\n try {\n input.select();\n return true;\n } catch (err) {\n console.error('Could not select input content, using select()', err);\n return false;\n }\n }\n return true;\n}\n\nexport function selectInputRange(input: any, startIndex: number, endIndex?: number) {\n if (input && typeof input.setSelectionRange === 'function') {\n\n // No content\n if (isNilOrBlank(input.value)) return false;\n\n try {\n input.setSelectionRange(startIndex, isNotNil(endIndex) ? endIndex : startIndex);\n } catch (err) {\n console.error('Could not select input range', err);\n return false;\n }\n }\n return true;\n}\n\nexport function getCaretPosition(input: any): number {\n if (input && input.selectionStart) {\n return input.selectionDirection ?\n (input.selectionDirection === 'backward' ? input.selectionStart : input.selectionEnd) : input.selectionStart;\n }\n return -1;\n}\n\nexport function moveInputCaretToSeparator(event: KeyboardEvent, separator: string, forward?: boolean) {\n if (event.defaultPrevented || !separator) return false;\n const input = (event.target as any);\n if (!input) return true;\n\n const caretPosition = getCaretPosition(input);\n\n // DEBUG\n //console.debug('caretPosition=', caretPosition);\n\n if (caretPosition === -1) return true; // Caret pos not found: skip\n\n // Get input value\n const value = input.value as string;\n\n // No content: skip\n if (isNilOrBlank(value)) return false;\n\n try {\n\n\n if (value && caretPosition <= value.length) {\n // DEBUG\n //console.debug(\"Input text value: \", value);\n //console.debug(\"Cursor at: \", caretPosition);\n //console.debug(\"Text after cursor: \", value.substr(caretPosition));\n //console.debug(\"Next separator at: \", value.indexOf(separator, caretPosition));\n\n forward = forward !== false;\n\n const separatorIndex = (forward ? value.indexOf(separator, caretPosition) : value.lastIndexOf(separator, caretPosition));\n if (separatorIndex !== -1 && ((forward && separatorIndex + 1 < value.length)\n || (!forward && separatorIndex > 0))) {\n if (input.setSelectionRange) {\n // Move after the next separator\n if (selectInputRange(input, separatorIndex + (forward ? 1 : -1))) {\n // Stop the keyboard event\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n }\n } catch (err) {\n console.error('Could not move caret to next separator', err);\n return false;\n }\n return true;\n}\n\nexport function filterNumberInput(event: KeyboardEvent, allowDecimals: boolean, decimalSeparator?: string) {\n //input number entered or one of the 4 direction up, down, left and right\n if ((event.which >= 48 && event.which <= 57) || (event.which >= 37 && event.which <= 40)) {\n //console.debug('input number entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode);\n // OK\n }\n // Decimal separator\n else if (allowDecimals && ((!decimalSeparator && (event.key === '.' || event.key === ','))\n || (decimalSeparator && event.key === decimalSeparator))) {\n //console.debug('input decimal separator entered :' + event.code);\n // OK\n } else {\n //input command entered of delete, backspace or one of the 4 direction up, down, left and right, or negative sign\n if ((event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode == 46 || event.which == 8 || event.keyCode == 9 || event.keyCode == 45) {\n //console.debug('input command entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode);\n // OK\n }\n // Cancel other keyboard events\n else {\n //console.debug('input not number entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode + ' ' + event.code );\n event.preventDefault();\n }\n }\n}\n\nexport function focusInput(element: ElementRef) {\n const inputElement = asInputElement(element);\n if (inputElement)\n inputElement.focus();\n else {\n console.warn('Trying to focus on this element:', element);\n }\n}\n\nexport function setTabIndex(element: ElementRef, tabIndex: number) {\n if(isInputElement(element)) {\n element.tabindex = tabIndex;\n }\n else if (element && isInputElement(element.nativeElement)) {\n element.nativeElement.tabIndex = tabIndex;\n }\n else {\n console.warn('Trying to change tabindex on this element:', element);\n }\n}\n\nexport interface InputElement extends FocusableElement {\n tabindex?: number;\n tabIndex?: number;\n hidden?: boolean;\n disabled?: boolean;\n value: any;\n}\nexport function isInputElement(object: any): object is InputElement {\n return isFocusableElement(object)\n && ('value' in object\n // has value is not always set (neither tabindex) check on 2 properties with a logical OR\n || ('tabindex' in object || 'tabIndex' in object));\n}\n\nexport function asInputElement(object: ElementRef): InputElement|undefined {\n if (object) {\n if (isInputElement(object)) return object;\n if (object.nativeElement && isInputElement(object.nativeElement)) return object.nativeElement;\n }\n return undefined;\n}\n\nexport function tabindexComparator(a: InputElement, b: InputElement) {\n const valueA = a.tabindex || a.tabIndex;\n const valueB = b.tabindex || b.tabIndex;\n return valueA === valueB ? 0 : (valueA > valueB ? 1 : -1);\n}\n\nexport interface CanGainFocusOptions {\n minTabindex?: number;\n maxTabindex?: number;\n excludeEmptyInput?: boolean;\n}\n\nexport interface GetFocusableInputOptions extends CanGainFocusOptions {\n sortByTabIndex?: boolean;\n debug?: boolean;\n}\n\nexport function canHaveFocus(input: InputElement, opts?: CanGainFocusOptions): boolean {\n if (!input) return false;\n // Exclude disabled element\n return !toBoolean(input.disabled, false)\n // Exclude hidden element\n && !toBoolean(input.hidden, false)\n // Exclude minTabIndex < element.tabIndex\n && (isNil(opts.minTabindex) || toNumber(input.tabIndex, input.tabindex) > opts.minTabindex)\n // Exclude maxTabIndex > element.tabIndex\n && (isNil(opts.maxTabindex) || toNumber(input.tabIndex, input.tabindex) < opts.maxTabindex)\n // Exclude nil input value\n && (!opts.excludeEmptyInput || isNilOrBlank(input.value));\n}\n\nexport function getFocusableInputElements(elements: QueryList<ElementRef>, opts?: GetFocusableInputOptions): InputElement[] {\n opts = {sortByTabIndex: false, excludeEmptyInput: false, ...opts};\n\n // Focus to first input\n const filteredElements: InputElement[] = elements\n\n // Transform to input\n .map(asInputElement)\n\n .filter(input => {\n const included = canHaveFocus(input, opts);\n // DEBUG\n if (input && opts.debug) console.debug(`[inputs] Focusable input {canFocus: ${included}, tabIndex: ${input.tabIndex||input.tabindex}}`, input);\n return included;\n });\n\n // Sort by tabIndex\n if (opts.sortByTabIndex) {\n return filteredElements.sort(tabindexComparator);\n }\n\n return filteredElements;\n\n}\n\n\nexport function focusNextInput(event: UIEvent|undefined, elements: QueryList<ElementRef>, opts?: GetFocusableInputOptions): boolean {\n\n // Cancelling event (e.g. when emitted by (keydown.tab) )\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // Get current index\n const minTabindex = event && isInputElement(event.target) ? (event.target.tabIndex || event.target.tabindex) : undefined;\n\n // Get focusable input elements\n const focusableInputs: InputElement[] = getFocusableInputElements(elements, {minTabindex, ...opts});\n\n if (isNotEmptyArray(focusableInputs)) {\n // Focus on first inputs\n focusableInputs[0].focus();\n return true;\n }\n\n return false;\n}\n\nexport function focusPreviousInput(event: UIEvent|undefined, elements: QueryList<ElementRef>, opts?: GetFocusableInputOptions): boolean {\n\n // Cancelling event (e.g. when emitted by (keydown.tab) )\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // Get current index\n const maxTabindex = event && isInputElement(event.target) ? (event.target.tabIndex || event.target.tabindex) : undefined;\n\n // Get focusable input elements\n const focusableInputs: InputElement[] = getFocusableInputElements(elements, {maxTabindex, ...opts});\n\n if (isNotEmptyArray(focusableInputs)) {\n // Focus on last inputs\n focusableInputs[focusableInputs.length -1].focus();\n return true;\n }\n\n return false;\n}\n\n","import { merge, Observable, timer } from 'rxjs';\nimport { filter, first, map, takeUntil } from 'rxjs/operators';\nimport { isNotNil } from './functions';\nimport {Predicate} from '@angular/core';\n\n\nexport function filterNotNil<T = any>(obs: Observable<T>): Observable<T> {\n return obs.pipe(filter(isNotNil));\n}\nexport function firstNotNil<T = any>(obs: Observable<T>): Observable<T> {\n return obs.pipe(first(isNotNil));\n}\nexport function filterTrue(obs: Observable<boolean>): Observable<boolean> {\n return obs.pipe(filter((v) => v === true));\n}\nexport function filterFalse(obs: Observable<boolean>): Observable<boolean> {\n return obs.pipe(filter((v) => v === false));\n}\nexport function firstTruePromise(obs: Observable<boolean>): Promise<boolean> {\n return obs.pipe(first((v) => v === true)).toPromise();\n}\nexport function firstFalsePromise(obs: Observable<boolean>): Promise<boolean> {\n return obs.pipe(first((v) => v === false)).toPromise();\n}\nexport function firstNotNilPromise<T = any>(obs: Observable<T>): Promise<T> {\n return firstNotNil(obs).toPromise();\n}\nexport function chainPromises<T = any>(defers: (() => Promise<any>)[]): Promise<T[]> {\n return (defers || []).reduce((previous: Promise<any> | null, defer) => {\n // First job\n if (!previous) {\n return defer()\n // Init the final result array, with the first result\n .then(jobRes => [jobRes]);\n }\n // Other jobs\n return previous\n .then((finalResult) => defer()\n // Add job result to final result array\n .then(jobRes => finalResult.concat(jobRes)));\n }, null);\n}\n\n\nexport declare interface WaitForOptions {\n dueTime?: number;\n checkPeriod?: number;\n timeout?: number;\n}\n\n/**\n * Wait form a predicate return true. This need to implement AppFormUtils.waitWhilePending(), AppFormUtils.waitIdle()\n * @param predicate\n * @param opts\n */\nexport function waitFor(predicate: Predicate<void>, opts?: WaitForOptions): Promise<boolean> {\n if (predicate()) return Promise.resolve(true);\n\n const period = opts && opts.checkPeriod || 300;\n const dueTime = opts && opts.dueTime || period;\n let wait$: Observable<boolean> = timer(dueTime, period)\n .pipe(\n // For DEBUG :\n //tap(() => console.debug(\"Waiting form idle...\", form)),\n filter(_ => predicate()),\n map(_ => true)\n );\n\n // Add timeout\n if (opts && opts.timeout) {\n const $timeout = timer(opts.timeout);\n wait$ = merge(\n wait$.pipe(\n takeUntil($timeout)\n ),\n $timeout\n .pipe(map(() => {\n throw new Error(`Timeout waitIdle() - after ${opts.timeout}ms`);\n }))\n );\n }\n\n return firstNotNilPromise(wait$);\n}\n","import {EventEmitter} from '@angular/core';\nimport {fromEvent, Observable} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\nexport interface PromiseEventPayload<T = any> {\n success: (T) => void;\n error: (err: any) => void;\n}\n\nexport type PromiseEvent<T = any, D = void> = CustomEvent<PromiseEventPayload<T> & D>;\n\nexport function createPromiseEventEmitter<T = any, D = void>(): EventEmitter<PromiseEvent<T, D>> {\n return new EventEmitter<PromiseEvent<T, D>>(true);\n}\n\nexport function createPromiseEvent<T = void, D = void>(eventType: string,\n promise: PromiseEventPayload<T>,\n initArg?: CustomEventInit<D>\n ): PromiseEvent<T, D> {\n\n const detail = <PromiseEventPayload & D>{\n ...(initArg && initArg.detail || {}),\n ...promise\n };\n return new CustomEvent<PromiseEventPayload<T> & D>(eventType, {detail});\n}\n\nexport function emitPromiseEvent<T = any, D = void>(emitter: EventEmitter<PromiseEvent<T, D>>,\n eventType: string,\n initArg?: CustomEventInit<D>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const event = createPromiseEvent(eventType, {\n success: resolve,\n error: reject\n }, initArg);\n emitter.emit(event);\n });\n}\n\nexport interface CompletableEvent extends Event {\n target: EventTarget & { complete?: () => void };\n}\n\n/**\n * Listen end of scroll.\n * <p>\n * The threshold distance from the bottom of the content to call the infinite output event when scrolled.\n * The threshold value can be either a percent, or in pixels.\n * For example, use the value of 10% for the infinite output event to get called when the user has scrolled\n * 10% from the bottom of the page. Use the value 100px when the scroll is within 100 pixels from the bottom of the page.\n * </p>\n * @param element\n * @param threshold default to '15%'\n */\nexport function fromScrollEndEvent(element: HTMLElement, threshold?: string): Observable<any> {\n\n threshold = threshold || '15%';\n let isEnd: () => boolean;\n\n // Listen using percentage\n if (threshold.endsWith('%')) {\n const thresholdRatio = parseInt(threshold.slice(0, threshold.length - 1)) / 100;\n isEnd = () => {\n const endPosRatio = 1 - (element.scrollTop + element.offsetHeight) / element.scrollHeight;\n return endPosRatio < thresholdRatio;\n };\n }\n\n // Listen using pixels\n else if (threshold.endsWith('px')) {\n const thresholdPx = parseInt(threshold.slice(0, threshold.length - 2));\n isEnd = () => {\n const endPosPx = element.scrollHeight - (element.scrollTop + element.offsetHeight);\n return endPosPx < thresholdPx;\n };\n }\n else {\n throw new Error('Invalid argument \\'threshold\\'. Expected value unit: \\'px\\' or \\'%\\' ')\n }\n\n return fromEvent(element, 'scroll')\n .pipe(\n filter(() => isEnd())\n );\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Provider,\n ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BehaviorSubject, isObservable, merge, Observable, of, Subject, Subscription, timer } from 'rxjs';\nimport {debounceTime, distinctUntilChanged, filter, first, map, mergeMap, startWith, switchMap, takeUntil, takeWhile, tap} from 'rxjs/operators';\nimport { FetchMoreFn, LoadResult, SuggestFn, SuggestService } from '../../services/entity-service.class';\nimport { changeCaseToUnderscore, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, isNotNilString, joinPropertiesPath, suggestFromArray, toBoolean, toNumber } from '../../functions';\nimport { focusInput, InputElement, selectInputContent, selectInputRange } from '../../inputs';\nimport { firstNotNilPromise } from '../../observables';\nimport { CompareWithFn, DisplayFn } from '../../form/field.model';\nimport { FloatLabelType } from '@angular/material/form-field';\nimport { MatSelect } from '@angular/material/select';\nimport {MatAutocomplete, MatAutocompleteTrigger} from '@angular/material/autocomplete';\nimport { fromScrollEndEvent } from '../../events';\n\n\nexport declare interface MatAutocompleteFieldConfig<T = any, F = any> {\n attributes: string[];\n suggestFn?: (value: any, options?: any) => Promise<T[] | LoadResult<T>>;\n filter?: Partial<F>;\n items?: Observable<T[]> | T[];\n columnSizes?: (number|'auto'|undefined)[];\n columnNames?: (string|undefined)[];\n displayWith?: DisplayFn;\n compareWith?: CompareWithFn;\n showAllOnFocus?: boolean;\n showPanelOnFocus?: boolean;\n class?: string;\n mobile?: boolean;\n debounceTime?: number;\n suggestLengthThreshold?: number;\n}\n\nexport declare interface MatAutocompleteFieldAddOptions<T = any, F = any> extends Partial<MatAutocompleteFieldConfig<T, F>> {\n service?: SuggestService<T, F>;\n}\n\nexport class MatAutocompleteConfigHolder {\n fields: {\n [key: string]: MatAutocompleteFieldConfig;\n } = {};\n\n getUserAttributes: (fieldName: string, defaultAttributes?: string[]) => string[];\n\n constructor(private options?: {\n getUserAttributes: (fieldName: string, defaultAttributes?: string[]) => string[];\n }) {\n // Store the function from options (e.g. get from user settings)\n // or create a default function\n this.getUserAttributes = options?.getUserAttributes ||\n ((fieldName, defaultAttributes) => defaultAttributes || ['label', 'name']);\n }\n\n add<T = any, F = any>(fieldName: string, options?: MatAutocompleteFieldAddOptions<T, F>): MatAutocompleteFieldConfig<T, F> {\n if (!fieldName) {\n throw new Error('Unable to add config, with name: ' + (fieldName || 'undefined'));\n }\n options = options || <MatAutocompleteFieldAddOptions>{};\n const suggestFn: SuggestFn<T, F> = options.suggestFn\n || (options.service && ((v, f) => options.service.suggest(v, f)))\n || undefined;\n const attributes = (this.getUserAttributes(fieldName, options.attributes) || ['label', 'name']);\n // Keep original the function from options, when exists\n const attributesOrFn = attributes.map((a, index) => typeof a === 'function' && options.attributes[index] || a);\n const filter: Partial<F> = {\n searchAttribute: attributes.length === 1 ? attributes[0] : undefined,\n searchAttributes: attributes.length > 1 ? attributes : undefined,\n ...options.filter\n };\n const displayWith = options.displayWith || ((obj) => obj && joinPropertiesPath(obj, attributes));\n const compareWith = options.compareWith || ((o1: any, o2: any) => o1 && o2 && o1.id === o2.id);\n\n const config: MatAutocompleteFieldConfig = {\n ...options,\n attributes: attributesOrFn,\n suggestFn,\n filter,\n displayWith,\n compareWith\n };\n\n this.fields[fieldName] = config;\n return config;\n }\n\n get<T = any>(fieldName: string): MatAutocompleteFieldConfig<T> {\n if (!fieldName) {\n throw new Error('Unable to add config, with name: ' + (fieldName || 'undefined'));\n }\n return this.fields[fieldName] || this.add(fieldName) as MatAutocompleteFieldConfig<T>;\n }\n}\n\nconst DEFAULT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatAutocompleteField),\n multi: true\n};\nconst noop = () => {};\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'mat-autocomplete-field',\n styleUrls: ['./material.autocomplete.scss'],\n templateUrl: './material.autocomplete.html',\n providers: [DEFAULT_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatAutocompleteField implements OnInit, InputElement, OnDestroy, ControlValueAccessor {\n\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n private _onFetchMoreCallback: FetchMoreFn<LoadResult<any>>;\n private _implicitValue: any;\n private _subscription = new Subscription();\n private _itemsSubscription: Subscription;\n private _openedSubscription: Subscription;\n private _filter$ = new BehaviorSubject<any>(undefined);\n private _itemCount: number;\n private _reload$ = new Subject<any>();\n\n _readonly = false;\n _tabindex: number;\n matSelectItems$: Observable<any[]>;\n $inputItems = new BehaviorSubject<any[]>(undefined);\n $filteredItems = new BehaviorSubject<any[]>(undefined);\n searchable: boolean;\n displayValue = '';\n\n _moreItemsCount: number;\n _fetchMore$ = new EventEmitter<Event>();\n\n\n get itemCount(): number {\n return this._itemCount;\n }\n\n get canFetchMore(): boolean {\n return this._onFetchMoreCallback && this._moreItemsCount > 0;\n }\n\n @Input() compareWith: (o1: any, o2: any) => boolean;\n @Input() logPrefix = '[mat-autocomplete] ';\n @Input() formControl: FormControl;\n @Input() formControlName: string = null;\n @Input() floatLabel: FloatLabelType;\n @Input() placeholder: string;\n @Input() suggestFn: SuggestFn<any, any>;\n @Input() required = false;\n @Input() mobile: boolean;\n @Input() clearable = false;\n @Input() debounceTime: number = null;\n @Input() displayWith: DisplayFn | null;\n @Input() displayAttributes: string[];\n @Input() displayColumnSizes: (number|'auto'|undefined)[];\n @Input() displayColumnNames: string[];\n @Input() highlightAccent = false;\n @Input() showAllOnFocus: boolean;\n @Input() showPanelOnFocus: boolean;\n @Input() autofocus: boolean;\n @Input() config: MatAutocompleteFieldConfig;\n @Input() i18nPrefix = 'REFERENTIAL.';\n @Input() noResultMessage = 'COMMON.NO_RESULT';\n @Input('class') classList: string;\n @Input() panelWidth: string;\n @Input() matAutocompletePosition: 'auto' | 'above' | 'below' = 'auto';\n @Input() multiple = false;\n\n @Input() itemSize = '48px';\n @Input() fetchMoreThreshold: string = '15%';\n @Input() suggestLengthThreshold: number = null;\n @Input() showLoadingSpinner = true;\n\n @HostBinding('@.disabled')\n animationsDisabled = true;\n\n @Input() set filter(value: any) {\n if (value !== this._filter$.value) {\n // DEBUG\n //console.debug(this.logPrefix + \" Setting filter:\", value);\n this._filter$.next(value);\n }\n }\n\n get filter(): any {\n return this._filter$.value;\n }\n\n @Input() set readonly(value: boolean){\n this._readonly = value;\n this.markForCheck();\n }\n\n get readonly(): boolean {\n return this._readonly;\n }\n\n @Input() set tabindex(value: number) {\n this._tabindex = value;\n this.markForCheck();\n }\n\n get tabindex(): number {\n return this._tabindex;\n }\n\n @Input() set items(value: Observable<any[]> | any[]) {\n // Remove previous subscription on items, (if exits)\n if (this._itemsSubscription) {\n console.warn(this.logPrefix + ' Items received twice !');\n this._subscription.remove(this._itemsSubscription);\n this._itemsSubscription.unsubscribe();\n }\n\n if (isObservable<any[]>(value)) {\n this._itemsSubscription = this._subscription.add(\n value.subscribe(v => {\n //console.warn(this.logPrefix + \" Received items: \", v);\n this.$inputItems.next(v);\n })\n );\n }\n else {\n if (value !== this.$inputItems.getValue()) {\n this.$inputItems.next(value as any[]);\n }\n }\n }\n\n get items(): Observable<any[]> | any[] {\n return this.$inputItems;\n }\n\n @Output('click') onClick = new EventEmitter<MouseEvent>();\n @Output('blur') onBlur = new EventEmitter<FocusEvent>();\n @Output('focus') onFocus = new EventEmitter<FocusEvent>();\n\n @Output('dropButtonClick') onDropButtonClick = new EventEmitter<UIEvent>(true);\n @Output('keydown.escape') onKeydownEscape = new EventEmitter<any>();\n @Output('keyup.enter') onKeyupEnter = new EventEmitter<any>();\n\n @ViewChild('matSelect') matSelect: MatSelect;\n @ViewChild('matInputText') matInputText: ElementRef;\n @ViewChild(MatAutocomplete) matAutocomplete: MatAutocomplete;\n @ViewChild(MatAutocompleteTrigger) matAutocompleteTrigger: MatAutocompleteTrigger;\n\n get value(): any {\n return this.formControl.value;\n }\n\n get disabled(): any {\n return this.readonly || this.formControl.disabled;\n }\n\n get enabled(): any {\n return !this.readonly && this.formControl.enabled;\n }\n\n constructor(\n protected cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective\n ) {\n }\n\n ngOnInit() {\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-autocomplete-field>.');\n\n // Configuration from config object\n if (this.config) {\n this.suggestFn = this.suggestFn || this.config.suggestFn;\n if (!this.suggestFn && this.config.items) {\n this.items = this.config.items;\n }\n this.filter = this.filter || this.config.filter;\n this.displayAttributes = this.displayAttributes || this.config.attributes;\n this.displayColumnSizes = this.displayColumnSizes || this.config.columnSizes;\n this.displayColumnNames = this.displayColumnNames || this.config.columnNames;\n this.displayWith = this.displayWith || this.config.displayWith;\n this.mobile = toBoolean(this.mobile, this.config.mobile);\n this.suggestLengthThreshold = toNumber(this.suggestLengthThreshold, this.config.suggestLengthThreshold || 0);\n this.showAllOnFocus = toBoolean(this.showAllOnFocus, toBoolean(this.config.showAllOnFocus, this.suggestLengthThreshold === 0));\n this.showPanelOnFocus = toBoolean(this.showPanelOnFocus, toBoolean(this.config.showPanelOnFocus, true));\n this.classList = this.classList || this.config.class;\n this.debounceTime = toNumber(this.debounceTime, this.config.debounceTime);\n }\n\n // Default values\n this.displayAttributes = this.displayAttributes || this.filter?.attributes || ['label', 'name'];\n this.displayWith = this.displayWith || ((obj) => obj && joinPropertiesPath(obj, this.displayAttributes));\n this.displayColumnSizes = this.displayColumnSizes\n // if only column: auto size\n || (this.displayAttributes.length === 1 && [undefined])\n || this.displayAttributes.map(attr =>\n // If label, set col size = 2\n (attr && attr.endsWith('label')) ? 2 :\n // If rankOrder => col size = 1\n ((attr && attr.endsWith('rankOrder')) ? 1\n // Else => auto size\n : undefined));\n this.displayColumnNames = this.displayAttributes.map((attr, index) => this.displayColumnNames && this.displayColumnNames[index] ||\n (this.i18nPrefix + changeCaseToUnderscore(attr).toUpperCase()));\n this.mobile = toBoolean(this.mobile, false);\n this.searchable = !this.mobile && !this.multiple;\n // Default comparator (only need when using mat-select)\n if (!this.searchable && !this.compareWith) this.compareWith = (o1: any, o2: any) => o1 && o2 && o1.id === o2.id;\n const classList = this.classList?.split(' ');\n this.panelWidth = this.panelWidth || (classList && (\n (classList.includes('min-width-medium') && '300px')\n || (classList.includes('min-width-large') && '400px')\n || (classList.includes('min-width-xlarge') && '450px')\n || (classList.includes('mat-autocomplete-panel-full-size') && '100vw')\n ));\n this.debounceTime = toNumber(this.debounceTime, 250);\n this.suggestLengthThreshold = this.suggestLengthThreshold || 0;\n\n // No suggestFn: filter on the given items\n if (!this.suggestFn) {\n const suggestFromArrayFn: SuggestFn<any, any> = async (value, filter) => {\n // DEBUG\n //console.debug(this.logPrefix + \" Calling suggestFromArray with value=\", value);\n\n return suggestFromArray(this.$inputItems.value, value, {\n searchAttributes: this.displayAttributes,\n ...filter\n });\n };\n // Wait (once) that items are loaded, then call suggest from array fn\n this.suggestFn = async (value, filter) => {\n if (isNil(this.$inputItems.value)) {\n // DEBUG\n //console.debug(this.logPrefix + \" Waiting items to be set...\");\n\n await firstNotNilPromise(this.$inputItems);\n\n // DEBUG\n //console.debug(this.logPrefix + \" Received items:\", this.inputItems$.value);\n }\n this.suggestFn = suggestFromArrayFn;\n return this.suggestFn(value, filter); // Loop\n };\n }\n else if (!this.searchable) {\n // Manually fill input items, from the given suggest function\n this._subscription.add(\n this._filter$.pipe(\n startWith<any, any>(this.filter),\n debounceTime(250),\n takeWhile((_) => !this.searchable), // Close subscription, when enabling search (no more mat-select)\n switchMap((filter) => this.suggest('*', filter) )\n )\n .subscribe(items => this.$inputItems.next(items))\n );\n }\n\n const filteredItemsChanges = merge(\n\n // Reload event (no distinctUntilChanged() pipe, to force reload even if same value)\n this._reload$,\n\n // Search text (no distinctUntilChanged() because of the debounceTime() pipe)\n this.formControl.valueChanges\n .pipe(\n filter(value => this.searchable && isNotNilString(value)),\n // Mark as loading (to show loading spinner) - earlier as possible, so before the debounce time\n tap(value => {\n if (this.showLoadingSpinner) {\n this.markAsLoading();\n }\n }),\n // Filter if not enough character\n filter(value => value.length >= this.suggestLengthThreshold),\n // Wait a debounce time\n debounceTime(this.debounceTime),\n // DEBUG\n //tap((value) => console.debug(this.logPrefix + ' search text changes:', value)),\n ),\n\n // Object set: use it (no distinctUntilChanged() pipe need)\n this.formControl.valueChanges\n .pipe(\n startWith<any, any>(this.formControl.value),\n filter(value => this.searchable && (typeof value === 'object')),\n tap(value => {\n // DEBUG\n //console.debug(this.logPrefix + ' object changes:', value)\n\n // Update the display value (if need)\n const displayValue = this.displayWith(value) || '';\n if (this.displayValue !== displayValue) {\n this.displayValue = displayValue;\n\n // Apply to the input[type=text] field\n if (this.matInputText && this.matInputText.nativeElement) {\n this.matInputText.nativeElement.value = this.displayValue;\n }\n }\n })\n ),\n\n // Merge some observables, with a common distinctUntilChanged() pipe\n merge(\n // Focus or click => Load all\n merge(this.onFocus, this.onClick)\n .pipe(\n filter(_ => this.searchable && this.enabled),\n map(_ => this.showAllOnFocus ? '*' : this.formControl.value)\n ),\n // On dropdown button click\n this.onDropButtonClick\n .pipe(\n filter(event => this.searchable && (!event || !event.defaultPrevented) && this.formControl.enabled),\n map(_ => this.showAllOnFocus ? '*' : this.formControl.value)\n ),\n merge(this.$inputItems, this._filter$)\n .pipe(\n map(_ => this.searchable && this.formControl.value),\n )\n )\n .pipe(\n distinctUntilChanged()\n )\n )\n .pipe(\n // DEBUG\n //tap(value => console.debug(this.logPrefix + ' Received update event: ', value)),\n\n // Suggest values\n mergeMap(value => this.suggest(value, this.filter)),\n // DEBUG\n //tap(items => console.debug(this.logPrefix + ' Received from suggest: ', items)),\n\n // Store implicit value (will use it onBlur if not other value selected)\n tap(items => this.updateImplicitValue(items))\n );\n\n // Fetch more events\n const fetchMoreItemsChanges = this._fetchMore$\n .pipe(\n tap(event => event?.preventDefault()), // Avoid to close the mat-select\n filter(() => this.canFetchMore),\n mergeMap(() => this.fetchMore()),\n // DEBUG\n //tap(moreItems => console.debug(this.logPrefix + ' Received from fetch More: ', moreItems)),\n // Concat to existing items\n map(moreItems => (this.$filteredItems.value || []).concat(moreItems))\n );\n\n // Update filtered items\n this._subscription.add(\n merge(\n this.$inputItems,\n\n // Update items events\n filteredItemsChanges,\n\n // Fetch more events\n fetchMoreItemsChanges\n )\n .subscribe(items => {\n // Make sure control value is inside (mat-select)\n if (items && !this.searchable){\n const value = this.formControl.value;\n if (isNotNil(value) && typeof value === 'object' && items.findIndex(item => this.compareWith(item, value)) === -1) {\n // If form value is missing: add it to the list\n items = items.concat(value);\n }\n }\n // Emit items\n this.$filteredItems.next(items);\n }));\n\n // Applying implicit value, on blur\n this._subscription.add(\n this.onBlur\n .pipe(\n // Skip if not searchable\n filter(_ => this.searchable),\n map(_ => this.formControl.value)\n )\n .subscribe( value => {\n // When leave component without object, use implicit value if :\n // - an explicit value\n // - field is not empty (user fill something)\n // - OR field empty but is required\n if (this._implicitValue && ((this.required && isNilOrBlank(value)) || (isNotNilOrBlank(value) && typeof value !== 'object'))) {\n this.writeValue(this._implicitValue);\n this.formControl.markAsPending({emitEvent: false, onlySelf: true});\n this.formControl.updateValueAndValidity({emitEvent: false, onlySelf: true});\n this.checkIfTouched();\n }\n else if (isNilOrBlank(value)) {\n this.writeValue(null);\n this.formControl.markAsPending({emitEvent: false, onlySelf: true});\n this.formControl.updateValueAndValidity({emitEvent: false, onlySelf: true});\n this.checkIfTouched();\n }\n this._implicitValue = null; // reset the implicit value\n }));\n\n // Listen form control status change\n this._subscription.add(\n this.formControl.statusChanges\n .pipe(distinctUntilChanged())\n // Update component state\n .subscribe(() => this.checkIfTouched())\n );\n\n this._subscription.add(\n this.onKeydownEscape.subscribe(event => {\n if (this.isOpen) {\n event?.stopPropagation();\n event?.preventDefault();\n // DEBUG\n //console.debug(this.logPrefix + \" Closing the panel (keydown.escape)\");\n\n this.closePanel();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n\n this._subscription.unsubscribe();\n this.$inputItems.complete();\n this.$filteredItems.complete();\n this._reload$.complete();\n this._filter$.complete();\n\n this.onDropButtonClick.complete();\n this.onClick.complete();\n this.onBlur.complete();\n this.onFocus.complete();\n this.onKeydownEscape.complete();\n this.onKeyupEnter.complete();\n\n this._implicitValue = undefined;\n this.formControl = null;\n this.displayWith = null;\n this.compareWith = null;\n this.suggestFn = null;\n this.$filteredItems = null;\n this.matSelectItems$ = null;\n this.config = null;\n this.classList = null;\n\n this._onChangeCallback = null;\n this._onTouchedCallback = null;\n this._onFetchMoreCallback = null;\n\n // Destroy the 'autocomplete' instance, to avoid memory leak\n if (this.matAutocomplete) {\n this.matAutocomplete.ngOnDestroy();\n }\n }\n\n /**\n * Allow to reload content. Useful when filter has been changed but not detected\n */\n reloadItems(value?: any) {\n // Force a refresh\n this._reload$.next(value || '*');\n }\n\n writeValue(value: any): void {\n // DEBUG\n // console.debug(this.logPrefix + \" Writing value: \", value);\n\n if (value !== this.formControl.value) {\n this.formControl.patchValue(value, {emitEvent: false});\n this._onChangeCallback(value);\n }\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (isDisabled && this.matAutocomplete?.isOpen) {\n this.closePanel();\n }\n this.cd.markForCheck();\n }\n\n focus() {\n if (this.searchable) {\n focusInput(this.matInputText);\n }\n else {\n this.matSelect?.focus();\n }\n }\n\n filterInputTextFocusInEvent(event: FocusEvent) {\n if (!event || event.defaultPrevented) return;\n\n // Ignore event from mat-option\n if (event.relatedTarget instanceof HTMLElement && event.relatedTarget.tagName === 'MAT-OPTION') {\n event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n event.returnValue = false;\n //DEBUG console.debug(this.logPrefix + \" Cancelling focus event\");\n return false;\n }\n\n const hasContent = selectInputContent(event);\n\n // If combo is empty, or if has content but should force to show panel on focus\n if (!hasContent || (this.showPanelOnFocus && this.showAllOnFocus) ) {\n // DEBUG\n console.debug(this.logPrefix + ' Emit focus event');\n this.onFocus.emit(event);\n return true;\n }\n return false;\n }\n\n filterInputTextBlurEvent(event: FocusEvent) {\n if (!event || event.defaultPrevented) return;\n\n // Ignore event from mat-option\n if (event.relatedTarget instanceof HTMLElement && event.relatedTarget.tagName === 'MAT-OPTION') {\n event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n event.returnValue = false;\n //DEBUG console.debug(this.logPrefix + \" Cancelling blur event\");\n return false;\n }\n\n //DEBUG\n //console.debug(this.logPrefix + ' Blur: move caret to the beginning');\n\n // Move caret to the beginning (fix issue IMAGINE-469)\n selectInputRange(event.target as any, 0, 0);\n\n this.onBlur.emit(event);\n return true;\n }\n\n filterMatSelectFocusEvent(event: FocusEvent) {\n if (!event || event.defaultPrevented) return;\n // DEBUG\n // console.debug(this.logPrefix + \" Received <mat-select> focus event\", event);\n this.onFocus.emit(event);\n }\n\n\n filterMatSelectBlurEvent(event: FocusEvent) {\n if (!event || event.defaultPrevented) return;\n\n // DEBUG\n // console.debug(this.logPrefix + \" Received <mat-select> blur event\", event);\n\n // Ignore event from mat-option\n if (event.relatedTarget instanceof HTMLElement && event.relatedTarget.tagName === 'MAT-OPTION') {\n event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n event.returnValue = false;\n // DEBUG\n // console.debug(this.logPrefix + \" Cancelling <mat-select> blur event\");\n return false;\n }\n\n this.onBlur.emit(event);\n return true;\n }\n\n toggleSearch(event: UIEvent) {\n const searchable = !this.searchable;\n if (searchable && this.searchable && this.matInputText) {\n this.focus();\n }\n else {\n this.searchable = searchable;\n if (searchable) {\n this.autofocus = true;\n this.showPanelOnFocus = false;\n }\n this.markForCheck();\n }\n }\n\n clearValue(event: UIEvent) {\n this.writeValue(null);\n event.stopPropagation();\n }\n\n _initAutocompleteInfiniteScroll(threshold?: string) {\n if (!this.matAutocomplete) return; // Skip\n\n // DEBUG\n //console.debug(this.logPrefix + ' Init autocomplete scroll listener');\n\n if (this._openedSubscription) {\n this._openedSubscription.unsubscribe();\n this._subscription.remove(this._openedSubscription);\n }\n\n const opened$: Observable<any> = this.matAutocomplete._isOpen\n ? timer(0)\n : this.matAutocomplete.opened.pipe(debounceTime(200));\n const scrollEnd$ = opened$\n .pipe(\n map((_) => this.getAutocompletePanel()),\n filter(isNotNil),\n switchMap((panel) => fromScrollEndEvent(panel, threshold)\n .pipe(\n takeUntil(this.matAutocomplete.closed)\n )\n )\n );\n\n // Trigger fetch more, end end scroll reached\n this._openedSubscription = scrollEnd$\n .subscribe(() => this._fetchMore$.emit());\n\n // Register subscription\n this._subscription.add(this._openedSubscription);\n }\n\n _initMatSelectInfiniteScroll(threshold?: string) {\n if (!this.matSelect) return; // Skip\n\n // DEBUG\n //console.debug(this.logPrefix + ' Init mat-select scroll listener');\n\n if (this._openedSubscription) {\n this._openedSubscription.unsubscribe();\n this._subscription.remove(this._openedSubscription);\n }\n\n const opened$: Observable<any> = this.matSelect.panelOpen\n ? timer(0)\n : this.matSelect._openedStream.pipe(debounceTime(200));\n const scrollEnd$ = opened$\n .pipe(\n map((_) => this.getMatSelectPanel()),\n filter(isNotNil),\n switchMap((panel) => fromScrollEndEvent(panel, threshold)\n .pipe(\n takeUntil(this.matSelect._closedStream)\n )\n )\n );\n\n // Trigger fetch more, end end scroll reached\n this._openedSubscription = scrollEnd$\n .pipe(\n filter(_ => this._moreItemsCount > 0)\n )\n .subscribe(() => this._fetchMore$.emit());\n\n // Register subscription\n this._subscription.add(this._openedSubscription);\n }\n\n get isOpen(): boolean {\n return (this.searchable && this.matAutocomplete?.isOpen)\n || (this.matSelect?.panelOpen)\n || false;\n }\n closePanel() {\n if (this.matAutocomplete?.isOpen) {\n this.matAutocompleteTrigger?.closePanel();\n return;\n }\n if (this.matSelect?.panelOpen) {\n this.matSelect?.close();\n }\n }\n\n /* -- private method -- */\n\n private async suggest(value: any, filter?: any): Promise<any[]> {\n let res = await this.suggestFn(value, filter);\n\n // DEBUG\n //console.debug(this.logPrefix + ' Filtered items by suggestFn:', value, res);\n if (!res) {\n this._itemCount = 0;\n this._onFetchMoreCallback = undefined;\n this._moreItemsCount = 0;\n }\n else if (Array.isArray(res)) {\n this._itemCount = (res as any[]).length || 0;\n this._onFetchMoreCallback = undefined;\n this._moreItemsCount = 0;\n }\n else {\n const {data, total, fetchMore} = res as LoadResult<any>;\n this._itemCount = toNumber(total, data && data.length || 0);\n this._onFetchMoreCallback = fetchMore;\n this._moreItemsCount = fetchMore && (this._itemCount - data.length) || 0;\n res = data;\n }\n return res as any[];\n }\n\n private async fetchMore(): Promise<any[]> {\n if (!this._onFetchMoreCallback) return [];\n\n // Save then remove fetch function (to avoid multi-call)\n const fetchMoreFn = this._onFetchMoreCallback;\n this._onFetchMoreCallback = undefined;\n\n const {data, total, fetchMore} = await fetchMoreFn();\n this._itemCount = total || this._itemCount;\n this._onFetchMoreCallback = fetchMore;\n this._moreItemsCount = Math.max(0, this._moreItemsCount - data.length); // Borne min = 0\n return data;\n }\n\n private updateImplicitValue(items: any[]) {\n if (this.searchable) {\n // Store implicit value (will use it onBlur if not other value selected)\n if (items && items.length === 1) {\n this._implicitValue = items[0];\n //this.formControl.setErrors(null);\n } else {\n this._implicitValue = undefined;\n }\n }\n }\n\n private checkIfTouched() {\n if (this.formControl.touched) {\n this.cd.markForCheck();\n this._onTouchedCallback();\n }\n }\n\n private getAutocompletePanel(): HTMLElement {\n const ele = this.matAutocomplete?.options.last?._getHostElement().parentElement;\n if (!ele) {\n // DEBUG\n console.warn(this.logPrefix + ' Unable to find the autocomplete div...');\n }\n return ele;\n }\n\n\n private getMatSelectPanel(): HTMLElement {\n const ele = this.matSelect.options.last?._getHostElement().parentElement;\n if (!ele) {\n // DEBUG\n console.warn(this.logPrefix + ' Unable to find the mat-select container...');\n }\n return ele;\n }\n\n private markForCheck() {\n this.cd.markForCheck();\n }\n\n private markAsLoading() {\n if (this.$filteredItems.value) {\n this.$filteredItems.next(undefined);\n this._itemCount = undefined;\n this._implicitValue = undefined;\n this._onFetchMoreCallback = undefined;\n this._moreItemsCount = 0;\n this.markForCheck();\n }\n }\n\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {isMoment, Moment} from 'moment';\nimport {DATE_ISO_PATTERN} from '../constants';\nimport {TranslateService} from '@ngx-translate/core';\nimport {MomentDateAdapter} from '@angular/material-moment-adapter';\n\n@Pipe({\n name: 'dateFormat'\n})\n@Injectable({providedIn: 'root'})\nexport class DateFormatPipe implements PipeTransform {\n\n private readonly datePattern: string;\n private readonly dateTimePattern: string;\n private readonly dateTimeSecondsPattern: string;\n\n constructor(\n private dateAdapter: MomentDateAdapter,\n private translate: TranslateService\n ) {\n\n const translations = translate.instant(['COMMON.DATE_PATTERN', 'COMMON.DATE_TIME_PATTERN', 'COMMON.DATE_TIME_SECONDS_PATTERN']);\n this.datePattern = translations['COMMON.DATE_PATTERN'];\n this.dateTimePattern = translations['COMMON.DATE_TIME_PATTERN'];\n this.dateTimeSecondsPattern = translations['COMMON.DATE_TIME_SECONDS_PATTERN'];\n }\n\n transform(value: string | Moment | Date, args?: { pattern?: string; time?: boolean; seconds?: boolean } ): string | Promise<string> {\n const pattern = args && args.pattern ||\n (args && args.time ? (args.seconds ? this.dateTimeSecondsPattern : this.dateTimePattern) : this.datePattern);\n // Keep original moment object, if possible (to avoid a conversion)\n const date: Moment = isMoment(value) ? value : this.dateAdapter.parse(value, DATE_ISO_PATTERN);\n return date && this.dateAdapter.format(date, pattern) || '';\n }\n\n format(date: Moment, displayFormat: any): string {\n return this.dateAdapter.format(date, displayFormat);\n }\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {Moment} from 'moment';\nimport {DateAdapter} from '@angular/material/core';\nimport {DATE_ISO_PATTERN} from '../constants';\nimport {TranslateService} from '@ngx-translate/core';\nimport * as momentImported from 'moment';\nconst moment = momentImported;\n\n@Pipe({\n name: 'dateDiffDuration'\n})\n@Injectable({providedIn: 'root'})\nexport class DateDiffDurationPipe implements PipeTransform {\n\n protected dayUnit: string;\n\n constructor(\n private dateAdapter: DateAdapter<Moment>,\n private translate: TranslateService) {\n\n this.dayUnit = translate.instant('COMMON.DAY_UNIT');\n translate.get('COMMON.DAY_UNIT').subscribe(dayUnit => this.dayUnit = dayUnit);\n }\n\n transform(value: { startValue: string | Moment; endValue: string | Moment }, args?: any): string | Promise<string> {\n if (!value.startValue || !value.endValue) return '';\n\n const startDate = this.dateAdapter.parse(value.startValue, DATE_ISO_PATTERN);\n const endDate = this.dateAdapter.parse(value.endValue, DATE_ISO_PATTERN);\n\n return this.format(startDate, endDate);\n }\n\n format(startDate: Moment, endDate: Moment): string {\n const duration = moment.duration(endDate.diff(startDate));\n if (duration.asMinutes() < 0) return '';\n\n const timeDuration = moment(0)\n .hour(duration.hours())\n .minute(duration.minutes());\n\n const days = Math.floor(duration.asDays());\n return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format('HH:mm');\n }\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {isMoment, Moment} from 'moment';\nimport {DATE_ISO_PATTERN} from '../constants';\nimport {MomentDateAdapter} from '@angular/material-moment-adapter';\n\n@Pipe({\n name: 'dateFromNow'\n})\n@Injectable({providedIn: 'root'})\nexport class DateFromNowPipe implements PipeTransform {\n\n constructor(\n private dateAdapter: MomentDateAdapter) {\n }\n\n transform(value: string | Moment, args?: any): string | Promise<string> {\n const date: Moment = isMoment(value) ? value as Moment : this.dateAdapter.parse(value, DATE_ISO_PATTERN);\n return date ? date.fromNow(args && args.withoutSuffix) : '';\n }\n}\n","import {DEFAULT_PLACEHOLDER_CHAR} from '../../constants';\n\nexport declare type LatLongPattern = 'DDMMSS' | 'DDMM' | 'DD';\nexport const LAT_LONG_PATTERNS: LatLongPattern[] = ['DDMMSS', 'DDMM', 'DD'];\n\nexport declare class LatLongFormatOptions {\n pattern: LatLongPattern;\n maxDecimals?: number;\n placeholderChar?: string;\n hideSign?: boolean;\n}\nexport declare type LatLongFormatFn = (value: number | null, opts?: LatLongFormatOptions) => string;\nexport const LAT_LONG_DEFAULT_MAX_DECIMALS = 3;\n\n\nconst DEFAULT_OPTIONS = <LatLongFormatOptions>{\n pattern: 'DDMM',\n maxDecimals: LAT_LONG_DEFAULT_MAX_DECIMALS,\n placeholderChar: DEFAULT_PLACEHOLDER_CHAR\n};\nconst DEFAULT_LATITUDE_OPTIONS: LatLongFormatOptions & { longitude: boolean } = {\n ...DEFAULT_OPTIONS,\n longitude: false\n};\nconst DEFAULT_LONGITUDE_OPTIONS: LatLongFormatOptions & { longitude: boolean } = {\n ...DEFAULT_OPTIONS,\n longitude: true\n};\nexport function formatLatitude(value: number | null, opts?: LatLongFormatOptions): string {\n if (value === undefined || value === null) return null;\n\n switch(opts.pattern) {\n case 'DDMMSS':\n return formatToDDMMSS(value, { ...DEFAULT_LATITUDE_OPTIONS, ...opts });\n case 'DDMM':\n return formatToDDMM(value, { ...DEFAULT_LATITUDE_OPTIONS, ...opts });\n case 'DD':\n default:\n return formatToDD(value, { ...DEFAULT_LATITUDE_OPTIONS, ...opts });\n }\n}\n\nexport function formatLongitude(value: number | null, opts?: LatLongFormatOptions): string {\n if (value === undefined || value === null) return null;\n\n switch(opts.pattern) {\n case 'DDMMSS':\n return formatToDDMMSS(value, { ...DEFAULT_LONGITUDE_OPTIONS, ...opts });\n case 'DDMM':\n return formatToDDMM(value, { ...DEFAULT_LONGITUDE_OPTIONS, ...opts });\n case 'DD':\n default:\n return formatToDD(value, { ...DEFAULT_LONGITUDE_OPTIONS, ...opts });\n }\n}\n\nfunction formatToDD(value: number, opts: LatLongFormatOptions & {longitude: boolean}): string {\n // opts.pattern === DD\n let negative = value < 0;\n if (negative) value *= -1;\n\n // Fix longitude when outside [-180, 180]\n if (opts.longitude) {\n while (value > 180) {\n value = (value - 180);\n negative = value < 0;\n if (negative) value *= -1;\n }\n }\n // Fix latitude when outside [-90, 90]\n else {\n while (value > 90) {\n value = (value - 90);\n negative = value < 0;\n if (negative) value *= -1;\n }\n }\n\n let degrees = roundFloat(value, opts.maxDecimals).toString();\n\n // Add sign\n let sign = negative ? '-' : '+';\n\n if (opts.placeholderChar) {\n if (opts.longitude) {\n if (value < 100) {\n degrees = opts.placeholderChar + degrees;\n }\n }\n else {\n sign += ' '; // Add space after the sign\n }\n if (value < 10) {\n degrees = opts.placeholderChar + degrees;\n }\n // Add decimal separator\n const integerLength = (opts.longitude && 3 || 2);\n if (degrees.length === integerLength) {\n degrees += '.';\n }\n // Add trailing placeholder chars\n while ((degrees.length < opts.maxDecimals + integerLength)) {\n degrees += opts.placeholderChar;\n }\n }\n return (opts.hideSign ? '' : sign) + degrees + '°';\n}\n\nfunction formatToDDMMSS(value: number, opts: LatLongFormatOptions & {longitude: boolean}): string {\n let negative = value < 0;\n if (negative) value *= -1;\n\n // Fix longitude when outside [-180, 180]\n if (opts.longitude) {\n while (value > 180) {\n value = (value - 180);\n negative = value < 0;\n if (negative) value *= -1;\n }\n }\n // Fix latitude when outside [-90, 90]\n else {\n while (value > 90) {\n value = (value - 90);\n negative = value < 0;\n if (negative) value *= -1;\n }\n }\n\n let degrees: number = Math.trunc(value);\n let minutes: number | string = Math.trunc((value - degrees) * 60);\n let seconds: number | string = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);\n\n while (seconds >= 60) {\n seconds -= 60;\n minutes += 1;\n }\n while (minutes >= 60) {\n minutes -= 60;\n degrees += 1;\n }\n const sign = opts.longitude ? (negative ? 'W' : 'E') : (negative ? 'S' : 'N');\n\n // Force spacer\n let prefix = '';\n if (opts.placeholderChar) {\n if (opts.longitude && degrees < 100) {\n prefix += opts.placeholderChar;\n }\n if (degrees < 10) {\n prefix += opts.placeholderChar;\n }\n\n if (minutes < 10) {\n minutes = opts.placeholderChar + minutes;\n }\n\n if (seconds < 10) {\n seconds = opts.placeholderChar + seconds;\n }\n else {\n seconds = seconds.toString(); // convert to string - required for the next while\n }\n if (opts.maxDecimals > 0) {\n // Add decimal separator\n if (seconds.length === 2) {\n seconds += '.';\n }\n // Add trailing placeholder chars\n while ((seconds.length < opts.maxDecimals + 3)) {\n seconds += opts.placeholderChar;\n }\n }\n }\n\n const output = prefix + degrees + '° ' + minutes + '\\' ' + seconds + '\"'\n + (opts.hideSign ? '' : ' ' + sign);\n\n // DEBUG\n //console.debug(\"formatToDDMMSS: \" + value + \" -> \" + output);\n\n\n return output;\n}\n\nfunction formatToDDMM(value: number, opts: LatLongFormatOptions & {longitude: boolean}): string {\n let negative = value < 0;\n if (negative) value *= -1;\n\n // Fix longitude when outside [-180, 180]\n if (opts.longitude) {\n while (value > 180) {\n value = (value - 180);\n negative = value < 0;\n if (negative) value *= -1;\n }\n }\n // Fix latitude when outside [-90, 90]\n else {\n while (value > 90) {\n value = (value - 90);\n negative = value < 0;\n if (negative) value *= -1;\n }\n }\n\n let degrees: number | string = Math.trunc(value);\n let minutes: number | string = roundFloat((value - degrees) * 60, opts.maxDecimals);\n while (minutes >= 60) {\n minutes -= 60;\n degrees += 1;\n }\n const sign = opts.longitude ? (negative ? 'W' : 'E') : (negative ? 'S' : 'N');\n\n // Add placeholderChar\n let prefix = '';\n if (opts.placeholderChar) {\n if (opts.longitude && degrees < 100) {\n prefix += opts.placeholderChar;\n }\n if (degrees < 10) {\n prefix += opts.placeholderChar;\n }\n\n if (minutes < 10) {\n minutes = opts.placeholderChar + minutes;\n }\n else {\n minutes = minutes.toString(); // convert to string - required for the next while\n }\n if (opts.maxDecimals > 0) {\n // Add decimal separator\n if (minutes.length === 2) {\n minutes += '.';\n }\n // Add trailing placeholder chars\n while ((minutes.length < opts.maxDecimals + 3)) {\n minutes += opts.placeholderChar;\n }\n }\n }\n const output = prefix + degrees + '° ' + minutes + '\\''\n + (opts.hideSign ? '' : ' ' + sign);\n\n // DEBUG\n //console.debug('formatToDDMM output:', output);\n\n return output;\n}\n\n// 36°57'9\" N = 36.9525000\n// 10°4'21\" W = -10.0725000\nexport function parseLatitudeOrLongitude(input: string, pattern: string, maxDecimals?: number, placeholderChar?: string): number | null {\n // Remove all placeholder (= trim on each parts)\n const inputFix = input.trim().replace(new RegExp('[ +' + (placeholderChar || DEFAULT_PLACEHOLDER_CHAR) + ']+', 'g'), '');\n //DEBUG console.debug(\"Parsing lat= \" + inputFix);\n const parts = inputFix.split(/[^-\\d\\w.,]+/);\n let degrees = parseFloat(parts[0].replace(/,/g, '.'));\n if (isNaN(degrees)) {\n console.debug('parseLatitudeOrLongitude ' + input + ' -> Invalid degrees (NaN). Parts found:', parts);\n return NaN;\n }\n\n if (pattern === 'DD') return roundFloat(degrees, maxDecimals);\n\n const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;\n const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;\n const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;\n const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;\n\n degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));\n\n return roundFloat(degrees, maxDecimals);\n}\n\nfunction roundFloat(input: number, maxDecimals?: number): number {\n if (maxDecimals > 0) {\n\n const powDecimal = Math.pow(10, maxDecimals);\n return Math.trunc(input * powDecimal + 0.5) / powDecimal;\n }\n // no decimals: round to integer\n else if (maxDecimals === 0) {\n return Math.trunc(input + 0.5);\n }\n return input;\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {formatLatitude, formatLongitude} from '../material/latlong/latlong.utils';\n\n\n@Pipe({\n name: 'latLongFormat'\n})\n@Injectable({providedIn: 'root'})\n/**\n * @deprecated use 'latitudeFormat' or 'longitudeFormat' instead\n */\nexport class LatLongFormatPipe implements PipeTransform {\n\n transform(value: number, args?: any): string | Promise<string> {\n return ((!args.type || args.type !== 'latitude') ? formatLongitude : formatLatitude)(value, args);\n }\n\n\n}\n@Pipe({\n name: 'latitudeFormat'\n})\n@Injectable({providedIn: 'root'})\nexport class LatitudeFormatPipe implements PipeTransform {\n transform = formatLatitude;\n}\n\n@Pipe({\n name: 'longitudeFormat'\n})\n@Injectable({providedIn: 'root'})\nexport class LongitudeFormatPipe implements PipeTransform {\n transform = formatLongitude;\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'numberFormat'\n})\n@Injectable({providedIn: 'root'})\nexport class NumberFormatPipe implements PipeTransform {\n\n transform(val: number): string | Promise<string> {\n // Format the output to display any way you want here.\n // For instance:\n if (val !== undefined && val !== null) {\n return val.toLocaleString(/*arguments you need*/);\n } else {\n return '';\n }\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { removeDiacritics, toBoolean } from '../functions';\n\n@Pipe({\n name: 'highlight'\n})\n@Injectable({providedIn: 'root'})\nexport class HighlightPipe implements PipeTransform {\n\n // Replace search text by bold representation\n transform(value: any, args?: string | { search: string; withAccent?: boolean } ): string {\n if (typeof value !== 'string' || !args) return value;\n const searchText = (typeof args === 'string' ? args : args.search);\n const withAccent = (typeof args !== 'string') ? toBoolean(args?.withAccent, false) : false;\n if (typeof searchText !== 'string') return value;\n const searchRegexp = searchText\n .replace(/[.]/g, '[.]')\n .replace(/[*]+/g, '.*');\n if (searchRegexp === '.*') return value; // skip if can match everything\n\n if (withAccent) {\n // Remove all accent characters to allow versatile comparison\n const cleanedSearchText = removeDiacritics(searchRegexp).toUpperCase();\n const index = removeDiacritics(value.toUpperCase()).indexOf(cleanedSearchText);\n if (index !== -1) {\n return value.substr(0, index - 1) +\n '<b>' + value.substr(index, cleanedSearchText.length) + '</b>' +\n value.substr(index + cleanedSearchText.length);\n }\n return value;\n } else {\n // Default behaviour\n const regexp = new RegExp('[ ]?' + searchRegexp, 'gi');\n return ('' + value).replace(regexp, '<b>$&</b>');\n }\n }\n}\n","/**\n * @license\n * Copyright (c) 2019 Jonathan Catmull.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport {Pipe, PipeTransform} from '@angular/core';\n\n/*\n * Convert bytes into largest possible unit.\n * Takes an precision argument that defaults to 2.\n * Usage:\n * bytes | fileSize:precision\n * Example:\n * {{ 1024 | fileSize}}\n * formats to: 1 KB\n*/\n@Pipe({name: 'fileSize'})\nexport class FileSizePipe implements PipeTransform {\n\n private units = [\n 'bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB',\n 'PB'\n ];\n\n transform(bytes: number = 0, precision: number = 2 ): string {\n if ( isNaN( parseFloat( String(bytes) )) || ! isFinite( bytes ) ) return '?';\n\n let unit = 0;\n\n while ( bytes >= 1024 ) {\n bytes /= 1024;\n unit ++;\n }\n\n return bytes.toFixed( + precision ) + ' ' + this.units[ unit ];\n }\n}\n","import {Duration, isMoment, Moment} from 'moment';\nimport * as momentImported from 'moment';\nimport {DATE_ISO_PATTERN} from './constants';\nconst moment = momentImported;\n\n\nexport const DATE_UNIX_TIMESTAMP = 'X';\nexport const DATE_UNIX_MS_TIMESTAMP = 'x';\n\nexport class DateUtils {\n toDateISOString = toDateISOString;\n fromDateISOString = fromDateISOString;\n toDuration = toDuration;\n\n static min(date1: Moment, date2: Moment): Moment {\n return date1 && date2 && date1.isSameOrBefore(date2) ? date1 : date2;\n }\n static max(date1: Moment, date2: Moment): Moment {\n return date1 && date2 && date1.isSameOrAfter(date2) ? date1 : date2;\n }\n}\n\nexport function toDateISOString(value: any): string | undefined {\n if (!value) return undefined;\n\n // Already a valid ISO date time string (without timezone): use it\n if (typeof value === 'string'\n && value.indexOf('+') === -1\n && value.lastIndexOf('Z') === value.length - 1) {\n\n return value;\n }\n // Make sure to have a Moment object\n value = fromDateISOString(value);\n return value && value.toISOString() || undefined;\n}\n\nexport function fromDateISOString(value: any): Moment | undefined {\n // Already a moment object: use it\n if (!value || isMoment(value)) return value;\n\n // Parse the input value, as a ISO date time\n const date: Moment = moment(value, DATE_ISO_PATTERN);\n if (date.isValid()) return date;\n\n // Not valid: trying to convert from unix timestamp\n if (typeof value === 'string') {\n console.warn('Wrong date format - Trying to convert from local time: ' + value);\n if (value.length === 10) {\n return moment(value, DATE_UNIX_TIMESTAMP);\n }\n else if (value.length === 13) {\n return moment(value, DATE_UNIX_MS_TIMESTAMP);\n }\n }\n\n console.warn('Unable to parse date: ' + value);\n return undefined;\n}\n\nexport function fromUnixTimestamp(timeInSec: number) {\n return moment(timeInSec, DATE_UNIX_TIMESTAMP);\n}\nexport function fromUnixMsTimestamp(timeInMs: number) {\n return moment(timeInMs, DATE_UNIX_MS_TIMESTAMP);\n}\n\nexport function toDuration(value: number, unit?: moment.unitOfTime.DurationConstructor): Duration {\n if (!value) return undefined;\n\n const duration = moment.duration(value, unit);\n\n // fix 990+ ms\n if (duration.milliseconds() >= 990) {\n duration.add(1000 - duration.milliseconds(), 'ms');\n }\n // fix 59 s\n if (duration.seconds() >= 59) {\n duration.add(60 - duration.seconds(), 's');\n }\n\n return duration;\n}\n","import {Pipe, Injectable, PipeTransform} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport {toDuration} from '../dates';\n\n@Pipe({\n name: 'duration'\n})\n@Injectable({providedIn: 'root'})\nexport class DurationPipe implements PipeTransform {\n\n protected dayUnit: string;\n\n constructor(\n private translate: TranslateService\n ) {\n this.dayUnit = translate.instant('COMMON.DAY_UNIT');\n }\n\n transform(value: number, args?: any): string {\n if (!value) return '';\n const unit = args && args.unit || 'hours';\n\n // try with moment\n const duration = toDuration(value, unit);\n\n const days = duration.days();\n const hour = duration.hours().toString().padStart(2, '0');\n const minute = duration.minutes().toString().padStart(2, '0');\n\n return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;\n\n }\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'mathAbs'\n})\n@Injectable({providedIn: 'root'})\nexport class MathAbsPipe implements PipeTransform {\n\n transform(val: number): any {\n if (val !== undefined && val !== null) {\n return Math.abs(val);\n } else {\n return val;\n }\n }\n}\n\n@Pipe({\n name: 'even'\n})\n@Injectable({providedIn: 'root'})\nexport class EvenPipe implements PipeTransform {\n\n transform(val: number): any {\n return val % 2 === 0;\n }\n}\n\n@Pipe({\n name: 'odd'\n})\n@Injectable({providedIn: 'root'})\nexport class OddPipe implements PipeTransform {\n\n transform(val: number): any {\n return val % 2 !== 0;\n }\n}\n\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {isNotNil} from '../functions';\n\n@Pipe({\n name: 'isNotEmptyArray'\n})\nexport class NotEmptyArrayPipe implements PipeTransform {\n\n transform(val: any[]): any {\n if (val === undefined || val === null) {\n return false;\n }\n return val.length > 0;\n }\n}\n\n\n@Pipe({\n name: 'isEmptyArray'\n})\nexport class EmptyArrayPipe implements PipeTransform {\n\n transform(val: any[]): any {\n if (val === undefined || val === null) {\n return true;\n }\n return val.length === 0;\n }\n}\n\n\n@Pipe({\n name: 'isArrayLength'\n})\nexport class ArrayLengthPipe implements PipeTransform {\n\n transform(val: any[], args?: { greaterThan?: number; equals?: number; lessThan?: number }): any {\n args = args || {};\n const size = (val === undefined || val === null) ? 0 : val.length;\n if (isNotNil(args.lessThan)) {\n return size < args.lessThan;\n }\n if (isNotNil(args.greaterThan)) {\n return size > args.greaterThan;\n }\n if (isNotNil(args.equals)) {\n return size === args.equals;\n }\n return false;\n }\n}\n\n@Pipe({\n name: 'arrayFirst'\n})\nexport class ArrayFirstPipe implements PipeTransform {\n\n transform(val: any[]): any {\n return val && val.length > 0 ? val[0] : undefined;\n }\n}\n\n@Pipe({\n name: 'arrayPluck'\n})\nexport class ArrayPluckPipe implements PipeTransform {\n\n transform<T>(val: T[], opts: { property: string; omitNil?: boolean }): any[] {\n return (opts.omitNil !== true) ?\n (val || []).map(value => value && value[opts.property]) :\n (val || []).map(value => value && value[opts.property]).filter(isNotNil);\n }\n}\n\n@Pipe({\n name: 'arrayIncludes'\n})\nexport class ArrayIncludesPipe implements PipeTransform {\n\n transform(val: any[], args): any {\n return val && val.includes(args);\n }\n}\n\n\n@Pipe({\n name: 'arrayFilter'\n})\nexport class ArrayFilterPipe implements PipeTransform {\n\n transform(val: any[], filterFn: (any) => boolean): any {\n return val && val.filter(filterFn);\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'mapGet'\n})\n@Injectable({providedIn: 'root'})\nexport class MapGetPipe implements PipeTransform {\n\n transform(val: any, args: string | number | {key: string | number} ): any {\n if (!val) return null;\n const key = (args && typeof args === 'object' ? args.key : args) as any;\n if (!key) return null;\n return val[key];\n }\n}\n\n@Pipe({\n name: 'mapKeys'\n})\n@Injectable({providedIn: 'root'})\nexport class MapKeysPipe implements PipeTransform {\n\n transform(map: any): any[] {\n if (!map) return null;\n return Object.keys(map);\n }\n}\n\n@Pipe({\n name: 'mapValues'\n})\n@Injectable({providedIn: 'root'})\nexport class MapValuesPipe implements PipeTransform {\n\n transform(map: any): any[] {\n if (!map) return null;\n return Object.values(map);\n }\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {isNilOrBlank, isNotNilOrBlank} from '../functions';\n\n@Pipe({\n name: 'isNotNilOrBlank'\n})\n@Injectable({providedIn: 'root'})\nexport class IsNotNilOrBlankPipe implements PipeTransform {\n transform(value: string): boolean {\n return isNotNilOrBlank(value);\n }\n}\n\n@Pipe({\n name: 'isNilOrBlank'\n})\n@Injectable({providedIn: 'root'})\nexport class IsNilOrBlankPipe implements PipeTransform {\n transform(value: string): boolean {\n return isNilOrBlank(value);\n }\n}\n\n@Pipe({\n name: 'toString'\n})\n@Injectable({providedIn: 'root'})\nexport class ToStringPipe implements PipeTransform {\n transform(value: number): string {\n return (value !== null && value !== undefined) ? value.toString() : '';\n }\n}\n\n\n@Pipe({\n name: 'strLength'\n})\n@Injectable({providedIn: 'root'})\nexport class StrLengthPipe implements PipeTransform {\n transform(value: string): number {\n return value && value.length || 0;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport {mergeMap} from 'rxjs/operators';\nimport {of, Observable} from 'rxjs';\nimport {isNilOrBlank} from '../functions';\n\n\n@Injectable({providedIn: 'root'})\nexport class TranslateContextService {\n\n constructor(\n protected translate: TranslateService\n ) {\n }\n\n get(key: string, context?: string, interpolateParams?: Object): Observable<any> {\n // No context: do a normal translate\n if (isNilOrBlank(context)) return this.translate.get(key, interpolateParams);\n\n // Compute a contextual i18n key, using the context as suffix\n const contextKey = this.contextualKey(key, context);\n\n // Return the contextual translation, or default of not exists\n return this.translate.get(contextKey)\n .pipe(\n mergeMap(translation => (translation !== contextKey) ? of(translation) : this.translate.get(key))\n );\n }\n\n instant(key: string, context?: string, interpolateParams?: Object): any {\n // No context: do a normal translate\n if (isNilOrBlank(context)) return this.translate.instant(key, interpolateParams);\n\n // Compute a contextual i18n key, using the context as suffix\n const contextualKey = this.contextualKey(key, context);\n\n // Return the contextual translation, or default of not exists\n const translation = this.translate.instant(contextualKey);\n return (translation !== contextualKey) ? translation : this.translate.instant(key);\n }\n\n /**\n * Compute a contextual i18n key, using the context as suffix\n *\n * @param key\n * @param context\n * @private\n */\n contextualKey(key: string, context: string) {\n\n // Append a dot on context if missing\n if (!context.endsWith('.')) {\n context = context + '.';\n }\n\n // Compute a contextual i18n key, using the context as suffix\n const parts = key.split('.');\n return (parts.length === 1)\n ? `${context}${key}`\n : parts.slice(0, parts.length - 1).concat(context + parts[parts.length - 1]).join('.');\n }\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {TranslateContextService} from '../services/translate-context.service';\nimport {changeCaseToUnderscore, isNilOrBlank} from '../functions';\n\n@Pipe({\n name: 'translateContext'\n})\n@Injectable({providedIn: 'root'})\nexport class TranslateContextPipe implements PipeTransform {\n\n constructor(\n protected translateContext: TranslateContextService\n ) {\n }\n\n transform(key: string, context?: string): string {\n return this.translateContext.instant(key, context);\n }\n}\n\n\n@Pipe({\n name: 'translatable'\n})\n@Injectable({providedIn: 'root'})\nexport class TranslatablePipe implements PipeTransform {\n transform(value: string): string {\n // transform a string to a i18n compatible string (ex: QualitativeValue -> QUALITATIVE_VALUE)\n return changeCaseToUnderscore(value)?.toUpperCase();\n }\n}\n\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {getPropertyByPath} from '../functions';\n\n@Pipe({\n name: 'propertyGet'\n})\n@Injectable({providedIn: 'root'})\nexport class PropertyGetPipe implements PipeTransform {\n\n transform(obj: any, args: string | {key: string; defaultValue?: any } ): any {\n return getPropertyByPath(obj,\n // Path\n args && (typeof args === 'string' ? args : args.key),\n // Default value\n args && (args as any).defaultValue);\n }\n}\n","import {Directive, OnInit, Output, EventEmitter} from '@angular/core';\n\n@Directive({\n selector: '[ngInit]'\n})\nexport class NgInitDirective implements OnInit {\n\n @Output()\n ngInit: EventEmitter<any> = new EventEmitter();\n\n ngOnInit() {\n this.ngInit.emit();\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {IonicModule} from '@ionic/angular';\nimport {DateFormatPipe} from './date-format.pipe';\nimport {DateDiffDurationPipe} from './date-diff-duration.pipe';\nimport {DateFromNowPipe} from './date-from-now.pipe';\nimport {LatitudeFormatPipe, LatLongFormatPipe, LongitudeFormatPipe} from './latlong-format.pipe';\nimport {NumberFormatPipe} from './number-format.pipe';\nimport {HighlightPipe} from './highlight.pipe';\nimport {FileSizePipe} from './file-size.pipe';\nimport {DurationPipe} from './duration.pipe';\nimport {EvenPipe, MathAbsPipe, OddPipe} from './math.pipes';\nimport {ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, EmptyArrayPipe, NotEmptyArrayPipe} from './arrays.pipe';\nimport {MapGetPipe, MapKeysPipe, MapValuesPipe} from './maps.pipe';\nimport {IsNilOrBlankPipe, IsNotNilOrBlankPipe, StrLengthPipe, ToStringPipe} from './string.pipes';\nimport {TranslatablePipe, TranslateContextPipe} from './translate-context.pipe';\nimport {PropertyGetPipe} from './properties.pipe';\nimport {NgInitDirective} from './ng-init.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n TranslateModule\n ],\n declarations: [\n PropertyGetPipe,\n DateFormatPipe,\n DateDiffDurationPipe,\n DurationPipe,\n DateFromNowPipe,\n LatLongFormatPipe,\n LatitudeFormatPipe,\n LongitudeFormatPipe,\n HighlightPipe,\n NumberFormatPipe,\n FileSizePipe,\n MathAbsPipe,\n OddPipe,\n EvenPipe,\n NotEmptyArrayPipe,\n EmptyArrayPipe,\n ArrayLengthPipe,\n ArrayFirstPipe,\n ArrayPluckPipe,\n ArrayIncludesPipe,\n ArrayFilterPipe,\n MapGetPipe,\n MapKeysPipe,\n MapValuesPipe,\n IsNilOrBlankPipe,\n IsNotNilOrBlankPipe,\n ToStringPipe,\n StrLengthPipe,\n TranslateContextPipe,\n TranslatablePipe,\n NgInitDirective\n ],\n exports: [\n PropertyGetPipe,\n DateFormatPipe,\n DateFromNowPipe,\n DateDiffDurationPipe,\n DurationPipe,\n LatLongFormatPipe,\n LatitudeFormatPipe,\n LongitudeFormatPipe,\n HighlightPipe,\n NumberFormatPipe,\n FileSizePipe,\n MathAbsPipe,\n OddPipe,\n EvenPipe,\n NotEmptyArrayPipe,\n EmptyArrayPipe,\n ArrayLengthPipe,\n ArrayFirstPipe,\n ArrayPluckPipe,\n MapGetPipe,\n MapKeysPipe,\n MapValuesPipe,\n IsNilOrBlankPipe,\n IsNotNilOrBlankPipe,\n ToStringPipe,\n StrLengthPipe,\n ArrayIncludesPipe,\n ArrayFilterPipe,\n TranslateContextPipe,\n TranslatablePipe,\n NgInitDirective\n ]\n})\nexport class SharedPipesModule {\n\n}\n","// Import the core angular services.\nimport {AfterContentInit, Directive, ElementRef, OnChanges, OnDestroy, Optional, SimpleChanges} from '@angular/core';\nimport {Platform} from '@ionic/angular';\nimport {Keyboard} from '@ionic-native/keyboard/ngx';\nimport Timeout = NodeJS.Timeout;\n\n// ----------------------------------------------------------------------------------- //\n// ----------------------------------------------------------------------------------- //\n\nconst BASE_TIMER_DELAY = 100;\n\n@Directive({\n selector: '[autofocus], input[appAutofocus]',\n inputs: [\n 'shouldFocusElement: appAutofocus',\n 'timerDelay: autofocusDelay'\n ]\n})\nexport class AutofocusDirective implements AfterContentInit, OnChanges, OnDestroy {\n\n public shouldFocusElement: any;\n public timerDelay: number;\n\n private elementRef: ElementRef;\n private timer: Timeout = null;\n private touchUi: boolean;\n\n // I initialize the autofocus directive.\n constructor(\n elementRef: ElementRef,\n platform: Platform,\n @Optional() protected keyboard: Keyboard ) {\n\n this.elementRef = elementRef;\n\n this.shouldFocusElement = '';\n this.timer = null;\n this.timerDelay = BASE_TIMER_DELAY;\n\n platform.ready().then(() => {\n this.touchUi = platform.is('mobile') || platform.is('tablet');\n });\n }\n\n // ---\n // PUBLIC METHODS.\n // ---\n\n // I get called once after the contents have been fully initialized.\n public ngAfterContentInit() {\n\n // Because this directive can act on the stand-only \"autofocus\" attribute or\n // the more specialized \"appAutofocus\" property, we need to check to see if the\n // \"shouldFocusElement\" input property is the empty string. This will signify\n // that the focus it not being data-driven and should be performed automatically.\n if ( this.shouldFocusElement === '' ) {\n\n this.startFocusWorkflow();\n\n }\n\n }\n\n\n // I get called every time the input bindings are updated.\n public ngOnChanges( changes: SimpleChanges ) {\n\n // If the timer delay is being passed-in as a string (ie, someone is using\n // attribute-input syntax, not property-input syntax), let's coalesce the\n // attribute to a numeric value so that our type-annotations are consistent.\n if ( changes.timerDelay && ( typeof( this.timerDelay ) !== 'number' ) ) {\n\n // If the coalesce fails, just fall-back to a sane value.\n if ( isNaN( this.timerDelay = +this.timerDelay ) ) {\n\n this.timerDelay = BASE_TIMER_DELAY;\n\n }\n\n }\n\n // If the focus input is being data-driven, then we either need to start the\n // focus workflow if focus is required; or, clear any existing workflow if focus\n // is no longer required (so that we don't steal focus from another element).\n if ( changes.shouldFocusElement ) {\n\n ( this.shouldFocusElement )\n ? this.startFocusWorkflow()\n : this.stopFocusWorkflow()\n ;\n\n }\n\n }\n\n\n // I get called once when the directive is being unmounted.\n public ngOnDestroy() {\n\n this.stopFocusWorkflow();\n\n }\n\n // ---\n // PRIVATE METHODS.\n // ---\n\n // I start the timer-based workflow that will focus the current element.\n private startFocusWorkflow() {\n\n // if touch UI: do NOT focus when keyboard hide\n if (this.touchUi && this.keyboard && this.keyboard.isVisible === false) return;\n\n // If there is already a timer running for this element, just let it play out -\n // resetting it at this point will only push-out the time at which the focus is\n // applied to the element.\n if ( this.timer ) {\n\n return;\n\n }\n\n this.timer = setTimeout(\n () => {\n this.timer = null;\n this.elementRef.nativeElement.focus();\n },\n this.timerDelay\n );\n\n }\n\n\n // I stop the timer-based workflow, preventing focus from taking place.\n private stopFocusWorkflow() {\n\n clearTimeout( this.timer );\n this.timer = null;\n\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {AutofocusDirective} from './autofocus.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule\n ],\n declarations: [\n AutofocusDirective\n ],\n exports: [\n AutofocusDirective\n ]\n})\nexport class SharedDirectivesModule {\n}\n","import {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatAutocompleteField} from './material.autocomplete';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {SharedPipesModule} from '../../pipes/pipes.module';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {SharedDirectivesModule} from '../../directives/directives.module';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n ScrollingModule,\n ReactiveFormsModule,\n SharedPipesModule,\n SharedDirectivesModule,\n MatCommonModule,\n MatAutocompleteModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatSelectModule,\n TranslateModule.forChild()\n ],\n exports: [\n MatAutocompleteModule,\n MatAutocompleteField\n ],\n declarations: [\n MatAutocompleteField\n ]\n})\nexport class SharedMatAutocompleteModule {\n}\n\n","import { AbstractControl, FormArray, FormControl, FormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport * as momentImported from 'moment';\nimport { Moment, unitOfTime } from 'moment';\nimport { DATE_ISO_PATTERN, PUBKEY_REGEXP } from '../constants';\nimport { changeCaseToUnderscore, isEmptyArray, isNilOrBlank, isNotNil, isNotNilOrBlank, isNotNilOrNaN, toBoolean } from '../functions';\nimport { fromDateISOString } from '../dates';\n\nconst moment = momentImported;\n\n// @dynamic\nexport class SharedValidators {\n\n static I18N_ERROR_KEYS = {\n required: 'ERROR.FIELD_REQUIRED',\n min: 'ERROR.FIELD_MIN',\n max: 'ERROR.FIELD_MAX',\n minlength:'ERROR.FIELD_MIN_LENGTH',\n maxlength:'ERROR.FIELD_MAX_LENGTH',\n pubkey: 'ERROR.FIELD_NOT_VALID_PUBKEY',\n validDate: 'ERROR.FIELD_NOT_VALID_DATE',\n dateIsAfter: 'ERROR.FIELD_NOT_VALID_DATE_AFTER',\n dateRange: 'ERROR.FIELD_NOT_VALID_DATE_RANGE',\n dateMinDuration: 'ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION',\n dateMaxDuration: 'ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION',\n maxDecimals: 'ERROR.FIELD_MAXIMUM_DECIMALS',\n integer: 'ERROR.FIELD_NOT_VALID_INTEGER',\n email: 'ERROR.FIELD_NOT_VALID_EMAIL',\n latitude: 'ERROR.FIELD_NOT_VALID_LATITUDE',\n longitude: 'ERROR.FIELD_NOT_VALID_LONGITUDE',\n pattern: 'ERROR.FIELD_NOT_VALID_PATTERN',\n unique: 'ERROR.FIELD_NOT_UNIQUE'\n }\n\n static validDate(control: FormControl): ValidationErrors | null {\n const value = control.value;\n const date = !value || moment.isMoment(value) ? value : moment(control.value, DATE_ISO_PATTERN);\n if (date && (!date.isValid() || date.year() < 1970)) {\n return {validDate: true};\n }\n return null;\n }\n\n static latitude(control: FormControl): ValidationErrors | null {\n const value = control.value;\n if (isNotNil(value) && (value < -90 || value > 90)) {\n return {latitude: true};\n }\n return null;\n }\n\n static longitude(control: FormControl): ValidationErrors | null {\n const value = control.value;\n if (isNotNil(value) && (value < -180 || value > 180)) {\n return {longitude: true};\n }\n return null;\n }\n\n static object(control: FormControl): ValidationErrors | null {\n const value = control.value;\n if (value && typeof value !== 'object') {\n return {object: true};\n }\n return null;\n }\n\n static entity(control: FormControl): ValidationErrors | null {\n const value = control.value;\n if (value && (typeof value !== 'object' || value.id === undefined || value.id === null)) {\n return {entity: true};\n }\n return null;\n }\n\n static empty(control: FormControl): ValidationErrors | null {\n if (isNotNilOrBlank(control.value)) {\n return {empty: true};\n }\n return null;\n }\n\n static pubkey(control: FormControl): ValidationErrors | null {\n const value = control.value;\n if (value && (typeof value !== 'string' || !PUBKEY_REGEXP.test(value))) {\n return {pubkey: true};\n }\n return null;\n }\n\n static integer(control: FormControl): ValidationErrors | null {\n if (isNilOrBlank(control.value))\n return null;\n const value = parseFloat(control.value);\n if (isNaN(value) || (value | 0) !== value) {\n return {integer: true};\n }\n return null;\n }\n\n static double(opts?: { maxDecimals?: number }): ValidatorFn {\n let regexpStr;\n if (opts && isNotNil(opts.maxDecimals)) {\n if (opts.maxDecimals < 0) throw new Error(`Invalid maxDecimals value: ${opts.maxDecimals}`);\n regexpStr = opts.maxDecimals > 1 ? `^[-]?[0-9]+([.,][0-9]{1,${opts.maxDecimals}})?$` : '^[-]?[0-9]+([.,][0-9])?$';\n } else {\n regexpStr = '^[-]?[0-9]+([.,][0-9]*)?$';\n }\n\n const regexp = new RegExp(regexpStr);\n return (control: FormControl): ValidationErrors | null => {\n let value = control.value;\n if (Number.isNaN(value)) {\n //console.log(\"WARN: Getting a NaN value !\");\n value = null;\n }\n if (isNotNil(value) && value !== '' && !regexp.test(value as string)) {\n return {maxDecimals: true};\n }\n return null;\n };\n }\n\n static dateIsAfter(previousValue: Moment, errorParam: string, granularity?: unitOfTime.StartOf): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = fromDateISOString(control.value);\n if (isNotNil(value) && isNotNil(previousValue) && value.isSameOrBefore(previousValue, granularity)) {\n // Return the error\n return {dateIsAfter: {minDate: errorParam}};\n }\n return null;\n };\n }\n\n static dateRangeEnd(startDateFieldName: string, msg?: string): ValidatorFn {\n const errorCode = msg ? 'msg': 'dateRange';\n const error = msg ? {msg} : {dateRange: true};\n return (control: AbstractControl): ValidationErrors | null => {\n const startControl = control.parent?.get(startDateFieldName);\n if (!startControl) {\n console.warn(`Cannot find brother control '${startDateFieldName}' in the parent form`);\n return null;\n }\n const startDate = fromDateISOString(startControl.value);\n const endDate = fromDateISOString(control.value);\n // Error if value <= beforeDate\n if (isNotNil(endDate) && isNotNil(startDate) && endDate.isSameOrBefore(startDate)) {\n return error;\n }\n // OK: clear existing errors\n SharedValidators.clearError(control, errorCode);\n return null;\n };\n }\n\n static dateRangeStart(endDateFieldName: string, msg?: string): ValidatorFn {\n const errorCode = msg ? 'msg': 'dateRange';\n const error = msg ? {msg} : {dateRange: true};\n return (control: AbstractControl): ValidationErrors | null => {\n const endDateControl = control.parent?.get(endDateFieldName);\n if (!endDateControl) {\n console.warn(`Cannot find control '${endDateFieldName}' in the parent form`);\n return null;\n }\n const endDate = fromDateISOString(endDateControl.value);\n const startDate = fromDateISOString(control.value);\n // Error if value <= beforeDate\n if (isNotNil(startDate) && isNotNil(endDate) && startDate.isSameOrAfter(endDate)) {\n return error;\n }\n // OK: clear existing errors\n SharedValidators.clearError(control, errorCode);\n return null;\n };\n }\n\n static copyParentErrors(errorNames?: string[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n // Skip if control already has some errors\n if (control.errors) return null;\n\n const errors = control.parent && control.parent.errors;\n\n // No errors, or copy all errors\n if (!errors || isEmptyArray(errorNames)) return errors;\n\n // Copy only expected errors\n return Object.keys(errors).reduce((res, key) => {\n if (errorNames.includes(key)) {\n res[key] = errors[key];\n }\n return res;\n }, {});\n };\n }\n\n static clearError(control: AbstractControl, errorCode: string) {\n if (control.hasError(errorCode)) {\n const errors = control.errors;\n if (errors && errors[errorCode]) {\n // Only one error: reset errors\n if (Object.getOwnPropertyNames(errors).length === 1) {\n control.setErrors(null);\n }\n // Other errors exists: just remove this error\n else {\n delete errors[errorCode];\n control.setErrors(errors);\n }\n }\n }\n }\n\n static translateError(translateFn: (key: string, obj?: any) => string, errorKey: string, errorContent?: any) {\n\n const i18nKey = SharedValidators.I18N_ERROR_KEYS[errorKey]\n // Try to generate a standard error key, like 'ERROR.FIELD_xxx_xxx'\n || ('ERROR.FIELD_' + changeCaseToUnderscore(errorKey).toUpperCase());\n\n let i18nMessage = translateFn(i18nKey, errorContent);\n if (i18nKey !== i18nMessage) return i18nMessage;\n\n // Try to use the error content, as an i18n key\n if (typeof errorContent === 'string') {\n i18nMessage = translateFn(errorContent);\n if (errorContent !== i18nMessage) return i18nMessage;\n }\n\n // Not translated: show error\n console.error(`[validator] Cannot translate error key '${errorKey}'. Please override getI18nError() in your validator`);\n\n return errorKey;\n }\n\n static translateErrorKey() {\n\n }\n}\n\n// @dynamic\nexport class SharedFormGroupValidators {\n\n static dateRange(startDateField: string, endDateField: string, msg?: string ): ValidatorFn {\n const errorCode = isNotNilOrBlank(msg) ? 'msg' : 'dateRange';\n const rangeError = msg ? {msg} : {dateRange: true};\n return (group: FormGroup): ValidationErrors | null => {\n const startDate = fromDateISOString(group.get(startDateField).value);\n const endField = group.get(endDateField);\n const endDate = fromDateISOString(endField.value);\n if (isNotNil(startDate) && isNotNil(endDate) && startDate.isAfter(endDate)) {\n // Update end field\n endField.markAsPending();\n endField.setErrors({\n ...endField.errors,\n ...rangeError\n });\n // Return the error (should be apply to the parent form)\n return rangeError;\n }\n // OK: remove the existing on the end field\n SharedValidators.clearError(endField, errorCode);\n return null;\n };\n }\n\n static dateMaxDuration(startDateField: string, endDateField: string, maxDuration: number, durationUnit?: moment.unitOfTime.Diff): ValidatorFn {\n return (group: FormGroup): ValidationErrors | null => {\n const endField = group.get(endDateField);\n const startDate = fromDateISOString(group.get(startDateField).value);\n const endDate = fromDateISOString(endField.value);\n if (isNotNil(startDate) && isNotNil(endDate) && Math.abs(startDate.diff(endDate, durationUnit)) > maxDuration) {\n // Update end field\n const endFieldErrors: ValidationErrors = endField.errors || {};\n endFieldErrors['dateMaxDuration'] = true;\n endField.setErrors(endFieldErrors);\n endField.markAsTouched({onlySelf: true});\n // Return the error (should be apply to the parent form)\n return {dateMaxDuration: true};\n }\n // OK: remove the existing on the end field\n else {\n SharedValidators.clearError(endField, 'dateMaxDuration');\n }\n return null;\n };\n }\n\n static dateMinDuration(startDateField: string, endDateField: string, minDuration: number, durationUnit?: moment.unitOfTime.Diff): ValidatorFn {\n return (group: FormGroup): ValidationErrors | null => {\n const endField = group.get(endDateField);\n const startDate = fromDateISOString(group.get(startDateField).value);\n const endDate = fromDateISOString(endField.value);\n if (isNotNil(startDate) && isNotNil(endDate) && Math.abs(startDate.diff(endDate, durationUnit)) < minDuration) {\n // Update end field\n const endFieldErrors: ValidationErrors = endField.errors || {};\n endFieldErrors['dateMinDuration'] = true;\n endField.setErrors(endFieldErrors);\n endField.markAsTouched({onlySelf: true});\n // Return the error (should be apply to the parent form)\n return {dateMinDuration: true};\n }\n // OK: remove the existing on the end field\n else {\n SharedValidators.clearError(endField, 'dateMinDuration');\n }\n return null;\n };\n }\n\n static requiredIf(fieldName: string, anotherFieldToCheck: string | AbstractControl): ValidatorFn {\n return (group: FormGroup): ValidationErrors | null => {\n const control = group.get(fieldName);\n const anotherControl = (anotherFieldToCheck instanceof AbstractControl) ? anotherFieldToCheck : group.get(anotherFieldToCheck);\n if (!anotherControl) throw new Error('Unable to find field to check!');\n if (isNilOrBlank(control.value) && isNotNilOrBlank(anotherControl.value)) {\n const error = {required: true};\n control.setErrors(error);\n control.markAsTouched({onlySelf: true});\n return error;\n }\n SharedValidators.clearError(control, 'required');\n return null;\n };\n }\n\n static requiredIfTrue(fieldName: string, anotherFieldToCheck: string | AbstractControl): ValidatorFn {\n return (group: FormGroup): ValidationErrors | null => {\n const control = group.get(fieldName);\n const anotherControl = (anotherFieldToCheck instanceof AbstractControl) ? anotherFieldToCheck : group.get(anotherFieldToCheck);\n if (!anotherControl) throw new Error('Unable to find field to check!');\n if (isNilOrBlank(control.value) && toBoolean(anotherControl.value, false)) {\n const error = {required: true};\n control.setErrors(error);\n control.markAsTouched({onlySelf: true});\n return error;\n }\n SharedValidators.clearError(control, 'required');\n return null;\n };\n }\n\n static requiredIfEmpty(fieldName: string, anotherFieldToCheck: string): ValidatorFn {\n return (group: FormGroup): ValidationErrors | null => {\n const control = group.get(fieldName);\n if (isNilOrBlank(control.value) && isNilOrBlank(group.get(anotherFieldToCheck).value)) {\n const error = {required: true};\n control.setErrors(error);\n control.markAsTouched({onlySelf: true});\n return error;\n }\n SharedValidators.clearError(control, 'required');\n return null;\n };\n }\n\n static propagateIfDirty(fieldName: string, fieldNameToPropagate: string, valueToPropagate: any): ValidatorFn {\n return (group: FormGroup): null => {\n const control = group.get(fieldName);\n const controlToPropagate = group.get(fieldNameToPropagate);\n if (control.dirty && controlToPropagate.value !== valueToPropagate) {\n controlToPropagate.setValue(valueToPropagate);\n }\n return null;\n };\n }\n\n /**\n * Same as compose, but keep only the first errors (instead of the union)\n * @param validators\n */\n first(validators: (ValidatorFn | null | undefined)[]): ValidationErrors | null {\n return (control) => validators\n .filter(isNotNil)\n .map(validator => validator(control))\n .find(isNotNil) || null;\n }\n}\n\n// @dynamic\nexport class SharedFormArrayValidators {\n\n /**\n * Validate uniqueness of an entity in a FormArray\n *\n * @param controlName the name of the control in FormArray\n */\n static uniqueEntity(controlName: string): ValidatorFn {\n return (array: FormArray): ValidationErrors | null => {\n const controls: AbstractControl[] = [];\n if (array.length) {\n // gather controls in array with valid entity\n for (const control of array.controls) {\n const fromGroup = control as FormGroup;\n if (fromGroup.controls[controlName]) {\n const value = fromGroup.controls[controlName].value;\n if (!!value && !!value.id)\n controls.push(fromGroup.controls[controlName]);\n }\n }\n // get occurrences of entity by id\n const occurrences = controls.reduce((acc, control) => {\n const id = control.value.id;\n acc[id] ? acc[id]++ : acc[id] = 1;\n return acc;\n }, {});\n // get controls with value occurrences > 1\n const error = {uniqueEntity: true};\n let returnError = false;\n controls.filter(control => occurrences[control.value.id] > 1)\n .forEach(control => {\n let errors: ValidationErrors = control.errors || {};\n errors = {...errors, ...error};\n control.setErrors(errors);\n control.markAsTouched({onlySelf: true});\n returnError = true;\n });\n if (returnError)\n return error;\n }\n controls.forEach(control => SharedValidators.clearError(control, 'uniqueEntity'));\n return null;\n };\n }\n\n static requiredArrayMinLength(minLength?: number): ValidatorFn {\n minLength = minLength || 1;\n return (array: FormArray): ValidationErrors | null => {\n if (!array || array.length < minLength) {\n return {required: true};\n }\n return null;\n };\n }\n\n /**\n * Validate the sum of control values in an FormArray not overflow the max value\n *\n * @param controlName the name of the control in FormArray\n * @param max the maximum value\n */\n static validSumMaxValue(controlName: string, max: number): ValidatorFn {\n return (array: FormArray): ValidationErrors | null => {\n const controls: AbstractControl[] = [];\n if (array.length) {\n for (const control of array.controls) {\n const fromGroup = control as FormGroup;\n if (fromGroup.controls[controlName] && isNotNilOrNaN(fromGroup.controls[controlName].value)) {\n controls.push(fromGroup.controls[controlName]);\n }\n }\n if (controls.reduce((sum, control) => sum + control.value, 0) > max) {\n const error = {sumMaxValue: true};\n controls.forEach(control => {\n let errors: ValidationErrors = control.errors || {};\n errors = {...errors, ...error};\n control.setErrors(errors);\n control.markAsTouched({onlySelf: true});\n });\n return error;\n }\n }\n controls.forEach(control => SharedValidators.clearError(control, 'sumMaxValue'));\n return null;\n };\n }\n\n}\n","export const DEFAULT_MAX_DECIMALS = 2;\n\nexport function formatDuration(value: number | null): string {\n if (value === undefined || value === null) return null;\n\n const hour = Math.floor(value);\n const minute = Math.round((value - hour) * 60);\n return [\n hour.toString().padStart(3, '0'),\n minute.toString().padStart(2, '0')\n ].join(':');\n}\n\n// 111:11 = 111.18 (with maxDecimals=2)\nexport function parseDuration(input: string, maxDecimals?: number, placeholderChar?: string): number | null {\n\n let duration = input || '';\n // Make to remove placeholder chars\n while (duration.indexOf(placeholderChar) !== -1) {\n duration = duration.replace(placeholderChar, '');\n }\n\n const durationParts = duration.split(':');\n const hour = parseInt(durationParts[0] || '0');\n const minute = parseInt(durationParts[1] || '0');\n\n const value = hour + (minute + 0.5) / 60;\n return roundFloat(value, maxDecimals);\n}\n\nfunction roundFloat(input: number, maxDecimals?: number): number {\n if (maxDecimals > 0) {\n const powDecimal = Math.pow(10, maxDecimals);\n return Math.trunc(input * powDecimal + 0.5) / powDecimal;\n }\n // no decimals: round to integer\n else if (maxDecimals === 0) {\n return Math.trunc(input + 0.5);\n }\n return input;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport {Platform} from '@ionic/angular';\nimport {FloatLabelType} from '@angular/material/form-field';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroupDirective,\n NG_VALUE_ACCESSOR,\n Validators\n} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {SharedValidators} from '../../validator/validators';\nimport {\n formatLatitude,\n formatLongitude, LAT_LONG_DEFAULT_MAX_DECIMALS,\n LatLongFormatFn,\n LatLongFormatOptions,\n LatLongPattern,\n parseLatitudeOrLongitude\n} from './latlong.utils';\nimport {DEFAULT_PLACEHOLDER_CHAR} from '../../constants';\nimport {filter} from 'rxjs/operators';\nimport {isNil, isNotNil, isNotNilOrBlank} from '../../functions';\nimport {getCaretPosition, moveInputCaretToSeparator, selectInputContent, selectInputRange} from '../../inputs';\nimport {merge, Subscription} from 'rxjs';\nimport {TextMaskConfig} from 'angular2-text-mask';\nimport {DEFAULT_MAX_DECIMALS} from '../duration/duration.utils';\n\nconst MASKS: {\n [key: string]: {\n [pattern: string]: Array<string|RegExp>;\n };\n} = {\n latitude: {\n DDMMSS: [' ', /\\d/, /\\d/, '°', ' ', /\\d/, /\\d/, '\\'', ' ', /\\d/, /\\d/, '.', /\\d/, /\\d/, '\"'],\n DDMM: [' ', /\\d/, /\\d/, '°', ' ', /\\d/, /\\d/, '.', /\\d/, /\\d/, /\\d/, '\\''],\n DD: [/[+-]/, ' ', /\\d/, /\\d/, '.', /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, '°']\n },\n longitude: {\n DDMMSS: [/\\d/, /\\d/, /\\d/, '°', ' ', /\\d/, /\\d/, '\\'', ' ', /\\d/, /\\d/, '.', /\\d/, /\\d/, '\"'],\n DDMM: [/\\d/, /\\d/, /\\d/, '°', ' ', /\\d/, /\\d/, '.', /\\d/, /\\d/, /\\d/, '\\''],\n DD: [/[+-]/, /\\d/, /\\d/, /\\d/, '.', /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, '°']\n }\n};\n\nconst noop = () => {\n};\n\n@Component({\n selector: 'mat-latlong-field',\n templateUrl: './material.latlong.html',\n styleUrls: ['./material.latlong.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => MatLatLongField),\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatLatLongField implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n private _subscription = new Subscription();\n protected disabling = false;\n protected writing = false;\n\n formatFn: LatLongFormatFn;\n formatFnOptions: LatLongFormatOptions;\n textMaskConfig: TextMaskConfig;\n textFormControl: FormControl;\n signFormControl: FormControl;\n mask: Array<string | RegExp> | ((raw: string) => Array<string | RegExp>) | false;\n value: number;\n inputPlaceholder: string;\n showSignControl: boolean;\n\n @Input() mobile: boolean;\n\n get disabled(): any {\n return this.readonly || this.formControl.disabled;\n }\n\n @Input() formControl: FormControl;\n\n @Input() formControlName: string;\n\n @Input() placeholder: string;\n\n @Input() type: 'latitude' | 'longitude';\n\n @Input('latLongPattern') pattern: LatLongPattern;\n\n @Input() defaultSign: '-' | '+';\n\n @Input() maxDecimals: number = LAT_LONG_DEFAULT_MAX_DECIMALS;\n\n @Input() placeholderChar: string = DEFAULT_PLACEHOLDER_CHAR;\n\n @Input() floatLabel: FloatLabelType = 'auto';\n\n @Input() readonly = false;\n\n @Input() required = false;\n\n @Input() tabindex: number;\n\n @Output()\n onBlur = new EventEmitter<FocusEvent>();\n\n @Output()\n onFocus = new EventEmitter<FocusEvent>();\n\n @ViewChild('inputElement') inputElement: ElementRef;\n\n @ViewChild('suffix', {static: false}) suffixDiv: ElementRef;\n\n @ViewChildren('injectMatSuffix') suffixInjections: QueryList<ElementRef>;\n\n constructor(\n private platform: Platform,\n private translate: TranslateService,\n private formBuilder: FormBuilder,\n private cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective\n ) {\n this.mobile = this.platform.is('mobile');\n }\n\n ngOnInit() {\n this.type = this.type || 'latitude';\n this.pattern = this.pattern || 'DDMM';\n this.mask = MASKS[this.type] && MASKS[this.type][this.pattern];\n if (!this.mask) {\n console.error('Invalid attribute value. Expected: type: \\'latitude|longitude\\' and latlongPattern: \\'DD|DDMM|DDMMSS\\'');\n this.type = 'latitude';\n this.pattern = 'DDMM';\n this.mask = MASKS[this.type][this.pattern];\n }\n if (this.maxDecimals) {\n if (this.maxDecimals < 0) {\n console.error('Invalid attribute \\'maxDecimals\\'. Must a positive value.');\n this.maxDecimals = DEFAULT_MAX_DECIMALS;\n }\n // Remove max decimals in the DDMMSS format\n else if (this.pattern === 'DD') {\n console.warn(`Invalid attribute 'maxDecimals' - Must be '0' when using the 'DDMMSS' pattern.`);\n this.maxDecimals = 7;\n }\n else if (this.pattern === 'DDMMSS') {\n console.warn(`Invalid attribute 'maxDecimals' - Must be '0' when using the 'DDMMSS' pattern.`);\n this.maxDecimals = 0;\n }\n else if (this.maxDecimals !== DEFAULT_MAX_DECIMALS) {\n console.warn(`Invalid attribute 'maxDecimals' - Expected value: ${DEFAULT_MAX_DECIMALS}. Other value not implemented.`);\n this.maxDecimals = DEFAULT_MAX_DECIMALS;\n }\n }\n\n this.showSignControl = this.pattern !== 'DD';\n\n this.formatFn = this.type === 'latitude' ? formatLatitude : formatLongitude;\n this.formatFnOptions = {pattern: this.pattern, maxDecimals: this.maxDecimals, hideSign: this.showSignControl};\n\n this.inputPlaceholder = 'COMMON.LAT_LONG.' + (this.type === 'longitude' && 'D' || '') + this.pattern + '_PLACEHOLDER';\n\n this.textFormControl = this.formBuilder.control(\n this.required ? [null, Validators.required] : [null]\n );\n this.textMaskConfig = {mask: this.mask, keepCharPositions: true, placeholderChar: this.placeholderChar};\n\n this.signFormControl = this.formBuilder.control(\n this.required ? [null, Validators.required] : [null]\n );\n\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-latlong-field>.');\n\n const existingValidators = this.formControl.validator;\n if (existingValidators) {\n this.formControl.setValidators([\n existingValidators,\n this.type === 'latitude' ? SharedValidators.latitude : SharedValidators.longitude\n ]);\n }\n else {\n this.formControl.setValidators(this.type === 'latitude' ? SharedValidators.latitude : SharedValidators.longitude);\n }\n\n this._subscription.add(\n merge(\n this.textFormControl.valueChanges,\n this.signFormControl.valueChanges\n )\n .subscribe((_) => this.onFormChange(this.textFormControl.value))\n );\n\n // Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl)\n this._subscription.add(\n this.formControl.statusChanges\n .pipe(\n filter((_) => !this.readonly && !this.writing && !this.disabling) // Skip\n )\n .subscribe((_) => this.markForCheck())\n );\n }\n\n ngAfterViewInit() {\n // Inject suffix elements, into the first injection point found\n if (this.suffixDiv) {\n this.suffixInjections.find(item => {\n item.nativeElement.append(this.suffixDiv.nativeElement);\n this.suffixDiv.nativeElement.classList.remove('cdk-visually-hidden');\n return true; // take only the first injection point\n });\n }\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n }\n\n writeValue(obj: any): void {\n if (this.writing) return;\n\n this.value = (typeof obj === 'string') ? parseFloat(obj.replace(/,/g, '.')) : obj;\n this.writing = true;\n const strValue = this.formatFn(\n this.value,\n {\n ...this.formatFnOptions,\n placeholderChar: this.placeholderChar\n });\n const sign = isNotNil(this.value) ? (this.value < 0 ? -1 : 1) :\n // Use default sign, if any\n (this.defaultSign ? (this.defaultSign === '-' ? -1 : 1) : null);\n\n // DEBUG\n // console.debug(\"strValue: \" + strValue)\n // console.debug(\"sign: \" + sign)\n\n this.textFormControl.patchValue(strValue, {emitEvent: false});\n this.signFormControl.patchValue(sign, {emitEvent: false});\n this.writing = false;\n this.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.disabling) return;\n\n this.disabling = true;\n if (isDisabled) {\n this.textFormControl.disable({onlySelf: true, emitEvent: false});\n this.signFormControl.disable({onlySelf: true, emitEvent: false});\n } else {\n this.textFormControl.enable({onlySelf: true, emitEvent: false});\n this.signFormControl.enable({onlySelf: true, emitEvent: false});\n }\n this.disabling = false;\n this.markForCheck();\n }\n\n private onFormChange(strValue): void {\n if (this.writing) return; // Skip if call by self\n this.writing = true;\n\n if (this.textFormControl.invalid || this.signFormControl.invalid) {\n this.formControl.markAsPending();\n this.formControl.setErrors({\n ...this.formControl.errors,\n ...this.textFormControl.errors,\n ...this.signFormControl.errors\n });\n this.writing = false;\n return;\n }\n\n const parsedValue = isNotNilOrBlank(strValue) ? parseLatitudeOrLongitude(strValue, this.pattern, 7 /*=precision of the converted double value */, this.placeholderChar) : null;\n\n // DEBUG\n //console.debug('parsedValue=', parsedValue);\n\n if (isNaN(parsedValue)) {\n this.formControl.markAsPending();\n this.formControl.setErrors(this.type === 'latitude' ? {latitude: true} : {longitude: true});\n this.writing = false;\n return;\n }\n const sign = (this.pattern === 'DD') ? 1 /*ignore sign*/ : (this.signFormControl.value || 1);\n this.value = isNotNil(parsedValue) ? sign * parsedValue : null;\n\n // Get the model value\n //console.debug(\"[mat-latlon] Setting value {\" + this.value + \"} parsed from {\" + strValue + \"}\");\n this.formControl.patchValue(this.value, {emitEvent: false});\n this.writing = false;\n this.markForCheck();\n\n this._onChangeCallback(this.value);\n }\n\n checkIfTouched(): boolean {\n if (this.formControl.touched || this.textFormControl.touched) {\n this.markForCheck();\n this._onTouchedCallback();\n return true;\n }\n return false;\n }\n\n _onFocus(event: FocusEvent) {\n\n // Apply the default sign, when pattern is DD and field is empty\n if (isNil(this.value)) {\n if (this.defaultSign) {\n // Compute the text value, using the default sign\n const defaultSign = this.defaultSign === '-' ? -1 : 1;\n\n if (this.pattern === 'DD') {\n let valueStr = this.formatFn(defaultSign, {...this.formatFnOptions, placeholderChar: this.placeholderChar});\n valueStr = valueStr && valueStr.replace('1', this.placeholderChar);\n\n // Wait end of focus animation (label should move to top)\n setTimeout(() => {\n // Set the value\n this.inputElement.nativeElement.value = valueStr;\n\n // Move cursor after the sign\n const caretIndex = (this.type === 'latitude') ? 2 : 1;\n selectInputRange(event.target, caretIndex);\n }, 250);\n }\n else {\n this.signFormControl.setValue(defaultSign);\n }\n }\n }\n\n // Select the content (if there is a value)\n else {\n selectInputContent(event);\n }\n\n this.onFocus.emit(event);\n return true;\n }\n\n _onBlur(event: FocusEvent) {\n const touched = this.checkIfTouched();\n if (touched && isNil(this.value)) {\n this.inputElement.nativeElement.value = '';\n }\n this.onBlur.emit(event);\n }\n\n moveCaretToSeparator(event: any, forward: boolean): boolean {\n // Move to the space separator\n return moveInputCaretToSeparator(event, ' ', forward);\n }\n\n onKeypress(event: KeyboardEvent) {\n // Number entered or one of the 4 direction up, down, left and right\n if ((event.which >= 48 && event.which <= 57) || (event.which >= 37 && event.which <= 40)) {\n //console.debug('input number entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode);\n // OK\n }\n // Decimal separator entered\n else if (event.key === '.' || event.key === ',') {\n // DEBUG\n // console.debug('input decimal separator entered :' + event.code);\n\n // Move caret after point\n moveInputCaretToSeparator(event, '.');\n\n // OK\n } else {\n // Command entered (delete, backspace or one of the 4 direction up, down, left and right)\n if ((event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode == 46 || event.which == 8 || event.keyCode == 9) {\n // DEBUG\n //console.debug('input command entered:' + event.which + ' ' + event.keyCode + ' ' + event.charCode);\n\n // OK\n }\n // Sign entered ('+' or '-')\n else if (event.keyCode === 43 || event.keyCode === 45) {\n // DEBUG\n // console.debug('input sign entered:' + event.which + ' ' + event.keyCode + ' ' + event.charCode);\n const caretPosition = getCaretPosition(event.target);\n if (this.pattern === 'DD' && caretPosition > 0) {\n const sign = event.key;\n // Wait key apply\n const value = this.inputElement.nativeElement.value;\n if (value && !value.startsWith(sign)) {\n const newValue = sign + (value.length > 1 ? value.substr(1) : '');\n\n // DEBUG\n // console.debug(\"sign entered. Updating input value to:\", newValue);\n\n this.inputElement.nativeElement.value = newValue;\n selectInputRange(this.inputElement.nativeElement, caretPosition);\n }\n event.preventDefault();\n }\n\n // OK\n }\n // Direction char (capitalized)\n else if (event.key === 'N' || event.key === 'S' || event.key === 'E' || event.key === 'W') {\n // DEBUG\n // console.debug('input direction entered:' + event.which + ' ' + event.keyCode + ' ' + event.charCode);\n\n // OK\n }\n // Direction char\n else if (event.key === 'n' || event.key === 's' || event.key === 'e' || event.key === 'w') {\n // DEBUG\n // console.debug('input direction entered:' + event.which + ' ' + event.keyCode + ' ' + event.charCode);\n\n // Capitalize (with a delay, to be sure the key has been applied to input text)\n setTimeout(() => {\n this.inputElement.nativeElement.value = this.inputElement.nativeElement.value.toUpperCase();\n }, 10);\n\n // OK\n }\n\n // Any other keyboard events\n else {\n // DEBUG\n //console.debug('input not number entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode + ' ' + event.code );\n\n // KO: cancel the event\n event.preventDefault();\n }\n }\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n}\n\n","import {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {SharedPipesModule} from '../../pipes/pipes.module';\nimport {MatLatLongField} from './material.latlong';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TextMaskModule} from 'angular2-text-mask';\nimport {MatSelectModule} from '@angular/material/select';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n ReactiveFormsModule,\n SharedPipesModule,\n MatCommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n TextMaskModule,\n TranslateModule.forChild(),\n MatSelectModule\n ],\n exports: [\n MatLatLongField\n ],\n declarations: [\n MatLatLongField\n ]\n})\nexport class SharedMatLatLongModule {\n}\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n Input, OnDestroy,\n OnInit,\n Optional, Provider,\n QueryList,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport {Platform} from '@ionic/angular';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroupDirective,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validators\n} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Moment} from 'moment';\nimport {DATE_ISO_PATTERN, DEFAULT_PLACEHOLDER_CHAR, KEYBOARD_HIDE_DELAY_MS} from '../../constants';\nimport {SharedValidators} from '../../validator/validators';\nimport {sleep, isNil, isNilOrBlank, toBoolean} from '../../functions';\nimport {Keyboard} from '@ionic-native/keyboard/ngx';\nimport {filter, first} from 'rxjs/operators';\nimport {InputElement, setTabIndex} from '../../inputs';\nimport {BehaviorSubject, Subscription} from 'rxjs';\nimport {FloatLabelType} from '@angular/material/form-field';\nimport {MatDatepicker, MatDatepickerInputEvent} from '@angular/material/datepicker';\nimport {DateAdapter} from '@angular/material/core';\nimport {isFocusableElement} from '../../focusable';\nimport {toDateISOString} from '../../dates';\n\nconst DEFAULT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatDate),\n multi: true\n};\n\nconst DAY_MASK = [/\\d/, /\\d/, '/', /\\d/, /\\d/, '/', /\\d/, /\\d/, /\\d/, /\\d/];\n\nconst noop = () => {};\n\n@Component({\n selector: 'mat-date-field',\n templateUrl: './material.date.html',\n styleUrls: ['./material.date.scss'],\n providers: [\n DEFAULT_VALUE_ACCESSOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatDate implements OnInit, OnDestroy, ControlValueAccessor, InputElement {\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n private _subscription = new Subscription();\n protected writing = true;\n protected disabling = false;\n protected _tabindex: number;\n protected keyboardHideDelay: number;\n\n mobile: boolean;\n dayControl: AbstractControl;\n displayPattern: string;\n dayPattern: string;\n _value: Moment;\n locale: string;\n dayMask = DAY_MASK;\n\n @Input() disabled = false;\n @Input() formControl: FormControl;\n @Input() formControlName: string;\n @Input() placeholder: string;\n @Input() floatLabel: FloatLabelType = 'auto';\n @Input() readonly = false;\n @Input() required: boolean;\n @Input() compact = false;\n @Input() placeholderChar: string = DEFAULT_PLACEHOLDER_CHAR;\n @Input() autofocus = false;\n\n @Input() set tabindex(value: number) {\n if (this._tabindex !== value) {\n this._tabindex = value;\n setTimeout(() => this.updateTabIndex());\n }\n }\n\n get tabindex(): number {\n return this._tabindex;\n }\n\n @Input() startDate: Date;\n\n @Input() clearable = false;\n\n @ViewChild('datePicker') datePicker: MatDatepicker<Moment>;\n\n @ViewChildren('matInput') matInputs: QueryList<ElementRef>;\n\n get value(): any {\n return toDateISOString(this._value);\n }\n\n constructor(\n platform: Platform,\n private dateAdapter: DateAdapter<Moment>,\n private translate: TranslateService,\n private formBuilder: FormBuilder,\n private cd: ChangeDetectorRef,\n @Optional() private keyboard: Keyboard,\n @Optional() private formGroupDir: FormGroupDirective,\n ) {\n // Workaround because ion-datetime has issue (do not returned a ISO date)\n this.mobile = platform.is('mobile');\n this.keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;\n\n this.locale = (translate.currentLang || translate.defaultLang).substr(0, 2);\n }\n\n ngOnInit() {\n\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-date-time-field>.');\n\n this.required = toBoolean(this.required, this.formControl.validator === Validators.required);\n\n // Redirect errors from main control, into day sub control\n const $error = new BehaviorSubject<ValidationErrors>(null);\n this.dayControl = this.formBuilder.control(null, () => $error.getValue());\n\n // Add custom 'validDate' validator\n this.formControl.setValidators(this.required ? [Validators.required, SharedValidators.validDate] : SharedValidators.validDate);\n\n // Get patterns to display date\n this.updatePattern(this.translate.instant('COMMON.DATE_PATTERN'));\n this._subscription.add(\n this.translate.get('COMMON.DATE_PATTERN')\n .subscribe((pattern) => this.updatePattern(pattern))\n );\n\n this._subscription.add(\n this.dayControl.valueChanges\n .subscribe((value) => this.onFormChange(value)));\n\n // Listen status changes outside the component (e.g. when setErrors() is calling on the formControl)\n this._subscription.add(\n this.formControl.statusChanges\n .pipe(filter(() => !this.readonly && !this.writing && !this.disabling)) // Skip\n .subscribe((status) => {\n if (status === 'INVALID') {\n $error.next(this.formControl.errors);\n }\n else if (status === 'VALID') {\n $error.next(null);\n }\n this.dayControl.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this.markForCheck();\n }));\n\n this.updateTabIndex();\n\n this.writing = false;\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n }\n\n writeValue(obj: any): void {\n if (this.writing) return;\n\n // console.debug('[mat-date] writeValue:', obj);\n\n if (isNilOrBlank(obj)) {\n this.writing = true;\n this.dayControl.patchValue(null, {emitEvent: false});\n this._value = undefined;\n if (this.formControl.value) {\n this.formControl.patchValue(null, {emitEvent: false});\n this._onChangeCallback(null);\n }\n this.writing = false;\n this.markForCheck();\n return;\n }\n\n this._value = this.dateAdapter.parse(obj, DATE_ISO_PATTERN);\n if (!this._value) { // invalid date\n return;\n }\n\n this.writing = true;\n\n // Set form value\n this.dayControl.patchValue(this.dateAdapter.format(this._value.clone().startOf('day'), this.dayPattern), {emitEvent: false});\n this.writing = false;\n this.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.disabling) return;\n\n this.disabling = true;\n this.disabled = isDisabled;\n if (isDisabled) {\n this.dayControl.disable({onlySelf: true, emitEvent: false});\n } else {\n this.dayControl.enable({onlySelf: true, emitEvent: false});\n }\n this.disabling = false;\n\n this.markForCheck();\n }\n\n onDatePickerChange(event: MatDatepickerInputEvent<Moment>): void {\n if (this.writing || !(event && event.value)) return; // Skip if call by self\n this.writing = true;\n\n let date = event.value;\n date = typeof date === 'string' && this.dateAdapter.parse(date, DATE_ISO_PATTERN) || date;\n let day;\n\n // avoid to have TZ offset\n date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);\n day = date && date.clone().startOf('day');\n\n // update day value\n this.dayControl.setValue(date && this.dateAdapter.format(day, this.dayPattern), {emitEvent: false});\n\n // Get the model value\n const dateStr = date && this.dateAdapter.format(date, DATE_ISO_PATTERN).replace('+00:00', 'Z');\n this.formControl.patchValue(dateStr, {emitEvent: false});\n this.writing = false;\n this.markForCheck();\n\n this._onChangeCallback(dateStr);\n }\n\n private updatePattern(pattern: string) {\n pattern = pattern !== 'COMMON.DATE_PATTERN' ? pattern : 'L';\n if (this.displayPattern !== pattern) {\n this.displayPattern = pattern;\n this.dayPattern = pattern;\n this.markForCheck();\n }\n }\n\n private onFormChange(dayValue): void {\n if (this.writing) return; // Skip if call by self\n this.writing = true;\n\n // Make to remove placeholder chars\n while (dayValue && dayValue.indexOf(this.placeholderChar) !== -1) {\n dayValue = dayValue.replace(this.placeholderChar, '');\n }\n\n let date: Moment;\n\n // Parse day string\n date = dayValue && this.dateAdapter.parse(dayValue, this.dayPattern) || null;\n\n // Reset time\n date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);\n\n // update date picker\n this._value = date && this.dateAdapter.parse(date.clone(), DATE_ISO_PATTERN);\n\n // Get the model value\n const dateStr = date && date.isValid() && this.dateAdapter.format(date, DATE_ISO_PATTERN).replace('+00:00', 'Z') || date;\n //console.debug(\"[mat-date-time] Setting date: \", dateStr);\n this.formControl.patchValue(dateStr, {emitEvent: false});\n //this.formControl.updateValueAndValidity();\n this.writing = false;\n this.markForCheck();\n\n this._onChangeCallback(dateStr);\n }\n\n\n\n checkIfTouched() {\n if (this.dayControl.touched) {\n this.markForCheck();\n this._onTouchedCallback();\n }\n }\n\n async openDatePickerIfMobile(event: UIEvent, datePicker?: MatDatepicker<any>) {\n if (!this.mobile || event.defaultPrevented) return;\n\n this.preventEvent(event);\n\n // Make sure the keyboard is closed\n await this.waitKeyboardHide(false);\n\n // Open the picker\n this.openDatePicker(null, datePicker);\n }\n\n public openDatePicker(event?: UIEvent, datePicker?: MatDatepicker<any>) {\n datePicker = datePicker || this.datePicker;\n if (datePicker) {\n\n if (event) this.preventEvent(event);\n\n if (!datePicker.opened) {\n datePicker.open();\n }\n }\n }\n\n preventEvent(event: UIEvent) {\n if (!event) return;\n event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n event.returnValue = false;\n }\n\n focus() {\n if (!this.matInputs.length) return;\n\n setTimeout(() => {\n const elementRef = this.matInputs[0]; // get the first element\n if (isFocusableElement(elementRef)) {\n elementRef.focus();\n }\n });\n }\n\n /* -- protected method -- */\n\n protected async waitKeyboardHide(waitKeyboardDelay: boolean) {\n\n if (!this.keyboard || !this.keyboard.isVisible) return; // ok, already hidden (or not accessible)\n\n // Force keyboard to be hide\n this.keyboard.hide();\n\n // Wait hide occur\n await this.keyboard.onKeyboardHide().pipe(first()).toPromise();\n\n // Wait an additional delay if need (depending on the OS)\n if (this.keyboardHideDelay > 0 && waitKeyboardDelay) {\n await sleep(this.keyboardHideDelay);\n }\n }\n\n protected updateTabIndex() {\n if (isNil(this._tabindex) || this._tabindex === -1) return; // skip\n\n // Focus to first input\n setTimeout(() => {\n this.matInputs.forEach((elementRef, index) => {\n setTabIndex(elementRef, this._tabindex + index);\n });\n this.markForCheck();\n });\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n}\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Optional, Provider,\n QueryList,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport {Platform} from '@ionic/angular';\nimport {DateAdapter} from '@angular/material/core';\nimport {FloatLabelType} from '@angular/material/form-field';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroupDirective,\n NG_VALUE_ACCESSOR,\n Validators\n} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {isMoment, Moment} from 'moment';\nimport {DEFAULT_PLACEHOLDER_CHAR, KEYBOARD_HIDE_DELAY_MS} from '../../constants';\nimport {SharedValidators} from '../../validator/validators';\nimport {Keyboard} from '@ionic-native/keyboard/ngx';\nimport {filter, first} from 'rxjs/operators';\nimport {InputElement, setTabIndex} from '../../inputs';\nimport {isFocusableElement} from '../../focusable';\nimport {merge, Subscription} from 'rxjs';\nimport {MatDatepicker, MatDatepickerInputEvent} from '@angular/material/datepicker';\nimport {isNil, isNilOrBlank, sleep, toBoolean} from '../../functions';\nimport {fromDateISOString, toDateISOString} from '../../dates';\n\nconst DEFAULT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatDateTime),\n multi: true\n};\n\nconst DAY_MASK = [/\\d/, /\\d/, '/', /\\d/, /\\d/, '/', /\\d/, /\\d/, /\\d/, /\\d/];\n\nconst HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;\nconst HOUR_MASK = [/[012]/, /\\d/, ':', /[012345]/, /\\d/];\n\nconst noop = () => {\n};\n\ndeclare interface NgxTimePicker {\n selectedHour: { time: number };\n selectedMinute: { time: number };\n open();\n close();\n}\n\n@Component({\n selector: 'mat-date-time-field',\n templateUrl: './material.datetime.html',\n styleUrls: ['./material.datetime.scss'],\n providers: [\n DEFAULT_VALUE_ACCESSOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatDateTime implements OnInit, OnDestroy, ControlValueAccessor, InputElement {\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n private _subscription = new Subscription();\n protected writing = true;\n protected disabling = false;\n protected _tabindex: number;\n protected _onDestroy = new EventEmitter<any>();\n protected waitHideKeyboardDelay: number;\n\n dateFormControl: FormControl;\n timeFormControl: FormControl;\n displayPattern: string;\n dayPattern: string;\n locale: string;\n readonly dayMask = DAY_MASK;\n readonly hourMask = HOUR_MASK;\n\n @Input() mobile: boolean;\n\n @Input() formControl: FormControl;\n\n @Input() formControlName: string;\n\n @Input() placeholder: string;\n\n @Input() floatLabel: FloatLabelType = 'auto';\n\n @Input() readonly = false;\n\n @Input() required: boolean;\n\n @Input() compact = false;\n\n @Input() placeholderChar: string = DEFAULT_PLACEHOLDER_CHAR;\n\n @Input() autofocus = false;\n\n @Input() set tabindex(value: number) {\n if (this._tabindex !== value) {\n this._tabindex = value;\n setTimeout(() => this.updateTabIndex());\n }\n }\n\n get tabindex(): number {\n return this._tabindex;\n }\n\n get value(): any {\n return this.formControl.value;\n }\n\n @Input() startDate: Date;\n\n @Input() clearable = false;\n\n @ViewChild('datePicker') datePicker: MatDatepicker<Moment>;\n @ViewChild('timePicker') timePicker: NgxTimePicker;\n\n @ViewChildren('matInput') matInputs: QueryList<ElementRef>;\n\n constructor(\n private platform: Platform,\n private dateAdapter: DateAdapter<Moment>,\n private translate: TranslateService,\n private formBuilder: FormBuilder,\n private keyboard: Keyboard,\n private cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective,\n ) {\n this.locale = (translate.currentLang || translate.defaultLang).substr(0, 2);\n }\n\n ngOnInit() {\n\n this.mobile = isNil(this.mobile) ? this.platform.is('mobile') : this.mobile;\n this.waitHideKeyboardDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;\n\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-date-time-field>.');\n\n this.required = toBoolean(this.required, this.formControl.validator === Validators.required);\n\n // Add 'validDate' validator (when existing validator are null or required, to be sure to keep it)\n if (!this.formControl.validator || this.formControl.validator === Validators.required) {\n this.formControl.setValidators(this.required ? [Validators.required, SharedValidators.validDate] : SharedValidators.validDate);\n }\n else {\n this.formControl.setValidators(this.required ? [this.formControl.validator, Validators.required, SharedValidators.validDate] :\n [this.formControl.validator, SharedValidators.validDate]);\n }\n\n // Create the date control\n this.dateFormControl = this.formBuilder.control(null,\n this.required ? Validators.required : null\n );\n\n // Create the time control\n const timeValidator = this.required ?\n (this.mobile ? Validators.required : Validators.compose([Validators.required, Validators.pattern(HOUR_REGEXP)])) :\n (this.mobile ? null : Validators.pattern(HOUR_REGEXP));\n this.timeFormControl = this.formBuilder.control(null, timeValidator);\n\n // Get patterns to display date and date+time\n this._subscription.add(\n this.translate.get(['COMMON.DATE_PATTERN', 'COMMON.DATE_TIME_PATTERN'])\n .subscribe((patterns) => this.updatePattern(patterns))\n );\n\n this._subscription.add(\n merge(\n this.dateFormControl.valueChanges,\n this.timeFormControl.valueChanges\n )\n .subscribe((event) => this.onFormChange(event))\n );\n\n // Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl)\n this._subscription.add(\n this.formControl.statusChanges\n .pipe(\n filter((_) => !this.readonly && !this.writing && !this.disabling) // Skip\n )\n .subscribe(() => this.markForCheck())\n );\n\n this.updateTabIndex();\n\n this.writing = false;\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n this._onDestroy.emit();\n }\n\n writeValue(valueStr: any): void {\n if (this.writing) return; // Skip\n this.writing = true;\n\n // DEBUG\n // console.debug(\"[mat-date-time] writeValue() with:\", valueStr);\n\n const value = fromDateISOString(valueStr);\n\n if (!value || !value.isValid()) {\n this.dateFormControl.patchValue(null, {emitEvent: false});\n this.timeFormControl.patchValue(null, {emitEvent: false});\n }\n else {\n // Parse day\n const day = value.clone().startOf('day');\n const dayStr = this.dateAdapter.format(day, this.dayPattern);\n\n // Parse time\n // - Format hh\n let hour: number | string = value.hour();\n hour = hour < 10 ? ('0' + hour) : hour;\n // - Format mm\n let minutes: number | string = value.minutes();\n minutes = minutes < 10 ? ('0' + minutes) : minutes;\n const timeStr = `${hour}:${minutes}`;\n\n // Update controls\n this.dateFormControl.patchValue(dayStr, {emitEvent: false});\n this.timeFormControl.patchValue(timeStr, {emitEvent: false});\n }\n\n this.writing = false;\n this.markForCheck();\n }\n\n private onFormChange(event?: any) {\n if (this.writing) return; // Skip if call by self\n this.writing = true;\n\n let dayStr = this.dateFormControl.value;\n const time = this.timeFormControl.value;\n\n // DEBUG\n //console.debug(`[mat-date-time] onFormChange() from event: ${event} - controls values: `, [dayStr, time]);\n\n const incompleteValue = isNilOrBlank(time) !== isNilOrBlank(dayStr);\n if (incompleteValue || this.dateFormControl.invalid || this.timeFormControl.invalid) {\n this.formControl.markAsPending({onlySelf: true});\n this.formControl.setErrors({\n validDate: incompleteValue,\n ...this.formControl.errors,\n ...this.dateFormControl.errors,\n ...this.timeFormControl.errors\n });\n this.formControl.markAsDirty();\n // Reset the value\n //this.emitChange(null);\n this.writing = false;\n return;\n }\n\n\n // Make to remove placeholder chars\n while (dayStr && dayStr.indexOf(this.placeholderChar) !== -1) {\n dayStr = dayStr.replace(this.placeholderChar, '');\n }\n\n // Parse day\n const day: Moment = dayStr && this.dateAdapter.parse(dayStr, this.dayPattern) || null;\n\n // Parse time\n const hourParts = (time || '').split(':');\n const hour = parseInt(hourParts[0] || 0);\n const minutes = parseInt(hourParts[1] || 0);\n const dateTime = day && day\n .locale(this.locale) // set as time as locale time\n .hour(hour).minute(minutes)// Set local hour\n .seconds(0).millisecond(0) // Reset seconds/millisecond\n .utc(); // Convert to UTC (avoid TZ offset in final string)\n\n // Set model value\n this.emitChange(dateTime);\n this.writing = false;\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.disabling) return; // Skip\n\n this.disabling = true;\n if (isDisabled) {\n this.dateFormControl.disable({emitEvent: false});\n this.timeFormControl.disable({emitEvent: false});\n } else {\n this.dateFormControl.enable({emitEvent: false});\n this.timeFormControl.enable({emitEvent: false});\n }\n this.disabling = false;\n\n this.markForCheck();\n }\n\n private updatePattern(patterns: {[key: string]: string}) {\n this.displayPattern = (patterns['COMMON.DATE_TIME_PATTERN'] !== 'COMMON.DATE_TIME_PATTERN' ? patterns['COMMON.DATE_TIME_PATTERN'] : 'L LT');\n this.dayPattern = (patterns['COMMON.DATE_PATTERN'] !== 'COMMON.DATE_PATTERN' ? patterns['COMMON.DATE_PATTERN'] : 'L');\n }\n\n onDatePickerChange(event: MatDatepickerInputEvent<Moment>): void {\n // Make sure event is valid\n if (!event || (event.value !== null && !isMoment(event.value))) {\n console.warn('Invalid MatDatepicker event. Skipping', event);\n return; // Skip\n }\n\n // Convert to usable date, then convert to day pattern (e.g DD/MM/YYYY)\n const day = event.value && event.value\n .locale(this.locale) // set as time as locale time\n .hour(0).minute(0).seconds(0).millisecond(0) // Reset hour\n .utc(true);\n const dayStr = day && this.dateAdapter.format(day, this.dayPattern) || null;\n\n // Update the day control\n if (this.dateFormControl.value !== dayStr) {\n\n // DEBUG\n // console.debug(\"[mat-date-time] onDatePickerChange() new value:\", dayStr);\n\n this.dateFormControl.setValue(dayStr, {\n emitEvent: true // Will call onFormChange\n });\n }\n }\n\n\n onTimePickerChange(timeStr: string) {\n // Update the time control, if need\n if (this.timeFormControl.value !== timeStr) {\n\n // DEBUG\n // console.debug(\"[mat-date-time] onTimePickerChange() new value:\", timeStr);\n\n this.timeFormControl.setValue(timeStr, {\n emitEvent: true // Will call onFormChange\n });\n }\n\n }\n\n async openDatePickerIfMobile(event: UIEvent, datePicker?: MatDatepicker<any>) {\n if (!this.mobile || event.defaultPrevented) return;\n\n this.preventEvent(event);\n\n // Make sure the keyboard is closed\n await this.hideKeyboard(false);\n\n // Open the picker\n this.openDatePicker(null, datePicker);\n }\n\n public openDatePicker(event?: UIEvent, datePicker?: MatDatepicker<any>) {\n datePicker = datePicker || this.datePicker;\n if (datePicker) {\n\n if (event) this.preventEvent(event);\n\n if (!datePicker.opened) {\n datePicker.open();\n }\n }\n }\n\n async openTimePickerIfMobile(event: UIEvent) {\n if (!this.mobile || event.defaultPrevented) return;\n\n this.preventEvent(event);\n\n // Make sure the keyboard is closed\n await this.hideKeyboard(true);\n\n // Open the picker\n this.openTimePicker(null);\n }\n\n openTimePicker(event: UIEvent) {\n if (!this.timePicker) return; // Skip\n\n this.preventEvent(event);\n\n this.timePicker.open();\n }\n\n preventEvent(event: UIEvent) {\n if (!event) return;\n event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n event.returnValue = false;\n }\n\n checkIfTouched() {\n if (this.dateFormControl.touched || this.timeFormControl.touched) {\n this._onTouchedCallback();\n this.markForCheck();\n }\n }\n\n focus() {\n if (!this.matInputs.length) return;\n\n setTimeout(() => {\n const elementRef = this.matInputs[0]; // get the first element\n if (isFocusableElement(elementRef)) {\n elementRef.focus();\n }\n });\n }\n\n clear() {\n this.formControl.setValue(null);\n this.markAsTouched();\n this.markAsDirty();\n }\n\n /* -- protected method -- */\n\n protected emitChange(value: Moment) {\n\n // Get the model value\n const dateStr = toDateISOString(value) || null;\n\n\n if (this.formControl.value !== dateStr) {\n\n // DEBUG\n //console.debug('[matèdate-time] Emit new value: ' + dateStr);\n\n // Changes comes from inside function: use the callback\n this._onChangeCallback(dateStr);\n\n // Check if need to update controls\n this.checkIfTouched();\n }\n }\n\n protected async hideKeyboard(waitIsHidden: boolean) {\n\n if (!this.keyboard.isVisible) return; // ok, already hidden\n\n // Force keyboard to be hide\n this.keyboard.hide();\n\n // Wait hide occur\n await this.keyboard.onKeyboardHide().pipe(first()).toPromise();\n\n // Wait an additional delay if need (depending on the OS)\n if (this.waitHideKeyboardDelay > 0 && waitIsHidden) {\n await sleep(this.waitHideKeyboardDelay);\n }\n }\n\n protected updateTabIndex() {\n if (isNil(this._tabindex) || this._tabindex === -1) return; // skip\n\n // Focus to first input\n setTimeout(() => {\n this.matInputs.forEach((elementRef, index) => {\n setTabIndex(elementRef, this._tabindex + index);\n });\n this.markForCheck();\n });\n }\n\n protected markAsTouched() {\n this.dateFormControl.markAsTouched();\n this.timeFormControl.markAsTouched();\n this._onTouchedCallback();\n this.markForCheck();\n }\n\n protected markAsDirty(opts?: any) {\n this.formControl.markAsDirty(opts);\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n}\n\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, OnInit, Optional, Provider, QueryList, ViewChild, ViewChildren} from '@angular/core';\nimport {Platform} from '@ionic/angular';\nimport {AbstractControl, ControlValueAccessor, FormBuilder, FormControl, FormGroupDirective, NG_VALUE_ACCESSOR, ValidationErrors, Validators} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Moment} from 'moment/moment';\nimport {DATE_ISO_PATTERN, DEFAULT_PLACEHOLDER_CHAR, KEYBOARD_HIDE_DELAY_MS} from '../../constants';\nimport {SharedValidators} from '../../validator/validators';\nimport {isNil, isNilOrBlank, sleep, toBoolean} from '../../functions';\nimport {toDateISOString} from '../../dates';\nimport {Keyboard} from '@ionic-native/keyboard/ngx';\nimport {first} from 'rxjs/operators';\nimport {InputElement, setTabIndex} from '../../inputs';\nimport {BehaviorSubject} from 'rxjs';\nimport {FloatLabelType} from '@angular/material/form-field';\nimport {MatDatepicker} from '@angular/material/datepicker';\nimport {DateAdapter} from '@angular/material/core';\nimport {isFocusableElement} from '../../focusable';\n\nconst DEFAULT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatDateShort),\n multi: true\n};\n\nconst DAY_MASK = [/\\d/, /\\d/, /\\d/, /\\d/];\n\nconst noop = () => {\n};\n\n@Component({\n selector: 'mat-date-short-field',\n templateUrl: './material.dateshort.html',\n styleUrls: ['./material.dateshort.scss'],\n providers: [\n DEFAULT_VALUE_ACCESSOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatDateShort implements OnInit, ControlValueAccessor, InputElement {\n\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n protected writing = true;\n protected disabling = false;\n protected _tabindex: number;\n protected keyboardHideDelay: number;\n\n mobile: boolean;\n dayControl: AbstractControl;\n displayPattern: string;\n dayPattern: string;\n _value: Moment;\n locale: string;\n dayMask = DAY_MASK;\n\n @Input() disabled = false;\n\n @Input() formControl: FormControl;\n\n @Input() formControlName: string;\n\n @Input() placeholder: string;\n\n @Input() floatLabel: FloatLabelType = 'auto';\n\n @Input() readonly = false;\n\n @Input() required: boolean;\n\n @Input() compact = false;\n\n @Input() placeholderChar: string = DEFAULT_PLACEHOLDER_CHAR;\n\n @Input() set tabindex(value: number) {\n if (this._tabindex !== value) {\n this._tabindex = value;\n setTimeout(() => this.updateTabIndex());\n }\n }\n\n get tabindex(): number {\n return this._tabindex;\n }\n\n @Input() startDate: Date;\n\n @Input() clearable = false;\n\n @ViewChild('datePicker1') datePicker1: MatDatepicker<Moment>;\n @ViewChild('datePicker2') datePicker2: MatDatepicker<Moment>;\n\n @ViewChildren('matInput') matInputs: QueryList<ElementRef>;\n\n get value(): any {\n return toDateISOString(this._value);\n }\n\n constructor(\n platform: Platform,\n private dateAdapter: DateAdapter<Moment>,\n private translate: TranslateService,\n private formBuilder: FormBuilder,\n private cd: ChangeDetectorRef,\n @Optional() private keyboard: Keyboard,\n @Optional() private formGroupDir: FormGroupDirective,\n ) {\n // Workaround because ion-datetime has issue (do not returned a ISO date)\n this.mobile = platform.is('mobile');\n this.keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;\n\n this.locale = (translate.currentLang || translate.defaultLang).substr(0, 2);\n }\n\n ngOnInit() {\n\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-date-time-field>.');\n\n // Redirect errors from main control, into day sub control\n const $error = new BehaviorSubject<ValidationErrors>(null);\n this.required = toBoolean(this.required, this.formControl.validator === Validators.required);\n this.dayControl = this.formBuilder.control(null, () => $error.getValue());\n\n // Add custom 'validDate' validator\n this.formControl.setValidators(this.required ? Validators.compose([Validators.required, SharedValidators.validDate]) : SharedValidators.validDate);\n\n // Get patterns to display date\n const patterns = this.translate.instant(['COMMON.DATE_YEAR_PATTERN']);\n this.updatePattern(patterns);\n\n this.dayControl.valueChanges\n .subscribe((value) => this.onFormChange(value));\n\n // Listen status changes outside the component (e.g. when setErrors() is calling on the formControl)\n this.formControl.statusChanges\n .subscribe((status) => {\n if (this.readonly || this.writing || this.disabling) return; // Skip\n if (status === 'INVALID') {\n $error.next(this.formControl.errors);\n }\n else if (status === 'VALID') {\n $error.next(null);\n }\n this.dayControl.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this.markForCheck();\n });\n\n this.updateTabIndex();\n\n this.writing = false;\n }\n\n writeValue(obj: any): void {\n if (this.writing) return;\n\n if (isNilOrBlank(obj)) {\n this.writing = true;\n this.dayControl.patchValue(null, {emitEvent: false});\n this._value = undefined;\n if (this.formControl.value) {\n this.formControl.patchValue(null, {emitEvent: false});\n this._onChangeCallback(null);\n }\n this.writing = false;\n this.markForCheck();\n return;\n }\n\n this._value = this.dateAdapter.parse(obj, DATE_ISO_PATTERN);\n if (!this._value) { // invalid date\n return;\n }\n\n this.writing = true;\n\n //console.log(\"call writeValue()\", this.date, this.formControl);\n // Set form value\n this.dayControl.patchValue(this._value.clone().startOf('day').format(this.dayPattern), {emitEvent: false});\n this.writing = false;\n this.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.disabling) return;\n\n this.disabling = true;\n this.disabled = isDisabled;\n if (isDisabled) {\n this.dayControl.disable({onlySelf: true, emitEvent: false});\n } else {\n this.dayControl.enable({onlySelf: true, emitEvent: false});\n }\n this.disabling = false;\n\n this.markForCheck();\n }\n\n onDatePickerChange(event: any): void {\n //console.debug(\"onDatePickerChange called !!\")\n if (this.writing || !(event && event.value)) return; // Skip if call by self\n this.writing = true;\n\n let date = event.value;\n date = typeof date === 'string' && this.dateAdapter.parse(date, DATE_ISO_PATTERN) || date;\n let day;\n\n // avoid to have TZ offset\n date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);\n day = date && date.clone().startOf('day');\n\n // update day value\n this.dayControl.setValue(day && day.format(this.dayPattern), {emitEvent: false});\n\n // Get the model value\n const dateStr = date && date.format(DATE_ISO_PATTERN).replace('+00:00', 'Z');\n this.formControl.patchValue(dateStr, {emitEvent: false});\n this.writing = false;\n this.markForCheck();\n\n this._onChangeCallback(dateStr);\n }\n\n private updatePattern(patterns: string[]) {\n this.displayPattern =\n (this.displayPattern = patterns['COMMON.DATE_YEAR_PATTERN'] !== 'COMMON.DATE_YEAR_PATTERN' ? patterns['COMMON.DATE_YEAR_PATTERN'] : 'L');\n this.dayPattern = (patterns['COMMON.DATE_YEAR_PATTERN'] !== 'COMMON.DATE_YEAR_PATTERN' ? patterns['COMMON.DATE_YEAR_PATTERN'] : 'L');\n }\n\n private onFormChange(dayValue): void {\n if (this.writing) return; // Skip if call by self\n this.writing = true;\n\n if (this.dayControl.invalid) {\n this.formControl.markAsPending();\n this.formControl.setErrors(Object.assign({}, this.dayControl.errors));\n this.writing = false;\n return;\n }\n\n // Make to remove placeholder chars\n while (dayValue && dayValue.indexOf(this.placeholderChar) !== -1) {\n dayValue = dayValue.replace(this.placeholderChar, '');\n }\n let date: Moment;\n\n // Parse day string\n date = dayValue && this.dateAdapter.parse(dayValue, this.dayPattern) || null;\n\n // Reset time\n date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);\n\n // update date picker\n this._value = date && this.dateAdapter.parse(date.clone(), DATE_ISO_PATTERN);\n\n // Get the model value\n const dateStr = date && date.isValid() && date.format(DATE_ISO_PATTERN).replace('+00:00', 'Z') || date;\n //console.debug(\"[mat-date-time] Setting date: \", dateStr);\n this.formControl.patchValue(dateStr, {emitEvent: false});\n //this.formControl.updateValueAndValidity();\n this.writing = false;\n this.markForCheck();\n\n this._onChangeCallback(dateStr);\n }\n\n\n\n public checkIfTouched() {\n if (this.dayControl.touched) {\n this.markForCheck();\n this._onTouchedCallback();\n // this.writeValue(this.dayControl.value);\n this.onDatePickerChange(this.dayControl);\n }\n }\n\n async openDatePickerIfMobile(event: UIEvent, datePicker?: MatDatepicker<any>) {\n if (!this.mobile || event.defaultPrevented) return;\n\n this.preventEvent(event);\n\n // Make sure the keyboard is closed\n await this.waitKeyboardHide(false);\n\n // Open the picker\n this.openDatePicker(null, datePicker);\n }\n\n public openDatePicker(event?: UIEvent, datePicker?: MatDatepicker<any>) {\n\n datePicker = this.datePicker1 || this.datePicker2;\n if (datePicker) {\n\n if (event) this.preventEvent(event);\n\n if (!datePicker.opened) {\n\n // datePicker.startView = \"multi-year\";\n datePicker.open();\n }\n }\n }\n\n // select only year\n closeDatePicker(eventData: any, matDatepicker?: any) {\n this.formControl.setValue(eventData);\n matDatepicker.close();\n }\n\n\n preventEvent(event: UIEvent) {\n if (!event) return;\n event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n event.returnValue = false;\n }\n\n focus() {\n if (!this.matInputs.length) return;\n\n setTimeout(() => {\n const elementRef = this.matInputs[0]; // get the first element\n if (isFocusableElement(elementRef)) {\n elementRef.focus();\n }\n });\n }\n\n /* -- protected method -- */\n\n protected async waitKeyboardHide(waitKeyboardDelay: boolean) {\n\n if (!this.keyboard || !this.keyboard.isVisible) return; // ok, already hidden (or not accessible)\n\n // Force keyboard to be hide\n this.keyboard.hide();\n\n // Wait hide occur\n await this.keyboard.onKeyboardHide().pipe(first()).toPromise();\n\n // Wait an additional delay if need (depending on the OS)\n if (this.keyboardHideDelay > 0 && waitKeyboardDelay) {\n await sleep(this.keyboardHideDelay);\n }\n }\n\n protected updateTabIndex() {\n if (isNil(this._tabindex) || this._tabindex === -1) return; // skip\n\n // Focus to first input\n setTimeout(() => {\n this.matInputs.forEach((elementRef, index) => {\n setTabIndex(elementRef, this._tabindex + index);\n });\n this.markForCheck();\n });\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n}\n","import {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatIconModule} from '@angular/material/icon';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {SharedPipesModule} from '../../pipes/pipes.module';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatDate} from './material.date';\nimport {MatDateTime} from './material.datetime';\nimport {TextMaskModule} from 'angular2-text-mask';\nimport {NgxMaterialTimepickerModule} from 'ngx-material-timepicker';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDateShort} from './material.dateshort';\nimport {SharedDirectivesModule} from '../../directives/directives.module';\nimport {MatMomentDateModule} from '@angular/material-moment-adapter';\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n ReactiveFormsModule,\n SharedPipesModule,\n MatCommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatDatepickerModule,\n MatMomentDateModule,\n TextMaskModule,\n NgxMaterialTimepickerModule,\n TranslateModule.forChild(),\n SharedDirectivesModule\n ],\n exports: [\n MatIconModule,\n MatDate,\n MatDateTime,\n MatDateShort\n ],\n declarations: [\n MatDate,\n MatDateTime,\n MatDateShort\n ]\n})\nexport class SharedMatDateTimeModule {\n}\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Optional, Provider,\n QueryList,\n ViewChildren\n} from '@angular/core';\nimport {Platform} from '@ionic/angular';\nimport {DateAdapter} from '@angular/material/core';\nimport {FloatLabelType} from '@angular/material/form-field';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroupDirective,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validators\n} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Moment} from 'moment';\nimport {DEFAULT_PLACEHOLDER_CHAR} from '../../constants';\nimport {isNil, toBoolean} from '../../functions';\nimport {InputElement, moveInputCaretToSeparator, setTabIndex} from '../../inputs';\nimport {isFocusableElement} from '../../focusable';\nimport {DEFAULT_MAX_DECIMALS, formatDuration, parseDuration} from './duration.utils';\nimport {BehaviorSubject, Subscription} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\nconst DEFAULT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatDuration),\n multi: true\n};\n\nconst HOUR_TIME_PATTERN = /[0-9]\\d\\d:[0-5]\\d/;\nconst HOUR_MASK = [/\\d/, /\\d/, /\\d/, ':', /[0-5]/, /\\d/];\n\nconst noop = () => {\n};\n\n@Component({\n selector: 'mat-duration-field',\n templateUrl: './material.duration.html',\n styleUrls: ['./material.duration.scss'],\n providers: [\n DEFAULT_VALUE_ACCESSOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatDuration implements OnInit, OnDestroy, ControlValueAccessor, InputElement {\n private _subscription = new Subscription();\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n protected writing = true;\n protected disabling = false;\n protected _tabindex: number;\n\n textControl: FormControl;\n _value: number;\n hourMask = HOUR_MASK;\n\n @Input() disabled = false;\n\n @Input() formControl: FormControl;\n\n @Input() formControlName: string;\n\n @Input() placeholder: string;\n\n @Input() floatLabel: FloatLabelType = 'auto';\n\n @Input() readonly = false;\n\n @Input() required: boolean;\n\n @Input() compact = false;\n\n @Input() maxDecimals: number = DEFAULT_MAX_DECIMALS;\n\n @Input() placeholderChar: string = DEFAULT_PLACEHOLDER_CHAR;\n\n @Input() set tabindex(value: number) {\n if (this._tabindex !== value) {\n this._tabindex = value;\n setTimeout(() => this.updateTabIndex());\n }\n }\n\n get tabindex(): number {\n return this._tabindex;\n }\n\n @Input() clearable = false;\n\n @ViewChildren('matInput') matInputs: QueryList<ElementRef>;\n\n get value(): any {\n return this._value;\n }\n\n constructor(\n platform: Platform,\n private dateAdapter: DateAdapter<Moment>,\n private translate: TranslateService,\n private formBuilder: FormBuilder,\n private cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective,\n ) {\n }\n\n ngOnInit() {\n\n if (this.maxDecimals) {\n if (this.maxDecimals < 0) {\n console.error('Invalid attribute \\'maxDecimals\\'. Must a positive value.');\n this.maxDecimals = DEFAULT_MAX_DECIMALS;\n }\n else if (this.maxDecimals < DEFAULT_MAX_DECIMALS) {\n console.warn(`Invalid attribute 'maxDecimals' - Value should be more than ${DEFAULT_MAX_DECIMALS}, otherwise the round trip conversion will lose minutes.`);\n this.maxDecimals = DEFAULT_MAX_DECIMALS;\n }\n }\n\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-date-time-field>.');\n\n this.required = toBoolean(this.required, this.formControl.validator === Validators.required);\n\n // Redirect errors from main control, into day sub control\n const $error = new BehaviorSubject<ValidationErrors>(null);\n this.textControl = this.formBuilder.control(null, null);\n this.textControl.setValidators(this.required ? [Validators.required, () => $error.getValue(), Validators.pattern(HOUR_TIME_PATTERN)] :\n [() => $error.getValue(), Validators.pattern(HOUR_TIME_PATTERN)]);\n\n this._subscription.add(\n this.textControl.valueChanges\n .subscribe((value) => this.onFormChange(value))\n );\n\n // Listen status changes outside the component (e.g. when setErrors() is calling on the formControl)\n this._subscription.add(\n this.formControl.statusChanges\n .pipe(filter(() => !this.readonly && !this.writing && !this.disabling)) // Skip\n .subscribe((status) => {\n if (status === 'INVALID') {\n $error.next(this.formControl.errors);\n }\n else if (status === 'VALID') {\n $error.next(null);\n }\n this.textControl.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this.markForCheck();\n }));\n\n this.updateTabIndex();\n\n this.writing = false;\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n }\n\n writeValue(obj: any): void {\n if (this.writing) return;\n\n // console.debug('[mat-duration] writeValue:', obj);\n\n if (isNil(obj)) {\n this.writing = true;\n this.textControl.patchValue(null, {emitEvent: false});\n this._value = undefined;\n if (this.formControl.value) {\n this.formControl.patchValue(null, {emitEvent: false});\n this._onChangeCallback(null);\n }\n this.writing = false;\n this.markForCheck();\n return;\n }\n\n this._value = obj;\n if (isNaN(this._value)) { // invalid value\n return;\n }\n\n this.writing = true;\n\n console.debug(`[mat-duration] Formatted hour: ${this._value} to ${formatDuration(this._value)}`);\n\n // Set form value\n this.textControl.patchValue(formatDuration(this._value), {emitEvent: false});\n this.writing = false;\n this.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.disabling) return;\n\n this.disabling = true;\n this.disabled = isDisabled;\n if (isDisabled) {\n this.textControl.disable({onlySelf: true, emitEvent: false});\n } else {\n this.textControl.enable({onlySelf: true, emitEvent: false});\n }\n this.disabling = false;\n\n this.markForCheck();\n }\n\n private onFormChange(value): void {\n if (this.writing) return; // Skip if call by self\n this.writing = true;\n\n console.debug('[mat-duration] onFormChange:', value);\n\n if (this.textControl.hasError('pattern') || this.textControl.hasError('required')) {\n this.formControl.markAsPending();\n this.formControl.setErrors({\n pattern: this.textControl.errors.pattern,\n required: this.textControl.errors.required\n });\n this.writing = false;\n return;\n }\n\n this._value = parseDuration(value || '', this.maxDecimals, this.placeholderChar);\n\n console.debug('[mat-duration] Setting duration: ', this._value);\n this.formControl.patchValue(this._value, {emitEvent: false});\n //this.formControl.updateValueAndValidity();\n this.writing = false;\n this.markForCheck();\n\n this._onChangeCallback(this._value);\n }\n\n checkIfTouched() {\n if (this.textControl.touched) {\n this.markForCheck();\n this._onTouchedCallback();\n }\n }\n\n preventEvent(event: UIEvent) {\n if (!event) return;\n event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n event.returnValue = false;\n }\n\n focus() {\n if (!this.matInputs.length) return;\n\n setTimeout(() => {\n const elementRef = this.matInputs[0]; // get the first element\n if (isFocusableElement(elementRef)) {\n elementRef.focus();\n }\n });\n }\n\n moveCaretToSeparator(event: any, forward: boolean): boolean {\n // Move to the next separator\n return moveInputCaretToSeparator(event, ':', forward);\n }\n\n /* -- protected method -- */\n\n protected updateTabIndex() {\n if (isNil(this._tabindex) || this._tabindex === -1) return; // skip\n\n // Focus to first input\n setTimeout(() => {\n this.matInputs.forEach((elementRef, index) => {\n setTabIndex(elementRef, this._tabindex + index);\n });\n this.markForCheck();\n });\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n}\n\n","import {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {SharedPipesModule} from '../../pipes/pipes.module';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TextMaskModule} from 'angular2-text-mask';\nimport {NgxMaterialTimepickerModule} from 'ngx-material-timepicker';\nimport {MatDuration} from './material.duration';\nimport {MatMomentDateModule} from '@angular/material-moment-adapter';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n ReactiveFormsModule,\n SharedPipesModule,\n MatCommonModule,\n MatFormFieldModule,\n MatInputModule,\n TextMaskModule,\n NgxMaterialTimepickerModule,\n MatRippleModule,\n MatMomentDateModule,\n TranslateModule.forChild()\n ],\n exports: [\n MatDuration\n ],\n declarations: [\n MatDuration\n ]\n})\nexport class SharedMatDurationModule {\n}\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Optional,\n Output, Provider, QueryList,\n ViewChild, ViewChildren\n} from '@angular/core';\nimport {FloatLabelType} from '@angular/material/form-field';\nimport {ControlValueAccessor, FormBuilder, FormControl, FormGroupDirective, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {isNil, isNotNil, toNumber} from '../../functions';\nimport {InputElement} from '../../inputs';\nimport {MatRadioButton, MatRadioChange} from '@angular/material/radio';\nimport {MatCheckbox, MatCheckboxChange} from '@angular/material/checkbox';\nimport {MatDateShort} from '../datetime/material.dateshort';\n\nconst DEFAULT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatBooleanField),\n multi: true\n};\n\n\nconst noop = () => {\n};\n\n@Component({\n selector: 'mat-boolean-field',\n templateUrl: './material.boolean.html',\n styleUrls: ['./material.boolean.scss'],\n providers: [\n DEFAULT_VALUE_ACCESSOR\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatBooleanField implements OnInit, AfterViewInit, ControlValueAccessor, InputElement {\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n private _writing = false;\n\n _value: boolean;\n _tabindex: number;\n\n showRadio = false;\n\n @Input() disabled = false;\n @Input() formControl: FormControl;\n @Input() formControlName: string;\n @Input() placeholder: string;\n @Input() floatLabel: FloatLabelType = 'auto';\n @Input() readonly = false;\n @Input() required = false;\n @Input() compact = false;\n @Input() style: 'radio' | 'checkbox' | 'button';\n @Input() buttonsColCount: number;\n @Input('class') classList: string;\n @Input() yesLabel = 'COMMON.YES';\n @Input() noLabel = 'COMMON.NO';\n @Input() showButtonIcons = true;\n @Input() yesIcon = 'checkmark';\n @Input() noIcon = 'close';\n\n @Output('keyup.enter')\n onPressEnter = new EventEmitter<any>();\n\n @Output()\n onBlur = new EventEmitter<FocusEvent>();\n\n @Input() set tabindex(value: number) {\n if (this._tabindex !== value) {\n this._tabindex = value;\n setTimeout(() => this.updateTabIndex());\n }\n }\n\n get tabindex(): number {\n return this._tabindex;\n }\n\n get value(): any {\n return this._value;\n }\n\n @Input()\n set value(v: any) {\n if (v !== this._value) {\n this._value = v;\n this._onChangeCallback(v);\n }\n }\n\n @ViewChild('yesButton') yesButton: MatRadioButton;\n @ViewChild('noButton') noButton: MatRadioButton;\n @ViewChild('checkboxButton') checkboxButton: MatCheckbox;\n @ViewChild('fakeInput') fakeInput: ElementRef;\n @ViewChild('suffix', {static: false}) suffixDiv: ElementRef;\n @ViewChildren('injectMatSuffix') suffixInjections: QueryList<ElementRef>;\n\n constructor(\n private translate: TranslateService,\n private formBuilder: FormBuilder,\n private cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective\n ) { }\n\n ngOnInit() {\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-boolean-field>.');\n\n this.style = this.style || (this.compact ? 'checkbox' : 'radio');\n\n if (this.style === 'button') {\n this.buttonsColCount = toNumber(this.buttonsColCount, 2);\n }\n\n // Force show radio if label always on top\n this.showRadio = this.showRadio || this.floatLabel === 'always';\n\n this.updateTabIndex();\n }\n\n ngAfterViewInit() {\n // Inject suffix elements, into the first injection point found\n if (this.suffixDiv) {\n this.suffixInjections.find(item => {\n item.nativeElement.append(this.suffixDiv.nativeElement);\n this.suffixDiv.nativeElement.classList.remove('cdk-visually-hidden');\n return true; // take only the first injection point\n });\n }\n }\n\n writeValue(value: any, event?: UIEvent): void {\n if (this._writing) return;\n\n this._writing = true;\n if (value !== this._value) {\n this._value = value;\n this.showRadio = this.floatLabel === 'always' || isNotNil(this._value);\n if (isNotNil(this.tabindex)) {\n setTimeout(() => this.updateTabIndex());\n }\n }\n this._writing = false;\n\n if (this.style === 'button') {\n if (value !== this.formControl.value) {\n this.formControl.patchValue(value, {emitEvent: false});\n this._onChangeCallback(value);\n }\n if (event) this.onPressEnter.emit(event);\n }\n\n this.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n\n _onBlur(event: FocusEvent) {\n this.checkIfTouched();\n this.onBlur.emit(event);\n }\n\n _onFocusFakeInput(event: FocusEvent) {\n event.preventDefault();\n\n // Hide the fake input\n if (this.fakeInput) {\n this.fakeInput.nativeElement.classList.add('hidden');\n this.fakeInput.nativeElement.tabIndex = -1;\n }\n\n // Focus on first button\n this.focus();\n }\n\n focus() {\n this.showRadio = true;\n setTimeout(() => {\n if (this.yesButton) {\n this.yesButton.focus();\n }\n else if (this.checkboxButton) {\n this.checkboxButton.focus();\n }\n this.updateTabIndex();\n });\n this.markForCheck();\n }\n\n onRadioValueChanged(event: MatRadioChange): void {\n if (this._writing) return; // Skip if call by self\n this._writing = true;\n this._value = event.value;\n this.checkIfTouched();\n this._onChangeCallback(event.value);\n this._writing = false;\n }\n\n onCheckboxValueChanged(event: MatCheckboxChange): void {\n if (this._writing) return; // Skip if call by self\n this._writing = true;\n this._value = event.checked;\n this.checkIfTouched();\n this._onChangeCallback(event.checked);\n this._writing = false;\n }\n\n /* -- private method -- */\n\n private checkIfTouched() {\n if (this.formControl.touched) {\n this.markForCheck();\n this._onTouchedCallback();\n }\n }\n\n /**\n * This is a special case, because, this component has a temporary component displayed before the first focus event\n */\n private updateTabIndex() {\n if (isNil(this._tabindex) || this._tabindex === -1) return;\n\n if (this.fakeInput) {\n if (this.showRadio) {\n this.fakeInput.nativeElement.classList.add('hidden');\n this.fakeInput.nativeElement.tabIndex = -1;\n } else {\n this.fakeInput.nativeElement.classList.remove('hidden');\n this.fakeInput.nativeElement.tabIndex = this._tabindex;\n }\n }\n if (this.yesButton) {\n this.yesButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex : -1;\n this.noButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex + 1 : -1;\n } else if (this.checkboxButton) {\n this.checkboxButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex : -1;\n }\n this.markForCheck();\n }\n\n\n private markForCheck() {\n this.cd.markForCheck();\n }\n}\n\n","import {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {SharedPipesModule} from '../../pipes/pipes.module';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TextMaskModule} from 'angular2-text-mask';\nimport {NgxMaterialTimepickerModule} from 'ngx-material-timepicker';\nimport {MatBooleanField} from './material.boolean';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n ReactiveFormsModule,\n SharedPipesModule,\n MatCommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatRadioModule,\n MatCheckboxModule,\n TextMaskModule,\n NgxMaterialTimepickerModule,\n TranslateModule.forChild()\n ],\n exports: [\n MatBooleanField\n ],\n declarations: [\n MatBooleanField\n ]\n})\nexport class SharedMatBooleanModule {\n}\n\n","import {EventEmitter} from '@angular/core';\n\nexport interface MatNumpadRef {\n\n keypress: EventEmitter<KeyboardEvent>;\n\n close(): void;\n}\n\nexport interface MatNumpadConfig {\n inputElement: any;\n keymap: MatNumpadKey[][];\n numpadRef: MatNumpadRef;\n decimal: boolean;\n disableAnimation: boolean;\n noBackdrop: boolean;\n position: string;\n\n appendToInput: boolean;\n // TODO\n //cssClass width = scope.settings.width || '100%';\n //scope.align = scope.settings.align || 'center';\n // animation: 'slide-up' | 'pop'\n // resizeContent: true\n // animationDuration = 150;\n}\n\nexport interface MatNumpadKey {\n key: string;\n label?: string | number;\n color?: string;\n matIcon?: string;\n icon?: string;\n}\n\nexport declare type MatNumpadKeymap = MatNumpadKey[][];\n\nexport const DEFAULT_KEYMAP: MatNumpadKeymap = [\n [{key: '1'}, {key: '2'}, {key: '3'}, {key: 'Backspace', icon: 'backspace', color: 'light'}],\n [{key: '4'}, {key: '5'}, {key: '6'}, {key: 'Tab', label: 'COMMON.BTN_NEXT_SHORT', color: 'light'}],\n [{key: '7'}, {key: '8'}, {key: '9'}, {key: '.', label: 'COMMON.BTN_DECIMAL_SEPARATOR', color: 'light'}],\n [null, {key: '0'}, null, {key: 'Enter', icon: 'checkmark', color: 'tertiary'}]\n];\n\n//export declare type MatNumpadEventDetail = MatNumpadKey & {target: any};\n//export declare type MatNumpadEvent = CustomEvent<MatNumpadEventDetail>\n\nexport class MatNumpadEvent extends KeyboardEvent {\n inputTarget: any;\n constructor(type: string, init: KeyboardEventInit & {target: any}) {\n super(type, init);\n this.inputTarget = init && init.target;\n }\n}\n\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, OnDestroy, OnInit} from '@angular/core';\nimport {MatNumpadConfig, MatNumpadEvent, MatNumpadKey, MatNumpadKeymap, MatNumpadRef} from './numpad.model';\nimport {BehaviorSubject} from 'rxjs';\nimport {animate, AnimationEvent, state, style, transition, trigger} from '@angular/animations';\n\nexport enum AnimationState {\n ENTER = 'enter',\n ENTER_INPUT = 'enter-input',\n LEAVE = 'leave'\n}\n@Component({\n selector: 'mat-numpad-container',\n templateUrl: './numpad.container.html',\n styleUrls: ['./numpad.container.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n // Backdrop animation\n trigger('numpadBackdrop', [\n state('*', style({opacity: 0, background: 'transparent'})),\n state(AnimationState.ENTER, style({opacity: 1})),\n state(AnimationState.LEAVE, style({opacity: 0})),\n transition(`* => ${AnimationState.ENTER}`, [\n style({opacity: 0}),\n animate('0.4s cubic-bezier(0.25, 0.8, 0.25, 1)')\n ]),\n transition(`${AnimationState.ENTER} => ${AnimationState.LEAVE}`, [\n style({ opacity: 1}),\n animate('0.2s cubic-bezier(0.25, 0.8, 0.25, 1)')\n ])\n ]),\n\n // Fade in\n trigger('numpadFadeIn', [\n state('*', style({opacity: 1, transform: 'scale(1)'})),\n state(AnimationState.ENTER, style({opacity: 1, transform: 'scale(1)'})),\n state(AnimationState.LEAVE, style({opacity: 0, transform: 'scale(0.9)'})),\n // Modal\n transition(`* => ${AnimationState.ENTER}`, [\n style({opacity: 0, transform: 'scale(0.6)'}),\n animate('0.2s ease-out')\n ]),\n transition(`${AnimationState.ENTER} => ${AnimationState.LEAVE}`, [\n animate('0.2s ease-out')\n ]) ]),\n\n // Panel expansion\n trigger('numpadPanelExpansion', [\n state('*', style({opacity: 1, transform: 'scaleY(0) translateY(-50%)'})),\n state(AnimationState.ENTER, style({opacity: 1, transform: 'scale(1) translateY(0)'})),\n state(AnimationState.LEAVE, style({opacity: 0, transform: 'scale(1) translateY(0)'})),\n\n // Attach to input\n transition(`* => ${AnimationState.ENTER}`, [\n animate('0.2s ease-out')\n ]),\n transition(`${AnimationState.ENTER} => ${AnimationState.LEAVE}`, [\n animate('0.2s ease-out')\n ])\n ])\n ]\n})\nexport class MatNumpadContainerComponent implements OnInit, OnDestroy, MatNumpadConfig {\n\n private debug = true;\n\n backdropState: AnimationState = AnimationState.LEAVE;\n modalState: AnimationState;\n panelState: AnimationState;\n numpadRef: MatNumpadRef;\n inputElement: any;\n columnCount = 4;\n\n filteredKeymap = new BehaviorSubject<MatNumpadKeymap>(undefined);\n\n // Config options\n decimal: boolean;\n disabled: boolean;\n appendToInput: boolean;\n keymap: MatNumpadKeymap;\n disableAnimation: boolean;\n noBackdrop: boolean;\n position: string;\n\n constructor(\n protected cd: ChangeDetectorRef\n ) {\n if (this.debug) console.debug('[numpad-container] Creating component');\n }\n\n ngOnInit(): void {\n if (!this.keymap || !this.keymap.length) {\n throw new Error('An invalid \\'keymap\\' was sent to numpad container');\n }\n\n\n if (!this.disableAnimation) {\n if (this.appendToInput) {\n this.panelState = AnimationState.ENTER;\n }\n else {\n this.modalState = AnimationState.ENTER;\n }\n }\n\n this.noBackdrop = this.noBackdrop || this.appendToInput;\n if (!this.noBackdrop) {\n this.backdropState = AnimationState.ENTER;\n }\n\n const keymap = this.defineFilteredKeymap();\n this.filteredKeymap.next(keymap);\n\n // Count columns\n this.columnCount = keymap.reduce((res, row) => row && Math.max(res, row.length), 0);\n if (this.debug) console.debug('[numpad-container] columnCount=' + this.columnCount);\n\n //this.markForCheck();\n }\n\n ngOnDestroy(): void {\n }\n\n onButtonClick(event: UIEvent, keyDef: MatNumpadKey) {\n if (this.debug) console.debug('[numpad-container] onKeyPress() ', keyDef.key);\n\n const customEvent = new MatNumpadEvent('keypress', {key: keyDef.key, target: this.inputElement});\n\n //{detail: {...keyDef, target: this.inputElement}})\n this.numpadRef.keypress.next(customEvent);\n }\n\n @HostListener('window:keydown', ['$event'])\n onKeydown(event: KeyboardEvent) {\n //if (this.debug)\n console.debug('[numpad-container] onKeypress()', event);\n this.numpadRef.keypress.next(event);\n }\n\n overlayClick(event: UIEvent) {\n\n this.close();\n }\n\n close(): void {\n if (this.disableAnimation) {\n this.numpadRef.close();\n return;\n }\n\n if (this.modalState) this.modalState = AnimationState.LEAVE;\n if (this.panelState) this.panelState = AnimationState.LEAVE;\n if (this.backdropState) this.backdropState = AnimationState.LEAVE;\n this.markForCheck();\n }\n\n animationDone(event: AnimationEvent): void {\n if (event.phaseName === 'done' && event.toState === AnimationState.LEAVE) {\n this.numpadRef.close();\n }\n }\n\n protected defineFilteredKeymap(): MatNumpadKeymap {\n let keymap = this.keymap;\n\n // Replace decimal separator button, by empty\n if (!this.decimal) {\n keymap = keymap.map(row => row.map(item => item && item.key !== '.' && item.key !== ',' ? item : null));\n }\n\n return keymap;\n }\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n}\n","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Inject,\n Injectable,\n Injector,\n Optional,\n Type\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {MatNumpadContainerComponent} from './numpad.container';\nimport {MatNumpadConfig} from './numpad.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MatNumpadDomService {\n\n private componentRef: ComponentRef<MatNumpadContainerComponent>;\n\n constructor(private cfr: ComponentFactoryResolver,\n private appRef: ApplicationRef,\n private injector: Injector,\n @Optional() @Inject(DOCUMENT) private document: any) {\n }\n\n appendNumpadToBody(numpadType: Type<MatNumpadContainerComponent>, config: MatNumpadConfig): void {\n this.componentRef = this.cfr.resolveComponentFactory(numpadType).create(this.injector);\n\n Object.keys(config).forEach(key => this.componentRef.instance[key] = config[key]);\n\n this.appRef.attachView(this.componentRef.hostView);\n\n const domElement: HTMLElement = (this.componentRef.hostView as EmbeddedViewRef<MatNumpadContainerComponent>)\n .rootNodes[0];\n\n this.document.body.appendChild(domElement);\n }\n\n destroyNumpad(): void {\n this.componentRef.destroy();\n this.appRef.detachView(this.componentRef.hostView);\n }\n}\n","import {DEFAULT_KEYMAP, MatNumpadEvent, MatNumpadKeymap, MatNumpadRef} from './numpad.model';\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {NumpadDirective} from './numpad.directive';\nimport {MatNumpadContainerComponent} from './numpad.container';\nimport {MatNumpadDomService} from './numpad.dom-service';\n\n@Component({\n selector: 'mat-numpad',\n template: '',\n})\nexport class MatNumpadComponent implements MatNumpadRef {\n\n private _inputRef: NumpadDirective;\n private _opened = false;\n\n @Input() keymap: MatNumpadKeymap = DEFAULT_KEYMAP;\n\n @Input() decimal = true;\n\n @Input() appendToInput: boolean;\n @Input() disableAnimation = false;\n @Input() noBackdrop = false;\n @Input() position = 'bottom';\n\n @Output() keypress = new EventEmitter<KeyboardEvent>();\n @Output() closed = new EventEmitter<null>();\n\n get opened(): boolean {\n return this._opened;\n }\n\n get inputElement(): any {\n return this._inputRef && this._inputRef.element;\n }\n\n constructor(\n private domService: MatNumpadDomService\n ) {\n }\n\n registerInput(input: NumpadDirective) {\n if (this._inputRef) {\n throw new Error('A Numpad can only be registered to one input.');\n }\n this._inputRef = input;\n }\n\n open() {\n // Already open. Skip.\n if (this._opened) return;\n\n console.debug('[numpad] Opening numpad...');\n\n this.domService.appendNumpadToBody(MatNumpadContainerComponent, {\n numpadRef: this,\n decimal: this.decimal,\n keymap: this.keymap,\n inputElement: this.inputElement,\n appendToInput: this.appendToInput,\n disableAnimation: this.disableAnimation,\n noBackdrop: this.noBackdrop,\n position: this.position\n });\n\n this._opened = true;\n }\n\n close() {\n console.debug('[numpad] Closing numpad...');\n this.domService.destroyNumpad();\n this._opened = false;\n\n // Emit close event\n this.closed.next();\n }\n\n\n}\n","import {Directive, ElementRef, HostListener, Input, OnChanges, OnDestroy, SimpleChanges} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {MatNumpadKeymap} from './numpad.model';\nimport {MatNumpadComponent} from './numpad.component';\n\n@Directive({\n selector: '[matNumpad]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: NumpadDirective,\n multi: true\n }\n ],\n host: {\n '[disabled]': 'disabled',\n // '[decimal]': 'decimal',\n '(click)': 'onClick($event)',\n '(change)': 'updateValue($event.target.value)',\n '(blur)': 'onTouched()'\n },\n})\nexport class NumpadDirective implements ControlValueAccessor, OnDestroy, OnChanges {\n\n private _numpad: MatNumpadComponent;\n\n @Input() keymap: MatNumpadKeymap;\n\n @Input('matNumpad')\n set numpad(numpad: MatNumpadComponent) {\n this.registerNumpad(numpad);\n }\n\n @Input()\n set value(value: string) {\n this._value = value || '';\n this.updateInputValue();\n return;\n }\n\n get value(): string {\n if (!this._value) {\n return '';\n }\n return this._value;\n }\n\n private _value = '';\n\n @Input() disabled: boolean;\n @Input() decimal: boolean;\n @Input() disableClick: boolean;\n\n private numpadSubscriptions: Subscription[] = [];\n\n onTouched = () => {\n };\n\n private onChange: (value: any) => void = () => {\n };\n\n constructor(private elementRef: ElementRef) {\n }\n\n get element(): any {\n return this.elementRef && this.elementRef.nativeElement;\n }\n\n updateValue(value: string) {\n console.debug('[numpad-directive] updateValue()', value);\n this.value = value;\n this.onChange(value);\n }\n\n ngOnChanges(changes: SimpleChanges){\n /*if (changes['value'] && changes['value'].currentValue) {\n this.defaultValue = changes['value'].currentValue;\n }*/\n }\n\n @HostListener('click', ['$event'])\n onClick(event: UIEvent) {\n if (!this.disableClick) {\n this._numpad.open();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n writeValue(value: string): void {\n this.value = value;\n if (value) {\n //this.defaultValue = value;\n }\n }\n\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnDestroy() {\n this.numpadSubscriptions.forEach(s => s.unsubscribe());\n }\n\n private registerNumpad(numpad: MatNumpadComponent): void {\n if (numpad) {\n console.debug('[numpad-directive] Registering numpad', numpad);\n this._numpad = numpad;\n this._numpad.registerInput(this);\n this.numpadSubscriptions.push(this._numpad.keypress\n .pipe(\n //filter(event => event.inputTarget === this.element)\n )\n .subscribe(event => this.applyingKey(event))\n );\n\n } else {\n throw new Error('MatNumpadComponent is not defined.' +\n ' Please make sure you passed the numpad to matNumpad directive');\n }\n }\n\n private applyingKey(event: KeyboardEvent) {\n console.debug('[numpad-directive] Receiving key=' + event.key);\n let value = this.value !== null && this.value !== undefined ? this.value : '';\n // Remove french decimal separator\n value = (typeof value === 'number') ? ('' + value) : value.replace(',', '.');\n if (event.key === '.' || event.key === ',') {\n if (value.indexOf('.') === -1) {\n value += '.';\n }\n }\n\n else if (event.key === 'Backspace') {\n // Remove last character\n value = value.length > 1 ? value.substr(0, value.length - 1) : '';\n }\n else if (event.key === 'Enter' || event.keyCode === 13) {\n this._numpad.close();\n return;\n }\n else if (event.key === 'Tab') {\n // TODO goto next input ?\n return; // Skip\n }\n else if (event.key === 'Escape') {\n this._numpad.close();\n return;\n }\n else {\n value += (event.key || '');\n }\n\n this.updateValue(value);\n this.onTouched();\n }\n\n private updateInputValue(): void {\n this.elementRef.nativeElement.value = this.value;\n }\n\n}\n\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'mat-numpad-content',\n templateUrl: './numpad.content.html',\n})\nexport class MatNumpadContent {\n @Input() appendToInput: boolean;\n @Input() inputElement: any;\n}\n","import {AfterViewInit, Directive, ElementRef, HostListener, Input, Renderer2} from '@angular/core';\n\ntype TimepickerDirectionY = 'top' | 'center' | 'bottom';\ntype TimepickerDirectionX = 'start' | 'center' | 'end';\n\n@Directive({\n selector: '[appendNumpadToInput]'\n})\nexport class AppendToInputDirective implements AfterViewInit {\n\n @Input('appendNumpadToInput') inputElement: any;\n\n private _directionY: TimepickerDirectionY;\n private _directionX: TimepickerDirectionX;\n private _inputCords: ClientRect;\n private readonly element: HTMLElement;\n\n constructor(elementRef: ElementRef<HTMLElement>,\n private renderer: Renderer2) {\n this.element = elementRef.nativeElement;\n }\n\n private get inputCords(): ClientRect {\n return this.inputElement.getBoundingClientRect();\n }\n\n private get directionY(): TimepickerDirectionY {\n const height = this.element.offsetHeight;\n const {bottom, top} = this._inputCords;\n const isElementFit = (window && window.innerHeight) - bottom < height;\n const isTop = isElementFit && top > height;\n const isCenter = isElementFit && top < height;\n\n if (isTop) {\n return 'top';\n } else if (isCenter) {\n return 'center';\n }\n return 'bottom';\n }\n\n private get directionX(): TimepickerDirectionX {\n const width = this.element.offsetWidth;\n const {left, right} = this._inputCords;\n const isElementFit = (window && window.innerWidth) - left < width;\n const isEnd = isElementFit && right > width;\n const isCenter = isElementFit && right < width;\n\n if (isEnd) {\n return 'end';\n } else if (isCenter) {\n return 'center';\n }\n return 'start';\n }\n\n ngAfterViewInit(): void {\n this._inputCords = this.inputCords;\n this._directionY = this.directionY;\n this._directionX = this.directionX;\n\n this.append();\n }\n\n @HostListener('window:scroll')\n changePosition(): void {\n const {left, right, bottom, top} = this.inputCords;\n const x = this.defineElementYByDirection(left, right);\n const y = this.defineElementYByDirection(top, bottom);\n this.setStyle('left', `${x}px`);\n this.setStyle('top', `${y}px`);\n }\n\n private append(): void {\n const {left, right, bottom, top} = this._inputCords;\n\n const x = this.defineElementXByDirection(left, right);\n const y = this.defineElementYByDirection(top, bottom);\n\n this.setStyle('position', 'fixed');\n this.setStyle('left', `${x}px`);\n this.setStyle('top', `${y}px`);\n }\n\n private setStyle(style: string, value: string): void {\n this.renderer.setStyle(this.element, style, value);\n }\n\n private defineElementYByDirection(inputTop: number, inputBottom: number): number {\n if (this._directionY === 'top') {\n return inputTop - this.element.offsetHeight;\n } else if (this._directionY === 'center') {\n return inputTop - (this.element.offsetHeight / 2);\n }\n return inputBottom;\n }\n\n private defineElementXByDirection(inputLeft: number, inputRight: number) {\n // DEBUG\n //console.log(\"defineElementXByDirection \", inputLeft, inputRight);\n\n if (this._directionX === 'end') {\n return inputRight - this.element.offsetWidth;\n } else if (this._directionX === 'center') {\n return inputRight - (this.element.offsetWidth / 2);\n }\n return inputLeft;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {MatNumpadComponent} from './numpad.component';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {NumpadDirective} from './numpad.directive';\nimport {MatNumpadContainerComponent} from './numpad.container';\nimport {MatNumpadContent} from './numpad.content';\nimport {AppendToInputDirective} from './numpad.append-to-input.directive';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n MatButtonModule,\n MatIconModule,\n TranslateModule.forChild()\n ],\n exports: [\n MatNumpadComponent,\n NumpadDirective,\n MatNumpadContainerComponent,\n MatNumpadContent,\n AppendToInputDirective\n ],\n declarations: [\n MatNumpadContainerComponent,\n MatNumpadComponent,\n MatNumpadContent,\n NumpadDirective,\n AppendToInputDirective\n ]\n})\nexport class SharedMatNumpadModule {\n}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Optional, Output, Provider, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BehaviorSubject, isObservable, noop, Observable, Subscription } from 'rxjs';\nimport { isNil, isNotNil, joinPropertiesPath, toBoolean } from '../../functions';\nimport { InputElement, selectInputContent } from '../../inputs';\nimport { CompareWithFn, DisplayFn } from '../../form/field.model';\nimport { FloatLabelType } from '@angular/material/form-field';\nimport { IonSlides } from '@ionic/angular';\nimport { MatButton } from '@angular/material/button';\nimport { firstNotNilPromise } from '../../observables';\nimport { filter } from 'rxjs/operators';\n\nconst DEFAULT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSwipeField),\n multi: true\n};\n\n@Component({\n selector: 'mat-swipe-field',\n styleUrls: ['./material.swipe.scss'],\n templateUrl: './material.swipe.html',\n providers: [DEFAULT_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatSwipeField implements OnInit, InputElement, OnDestroy, ControlValueAccessor {\n\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n private _value: any;\n private _subscription = new Subscription();\n private _itemsSubscription: Subscription;\n private _writing = false;\n private _tabindex: number;\n previousDisabled: boolean;\n nextDisabled: boolean;\n showSlides = false;\n $items = new BehaviorSubject<any[]>(undefined);\n $loaded = new BehaviorSubject<boolean>(false);\n\n slidesOptions: {\n speed: 100; // FIXME: seems it's not working\n };\n\n @Input() logPrefix = '[mat-swipe-field]';\n\n @Input() formControl: FormControl;\n\n @Input() formControlName: string;\n\n @Input() floatLabel: FloatLabelType;\n\n @Input() placeholder: string;\n\n @Input() debug = false;\n\n @Input() required = false;\n\n @Input() mobile: boolean;\n\n @Input() clearable = false;\n\n @Input() compareWithFn: CompareWithFn | null;\n\n @Input() displayWith: DisplayFn | null;\n\n @Input() displayAttributes: string[];\n\n @Input() appAutofocus: boolean;\n\n @Input('class') classList: string;\n\n @Input() set tabindex(value: number) {\n if (this._tabindex !== value) {\n this._tabindex = value;\n setTimeout(() => this.updateTabIndex());\n }\n }\n\n get tabindex(): number {\n return this._tabindex;\n }\n\n @Input() set items(value: Observable<any[]> | any[]) {\n // Remove previous subscription on items, (if exits)\n if (this._itemsSubscription) {\n console.warn(`${this.logPrefix} Items received twice !`);\n this._subscription.remove(this._itemsSubscription);\n this._itemsSubscription.unsubscribe();\n }\n\n if (isObservable<any[]>(value)) {\n this._itemsSubscription = this._subscription.add(\n value.subscribe(v => {\n this.loadItems(v);\n })\n );\n } else {\n if (value !== this.$items.getValue()) {\n this.loadItems(value as any[]);\n }\n }\n }\n\n get items(): Observable<any[]> | any[] {\n return this.$items.getValue();\n }\n\n get itemCount(): number {\n return (this.$items.getValue() || []).length;\n }\n\n @Output('click') onClick = new EventEmitter<MouseEvent>();\n\n @Output('blur') onBlur = new EventEmitter<FocusEvent>();\n\n @Output('focus') onFocus = new EventEmitter<FocusEvent>();\n\n @ViewChild('fakeInput') fakeInput: ElementRef;\n\n @ViewChild('slides', {static: true}) slides: IonSlides;\n\n @ViewChild('prevButton') prevButton: MatButton;\n @ViewChild('nextButton') nextButton: MatButton;\n\n get value(): any {\n return this._value;\n }\n\n get disabled(): any {\n return this.formControl.disabled;\n }\n\n get enabled(): any {\n return this.formControl.enabled;\n }\n\n constructor(\n protected cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective\n ) {\n }\n\n ngOnInit() {\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-swipe-field>.');\n\n // Default values\n this.displayAttributes = this.displayAttributes || ['label', 'name'];\n this.displayWith = this.displayWith || ((obj) => obj && joinPropertiesPath(obj, this.displayAttributes));\n this.compareWithFn = this.compareWithFn || ((o1: any, o2: any) => o1 && o2 && o1.id === o2.id);\n\n this.mobile = toBoolean(this.mobile, false);\n }\n\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n this._value = undefined;\n this.$items.complete();\n }\n\n _onFocusFakeInput(event: FocusEvent) {\n event.preventDefault();\n\n // Hide the fake input\n if (this.fakeInput) {\n this.fakeInput.nativeElement.classList.add('hidden');\n this.fakeInput.nativeElement.tabIndex = -1;\n }\n\n // Focus on first button\n this.focus();\n }\n\n focus() {\n // show slides component\n this.showSlides = true;\n\n setTimeout(() => {\n if (this.prevButton) {\n this.prevButton.focus();\n }\n this.updateTabIndex();\n });\n\n if (isNil(this._value)) {\n // Slide to first and affect value\n this.slideTo(0);\n this.slideChanged();\n }\n\n this.markForCheck();\n }\n\n /**\n * This is a special case, because, this component has a temporary component displayed before the first focus event\n */\n private updateTabIndex() {\n if (isNil(this._tabindex) || this._tabindex === -1) return;\n\n if (this.fakeInput) {\n if (this.showSlides) {\n this.fakeInput.nativeElement.classList.add('hidden');\n this.fakeInput.nativeElement.tabIndex = -1;\n } else {\n this.fakeInput.nativeElement.classList.remove('hidden');\n this.fakeInput.nativeElement.tabIndex = this._tabindex;\n }\n }\n if (this.prevButton && this.nextButton) {\n this.prevButton._elementRef.nativeElement.tabIndex = this.showSlides ? this._tabindex : -1;\n this.nextButton._elementRef.nativeElement.tabIndex = this.showSlides ? this._tabindex + 1 : -1;\n }\n this.markForCheck();\n }\n\n writeValue(value: any): void {\n if (this._writing) return;\n\n this._writing = true;\n if (!this.compareWithFn(value, this._value)) {\n this._value = value;\n this.showSlides = isNotNil(this._value);\n this.updateSlides();\n setTimeout(() => this.updateTabIndex());\n }\n this._writing = false;\n\n this.markForCheck();\n }\n\n clearValue(event: UIEvent) {\n event.stopPropagation();\n this._writing = true;\n if (this.debug) console.debug(`${this.logPrefix} clear value`);\n this._value = undefined;\n this.formControl.patchValue(null, {emitEvent: false});\n this.showSlides = false;\n setTimeout(() => {\n this.updateTabIndex();\n this.slideTo(0);\n setTimeout(() => {\n this._writing = false;\n }, 100);\n });\n this._onChangeCallback(null);\n this.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.slides.lockSwipes(isDisabled).then(() => this.updateButtons());\n this.cd.markForCheck();\n }\n\n selectInputContent = selectInputContent;\n\n previous() {\n this.slides.slidePrev();\n }\n\n next() {\n this.slides.slideNext();\n }\n\n reachStart(reached: boolean) {\n this.previousDisabled = reached;\n }\n\n reachEnd(reached: boolean) {\n this.nextDisabled = reached;\n }\n\n slidesLoaded() {\n this.$loaded.next(true);\n }\n\n slideChanged() {\n this.slides.getActiveIndex()\n .then(activeIndex => {\n if (this._writing) return;\n this._writing = true;\n const value = (this.$items.getValue() || [])[activeIndex] || undefined;\n if (this.debug) console.debug(`${this.logPrefix} slide changed ActiveIndex:${activeIndex}, new value:${value}`);\n this.formControl.patchValue(value, {emitEvent: false});\n this._writing = false;\n this.checkIfTouched();\n this._onChangeCallback(value);\n });\n }\n\n /* -- protected method -- */\n\n private loadItems(items: any[]) {\n this.$loaded.next(false);\n this.$items.next(items);\n this.ready().then(() => this.slides.update());\n }\n\n private checkIfTouched() {\n if (this.formControl.touched) {\n this.markForCheck();\n this._onTouchedCallback();\n }\n }\n\n private markForCheck() {\n this.cd.markForCheck();\n }\n\n private updateSlides() {\n if (this.showSlides) {\n const itemIndex = (this.$items.getValue() || []).findIndex(value => this.compareWithFn(value, this._value));\n if (itemIndex >= 0) {\n this.slideTo(itemIndex);\n } else {\n console.warn(`${this.logPrefix} Item not found`, this._value);\n this.slideTo(0);\n }\n }\n }\n\n private slideTo(index: number) {\n this.slides.slideTo(index, 0, false).then(() =>\n this.slides.update().then(() =>\n this.updateButtons()\n )\n );\n }\n\n private async updateButtons() {\n const activeIndex = await this.slides.getActiveIndex();\n if (this.debug) console.debug(`${this.logPrefix} update buttons ActiveIndex:${activeIndex}`);\n this.previousDisabled = activeIndex === 0 || this.disabled;\n this.nextDisabled = activeIndex === this.itemCount - 1 || this.disabled;\n }\n\n\n // not used ...\n async getSlides(): Promise<IonSlides> {\n await this.ready();\n return this.slides;\n }\n\n async ready(): Promise<void> {\n // Wait pmfms load, and controls load\n if (this.$loaded.getValue() === false) {\n if (this.debug) console.debug(`${this.logPrefix} waiting slides to be ready...`);\n await firstNotNilPromise(this.$loaded\n .pipe(\n filter((loaded) => loaded === true)\n ));\n }\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {MatSwipeField} from './material.swipe';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatInputModule} from '@angular/material/input';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n MatButtonModule,\n MatIconModule,\n TranslateModule.forChild(),\n MatFormFieldModule,\n ReactiveFormsModule,\n MatInputModule,\n ],\n exports: [\n MatSwipeField\n ],\n declarations: [\n MatSwipeField\n ]\n})\nexport class SharedMatSwipeModule {\n}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Optional, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BehaviorSubject, isObservable, merge, Observable, Subscription } from 'rxjs';\nimport { FloatLabelType } from '@angular/material/form-field';\nimport { debounceTime, distinctUntilChanged, filter, map, startWith, switchMap, tap } from 'rxjs/operators';\nimport { MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { focusInput, InputElement, selectInputContent } from '../../inputs';\nimport { LoadResult, SuggestFn } from '../../services/entity-service.class';\nimport { DisplayFn } from '../../form/field.model';\nimport { MatAutocompleteFieldConfig } from '../autocomplete/material.autocomplete';\nimport { changeCaseToUnderscore, getPropertyByPath, isNil, isNotNil, isNotNilString, joinPropertiesPath, suggestFromArray, toBoolean, toNumber } from '../../functions';\nimport { firstNotNilPromise } from '../../observables';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'mat-chips-field',\n templateUrl: './material.chips.html',\n styleUrls: ['./material.chips.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => MatChipsField)\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatChipsField implements InputElement, ControlValueAccessor, OnInit, OnDestroy {\n\n private _onChangeCallback = (_: any) => {};\n private _onTouchedCallback = () => {};\n\n @Input() compareWith: (o1: any, o2: any) => boolean;\n @Input() logPrefix = '[mat-chips] ';\n @Input() formControl: FormControl;\n @Input() formControlName: string;\n @Input() floatLabel: FloatLabelType;\n @Input() placeholder: string;\n @Input() suggestFn: SuggestFn<any, any>;\n @Input() required = false;\n @Input() mobile: boolean;\n @Input() readonly = false;\n @Input() clearable = false;\n @Input() debounceTime = 250;\n @Input() displayWith: DisplayFn | null;\n @Input() displayAttributes: string[];\n @Input() displayColumnSizes: (number | 'auto' | undefined)[];\n @Input() displayColumnNames: string[];\n @Input() highlightAccent = false;\n @Input() showAllOnFocus: boolean;\n @Input() showPanelOnFocus: boolean;\n @Input() appAutofocus: boolean;\n @Input() config: MatAutocompleteFieldConfig;\n @Input() i18nPrefix = 'REFERENTIAL.';\n @Input() noResultMessage = 'COMMON.NO_RESULT';\n @Input() class: string;\n @Input() debug = false;\n\n @Output() clicked = new EventEmitter<MouseEvent>();\n @Output() blurred = new EventEmitter<FocusEvent>();\n @Output() focused = new EventEmitter<FocusEvent>();\n\n @ViewChild('matInputText') matInputText: ElementRef;\n @ViewChild(MatAutocompleteTrigger) autocompleteTrigger: MatAutocompleteTrigger;\n\n _tabindex: number;\n $inputItems = new BehaviorSubject<any[]>(undefined);\n filteredItems$: Observable<any[]>;\n onDropButtonClick = new EventEmitter<UIEvent>(true);\n inputControl = new FormControl();\n getPropertyByPath = getPropertyByPath;\n\n private _subscription = new Subscription();\n private _itemsSubscription: Subscription;\n private _$filter = new BehaviorSubject<any>(undefined);\n private _itemCount: number;\n\n constructor(\n protected cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective\n ) {\n }\n\n get itemCount(): number {\n return this._itemCount;\n }\n\n @Input() set filter(value: any) {\n if (this.debug) console.debug(this.logPrefix + ' Setting filter:', value);\n if (value !== this._$filter.getValue()) {\n this._$filter.next(value);\n }\n }\n\n get filter(): any {\n return this._$filter.getValue();\n }\n\n\n @Input() set tabindex(value: number) {\n this._tabindex = value;\n this.markForCheck();\n }\n\n get tabindex(): number {\n return this._tabindex;\n }\n\n @Input() set items(value: Observable<any[]> | any[]) {\n // Remove previous subscription on items, (if exits)\n if (this._itemsSubscription) {\n console.warn('Items received twice !');\n this._subscription.remove(this._itemsSubscription);\n this._itemsSubscription.unsubscribe();\n }\n\n if (isObservable<any[]>(value)) {\n\n this._itemsSubscription = this._subscription.add(\n value.subscribe(v => this.$inputItems.next(v))\n );\n } else {\n if (value !== this.$inputItems.getValue()) {\n this.$inputItems.next(value as any[]);\n }\n }\n }\n\n get value(): any[] {\n return this.formControl.value || [];\n }\n\n get disabled(): any {\n return this.readonly || this.formControl.disabled;\n }\n\n get enabled(): any {\n return !this.readonly && this.formControl.enabled;\n }\n\n ngOnInit() {\n this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName) as FormControl;\n if (!this.formControl) throw new Error('Missing mandatory attribute \\'formControl\\' or \\'formControlName\\' in <mat-chips-field>.');\n\n // Configuration from config object\n if (this.config) {\n this.suggestFn = this.suggestFn || this.config.suggestFn;\n if (!this.suggestFn && this.config.items) {\n this.items = this.config.items;\n }\n this.filter = this.filter || this.config.filter;\n this.displayAttributes = this.displayAttributes || this.config.attributes;\n this.displayColumnSizes = this.displayColumnSizes || this.config.columnSizes;\n this.displayColumnNames = this.displayColumnNames || this.config.columnNames;\n this.displayWith = this.displayWith || this.config.displayWith;\n this.compareWith = this.compareWith || this.config.compareWith;\n this.mobile = toBoolean(this.mobile, this.config.mobile);\n this.showAllOnFocus = toBoolean(this.showAllOnFocus, toBoolean(this.config.showAllOnFocus, true));\n this.showPanelOnFocus = toBoolean(this.showPanelOnFocus, toBoolean(this.config.showPanelOnFocus, true));\n this.class = this.class || this.config.class;\n }\n\n // Default values\n this.displayAttributes = this.displayAttributes || (this.filter && this.filter.attributes) || ['label', 'name'];\n this.displayWith = this.displayWith || ((obj) => obj && joinPropertiesPath(obj, this.displayAttributes));\n this.compareWith = this.compareWith || ((o1, o2) => o1 && o2 && o1.id === o2.id);\n this.displayColumnSizes = this.displayColumnSizes || this.displayAttributes.map(attr => (\n // If label then col size = 2\n attr && attr.endsWith('label')) ? 2 :\n // If rankOrder then col size = 1\n (attr && attr.endsWith('rankOrder') ? 1 :\n // Else, auto size\n undefined));\n this.displayColumnNames = this.displayAttributes.map((attr, index) => this.displayColumnNames && this.displayColumnNames[index] ||\n (this.i18nPrefix + changeCaseToUnderscore(attr).toUpperCase()));\n this.mobile = toBoolean(this.mobile, false);\n\n // No suggestFn: filter on the given items\n if (!this.suggestFn) {\n const suggestFromArrayFn: SuggestFn<any, any> = async (value, filter) => {\n if (this.debug) console.debug(this.logPrefix + ' Calling suggestFromArray with value=', value);\n\n const {data, total} = await suggestFromArray(this.$inputItems.getValue(), value, {\n searchAttributes: this.displayAttributes,\n ...filter\n });\n this._itemCount = toNumber(total, data && data.length || 0) ;\n return {data, total};\n };\n // Wait (once) that items are loaded, then call suggest from array fn\n this.suggestFn = async (value, filter) => {\n if (isNil(this.$inputItems.getValue())) {\n if (this.debug) console.debug('[mat-chips] Waiting items to be set...');\n\n await firstNotNilPromise(this.$inputItems);\n\n if (this.debug) console.debug('[mat-chips] Received items:', this.$inputItems.getValue());\n }\n this.suggestFn = suggestFromArrayFn;\n return this.suggest(value, filter); // Loop\n };\n }\n\n // this.matSelectItems$ = this.$inputItems\n // .pipe(\n // filter(isNotNil),\n // map((items) => {\n // // Make sure control value is inside\n // const value = this.inputControl.value;\n // // If form value is missing: add it to the list\n // if (isNotNil(value) && typeof value === 'object' && items.findIndex(item => this.compareWith(item, value)) === -1) {\n // // console.debug(this.logPrefix + \" Add form value to items, because missed in items\", value);\n // return items.concat(value);\n // }\n // return items;\n // })\n // );\n\n this._subscription.add(\n this.onDropButtonClick\n .pipe(\n filter(event => (!event || !event.defaultPrevented) && this.formControl.enabled),\n )\n .subscribe(() => {\n this.matInputText.nativeElement.focus();\n })\n );\n\n const updateFilteredItemsEvents$ = merge(\n // Focus or click => Load all\n merge(this.focused, this.clicked)\n .pipe(\n filter(_ => this.enabled),\n map((_) => this.showAllOnFocus ? '*' : this.inputControl.value)\n ),\n this.inputControl.valueChanges\n .pipe(\n startWith<any, any>(this.inputControl.value),\n filter(value => (isNotNil(value) && typeof value === 'object') || (isNotNilString(value) && !value.includes('**'))),\n tap((value) => {\n if (this.debug) console.debug(this.logPrefix + ' valueChanges:', value);\n }),\n debounceTime(this.debounceTime)\n ),\n this.$inputItems\n .pipe(\n map(() => this.formControl.value)\n ),\n this._$filter\n .pipe(\n map(() => this.formControl.value)\n )\n );\n\n\n this.filteredItems$ = updateFilteredItemsEvents$\n .pipe(\n distinctUntilChanged(),\n //tap(value => this.debug && console.debug(this.logPrefix + \" Received update event: \", value)),\n switchMap( (value) => this.suggest(value, this.filter))\n );\n }\n\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n this.$inputItems.complete();\n }\n\n /**\n * Add item to chips\n *\n * @param event\n */\n add(event: MatAutocompleteSelectedEvent) {\n\n if (this.debug) console.debug(`${this.logPrefix}select`, event);\n\n const item = event.option.value;\n this.writeValue([...this.value, item]);\n this.matInputText.nativeElement.value = '';\n this.inputControl.setValue('');\n\n }\n\n /**\n * Remove item from chips\n *\n * @param item\n */\n remove(item: any) {\n const index = this.value && this.value.indexOf(item);\n\n if (index >= 0) {\n const value = this.value.slice();\n value.splice(index, 1);\n this.writeValue(value);\n this.inputControl.setValue('');\n }\n }\n\n /**\n * Allow to reload content. Useful when filter has been changed but not detected\n */\n reloadItems() {\n this.onDropButtonClick.emit();\n }\n\n writeValue(value: any[]): void {\n if (this.debug) console.debug(this.logPrefix + ' Writing value: ', value);\n if (value !== this.formControl.value) {\n this.formControl.patchValue(value, {emitEvent: false});\n this._onChangeCallback(value);\n }\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cd.markForCheck();\n }\n\n focus() {\n focusInput(this.matInputText);\n }\n\n filterInputTextFocusEvent(event: FocusEvent) {\n if (!event || event.defaultPrevented) return;\n\n // Ignore event from mat-option\n if (event.relatedTarget instanceof HTMLElement && event.relatedTarget.tagName === 'MAT-OPTION') {\n event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n event.returnValue = false;\n if (this.debug) console.debug(this.logPrefix + ' Cancelling focus event');\n return false;\n }\n\n const hasContent = selectInputContent(event);\n if (!hasContent || (this.showPanelOnFocus && this.showAllOnFocus)) {\n if (this.debug) console.debug(this.logPrefix + ' Emit focus event');\n this.focused.emit(event);\n return true;\n }\n return false;\n }\n\n clearValue(event: UIEvent) {\n this.writeValue(null);\n event.stopPropagation();\n }\n\n /* -- private method -- */\n\n private async suggest(value: any, filter: any): Promise<any[]> {\n // Call suggestion function\n let res = await this.suggestFn(value, filter);\n\n // DEBUG\n // console.debug(this.logPrefix + \" Filtered items by suggestFn:\", value, res);\n if (!res) {\n this._itemCount = 0;\n res = [];\n }\n else if (Array.isArray(res)) {\n res = res as any[];\n this._itemCount = res.length || 0;\n }\n else {\n const {data, total} = res as LoadResult<any>;\n res = data;\n this._itemCount = toNumber(total, data && data.length || 0) ;\n }\n\n // Filter out existing items\n const filteredData = (res || []).slice().filter(item1 => this.value.findIndex(item2 => this.compareWith(item1, item2)) === -1);\n\n // Update items count\n this._itemCount = this._itemCount - ((res?.length || 0) - (filteredData?.length || 0));\n\n if (this.debug) console.debug(this.logPrefix + ' Filtered items by suggestFn:', value, res);\n\n return res as any[];\n }\n\n private markForCheck() {\n this.cd.markForCheck();\n }\n}\n","import {NgModule} from '@angular/core';\nimport {MatChipsField} from './material.chips';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {CommonModule} from '@angular/common';\nimport {IonicModule} from '@ionic/angular';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {SharedPipesModule} from '../../pipes/pipes.module';\nimport {SharedDirectivesModule} from '../../directives/directives.module';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatSelectModule} from '@angular/material/select';\nimport {TranslateModule} from '@ngx-translate/core';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n ReactiveFormsModule,\n SharedPipesModule,\n SharedDirectivesModule,\n MatCommonModule,\n MatAutocompleteModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatSelectModule,\n MatChipsModule,\n TranslateModule.forChild(),\n ],\n declarations: [\n MatChipsField\n ],\n exports: [\n MatChipsField\n ]\n})\nexport class MaterialChipsModule {\n\n}\n","import {NgModule, Type} from '@angular/core';\nimport {CdkTableModule} from '@angular/cdk/table';\n\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatTableModule} from '@angular/material/table';\nimport {MatSortModule} from '@angular/material/sort';\nimport {MatPaginatorModule} from '@angular/material/paginator';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatExpansionModule} from '@angular/material/expansion';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatCardModule} from '@angular/material/card';\nimport {MatTabsModule} from '@angular/material/tabs';\nimport {MatStepperModule} from '@angular/material/stepper';\nimport {MatListModule} from '@angular/material/list';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatBadgeModule} from '@angular/material/badge';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {SharedMatAutocompleteModule} from './autocomplete/material.autocomplete.module';\nimport {SharedMatLatLongModule} from './latlong/material.latlong.module';\nimport {SharedMatDateTimeModule} from './datetime/datetime.module';\nimport {SharedMatDurationModule} from './duration/duration.module';\nimport {SharedMatBooleanModule} from './boolean/boolean.module';\nimport {SharedMatNumpadModule} from './numpad/numpad.module';\nimport {SharedMatSwipeModule} from './swipe/swipe.module';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MaterialChipsModule} from './chips/chips.module';\n\nconst modules: Array<Type<any> | any[]> = [\n // Angular material components\n MatCommonModule,\n MatTableModule,\n MatSortModule,\n MatPaginatorModule,\n MatFormFieldModule,\n MatInputModule,\n CdkTableModule,\n MatCheckboxModule,\n MatExpansionModule,\n MatToolbarModule,\n MatDialogModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatSelectModule,\n MatCardModule,\n MatTabsModule,\n MatListModule,\n MatStepperModule,\n MatButtonToggleModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatRadioModule,\n MatBadgeModule,\n MatSlideToggleModule,\n A11yModule, // Used for focus trap\n OverlayModule,\n ScrollingModule,\n MatRippleModule,\n MatDividerModule,\n MatTooltipModule,\n // Custom components\n SharedMatAutocompleteModule,\n SharedMatLatLongModule,\n SharedMatDateTimeModule,\n SharedMatDurationModule,\n SharedMatBooleanModule,\n SharedMatNumpadModule,\n SharedMatSwipeModule,\n MaterialChipsModule\n];\n\n@NgModule({\n imports: modules,\n exports: modules\n})\nexport class SharedMaterialModule {\n}\n\n","import {EventEmitter, Injectable} from '@angular/core';\n\nexport declare type ProgressMode = 'determinate' | 'indeterminate' | 'buffer' | 'query' | 'none';\n\n@Injectable({providedIn: 'root'})\nexport class ProgressBarService {\n private _requestsRunning = 0;\n\n onProgressChanged = new EventEmitter<ProgressMode>();\n\n list(): number {\n return this._requestsRunning;\n }\n\n increase(): void {\n this._requestsRunning++;\n if (this._requestsRunning === 1) {\n this.onProgressChanged.emit('query');\n }\n }\n\n decrease(): void {\n if (this._requestsRunning > 0) {\n this._requestsRunning--;\n }\n if (this._requestsRunning === 0) {\n this.onProgressChanged.emit('none');\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HammerGestureConfig} from '@angular/platform-browser';\n\nexport const HAMMER_TAP_TIME = 250;\nexport const HAMMER_PRESS_TIME = 400; // Increase need for double tap (default: 251 ms)\n/**\n * @hidden\n * This class overrides the default Angular gesture config.\n *\n */\n@Injectable({providedIn: 'root'})\nexport class AppGestureConfig extends HammerGestureConfig {\n\n // Override HammerJS default settings\n overrides = <any>{\n press: {\n time: HAMMER_PRESS_TIME\n },\n pinch: {\n enable: false\n },\n rotate: {\n enable: false\n },\n // see https://hammerjs.github.io/recognizer-swipe/\n swipe: {\n threshold: 30, // Minimal distance required before recognizing.\n velocity: 0.4 //Minimal velocity required before recognizing, unit is in px per ms.\n }\n };\n\n buildHammer(element: HTMLElement) {\n\n // DEBUG\n console.debug('[gesture] Applying HammerJS config to ', element.tagName);\n\n const mc = new (<any>window).Hammer(element);\n\n for (const eventName in this.overrides) {\n if (eventName) mc.get(eventName).set(this.overrides[eventName]);\n }\n\n return mc;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input, OnDestroy,\n OnInit, Optional,\n Output,\n ViewChild\n} from '@angular/core';\nimport {ProgressBarService, ProgressMode} from '../services/progress-bar.service';\nimport {Router} from '@angular/router';\nimport {IonRouterOutlet, IonSearchbar} from '@ionic/angular';\nimport {isNotNil, isNotNilOrBlank, toBoolean} from '../functions';\nimport {debounceTime, distinctUntilChanged, startWith, tap} from 'rxjs/operators';\nimport {Observable} from 'rxjs';\nimport {HammerTapEvent} from '../gesture/hammer.utils';\nimport {HAMMER_PRESS_TIME} from '../gesture/gesture-config';\nimport {PredefinedColors} from '@ionic/core';\n\nexport abstract class ToolbarToken {\n abstract onBackClick: Observable<Event>;\n abstract doBackClick(event: Event);\n abstract goBack(): Promise<void>;\n abstract canGoBack: boolean;\n}\n\n@Component({\n selector: 'app-toolbar',\n templateUrl: 'toolbar.html',\n styleUrls: ['./toolbar.scss'],\n providers: [\n {provide: ToolbarToken, useExisting: ToolbarComponent}\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ToolbarComponent implements ToolbarToken, OnInit, OnDestroy {\n\n private _closeTapCount = 0;\n private _validateTapCount = 0;\n private _defaultBackHref: string;\n private _backHref: string;\n\n @Input() title: String = '';\n\n @Input() color: PredefinedColors = 'primary';\n\n @Input()\n class = '';\n\n @Input() set backHref(value: string) {\n if (value !== this._backHref) {\n this._backHref = value;\n this.canGoBack = this.canGoBack || isNotNil(value);\n this.cd.markForCheck();\n }\n }\n\n get backHref(): string {\n return this._backHref;\n }\n\n @Input() set defaultBackHref(value: string) {\n if (value !== this._defaultBackHref) {\n this._defaultBackHref = value;\n this.canGoBack = this.canGoBack || isNotNil(value);\n this.cd.markForCheck();\n }\n }\n\n get defaultBackHref(): string {\n return this._defaultBackHref;\n }\n\n @Input() hasValidate = false;\n @Input() hasClose = false;\n @Input() hasSearch: boolean;\n @Input() canGoBack: boolean;\n @Input() canShowMenu = true;\n\n @Output() onValidate = new EventEmitter<Event>();\n @Output() onClose = new EventEmitter<Event>();\n @Output() onValidateAndClose = new EventEmitter<Event>();\n @Output() onBackClick = new EventEmitter<Event>();\n @Output() onSearch = new EventEmitter<CustomEvent>();\n\n progressBarMode$: Observable<ProgressMode>;\n showSearchBar = false;\n\n @ViewChild('searchbar', {static: true}) searchbar: IonSearchbar;\n\n constructor(\n private router: Router,\n private routerOutlet: IonRouterOutlet,\n private cd: ChangeDetectorRef,\n @Optional() progressBarService: ProgressBarService\n ) {\n\n // Listen progress bar service mode\n if (progressBarService) {\n this.progressBarMode$ = progressBarService.onProgressChanged\n .pipe(\n startWith<ProgressMode, ProgressMode>('none' as ProgressMode),\n tap((mode) => '[toolbar] Updating progressBarMode: ' + mode),\n debounceTime(100), // wait 100ms, to group changes\n distinctUntilChanged()\n );\n }\n }\n\n ngOnInit() {\n this.hasValidate = toBoolean(this.hasValidate, this.onValidate.observers.length > 0);\n this.canGoBack = toBoolean(this.canGoBack, this.routerOutlet.canGoBack()\n || isNotNilOrBlank(this._backHref)\n || isNotNilOrBlank(this._defaultBackHref));\n this.hasSearch = toBoolean(this.hasSearch, this.onSearch.observers.length > 0);\n }\n\n ngOnDestroy() {\n this.onBackClick.complete();\n this.onBackClick.unsubscribe();\n this.onValidate.complete();\n this.onValidate.unsubscribe();\n this.onClose.complete();\n this.onClose.unsubscribe();\n this.onValidateAndClose.complete();\n this.onValidateAndClose.unsubscribe();\n this.onSearch.complete();\n this.onSearch.unsubscribe();\n }\n\n async toggleSearchBar() {\n this.showSearchBar = !this.showSearchBar;\n if (this.showSearchBar && this.searchbar) {\n setTimeout(async () => {\n await this.searchbar.setFocus();\n }, 300);\n }\n }\n\n doBackClick(event: Event) {\n\n this.onBackClick.emit(event);\n\n // Stop propagation, if need (can be cancelled by onBackClick observers)\n if (event.defaultPrevented) return;\n\n // Execute the back action\n this.goBack();\n }\n\n async goBack(): Promise<void> {\n console.debug('[toolbar] calling goBack()');\n if (this._backHref) {\n await this.router.navigateByUrl(this._backHref);\n }\n else if (this.routerOutlet.canGoBack()) {\n await this.routerOutlet.pop();\n }\n else if (this._defaultBackHref) {\n await this.router.navigateByUrl(this._defaultBackHref);\n }\n else {\n console.error('[toolbar] Cannot go back. Missing attribute \\'defaultBackHref\\' or \\'backHref\\'');\n }\n }\n\n tapClose(event: HammerTapEvent) {\n // DEV only\n // console.debug(\"[toolbar] tapClose\", event.tapCount);\n if (this._validateTapCount > 0) return;\n\n // Distinguish simple and double tap\n this._closeTapCount = event.tapCount;\n setTimeout(() => {\n // Event is obsolete (a new tap event occur)\n if (event.tapCount < this._closeTapCount) {\n // Ignore event\n }\n\n // If event still the last tap event: process it\n else {\n this.onClose.emit(event.srcEvent || event);\n\n // Reset tab count\n this._closeTapCount = 0;\n }\n }, 500);\n }\n\n tapValidate(event: HammerTapEvent) {\n // DEV only\n //console.debug(\"[toolbar] tapValidate\", event.tapCount);\n\n if (!this.onValidateAndClose.observers.length) {\n this.onValidate.emit(event.srcEvent || event);\n }\n\n // Distinguish simple and double tap\n else {\n this._validateTapCount = event.tapCount;\n setTimeout(() => {\n // Event is obsolete (a new tap event occur)\n if (event.tapCount < this._validateTapCount) {\n // Ignore event\n }\n\n // If event still the last tap event: process it\n else {\n if (this._validateTapCount === 1) {\n this.onValidate.emit(event.srcEvent || event);\n }\n else if (this._validateTapCount >= 2) {\n this.onValidateAndClose.emit(event.srcEvent || event);\n }\n\n // Reset tab count\n this._validateTapCount = 0;\n }\n }, HAMMER_PRESS_TIME+10);\n }\n }\n}\n","\nimport { TranslateService } from '@ngx-translate/core';\nimport {MatPaginatorIntl} from '@angular/material/paginator';\nimport {Injectable} from '@angular/core';\n\n@Injectable({providedIn: 'root'})\nexport class MatPaginatorI18n extends MatPaginatorIntl {\n itemsPerPageLabel = 'Items per page';\n nextPageLabel = 'Next page';\n previousPageLabel = 'Previous page';\n getRangeLabel = function(page, pageSize, length) {\n const of = this.translate ? this.translate.instant('COMMON.PAGINATOR.OF') : 'of';\n if (length === 0 || pageSize === 0) {\n return '0 ' + of + ' ' + length;\n }\n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ?\n Math.min(startIndex + pageSize, length) :\n startIndex + pageSize;\n return startIndex + 1 + ' - ' + endIndex + ' ' + of + ' ' + length;\n };\n\n constructor(private translate: TranslateService) {\n super();\n this.translate = translate;\n\n translate.onLangChange.subscribe(() => this.translateLabels());\n\n this.translateLabels();\n }\n\n private translateLabels() {\n //console.debug(\"[i18n] Update pagination translations\");\n this.itemsPerPageLabel = this.translate.instant('COMMON.PAGINATOR.ITEMS_PER_PAGE');\n this.nextPageLabel = this.translate.instant('COMMON.PAGINATOR.NEXT_PAGE');\n this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');\n }\n\n}\n","import {catchError, tap} from 'rxjs/operators';\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {ProgressBarService} from '../services/progress-bar.service';\n\nexport class ProgressInterceptor implements HttpInterceptor {\n constructor(private progressBarService: ProgressBarService) {\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n this.progressBarService.increase();\n return next.handle(req)\n .pipe(\n tap(event => {\n if (event instanceof HttpResponse) {\n this.progressBarService.decrease();\n }\n }),\n catchError((err, event) => {\n this.progressBarService.decrease();\n throw err;\n }));\n }\n}\n","import {isNil, isNotNil} from '../functions';\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return '#' + componentToHex(r) + componentToHex(g) + componentToHex(b);\n}\n\nexport function rgbArrayToHex(rgb: number[]): string {\n return '#' + componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]);\n}\n\nexport function hexToRgbArray(hex: string): number[] {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16)\n ] : null;\n}\n\nexport function hexToRgb(hex: string): {r: number; g: number; b: number} {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n}\n\nfunction componentToHex(c: number): string {\n const hex = c.toString(16);\n return hex.length === 1 ? ('0' + hex) : hex;\n}\n\n// See mix in file ionic.functions.color.scss\nexport function mixHex(color1: string, color2: string, weight?: number) {\n\n weight = weight ? (weight / 100) : 0.5;\n\n const rgb1 = hexToRgbArray(color1);\n if (!rgb1) throw Error('Invalid hex color:' + color1);\n\n const rgb2 = hexToRgbArray(color2);\n if (!rgb2) throw Error('Invalid hex color:' + color2);\n\n const rgbAverage = rgb1.map((v, index) => Math.round((v * weight + rgb2[index] * (1 - weight))) );\n return rgbArrayToHex(rgbAverage);\n}\n\n// 12% darker version of the base color (mix with black)\nexport function getColorShade(color: string) {\n return mixHex('#000000', color, 12);\n}\n\n// 10% lighter version of the base color (mix with white)\nexport function getColorTint(color: string) {\n return mixHex('#ffffff', color, 10);\n}\n\n/**\n *\n * @param color\n * @param bw if true, will use black or white color, instead of the exact inverse\n */\nexport function getColorContrast(color: string, bw?: boolean) {\n const rgb = hexToRgbArray(color);\n if (!rgb) throw Error('Invalid hex color:' + color);\n\n if (bw === true) {\n // http://stackoverflow.com/a/3943023/112731\n return (rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114) > 186\n ? '#000000'\n : '#FFFFFF';\n }\n\n return rgbArrayToHex(rgb.map(v => 255 - v));\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef, InjectionToken, Injector,\n Input,\n OnInit,\n Optional,\n Output,\n ViewChild\n} from '@angular/core';\nimport {ControlValueAccessor, FormControl, FormGroupDirective, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {FloatLabelType} from '@angular/material/form-field';\nimport {isNilOrBlank, isNotNilOrBlank, joinPropertiesPath, toBoolean} from '../functions';\nimport { DisplayFn, FormFieldDefinition, FormFieldType } from './field.model';\nimport {TranslateService} from '@ngx-translate/core';\nimport {getColorContrast} from '../graph/colors.utils';\nimport {asInputElement, filterNumberInput, selectInputContent} from '../inputs';\nimport {toDateISOString} from '../dates';\n\nconst noop = () => {\n};\n\n@Component({\n selector: 'app-form-field',\n styleUrls: ['./field.component.scss'],\n templateUrl: './field.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AppFormField),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AppFormField implements OnInit, ControlValueAccessor {\n\n private _onChangeCallback: (_: any) => void = noop;\n private _onTouchedCallback: () => void = noop;\n private _definition: FormFieldDefinition;\n\n type: FormFieldType;\n numberInputStep: string;\n\n @Input()\n set definition(value: FormFieldDefinition) {\n if (this._definition === value) return;\n this._definition = value;\n this.type = value?.type;\n this.cd.markForCheck();\n }\n\n get definition(): FormFieldDefinition {\n return this._definition;\n }\n\n @Input() required: boolean;\n @Input() readonly = false;\n @Input() disabled: boolean;\n @Input() formControl: FormControl;\n @Input() formControlName: string;\n @Input() placeholder: string;\n @Input() compact = false;\n @Input() floatLabel: FloatLabelType = 'auto';\n @Input() tabindex: number;\n @Input() autofocus: boolean;\n\n @Input('class') classList: string;\n\n @Output('keyup.enter')\n onKeyupEnter = new EventEmitter<any>();\n\n get value(): any {\n return this.formControl.value;\n }\n\n @ViewChild('matInput') matInput: ElementRef;\n\n constructor(\n protected translate: TranslateService,\n protected cd: ChangeDetectorRef,\n protected injector: Injector,\n @Optional() private formGroupDir: FormGroupDirective\n ) {\n\n }\n\n ngOnInit() {\n\n if (!this._definition) throw new Error('Missing mandatory attribute \\'definition\\' in <app-form-field>.');\n if (typeof this._definition !== 'object') throw new Error('Invalid attribute \\'definition\\' in <app-form-field>. Should be an object.');\n if (!this.type) throw new Error('Invalid attribute \\'definition\\' in <app-form-field>. Missing type !');\n\n this.checkAndResolveFormControl();\n\n this.placeholder = this.placeholder || (this._definition.label && this.translate.instant(this._definition.label));\n this.required = toBoolean(this.required, toBoolean(this._definition.required, false));\n this.disabled = toBoolean(this.disabled, toBoolean(this._definition.disabled, false));\n\n this.updateTabIndex();\n\n if (this.type === 'double') {\n this.numberInputStep = this.computeNumberInputStep(this._definition);\n } else if (this.type === 'enum' && this._definition.values instanceof InjectionToken) {\n this._definition.values = this.computeValuesFromToken(this._definition.values);\n }\n }\n\n writeValue(obj: any): void {\n if ((this.type === 'integer' || this.type === 'double') && Number.isNaN(obj)) {\n //console.log(\"WARN: trying to set NaN value, in a config option field ! \" + this.constructor.name);\n obj = null;\n }\n else if (this.type === 'boolean' && typeof obj === 'string') {\n obj = (obj !== 'false');\n }\n else if (this.type === 'date') {\n obj = toDateISOString(obj);\n }\n else if (this.type === 'entity' && isNilOrBlank(obj)) {\n obj = null;\n }\n if (obj !== this.formControl.value) {\n //console.debug(\"Set config value \", this.formControl.value, obj);\n this.formControl.patchValue(obj, {emitEvent: false});\n this._onChangeCallback(obj);\n }\n\n this.cd.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.disabled === isDisabled) return;\n this.disabled = isDisabled;\n this.cd.markForCheck();\n }\n\n public markAsTouched() {\n if (this.formControl.touched) {\n this.cd.markForCheck();\n this._onTouchedCallback();\n }\n }\n\n filterAlphanumericalInput(event: KeyboardEvent) {\n if (event.keyCode === 13 /*=Enter*/ && this.onKeyupEnter.observers.length) {\n this.onKeyupEnter.emit(event);\n return;\n }\n // Add features (e.g. check against a pattern)\n }\n\n focus() {\n if (this.matInput) this.matInput.nativeElement.focus();\n }\n\n filterNumberInput = filterNumberInput;\n selectInputContent = selectInputContent;\n\n getDisplayValueFn(definition: FormFieldDefinition): DisplayFn {\n if (definition.autocomplete && definition.autocomplete.displayWith) {\n return (obj: any) => definition.autocomplete.displayWith(obj);\n }\n const attributes = definition.autocomplete && definition.autocomplete.attributes || ['label', 'name'];\n return (obj: any) => obj && joinPropertiesPath(obj, attributes);\n }\n\n getColorContrast(color: string): string | undefined {\n return isNotNilOrBlank(color) ? getColorContrast(color, true) : undefined;\n }\n\n /* -- protected method -- */\n\n protected computeNumberInputStep(definition: FormFieldDefinition): string {\n\n if (definition.maximumNumberDecimals > 0) {\n let step = '0.';\n if (definition.maximumNumberDecimals > 1) {\n for (let i = 0; i < definition.maximumNumberDecimals - 1; i++) {\n step += '0';\n }\n }\n step += '1';\n return step;\n } else {\n return '1';\n }\n }\n\n protected computeValuesFromToken(token: InjectionToken<any>): any[] {\n const values = this.injector.get(token);\n return values instanceof Array ? values : [];\n }\n\n protected checkAndResolveFormControl() {\n if (this.formControl) return; // OK, there is a control\n\n if (this.formGroupDir) {\n // Try to find using definition.key, as formControlName\n if (!this.formControlName && this._definition.key) {\n this.formControlName = this._definition.key;\n }\n const formControlName = (this.formGroupDir.directives || []).find(d => this.formControlName && d.name === this.formControlName);\n this.formControl = formControlName && formControlName.control;\n if (!this.formControl) {\n this.formControl = this.formGroupDir.form.get(this.formControlName) as FormControl;\n }\n }\n\n if (!this.formControl) {\n throw new Error('Missing attribute \\'formControl\\' or \\'formControlName\\' in <app-form-field> component.');\n }\n }\n\n protected updateTabIndex() {\n if (this.tabindex && this.tabindex !== -1) {\n setTimeout(() => {\n const element = asInputElement(this.matInput);\n if (element) {\n element.tabIndex = this.tabindex;\n this.cd.markForCheck();\n }\n });\n }\n }\n}\n","import {Optional} from '@angular/core';\nimport {Subject, Subscription} from 'rxjs';\n\nexport interface IStartableService<T = any> {\n started: boolean;\n start(): Promise<T>;\n stop(): Promise<void>;\n ready(): Promise<T>;\n}\n\nexport abstract class StartableService<T = any> implements IStartableService<T> {\n\n onStart = new Subject<T>();\n\n protected _debug = false;\n protected _data: T = null;\n\n private _started = false;\n private _startPromise: Promise<T>;\n private _startPrerequisite: () => Promise<any>;\n\n protected constructor(\n @Optional() platform: { ready: () => Promise<any> }\n ) {\n this._startPrerequisite = platform\n ? () => platform.ready()\n : () => Promise.resolve();\n }\n\n start(): Promise<T> {\n if (this._startPromise) return this._startPromise;\n if (this._started) return Promise.resolve(this._data);\n\n this._startPromise = this._startPrerequisite()\n .then(() => this.ngOnStart())\n .then(data => {\n this._data = data;\n\n this._started = true;\n this._startPromise = undefined;\n\n this.onStart.next(this._data);\n\n return this._data;\n })\n .catch(err => {\n console.error('Failed to start a service: ' + (err && err.message || err), err);\n this._started = false;\n this._startPromise = null;\n return null;\n });\n return this._startPromise;\n }\n\n\n async stop() {\n try {\n await this.ngOnStop();\n this._started = false;\n this._startPromise = undefined;\n }\n catch (err) {\n console.error('Failed to stop a service: ' + (err && err.message || err), err);\n }\n }\n\n async restart(): Promise<T> {\n if (this._startPromise) await this._startPromise; // Wait end of previous loading\n if (this._started) await this.stop(); // Then stop if started\n return this.start(); // Then start again\n }\n\n get started(): boolean {\n return this._started;\n }\n\n get starting(): boolean {\n return !!this._startPromise;\n }\n\n ready(): Promise<T> {\n if (this._started) return Promise.resolve(this._data);\n return this.start();\n }\n\n protected async ngOnStop(): Promise<void> {\n // Can be override by subclasses\n }\n\n protected abstract ngOnStart(): Promise<T>;\n}\n","import {Injectable, Optional} from '@angular/core';\nimport {NativeAudio} from '@ionic-native/native-audio/ngx';\nimport {Vibration} from '@ionic-native/vibration/ngx';\nimport {Platform} from '@ionic/angular';\nimport {AudioManagement} from '@ionic-native/audio-management/ngx';\nimport {Subject} from 'rxjs';\nimport {isNil, toBoolean} from '../functions';\nimport {StartableService} from '../services/startable-service.class';\n\nexport type AudioType = 'html5' | 'native';\nexport interface Sound {\n id: string;\n assetPath: string;\n vibration?: number|number[];\n}\n\nconst SYSTEM_SOUNDS: Sound[] = [\n {id: 'beep-confirm', assetPath: 'assets/audio/beep-confirm.mp3', vibration: 250},\n {id: 'beep-error', assetPath: 'assets/audio/beep-error.mp3', vibration: 1000},\n {id: 'startup', assetPath: 'assets/audio/unfa-ping.mp3', vibration: [1, 500, 250, 750]},\n];\n\n@Injectable({providedIn: 'root'})\nexport class AudioProvider extends StartableService<void> {\n\n private _audioType: AudioType;\n private _audioMode: AudioManagement.AudioMode = AudioManagement.AudioMode.NORMAL;\n\n private _preloadedSounds: {[id: string]: Sound} = {};\n private _htmlAudioCache: {[id: string]: HTMLAudioElement} = {};\n\n constructor(\n protected platform: Platform,\n @Optional() private nativeAudio: NativeAudio,\n @Optional() private vibration: Vibration,\n @Optional() private audioManagement: AudioManagement\n ) {\n super(platform);\n\n this.start();\n }\n\n playBeepConfirm(): Promise<any> {\n return this.play('beep-confirm', {\n // Vibrate only if in vibration mode\n vibrate: this._audioMode === AudioManagement.AudioMode.VIBRATE\n });\n }\n\n playBeepError(): Promise<any> {\n return this.play('beep-error', {\n // Vibrate only if in vibration mode\n vibrate: true\n });\n }\n\n async playStartupSound(): Promise<any> {\n return this.play('startup');\n }\n\n async preload(sound: Sound) {\n if (isNil(this._audioType)) await this.ready();\n\n if (this._audioType === 'native') {\n console.info(`[audio] Preloading audio file '${sound.assetPath}'...`);\n try {\n await this.nativeAudio.preloadSimple(sound.id, sound.assetPath);\n console.info(`[audio] Preloading audio file '${sound.assetPath}' [OK]`);\n }\n catch (err) {\n console.error(`[audio] Unable to preload audio file '${sound.assetPath}': ${err && err.message || err}`, err);\n }\n }\n else {\n this._htmlAudioCache[sound.id] = new Audio(sound.assetPath);\n }\n\n // Add to map\n this._preloadedSounds[sound.id] = sound;\n }\n\n async play(id: string, opts?: {vibrate?: boolean; vibrationTimes?: number|number[]}) {\n\n // Make sure provider is ready\n if (!this.started) await this.ready();\n\n const sound = this._preloadedSounds[id];\n if (!sound) {\n throw Error('Unable to find audio with id: ' + id + '. Please call preload() before playing a sound.');\n }\n\n // If silent: skip\n if (this._audioMode === AudioManagement.AudioMode.SILENT) return;\n\n const promises: Promise<any>[] = [];\n\n // Normal mode = can play the sound\n if (this._audioMode === AudioManagement.AudioMode.NORMAL) {\n // Use native audio\n if (this._audioType === 'native') {\n promises.push(this.nativeAudio.play(sound.id));\n }\n // Or HTML 5 audio\n else {\n const audio = this._htmlAudioCache[id] || new Audio(sound.assetPath);\n promises.push(audio.play());\n }\n }\n\n // Vibrate mode: by default make vibration is enable\n else if (isNil(sound.vibration) && isNil(opts && opts.vibrate)) {\n opts = opts || {};\n opts.vibrate = true;\n }\n\n // Do vibration (if sound as default vibration, or if user ask for it)\n if (toBoolean(opts && opts.vibrate, !!sound.vibration)) {\n promises.push(this.vibrate(opts && opts.vibrationTimes || sound.vibration));\n }\n\n return (promises.length === 1 ? promises[0] : Promise.all(promises))\n .catch(err => {\n console.error(`[audio] Error while playing audio sound '${id}': ${err && err.message || err}`, err);\n });\n }\n\n async unload(id: string) {\n if (isNil(this._audioType)) await this.ready();\n\n // Remove from map\n this._preloadedSounds[id] = undefined;\n\n // Native unload\n if (this._audioType === 'native') {\n try {\n await this.nativeAudio.unload(id);\n }\n catch (err) {\n console.error(`[audio] Unable to unload audio '${id}': ${err && err.message || err}`, err);\n }\n }\n // HTML5 audio unload\n else {\n this._htmlAudioCache[id].remove();\n this._htmlAudioCache[id] = undefined;\n }\n }\n\n async vibrate(timeInMs?: number|number[]) {\n if (!this.started) await this.ready();\n\n if (!this.vibration) return; // Skip if vibrate plugin\n\n this.vibration.vibrate(timeInMs || 250);\n }\n\n /* -- protected methods -- */\n\n async ngOnStart(): Promise<void> {\n\n let cordova = this.platform.is('cordova');\n this._audioType = cordova && this.nativeAudio ? 'native' : 'html5';\n console.info(`[audio] Starting audio provider {${this._audioType}}...`);\n\n // Listen audio mode changed\n if (cordova && this.audioManagement) {\n await this.readAudioMode();\n }\n\n // Pre-loading system sounds\n console.debug('[audio] Preloading audio sounds...');\n await Promise.all(SYSTEM_SOUNDS.map(s => {\n // Disable vibration is cordova not enabled\n if (!cordova) s.vibration = undefined;\n return this.preload(s);\n }));\n }\n\n protected async readAudioMode() {\n const value = await this.audioManagement.getAudioMode();\n this._audioMode = value && value.audioMode || AudioManagement.AudioMode.NORMAL;\n console.debug(`[audio] Detected device audio mode {${value.label}} (${this._audioMode})`);\n }\n\n}\n","import { Component, OnInit, Inject } from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\n\n@Component({\n templateUrl: './hotkeys-dialog.component.html',\n styleUrls: ['./hotkeys-dialog.component.scss']\n})\nexport class HotkeysDialogComponent implements OnInit {\n hotkeys = Array.from(this.data);\n\n constructor(@Inject(MAT_DIALOG_DATA) protected data) { }\n\n ngOnInit() {\n }\n\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {EventManager} from '@angular/platform-browser';\nimport {Observable} from 'rxjs';\nimport {DOCUMENT} from '@angular/common';\nimport {MatDialog} from '@angular/material/dialog';\nimport {HotkeysDialogComponent} from './dialog/hotkeys-dialog.component';\nimport {isNotNilOrBlank} from '../functions';\nimport {ModalController} from '@ionic/angular';\n\ninterface Options {\n element: any;\n elementName: string;\n description: string | undefined;\n keys: string;\n preventDefault: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Hotkeys {\n\n private _debug = false;\n private _hotkeys = new Map();\n\n private _defaults: Partial<Options> = {\n element: this.document,\n preventDefault: true\n };\n\n constructor(private eventManager: EventManager,\n private dialog: MatDialog,\n @Inject(DOCUMENT) private document: any,\n private modalController: ModalController) {\n if (this._debug) console.debug('[hotkeys] Starting hotkeys service... Press Shift+? to get help modal.');\n\n this.addShortcut({keys: 'shift.?'})\n .subscribe(() => this.openHelpModal());\n\n // For DEV only\n //this._debug = !environment.production;\n }\n\n addShortcut(options: Partial<Options>): Observable<UIEvent> {\n\n const merged = {...this._defaults, ...options};\n const event = `keydown.${merged.keys}`;\n\n if (isNotNilOrBlank(merged.description)) {\n if (this._debug) console.debug(`[hotkeys] Add shortcut {${options.keys}}: ${merged.description}`);\n this._hotkeys.set(merged.keys, merged.description);\n } else {\n if (this._debug) console.debug(`[hotkeys] Add shortcut {${options.keys}}`);\n }\n\n return new Observable(observer => {\n const handler = async (e: UIEvent) => {\n\n // Get top component from ModalController\n const top = await this.modalController.getTop();\n // If modal present, check its component name against hotkey element name (fix #181)\n if (top && top.component['name'] !== merged.elementName) return;\n\n if (e instanceof KeyboardEvent && e.repeat) return; // skip when repeated\n if (merged.preventDefault) e.preventDefault();\n if (this._debug) console.debug(`[hotkeys] Shortcut {${options.keys}} detected...`);\n observer.next(e);\n };\n\n const dispose = this.eventManager.addEventListener(merged.element, event, handler);\n\n return () => {\n dispose();\n this._hotkeys.delete(merged.keys);\n };\n });\n }\n\n openHelpModal() {\n this.dialog.open(HotkeysDialogComponent, {\n width: '500px',\n data: this._hotkeys\n });\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {Hotkeys} from './hotkeys.service';\nimport {HotkeysDialogComponent} from './dialog/hotkeys-dialog.component';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatCommonModule} from '@angular/material/core';\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n MatDialogModule,\n TranslateModule.forChild()\n ],\n exports: [\n HotkeysDialogComponent\n ],\n declarations: [\n HotkeysDialogComponent\n ],\n providers: [\n Hotkeys\n ]\n})\nexport class SharedHotkeysModule {\n}\n","import {isNilOrBlank} from '../functions';\n\nexport const IMAGE_DEFAULTS = {\n MAX_HEIGHT: 480,\n MAX_WIDTH: 640,\n THUMB_MAX_HEIGHT: 200,\n THUMB_MAX_WIDTH: 200\n};\n\nexport declare interface Base64ImageResizeOptions {\n maxWidth?: number;\n maxHeight?: number;\n thumbnail?: boolean;\n}\n\nexport class Base64ImageReader {\n\n constructor() {\n }\n\n async readFromBlob(file: any): Promise<string> {\n if (!file) throw new Error('Illegal argument: missing file');\n const dataUrl = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('load', (event) => resolve(reader.result as string), false);\n reader.readAsDataURL(file);\n });\n return dataUrl;\n }\n\n async readAndResizeFromUrl(path: string, opts?: Base64ImageResizeOptions): Promise<string> {\n if (isNilOrBlank(path)) throw new Error('Illegal argument: missing path');\n\n // Create the temporary image element\n const img = document.createElement('img');\n\n // Need to avoid CORS error\n // (see https://stackoverflow.com/questions/22710627/tainted-canvases-may-not-be-exported)\n img.crossOrigin = 'anonymous';\n\n try {\n return await new Promise<string>((resolve, reject) => {\n img.addEventListener('load', this.createImageOnLoadResizeFn(resolve, reject, opts), false);\n img.addEventListener('error', reject);\n img.src = path;\n });\n }\n catch (err) {\n throw new Error(`Failed to load and resize image {${path}}`);\n }\n finally {\n img.remove();\n }\n }\n\n async readAndResizeFromBlob(file: any, opts: Base64ImageResizeOptions): Promise<string> {\n if (!file) throw new Error('Illegal argument: missing file');\n\n // Create the temporary image element\n const img = document.createElement('img');\n\n // Need to avoid CORS error\n // (see https://stackoverflow.com/questions/22710627/tainted-canvases-may-not-be-exported)\n img.crossOrigin = 'anonymous';\n\n try {\n return await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('load', (event) => {\n // Resize image\n img.onload = this.createImageOnLoadResizeFn(resolve, reject, opts);\n img.src = reader.result as string;\n }, false);\n reader.readAsDataURL(file);\n });\n } finally {\n img.remove();\n }\n }\n\n /* -- protected methods -- */\n\n protected createImageOnLoadResizeFn(resolve, reject, opts?: Base64ImageResizeOptions) {\n return function(event) {\n const\n maxWidth = (opts && opts.thumbnail ? IMAGE_DEFAULTS.THUMB_MAX_WIDTH : (opts && opts.maxWidth || IMAGE_DEFAULTS.MAX_WIDTH));\n const maxHeight = (opts && opts.thumbnail ? IMAGE_DEFAULTS.THUMB_MAX_HEIGHT : (opts && opts.maxHeight || IMAGE_DEFAULTS.MAX_HEIGHT));\n let width = event.target.width;\n let height = event.target.height;\n\n const canvas = document.createElement('canvas');\n let ctx;\n\n try {\n // Thumbnail: resize and crop (to the expected size)\n if (opts && opts.thumbnail) {\n\n // landscape\n if (width > height) {\n width *= maxHeight / height;\n height = maxHeight;\n }\n\n // portrait\n else {\n height *= maxWidth / width;\n width = maxWidth;\n }\n canvas.width = maxWidth;\n canvas.height = maxHeight;\n ctx = canvas.getContext('2d');\n const xoffset = Math.trunc((maxWidth - width) / 2 + 0.5);\n const yoffset = Math.trunc((maxHeight - height) / 2 + 0.5);\n ctx.drawImage(event.target,\n xoffset, // x1\n yoffset, // y1\n maxWidth + -2 * xoffset, // x2\n maxHeight + -2 * yoffset // y2\n );\n }\n\n // Resize, but keep the full image\n else {\n\n // landscape\n if (width > height) {\n if (width > maxWidth) {\n height *= maxWidth / width;\n width = maxWidth;\n }\n }\n\n // portrait\n else {\n if (height > maxHeight) {\n width *= maxHeight / height;\n height = maxHeight;\n }\n }\n\n canvas.width = width;\n canvas.height = height;\n ctx = canvas.getContext('2d');\n\n // Resize the whole image\n ctx.drawImage(event.target, 0, 0, canvas.width, canvas.height);\n }\n\n // Get image content as data URL\n const base64 = canvas.toDataURL();\n resolve(base64);\n }\n catch (err) {\n reject(err);\n }\n finally {\n canvas.remove();\n }\n\n };\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {Platform} from '@ionic/angular';\nimport * as uuidv4Imported from 'uuid/v4';\nimport {Base64ImageReader, Base64ImageResizeOptions} from './base64-image-reader';\nimport {chainPromises, firstNotNilPromise} from '../observables';\nimport {HttpClient} from '@angular/common/http';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\n\nconst uuidv4 = uuidv4Imported;\n\n@Injectable({\n providedIn: 'root',\n deps: [\n Platform,\n HttpClient\n ]\n})\nexport class FileService {\n\n private readonly _debug: boolean;\n private _started = false;\n\n private _imageDirectory: string;\n\n get canUseFileSystem(): boolean {\n return false;\n // FIXME: seems not working well\n //return !!this.file.dataDirectory;\n }\n\n constructor(\n private platform: Platform,\n //private transfer: FileTransfer,\n //@Optional() private file: File,\n private http: HttpClient,\n @Inject(ENVIRONMENT) protected environment) {\n\n this._debug = !environment.production;\n\n platform.ready().then(() => this.start());\n }\n\n getImages(sources: string[], opts?: Base64ImageResizeOptions & {\n responseType?: 'file' | 'dataUrl';\n }): Promise<string[]> {\n if (!this._started) throw new Error('Platform must be started first!');\n\n //const fileTransfer = this.canUseFileSystem ? this.transfer.create() : undefined;\n //const jobsFactories = (sources || []).map(source => () => this.getImage(source, {...opts, fileTransfer}));\n\n const jobsFactories = (sources || []).map(source => () => this.getImage(source, {...opts}));\n return chainPromises<string>(jobsFactories);\n }\n\n async getImage(source: string, opts?: Base64ImageResizeOptions & {\n //fileTransfer?: FileTransferObject;\n responseType?: 'file' | 'dataUrl';\n }): Promise<string> {\n\n let responseType = opts && opts.responseType || (this.canUseFileSystem ? 'file' : 'dataUrl');\n\n const debug = this._debug /*&& (!opts || !opts.fileTransfer)*/;\n const now = debug && Date.now();\n if (debug) console.debug(`[file] Fetching image {${source}} into ${responseType}...`);\n\n // Read the filename\n const lastSlashIndex = source.lastIndexOf('/');\n if (lastSlashIndex === -1) throw new Error('Invalid URL: ' + source);\n const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();\n\n\n // Download into the file system\n if (responseType === 'file' && this.canUseFileSystem) {\n console.warn(`WARN: [file] Fetching image {${source}} in local file...`);\n const targetFilePath = this._imageDirectory + fileName;\n try {\n const blob: Blob = await firstNotNilPromise(this.http.get(source, {\n observe: 'body',\n responseType: 'blob',\n reportProgress: false\n }));\n console.debug('[file] Getting blob :' + blob.type);\n\n //await this.file.writeFile(this._imageDirectory, fileName, blob, {replace: true});\n\n //const fileTransfer = (opts && opts.fileTransfer) || this.transfer.create();\n //await fileTransfer.download(source, targetFilePath);\n if (debug) console.debug(`[file] Fetching image {${source}} into ${responseType} [OK] in ${Date.now() - now}ms`);\n return targetFilePath;\n }\n catch (err) {\n console.error(`[file] Error while download ${source}: ${err && err.message || err}`);\n\n // Continue (fallback to data Url)\n responseType = 'dataUrl';\n }\n }\n\n if (responseType === 'dataUrl') {\n // Get as data url (e.g. 'data:image/png:...')\n const dataUrl = await new Base64ImageReader().readAndResizeFromUrl(source, opts);\n if (debug) console.debug(`[file] Fetching image {${source}} into ${responseType} [OK] in ${Date.now() - now}ms`);\n return dataUrl;\n }\n\n // Keep original URL\n return source;\n }\n\n /* -- protected methods -- */\n\n protected start() {\n\n // File system exists\n if (this.canUseFileSystem) {\n //console.info(\"[file] Application directory: \", this.file.applicationDirectory);\n //console.info(\"[file] Application storage directory: \", this.file.applicationStorageDirectory);\n //console.info(\"[file] Data directory: \", this.file.dataDirectory);\n\n // this.file.createDir(this.file.dataDirectory, 'images', false)\n // .then((dir) => {\n // this._imageDirectory = this.file.dataDirectory + 'images/';\n // console.info(\"[file] Images directory: \", dir.fullPath);\n // })\n // .catch(err => {\n // console.error(\"[file] Cannot create the images directory: \" + (this.file.dataDirectory + 'images/ : ' + (err && err.message || err)));\n // this._imageDirectory = this.file.dataDirectory;\n // });\n }\n\n this._started = true;\n }\n\n}\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {toBoolean} from '../functions';\nimport {Subscription} from 'rxjs';\nimport {Hotkeys} from '../hotkeys/hotkeys.service';\nimport {IconRef} from '../types';\n\n@Component({\n selector: 'app-modal-toolbar',\n templateUrl: 'modal-toolbar.html',\n styleUrls: ['./modal-toolbar.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ModalToolbarComponent implements OnInit, OnDestroy {\n\n private _subscription = new Subscription();\n\n @Input()\n modalName = 'modal-toolbar';\n\n @Input()\n title = '';\n\n @Input()\n color = 'primary';\n\n @Input()\n showSpinner = false;\n\n @Input()\n canValidate: boolean;\n\n @Input() validateIcon: IconRef = {icon: 'checkmark'};\n\n @Output()\n cancel = new EventEmitter<UIEvent>();\n\n @Output()\n validate = new EventEmitter<UIEvent>();\n\n constructor(private hotkeys: Hotkeys) {}\n\n ngOnInit() {\n this.canValidate = toBoolean(this.canValidate, this.validate.observers.length > 0);\n\n // Escape\n this._subscription.add(\n this.hotkeys.addShortcut({keys: 'escape', description: 'COMMON.BTN_CLOSE', elementName: this.modalName})\n .subscribe((event) => this.cancel.emit(event)));\n\n }\n\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\n\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'app-loading-spinner',\n template: `\n <ion-spinner *ngIf=\"loading; else content\" [color]=\"color\" [name]=\"name\"></ion-spinner>\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n `\n})\nexport class AppLoadingSpinner {\n @Input() loading = false;\n @Input() color: string | undefined = 'secondary';\n @Input() name: 'bubbles' | 'circles' | 'circular' | 'crescent' | 'dots' | 'lines' | 'lines-small' | undefined;\n}\n","// Base58 encoding/decoding\n// Originally written by Mike Hearn for BitcoinJ\n// Copyright (c) 2011 Google Inc\n// Ported to JavaScript by Stefan Thomas\n// Merged Buffer refactorings from base58-native by Stephen Pair\n// Copyright (c) 2013 BitPay Inc\n// Rewritten in TypeScript by Ludovic Pecquot\n\n// @dynamic\nexport class Base58 {\n\n private static alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n private static alphabetMap;\n\n private static getAlphabetMap() {\n if (!Base58.alphabetMap){\n this.alphabetMap = {};\n for (let i = 0; i < Base58.alphabet.length; i++) {\n Base58.alphabetMap[Base58.alphabet.charAt(i)] = i;\n }\n }\n return Base58.alphabetMap;\n }\n\n public static encode(buffer: Uint8Array): string {\n if (buffer.length === 0) return '';\n\n let i; let j; const digits = [0];\n for (i = 0; i < buffer.length; i++) {\n for (j = 0; j < digits.length; j++) digits[j] <<= 8;\n digits[digits.length - 1] += buffer[i];\n\n let carry = 0;\n for (j = digits.length - 1; j >= 0; j--){\n digits[j] += carry;\n carry = (digits[j] / 58) | 0;\n digits[j] %= 58;\n }\n\n while (carry) {\n digits.unshift(carry);\n carry = (digits[0] / 58) | 0;\n digits[0] %= 58;\n }\n }\n\n // deal with leading zeros\n for (i = 0; i < buffer.length - 1 && buffer[i] === 0; i++) digits.unshift(0);\n\n return digits.map(function(digit) { return Base58.alphabet[digit]; }).join('');\n }\n\n public static decode(string: string): Uint8Array {\n if (string.length === 0) return (new Uint8Array());\n\n const input = string.split('').map(function(c){\n return Base58.getAlphabetMap()[c];\n });\n\n let i; let j; const bytes = [0];\n for (i = 0; i < input.length; i++) {\n for (j = 0; j < bytes.length; j++) bytes[j] *= 58;\n bytes[bytes.length - 1] += input[i];\n\n let carry = 0;\n for (j = bytes.length - 1; j >= 0; j--){\n bytes[j] += carry;\n carry = bytes[j] >> 8;\n bytes[j] &= 0xff;\n }\n\n while (carry) {\n bytes.unshift(carry);\n carry = bytes[0] >> 8;\n bytes[0] &= 0xff;\n }\n }\n\n // deal with leading zeros\n for (i = 0; i < input.length - 1 && input[i] === 0; i++) bytes.unshift(0);\n return (new Uint8Array(bytes));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {box, sign, verify, hash} from 'tweetnacl';\nimport {Base58} from './base58';\n\nconst scrypt = require('scrypt-async');\nconst sha256 = require('hash.js/lib/hash/sha/256');\nconst sha512 = require('hash.js/lib/hash/sha/512');\n\nconst nacl = {\n sign,\n box,\n hash,\n verify,\n util: require('tweetnacl-util'),\n constants: {\n crypto_sign_BYTES: 64,\n SEED_LENGTH: 32, // Length of the key\n SCRYPT_PARAMS: {\n SIMPLE: {\n N: 2048,\n r: 8,\n p: 1,\n memory: -1 // default\n },\n DEFAULT: {\n N: 4096,\n r: 16,\n p: 1,\n memory: -1 // default\n },\n SECURE: {\n N: 16384,\n r: 32,\n p: 2,\n memory: -1 // default\n },\n HARDEST: {\n N: 65536,\n r: 32,\n p: 4,\n memory: -1 // default\n },\n EXTREME: {\n N: 262144,\n r: 64,\n p: 8,\n memory: -1 // default\n }\n }\n }\n};\n\nexport interface CryptoSaltParams {\n N: number;\n r: number;\n p: number;\n}\nexport interface KeyPair {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n}\n\n@Injectable({providedIn: 'root'})\nexport class CryptoService {\n\n /**\n * Generate sign keypair, sugin scrypt, from a salt and a password\n *\n * @param salt\n * @param password\n * @param scryptParams\n */\n public scryptKeypair(salt: string, password: string, scryptParams?: CryptoSaltParams): Promise<KeyPair> {\n\n return new Promise((resolve) => {\n scrypt(password, salt, {\n N: scryptParams && scryptParams.N || nacl.constants.SCRYPT_PARAMS.DEFAULT.N,\n r: scryptParams && scryptParams.r || nacl.constants.SCRYPT_PARAMS.DEFAULT.r,\n p: scryptParams && scryptParams.p || nacl.constants.SCRYPT_PARAMS.DEFAULT.p,\n dkLen: nacl.constants.SEED_LENGTH,\n encoding: 'base64'\n }, function(derivedKey) {\n resolve(derivedKey);\n });\n })\n .then((seed) => {\n const byteseed = nacl.util.decodeBase64(seed);\n const signKeypair = nacl.sign.keyPair.fromSeed(byteseed);\n return {\n publicKey: signKeypair.publicKey,\n secretKey: signKeypair.secretKey\n };\n });\n }\n\n /**\n * Sign a message, from a key pair\n */\n public sign(message: string, keypair: KeyPair): Promise<string> {\n return new Promise((resolve) => {\n const m = nacl.util.decodeUTF8(message);\n const signedMsg = nacl.sign(m, keypair.secretKey);\n const sig = new Uint8Array(nacl.constants.crypto_sign_BYTES);\n for (let i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n const signature = nacl.util.encodeBase64(sig);\n resolve(signature);\n });\n }\n\n /**\n * Sign a message, from a key pair\n */\n public verify(message: string, signature: string, pubkey: string): Promise<boolean> {\n return new Promise((resolve) => {\n const m = nacl.util.decodeUTF8(message);\n const sig = nacl.util.decodeBase64(signature);\n const pub = Base58.decode(pubkey);\n const res = nacl.sign.detached.verify(m, sig, pub);\n resolve(res);\n });\n }\n\n /**\n * Hash (using SHA256) a message\n */\n sha256(message: string): string {\n return sha256().update(message).digest('hex');\n }\n\n /**\n * Hash (using SHA512) a message\n */\n sha512(message: string): string {\n return sha512().update(message).digest('hex');\n }\n\n encodeBase64(message: string): string {\n const m = nacl.util.decodeUTF8(message);\n return nacl.util.encodeBase64(m);\n }\n}\n","import { Moment } from 'moment';\nimport { isEmptyArray, isNil, isNilOrBlank, isNotNil, joinPropertiesPath } from '../../../shared/functions';\nimport { FilterFn } from '../../../shared/services/entity-service.class';\nimport { ObjectMap, ObjectMapEntry, PropertiesArray, PropertiesMap } from '../../../shared/types';\nimport { StoreObject } from '@apollo/client/core';\nimport { fromDateISOString, toDateISOString } from '../../../shared/dates';\n\n\nexport declare interface Cloneable<T> {\n clone(): T;\n}\n\nexport function entityToString(obj: Entity<any> | any, properties?: string[]): string | undefined {\n return obj && obj.id && joinPropertiesPath(obj, properties || ['name']) || undefined;\n}\n\nexport interface EntityAsObjectOptions {\n minify?: boolean;\n keepTypename?: boolean; // true by default\n keepLocalId?: boolean; // true by default\n}\n\nexport interface IEntity<T,\n ID = number,\n AO extends EntityAsObjectOptions = EntityAsObjectOptions,\n FO = any\n >\n extends Cloneable<T> {\n id: ID;\n updateDate: Moment;\n __typename: string;\n equals(other: T): boolean;\n clone(opts?: AO & FO): T;\n copy(target: T, opts?: AO & FO);\n asObject(opts?: AO): any;\n fromObject(source: any, opts?: FO);\n}\n\nexport declare interface ITreeItemEntity<\n T extends IEntity<T, ID>,\n ID = number\n > {\n parentId: ID;\n parent: T;\n children: T[];\n}\n\n//@dynamic\nexport abstract class Entity<\n T extends Entity<T, ID, AO, FO>,\n ID = number,\n AO extends EntityAsObjectOptions = EntityAsObjectOptions,\n FO = any>\n implements IEntity<T, ID, AO, FO> {\n\n // The GraphQL typename (injected by @EntityClass())\n static TYPENAME: string;\n\n id: ID = null;\n updateDate: Moment = null;\n __typename: string;\n\n constructor(__typename?: string) {\n this.__typename = __typename || null;\n }\n\n clone(opts?: AO & FO): T {\n const target = new (this.constructor as any)() as T;\n this.copy(target, opts);\n return target;\n }\n\n copy(target: T, opts?: AO & FO) {\n target.fromObject(this.asObject(opts), opts);\n }\n\n asObject(opts?: AO): StoreObject {\n const target: any = Object.assign({}, this); //= {...this};\n if (!opts || opts.keepTypename !== true) delete target.__typename;\n if (target.id == null || (opts && opts.keepLocalId === false && target.id < 0)) delete target.id;\n target.updateDate = toDateISOString(this.updateDate);\n return target;\n }\n\n fromObject(source: any, opts?: FO) {\n this.id = (source.id || source.id === 0) ? source.id : undefined;\n this.updateDate = fromDateISOString(source.updateDate);\n this.__typename = source.__typename || this.__typename; // Keep original type (can be set in constructor)\n }\n\n equals(other: T): boolean {\n return other && this.id === other.id;\n }\n}\n\n/**\n * @deprecated use standard instanceof instead\n * @param obj\n * @param constructor\n */\nexport function isInstanceOf<T>(obj: any, constructor: new (...args: any[]) => T): obj is T {\n if (!obj) return false;\n\n return obj instanceof constructor;\n}\n\n// @dynamic\nexport abstract class EntityUtils {\n\n // Check that the object has a NOT nil attribute (ID by default)\n static isNotEmpty<T extends IEntity<any> | any>(obj: any | T, checkedAttribute: keyof T): boolean {\n return !!obj && obj[checkedAttribute] !== null && obj[checkedAttribute] !== undefined;\n }\n\n static isEmpty(obj: any | IEntity<any>, checkedAttribute: string): boolean {\n return !obj || obj[checkedAttribute] === null || obj[checkedAttribute] === undefined;\n }\n\n static equals<T extends IEntity<any>|any>(o1: T, o2: T, checkAttribute?: keyof T): boolean {\n checkAttribute = checkAttribute || 'id' as keyof T;\n return (o1 === o2) || (isNil(o1) && isNil(o2)) || (o1 && o2 && o1[checkAttribute] === o2[checkAttribute]);\n }\n\n static getPropertyByPath(obj: any | IEntity<any>, path: string): any {\n if (isNil(obj)) return undefined;\n const i = path.indexOf('.');\n if (i === -1) {\n return obj[path];\n }\n const key = path.substring(0, i);\n if (isNil(obj[key])) return undefined;\n if (obj[key] && typeof obj[key] === 'object') {\n return EntityUtils.getPropertyByPath(obj[key], path.substring(i + 1));\n }\n throw new Error(`Invalid form path: '${key}' is not an valid object.`);\n }\n\n static getArrayAsMap<T = any>(source?: ObjectMapEntry<T>[]): ObjectMap<T> {\n return (source || []).reduce((res, item) => {\n res[item.key] = item.value;\n return res;\n }, {});\n }\n\n static getMapAsArray<T = any>(source?: ObjectMap<T>): ObjectMapEntry<T>[] {\n if (source instanceof Array) return source;\n return Object.getOwnPropertyNames(source || {})\n .map(key => ({\n key,\n value: source[key]\n }));\n }\n\n static getPropertyArrayAsObject(source?: PropertiesArray): PropertiesMap {\n return (source || []).reduce((res, item) => {\n res[item.key] = item.value;\n return res;\n }, {});\n }\n\n static copyIdAndUpdateDate<T extends Entity<any, any, any>>(source: T, target: T) {\n if (!source) return;\n\n // Update (id and updateDate)\n target.id = isNotNil(source.id) ? source.id : target.id;\n target.updateDate = fromDateISOString(source.updateDate) || target.updateDate;\n\n // Update creation Date, if exists\n if (source['creationDate']) {\n target['creationDate'] = fromDateISOString(source['creationDate']);\n }\n }\n\n\n static async fillLocalIds<T extends IEntity<T>>(items: T[], sequenceFactory: (firstEntity: T, incrementSize: number) => Promise<number>) {\n const newItems = (items || []).filter(item => isNil(item.id) || item.id === 0);\n if (isEmptyArray(newItems)) return;\n // Get the sequence\n let currentId = await sequenceFactory(newItems[0], newItems.length) + 1;\n // Take the min (sequence, id), in case the sequence is corrupted\n currentId = items.filter(item => isNotNil(item.id) && item.id < 0).reduce((res, item) => Math.min(res, item.id), currentId);\n newItems.forEach(item => item.id = --currentId);\n }\n\n static cleanIdAndUpdateDate<T extends IEntity<T>>(source: T) {\n if (!source) return; // Skip\n source.id = null;\n source.updateDate = null;\n }\n\n static cleanIdsAndUpdateDates<T extends IEntity<T>>(items: T[]) {\n (items || []).forEach(EntityUtils.cleanIdAndUpdateDate);\n }\n\n static sort<T extends IEntity<T> | any>(data: T[], sortBy?: string, sortDirection?: string): T[] {\n return data.sort(this.sortComparator(sortBy, sortDirection));\n }\n\n static sortComparator<T extends IEntity<T> | any>(sortBy?: string, sortDirection?: string): (a: T, b: T) => number {\n const after = (!sortDirection || sortDirection === 'asc') ? 1 : -1;\n const property = sortBy || 'id';\n return (a, b) => {\n const valueA = EntityUtils.getPropertyByPath(a, property);\n const valueB = EntityUtils.getPropertyByPath(b, property);\n return EntityUtils.compare(valueA, valueB, after);\n };\n }\n\n static compare<T extends IEntity<any>>(value1: T, value2: T, direction: 1 | -1, checkAttribute?: keyof T): number {\n checkAttribute = checkAttribute || 'id';\n if (EntityUtils.isNotEmpty(value1, checkAttribute) && EntityUtils.isNotEmpty(value2, checkAttribute)) {\n return EntityUtils.equals(value1, value2, checkAttribute) ? 0 : (value1[checkAttribute] > value2[checkAttribute] ? direction : (-1 * direction));\n }\n return value1 === value2 ? 0 : (value1 > value2 ? direction : (-1 * direction));\n }\n\n static compareValue<T>(value1: T, value2: T, direction: 1 | -1): number {\n return value1 === value2 ? 0 : (value1 > value2 ? direction : (-1 * direction));\n }\n\n static filter<T extends IEntity<T> | any>(data: T[],\n searchAttribute: string,\n searchText: string): T[] {\n const filterFn = this.searchTextFilter(searchAttribute, searchText);\n return data.filter(filterFn);\n }\n\n static searchTextFilter<T extends IEntity<T> | any>(searchAttribute: string | string[],\n searchText: string): FilterFn<T> {\n if (isNilOrBlank(searchAttribute) || isNilOrBlank(searchText)) return undefined; // filter not need\n\n const searchRegexp = searchText.replace(/[.]/g, '[.]').replace(/[*]+/g, '.*');\n if (searchRegexp === '.*') return undefined; // filter not need\n\n const flags = 'i'; // don't use global regex search\n const asPrefixPattern = '^' + searchRegexp;\n const anyMatchPattern = '^.*' + searchRegexp;\n\n // Only one search attributes\n if (typeof searchAttribute === 'string') {\n const isSimplePath = !searchAttribute || searchAttribute.indexOf('.') === -1;\n const searchAsPrefix = searchAttribute.toLowerCase().endsWith('label') || searchAttribute.toLowerCase().endsWith('code');\n const regexp = new RegExp(searchAsPrefix && asPrefixPattern || anyMatchPattern, flags);\n if (isSimplePath) {\n return a => regexp.test( a[searchAttribute]);\n }\n else {\n return a => regexp.test(EntityUtils.getPropertyByPath(a, searchAttribute));\n }\n }\n\n // many search attributes\n else {\n const regexps = searchAttribute.map(path => {\n const searchAsPrefix = path.toLowerCase().endsWith('label') || path.toLowerCase().endsWith('code');\n return new RegExp( searchAsPrefix && asPrefixPattern || anyMatchPattern, flags);\n });\n return a => searchAttribute.findIndex((path, index) => regexps[index].test(EntityUtils.getPropertyByPath(a, path))) !== -1;\n }\n }\n\n /**\n * Transform a batch entity tree into a array list. This method keep links parent/children.\n *\n * Method used to find batch without id (e.g. before local storage)\n *\n * @param source\n */\n static treeToArray<T extends ITreeItemEntity<any>>(source: T): T[] {\n if (!source) return null;\n return (source.children || []).reduce((res, batch) => {\n batch.parent = source;\n return res.concat(this.treeToArray(batch)); // recursive call\n }, [source]);\n }\n\n static listOfTreeToArray<T extends ITreeItemEntity<any>>(sources: T[]): T[] {\n if (!sources || !sources.length) return null;\n return sources.reduce((res, source) => res.concat(this.treeToArray<T>(source)), []);\n }\n\n /**\n * Fill parent attribute, of all children found in the tree\n *\n * @param source\n */\n static treeFillParent<T extends ITreeItemEntity<any>>(source: T): T[] {\n if (!source) return null;\n (source.children || []).forEach(child => {\n child.parent = source;\n this.treeFillParent(child); // Loop\n });\n }\n\n static isLocal(entity: IEntity<any, any> | Entity<any, any>): boolean {\n return entity && (isNotNil(entity.id) && +entity.id < 0);\n }\n\n static isRemote(entity: IEntity<any, any> | Entity<any, any>): boolean {\n return entity && !EntityUtils.isLocal(entity);\n }\n\n static isLocalId(id: number): boolean {\n return isNotNil(id) && +id < 0;\n }\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nimport {Environment} from './environment.class';\n\nexport const environment: Environment = Object.freeze({\n name: '@sumaris-net/ngx-components', // overridden by ENVIRONMENT token\n version: undefined, // overridden by ENVIRONMENT token\n production: true, // let to true ! because used by packager\n baseUrl: '/',\n defaultLocale: 'fr',\n defaultLatLongFormat: 'DDMM',\n apolloFetchPolicy: 'cache-first',\n\n // FIXME: GraphQL subscription never unsubscribe...\n listenRemoteChanges: false,\n\n // FIXME: enable cache\n persistCache: false,\n\n // TODO: make this works\n //offline: true,\n\n peerMinVersion: '1.8.0',\n\n defaultPeers: [\n {\n host: 'localhost',\n port: 8080\n },\n {\n host: 'localhost',\n port: 8081\n },\n {\n host: '192.168.0.45',\n port: 8080\n },\n {\n host: '192.168.0.24',\n port: 8080\n },\n {\n host: '192.168.0.29',\n port: 8080\n },\n {\n host: 'sih.sfa.sc',\n port: 80\n },\n {\n host: 'test.sumaris.net',\n port: 443\n }\n ],\n defaultAppName: 'SUMARiS',\n defaultAndroidInstallUrl: 'https://play.google.com/store/apps/details?id=net.sumaris.app',\n\n // Storage\n storage: {\n driverOrder: ['sqlite', 'indexeddb', 'websql', 'localstorage']\n },\n\n // About\n sourceUrl: 'https://gitlab.ifremer.fr/sih-public/sumaris/ngx-sumaris-components',\n reportIssueUrl: 'https://gitlab.ifremer.fr/sih-public/sumaris/ngx-sumaris-components/-/issues',\n forumUrl: 'https://forum.sumaris.net',\n helpUrl: 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/blob/master/user-manual/index_fr.md',\n\n // Development\n defaultAuthValues: {\n\n // Basic auth (using Person.username)\n // username: 'admq2', password: 'q22006'\n\n // Token auth (using Person.pubkey)\n username: 'admin@sumaris.net', password: 'admin',\n }\n});\n\n/*\n * In development mode, to ignore zone related error stack frames such as\n * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can\n * import the following file, but please comment it out in production mode\n * because it will have performance impact when throw error\n */\nimport 'zone.js/dist/zone-error';\n","import { environment } from '../../../../environments/environment';\nimport { Entity } from './entity.model';\nimport { removeEnd } from '../../../shared/functions';\n\ndeclare type Constructor = new(...args: any[]) => any;\n\nexport class EntityClasses {\n static CLASSES_BY_NAME = new Map<string, Constructor>();\n\n static register(typename: string, entityClass: Constructor) {\n // Convert to extract entityName\n const entityName = removeEnd(typename, 'VO');\n // DEBUG\n //console.debug('[entity-classes] Detected entity class ' + entityName);\n\n // Add to map\n EntityClasses.CLASSES_BY_NAME.set(entityName, entityClass);\n }\n\n static get<T extends Entity<T>>(entityName: string): Constructor {\n const entityClass = EntityClasses.CLASSES_BY_NAME.get(entityName);\n if (!entityClass) {\n throw new Error('Cannot found entity class \\'' + entityName + '\\'. Make sure it exists and has the @EntityClass decorator.');\n }\n return entityClass;\n }\n\n static fromObject<T extends Entity<T>>(value: any, opts?: {\n [key: string]: any;\n typename?: string;\n entityName?: string;\n }): T {\n if (!value) return value;\n const entityName = (opts && opts.entityName) || removeEnd(value.__typename || opts?.typename, 'VO');\n if (!entityName) throw new Error('Missing one of \\'value.__typename\\', \\'opts.entityName\\', or \\'opts.typename\\'.');\n const entityClass = EntityClasses.get(entityName) as any;\n if (typeof entityClass.fromObject !== 'function') {\n throw new Error('Cannot found the static function \\'' + entityName + '.fromObject()\\'. Make sure this function has been declared and the entity class has the @EntityClass decorator');\n }\n return entityClass.fromObject(value, opts) as T;\n }\n}\n\n// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\nexport function EntityClass(opts: {\n typename: string;\n fromObjectAlwaysNew?: boolean;\n fromObjectReuseStrategy?: 'default' | 'clone';\n}) {\n\n opts = {\n fromObjectReuseStrategy: 'default',\n ...opts\n };\n\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n return function <T extends Constructor>(constructor: T) {\n\n // Make sure the class extends Entity\n if (!environment.production) {\n const obj = new constructor();\n if (!(obj instanceof Entity)) {\n throw new Error(`Class ${constructor.name} must extends <<Entity>> to be able to use @FromObject!`);\n }\n }\n\n const typename = opts.typename || `${constructor.name}VO`;\n\n if (opts.fromObjectReuseStrategy === 'clone') {\n const decoratedClass = class extends constructor {\n static TYPENAME = typename;\n static fromObject(source: any, opts?: any): T {\n if (!source) return undefined;\n if (source instanceof decoratedClass) return (source as any).clone(opts) as T;\n const target: any = new decoratedClass();\n target.fromObject(source, opts);\n return target as T;\n }\n static asObject(source: any, opts?: any): any {\n if (!source) return undefined;\n if (source instanceof decoratedClass) return source.asObject(opts);\n return Object.assign({}, source);\n }\n };\n\n // Register the entity class\n EntityClasses.register(typename, decoratedClass);\n\n return decoratedClass;\n }\n\n const decoratedClass = class extends constructor {\n static TYPENAME = typename;\n static fromObject(source: any, opts?: any): T {\n if (!source) return undefined;\n if (source instanceof decoratedClass) {\n // DEBUG\n //console.debug('@EntityClass() fromObject() => will recycle existing object: ', source);\n return source as T;\n }\n const target: any = new decoratedClass();\n target.fromObject(source, opts);\n return target as T;\n }\n static asObject(source: any, opts?: any): any {\n if (!source) return undefined;\n if (source instanceof decoratedClass) {\n return source.asObject(opts);\n }\n // DEBUG\n //console.debug('@EntityClass() asObject() => will recycle existing object: ', source);\n return source;\n }\n };\n\n // Register the entity class\n EntityClasses.register(typename, decoratedClass);\n\n return decoratedClass;\n };\n}\n","/* -- Network -- */\n\nimport {isNilOrBlank, isNotNil, noTrailingSlash} from '../../../shared/functions';\nimport {Cloneable, Entity, EntityAsObjectOptions} from './entity.model';\nimport {EntityClass} from './entity.decorators';\n\n// @dynamic\n@EntityClass({typename: 'PeerVO'})\nexport class Peer extends Entity<Peer> implements Cloneable<Peer> {\n\n static fromObject: (source: any, opts?: any) => Peer;\n\n static parseUrl(peerUrl: string) {\n const url = new URL(peerUrl);\n return Peer.fromObject({\n dns: url.hostname,\n port: isNilOrBlank(url.port) ? undefined : url.port,\n useSsl: url.protocol && (url.protocol.startsWith('https') || url.protocol.startsWith('wss')),\n path: noTrailingSlash(url.pathname)\n });\n }\n\n dns: string;\n ipv4: string;\n ipv6: string;\n port: number;\n useSsl: boolean;\n pubkey: string;\n path?: string;\n\n favicon: string;\n status: 'UP' | 'DOWN';\n softwareName: string;\n softwareVersion: string;\n label: string;\n name: string;\n\n constructor() {\n super(Peer.TYPENAME);\n }\n\n asObject(options?: EntityAsObjectOptions): any {\n return super.asObject(options);\n }\n\n fromObject(source: any) {\n super.fromObject(source);\n this.dns = source.dns || source.host;\n this.ipv4 = source.ipv4;\n this.ipv6 = source.ipv6;\n this.port = isNotNil(source.port) ? +source.port : undefined;\n this.pubkey = source.pubkey;\n this.useSsl = source.useSsl || (this.port === 443);\n this.path = source.path || '';\n }\n\n equals(other: Peer): boolean {\n return super.equals(other) && this.pubkey === other.pubkey && this.url === other.url;\n }\n\n /**\n * Return the peer URL (without trailing slash)\n */\n get url(): string {\n return (this.useSsl ? 'https://' : 'http://') + this.hostAndPort + (this.path || '');\n }\n\n get hostAndPort(): string {\n return (this.dns || this.ipv4 || this.ipv6) +\n ((this.port && this.port !== 80 && this.port !== 443) ? ':' + this.port : '');\n }\n\n get reachable(): boolean {\n return this.status && this.status === 'UP';\n }\n}\n","// import the required animation functions from the angular animations module\nimport {animate, state, style, transition, trigger} from '@angular/animations';\n\nexport const fadeInAnimation =\n // trigger name for attaching this animation to an element using the [@triggerName] syntax\n trigger('fadeInAnimation', [\n\n // route 'enter' transition\n transition(':enter', [\n\n // css styles at start of transition\n style({ opacity: 0 }),\n\n // animation and styles at end of transition\n animate('.3s', style({ opacity: 1 }))\n ]),\n ]);\n\nexport const fadeInOutAnimation =\n // trigger name for attaching this animation to an element using the [@triggerName] syntax\n trigger('fadeInOutAnimation', [\n\n // route 'enter' transition\n transition(':enter', [\n\n // css styles at start of transition\n style({ opacity: 0 }),\n\n // animation and styles at end of transition\n animate('.3s', style({ opacity: 1 }))\n ]),\n\n // route 'leave' transition\n transition(':leave', [\n // animation and styles at end of transition\n animate('.5s ease-in-out', style({\n opacity: 0\n }))\n ]),\n ]);\n\nexport const slideInOutAnimation =\n // trigger name for attaching this animation to an element using the [@triggerName] syntax\n trigger('slideInOutAnimation', [\n\n // end state styles for route container (host)\n state('*', style({\n // the view covers the whole screen with a semi tranparent background\n position: 'relative',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 1\n })),\n\n // route 'enter' transition\n transition(':enter', [\n\n // styles at start of transition\n style({\n // start with the content positioned off the right of the screen,\n // -400% is required instead of -100% because the negative position adds to the width of the element\n left: '400%',\n\n // start with background opacity set to 0 (invisible)\n opacity: 0\n }),\n\n // animation and styles at end of transition\n animate('.3s ease-in-out', style({\n // transition the right position to 0 which slides the content into view\n left: 0,\n\n // transition the background opacity to 0.8 to fade it in\n opacity: 0.8\n }))\n ]),\n\n // route 'leave' transition\n transition(':leave', [\n // animation and styles at end of transition\n animate('.5s ease-in-out', style({\n // transition the right position to -400% which slides the content out of view\n left: '400%',\n\n // transition the background opacity to 0 to fade it out\n opacity: 0\n }))\n ])\n ]);\n\nexport const slideUpDownAnimation =\n // trigger name for attaching this animation to an element using the [@triggerName] syntax\n trigger('slideUpDownAnimation', [\n\n // end state styles for route container (host)\n state('*', style({\n transform: 'translateY(0)',\n opacity: 1\n })),\n\n // route 'enter' transition\n transition(':enter', [\n\n // styles at start of transition\n style({\n transform: 'translateY(-400%)',\n opacity: 0\n }),\n\n // animation and styles at end of transition\n animate('.3s ease-in-out', style({\n transform: 'translateY(0)',\n opacity: 1\n }))\n ]),\n\n // route 'leave' transition\n transition(':leave', [\n // animation and styles at end of transition\n animate('.5s ease-in-out', style({\n transform: 'translateY(-100%)',\n opacity: 0\n }))\n ])\n ]);\n","import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';\n\nexport class HttpUtils {\n static async getResource<T>(http: HttpClient,\n uri: string,\n opts?: {\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n params?: HttpParams | {\n [param: string]: string | string[];\n };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }): Promise<T> {\n\n // Add headers\n opts = {\n //headers: new HttpHeaders(),\n //.append('X-App-Name', environment.name)\n //.append('X-App-Version', environment.version),\n ...opts\n };\n\n try {\n // Using web http client\n return (await http.get(uri, opts).toPromise()) as T;\n }\n catch (err) {\n if (err && err.message) {\n console.error(`[network] Error on get request ${uri}: ${err.message}`, err);\n }\n else {\n console.error(`[network] Error on get request ${uri}: ${err && err.statusText} - ${JSON.stringify(err)}`);\n }\n throw {code: err.status, message: 'ERROR.UNKNOWN_NETWORK_ERROR'};\n }\n }\n}\n\n\n\n","import {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {HttpUtils} from '../../shared/http/http.utils';\nimport {Peer} from './model/peer.model';\n\nexport interface NodeInfo {\n softwareName: string;\n softwareVersion: string;\n nodeLabel?: string;\n nodeName?: string;\n}\n\nexport class NetworkUtils {\n static getNodeInfo = getNodeInfo;\n}\n\nexport async function getNodeInfo(\n http: HttpClient,\n peer: string|Peer,\n opts?: {\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n}): Promise<NodeInfo> {\n\n if (!peer) throw Error('Missing argument \\'peer\\'.');\n\n let peerUrl = (peer instanceof Peer) ? peer.url : (peer as string);\n // Remove trailing slash\n if (peerUrl.endsWith('/')) {\n peerUrl = peerUrl.substr(0, peerUrl.length -1);\n }\n\n return HttpUtils.getResource(http, peerUrl + '/api/node/info', opts);\n}\n","\nconst regexp = {\n POSITIVE_INTEGER: /^\\d+$/,\n VERSION_PART_REGEXP: /^[0-9]+|alpha[0-9]+|beta[0-9]+|rc[0-9]+|[0-9]+-SNAPSHOT$/\n};\n\n\nexport class VersionUtils {\n static compare = compareVersionNumbers;\n static isCompatible = isVersionCompatible;\n}\n\n/**\n * Compare two software version numbers (e.g. 1.7.1)\n * Returns:\n *\n * 0 if they're identical\n * negative if v1 < v2\n * positive if v1 > v2\n * Nan if they in the wrong format\n *\n * E.g.:\n *\n * assert(version_number_compare(\"1.7.1\", \"1.6.10\") > 0);\n * assert(version_number_compare(\"1.7.1\", \"1.7.10\") < 0);\n *\n * \"Unit tests\": http://jsfiddle.net/ripper234/Xv9WL/28/\n *\n * Taken from http://stackoverflow.com/a/6832721/11236\n */\n export function compareVersionNumbers(v1, v2){\n const v1parts = v1.split('.');\n const v2parts = v2.split('.');\n\n // First, validate both numbers are true version numbers\n\n if (!validateParts(v1parts) || !validateParts(v2parts)) {\n return NaN;\n }\n\n for (let i = 0; i < v1parts.length; ++i) {\n if (v2parts.length === i) {\n return 1;\n }\n\n if (v1parts[i] === v2parts[i]) {\n continue;\n }\n if (v1parts[i] > v2parts[i]) {\n return 1;\n }\n return -1;\n }\n\n if (v1parts.length != v2parts.length) {\n return -1;\n }\n\n return 0;\n}\n\nfunction validateParts(parts) {\n for (let i = 0; i < parts.length; i++) {\n let isNumber = regexp.POSITIVE_INTEGER.test(parts[i]);\n // First part MUST be an integer\n if (i === 0 && !isNumber) return false;\n // If not integer, should be 'alpha', 'beta', etc.\n if (!isNumber) {\n if (!regexp.VERSION_PART_REGEXP.test(parts[i])) return false;\n // Remove '-SNAPSHOT', as it should never be in prod\n parts[i] = parts[i].replace('-SNAPSHOT', '');\n // Check again if numeric\n isNumber = regexp.POSITIVE_INTEGER.test(parts[i]);\n }\n\n // Convert string to int (need by compare operators)\n if (isNumber) parts[i] = parseInt(parts[i]);\n }\n return true;\n}\n\nexport function isVersionCompatible(minVersion, actualVersion) {\n // DEV ONLY\n //console.debug(`[http] Checking actual version {${actualVersion}} is compatible with min expected version {${minVersion}}`);\n return compareVersionNumbers(minVersion, actualVersion) <= 0;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n EventEmitter,\n Output,\n Inject\n} from '@angular/core';\nimport {ModalController} from '@ionic/angular';\nimport {Peer} from '../services/model/peer.model';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {fadeInAnimation} from '../../shared/material/material.animations';\nimport {HttpClient} from '@angular/common/http';\nimport {NetworkUtils, NodeInfo} from '../services/network.utils';\nimport {VersionUtils} from '../../shared/version/versions';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\n\n@Component({\n selector: 'select-peer-modal',\n templateUrl: 'select-peer.modal.html',\n styleUrls: [ './select-peer.modal.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [fadeInAnimation]\n})\nexport class SelectPeerModal implements OnDestroy {\n\n private _subscription = new Subscription();\n loading = true;\n $peers = new Subject<Peer[]>();\n peerMinVersion = this.environment.peerMinVersion;\n\n @Input() canCancel = true;\n @Input() allowSelectDownPeer = true;\n @Input() onRefresh = new EventEmitter<UIEvent>();\n\n constructor(\n\n private viewCtrl: ModalController,\n private cd: ChangeDetectorRef,\n private http: HttpClient,\n @Inject(ENVIRONMENT) protected environment\n ) {\n }\n\n set peers(peers: Observable<Peer[]>) {\n this._subscription.add(\n peers.subscribe(res => this.refreshPeers(res))\n );\n }\n\n cancel() {\n this.viewCtrl.dismiss();\n }\n\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\n\n selectPeer(peer: Peer) {\n if (this.allowSelectDownPeer || (peer.reachable && this.isCompatible(peer))) {\n console.debug(`[select-peer-modal] Selected peer: {url: '${peer.url}'}`);\n this.viewCtrl.dismiss(peer);\n }\n }\n\n\n /**\n * Check the min pod version, defined by the app\n *\n * @param peer\n */\n isCompatible(peer: Peer): boolean {\n return !this.peerMinVersion || (peer && peer.softwareVersion && VersionUtils.isCompatible(this.peerMinVersion, peer.softwareVersion));\n }\n\n refresh(event: UIEvent) {\n this.loading = true;\n this.onRefresh.emit(event);\n }\n\n /* -- protected methods -- */\n\n async refreshPeers(peers: Peer[]) {\n peers = peers || [];\n\n const data: Peer[] = [];\n const jobs = Promise.all(\n peers.map(async (peer) => {\n await this.refreshPeer(peer);\n\n if (this._subscription.closed) return; // component destroyed\n\n data.push(peer);\n\n // Sort (by reachable, then host)\n data.sort((a, b) => {\n if (a.reachable && !b.reachable) return -1;\n if (!a.reachable && b.reachable) return 1;\n if (a.hostAndPort < b.hostAndPort) return -1;\n if (a.hostAndPort > b.hostAndPort) return 1;\n return 0;\n });\n\n this.$peers.next(data);\n return peer;\n }));\n\n this._subscription.add(\n this.$peers\n .subscribe(() => this.cd.markForCheck())\n );\n\n try {\n await jobs;\n }\n catch(err) {\n if (!this._subscription.closed) console.error(err);\n }\n this.loading = false;\n this.cd.markForCheck();\n }\n\n protected async refreshPeer(peer: Peer): Promise<Peer> {\n try {\n const summary: NodeInfo = await NetworkUtils.getNodeInfo(this.http, peer.url);\n peer.status = 'UP';\n peer.softwareName = summary.softwareName;\n peer.softwareVersion = summary.softwareVersion;\n peer.label = summary.nodeLabel;\n peer.name = summary.nodeName;\n } catch (err) {\n if (!this._subscription.closed) {\n if (err && err.message) {\n console.error('[select-peer] ' + err.message, err);\n }\n }\n peer.status = 'DOWN';\n }\n return peer;\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n}\n","import {EventEmitter, Inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {LocalSettings, OfflineFeature, UsageMode} from './model/settings.model';\nimport {Peer} from './model/peer.model';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Storage} from '@ionic/storage';\n\nimport {\n getPropertyByPath,\n isEmptyArray,\n isNil,\n isNotEmptyArray,\n isNotNil,\n isNotNilOrBlank,\n toBoolean\n} from '../../shared/functions';\nimport {Subject} from 'rxjs';\nimport {Platform} from '@ionic/angular';\nimport {FormFieldDefinition, FormFieldDefinitionMap} from '../../shared/form/field.model';\nimport * as momentImported from 'moment';\nimport {Moment} from 'moment';\nimport {debounceTime, filter} from 'rxjs/operators';\nimport {LatLongPattern} from '../../shared/material/latlong/latlong.utils';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {environment} from '../../../environments/environment';\nimport {fromDateISOString} from '../../shared/dates';\nimport {HistoryPageReference} from './model/history.model';\nimport {StartableService} from '../../shared/services/startable-service.class';\n\nconst moment = momentImported;\n\nexport const SETTINGS_STORAGE_KEY = 'settings';\nexport const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi'];\n\n// fixme: this constant points to static environment\nconst DEFAULT_SETTINGS: LocalSettings = {\n accountInheritance: true,\n locale: environment.defaultLocale,\n latLongFormat: environment.defaultLatLongFormat || 'DDMM',\n pageHistoryMaxSize: 3\n};\n\nexport const APP_LOCAL_SETTINGS = new InjectionToken<Partial<LocalSettings>>('DefaultLocalSettings');\nexport const APP_LOCAL_SETTINGS_OPTIONS = new InjectionToken<FormFieldDefinitionMap>('LocalSettingsOptions');\n\nexport declare interface AddToPageHistoryOptions {\n removePathQueryParams?: boolean;\n removeTitleSmallTag?: boolean;\n emitEvent?: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n deps: [APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS]\n})\nexport class LocalSettingsService extends StartableService<LocalSettings> {\n\n onChange = new Subject<LocalSettings>();\n\n private readonly _optionDefs: FormFieldDefinition[];\n private _$persist: EventEmitter<any>;\n\n get settings(): LocalSettings {\n return this._data || this.defaultSettings;\n }\n\n get locale(): string {\n return this._data && this._data.locale || this.translate.currentLang || this.translate.defaultLang;\n }\n\n get latLongFormat(): LatLongPattern {\n return this._data && this._data.latLongFormat || 'DDMM';\n }\n\n get usageMode(): UsageMode {\n return (this._data && this._data.usageMode || (this.mobile ? 'FIELD' : 'DESK'));\n }\n\n get mobile(): boolean {\n return this._data && toBoolean(this._data.mobile, this.platform.is('mobile'));\n }\n\n set mobile(value: boolean) {\n this._data.mobile = value;\n }\n\n get touchUi(): boolean {\n return this._data.touchUi;\n }\n\n set touchUi(value: boolean) {\n this._data.touchUi = value;\n }\n\n get pageHistory(): HistoryPageReference[] {\n return (this._data && this._data.pageHistory || []);\n }\n\n constructor(\n private translate: TranslateService,\n private platform: Platform,\n private storage: Storage,\n @Inject(ENVIRONMENT) protected environment,\n @Optional() @Inject(APP_LOCAL_SETTINGS) private readonly defaultSettings: LocalSettings,\n @Optional() @Inject(APP_LOCAL_SETTINGS_OPTIONS) defaultOptionsMap: FormFieldDefinitionMap\n ) {\n super(platform);\n this.defaultSettings = {...DEFAULT_SETTINGS, ...this.defaultSettings};\n\n this._optionDefs = Object.values(defaultOptionsMap);\n\n this.resetData();\n\n this._debug = !environment.production;\n if (this._debug) console.debug('[settings] Creating service');\n }\n\n ngOnStart(): Promise<LocalSettings> {\n\n console.info('[settings] Starting service...');\n\n // Restoring local settings\n this._data.mobile = isNotNil(this._data.mobile) ? this._data.mobile : this.platform.is('mobile');\n this._data.touchUi = this._data.mobile || this.platform.is('phablet') || this.platform.is('tablet');\n this._data.usageMode = this.platform.is('android') ? 'FIELD' : 'DESK'; // FIELD by default if Android\n\n // Restoring local settings\n return this.restoreLocally();\n }\n\n isUsageMode(mode: UsageMode): boolean {\n return this.usageMode === mode;\n }\n\n isOnFieldMode(value?: UsageMode): boolean {\n return (value || this.usageMode) === 'FIELD';\n }\n\n async restoreLocally(): Promise<LocalSettings | undefined> {\n let data = this._data || <LocalSettings>{};\n\n // Restore from storage\n const settingsStr = await this.storage.get(SETTINGS_STORAGE_KEY);\n\n // Restore local settings (or keep old settings)\n if (isNotNilOrBlank(settingsStr)) {\n console.info('[settings] Restoring previous settings...');\n\n const restoredData = JSON.parse(settingsStr);\n\n // Avoid to override transient properties\n SETTINGS_TRANSIENT_PROPERTIES.forEach(transientKey => {\n delete restoredData[transientKey];\n });\n\n // Merge into existing data\n data = Object.assign(data, restoredData);\n }\n\n // Emit event\n this.onChange.next(data);\n\n return data;\n }\n\n setProperty<T = string>(keyOrDef: string|FormFieldDefinition, value: T){\n if (!this._data) return;\n if (typeof keyOrDef === 'object') {\n this.setProperty(keyOrDef.key, value);\n return;\n }\n this._data.properties = this._data.properties || {};\n this._data.properties[keyOrDef] = isNil(value) ? undefined : value.toString();\n }\n\n getProperty(keyOrDef: string|FormFieldDefinition, defaultValue?: any): any {\n if (typeof keyOrDef === 'object') {\n return this.getProperty(keyOrDef.key, isNil(defaultValue) ? keyOrDef.defaultValue : defaultValue);\n }\n const value = this._data && this._data.properties && this._data.properties[keyOrDef];\n return isNotNil(value) ? value : defaultValue;\n }\n\n getPropertyAsBoolean(definition: FormFieldDefinition, defaultValue?: boolean): boolean {\n const value = this.getProperty(definition, defaultValue);\n return isNotNil(value) ? (value && value !== 'false') : undefined;\n }\n\n getPropertyAsInt(definition: FormFieldDefinition, defaultValue?: number): number {\n const value = this.getProperty(definition, defaultValue);\n return isNotNil(value) ? parseInt(value) : undefined;\n }\n\n getPropertyAsNumbers(definition: FormFieldDefinition, defaultValue?: number[]): number[] {\n const value = this.getProperty(definition, defaultValue);\n if (typeof value === 'string') return value.split(',').map(parseFloat) || undefined;\n return isNotNil(value) ? [parseFloat(value)] : undefined;\n }\n\n getPropertyAsStrings(definition: FormFieldDefinition, defaultValue?: string[]): string[] {\n const value = this.getProperty(definition, defaultValue);\n return value && value.split(',') || undefined;\n }\n\n async apply(settings: Partial<LocalSettings>, opts?: { emitEvent?: boolean; persistImmediate?: boolean }) {\n if (!this.started) await this.ready();\n\n this._data = { ...this._data, ...settings};\n\n // Save locally\n if (opts && opts.persistImmediate) {\n await this.persistLocally(true);\n }\n else {\n this.persistLocally(); // No AWAIT\n }\n\n // Emit event\n if (!opts || opts.emitEvent !== false) {\n this.onChange.next(this._data);\n }\n }\n\n async applyProperty(key: keyof LocalSettings, value: any, opts?: { emitEvent?: boolean; persistImmediate?: boolean }) {\n const changes = {};\n changes[key] = value;\n await this.apply(changes, opts);\n }\n\n getPageSettings<T = any>(pageId: string, propertyName?: string): T {\n if (!this._data || !this._data.pages) return undefined;\n const key = pageId.replace(/[/]/g, '__');\n if (isNotNilOrBlank(propertyName)) {\n return getPropertyByPath(this._data.pages, key + '.' + propertyName);\n }\n return this._data.pages[key];\n }\n\n async savePageSetting(pageId: string, value: any, propertyName?: string) {\n this._data = this._data || this.defaultSettings;\n this._data.pages = this._data.pages || {};\n\n const key = pageId.replace(/[/]/g, '__');\n if (propertyName) {\n this._data.pages[key] = this._data.pages[key] || {};\n this._data.pages[key][propertyName] = value;\n }\n else {\n this._data.pages[key] = value;\n }\n\n // Update local settings\n this.persistLocally();\n }\n\n\n getOfflineFeature(featureName: string): OfflineFeature {\n if (!this._data || !this._data.offlineFeatures || isEmptyArray(this._data.offlineFeatures))\n return undefined;\n if (!featureName) throw Error('Missing \\'featureName\\' argument');\n\n featureName = featureName.toLowerCase();\n const featurePrefix = featureName + '#';\n const feature = this._data.offlineFeatures.find(f => {\n if (typeof f === 'string') return f.toLowerCase().startsWith(featurePrefix);\n if (typeof f === 'object' && f.name) return f.name === featureName;\n });\n if (!feature) return; // Not found\n if (typeof feature === 'string') {\n return {\n name: featureName,\n lastSyncDate: feature.substring(featurePrefix.length)\n };\n }\n return feature;\n }\n\n getOfflineFeatureLastSyncDate(featureName: string): Moment {\n const feature = this.getOfflineFeature(featureName);\n return feature && fromDateISOString(feature.lastSyncDate);\n }\n\n hasOfflineFeature(featureName?: string): boolean {\n if (featureName) return isNotNil(this.getOfflineFeature(featureName));\n return this._data && isNotEmptyArray(this._data.offlineFeatures);\n }\n\n saveOfflineFeature(feature: OfflineFeature) {\n this._data = this._data || this.defaultSettings;\n this._data.offlineFeatures = this._data.offlineFeatures || [];\n\n feature.name = feature.name.toLowerCase();\n\n const featurePrefix = feature.name + '#';\n const existingIndex = this._data.offlineFeatures.findIndex(f => {\n if (typeof f === 'string') return f.toLowerCase().startsWith(featurePrefix);\n if (typeof f === 'object' && f.name) return f.name === feature.name;\n });\n if (existingIndex !== -1) {\n this._data.offlineFeatures[existingIndex] = feature;\n }\n else {\n this._data.offlineFeatures.push(feature);\n }\n\n // Update local settings\n this.persistLocally();\n }\n\n markOfflineFeatureAsSync(featureName: string) {\n let feature = this.getOfflineFeature(featureName);\n\n if (!feature) {\n feature = <OfflineFeature>{\n name: featureName.toLowerCase(),\n lastSyncDate: moment().toISOString()\n };\n }\n else {\n feature.lastSyncDate = moment().toISOString();\n }\n\n this.saveOfflineFeature(feature);\n }\n\n removeOfflineFeatures() {\n if (this._data && this._data.offlineFeatures) {\n this._data.offlineFeatures = [];\n\n // Update local settings\n this.persistLocally();\n }\n }\n\n getFieldDisplayAttributes(fieldName: string, defaultAttributes?: string[]): string[] {\n const value = this._data && this._data.properties && this._data.properties[`sumaris.field.${fieldName}.attributes`];\n // Nothing found in settings: return defaults\n if (!value) return defaultAttributes || ['label', 'name'];\n\n return value.split(',');\n }\n\n getPageFieldDefaultValue(pageId: string, fieldName: string): any {\n return this.getPageSettings(pageId, `field.${fieldName}.defaultValue`);\n }\n\n get optionDefs(): FormFieldDefinition[] {\n return this._optionDefs;\n }\n\n registerOption(def: FormFieldDefinition) {\n if (this._optionDefs.findIndex(f => f.key === def.key) !== -1) {\n throw new Error(`Additional additional property {${def.key}} already define.`);\n }\n if (this._debug) console.debug(`[settings] Adding additional property {${def.key}}`, def);\n this._optionDefs.push(def);\n }\n\n registerOptions(defs: FormFieldDefinition[]) {\n (defs || []).forEach(def => this.registerOption(def));\n }\n\n async addToPageHistory(page: HistoryPageReference,\n opts?: AddToPageHistoryOptions,\n pageHistory?: HistoryPageReference[] // used for recursive call to children\n ) {\n // If not inside recursive call: fill page history defaults\n if (!pageHistory) this.fillPageHistoryDefaults(page, opts);\n\n pageHistory = pageHistory || this._data.pageHistory;\n\n const index = pageHistory.findIndex(p => (\n // same path\n p.path === page.path\n // or sub-path\n || page.path.startsWith(p.path + '/'))\n );\n\n // New page: insert it\n if (index === -1) {\n //if (this._debug)\n console.debug('[settings] Adding page to history: ', page);\n\n // Prepend to list\n pageHistory.splice(0, 0, page);\n }\n\n else {\n const existingPage = pageHistory[index];\n\n // Same path: replace existing page\n if (pageHistory[index].path === page.path) {\n //if (this._debug)\n console.debug('[settings] Updating existing page in history: ', page);\n pageHistory.splice(index, 1);\n\n // Copy exiting children\n page.children = existingPage.children || [];\n\n // Prepend to list\n pageHistory.splice(0, 0, page);\n }\n\n // Not same path (should be a parent page)\n else {\n // Create parent's children array, if not exists\n existingPage.children = existingPage.children || [];\n\n // Update the parent time\n existingPage.time = page.time;\n\n // Add page as parent's children (recursive call)\n await this.addToPageHistory(page, opts, existingPage.children);\n }\n }\n\n // Save locally (only if not a recursive execution)\n if (pageHistory === this._data.pageHistory) {\n\n // If max has been reached, remove old pages\n if (this._data.pageHistory.length > this._data.pageHistoryMaxSize) {\n const removedPages = pageHistory.splice(this._data.pageHistoryMaxSize, pageHistory.length - this._data.pageHistoryMaxSize);\n console.debug('[settings] Pages removed from history: ', removedPages);\n }\n\n // Apply new value\n await this.applyProperty('pageHistory', pageHistory);\n }\n }\n\n async removePageHistory(path: string,\n opts?: {emitEvent?: boolean },\n pageHistory?: HistoryPageReference[] // used for recursive call to children)\n ) {\n pageHistory = pageHistory || this._data.pageHistory;\n\n const index = pageHistory.findIndex(p => p.path === path);\n let found = index !== -1;\n if (found) {\n console.debug('[settings] Remove page history: ', path);\n // Remove value\n pageHistory.splice(index, 1);\n }\n else {\n // Search path on children (stop when found)\n found = pageHistory\n .map(p => p.children)\n .filter(isNotEmptyArray)\n .findIndex(children => this.removePageHistory(path, opts, children)) !== -1;\n }\n\n // Save locally (only if not a recursive execution)\n if (found && pageHistory === this._data.pageHistory) {\n // Apply changes\n await this.applyProperty('pageHistory', this._data.pageHistory);\n }\n\n return found;\n }\n\n async clearPageHistory() {\n // Reset all page history\n await this.applyProperty('pageHistory', [], {persistImmediate: true});\n }\n\n /* -- Protected methods -- */\n\n private resetData() {\n this._data = {...this._data, ...this.defaultSettings};\n\n this._data.locale = this.translate.currentLang || this.translate.defaultLang;\n this._data.mobile = undefined;\n this._data.usageMode = undefined;\n this._data.pageHistory = [];\n\n const defaultPeer = this.environment.defaultPeer && Peer.fromObject(this.environment.defaultPeer);\n this._data.peerUrl = defaultPeer && defaultPeer.url || undefined;\n\n if (this.started) this.onChange.next(this._data);\n }\n\n private persistLocally(immediate?: boolean): Promise<any> {\n\n // Execute immediate\n if (immediate) {\n if (!this._data) {\n console.debug('[settings] Removing local settings from storage');\n return this.storage.remove(SETTINGS_STORAGE_KEY);\n }\n else {\n console.debug('[settings] Store local settings', this._data);\n return this.storage.set(SETTINGS_STORAGE_KEY, JSON.stringify(this._data));\n }\n }\n\n // Execute with delay\n else {\n\n // Create the event emitter\n if (!this._$persist) {\n this._$persist = new EventEmitter<any>(true);\n this._$persist\n .pipe(\n debounceTime(2000), // add a delay of 2s\n filter(() => this.started)\n )\n .subscribe(() => this.persistLocally(true));\n }\n\n this._$persist.emit();\n }\n }\n\n private fillPageHistoryDefaults(page: HistoryPageReference, opts?: {\n removePathQueryParams?: boolean;\n removeTitleSmallTag?: boolean;\n }): HistoryPageReference {\n if (!page || !page.title || !page.path) throw Error('Missing required argument \\'page\\', \\'page.path\\' or \\'page.title\\'');\n\n // Set time\n page.time = page.time || moment();\n\n // Clean the title (remove <small> tags)\n if (!opts || opts.removeTitleSmallTag !== false) {\n const tagIndex = page.title.indexOf('</small>');\n if (tagIndex !== -1) {\n page.title = page.title.substring(tagIndex + '</small>'.length);\n }\n page.title = page.title.replace(/[ ]*class='hidden-xs hidden-sm'/g, '');\n }\n\n // Remove query params\n if (!opts || opts.removePathQueryParams !== false) {\n page.path = page.path.replace(/[?].*$/, '');\n }\n\n return page;\n }\n}\n","import {createAnimation, IonicSafeString, ToastController} from '@ionic/angular';\nimport {TranslateService} from '@ngx-translate/core';\nimport {OverlayEventDetail, ToastOptions} from '@ionic/core';\nimport {ToastButton} from '@ionic/core/dist/types/components/toast/toast-interface';\nimport {isEmptyArray, isNotNil} from './functions';\n\nconst TOAST_MAX_HEIGHT_PX = 75;\nconst TOAST_MAX_STACK_SIZE = 4;\n\nexport declare interface ShowToastOptions extends ToastOptions {\n type?: 'error'|'warning'|'info';\n messageParams?: any;\n showCloseButton?: boolean;\n onWillPresent?: (toast: HTMLIonToastElement) => void;\n}\n\nexport class Toasts {\n static counter = 0;\n static stackSize = 0;\n\n static async show<T = any>(\n toastController: ToastController,\n translate: TranslateService,\n opts: ShowToastOptions\n ): Promise<OverlayEventDetail<T>> {\n if (!toastController || !translate) {\n console.error('Missing required argument \\'toastController\\' or \\'translate\\'');\n if (opts.message instanceof IonicSafeString) console.info('[toasts] message: ' + (translate && translate.instant(opts.message.value) || opts.message.value));\n else if (typeof opts.message === 'string') console.info('[toasts] message: ' + (translate && translate.instant(opts.message, opts.messageParams) || opts.message));\n return Promise.resolve({});\n }\n\n this.counter++; // Increment toast counter\n let currentOffset = this.stackSize;\n if (this.stackSize < TOAST_MAX_STACK_SIZE) {\n this.stackSize++; // Increment stack offset\n }\n else {\n this.stackSize = 1; // Reset the stack\n currentOffset = 0;\n }\n const updateCounters = () => {\n // Decrease counter\n this.counter--;\n // If all toast closed: reset the stack offset\n if (this.counter === 0) {\n this.stackSize = 0;\n }\n // If current toast is the last one, decrease the offset\n else if (this.stackSize == currentOffset + 1){\n this.stackSize--;\n }\n };\n\n\n const message = opts.message && opts.message instanceof IonicSafeString ? opts.message.value : opts.message as string;\n const i18nKeys = [message];\n if (opts.header) i18nKeys.push(opts.header);\n\n let closeButton: ToastButton;\n if (opts.showCloseButton) {\n opts.buttons = opts.buttons || [];\n const buttonIndex = opts.buttons\n .map(b => typeof b === 'object' && b as ToastButton || undefined)\n .filter(isNotNil)\n .findIndex(b => b.role === 'close');\n if (buttonIndex !== -1) {\n closeButton = opts.buttons[buttonIndex] as ToastButton;\n } else {\n closeButton = {role: 'close'};\n opts.buttons.push(closeButton);\n }\n closeButton.text = closeButton.text || 'COMMON.BTN_OK';\n i18nKeys.push(closeButton.text);\n }\n\n // Read CSS\n const cssArray = opts.cssClass && typeof opts.cssClass === 'string' && opts.cssClass.split(',') || (opts.cssClass as Array<string>) || [];\n\n // Add 'error' class, if need\n if (opts.type) {\n switch (opts.type) {\n case 'error':\n opts.header = 'ERROR';\n cssArray.push('danger');\n break;\n case 'warning':\n cssArray.push('accent');\n break;\n case 'info':\n cssArray.push('secondary');\n break;\n }\n }\n\n opts.cssClass = cssArray;\n\n const translations = translate.instant(i18nKeys);\n if (opts.messageParams) {\n translations[message] = translate.instant(message, opts.messageParams);\n }\n\n if (closeButton) {\n closeButton.text = translations[closeButton.text];\n }\n\n // Retrieve the toast position\n const position = opts.position || (opts.mode === 'ios' ? 'bottom' : 'top');\n\n if (!opts.enterAnimation && position !== 'middle') {\n // Compute positions, using the stack offset\n const direction = position === 'top' ? 1 : -1;\n const start = (currentOffset) * TOAST_MAX_HEIGHT_PX - direction * TOAST_MAX_HEIGHT_PX;\n const end = direction * (currentOffset) * TOAST_MAX_HEIGHT_PX;\n opts.enterAnimation = (baseEl: any, opts?: any) => createAnimation()\n .addElement(baseEl.querySelector('.toast-wrapper'))\n .duration(250)\n .fromTo('transform', `translateY(${start}px)`, `translateY(${end}px)`)\n .fromTo('opacity', '0', '1');\n }\n\n const toast = await toastController.create({\n // Default values\n position,\n duration: opts.showCloseButton ? 10000 : 4000,\n ...opts,\n message: translations[message],\n header: opts.header && translations[opts.header] || undefined\n });\n\n if (opts.onWillPresent) opts.onWillPresent(toast);\n\n await toast.present();\n\n if (isEmptyArray(opts.buttons)) {\n // Not need to wait dismiss (no 'await')\n toast.onDidDismiss().then(updateCounters);\n return null; // no result\n }\n\n else {\n // Wait for button result\n const result = await toast.onDidDismiss();\n\n updateCounters();\n\n return result;\n }\n }\n}\n","import {EventEmitter, Inject, Injectable, Optional} from '@angular/core';\nimport {CryptoService} from './crypto.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Storage} from '@ionic/storage';\nimport {Peer} from './model/peer.model';\nimport {LocalSettings} from './model/settings.model';\nimport {ModalController, Platform, ToastController} from '@ionic/angular';\nimport {SelectPeerModal} from '../peer/select-peer.modal';\nimport {BehaviorSubject, Subject, Subscription, timer} from 'rxjs';\nimport {LocalSettingsService, SETTINGS_STORAGE_KEY} from './local-settings.service';\nimport {SplashScreen} from '@ionic-native/splash-screen/ngx';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {isNotEmptyArray, isNotNilOrBlank, sleep, toBoolean} from '../../shared/functions';\nimport {Connection, Network} from '@ionic-native/network/ngx';\nimport {DOCUMENT} from '@angular/common';\nimport {CacheService} from 'ionic-cache';\nimport {ShowToastOptions, Toasts} from '../../shared/toasts';\nimport {distinctUntilChanged, filter, map, mergeMap, tap} from 'rxjs/operators';\nimport {OverlayEventDetail} from '@ionic/core';\nimport {NodeInfo} from './network.utils';\nimport {HttpUtils} from '../../shared/http/http.utils';\nimport {VersionUtils} from '../../shared/version/versions';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {isInstanceOf} from './model/entity.model';\nimport {StartableService} from '../../shared/services/startable-service.class';\n\nexport type ConnectionType = 'none' | 'wifi' | 'ethernet' | 'cell' | 'unknown' ;\n\nexport type AuthTokenType = 'token' | 'basic' | 'basic-and-token';\n\nexport function getConnectionType(type: Connection): ConnectionType {\n switch (type) {\n case Connection.NONE:\n return 'none';\n case Connection.ETHERNET:\n return 'ethernet';\n case Connection.WIFI:\n return 'wifi';\n case Connection.CELL:\n case Connection.CELL_2G:\n case Connection.CELL_3G:\n case Connection.CELL_4G:\n return 'cell';\n case Connection.UNKNOWN:\n return 'unknown';\n default:\n return 'ethernet';\n }\n}\n\nexport declare type NetworkEventType = 'start'|'peerChanged'|'statusChanged'|'resetCache'|'beforeTryOnlineFinish';\n\nconst NetworkRefreshTimerPeriod = {\n MOBILE: 1000 * 60 * 10 /* every 10 min */,\n DESKTOP: 1000 * 60 * 5 /* every 5 min */\n};\n\n/* -- DEV only (to debug refresh timer)\nconst NetworkRefreshTimerPeriod = {\n MOBILE: 1000,\n DESKTOP: 1000\n}*/\n\n@Injectable({providedIn: 'root'})\nexport class NetworkService extends StartableService<Peer> {\n\n onPeerChanges = this.onStart.pipe(\n map(peer => peer && peer.url),\n filter(isNotNilOrBlank),\n distinctUntilChanged<string>()\n );\n onNetworkStatusChanges = new BehaviorSubject<ConnectionType>(null);\n onResetNetworkCache = new EventEmitter(true);\n\n private readonly _mobile: boolean;\n private _subscription = new Subscription();\n private _timerSubscription: Subscription;\n private readonly _timerRefreshPeriod: number;\n private readonly _timerRefreshCondition: () => boolean;\n private _startingPeer: Peer;\n private _deviceConnectionType: ConnectionType;\n private _forceOffline: boolean;\n private _listeners: {\n [key: string]: ((data?: any) => Promise<void>)[];\n } = {};\n\n get online(): boolean {\n return this.connectionType !== 'none';\n }\n\n get offline(): boolean {\n return this.connectionType === 'none';\n }\n\n get connectionType(): ConnectionType{\n // If force offline: return 'none'\n return this._forceOffline && 'none'\n // Else, return device connection type (or unknown)\n || (this.started && this._deviceConnectionType || 'unknown');\n }\n\n get peer(): Peer {\n return this._data && this._data.clone();\n }\n\n set peer(peer: Peer) {\n this._startingPeer = peer;\n this.restart();\n }\n\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private platform: Platform,\n private modalCtrl: ModalController,\n private cryptoService: CryptoService,\n private storage: Storage,\n private settings: LocalSettingsService,\n private cache: CacheService,\n private http: HttpClient,\n @Inject(ENVIRONMENT) protected environment,\n @Optional() private network: Network,\n @Optional() private splashScreen: SplashScreen,\n @Optional() private translate: TranslateService,\n @Optional() private toastController: ToastController\n ) {\n super(platform);\n this._mobile = this.platform.is('mobile');\n\n if (this._mobile) {\n this._timerRefreshPeriod = NetworkRefreshTimerPeriod.MOBILE;\n this._timerRefreshCondition = () => this.online; // Check only when online, and stop when offline\n }\n else {\n this._timerRefreshPeriod = NetworkRefreshTimerPeriod.DESKTOP;\n this._timerRefreshCondition = () => true; // Always check\n }\n\n this.resetData();\n\n this.onStart.subscribe(() => this.ngOnAfterStart());\n\n // For DEV only\n this._debug = !environment.production;\n\n }\n\n /**\n * Register to network event\n *\n * @param eventType\n * @param callback\n */\n on<T= any>(eventType: NetworkEventType, callback: (data?: T) => Promise<any>): Subscription {\n switch (eventType) {\n case 'start':\n return this.onStart.subscribe(() => callback());\n\n case 'peerChanged':\n return this.onPeerChanges.subscribe(() => callback());\n\n case 'statusChanged':\n return this.onNetworkStatusChanges.subscribe((type) => callback(type as unknown as T));\n\n case 'resetCache':\n return this.onResetNetworkCache.subscribe(() => callback());\n\n default:\n return this.addListener(eventType, callback);\n }\n }\n\n async tryOnline(opts?: {\n showOfflineToast?: boolean;\n showOnlineToast?: boolean;\n showLoadingToast?: boolean;\n afterRetryDelay?: number;\n afterRetryPromise?: () => Promise<any>;\n }): Promise<boolean> {\n // If offline mode not forced, and device says there is no connection: skip\n if (!this._forceOffline || this._deviceConnectionType === 'none') return false;\n\n // SHow loading toast\n const now = Date.now();\n const showLoadingToast = !opts || opts.showLoadingToast !== false;\n let loadingToast: HTMLIonToastElement;\n if (showLoadingToast) {\n await this.showToast({message: 'NETWORK.INFO.RETRY_TO_CONNECT',\n duration: 10000,\n onWillPresent: t => loadingToast = t});\n }\n\n try {\n console.info('[network] Checking connection to pod...');\n const settings: LocalSettings = await this.settings.ready();\n\n if (!settings.peerUrl) return false; // No peer define. Skip\n\n const peer = Peer.parseUrl(settings.peerUrl);\n const peerInfo = await this.checkPeerAlive(peer);\n const peerAliveAndCompatible = peerInfo && await this.checkPeerCompatible(peerInfo);\n if (peerAliveAndCompatible) {\n\n // Disable the offline mode\n this.setForceOffline(false);\n\n // Restart\n this._startingPeer = peer;\n await this.restart();\n\n // Wait a promise, before recheck\n await this.emit('beforeTryOnlineFinish', this.online);\n\n }\n }\n catch (err) {\n console.error(err && err.message || err);\n // Continue\n }\n\n // Close loading toast (with a minimal display duration of 2s)\n if (showLoadingToast) {\n await sleep(2000 - (Date.now() - now));\n if (loadingToast) await loadingToast.dismiss();\n }\n\n // Recheck network status\n const online = this.online;\n\n // Display a toast to user\n if (online) {\n if (!opts || opts.showOnlineToast !== false) {\n // Display toast (without await, because not need to wait toast close event)\n this.showToast({message: 'NETWORK.INFO.ONLINE', type: 'info'});\n }\n }\n else if (opts && opts.showOfflineToast === true) {\n // Display toast (without await, because not need to wait toast close event)\n return this.showOfflineToast({showRetryButton: false});\n }\n\n return this.started && online;\n }\n\n async showOfflineToast(opts?: {\n message?: string;\n showCloseButton?: boolean;\n showRetryButton?: boolean;\n showRetrySuccessToast?: boolean;\n showRetryLoadingToast?: boolean;\n onRetrySuccess?: () => void;\n }): Promise<boolean> {\n if (this.online) return; // Skip if online\n\n // Toast with a retry button\n if (!opts || opts.showRetryButton !== false) {\n\n const toastResult = await this.showToast({\n message: (opts && opts.message || 'ERROR.NETWORK_REQUIRED'),\n type: 'warning',\n showCloseButton: true,\n duration: 100000,\n buttons: [\n // reconnect button\n {\n role: 'refresh',\n text: this.translate.instant('NETWORK.BTN_CHECK_ALIVE')\n }\n ]\n });\n\n // User don't click reconnect: return\n if (!toastResult || toastResult.role !== 'refresh') return false;\n\n // if network state changed to online: exit here\n if (this.online) return true;\n\n // Try to reconnect\n const online = await this.tryOnline({\n showOfflineToast: false,\n showOnlineToast: toBoolean(opts && opts.showRetrySuccessToast, true),\n showLoadingToast: toBoolean(opts && opts.showRetryLoadingToast, true)\n });\n if (online) {\n // Call success callback (async)\n if (opts && opts.onRetrySuccess) {\n setTimeout(opts.onRetrySuccess);\n }\n return true;\n }\n\n opts = {\n ...opts,\n showRetryButton: false,\n showCloseButton: true\n };\n }\n\n // Simple toast, without 'await', because not need to wait toast's dismiss\n this.showToast({\n message: 'ERROR.NETWORK_REQUIRED',\n type: 'error',\n ...opts\n });\n\n return false;\n }\n\n\n /**\n * Check if the peer is alive\n *\n * @param email\n */\n async checkPeerAlive(peer?: string | Peer, opts?: { checkCompatible?: boolean; displayToast?: boolean } ): Promise<NodeInfo> {\n peer = peer || this.peer;\n if (!peer) {\n const settings: LocalSettings = await this.settings.ready();\n if (!settings.peerUrl) return undefined; // No peer define. Skip\n peer = Peer.parseUrl(settings.peerUrl);\n }\n\n try {\n return await this.getNodeInfo(peer);\n } catch (err) {\n console.debug('[network] Cannot get /api/node/info from peer: ' + (err && err.message || err), err);\n return undefined;\n }\n }\n\n async checkPeerCompatible(peerInfo: NodeInfo, opts?: { showToast?: boolean }): Promise<boolean> {\n if (!this.environment.peerMinVersion) return true; // Skip compatibility check\n\n // Check the min pod version, defined by the app\n const isCompatible = peerInfo && peerInfo.softwareVersion && VersionUtils.isCompatible(this.environment.peerMinVersion, peerInfo.softwareVersion);\n\n // Display toast, if not compatible\n if (!isCompatible && (!opts || opts.showToast !== false)) {\n await this.showToast({\n type: 'error',\n message: 'NETWORK.ERROR.NOT_COMPATIBLE_PEER',\n messageParams: {\n version: this.environment.peerMinVersion\n },\n showCloseButton: true\n });\n }\n return isCompatible;\n }\n\n getNodeInfo(peer?: string | Peer): Promise<NodeInfo> {\n peer = peer || this.peer;\n\n if (!peer) return undefined;\n\n let peerUrl = isInstanceOf(peer, Peer) ? peer.url : (peer as string);\n // Remove trailing slash\n if (peerUrl.endsWith('/')) {\n peerUrl = peerUrl.substr(0, peerUrl.length - 1);\n }\n return this.get(peerUrl + '/api/node/info');\n }\n\n /**\n * Allow to force offline mode\n */\n setForceOffline(value?: boolean, opts?: {\n showToast?: boolean; // Display a toast, when offline ?\n }) {\n value = toBoolean(value, true);\n if (this._forceOffline !== value) {\n const previousConnectionType = this.connectionType;\n this._forceOffline = value;\n const currentConnectionType = this.connectionType;\n\n if (previousConnectionType !== currentConnectionType) {\n console.info(`[network] Connection changed to {${currentConnectionType}}`);\n this.onNetworkStatusChanges.next(currentConnectionType);\n\n // Offline mode: alert the user\n if (currentConnectionType === 'none' && (!opts || opts.showToast !== false)) {\n this.showToast({message: 'NETWORK.INFO.OFFLINE_HELP'});\n }\n }\n }\n }\n\n async showSelectPeerModal(opts?: {allowSelectDownPeer?: boolean; canCancel?: boolean}): Promise<Peer | undefined> {\n\n opts = opts || {};\n\n const $onRefresh = new EventEmitter<UIEvent>();\n const peers$ = $onRefresh.pipe(\n mergeMap((_) => this.getDefaultPeers()),\n map(peers => peers || [])\n );\n\n const modal = await this.modalCtrl.create({\n component: SelectPeerModal,\n componentProps: {\n onRefresh: $onRefresh,\n peers: peers$,\n canCancel: toBoolean(opts.canCancel, true),\n allowSelectDownPeer: toBoolean(opts.allowSelectDownPeer, true)\n },\n keyboardClose: true,\n showBackdrop: true\n });\n await modal.present();\n $onRefresh.emit();\n\n const { data } = await modal.onWillDismiss();\n $onRefresh.complete();\n\n return data && (data as Peer) || undefined;\n }\n\n async clearCache(opts?: { emitEvent?: boolean }): Promise<void> {\n\n const now = this._debug && Date.now();\n\n console.info('[network] Clearing all caches...');\n return this.cache.clearAll()\n .then(() => {\n // Emit event\n if (!opts || opts.emitEvent !== false && this.onResetNetworkCache.observers.length) {\n this.onResetNetworkCache.emit();\n\n // Wait observers clean their caches, if need\n return sleep(500);\n }\n })\n .then(() => {\n if (this._debug) console.debug(`[network] All cache cleared, in ${Date.now() - now}ms`);\n });\n }\n\n /* -- protected functions -- */\n\n protected async ngOnStart(): Promise<Peer> {\n\n console.info('[network] Starting network...', this._startingPeer);\n\n // Restoring local settings\n let peer = this._startingPeer || (await this.restoreLocally());\n\n // Make sure to hide the splashscreen, before open the modal\n if (!peer && this.splashScreen) this.splashScreen.hide();\n\n // No peer in settings: ask user to choose\n while (!peer) {\n console.debug('[network] No peer defined. Asking user to choose a peer.');\n peer = await this.showSelectPeerModal({allowSelectDownPeer: false});\n }\n\n console.info(`[network] Starting service [OK] {peer: '${peer.url}', online: ${this.online}}`);\n\n return peer;\n }\n\n protected async ngOnAfterStart() {\n\n // Wait settings starts, then save peer in settings\n await this.settings.apply({peerUrl: this._data.url});\n\n this.onDeviceConnectionChanged(this.network?.type || 'unknown');\n\n // Start the refresh timer\n this.startRefreshTimer();\n\n // Listen for device network changes\n if (this.network) {\n this._subscription.add(this.network.onDisconnect().subscribe(() => this.onDeviceConnectionChanged('none')));\n this._subscription.add(this.network.onConnect().subscribe(() => this.onDeviceConnectionChanged(this.network.type)));\n }\n }\n\n protected async ngOnStop() {\n this.resetData();\n\n // Stop timer if cannot refresh anymore\n if (this._timerRefreshCondition() === false) {\n this.stopRefreshTimer();\n }\n\n this._subscription.unsubscribe();\n this._subscription = new Subscription();\n }\n\n /**\n * Try to restore peer from the local storage\n */\n protected async restoreLocally(): Promise<Peer | undefined> {\n\n // Restore from storage\n const settingsStr = await this.storage.get(SETTINGS_STORAGE_KEY);\n const settings = settingsStr && JSON.parse(settingsStr) || undefined;\n if (settings && settings.peerUrl) {\n console.debug(`[network] Use peer {${settings.peerUrl}} (found in the local storage)`);\n return Peer.parseUrl(settings.peerUrl);\n }\n\n // Else, use default peer in env, if exists\n if (this.environment.defaultPeer) {\n return Peer.fromObject(this.environment.defaultPeer);\n }\n\n // Else, if App is hosted, try the web site as a peer\n const location = this._document && this._document.location;\n if (location && location.protocol && location.protocol.startsWith('http')) {\n const hostname = this._document.location.host;\n const detectedPeer = Peer.parseUrl(`${this._document.location.protocol}${hostname}${this.environment.baseUrl}`);\n if (await this.checkPeerAlive(detectedPeer)) {\n return detectedPeer;\n }\n }\n\n return undefined;\n }\n\n /**\n * Stop to network state\n *\n * @protected\n */\n protected stopRefreshTimer() {\n if (this._timerSubscription) {\n this._timerSubscription.unsubscribe();\n this._timerSubscription = undefined;\n }\n }\n\n /**\n * Refresh the network state\n *\n * @protected\n */\n protected startRefreshTimer(){\n if (this._timerSubscription) return; // Already running: skip\n\n console.info(`[network] Starting refresh timer, every ${this._timerRefreshPeriod}ms...`);\n\n let lastInfo: NodeInfo;\n this._timerSubscription = timer(this._timerRefreshPeriod, this._timerRefreshPeriod)\n .pipe(\n // Skip some timer event (see constructor)\n filter(this._timerRefreshCondition),\n\n // Checkin if peer alive\n tap(() => console.debug('[network] Checking connection to pod...')),\n mergeMap(() => this.checkPeerAlive(this.peer)),\n\n // Filter to keep only changes\n filter(info => !!info !== !!lastInfo),\n tap(info => lastInfo = info),\n\n // Check compatibility\n mergeMap((info) => this.checkPeerCompatible(info, {showToast: true})),\n )\n .subscribe(alive => {\n if (alive && this.offline) {\n this.setForceOffline(false);\n\n // Restart the service (to force re auth)\n this.restart();\n }\n else if (!alive && this.online){\n this.setForceOffline(true);\n\n // Stop the service\n this.stop();\n }\n });\n\n this._timerSubscription.add(() => console.debug('[network] Refresh timer stopped'));\n }\n\n protected async get<T>(path: string, opts?: {\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n }): Promise<T> {\n\n let uri = path;\n\n // If path is not an URI: prepend with peer URL\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n let peerUrl = (this.peer && this.peer.url);\n\n // Remove trailing slash\n if (peerUrl.endsWith('/')) {\n peerUrl = peerUrl.substr(0, peerUrl.length - 1 );\n }\n\n // Add first path\n if (!path.startsWith('/')) {\n path = '/' + path;\n }\n\n // Create the URI: concat peer URL and path\n uri = peerUrl + path;\n }\n\n // Execute the request\n return HttpUtils.getResource(this.http, uri, opts);\n }\n\n\n /* -- Protected methods -- */\n\n protected onDeviceConnectionChanged(connectionType?: string) {\n connectionType = (connectionType || 'unknown').toLowerCase();\n if (connectionType.startsWith('cell')) connectionType = 'cell';\n if (connectionType !== this._deviceConnectionType) {\n this._deviceConnectionType = connectionType as ConnectionType;\n\n // If NOT already forced as offline, emit event\n if (!this._forceOffline) {\n console.info(`[network] Connection changed to {${this._deviceConnectionType}}`);\n this.onNetworkStatusChanges.next(this._deviceConnectionType);\n\n // Change to offline\n if (this._deviceConnectionType === 'none') {\n if (this._mobile) {\n // Force offline mode\n this._forceOffline = true;\n\n // Alert the user\n this.showToast({message: 'NETWORK.INFO.OFFLINE_HELP'});\n }\n else {\n // Alert the user\n this.showToast({message: 'NETWORK.INFO.OFFLINE'});\n }\n\n // Stop the network service\n this.stop();\n }\n }\n }\n }\n\n protected resetData() {\n this._data = null;\n }\n\n\n\n /**\n * Get default peers, from environment\n */\n protected async getDefaultPeers(): Promise<Peer[]> {\n const peers = (this.environment.defaultPeers || []).map(Peer.fromObject);\n return Promise.resolve(peers);\n }\n\n protected showToast<T = any>(opts: ShowToastOptions): Promise<OverlayEventDetail<T>> {\n return Toasts.show(this.toastController, this.translate, opts);\n }\n\n protected addListener<T= any>(name: NetworkEventType, callback: (data?: T) => Promise<void>): Subscription {\n this._listeners[name] = this._listeners[name] || [];\n this._listeners[name].push(callback);\n\n // When unsubscribe, remove from the listener\n return new Subscription(() => {\n const index = this._listeners[name].indexOf(callback);\n if (index !== -1) {\n this._listeners[name].splice(index, 1);\n }\n });\n }\n\n protected async emit<T= any>(name: NetworkEventType, data?: T) {\n const hooks = this._listeners[name];\n if (isNotEmptyArray(hooks)) {\n console.info(`[network-service] Trigger ${name} hook: Executing ${hooks.length} callbacks...`);\n\n return Promise.all(hooks.map(callback => {\n const promise = callback(data);\n if (!promise) return;\n return promise.catch(err => console.error('Error while executing hook ' + name, err));\n }));\n }\n }\n}\n","\nexport declare interface ServiceError {\n code: number;\n message: String;\n reject?: (err) => void;\n}\n\nexport const ErrorCodes = {\n\n UNKNOWN_ERROR: 0,\n\n LOAD_ACCOUNT_ERROR: 1,\n BAD_PASSWORD: 2,\n UNKNOWN_ACCOUNT_EMAIL: 3,\n EMAIL_ALREADY_REGISTERED: 4,\n UNREACHABLE_NETWORK_ERROR: 4,\n UNKNOWN_NETWORK_ERROR: 5,\n SENT_CONFIRMATION_EMAIL_FAILED: 6,\n CONFIRM_EMAIL_FAILED: 7,\n SAVE_ACCOUNT_ERROR: 8,\n ACCOUNT_NOT_EXISTS: 9,\n SUBSCRIBE_ACCOUNT_ERROR: 10,\n ENTITY_STORAGE_MIGRATION_FAILED: 11,\n\n LOAD_DATA_ERROR: 12,\n SAVE_DATA_ERROR: 13,\n DELETE_DATA_ERROR: 14,\n SUBSCRIBE_DATA_ERROR: 15,\n\n // DATA errors (load error)\n LOAD_PERSONS_ERROR: 100,\n DATA_NOT_FOUND_ERROR: 104,\n\n TABLE_INVALID_ROW_ERROR: 350,\n TABLE_READ_ONLY: 351,\n\n UNAUTHORIZED: 401,\n AUTH_CHALLENGE_ERROR: 601,\n AUTH_SERVER_ERROR: 602,\n\n LOAD_CONFIG_ERROR: 700,\n SAVE_CONFIG_ERROR: 701,\n\n LOAD_TRASH_ENTITY_ERROR: 800,\n DELETE_TRASH_ENTITY_ERROR: 801\n};\n\nexport const ServerErrorCodes = {\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401, // not authenticated\n FORBIDDEN: 403, // authenticated but no access right\n NOT_FOUND: 404,\n\n // sumaris-core-shared errors\n INTERNAL_SERVER_ERROR: 500,\n DATA_LOCKED: 520,\n BAD_UPDATE_DATE: 521,\n DENY_DELETION: 522,\n\n // sumaris-server errors\n INVALID_EMAIL_CONFIRMATION: 550,\n INVALID_QUERY_VARIABLES: 551,\n ACCOUNT_ALREADY_EXISTS: 552,\n BAD_APP_VERSION: 553\n};\n","import {BehaviorSubject, Observable} from 'rxjs';\nimport {Storage} from '@ionic/storage';\nimport {map, mergeMap} from 'rxjs/operators';\nimport {Entity, EntityUtils, IEntity} from '../model/entity.model';\nimport {isEmptyArray, isNil, isNotEmptyArray, isNotNil} from '../../../shared/functions';\nimport {IEntitiesService, LoadResult} from '../../../shared/services/entity-service.class';\nimport {chainPromises} from '../../../shared/observables';\nimport {ErrorCodes} from '../errors';\n\nexport const ENTITIES_STORAGE_KEY_PREFIX = 'entities';\n\nexport type EntityStoreTypePolicyMode = 'default' | 'by-id';\n\nexport declare interface EntityStoreTypePolicy<T extends Entity<T, any> = Entity<any, any>, K = keyof T> {\n mode?: EntityStoreTypePolicyMode; // 'default' by default\n skipNonLocalEntities?: boolean; // False by default\n lightFieldsExcludes?: K[]; // none by default\n}\n\nexport declare interface EntityStorageLoadOptions {\n fullLoad?: boolean;\n}\n\ndeclare interface EntityStatus {\n index: number;\n dirty?: boolean;\n}\n\nexport class EntityStore<\n T extends IEntity<T, ID>,\n ID = number,\n O extends EntityStorageLoadOptions = EntityStorageLoadOptions> {\n\n private readonly _storageKey: string;\n private readonly _onChange = new BehaviorSubject(true);\n private readonly _mapToLightEntity: (T) => T;\n private _cache: T[];\n private _statusById: Map<ID, EntityStatus>;\n private _sequence: number;\n private _dirty = false;\n private _loaded: boolean;\n\n readonly policy: EntityStoreTypePolicy<T>;\n\n get cache(): T[] {\n return this._cache;\n }\n\n get dirty(): boolean {\n return this._dirty;\n }\n\n protected get isByIdMode(): boolean {\n return this.policy.mode === 'by-id';\n }\n\n protected get storageKeyById(): string {\n return this._storageKey + '#ids';\n }\n\n constructor(\n protected readonly name: string,\n protected readonly storage: Storage,\n policy?: EntityStoreTypePolicy<T>) {\n this.policy = policy || {};\n this.reset({emitEvent: false});\n this._dirty = false;\n this._loaded = false;\n this._storageKey = ENTITIES_STORAGE_KEY_PREFIX + '#' + name;\n this._mapToLightEntity = this.createLightEntityMapFn(this.policy);\n }\n\n nextValue(): ID {\n this._sequence = this._sequence - 1;\n this._dirty = true;\n return this._sequence as unknown as ID;\n }\n\n currentValue(): number {\n return this._sequence;\n }\n\n async load(id: ID, opts?: EntityStorageLoadOptions): Promise<T> {\n if (this._mapToLightEntity && (!opts || opts.fullLoad !== false)) {\n return await this.loadFullEntity(id, opts);\n }\n return this.loadCachedEntity(id, opts);\n }\n\n /**\n * Watch a set of entities\n *\n * @param variables\n * @param opts\n */\n watchAll(variables: {\n offset?: number;\n size?: number;\n sortBy?: string;\n sortDirection?: string;\n filter?: (T) => boolean;\n }, opts?: O): Observable<LoadResult<T>> {\n\n // If need full entities, but use light entities in the entities array\n if (this._mapToLightEntity && (opts && opts.fullLoad === true)) {\n console.warn('[entity-store] WARN: Watching full entities, splited by id in entity store. This can be long! Please make sure you need full entities here.');\n return this._onChange\n .pipe(\n // Apply filter on cache\n map((_) => this.reduceAndSort(this._cache, variables)),\n\n // Then convert into full entities (using parallel jobs - /!\\ can use lot of memory)\n mergeMap((res) => Promise.all((res.data || [])\n .map(e => this.loadFullEntity(e.id, opts))).then(data => ({\n data,\n total: res.total\n }))\n )\n );\n }\n\n // Load using entities array\n return this._onChange\n .pipe(\n map((_) => this.reduceAndSort(this._cache, variables))\n );\n }\n\n /**\n * WIll apply a filter, then a sort, then a page slice\n *\n * @param variables\n * @param opts\n */\n async loadAll(variables: {\n offset?: number;\n size?: number;\n sortBy?: string;\n sortDirection?: string;\n filter?: (T) => boolean;\n }, opts?: O): Promise<LoadResult<T>> {\n\n const res = this.reduceAndSort(this._cache, variables);\n\n // If store by ID: make sure to full the full entities\n if (this._mapToLightEntity && isNotEmptyArray(res.data) && (opts && opts.fullLoad === true)) {\n // Load full entities, one by one\n res.data = await chainPromises((res.data || []).map(e => () => this.load(e.id)));\n }\n\n return res ;\n }\n\n save(entity: T, opts?: {emitEvent?: boolean}): T {\n const status = isNotNil(entity.id) && this._statusById.get(entity.id) || {index: undefined};\n const isNew = isNil(status.index);\n if (isNew) {\n if (isNil(entity.id)) {\n entity.id = this.nextValue();\n }\n else if (+entity.id < 0 && +entity.id > this._sequence) {\n console.warn('Trying to save a local entity with an id > sequence. Will replace id by sequence next value');\n entity.id = this.nextValue();\n }\n else {\n // OK: use a valid id :\n // - id >= 0 (should be a remote id)\n // - OR < sequence, and not exists in the index map\n }\n\n this._statusById.set(entity.id, status);\n status.index = this._cache.push(entity) - 1;\n }\n else {\n this._cache[status.index] = entity;\n }\n\n // Mark entity as dirty\n status.dirty = true;\n\n // Mark storage as dirty\n this._dirty = true;\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n\n return entity;\n }\n\n saveAll(entities: T[], opts?: { emitEvent?: boolean; reset?: boolean }): T[] {\n if (isEmptyArray(entities) && (!opts || opts.reset !== true)) return entities; // Skip (Nothing to save)\n\n let result: T[];\n\n console.info(`[entity-storage] Saving ${entities.length} ${this.name}(s)`);\n\n // First save, or reset using given entities\n if (isEmptyArray(this._cache) || (opts && opts.reset)) {\n this.setEntities(entities, {emitEvent: false});\n }\n else {\n result = entities.map((entity) => this.save(entity, {emitEvent: false}));\n }\n\n // Mark as dirty\n this._dirty = true;\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n\n return result || this._cache.slice();\n }\n\n delete(id: ID, opts?: { emitEvent?: boolean }): T | undefined {\n const status = isNotNil(id) ? this._statusById.get(id) : undefined;\n const index = status ? status.index : undefined;\n if (isNil(index)) return undefined;\n\n const entity = this._cache[index];\n if (!entity) return undefined;\n\n // Remove from cache\n this._cache[index] = undefined;\n this._statusById.delete(entity.id);\n\n // Remove full entity, by id\n if (this.isByIdMode) {\n this.storage.remove(this._storageKey + '#' + id);\n }\n\n // Mark as dirty\n this._dirty = true;\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n\n return entity as T;\n }\n\n deleteMany(ids: ID[], opts?: {emitEvent?: boolean}): T[] {\n\n // Delete by id, but NOT emit event on each deletion\n const deletedEntities = (ids || [])\n .map(id => this.delete(id, {emitEvent: false}))\n .filter(isNotNil);\n\n // No changes: exit\n if (!deletedEntities.length) return [];\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n\n return deletedEntities;\n }\n\n reset(opts?: {emitEvent?: boolean}) {\n this._cache = [];\n this._sequence = 0;\n this._statusById = new Map<ID, any>();\n\n this._dirty = true;\n this._loaded = true;\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n }\n\n /**\n *\n * @param opts\n * opts.force : force all entities to be persist, and not only if dirty\n */\n async persist(opts?: { skipIfPristine?: boolean }): Promise<number> {\n opts = {\n skipIfPristine: this.policy.skipNonLocalEntities,\n ...opts\n };\n\n // Skip is not dirty\n if (opts.skipIfPristine && !this._dirty) {\n console.debug(`[entity-storage] Persisting ${this.name} not need. Skip`);\n return this._cache.length;\n }\n\n // Copy some data, BEFORE to call markAsPristine() to allow parallel changes\n const dirtyIndexes = this.isByIdMode && Array.from(this._statusById.values())\n .filter(s => !opts.skipIfPristine || (s && s.dirty))\n .map(s => s.index);\n const entities = this._cache.slice(); // Copy cached entities\n\n // Mark all (entities and status) as pristine\n this.markAsPristine({emitEvent: false});\n\n // Convert dirty entities into light entities (/!\\ AFTER the previous copy)\n // and update the cache (but NOT the 'entities' variable)\n if (dirtyIndexes && this._mapToLightEntity) {\n dirtyIndexes.forEach(index => this._cache[index] = this._mapToLightEntity(entities[index]));\n }\n\n // If no entity found\n if (isEmptyArray(entities)) {\n\n // Clean the local storage\n await this.storage.remove(this._storageKey);\n }\n else {\n\n // Save each entity into a unique key (advanced mode)\n if (this.isByIdMode) {\n // Save ids\n await this.storage.set(this.storageKeyById, entities.filter(isNotNil).map(e => e.id));\n\n // Saved dirty entities\n await Promise.all(\n dirtyIndexes\n .map(index => {\n const entity = entities[index];\n console.debug(`[entity-storage] Persisting ${this.name}#${entity.id}...`);\n return this.storage.set(this._storageKey + '#' + entity.id, entity);\n }));\n\n console.info(`[entity-storage] Persisting ${dirtyIndexes.length}/${entities.length} ${this.name}(s)...`);\n }\n\n // Save all entities in a single key (default)\n else {\n\n console.info(`[entity-storage] Persisting ${entities.length} ${this.name}(s)...`);\n await this.storage.set(this._storageKey, entities);\n }\n }\n\n return entities.length;\n }\n\n async restore(opts?: { emitEvent?: boolean }): Promise<number> {\n let entities: T[];\n\n const res = await Promise.all([\n this.storage.get(this._storageKey),\n this.storage.get(this.storageKeyById)\n ]);\n const values = res[0] && res[0] instanceof Array ? res[0] : null;\n const ids = res[1] && res[1] instanceof Array ? res[1] : null;\n let migration = false;\n let oldKeysToClean: string[];\n\n // \"Split by id\" mode\n if (this.isByIdMode) {\n if (isNotNil(ids)) {\n // Load entity by id (one by one)\n const storageKeys = ids.map(id => this._storageKey + '#' + id);\n entities = await chainPromises<T>(storageKeys.map(key => () => this.storage.get(key)));\n }\n // Migrate from the standard mode\n else if (isNotNil(values)) {\n entities = values.filter(e => e && isNotNil(e.id));\n migration = true;\n oldKeysToClean = [this._storageKey];\n }\n }\n\n // Else (default mode)\n else {\n if (isNotNil(values)) {\n entities = values.filter(e => e && isNotNil(e.id));\n }\n else if (isNotNil(ids)) {\n const storageKeys = ids.map(id => this._storageKey + '#' + id);\n // Load entity by id (one by one)\n entities = await chainPromises<T>(storageKeys.map(key => () => this.storage.get(key)));\n migration = true;\n oldKeysToClean = [...storageKeys, this.storageKeyById];\n }\n }\n\n // OK, there is something in storage...\n if (isNotEmptyArray(entities)) {\n if (entities.length >= 1000) {\n console.warn(`[entity-storage] - Restoring ${entities.length} ${this.name}. Check if not too many elements?!`);\n }\n\n // Map entities into light element (if if not need to persist, because of migration\n if (this._mapToLightEntity && !migration) {\n entities = entities.map(this._mapToLightEntity);\n }\n }\n\n this.setEntities(entities || [], {...opts, emitEvent: false });\n this._dirty = false;\n\n // Finish the migration\n if (migration) {\n try {\n console.warn(`[entity-storage] - Migrate ${this.name} into {mode: '${this.policy.mode}'}...`);\n\n // Force to persist, using the new mode\n await this.persist({skipIfPristine: false /* force persist using the new mode */ });\n\n // Clean old storage keys (one by one)\n if (isNotEmptyArray(oldKeysToClean)) await chainPromises(oldKeysToClean.map(key => () => this.storage.remove(key)));\n }\n catch (err) {\n console.error(err);\n throw {code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err};\n }\n }\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n\n return this._cache.length;\n }\n\n markAsDirty(opts?: { emitEvent?: boolean }) {\n this._dirty = true;\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n }\n\n markAsPristine(opts?: { emitEvent?: boolean }) {\n\n for (const s of this._statusById.values()) {\n if (isNotNil(s)) {\n s.dirty = false;\n }\n }\n this._dirty = false;\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n }\n\n /* -- protected methods -- */\n\n private loadCachedEntity(id: ID, opts?: EntityStorageLoadOptions): T {\n const status = this._statusById.get(id);\n const index = status && status.index;\n if (isNil(index)) return undefined; // not exists\n return Object.freeze(this._cache[index]);\n }\n\n private async loadFullEntity(id: ID, opts?: EntityStorageLoadOptions): Promise<T> {\n const status = this._statusById.get(id);\n const index = status && status.index;\n if (isNil(index)) return undefined; // not exists\n\n // Reload from storage, if need (e.g. some attributes has been excluded in light elements)\n if (status.dirty === false) {\n console.debug(`[entity-storage] Full reloading ${this.name}#${id}...`);\n const fullData = await this.storage.get(this._storageKey + '#' + id);\n if (fullData) return fullData;\n // Not found by id, continue from cache (version prior to 1.5.3)\n }\n\n // Load from the cache, if dirty OR if storage is not splited by id\n return this._cache[index];\n }\n\n private setEntities(entities: T[], opts?: {emitEvent?: boolean }) {\n // Filter non nil (and if need non local) entities\n entities = (entities || [])\n .filter(item => isNotNil(item)\n && (!this.policy.skipNonLocalEntities || +item.id < 0)\n );\n\n this._cache = entities;\n\n // Update the sequence with min(id) of all temporary ids\n this._sequence = this._cache.reduce((res, item) => +item.id < 0 ? Math.min(res, +item.id) : res, 0);\n\n this._statusById.clear();\n this._cache.forEach((item, index) => {\n this._statusById.set(item.id, <EntityStatus>{\n index,\n dirty: false\n });\n });\n\n this._loaded = true;\n\n // Emit update event\n if (!opts || opts.emitEvent !== false) {\n this.emitEvent();\n }\n }\n\n\n /**\n * WIll apply a filter, then a sort, then a page slice\n *\n * @param data\n * @param variables\n */\n private reduceAndSort(data: T[],\n variables: {\n offset?: number;\n size?: number;\n sortBy?: string;\n sortDirection?: string;\n filter?: (T) => boolean;\n }): LoadResult<T> {\n if (isEmptyArray(data)) {\n return {data: [], total: 0};\n }\n\n // Remove nil values\n data = data.filter(isNotNil);\n\n if (!variables) {\n // Return all (but array has been filtered, and copied)\n return {data, total: data.length};\n }\n\n // Apply the filter, if any\n if (variables.filter) {\n data = data.filter(variables.filter);\n }\n\n // Compute the total length\n const total = data.length;\n\n // If page size=0 (e.g. only need total)\n if (variables.size === 0) return {data: [], total};\n\n // Sort by\n if (data.length && variables.sortBy) {\n EntityUtils.sort(data, variables.sortBy, variables.sortDirection);\n }\n\n // Slice in a page (using offset and size)\n if (variables.offset > 0) {\n\n // Offset after the end: no result\n if (variables.offset >= data.length || variables.size === 0) {\n data = [];\n }\n else {\n data = (variables.size > 0 && ((variables.offset + variables.size) < data.length)) ?\n // Slice using limit to size\n data.slice(variables.offset, variables.offset + variables.size) :\n // Slice without limit\n data.slice(variables.offset);\n }\n }\n\n // Apply a limit\n else if (variables.size > 0){\n data = data.slice(0, variables.size);\n }\n // No limit:\n else if (variables.size === -1){\n // Keep all data\n }\n\n return {data, total};\n }\n\n private createLightEntityMapFn(policy: EntityStoreTypePolicy<T>): (T) => T {\n if (policy.mode !== 'by-id') return undefined; // Only need for the 'by-id' mode\n if (isEmptyArray(policy.lightFieldsExcludes)) return undefined; // skip\n\n // Create a immutable mask object, use to clean some properties\n const excludeAttributesMask = Object.freeze(this.policy.lightFieldsExcludes.reduce((res, attr) => {\n res[attr] = undefined;\n return res;\n }, <T>{}));\n\n return (entity) => entity ? Object.assign(<T>{}, entity, excludeAttributesMask) : undefined;\n }\n\n /**\n * Update the entitiesSubject.\n *\n * Before wending items, a filter is apply, to remove null value.\n * This filter will create a array copy.\n */\n private emitEvent() {\n this._onChange.next(true);\n }\n}\n","import {defer, merge, Observable, Subscription, timer} from 'rxjs';\nimport {EventEmitter, Inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {Storage} from '@ionic/storage';\nimport {Platform} from '@ionic/angular';\nimport {first, switchMap, throttleTime} from 'rxjs/operators';\nimport {Entity, IEntity} from '../model/entity.model';\nimport {isEmptyArray, isNilOrBlank, toNumber} from '../../../shared/functions';\nimport {LoadResult} from '../../../shared/services/entity-service.class';\nimport {ENTITIES_STORAGE_KEY_PREFIX, EntityStorageLoadOptions, EntityStore, EntityStoreTypePolicy} from './entity-store.class';\nimport {ProgressBarService} from '../../../shared/services/progress-bar.service';\nimport {Environment, ENVIRONMENT} from '../../../../environments/environment.class';\nimport {StartableService} from '../../../shared/services/startable-service.class';\nimport {chainPromises} from '../../../shared/observables';\n\n\nexport interface EntitiesStorageTypePolicies {\n [__typename: string]: EntityStoreTypePolicy;\n}\n\nexport const APP_LOCAL_STORAGE_TYPE_POLICIES = new InjectionToken<EntitiesStorageTypePolicies>('localStorageTypePolicies');\n\ndeclare interface EntityStorageMap { [key: string]: EntityStore<any, any> };\n\n@Injectable({providedIn: 'root'})\nexport class EntitiesStorage extends StartableService<EntityStorageMap> {\n\n public static TRASH_PREFIX = 'Trash#';\n public static REMOTE_PREFIX = 'Remote#';\n\n private readonly _typePolicies: EntitiesStorageTypePolicies;\n private _subscription = new Subscription();\n private readonly _saveTimerPeriod;\n\n\n private _$save = new EventEmitter(true);\n private _dirty = false;\n private _saving = false;\n\n\n get dirty(): boolean {\n return this._dirty || Object.values(this._data).some(store => store.dirty);\n }\n\n public constructor(\n private platform: Platform,\n private progressBarService: ProgressBarService,\n private storage: Storage,\n @Inject(ENVIRONMENT) protected environment: Environment,\n @Optional() @Inject(APP_LOCAL_STORAGE_TYPE_POLICIES) typePolicies: EntitiesStorageTypePolicies\n ) {\n super(platform);\n this._typePolicies = typePolicies || {};\n this._saveTimerPeriod = environment.storageSavePeriodMs || 10000 /* = 10s */;\n this._data = {};\n\n // For DEV only\n this._debug = !environment.production;\n if (this._debug) console.debug('[entities-storage] Creating service');\n }\n\n watchAll<T extends Entity<T>>(entityName: string,\n variables: {\n offset?: number;\n size?: number;\n sortBy?: string;\n sortDirection?: string;\n trash?: boolean;\n filter?: (T) => boolean;\n },\n opts?: EntityStorageLoadOptions): Observable<LoadResult<T>> {\n // Make sure store is ready\n if (!this.started) {\n return defer(() => this.ready())\n .pipe(switchMap(() => this.watchAll<T>(entityName, variables, opts))); // Loop\n }\n\n this.progressBarService.increase();\n const storeName = variables && variables.trash ? (EntitiesStorage.TRASH_PREFIX + entityName) : entityName;\n const result = this.getEntityStore<T>(storeName, {create: true})\n .watchAll(variables, opts);\n\n result.pipe(first()).subscribe(() => this.progressBarService.decrease());\n\n return result;\n }\n\n async loadAll<T extends Entity<T>>(entityName: string,\n variables?: {\n offset?: number;\n size?: number;\n sortBy?: string;\n sortDirection?: string;\n filter?: (T) => boolean;\n },\n opts?: EntityStorageLoadOptions): Promise<LoadResult<T>> {\n\n // Make sure store is ready\n if (!this.started) await this.ready();\n\n try {\n this.progressBarService.increase();\n if (this._debug) console.debug(`[entities-storage] Loading ${entityName}...`);\n\n const entityStore = this.getEntityStore<T>(entityName, {create: false});\n if (!entityStore) return {data: [], total: 0}; // No store for this entity name\n\n return entityStore.loadAll(variables, opts);\n }\n finally {\n this.progressBarService.decrease();\n }\n }\n\n async load<T extends Entity<T>>(id: number, entityName: string, opts?: EntityStorageLoadOptions): Promise<T> {\n await this.ready();\n\n try {\n this.progressBarService.increase();\n\n const entityStore = this.getEntityStore<T>(entityName, {create: false});\n if (!entityStore) return undefined;\n return await entityStore.load(id, opts);\n }\n finally {\n this.progressBarService.decrease();\n }\n }\n\n async nextValue(entityOrName: string | any): Promise<number> {\n await this.ready();\n this._dirty = true;\n return this.getEntityStore(this.detectEntityName(entityOrName)).nextValue();\n }\n\n async nextValues(entityOrName: string | any, entityCount: number): Promise<number> {\n await this.ready();\n this._dirty = true;\n const entityName = this.detectEntityName(entityOrName);\n const store = this.getEntityStore(entityName);\n const firstValue = store.nextValue();\n for (let i = 0; i < entityCount - 1; i++) {\n store.nextValue();\n }\n if (this._debug) console.debug(`[entities-storage] Reserving range [${firstValue},${store.currentValue()}] for ${entityName}'s sequence`);\n return firstValue;\n }\n\n async currentValue(entityOrName: string | any): Promise<number> {\n await this.ready();\n return this.getEntityStore(this.detectEntityName(entityOrName)).currentValue();\n }\n\n async save<T extends Entity<T>>(entity: T, opts?: {\n entityName?: string;\n emitEvent?: boolean;\n }): Promise<T> {\n if (!entity) return; // skip\n\n if (!this.started) await this.ready();\n\n try {\n this.progressBarService.increase();\n\n this._dirty = true;\n const storeName = opts && opts.entityName || this.detectEntityName(entity);\n this.getEntityStore<T>(storeName)\n .save(entity, opts);\n\n // Ask to save\n this._$save.emit();\n\n return entity;\n }\n finally {\n this.progressBarService.decrease();\n }\n }\n\n async saveAll<T extends Entity<T>>(entities: T[], opts?: {\n entityName?: string;\n reset?: boolean;\n emitEvent?: boolean;\n }): Promise<T[]> {\n if (isEmptyArray(entities) && (!opts || opts.reset !== true)) return entities; // Skip (nothing to save)\n\n if (!this.started) await this.ready();\n\n try {\n this.progressBarService.increase();\n\n this._dirty = true;\n const entityName = opts && opts.entityName || this.detectEntityName(entities[0]);\n return this.getEntityStore<T>(entityName).saveAll(entities, opts);\n }\n finally {\n this.progressBarService.decrease();\n }\n }\n\n async delete<T extends Entity<T, ID>, ID = number>(entity: T, opts?: {\n entityName?: string;\n }): Promise<T> {\n if (!entity) return undefined; // skip\n\n if (!this.started) await this.ready();\n\n return this.deleteById(entity.id, {\n ...opts,\n entityName: opts && opts.entityName || this.detectEntityName(entity)\n });\n }\n\n async deleteById<T extends IEntity<T, ID>, ID = number>(id: ID, opts: {\n entityName: string;\n emitEvent?: boolean;\n }): Promise<T> {\n if (!this.started) await this.ready();\n\n if (!opts || isNilOrBlank(opts.entityName)) throw new Error('Missing argument \\'opts\\' or \\'entityName\\'');\n //if (id >= 0) throw new Error('Invalid id a local entity (not a negative number): ' + id);\n\n try {\n this.progressBarService.increase();\n const entityStore = this.getEntityStore<T, ID>(opts.entityName, {create: false});\n if (!entityStore) return undefined;\n\n const deletedEntity = entityStore.delete(id, opts);\n\n // If something deleted\n if (deletedEntity) {\n\n // Mark as dirty\n this._dirty = true;\n\n // Ask to save\n this._$save.emit();\n }\n\n return deletedEntity;\n }\n finally {\n this.progressBarService.decrease();\n }\n }\n\n async deleteMany<T extends Entity<T>>(ids: number[], opts: {\n entityName: string;\n emitEvent?: boolean;\n }): Promise<T[]> {\n if (!this.started) await this.ready();\n\n if (!opts || isNilOrBlank(opts.entityName)) throw new Error('Missing argument \\'opts\\' or \\'opts.entityName\\'');\n\n try {\n this.progressBarService.increase();\n const entityStore = this.getEntityStore<T>(opts.entityName, {create: false});\n if (!entityStore) return undefined;\n\n // Do deletion\n const deletedEntities = entityStore.deleteMany(ids, opts);\n\n // If something deleted\n if (deletedEntities.length > 0) {\n\n // Mark as dirty\n this._dirty = true;\n\n // Mark as save need\n this._$save.emit();\n\n }\n\n return deletedEntities;\n } finally {\n this.progressBarService.decrease();\n }\n }\n\n async deleteFromTrash<T extends Entity<T>>(entity: T, opts?: {\n entityName?: string;\n }): Promise<T> {\n if (!entity) return undefined; // skip\n\n if (!this.started) await this.ready();\n\n return this.deleteFromTrashById(entity.id, {\n ...opts,\n entityName: opts && opts.entityName || this.detectEntityName(entity)\n });\n }\n\n async deleteFromTrashById<T extends Entity<T>>(id: number, opts: {\n entityName: string;\n emitEvent?: boolean;\n }): Promise<T> {\n await this.ready();\n\n if (!opts || isNilOrBlank(opts.entityName)) throw new Error('Missing argument \\'opts\\' or \\'entityName\\'');\n\n return this.deleteById(id, {\n ...opts,\n entityName: EntitiesStorage.TRASH_PREFIX + opts.entityName\n });\n }\n\n async moveToTrash<T extends Entity<T>>(entity: T, opts?: {\n entityName?: string;\n emitEvent?: boolean;\n }): Promise<T> {\n if (!entity) return undefined; // skip\n\n if (!this.started) await this.ready();\n\n const entityName = opts && opts.entityName || this.detectEntityName(entity);\n\n // Delete entity by id, if exists\n const entityStore = this.getEntityStore<T>(entityName);\n if (entityStore) entityStore.delete(entity.id, opts);\n\n // Clean id (a new id will be set by the trash store)\n entity.id = undefined;\n\n // Add to trash\n const trashName = EntitiesStorage.TRASH_PREFIX + entityName;\n this.getEntityStore<T>(trashName).save(entity, opts);\n\n this._$save.emit();\n\n return entity;\n }\n\n async moveManyToTrash<T extends Entity<T>>(ids: number[], opts: {\n entityName: string;\n emitEvent?: boolean;\n }): Promise<T[]> {\n if (!this.started) await this.ready();\n\n if (!opts || isNilOrBlank(opts.entityName)) throw new Error('Missing argument \\'opts.entityName\\'');\n\n const entityStore = this.getEntityStore<T>(opts.entityName, {create: false});\n if (!entityStore) return undefined;\n\n // Do deletion\n const deletedEntities = entityStore.deleteMany(ids, opts);\n\n // If something deleted\n if (deletedEntities.length > 0) {\n\n // Clean ids (new ids will be set by the trash store)\n deletedEntities.forEach(e => e.id = undefined);\n\n const trashName = EntitiesStorage.TRASH_PREFIX + opts.entityName;\n this.getEntityStore<T>(trashName, {create: true})\n .saveAll(deletedEntities, opts);\n\n // Mark as dirty\n this._dirty = true;\n\n // Mark as save need\n this._$save.emit();\n }\n\n return deletedEntities;\n }\n\n async saveToTrash<T extends Entity<T>>(entity: T, opts?: {\n entityName?: string;\n emitEvent?: boolean;\n }): Promise<T> {\n if (!entity) return undefined; // skip\n\n if (!this.started) await this.ready();\n\n const entityName = opts && opts.entityName || this.detectEntityName(entity);\n const trashName = EntitiesStorage.TRASH_PREFIX + entityName;\n this.getEntityStore<T>(trashName).save(entity, opts);\n\n this._$save.emit();\n\n return entity;\n }\n\n async clearTrash(entityName: string) {\n if (!this.started) await this.ready();\n\n const trashName = EntitiesStorage.TRASH_PREFIX + entityName;\n const entityStore = this.getEntityStore(trashName, {create: false});\n if (!entityStore) return; // Skip\n\n entityStore.reset();\n this._dirty = true;\n\n this._$save.emit();\n }\n\n persist(): Promise<void> {\n if (this._dirty) {\n return this.storeLocally();\n }\n return Promise.resolve();\n }\n\n async ngOnStart(): Promise<EntityStorageMap> {\n const now = Date.now();\n console.info(`[entities-storage] Starting entity storage...`);\n\n // Restore sequences\n await this.restoreLocally();\n\n // Start a save timer\n this._subscription.add(\n merge(\n this._$save,\n timer(this._saveTimerPeriod, this._saveTimerPeriod)\n )\n .pipe(\n // Avoid to many call (e.g. when $save AND timer are triggered\n throttleTime(this._saveTimerPeriod)\n )\n .subscribe(() => this.storeLocally())\n );\n console.info(`[entities-storage] Starting [OK] in ${Date.now() - now}ms`);\n\n return this._data;\n }\n\n protected async ngOnStop() {\n this._subscription.unsubscribe();\n this._subscription = new Subscription();\n\n if (this.dirty) {\n await this.storeLocally();\n }\n }\n\n /* -- protected methods -- */\n\n protected getEntityStore<T extends IEntity<T, ID>, ID = number>(name: string, opts?: {\n create?: boolean;\n }): EntityStore<T, ID> {\n let store = this._data[name];\n if (!store && (!opts || opts.create !== false)) {\n if (this._debug) console.debug(`[entities-storage] Creating store ${name}`);\n const typePolicy = this._typePolicies[name];\n store = new EntityStore<T, ID>(name, this.storage, typePolicy);\n this._data[name] = store;\n }\n return store;\n }\n\n protected detectEntityName(entityOrName: string | Entity<any, any>): string {\n if (!entityOrName) throw Error('Unable to detect entityName of object: ' + entityOrName);\n if (typeof entityOrName === 'string') return entityOrName;\n if (entityOrName.__typename) {\n return entityOrName.__typename;\n }\n return entityOrName.constructor.name + 'VO';\n }\n\n protected async restoreLocally() {\n\n const entityNames = await this.storage.get(ENTITIES_STORAGE_KEY_PREFIX);\n if (!entityNames) return;\n\n const now = this._debug && Date.now();\n if (this._debug) console.info('[entities-storage] Restoring entities...');\n const entitiesCount = (await Promise.all<number>(\n entityNames\n .map(name => this.getEntityStore<any>(name))\n .map((store: EntityStore<any>) => store.restore()))\n ).reduce((res, count) => (res + count), 0);\n\n if (this._debug) console.debug(`[entities-storage] Restoring entities [OK] ${entitiesCount} entities found in ${Date.now() - now}ms`);\n }\n\n protected async storeLocally(): Promise<any> {\n if (!this.dirty) return; // skip\n\n // Saving progress: report this save later\n if (this._saving) {\n if (this._debug) console.debug('[entities-storage] Previous persist not finished. Waiting...');\n this._$save.emit();\n return;\n }\n\n this._saving = true;\n this._dirty = false;\n this.progressBarService.increase();\n const entityNames = this._data && Object.keys(this._data) || [];\n\n const now = Date.now();\n if (this._debug) console.debug('[entities-storage] Persisting...');\n\n let currentEntityName;\n return chainPromises(\n entityNames.map(entityName => () => {\n currentEntityName = entityName;\n const entityStore = this.getEntityStore(entityName, {create: false});\n\n if (!entityStore) {\n console.warn(`[entities-storage] Persisting ${entityName}: store not found!`);\n return;\n }\n return entityStore.persist()\n .then(count => {\n // If no entity found, remove from the entity names array\n if (!count) {\n entityNames.splice(entityNames.findIndex(e => e === entityName), 1);\n }\n });\n }))\n .then(() => {\n currentEntityName = undefined;\n return isEmptyArray(entityNames) ?\n this.storage.remove(ENTITIES_STORAGE_KEY_PREFIX) :\n this.storage.set(ENTITIES_STORAGE_KEY_PREFIX, entityNames);\n })\n .then(() => {\n if (this._debug) console.debug(`[entities-storage] Persisting [OK] ${entityNames.length} stores saved in ${Date.now() - now}ms...`);\n this._saving = false;\n this.progressBarService.decrease();\n })\n .catch(err => {\n this._saving = false;\n this.progressBarService.decrease();\n if (currentEntityName) {\n console.error(`[entities-storage] Error while persisting ${currentEntityName}`, err);\n } else {\n console.error(`[entities-storage] Error while persisting: ${err && err.message || err}`, err);\n }\n throw err;\n });\n }\n\n}\n","import {isEmptyArray} from '../functions';\nimport {chainPromises} from '../observables';\n\nexport class StorageUtils {\n\n /**\n * Copy one storage content, into anthoer\n *\n * @param from\n * @param to\n */\n static async copy(from: LocalForage, to: LocalForage, options?: {\n keys: string[];\n deleteAfterCopy?: boolean;\n }) {\n if (!from || !to || from === to) throw new Error('Invalid \\'from\\' or \\'to\\' arguments. Must be not null storage');\n\n options = {deleteAfterCopy: false, ...options};\n\n // Get keys to copy\n const keys = options.keys || (await from.keys());\n if (isEmptyArray(keys)) return Promise.resolve(); // Nothing to copy\n\n const now = Date.now();\n console.info(`[storage-utils] Copying ${keys.length} keys from '${from.driver()}' to '${to.driver()}'... {deleteAfterCopy: ${options.deleteAfterCopy}`);\n let errorCount = 0;\n\n return chainPromises(\n keys.map(key => () => from.getItem(key)\n .then((data) => to.setItem(key, data))\n .then(() => options.deleteAfterCopy && from.removeItem(key))\n .catch((err) => {\n console.error(`[storage-utils] Error during migration of key '${key}'`, err);\n errorCount++;\n }))\n )\n .then(() => {\n if (errorCount === 0) {\n console.info(`[storage-utils] Migrating data [OK] in ${Date.now() - now}ms`);\n }\n else {\n throw {message: 'ERROR.COPY_STORAGE_ERROR'};\n }\n });\n }\n}\n\n","import {isNil} from '../../../shared/functions';\nimport {Entity, EntityAsObjectOptions} from './entity.model';\nimport {LatLongPattern} from '../../../shared/material/latlong/latlong.utils';\nimport {PropertiesMap, Property} from '../../../shared/types';\nimport {InjectionToken} from '@angular/core';\nimport {EntityClass} from './entity.decorators';\nimport {HistoryPageReference} from './history.model';\n\nexport type UsageMode = 'DESK' | 'FIELD';\n\nexport declare interface LocaleConfig extends Property {\n country?: string;\n}\n\nexport const APP_LOCALES = new InjectionToken<LocaleConfig[]>('locales');\n\nexport declare interface OfflineFeature {\n name: string;\n lastSyncDate?: string;\n filter?: any;\n}\n\nexport declare interface LocalSettings {\n pages?: any;\n peerUrl?: string;\n latLongFormat: 'DDMMSS' | 'DDMM' | 'DD';\n accountInheritance?: boolean;\n locale: string;\n usageMode?: UsageMode;\n mobile?: boolean;\n touchUi?: boolean;\n properties?: PropertiesMap;\n pageHistory?: HistoryPageReference[];\n offlineFeatures?: (string | OfflineFeature)[];\n pageHistoryMaxSize: number;\n}\n\n\n// @dynamic\n@EntityClass({typename: 'UserSettingsVO'})\nexport class UserSettings extends Entity<UserSettings> {\n\n static fromObject: (source: any, opts?: any) => UserSettings;\n\n locale: string;\n latLongFormat: LatLongPattern;\n content: {};\n nonce: string;\n\n constructor() {\n super(UserSettings.TYPENAME);\n }\n\n asObject(opts?: EntityAsObjectOptions): any {\n const target = super.asObject(opts);\n if (opts?.minify) {\n // Stringify content\n target.content = this.content && JSON.stringify(target.content) || undefined;\n }\n return target;\n }\n\n fromObject(source: any, opts?: any) {\n super.fromObject(source);\n this.locale = source.locale;\n this.latLongFormat = source.latLongFormat as LatLongPattern;\n if (isNil(source.content) || typeof source.content === 'object') {\n this.content = source.content || {};\n } else {\n this.content = source.content && JSON.parse(source.content) || {};\n }\n this.nonce = source.nonce;\n }\n}\n","\n// TODO: rename to STATUS_ID_MAP\n// then declare a type like this :\n// > export declare type StatusIds = keyof typeof STATUS_ID_MAP;\nexport const StatusIds = {\n DISABLE: 0,\n ENABLE: 1,\n TEMPORARY: 2,\n DELETED: 3,\n ALL: 99\n};\n","import {Moment} from 'moment';\nimport { joinPropertiesPath, splitById, toNumber } from '../../../shared/functions';\nimport {Entity, EntityAsObjectOptions, EntityUtils, IEntity} from './entity.model';\nimport {StatusIds} from './model.enum';\nimport {fromDateISOString, toDateISOString} from '../../../shared/dates';\nimport {EntityClass} from './entity.decorators';\n\nexport function referentialToString(obj: Referential | any, properties?: string[]): string | undefined {\n return obj && obj.id && joinPropertiesPath(obj, properties || ['label', 'name']) || undefined;\n}\nexport function referentialsToString(values: Referential[], properties?: string[], separator?: string): string {\n return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');\n}\n\nexport declare interface IStatus {\n id: number;\n icon?: string;\n label: string;\n}\n\nexport const StatusList: Readonly<IStatus[]> = Object.freeze([\n {\n id: StatusIds.ENABLE,\n icon: 'checkmark',\n label: 'REFERENTIAL.STATUS_ENUM.ENABLE'\n },\n {\n id: StatusIds.DISABLE,\n icon: 'close',\n label: 'REFERENTIAL.STATUS_ENUM.DISABLE'\n },\n {\n id: StatusIds.TEMPORARY,\n icon: 'help',\n label: 'REFERENTIAL.STATUS_ENUM.TEMPORARY'\n }\n]);\n\nexport const StatusById = Object.freeze(splitById(StatusList));\n\n//@dynamic\nexport abstract class BaseReferential<\n T extends BaseReferential<any, ID, O>,\n ID = number,\n O extends ReferentialAsObjectOptions = ReferentialAsObjectOptions,\n FO = any\n >\n extends Entity<T, ID, O, FO>\n implements IReferentialRef<T, ID> {\n\n label: string;\n name: string;\n description: string;\n comments: string;\n creationDate: Date | Moment;\n statusId: number;\n validityStatusId: number;\n levelId: number;\n parentId: number;\n entityName: string;\n\n constructor(__typename?: string) {\n super(__typename);\n }\n\n asObject(opts?: O): any {\n if (opts && opts.minify) {\n return {\n id: this.id,\n entityName: opts.keepEntityName && this.entityName || undefined, // Don't keep by default\n __typename: opts.keepTypename && this.__typename || undefined\n };\n }\n const target: any = super.asObject(opts);\n target.creationDate = toDateISOString(this.creationDate);\n if (opts && opts.keepTypename === false) delete target.entityName;\n return target;\n }\n\n fromObject(source: any, opts?: FO) {\n super.fromObject(source, opts);\n this.label = source.label;\n this.name = source.name;\n this.description = source.description;\n this.comments = source.comments;\n this.statusId = source.statusId;\n this.validityStatusId = source.validityStatusId;\n this.levelId = source.levelId && source.levelId !== 0 ? source.levelId : undefined; // Do not set as null (need for account.department, when register)\n this.parentId = source.parentId;\n this.creationDate = fromDateISOString(source.creationDate);\n this.entityName = source.entityName;\n }\n\n equals(other: T): boolean {\n return super.equals(other) && this.entityName === other.entityName;\n }\n}\n\n// @dynamic\n@EntityClass({typename: 'ReferentialVO'})\nexport class Referential extends BaseReferential<Referential> {\n static fromObject: (source: any, opts?: any) => Referential;\n}\n\nexport class ReferentialUtils {\n // FIXME: remove this\n static fromObject(source: any): Referential {\n if (!source || source instanceof Referential) return source;\n const res = new Referential();\n res.fromObject(source);\n return res as Referential;\n }\n\n static isNotEmpty<T extends BaseReferential<any> | ReferentialRef>(obj: T|any): boolean {\n // A referential entity should always have a 'id' filled (can be negative is local and temporary)\n return EntityUtils.isNotEmpty(obj, 'id');\n }\n\n static isNotEmptyReferential<T extends BaseReferential<any> | ReferentialRef>(obj: T|any): obj is T {\n return EntityUtils.isNotEmpty(obj, 'id');\n }\n\n static isEmpty<T extends BaseReferential<any> | ReferentialRef>(obj: T|any): boolean {\n return EntityUtils.isEmpty(obj, 'id');\n }\n\n static equals<T extends BaseReferential<any> | ReferentialRef>(o1: T|any, o2: T|any): boolean {\n return EntityUtils.equals(o1, o2, 'id');\n }\n\n}\n\nexport declare interface IReferentialRef<\n T extends IEntity<T, ID> = IEntity<any, any>,\n ID = number\n >\n extends IEntity<T, ID> {\n label: string;\n name: string;\n levelId?: number;\n statusId: number;\n entityName: string;\n}\n\nexport interface ReferentialAsObjectOptions extends EntityAsObjectOptions {\n keepEntityName?: boolean;\n}\n\n/**\n * Used to store an entity locally\n */\nexport const MINIFY_ENTITY_FOR_LOCAL_STORAGE: ReferentialAsObjectOptions = Object.freeze({\n minify: true,\n keepTypename: true,\n keepEntityName: true,\n keepLocalId: true\n});\n\n/**\n * Used to send an entity to a pod\n */\nexport const MINIFY_ENTITY_FOR_POD: ReferentialAsObjectOptions = Object.freeze({\n minify: true,\n keepTypename: false,\n keepEntityName: false,\n keepLocalId: false\n});\n\n// @dynamic\n@EntityClass({typename: 'ReferentialVO'})\nexport class ReferentialRef<\n T extends ReferentialRef<any, ID> = ReferentialRef<any, any>,\n ID = number,\n O extends ReferentialAsObjectOptions = ReferentialAsObjectOptions,\n FO = any\n >\n extends Entity<T, ID, O, FO>\n implements IReferentialRef<T, ID> {\n\n static fromObject: (source: any, opts?: any) => ReferentialRef;\n\n label: string;\n name: string;\n statusId: number;\n levelId: number;\n entityName: string;\n\n constructor() {\n super(ReferentialRef.TYPENAME);\n }\n\n asObject(opts?: O): any {\n if (opts && opts.minify) {\n return {\n id: this.id,\n entityName: opts.keepEntityName && this.entityName || undefined, // Don't keep by default\n __typename: opts.keepTypename && this.__typename || undefined\n };\n }\n const target: any = super.asObject(opts);\n if (opts && opts.keepEntityName === false) delete target.entityName;\n\n return target;\n }\n\n fromObject(source: any, opts?: FO) {\n super.fromObject(source);\n this.entityName = source.entityName || this.entityName;\n this.label = source.label;\n this.name = source.name;\n this.statusId = source.statusId;\n this.levelId = source.levelId;\n }\n}\n","import {BaseReferential} from './referential.model';\nimport {EntityClass} from './entity.decorators';\n\n// @dynamic\n@EntityClass({typename: 'DepartmentVO'})\nexport class Department extends BaseReferential<Department> {\n\n static ENTITY_NAME = 'Department';\n static fromObject: (source: any, opts?: any) => Department;\n\n logo: string;\n siteUrl: string;\n\n constructor() {\n super(Department.TYPENAME);\n this.entityName = Department.ENTITY_NAME;\n }\n\n fromObject(source: any) {\n super.fromObject(source);\n this.entityName = source.entityName || Department.ENTITY_NAME;\n this.logo = source.logo;\n this.siteUrl = source.siteUrl;\n delete this.entityName; // not need\n }\n}\n\nexport function departmentToString(obj: Department): string {\n return obj && obj.id && (obj.name) || undefined;\n}\n\nexport function departmentsToString(data: Department[], separator?: string): string {\n return (data || []).map(departmentToString).join(separator || ', ');\n}\n","import {Moment} from 'moment';\nimport {ReferentialAsObjectOptions} from './referential.model';\nimport {Entity} from './entity.model';\nimport {Department} from './department.model';\nimport {fromDateISOString, toDateISOString} from '../../../shared/dates';\nimport {EntityClass} from './entity.decorators';\n\n\nexport type UserProfileLabel = 'ADMIN' | 'USER' | 'SUPERVISOR' | 'GUEST';\nexport const PRIORITIZED_AUTHORITIES: Readonly<UserProfileLabel[]> = Object.freeze(['ADMIN', 'SUPERVISOR', 'USER', 'GUEST']);\n\n// @dynamic\n@EntityClass({typename: 'PersonVO'})\nexport class Person<\n T extends Person<any> = Person<any>\n > extends Entity<T, number, ReferentialAsObjectOptions> {\n\n static fromObject: (source: any, opts?: any) => Person;\n\n firstName: string;\n lastName: string;\n email: string;\n pubkey: string;\n avatar: string;\n creationDate: Date | Moment;\n statusId: number;\n department: Department = null;\n username: string;\n usernameExtranet: string;\n profiles: string[];\n mainProfile: string;\n\n constructor(__typename?: string) {\n super(__typename || Person.TYPENAME);\n }\n\n asObject(opts?: ReferentialAsObjectOptions): any {\n if (opts && opts.minify) {\n return {\n id: this.id,\n __typename: opts.keepTypename && this.__typename || undefined,\n firstName: this.firstName,\n lastName: this.lastName\n };\n }\n const target: any = super.asObject(opts);\n target.department = this.department && this.department.asObject(opts) || undefined;\n target.profiles = this.profiles && this.profiles.slice(0) || [];\n // Set profile list from the main profile\n target.profiles = this.mainProfile && [this.mainProfile] || target.profiles;\n target.creationDate = toDateISOString(this.creationDate);\n\n if (!opts || opts.minify !== true) target.mainProfile = PersonUtils.getMainProfile(target.profiles);\n return target;\n }\n\n fromObject(source: any) {\n super.fromObject(source);\n this.firstName = source.firstName;\n this.lastName = source.lastName;\n this.email = source.email;\n this.creationDate = fromDateISOString(source.creationDate);\n this.pubkey = source.pubkey;\n this.username = source.username;\n this.usernameExtranet = source.usernameExtranet;\n this.avatar = source.avatar;\n this.statusId = source.statusId;\n this.department = source.department && Department.fromObject(source.department) || undefined;\n this.profiles = source.profiles && source.profiles.slice(0) || [];\n // Add main profile to the list, if need\n if (source.mainProfile && !this.profiles.find(p => p === source.mainProfile)) {\n this.profiles = this.profiles.concat(source.mainProfile);\n }\n this.mainProfile = PersonUtils.getMainProfile(this.profiles);\n }\n}\n\nexport class PersonUtils {\n static getMainProfile(profiles?: string[]): UserProfileLabel {\n if (!profiles && !profiles.length) return 'GUEST';\n return PRIORITIZED_AUTHORITIES.find(label => profiles.includes(label)) || 'GUEST';\n }\n\n static getMainProfileIndex(profiles?: string[]): number {\n if (!profiles && !profiles.length) return PRIORITIZED_AUTHORITIES.length - 1; // return last (lower) profile\n const index = PRIORITIZED_AUTHORITIES.findIndex(label => profiles.includes(label));\n return (index !== -1) ? index : (PRIORITIZED_AUTHORITIES.length - 1);\n }\n\n static hasUpperOrEqualsProfile(actualProfiles: string[], expectedProfile: UserProfileLabel): boolean {\n const expectedProfileIndex = PRIORITIZED_AUTHORITIES.indexOf(expectedProfile);\n return expectedProfileIndex !== -1 && PersonUtils.getMainProfileIndex(actualProfiles) <= expectedProfileIndex;\n }\n\n static personToString(obj: Person): string {\n return obj && obj.id && (obj.lastName + ' ' + obj.firstName) || undefined;\n }\n\n static personsToString(data: Person[], separator?: string): string {\n return (data || []).map(PersonUtils.personToString).join(separator || ', ');\n }\n\n}\n\n\n\n\n\n\n\n","import {UserSettings} from './settings.model';\nimport {Person} from './person.model';\nimport {EntityAsObjectOptions} from './entity.model';\nimport {EntityClass} from './entity.decorators';\n\n/**\n * A user account\n */\n// @dynamic\n@EntityClass({typename: 'AccountVO'})\nexport class Account extends Person<Account> {\n\n static fromObject: (source: any, opts?: any) => Account;\n\n settings: UserSettings = null;\n\n constructor() {\n super(Account.TYPENAME);\n }\n\n asObject(opts?: EntityAsObjectOptions): any {\n const target: any = super.asObject({...opts, minify: false /*disable Person minify (too restrictive) */});\n target.settings = this.settings && this.settings.asObject(opts) || undefined;\n if (opts?.minify) {\n delete target.mainProfile; // Not known on server\n }\n return target;\n }\n\n fromObject(source: any) {\n super.fromObject(source);\n this.settings = source.settings && UserSettings.fromObject(source.settings);\n }\n\n /**\n * Convert into a Person. This will fill __typename with a right value, for data cache\n */\n asPerson(): Person {\n const person = Person.fromObject(this.asObject({\n keepTypename: true // This is need for the department object\n }));\n person.__typename = Person.TYPENAME; // Do not keep AccountVO as typename\n return person;\n }\n\n get displayName(): string {\n return accountToString(this);\n }\n\n}\n\n\nexport function accountToString(data: Account): string {\n return data &&\n ((data.firstName && (data.firstName + ' ') || '') +\n (data.lastName || '')) || '';\n}\n","import {ApolloClient, ApolloLink, NextLink, Operation} from '@apollo/client/core';\nimport * as uuidv4Imported from 'uuid/v4';\nconst uuidv4 = uuidv4Imported;\nimport {EventEmitter} from '@angular/core';\nimport {debounceTime, filter, switchMap} from 'rxjs/operators';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {getMainDefinition} from '@apollo/client/utilities';\nimport {PersistentStorage} from 'apollo3-cache-persist';\nimport {ConnectionType} from '../services/network.service';\n\ndeclare let window: any;\nconst _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});\nexport const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;\n\n/**\n * AppWebSocket class.\n * With a hack on default Websocket, to avoid the use of protocol\n */\nexport const AppWebSocket = function(url: string, protocols?: string | string[]) {\n return new NativeWebSocket(url/*no protocols*/);\n} as any;\nAppWebSocket.CLOSED = NativeWebSocket.CLOSED;\nAppWebSocket.CLOSING = NativeWebSocket.CLOSING;\nAppWebSocket.CONNECTING = NativeWebSocket.CONNECTING;\nAppWebSocket.OPEN = NativeWebSocket.OPEN;\n\nexport function isMutationOperation(operation: Operation) {\n const def = getMainDefinition(operation.query);\n return def.kind === 'OperationDefinition' && def.operation === 'mutation';\n}\n\nexport function isSubscriptionOperation(operation: Operation) {\n const def = getMainDefinition(operation.query);\n return def.kind === 'OperationDefinition' && def.operation === 'subscription';\n}\n\n\nexport interface TrackedQuery {\n id: string;\n name: string;\n queryJSON: string;\n variablesJSON: string;\n contextJSON: string;\n}\n\nexport const TRACKED_QUERIES_STORAGE_KEY = 'apollo-tracker-persist';\n\nexport function createTrackerLink(opts: {\n storage?: PersistentStorage<string>;\n onNetworkStatusChange: Observable<ConnectionType>;\n debounce?: number;\n debug?: boolean;\n }): ApolloLink {\n\n const trackedQueriesUpdated = new EventEmitter();\n const trackedQueriesById: {[id: string]: TrackedQuery} = {};\n\n const networkStatusSubject = new BehaviorSubject<string>('none');\n opts.onNetworkStatusChange.subscribe(type => networkStatusSubject.next(type));\n\n // Save pending and tracked queries in storage\n trackedQueriesUpdated.pipe(\n debounceTime(opts.debounce || 1000),\n switchMap(() => networkStatusSubject),\n // Continue if offline\n filter((type) => type === 'none' && !!opts.storage)\n ).subscribe(() => {\n const trackedQueries = Object.getOwnPropertyNames(trackedQueriesById)\n .map(key => trackedQueriesById[key])\n .filter(value => value !== undefined);\n if (opts.debug) console.debug('[apollo-tracker-link] Saving tracked queries to storage', trackedQueries);\n return opts.storage.setItem(TRACKED_QUERIES_STORAGE_KEY, JSON.stringify(trackedQueries));\n });\n\n return new ApolloLink((operation: Operation, forward: NextLink) => {\n const context = operation.getContext();\n\n // Skip if not tracked\n if (!context || !context.tracked) return forward(operation);\n\n const id = context.serializationKey || uuidv4();\n console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);\n\n // Clean context, before calling JSON.stringify (remove unused attributes)\n const cleanContext = { ...context, ...{optimisticResponse: null, cache: null} };\n\n const trackedQuery: TrackedQuery = {\n id,\n name: operation.operationName,\n queryJSON: JSON.stringify(operation.query),\n variablesJSON: JSON.stringify(operation.variables),\n contextJSON: JSON.stringify(cleanContext)\n };\n\n // Add to map\n trackedQueriesById[id] = trackedQuery;\n trackedQueriesUpdated.emit();\n\n const nextOperation = forward(operation)\n .map(data => {\n console.debug(`[apollo-tracker-link] Query {${operation.operationName}#${id}} succeed!`, data);\n delete trackedQueriesById[id];\n trackedQueriesUpdated.emit(trackedQueriesById); // update\n\n return data;\n });\n\n // If offline, return the optimistic response\n if (networkStatusSubject.getValue() === 'none') {\n if (context.optimisticResponse) {\n console.debug(`[apollo-tracker-link] Query {${operation.operationName}#${id}} has optimistic response: `, context.optimisticResponse);\n }\n else {\n console.warn(`[apollo-tracker-link] Query {${operation.operationName}#${id}} missing 'context.optimisticResponse': waiting network UP before to continue...`);\n }\n }\n\n return nextOperation;\n });\n}\n\nexport async function restoreTrackedQueries(opts: {\n apolloClient: ApolloClient<any>;\n storage: PersistentStorage<any>;\n debug?: boolean;\n}) {\n\n const list = JSON.parse(await opts.storage.getItem(TRACKED_QUERIES_STORAGE_KEY)) as TrackedQuery[];\n\n if (!list) return;\n if (opts.debug) console.debug('[apollo-tracker-link] Restoring tracked queries', list);\n\n const promises = (list || []).map(trackedQuery => {\n const context = JSON.parse(trackedQuery.contextJSON);\n const query = JSON.parse(trackedQuery.queryJSON);\n const variables = JSON.parse(trackedQuery.variablesJSON);\n return opts.apolloClient.mutate({\n context,\n mutation: query,\n optimisticResponse: context.optimisticResponse,\n //update: updateHandlerByName[trackedQuery.name],\n variables,\n });\n });\n\n return Promise.all(promises);\n}\n","import { Observable, of, Subject, Subscription } from 'rxjs';\nimport { Apollo, ExtraSubscriptionOptions, QueryRef } from 'apollo-angular';\nimport {\n ApolloCache,\n ApolloClient,\n ApolloLink,\n ApolloQueryResult,\n FetchPolicy,\n InMemoryCache,\n MutationUpdaterFn,\n NetworkStatus,\n OperationVariables,\n TypePolicies,\n WatchQueryFetchPolicy\n} from '@apollo/client/core';\nimport { ErrorCodes, ServerErrorCodes, ServiceError } from '../services/errors';\nimport { catchError, distinctUntilChanged, filter, first, map, mergeMap, throttleTime } from 'rxjs/operators';\n\nimport { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { ConnectionType, NetworkService } from '../services/network.service';\nimport { WebSocketLink } from '@apollo/client/link/ws';\nimport { AppWebSocket, createTrackerLink, isMutationOperation, isSubscriptionOperation, restoreTrackedQueries } from './graphql.utils';\nimport { Storage } from '@ionic/storage';\nimport { RetryLink } from '@apollo/client/link/retry';\nimport QueueLink from 'apollo-link-queue';\nimport SerializingLink from 'apollo-link-serialize';\nimport loggerLink from 'apollo-link-logger';\nimport { Platform } from '@ionic/angular';\nimport { EntityUtils, IEntity } from '../services/model/entity.model';\nimport { isNil, isNotNil, toNumber } from '../../shared/functions';\nimport { Resolvers } from '@apollo/client/core/types';\nimport { HttpHeaders } from '@angular/common/http';\nimport { EmptyObject } from 'apollo-angular/types';\nimport { HttpLink, Options } from 'apollo-angular/http';\nimport { IonicStorageWrapper, persistCache, PersistentStorage } from 'apollo3-cache-persist';\nimport { ErrorPolicy, MutationBaseOptions } from '@apollo/client/core/watchQueryOptions';\nimport { Cache } from '@apollo/client/cache/core/types/Cache';\nimport { ENVIRONMENT } from '../../../environments/environment.class';\nimport { CryptoService } from '../services/crypto.service';\nimport { ConnectionParamsOptions } from 'subscriptions-transport-ws/dist/client';\nimport { PropertiesMap } from '../../shared/types';\nimport {StartableService} from '../../shared/services/startable-service.class';\n\nexport interface WatchQueryOptions<V> {\n query: any;\n variables?: V;\n error?: ServiceError;\n fetchPolicy?: WatchQueryFetchPolicy;\n}\n\nexport interface MutateQueryOptions<T, V = OperationVariables> extends MutationBaseOptions<T, V> {\n mutation: any;\n variables?: V;\n error?: ServiceError;\n context?: {\n serializationKey?: string;\n tracked?: boolean;\n timeout?: number;\n };\n optimisticResponse?: T;\n offlineResponse?: T | ((context: any) => Promise<T>);\n update?: MutationUpdaterFn<T>;\n forceOffline?: boolean;\n}\n\nexport const APP_GRAPHQL_TYPE_POLICIES = new InjectionToken<TypePolicies>('graphqlTypePolicies');\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GraphqlService extends StartableService<ApolloClient<any>> {\n\n private _subscription = new Subscription();\n private readonly _networkStatusChanged$: Observable<ConnectionType>;\n\n private httpParams: Options;\n private wsParams: WebSocketLink.Configuration;\n private connectionParams: ConnectionParamsOptions & {\n authToken?: string;\n authBasic?: string;\n } = {};\n private readonly _defaultFetchPolicy: WatchQueryFetchPolicy;\n private onNetworkError = new Subject();\n private customErrors: PropertiesMap = {};\n\n get client(): ApolloClient<any> {\n return this._data;\n }\n\n get cache(): ApolloCache<any> {\n return this.apollo.client.cache;\n }\n\n get defaultFetchPolicy(): WatchQueryFetchPolicy {\n return this._defaultFetchPolicy;\n }\n\n constructor(\n private platform: Platform,\n private apollo: Apollo,\n private httpLink: HttpLink,\n private network: NetworkService,\n private storage: Storage,\n private cryptoService: CryptoService,\n @Inject(ENVIRONMENT) protected environment,\n @Optional() @Inject(APP_GRAPHQL_TYPE_POLICIES) private typePolicies: TypePolicies\n ) {\n super(platform); // Wait network\n\n this._debug = !environment.production;\n this._defaultFetchPolicy = environment.apolloFetchPolicy;\n\n // Listen network status\n this._networkStatusChanged$ = network.onNetworkStatusChanges\n .pipe(\n filter(isNotNil),\n distinctUntilChanged()\n );\n\n // When getting network error: try to ping peer, and toggle to offline\n this.onNetworkError\n .pipe(\n throttleTime(300),\n filter(() => this.network.online),\n mergeMap(() => this.network.checkPeerAlive()),\n filter(alive => !alive)\n )\n .subscribe(() => this.network.setForceOffline(true, {showToast: true}));\n\n }\n\n setAuthToken(token: string) {\n if (token) {\n console.debug('[graphql] Apply token authentication to headers');\n this.connectionParams.authToken = token;\n } else {\n console.debug('[graphql] Remove token authentication from headers');\n delete this.connectionParams.authToken;\n // Clear cache\n this.clearCache();\n }\n }\n\n setAuthBasic(basic: string) {\n if (basic) {\n console.debug('[graphql] Apply basic authentication to headers');\n this.connectionParams.authBasic = basic;\n } else {\n console.debug('[graphql] Remove basic authentication from headers');\n delete this.connectionParams.authBasic;\n // Clear cache\n this.clearCache();\n }\n }\n\n /**\n * Allow to add a field resolver\n * (see doc: https://www.apollographql.com/docs/react/data/local-state/#handling-client-fields-with-resolvers)\n *\n * @param resolvers\n */\n async addResolver(resolvers: Resolvers | Resolvers[]) {\n if (!this.started) await this.ready();\n this.apollo.client.addResolvers(resolvers);\n }\n\n async query<T, V = EmptyObject>(opts: {\n query: any;\n variables?: V;\n error?: ServiceError;\n fetchPolicy?: FetchPolicy;\n }): Promise<T> {\n if (!this.started) await this.ready();\n let res;\n try {\n res = await this.client.query<ApolloQueryResult<T>, V>({\n query: opts.query,\n variables: opts.variables,\n fetchPolicy: opts.fetchPolicy || (this._defaultFetchPolicy as FetchPolicy) || undefined\n });\n } catch (err) {\n res = this.toApolloError<T>(err, opts.error);\n }\n if (res.errors) {\n throw res.errors[0];\n }\n return res.data;\n }\n\n watchQueryRef<T, V = EmptyObject>(opts: WatchQueryOptions<V>): QueryRef<T, V> {\n return this.apollo.watchQuery<T, V>({\n query: opts.query,\n variables: opts.variables,\n fetchPolicy: opts.fetchPolicy || (this._defaultFetchPolicy as FetchPolicy) || undefined,\n notifyOnNetworkStatusChange: true\n });\n }\n\n queryRefValuesChanges<T, V = EmptyObject>(queryRef: QueryRef<T, V>, opts: WatchQueryOptions<V>): Observable<T> {\n return queryRef\n .valueChanges\n .pipe(\n catchError(error => this.onApolloError<T>(error, opts.error)),\n filter(value => value.networkStatus === NetworkStatus.ready || value.networkStatus === NetworkStatus.error),\n map(({data, errors}) => {\n if (errors) {\n throw errors[0];\n }\n return data;\n })\n );\n }\n\n watchQuery<T, V = EmptyObject>(opts: WatchQueryOptions<V>): Observable<T> {\n const queryRef: QueryRef<T, V> = this.watchQueryRef(opts);\n return this.queryRefValuesChanges(queryRef, opts);\n }\n\n async mutate<T, V = EmptyObject>(opts: MutateQueryOptions<T, V>): Promise<T> {\n\n // If offline, compute an optimistic response for tracked queries\n if ((opts.forceOffline || this.network.offline) && opts.offlineResponse) {\n if (typeof opts.offlineResponse === 'function') {\n opts.context = opts.context || {};\n const optimisticResponseFn = (opts.offlineResponse as ((context: any) => Promise<T>));\n opts.optimisticResponse = await optimisticResponseFn(opts.context);\n if (this._debug) console.debug('[graphql] [offline] Using an optimistic response: ', opts.optimisticResponse);\n }\n else {\n opts.optimisticResponse = opts.offlineResponse as T;\n }\n if (opts.forceOffline) {\n const res = {data: opts.optimisticResponse};\n if (opts.update) {\n opts.update(this.apollo.client.cache, res);\n }\n return res.data;\n }\n }\n\n const res = await this.apollo.mutate<ApolloQueryResult<T>, V>({\n mutation: opts.mutation,\n variables: opts.variables,\n context: opts.context,\n optimisticResponse: opts.optimisticResponse as any,\n update: opts.update as any\n })\n .pipe(\n catchError(error => this.onApolloError<T>(error, opts.error)),\n first(),\n // To debug, if need:\n //tap((res) => (!res) && console.error('[graphql] Unknown error during mutation. Check errors in console (may be an invalid generated cache id ?)'))\n ).toPromise();\n if (res.errors instanceof Array) {\n throw res.errors[0];\n }\n return res.data as T;\n }\n\n subscribe<T, V = EmptyObject>(opts: {\n query: any;\n variables: V;\n fetchPolicy?: FetchPolicy;\n errorPolicy?: ErrorPolicy;\n error?: ServiceError;\n }, extra?: ExtraSubscriptionOptions): Observable<T> {\n\n return this.apollo.subscribe<T>({\n query: opts.query,\n fetchPolicy: opts && opts.fetchPolicy || 'network-only',\n errorPolicy: opts && opts.errorPolicy || undefined,\n variables: opts.variables\n }, {\n useZone: true,\n ...extra\n })\n .pipe(\n catchError(error => this.onApolloError<T>(error, opts.error)),\n map(({data, errors}) => {\n if (errors) {\n throw errors[0];\n }\n return data;\n })\n );\n }\n\n insertIntoQueryCache<T, V = EmptyObject>(cache: ApolloCache<any>,\n opts: Cache.ReadQueryOptions<V, any> & {\n arrayFieldName: string;\n totalFieldName?: string;\n data: T;\n sortFn?: (d1: T, d2: T) => number;\n size?: number;\n }) {\n\n cache = cache || this.apollo.client.cache;\n opts.arrayFieldName = opts.arrayFieldName || 'data';\n\n try {\n let data = cache.readQuery<any, V>({query: opts.query, variables: opts.variables});\n\n if (data && data[opts.arrayFieldName]) {\n // Copy because immutable\n data = { ...data };\n\n // Append to result array\n data[opts.arrayFieldName] = [ ...data[opts.arrayFieldName], {...opts.data}];\n\n // Resort, if need\n if (opts.sortFn) {\n data[opts.arrayFieldName].sort(opts.sortFn);\n }\n\n // Exclude if exceed max size\n const size = toNumber(opts.variables && opts.variables['size'], -1);\n if (size > 0 && data[opts.arrayFieldName].length > size) {\n data[opts.arrayFieldName].splice(size, data[opts.arrayFieldName].length - size);\n }\n\n // Increment total\n if (isNotNil(opts.totalFieldName)) {\n if (isNotNil(data[opts.totalFieldName])) {\n data[opts.totalFieldName] += 1;\n }\n else {\n console.warn('[graphql] Unable to update cached query. Unknown result part: ' + opts.totalFieldName);\n }\n }\n\n cache.writeQuery({\n query: opts.query,\n variables: opts.variables,\n data\n });\n }\n else {\n console.warn('[graphql] Unable to update cached query. Unknown result part: ' + opts.arrayFieldName);\n }\n } catch (err) {\n // continue\n // read in cache is not guaranteed to return a result. see https://github.com/apollographql/react-apollo/issues/1776#issuecomment-372237940\n if (this._debug) console.error('[graphql] Error while updating cache: ', err);\n }\n }\n\n addManyToQueryCache<T = any, V = EmptyObject>(cache: ApolloCache<any>,\n opts: Cache.ReadQueryOptions<V, any> & {\n arrayFieldName: string;\n totalFieldName?: string;\n data: T[];\n equalsFn?: (d1: T, d2: T) => boolean;\n sortFn?: (d1: T, d2: T) => number;\n }) {\n\n if (!opts.data || !opts.data.length) return; // nothing to process\n\n cache = cache || this.apollo.client.cache;\n opts.arrayFieldName = opts.arrayFieldName || 'data';\n\n try {\n let data = cache.readQuery<any, V>({query: opts.query, variables: opts.variables});\n\n if (data && data[opts.arrayFieldName]) {\n // Copy because immutable\n data = { ...data };\n\n // Keep only not existing res\n const equalsFn = opts.equalsFn || ((d1, d2) => d1['id'] === d2['id'] && d1['entityName'] === d2['entityName']);\n const newItems = opts.data.filter(inputValue => data[opts.arrayFieldName].findIndex(existingValue => equalsFn(inputValue, existingValue)) === -1);\n\n if (!newItems.length) return; // No new value\n\n // Append to array\n data[opts.arrayFieldName] = [ ...data[opts.arrayFieldName], ...newItems];\n\n // Resort, if need\n if (opts.sortFn) {\n data[opts.arrayFieldName].sort(opts.sortFn);\n }\n\n // Exclude if exceed max size\n const size = toNumber(opts.variables && opts.variables['size'], -1);\n if (size > 0 && data[opts.arrayFieldName].length > size) {\n data[opts.arrayFieldName].splice(size, data[opts.arrayFieldName].length - size);\n }\n\n // Increment the total\n if (isNotNil(opts.totalFieldName)) {\n if (isNotNil(data[opts.totalFieldName])) {\n data[opts.arrayFieldName] += newItems.length;\n }\n else {\n console.warn('[graphql] Unable to update cached query. Unknown result part: ' + opts.totalFieldName);\n }\n }\n\n // Write to cache\n cache.writeQuery({\n query: opts.query,\n variables: opts.variables,\n data\n });\n }\n else {\n console.warn('[graphql] Unable to update cached query. Unknown result part: ' + opts.arrayFieldName);\n }\n } catch (err) {\n // continue\n // read in cache is not guaranteed to return a result. see https://github.com/apollographql/react-apollo/issues/1776#issuecomment-372237940\n if (this._debug) console.warn('[graphql] Error while updating cache: ', err);\n }\n }\n\n /**\n * Remove from cache, and return if removed or not\n *\n * @param cache\n * @param opts\n */\n removeFromCachedQueryById<V = EmptyObject, ID = number>(cache: ApolloCache<any>,\n opts: Cache.ReadQueryOptions<V, any> & {\n arrayFieldName: string;\n totalFieldName?: string;\n ids: ID; // Do NOT use 'id', as already used by the Apollo API\n }): boolean {\n\n cache = cache || this.apollo.client.cache;\n opts.arrayFieldName = opts.arrayFieldName || 'data';\n\n try {\n let data = cache.readQuery<any, V>({query: opts.query, variables: opts.variables});\n\n if (data && data[opts.arrayFieldName]) {\n // Copy because immutable\n data = { ...data };\n\n const index = data[opts.arrayFieldName].findIndex(item => item['id'] === opts.ids);\n if (index === -1) return false; // Skip (nothing removed)\n\n // Copy, then remove deleted item\n data[opts.arrayFieldName] = data[opts.arrayFieldName].slice();\n const deletedItem = data[opts.arrayFieldName].splice(index, 1)[0];\n cache.evict({id: cache.identify(deletedItem)});\n\n // Decrement the total\n if (isNotNil(opts.totalFieldName)) {\n if (isNotNil(data[opts.totalFieldName])) {\n data[opts.totalFieldName] -= 1;\n }\n else {\n console.warn('[graphql] Unable to update cached query. Unknown result part: ' + opts.totalFieldName);\n }\n }\n\n // Write to cache\n cache.writeQuery({\n query: opts.query,\n variables: opts.variables,\n data\n });\n return true;\n }\n else {\n console.warn('[graphql] Unable to update cached query. Unknown result part: ' + opts.arrayFieldName);\n return false;\n }\n } catch (err) {\n // continue\n // read in cache is not guaranteed to return a result. see https://github.com/apollographql/react-apollo/issues/1776#issuecomment-372237940\n if (this._debug) console.warn('[graphql] Error while removing from cache: ', err);\n return false;\n }\n }\n\n /**\n * Remove ids from cache, and return the number of items removed\n *\n * @param cache\n * @param opts\n */\n removeFromCachedQueryByIds<V = EmptyObject, ID = number>(cache: ApolloCache<any>,\n opts: Cache.ReadQueryOptions<V, any> & {\n arrayFieldName: string;\n totalFieldName?: string;\n ids: ID[];\n }): number {\n\n cache = cache || this.apollo.client.cache;\n opts.arrayFieldName = opts.arrayFieldName || 'data';\n\n try {\n let data = cache.readQuery(opts);\n\n if (data && data[opts.arrayFieldName]) {\n // Copy because immutable\n data = { ...data };\n\n const deletedIndexes = data[opts.arrayFieldName].reduce((res, item, index) => opts.ids.includes(item['id']) ? res.concat(index) : res, []);\n\n if (deletedIndexes.length <= 0) return 0; // Skip (nothing removed)\n\n // Query has NO total\n if (isNil(opts.totalFieldName)) {\n\n // Evict each object\n deletedIndexes\n .map(index => data[opts.arrayFieldName][index])\n .map(item => cache.identify(item))\n .forEach(id => cache.evict({id}));\n\n }\n // Query has a total\n else {\n // Copy the array\n data[opts.arrayFieldName] = data[opts.arrayFieldName].slice();\n\n // remove from array, then evict\n deletedIndexes\n // Reverse: to keep valid index\n .reverse()\n // Remove from the array\n .map(index => data[opts.arrayFieldName].splice(index, 1)[0])\n // Evict from cache\n .map(item => cache.identify(item))\n .forEach(id => cache.evict({id}));\n\n if (isNotNil(data[opts.totalFieldName])) {\n data[opts.totalFieldName] -= deletedIndexes.length; // Remove deletion count\n }\n else {\n console.warn('[graphql] Unable to update the total in cached query. Unknown result part: ' + opts.totalFieldName);\n }\n\n cache.writeQuery({\n query: opts.query,\n variables: opts.variables,\n data\n });\n\n return deletedIndexes.length;\n }\n }\n else {\n console.warn('[graphql] Unable to update cached query. Unknown result part: ' + opts.arrayFieldName);\n return 0;\n }\n } catch (err) {\n // continue\n // read in cache is not guaranteed to return a result. see https://github.com/apollographql/react-apollo/issues/1776#issuecomment-372237940\n if (this._debug) console.warn('[graphql] Error while removing from cache: ', err);\n return 0;\n }\n }\n\n updateToQueryCache<T extends IEntity<any>,\n V = EmptyObject>(cache: ApolloCache<any>,\n opts: Cache.ReadQueryOptions<V, any> & {\n arrayFieldName: string;\n totalFieldName?: string;\n data: T;\n equalsFn?: (d1: T, d2: T) => boolean;\n }) {\n cache = cache || this.apollo.client.cache;\n opts.arrayFieldName = opts.arrayFieldName || 'data';\n\n try {\n let data: any = cache.readQuery(opts);\n\n if (data && data[opts.arrayFieldName]) {\n // Copy because immutable\n data = { ...data };\n\n const equalsFn = opts.equalsFn || ((d1, d2) => EntityUtils.equals(d1, d2, 'id'));\n\n // Update if exists, or insert\n const index = data[opts.arrayFieldName].findIndex(v => equalsFn(opts.data, v));\n if (index !== -1) {\n data[opts.arrayFieldName] = data[opts.arrayFieldName].slice().splice(index, 1, opts.data);\n }\n else {\n data[opts.arrayFieldName] = [ ...data[opts.arrayFieldName], opts.data];\n }\n\n // Increment total (if changed)\n if (isNotNil(opts.totalFieldName) && index === -1) {\n if (isNotNil(data[opts.totalFieldName])) {\n data[opts.totalFieldName] += 1;\n }\n else {\n console.warn('[graphql] Unable to update cached query. Unknown result part: ' + opts.totalFieldName);\n }\n }\n\n cache.writeQuery({\n query: opts.query,\n variables: opts.variables,\n data\n });\n return; // OK: stop here\n }\n } catch (err) {\n // continue\n // read in cache is not guaranteed to return a result. see https://github.com/apollographql/react-apollo/issues/1776#issuecomment-372237940\n if (this._debug) console.warn('[graphql] Error while updating cache: ', err);\n }\n }\n\n async clearCache(client?: ApolloClient<any>): Promise<void> {\n client = (client || this.client) as ApolloClient<any>;\n if (client) {\n console.info('[graphql] Clearing Apollo client\\'s cache... ');\n const now = this._debug && Date.now();\n\n // Clearing the cache\n await client.cache.reset();\n\n if (this._debug) console.debug(`[graphql] Apollo client's cache cleared, in ${Date.now() - now}ms`);\n }\n }\n\n registerCustomError(error: PropertiesMap) {\n this.customErrors = {...this.customErrors, ...error};\n }\n\n /* -- protected methods -- */\n\n protected async ngOnStart(): Promise<ApolloClient<any>> {\n\n await this.network.ready();\n\n console.info('[graphql] Starting graphql...');\n const mobile = this.platform.is('mobile') || this.platform.is('mobileweb');\n const enableTrackMutationQueries = !mobile;\n\n const peer = this.network.peer;\n if (!peer) throw Error('[graphql] Missing peer. Unable to start graphql service');\n\n const uri = peer.url + '/graphql';\n const wsUri = String.prototype.replace.call(uri, /^http(s)?:/, 'ws$1:') + '/websocket';\n console.info('[graphql] Base uri: ' + uri);\n console.info('[graphql] Subscription uri: ' + wsUri);\n\n this.httpParams = this.httpParams || {};\n this.httpParams.uri = uri;\n\n this.wsParams = {\n ...this.wsParams,\n options: {\n lazy: true,\n reconnect: true,\n connectionParams: this.connectionParams\n },\n webSocketImpl: AppWebSocket,\n uri: wsUri\n };\n\n // Create a storage configuration\n const storage: PersistentStorage<string> = new IonicStorageWrapper(this.storage);\n\n let client = this.apollo.client;\n if (!client) {\n console.debug('[apollo] Creating GraphQL client...');\n\n // Websocket link\n const wsLink = new WebSocketLink(this.wsParams);\n\n // Retry when failed link\n const retryLink = new RetryLink();\n const authLink = new ApolloLink((operation, forward) => {\n\n const authorization = [];\n if (this.connectionParams.authToken) {\n authorization.push(`token ${this.connectionParams.authToken}`);\n }\n if (this.connectionParams.authBasic) {\n authorization.push(`Basic ${this.connectionParams.authBasic}`);\n }\n const headers = new HttpHeaders()\n .append('Authorization', authorization);\n //.append('X-App-Name', environment.name)\n //.append('X-App-Version', environment.version)\n ;\n\n\n // Use the setContext method to set the HTTP headers.\n operation.setContext({\n ...operation.getContext(),\n ...{headers}\n });\n\n // Call the next link in the middleware chain.\n return forward(operation);\n });\n\n // Http link\n const httpLink = this.httpLink.create(this.httpParams);\n\n // Cache\n const cache = new InMemoryCache({\n typePolicies: this.typePolicies\n });\n\n // Add cache persistence\n if (this.environment.persistCache) {\n console.debug('[graphql] Starting persistence cache...');\n await persistCache({\n cache,\n storage,\n trigger: this.platform.is('android') ? 'background' : 'write',\n debounce: 1000,\n debug: true\n });\n }\n\n let mutationLinks: Array<ApolloLink>;\n\n // Add queue to store tracked queries, when offline\n if (enableTrackMutationQueries) {\n const serializingLink = new SerializingLink();\n const trackerLink = createTrackerLink({\n storage,\n onNetworkStatusChange: this._networkStatusChanged$,\n debounce: 1000,\n debug: true\n });\n // Creating a mutation queue\n const queueLink = new QueueLink();\n this._subscription.add(this._networkStatusChanged$\n .subscribe(type => {\n // Network is offline: start buffering into queue\n if (type === 'none') {\n console.info('[graphql] offline mode: enable mutations buffer');\n queueLink.close();\n }\n // Network is online\n else {\n console.info('[graphql] online mode: disable mutations buffer');\n queueLink.open();\n }\n }));\n mutationLinks = [\n loggerLink,\n queueLink,\n trackerLink,\n queueLink,\n serializingLink,\n retryLink,\n authLink,\n httpLink\n ];\n }\n else {\n mutationLinks = [\n retryLink,\n authLink,\n httpLink\n ];\n }\n\n // create Apollo\n client = new ApolloClient({\n cache,\n link:\n ApolloLink.split(\n // Handle mutations\n isMutationOperation,\n ApolloLink.from(mutationLinks),\n\n ApolloLink.split(\n // Handle subscriptions\n isSubscriptionOperation,\n wsLink,\n\n // Handle queries\n ApolloLink.from([\n retryLink,\n authLink,\n httpLink\n ])\n )\n ),\n connectToDevTools: !this.environment.production\n });\n\n this.apollo.client = client;\n }\n\n // Enable tracked queries persistence\n if (enableTrackMutationQueries && this.environment.persistCache) {\n\n try {\n await restoreTrackedQueries({\n apolloClient: client,\n storage,\n debug: true\n });\n } catch (err) {\n console.error('[graphql] Failed to restore tracked queries from storage: ' + (err && err.message || err), err);\n }\n }\n\n // Listen for network restart\n this._subscription.add(\n this.network.on('start', () => this.restart())\n );\n\n // Listen for clear cache request, from network\n this._subscription.add(\n this.network.on('resetCache', () => this.clearCache())\n );\n\n console.info('[graphql] Starting graphql [OK]');\n return client;\n }\n\n protected async ngOnStop() {\n console.info('[graphql] Stopping graphql service...');\n this._subscription.unsubscribe();\n this._subscription = new Subscription();\n await this.resetClient();\n }\n\n protected async resetClient(client?: ApolloClient<any>) {\n client = (client || this.apollo.client) as ApolloClient<any>;\n if (!client) return;\n\n console.info('[graphql] Resetting apollo client...');\n client.stop();\n await Promise.all([\n client.clearStore(),\n this.clearCache(client)\n ]);\n }\n\n private onApolloError<T>(err: any, defaultError?: any): Observable<ApolloQueryResult<T>> {\n return of(this.toApolloError(err, defaultError));\n }\n\n private toApolloError<T>(err: any, defaultError?: any): ApolloQueryResult<T> {\n let error =\n // If network error: try to convert to App (read as JSON), or create an UNKNOWN_NETWORK_ERROR\n (err.networkError && (\n (err.networkError.error && this.toAppError(err.networkError.error))\n || this.toAppError(err.networkError)\n || (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))\n || this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)\n )\n )\n // If graphQL: try to convert the first error found\n || (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))\n || this.toAppError(err)\n || this.toAppError(err.originalError)\n || (err.graphQLErrors && err.graphQLErrors[0])\n || err;\n console.error('[graphql] ' + (error && error.message || error), error.stack || '');\n if (error && error.code === ErrorCodes.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {\n console.error('[graphql] original error: ' + err.networkError.message);\n this.onNetworkError.next(error);\n }\n if ((!error || !error.code) && defaultError) {\n error = {...defaultError, details: error, stack: err.stack};\n }\n return {\n data: null,\n errors: [error],\n loading: false,\n networkStatus: null\n };\n }\n\n private createAppErrorByCode(errorCode: number): any | undefined {\n const message = this.getI18nErrorMessageByCode(errorCode);\n if (message) {\n return {\n code: errorCode,\n message: this.getI18nErrorMessageByCode(errorCode)\n };\n }\n return undefined;\n }\n\n private getI18nErrorMessageByCode(errorCode: number): string | undefined {\n\n // look in registered error codes\n const customErrorMessage = this.customErrors[errorCode];\n if (customErrorMessage) {\n return customErrorMessage;\n }\n\n // Default, switch on error code\n switch (errorCode) {\n case ServerErrorCodes.UNAUTHORIZED:\n return 'ERROR.UNAUTHORIZED';\n case ServerErrorCodes.FORBIDDEN:\n return 'ERROR.FORBIDDEN';\n case ErrorCodes.UNKNOWN_NETWORK_ERROR:\n return 'ERROR.UNKNOWN_NETWORK_ERROR';\n case ServerErrorCodes.BAD_UPDATE_DATE:\n return 'ERROR.BAD_UPDATE_DATE';\n case ServerErrorCodes.DATA_LOCKED:\n return 'ERROR.DATA_LOCKED';\n case ServerErrorCodes.BAD_APP_VERSION:\n return 'ERROR.BAD_APP_VERSION';\n }\n\n return undefined;\n }\n\n private toAppError(err: any): any | undefined {\n let error = err;\n const message = err && err.message || err;\n if (typeof message === 'string' && message.trim().indexOf('{\"code\":') === 0) {\n try {\n error = JSON.parse(err.message);\n }\n catch (parseError) {\n console.error('Unable to parse error as JSON: ', parseError);\n }\n }\n if (error && error.code) {\n return this.createAppErrorByCode(error.code) || error && error.message || error;\n }\n return undefined;\n }\n\n}\n","import {GraphqlService, MutateQueryOptions, WatchQueryOptions} from '../graphql/graphql.service';\nimport {Page} from '../../shared/services/entity-service.class';\nimport {EmptyObject} from 'apollo-angular/types';\nimport {Observable} from 'rxjs';\nimport {FetchResult} from '@apollo/client/link/core';\nimport {EntityUtils} from './model/entity.model';\nimport {ApolloCache, InternalRefetchQueriesInclude} from '@apollo/client/core';\nimport {isNotEmptyArray, isNotNil, toBoolean} from '../../shared/functions';\nimport {environment} from '../../../environments/environment';\nimport {Directive, Optional} from '@angular/core';\nimport {QueryRef} from 'apollo-angular';\nimport {PureQueryOptions} from '@apollo/client/core/types';\nimport {DocumentNode} from 'graphql';\n\nconst sha256 = require('hash.js/lib/hash/sha/256');\n\nexport interface QueryVariables<F= any> extends Partial<Page> {\n filter?: F;\n [key: string]: any;\n}\n\nexport interface MutateQueryWithCacheUpdateOptions<T = any, V = EmptyObject> extends MutateQueryOptions<T, V> {\n cacheInsert?: {\n query: any;\n fetchData: (variables: V, mutationResult: FetchResult<T>) => any;\n }[];\n\n cacheRemove?: {\n query: any;\n fetchIds: (variables: V) => number | number[];\n }[];\n}\n\nexport interface MutableWatchQueryOptions<D, T = any, V = EmptyObject> extends WatchQueryOptions<V> {\n queryName: string;\n arrayFieldName: keyof D;\n totalFieldName?: keyof D ;\n insertFilterFn?: (data: T) => boolean;\n sortFn?: (a: T, b: T) => number;\n}\n\nexport interface MutableWatchQueryDescription<D, T = any, V = EmptyObject> extends PureQueryOptions {\n id?: string;\n query: DocumentNode;\n queryRef: QueryRef<D, V>;\n variables: V;\n arrayFieldName: keyof D;\n totalFieldName?: keyof D;\n insertFilterFn?: (data: T) => boolean;\n sortFn?: (a: T, b: T) => number;\n counter: number;\n}\n\nexport interface FindMutableWatchQueriesOptions {\n query?: DocumentNode;\n queries?: DocumentNode[];\n queryName?: string;\n queryNames?: string[];\n}\n\nexport class BaseGraphqlServiceOptions {\n production?: boolean;\n}\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class BaseGraphqlService<T = any, F = any, ID = any> {\n\n protected _debug: boolean;\n protected _logPrefix: string;\n protected _mutableWatchQueries: MutableWatchQueryDescription<any>[] = [];\n\n // Max updated queries, for this entity.\n // - Can be override by subclasses (in constructor)\n // - Use value -1 for no max size\n // - Default value to 3, because it usually enough (e.g. OperationService and LandingService need at least 2)\n protected _mutableWatchQueriesMaxCount = 3;\n\n protected constructor(\n protected graphql: GraphqlService,\n @Optional() options?: BaseGraphqlServiceOptions\n ) {\n\n // for DEV only\n this._debug = toBoolean(options && !options.production, !environment.production);\n this._logPrefix = `[base-graphql-service] `;\n }\n\n mutableWatchQuery<D, V = EmptyObject>(opts: MutableWatchQueryOptions<D, T, V>): Observable<D> {\n opts.fetchPolicy = opts.fetchPolicy || this.graphql.defaultFetchPolicy;\n\n // Standard query (no cache)\n if (opts.fetchPolicy === 'no-cache') {\n return this.graphql.watchQuery(opts);\n }\n\n // No arrayFieldName\n if (!opts.arrayFieldName) {\n if (this._debug) console.warn(this._logPrefix + '̀Missing \\'opts.arrayFieldName\\' : unable to create a mutable watch query');\n return this.graphql.watchQuery(opts);\n }\n\n // Create the query id\n const queryId = this.computeMutableWatchQueryId(opts);\n const exactMatchQueries = this._mutableWatchQueries.filter(q => q.id === queryId);\n\n let mutableQuery: MutableWatchQueryDescription<D, T, V>;\n let queryRef: QueryRef<D, V>;\n\n if (exactMatchQueries.length === 1) {\n mutableQuery = exactMatchQueries[0] as MutableWatchQueryDescription<D, T, V>;\n mutableQuery.counter += 1;\n queryRef = mutableQuery.queryRef;\n if (this._debug) console.debug(this._logPrefix + `Find same mutable watch query (same variables) {${queryId}}. Skip register`);\n\n // Refetch if need data from network\n if (opts.fetchPolicy === 'network-only' || opts.fetchPolicy === 'cache-and-network') {\n console.warn(this._logPrefix + ' Mutable query already exists, and fetchPolicy=' + opts.fetchPolicy + '. Force refetch query...');\n queryRef.refetch(mutableQuery.variables);\n }\n //if (mutableQuery.counter > 3) {\n // console.warn(this._debugPrefix + 'TODO: clean previous queries with name: ' + queryName);\n //}\n }\n else {\n queryRef = this.graphql.watchQueryRef<D, V>(opts);\n this.registerNewMutableWatchQuery({\n id: queryId,\n query: opts.query,\n queryRef,\n variables: opts.variables,\n arrayFieldName: opts.arrayFieldName,\n totalFieldName: opts.totalFieldName,\n insertFilterFn: opts.insertFilterFn,\n sortFn: opts.sortFn,\n counter: 1\n });\n }\n\n return this.graphql.queryRefValuesChanges(queryRef, opts);\n }\n\n insertIntoMutableCachedQueries(cache: ApolloCache<any>, opts: FindMutableWatchQueriesOptions & {\n data: T[] | T;\n }) {\n const queries = this.findMutableWatchQueries(opts);\n if (!queries.length) return;\n\n queries.forEach(query => {\n\n if (opts.data instanceof Array) {\n // Filter values, if a filter function exists\n const data = query.insertFilterFn ? opts.data.filter(i => query.insertFilterFn(i)) : opts.data;\n if (isNotEmptyArray(data)) {\n if (this._debug) console.debug(`[base-data-service] Inserting data into watching query: `, query.id);\n this.graphql.addManyToQueryCache(cache, {\n query: query.query,\n variables: query.variables,\n arrayFieldName: query.arrayFieldName as string,\n totalFieldName: query.totalFieldName as string,\n sortFn: query.sortFn,\n data\n });\n }\n }\n // Filter value, if a filter function exists\n else if (!query.insertFilterFn || query.insertFilterFn(opts.data)) {\n if (this._debug) console.debug(`[base-data-service] Inserting data into watching query: `, query.id);\n this.graphql.insertIntoQueryCache(cache, {\n query: query.query,\n variables: query.variables,\n arrayFieldName: query.arrayFieldName as string,\n totalFieldName: query.totalFieldName as string,\n sortFn: query.sortFn,\n data: opts.data\n });\n }\n });\n }\n\n removeFromMutableCachedQueriesByIds(cache: ApolloCache<any>, opts: FindMutableWatchQueriesOptions & {\n ids: ID|ID[];\n }): number {\n const queries = this.findMutableWatchQueries(opts);\n if (!queries.length) return;\n\n console.debug(`[base-data-service] Removing data from watching queries: `, queries);\n return queries.map(query => {\n if (opts.ids instanceof Array) {\n return this.graphql.removeFromCachedQueryByIds(cache, {\n query: query.query,\n variables: query.variables,\n arrayFieldName: query.arrayFieldName as string,\n totalFieldName: query.totalFieldName as string,\n ids: opts.ids\n });\n }\n else {\n return this.graphql.removeFromCachedQueryById(cache, {\n query: query.query,\n variables: query.variables,\n arrayFieldName: query.arrayFieldName as string,\n totalFieldName: query.totalFieldName as string,\n ids: opts.ids\n }) ? 1 : 0;\n }\n })\n // Sum\n .reduce((res, count) => res + count, 0);\n }\n\n async refetchMutableWatchQueries(opts: FindMutableWatchQueriesOptions & { variables?: any }): Promise<void> {\n // Retrieve queries to refetch\n const queries = this.findMutableWatchQueries(opts);\n\n // Skip if nothing to refetch\n if (!queries.length) return;\n\n try {\n await Promise.all(queries.map(query => {\n if (this._debug) console.debug(this._logPrefix + `Refetching mutable watch query {${query.id}}`);\n return query.queryRef.refetch({...query.variables, ...opts.variables});\n }));\n }\n catch (err) {\n console.error(this._logPrefix + 'Error while refetching mutable watch queries', err);\n }\n }\n\n /* -- protected methods -- */\n\n protected computeMutableWatchQueryId<D, T, V = EmptyObject>(opts: MutableWatchQueryOptions<D, T, V>) {\n const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);\n const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';\n return [queryName, opts.arrayFieldName, variablesKey].join('|');\n }\n\n protected findMutableWatchQueries(opts: FindMutableWatchQueriesOptions): MutableWatchQueryDescription<any>[] {\n // Search by queryName\n if (opts.queryName) {\n return this._mutableWatchQueries.filter(q => q.id.startsWith(opts.queryName + '|'));\n }\n if (opts.queryNames) {\n return opts.queryNames.reduce((res, queryName) => res.concat(this._mutableWatchQueries.filter(q => q.id.startsWith(queryName + '|'))), []);\n }\n\n // Search by query\n if (opts.query) {\n return this._mutableWatchQueries.filter(q => q.query === opts.query);\n }\n if (opts.queries) {\n return opts.queries\n .filter(isNotNil)\n .reduce((res, query) => res.concat(this._mutableWatchQueries.filter(q => q.query === query)), []);\n }\n throw Error('Invalid options: only one property must be set');\n }\n\n protected registerNewMutableWatchQuery(mutableQuery: MutableWatchQueryDescription<any>) {\n\n if (this._debug) console.debug(this._logPrefix + `Register new mutable watch query {${mutableQuery.id}}`);\n\n // If exceed the max size of mutable queries: remove some\n if (this._mutableWatchQueriesMaxCount > 0 && this._mutableWatchQueries.length >= this._mutableWatchQueriesMaxCount) {\n const removedWatchQueries = this._mutableWatchQueries.splice(0, 1 + this._mutableWatchQueries.length - this._mutableWatchQueriesMaxCount);\n\n // Warn, as it shouldn't be happen often, when max is correctly set\n console.warn(this._logPrefix + `Removing older mutable watching queries (stack exceed max of ${this._mutableWatchQueriesMaxCount}): `,\n removedWatchQueries.map(q => q.id));\n }\n\n // Define the sort function (to be used in insertIntoMutableCachedQuery())\n if (!mutableQuery.sortFn && mutableQuery.variables && mutableQuery.variables.sortBy) {\n mutableQuery.sortFn = mutableQuery.variables && mutableQuery.variables.sortBy\n && EntityUtils.sortComparator(mutableQuery.variables.sortBy, mutableQuery.variables.sortDirection || 'asc');\n }\n\n // Add the new mutable query to array\n this._mutableWatchQueries.push(mutableQuery);\n }\n\n protected findRefetchQueries(opts: FindMutableWatchQueriesOptions): InternalRefetchQueriesInclude {\n return this.findMutableWatchQueries(opts)\n // Workaround, to make refetch queries works: transform into a simple {query, variables}\n .map(({query, variables}) => {\n return { query, variables };\n });\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {CryptoService, KeyPair} from './crypto.service';\nimport {Department} from './model/department.model';\nimport {Account} from './model/account.model';\nimport {Person, PersonUtils, UserProfileLabel} from './model/person.model';\nimport {UsageMode, UserSettings} from './model/settings.model';\nimport {BehaviorSubject, Observable, Subject, Subscription} from 'rxjs';\nimport {FetchPolicy, gql} from '@apollo/client/core';\nimport {Storage} from '@ionic/storage';\n\nimport {sleep} from '../../shared/functions';\nimport {BaseGraphqlService} from './base-graphql-service.class';\nimport {ErrorCodes, ServerErrorCodes} from './errors';\nimport {GraphqlService} from '../graphql/graphql.service';\nimport {LocalSettingsService} from './local-settings.service';\nimport {FormFieldDefinition} from '../../shared/form/field.model';\nimport {AuthTokenType, NetworkService} from './network.service';\nimport {FileService} from '../../shared/file/file.service';\nimport {MINIFY_ENTITY_FOR_POD, Referential, ReferentialUtils} from './model/referential.model';\nimport {StatusIds} from './model/model.enum';\nimport {Base58} from './base58';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {toDateISOString} from '../../shared/dates';\nimport {firstNotNilPromise} from '../../shared/observables';\nimport {IStartableService} from '../../shared/services/startable-service.class';\n\n\nexport declare interface AccountHolder {\n loaded: boolean;\n keypair: KeyPair;\n authToken: string;\n authBasic?: string;\n pubkey: string;\n account: Account;\n person: Person;\n department: Department;\n // TODO : use this ?\n mainProfile: String;\n}\nexport interface AuthData {\n username: string;\n password: string;\n offline?: boolean;\n}\nexport interface RegisterData extends AuthData {\n account: Account;\n}\n\nconst TOKEN_STORAGE_KEY = 'token';\nconst PUBKEY_STORAGE_KEY = 'pubkey';\nconst SECKEY_STORAGE_KEY = 'seckey';\nconst ACCOUNT_STORAGE_KEY = 'account';\n\nconst DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';\n\n/* ------------------------------------\n * GraphQL queries\n * ------------------------------------*/\nconst Fragments = {\n account: gql`\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 id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }\n `\n};\n\n// Load account query\nconst LoadQuery: any = gql`\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ${Fragments.account}\n`;\n\n// Check email query\nconst IsEmailExistsQuery: any = gql`\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n`;\nexport declare interface IsEmailExistsVariables {\n email: string;\n hash: string;\n}\n\n// Save (create or update) account mutation\nconst SaveMutation: any = gql`\n mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ${Fragments.account}\n`;\n\n// Create account mutation\nconst CreateMutation: any = gql`\n mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ${Fragments.account}\n`;\n\n// Sent confirmation email\nconst SendConfirmEmailMutation: any = gql`\n mutation sendAccountConfirmationEmail($email:String, $locale:String){\n sendAccountConfirmationEmail(email: $email, locale: $locale)\n }\n`;\n\n// Confirm account email\nconst ConfirmEmailMutation: any = gql`\n mutation confirmAccountEmail($email:String, $code:String){\n confirmAccountEmail(email: $email, code: $code)\n }\n`;\n\n// Authentication query\nconst AuthQuery: any = gql`\n query Auth($token: String){\n authenticate(token: $token)\n }\n`;\n\n// New auth challenge query\nconst AuthChallengeQuery: any = gql`\n query AuthChallenge{\n authChallenge{\n challenge\n pubkey\n signature\n }\n }\n`;\n\nconst UpdateSubscription: any = gql`\n subscription updateAccount($interval: Int){\n data: updateAccount(interval: $interval) {\n id\n updateDate\n }\n }\n`;\n\n@Injectable({providedIn: 'root'})\nexport class AccountService extends BaseGraphqlService implements IStartableService<Account> {\n\n onLogin = new Subject<Account>();\n onLogout = new Subject<any>();\n onChange = new Subject<Account>();\n onAuthTokenChange = new Subject<string | undefined>();\n onAuthBasicChange = new Subject<string | undefined>();\n\n private _data: AccountHolder = {\n loaded: false,\n keypair: null,\n authToken: null,\n authBasic: null,\n pubkey: null,\n mainProfile: null,\n account: null,\n person: null,\n department: null\n };\n private _startPromise: Promise<Account>;\n private _started = false;\n private _$additionalFields = new BehaviorSubject<FormFieldDefinition[]>([]);\n private _tokenType$ = new BehaviorSubject<AuthTokenType>(undefined);\n\n get account(): Account {\n return this._data.loaded ? this._data.account : undefined;\n }\n\n get person(): Person {\n if (this._data.loaded && !this._data.person) {\n this._data.person = this._data.loaded ? this._data.account.asPerson() : undefined;\n }\n return this._data.person;\n }\n\n get department(): Department {\n if (this._data.loaded && !this._data.department) {\n this._data.department = this._data.loaded ? this._data.account.asPerson().department : undefined;\n }\n return this._data.department;\n }\n\n get tokenType(): AuthTokenType {\n return this._tokenType$.value;\n }\n\n set tokenType(value: AuthTokenType) {\n if (this._tokenType$.value !== value) {\n console.info('[account] Using authentication token type: ' + value);\n this._tokenType$.next(value);\n // Reset values\n this._data.authToken = undefined;\n this.onAuthTokenChange.next(undefined);\n this._data.authBasic = undefined;\n this.onAuthBasicChange.next(undefined);\n }\n }\n\n constructor(\n private cryptoService: CryptoService,\n protected network: NetworkService,\n protected graphql: GraphqlService,\n protected settings: LocalSettingsService,\n protected storage: Storage,\n protected file: FileService,\n @Inject(ENVIRONMENT) protected environment\n ) {\n super(graphql, environment);\n this._debug = !environment.production;\n if (this._debug) console.debug('[account-service] Creating service');\n\n this.resetData();\n\n // Send auth token to the graphql layer, when changed\n this.onAuthTokenChange.subscribe((token) => this.graphql.setAuthToken(token));\n this.onAuthBasicChange.subscribe((basic) => this.graphql.setAuthBasic(basic));\n\n // Listen graphql start (or restart)\n this.graphql.onStart.subscribe(async () => {\n if (!this._started) {\n this.ready();\n }\n if (this._started && this.isLogin()) {\n console.debug('[account] Restarting, to retry to authenticate...');\n this.restart();\n }\n });\n\n // Force network to wait account service, after getting connection to the peer\n this.network.on('beforeTryOnlineFinish', async (online) => {\n // If online, wait a full restart, because it can force offline mode\n if (online && (!this._started || this.isLogin())) {\n console.debug('[account] Force networkService.tryOnline() to wait, that account service is restarted...');\n //await this.stop();\n await sleep(500);\n return this.ready();\n }\n });\n }\n\n\n start(): Promise<Account> {\n if (this._startPromise) return this._startPromise;\n if (this._started) return Promise.resolve(this.account);\n\n // Restoring local settings\n this._startPromise = Promise.all([\n this.settings.ready(),\n // Wait token type to be set\n firstNotNilPromise(this._tokenType$)\n ])\n .then(() => this.restoreLocally())\n .then(() => {\n this._started = true;\n this._startPromise = undefined;\n return this.account;\n });\n return this._startPromise;\n }\n\n get started(): boolean {\n return this._started;\n }\n\n async stop() {\n if (this._started || this._startPromise) {\n this._started = false;\n this._startPromise = undefined;\n\n const hadAuthToken = this._data.authToken && true;\n const hadAuthBasic = this._data.authBasic && true;\n const hadAuth = hadAuthToken || hadAuthBasic;\n this.resetData();\n if (hadAuth) {\n this.onLogout.next();\n this.onChange.next(undefined);\n if (hadAuthToken) this.onAuthTokenChange.next(undefined);\n if (hadAuthBasic) this.onAuthBasicChange.next(undefined);\n }\n }\n }\n\n async restart() {\n await this.stop();\n return this.start();\n }\n\n ready(): Promise<Account> {\n if (this._started) return Promise.resolve(this.account);\n return this.start();\n }\n\n isLogin(): boolean {\n return !!(this._data.pubkey && this._data.loaded);\n }\n\n isAuth(): boolean {\n return !!(this._data.pubkey && this._data.keypair && this._data.keypair.secretKey);\n }\n\n hasMinProfile(userProfile: UserProfileLabel): boolean {\n // should be login, and status ENABLE or TEMPORARY\n if (!this._data.account || !this._data.account.pubkey ||\n (this._data.account.statusId !== StatusIds.ENABLE && this._data.account.statusId !== StatusIds.TEMPORARY)) {\n return false;\n }\n return PersonUtils.hasUpperOrEqualsProfile(this._data.account.profiles, userProfile);\n }\n\n hasExactProfile(label: UserProfileLabel): boolean {\n // should be login, and status ENABLE or TEMPORARY\n if (!this._data.account || !this._data.account.pubkey ||\n (this._data.account.statusId !== StatusIds.ENABLE && this._data.account.statusId !== StatusIds.TEMPORARY))\n return false;\n return this._data.account.profiles.some(profile => profile === label);\n }\n\n hasProfileAndIsEnable(userProfile: UserProfileLabel): boolean {\n // should be login, and status ENABLE\n if (!this._data.account || !this._data.account.pubkey || this._data.account.statusId !== StatusIds.ENABLE) return false;\n return PersonUtils.hasUpperOrEqualsProfile(this._data.account.profiles, userProfile);\n }\n\n isAdmin(): boolean {\n return this.hasProfileAndIsEnable('ADMIN');\n }\n\n isSupervisor(): boolean {\n return this.hasProfileAndIsEnable('SUPERVISOR');\n }\n\n isUser(): boolean {\n return this.hasProfileAndIsEnable('USER');\n }\n\n /**\n * @deprecated\n * @param mode\n */\n isUsageMode(mode: UsageMode): boolean {\n return this.settings.isUsageMode(mode);\n }\n\n isOnlyGuest(): boolean {\n // Should be login, and status ENABLE or TEMPORARY\n if (!this._data.account || !this._data.account.pubkey ||\n (this._data.account.statusId !== StatusIds.ENABLE && this._data.account.statusId !== StatusIds.TEMPORARY))\n return false;\n // Profile less then user\n return !PersonUtils.hasUpperOrEqualsProfile(this._data.account.profiles, 'USER');\n }\n\n canUserWriteDataForDepartment(recorderDepartment: Referential | any): boolean {\n if (ReferentialUtils.isEmpty(recorderDepartment)) {\n if (!this.isAdmin())\n console.warn('Unable to check if user has right: invalid recorderDepartment', recorderDepartment);\n return this.isAdmin();\n }\n\n // Should be login, and status ENABLE\n if (!this._data.account || !this._data.account.pubkey || this._data.account.statusId !== StatusIds.ENABLE) return false;\n\n if (!this._data.account.department || !this._data.account.department.id) {\n console.warn('User account has no department ! Unable to check write right against recorderDepartment');\n return false;\n }\n\n // Same recorder department: OK, user can write\n if (this._data.account.department.id === recorderDepartment.id) return true;\n\n // Else, check if supervisor (or more)\n return PersonUtils.hasUpperOrEqualsProfile(this._data.account.profiles, 'SUPERVISOR');\n }\n\n async register(data: RegisterData): Promise<Account> {\n if (this.isLogin()) {\n throw new Error('User already login. Please logout before register.');\n }\n if (!data.username || !data.password) throw new Error('Missing required username or password');\n\n if (this._debug) console.debug('[account] Register new user account...', data.account);\n this._data.loaded = false;\n const now = Date.now();\n\n try {\n const keypair = await this.cryptoService.scryptKeypair(data.username, data.password);\n data.account.pubkey = Base58.encode(keypair.publicKey);\n\n // Default values\n data.account.settings = data.account.settings || new UserSettings();\n data.account.settings.locale = this.settings.locale;\n data.account.settings.latLongFormat = this.settings.latLongFormat;\n data.account.department.id = data.account.department.id || this.environment.defaultDepartmentId;\n\n this._data.keypair = keypair;\n const account = await this.saveRemotely(data.account, keypair);\n\n // Default values\n account.avatar = account.avatar || (this.environment.baseUrl + DEFAULT_AVATAR_IMAGE);\n this._data.mainProfile = PersonUtils.getMainProfile(account.profiles);\n\n this._data.account = account;\n this._data.pubkey = account.pubkey;\n\n // Try to auth on pod\n await this.authenticate(data);\n\n this._data.loaded = true;\n\n await this.saveLocally();\n\n console.debug(`[account] Account successfully registered in ${Date.now() - now}ms`);\n\n // Emit events\n this.onLogin.next(this._data.account);\n this.onChange.next(this._data.account);\n\n return this._data.account;\n }\n catch (error) {\n console.error(error && error.message || error);\n this.resetData();\n throw error;\n }\n }\n\n async authenticate(data?: AuthData) {\n // Wait the auth token, then continue\n const tokenType = await firstNotNilPromise(this._tokenType$);\n\n // Basic auth\n if (tokenType === 'basic' || tokenType === 'basic-and-token') {\n\n // Generate the authBasic, if used\n if (!this._data.authBasic) {\n // Skip if token already provided\n if (!(this._data.authToken && tokenType === 'basic-and-token')) {\n if (!data || !data.username || !data.password) throw new Error('Missing username and password');\n this._data.authBasic = this.cryptoService.encodeBase64(`${data.username}:${data.password}`);\n }\n }\n this.onAuthBasicChange.next(this._data.authBasic);\n }\n\n // Generate the authToken, if used\n if (tokenType === 'token' || tokenType === 'basic-and-token') {\n try {\n this._data.authToken = await this.authenticateAndGetToken(this._data.authToken);\n } catch (error) {\n // Never authenticate, or not ready for offline mode => exit\n console.error(error);\n this.resetData();\n throw error;\n }\n }\n\n // Forget authBasic, to switch to authToken\n if (tokenType === 'basic-and-token') {\n this._data.authBasic = undefined;\n this.onAuthBasicChange.next(undefined);\n }\n }\n\n async login(data: AuthData): Promise<Account> {\n if (!data || !data.username || !data.password) throw new Error('Missing required username or password');\n\n console.debug('[account] Login...');\n\n let keypair;\n try {\n keypair = await this.cryptoService.scryptKeypair(data.username, data.password);\n } catch (error) {\n console.error(error);\n this.resetData();\n throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };\n }\n\n // Store pubkey+keypair\n this._data.pubkey = Base58.encode(keypair.publicKey);\n this._data.keypair = keypair;\n\n // Try to load previous token\n let previousToken: string = await this.storage.get(TOKEN_STORAGE_KEY);\n previousToken = previousToken && previousToken.startsWith(this._data.pubkey) && previousToken || null;\n\n // Offline mode\n const offline = this.settings.hasOfflineFeature() && (this.network.offline || data.offline === true);\n if (offline) {\n this._data.authToken = previousToken;\n\n // Make sure network if set as offline\n this.network.setForceOffline(true, {showToast: false});\n console.info(`[account] Login [OK] {pubkey: ${this._data.pubkey.substr(0, 8)}}, {offline: true}`);\n }\n\n // Online mode: try to auth on pod\n else {\n\n try {\n await this.authenticate(data);\n } catch (error) {\n // Never authenticate, or not ready for offline mode => exit\n console.error(error);\n this.resetData();\n throw error;\n }\n }\n\n // Load account data\n try {\n await this.loadData({offline, fetchPolicy: 'network-only'});\n }\n catch (err) {\n // If account not found, check if email is valid\n if (err && +(err.code) === ErrorCodes.LOAD_ACCOUNT_ERROR) {\n\n // Check email exists\n if (data.username.indexOf('@') !== -1) {\n let isEmailExists;\n try {\n isEmailExists = await this.isEmailExists(data.username);\n } catch (otherError) {\n throw err; // resend the first error\n }\n\n // Email not exists (no account)\n if (!isEmailExists) {\n throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };\n }\n }\n\n // Email exists, so error = 'bad password'\n throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };\n }\n\n throw err; // resend the first error\n }\n\n try {\n // Store to local storage\n await this.saveLocally();\n }\n catch (error) {\n console.error(error);\n this.resetData();\n throw error;\n }\n\n // Emit event to observers\n this.onLogin.next(this._data.account);\n this.onChange.next(this._data.account);\n\n return this._data.account;\n }\n\n async refresh(): Promise<Account> {\n if (!this._data.pubkey) throw new Error('User not logged');\n if (this.network.offline) throw new Error('Cannot check account in offline mode');\n\n await this.loadData();\n await this.saveLocally();\n\n console.debug('[account] Successfully reload account');\n\n // Emit login event to subscribers\n this.onLogin.next(this._data.account);\n this.onChange.next(this._data.account);\n\n return this._data.account;\n }\n\n /**\n * Create or update an user account, to the remote storage\n *\n * @param account\n */\n async save(account: Account): Promise<Account> {\n if (!this._data.pubkey) return Promise.reject('User not logged');\n if (this._data.pubkey !== account.pubkey) return Promise.reject('Not user account');\n\n account = await this.saveRemotely(account, this._data.keypair);\n\n // Set defaults\n account.avatar = account.avatar || (this.environment.baseUrl + DEFAULT_AVATAR_IMAGE);\n this._data.mainProfile = PersonUtils.getMainProfile(account.profiles);\n\n this._data.account = account;\n this._data.loaded = true;\n\n // Save locally (in storage)\n await this.saveLocally();\n\n // Send event\n this.onLogin.next(this._data.account);\n this.onChange.next(this._data.account);\n\n return this._data.account;\n }\n\n async logout(): Promise<void> {\n\n const hadAuthToken = this._data.authToken && true;\n const hadAuthBasic = this._data.authBasic && true;\n const pubkey = this._data && this._data.pubkey;\n\n this.resetData();\n\n if (!this.settings.hasOfflineFeature()) {\n\n // Remove all data from the local storage\n await Promise.all([\n this.storage.remove(PUBKEY_STORAGE_KEY),\n this.storage.remove(TOKEN_STORAGE_KEY),\n this.storage.remove(ACCOUNT_STORAGE_KEY),\n pubkey && this.storage.remove(ACCOUNT_STORAGE_KEY + '#' + pubkey) || Promise.resolve(),\n this.storage.remove(SECKEY_STORAGE_KEY)\n ]);\n }\n\n // Offline features enable: need to keep some data\n else {\n // Always remove only secret key\n // But keep:\n // - account by pubkey\n // - auth token\n await Promise.all([\n this.storage.remove(PUBKEY_STORAGE_KEY),\n this.storage.remove(ACCOUNT_STORAGE_KEY),\n this.storage.remove(SECKEY_STORAGE_KEY)\n ]);\n }\n\n // Clean page history, in local settings\n await this.settings.clearPageHistory();\n\n // Notify observers\n this.onLogout.next();\n if (hadAuthToken) this.onAuthTokenChange.next(undefined);\n if (hadAuthBasic) this.onAuthBasicChange.next(undefined);\n this.onChange.next(undefined);\n }\n\n /**\n * Load a account\n *\n * @param opts\n */\n async load(opts?: {\n offline?: boolean;\n fetchPolicy?: FetchPolicy;\n }): Promise<Account | undefined> {\n\n const now = this._debug && Date.now();\n if (this._debug) console.debug(`[account] Loading account...`);\n let json: any;\n\n // Load locally\n const offline = this.network.offline\n && (!opts || (opts.fetchPolicy !== 'network-only' && opts.fetchPolicy !== 'no-cache'))\n || (opts && opts.offline === true);\n if (offline) {\n json = await this.storage.get(ACCOUNT_STORAGE_KEY);\n json = json && (typeof json === 'string') && JSON.parse(json) || json;\n json = json && this._data.pubkey && (json.pubkey === this._data.pubkey) && json || null;\n if (!json && this._data.pubkey) {\n json = await this.storage.get(ACCOUNT_STORAGE_KEY + '#' + this._data.pubkey);\n json = json && (typeof json === 'string') && JSON.parse(json) || json;\n }\n }\n\n // Load remotely\n else {\n const {data} = await this.graphql.query<{ data: any }>({\n query: LoadQuery,\n error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },\n fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined\n });\n json = data;\n }\n\n if (json) {\n const account = Account.fromObject(json);\n if (this._debug) console.debug(`[account] Account loaded in ${Date.now() - now}ms`, account);\n return account;\n }\n else {\n console.warn(`[account] Account not found !`);\n return undefined;\n }\n }\n\n\n /**\n * Check if email is available for new account registration.\n * Throw an error if not available\n *\n * @param email\n */\n async checkEmailAvailable(email: string): Promise<void> {\n const isEmailExists = await this.isEmailExists(email);\n if (isEmailExists) {\n throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };\n }\n }\n\n /**\n * Check if email is exists in server.\n *\n * @param email\n */\n async isEmailExists(email: string): Promise<boolean> {\n\n if (this._debug) console.debug('[account] Checking if {' + email + '} exists...');\n\n const data = await this.graphql.query<{ isEmailExists: boolean }, IsEmailExistsVariables>({\n query: IsEmailExistsQuery,\n variables: {\n email,\n hash: undefined\n }\n });\n\n if (this._debug) console.debug('[account] Email exist: ' + (data && data.isEmailExists));\n\n return data && data.isEmailExists;\n }\n\n async sendConfirmationEmail(email: string, locale?: string): Promise<boolean> {\n\n locale = locale || this.settings.locale;\n console.debug('[account] Sending confirmation email to {' + email + '} with locale {' + locale + '}...');\n\n return await this.graphql.mutate<boolean>({\n mutation: SendConfirmEmailMutation,\n variables: {\n email,\n locale\n },\n error: {\n code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,\n message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'\n }\n });\n }\n\n async confirmEmail(email: String, code: String): Promise<boolean> {\n\n console.debug('[account] Sendng confirm request for email {' + email + '} with code {' + code + '}...');\n\n const res = await this.graphql.mutate<{ confirmAccountEmail: boolean }>({\n mutation: ConfirmEmailMutation,\n variables: {\n email,\n code\n },\n error: {\n code: ErrorCodes.CONFIRM_EMAIL_FAILED,\n message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'\n }\n });\n return res && res.confirmAccountEmail;\n }\n\n listenChanges(): Subscription {\n if (!this._data.pubkey) return Subscription.EMPTY;\n\n const self = this;\n\n console.debug('[account] [WS] Listening account changes');\n\n const subscription = this.graphql.subscribe<{data: any}>({\n query: UpdateSubscription,\n variables: {\n interval: 10\n },\n error: {\n code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,\n message: 'ERROR.ACCOUNT.SUBSCRIBE_ACCOUNT_ERROR'\n }\n }).subscribe({\n next: async ({data}) => {\n if (!data) return;\n const existingUpdateDate: string = toDateISOString(self._data.account?.updateDate);\n if (existingUpdateDate !== data.updateDate) {\n console.debug(`[account] [WS] Detected update on {${data.updateDate}}`);\n await self.refresh();\n }\n },\n error: async (err) => {\n if (err && +err.code === ServerErrorCodes.NOT_FOUND) {\n console.info('[account] Account not exists anymore: force user to logout...', err);\n await self.logout();\n }\n else if (err && +err.code === ServerErrorCodes.UNAUTHORIZED) {\n console.info('[account] Account not authorized: force user to logout...', err);\n await self.logout();\n }\n else {\n console.warn('[account] [WS] Received error:', err);\n }\n },\n complete: () => {\n console.debug('[account] [WS] Completed');\n }\n });\n\n // Add log when closing WS\n subscription.add(() => console.debug('[account] [WS] Stop listening account changes'));\n\n return subscription;\n }\n\n /**\n * @deprecated\n */\n getPageSettings(pageId: string, propertyName?: string): string[] {\n return this.settings.getPageSettings(pageId, propertyName);\n }\n\n /**\n * @deprecated\n */\n async savePageSetting(pageId: string, value: any, propertyName?: string) {\n await this.settings.savePageSetting(pageId, value, propertyName);\n }\n\n get additionalFields(): FormFieldDefinition[] {\n return this._$additionalFields.getValue();\n }\n\n get $additionalFields(): Observable<FormFieldDefinition[]> {\n return this._$additionalFields;\n }\n\n getAdditionalField(key: string): FormFieldDefinition | undefined {\n return this._$additionalFields.getValue().find(f => f.key === key);\n }\n\n registerAdditionalField(field: FormFieldDefinition) {\n const values = this._$additionalFields.getValue();\n if (!!values.find(f => f.key === field.key)) {\n throw new Error(`Additional account field {key: ${field.key}} already define.`);\n }\n if (this._debug) console.debug(`[account] Found additional account's field {key: ${field.key}}`);\n this._$additionalFields.next(values.concat(field));\n }\n\n /* -- protected method -- */\n\n protected resetData() {\n this._data.loaded = false;\n this._data.keypair = null;\n this._data.authToken = null;\n this._data.authBasic = null;\n this._data.pubkey = null;\n this._data.mainProfile = null;\n this._data.account = new Account();\n this._data.person = null;\n this._data.department = null;\n }\n\n protected async loadData(opts?: {\n offline?: boolean;\n fetchPolicy?: FetchPolicy;\n }): Promise<Account> {\n if (!this._data.pubkey) throw new Error('User not logged');\n\n this._data.loaded = false;\n\n try {\n const account = (await this.load(opts)) || new Account();\n\n // Set defaults\n account.avatar = account.avatar || (this.environment.baseUrl + DEFAULT_AVATAR_IMAGE);\n account.settings = account.settings || new UserSettings();\n account.settings.locale = account.settings.locale || this.settings.locale;\n account.settings.latLongFormat = account.settings.latLongFormat || this.settings.latLongFormat || 'DDMM';\n\n // Read main profile\n this._data.mainProfile = PersonUtils.getMainProfile(account.profiles);\n\n // Update, instead of replace it\n if (this._data.account) {\n this._data.account.fromObject(account);\n }\n else {\n this._data.account = account;\n }\n this._data.loaded = true;\n\n return this._data.account;\n }\n catch (error) {\n this.resetData();\n if (error.code && error.message) throw error;\n\n console.error(error);\n throw {\n code: ErrorCodes.LOAD_ACCOUNT_ERROR,\n message: 'ERROR.LOAD_ACCOUNT_ERROR'\n };\n }\n }\n\n protected async restoreLocally(): Promise<Account | undefined> {\n\n // Restore from storage\n const values = await Promise.all([\n this.storage.get(PUBKEY_STORAGE_KEY),\n this.storage.get(TOKEN_STORAGE_KEY),\n this.storage.get(SECKEY_STORAGE_KEY)\n ]);\n const pubkey = values[0];\n const token = values[1];\n const seckey = values[2];\n\n // Quit if no pubkey (not logged)\n if (!pubkey) return;\n\n // Quit if could not auth on pod\n const canRemoteAuth = token || seckey || false;\n if (!canRemoteAuth) return;\n\n if (this._debug) console.debug(`[account] Account restoration...`);\n\n this._data.authToken = token;\n this._data.pubkey = pubkey;\n this._data.keypair = seckey && {\n publicKey: Base58.decode(pubkey),\n secretKey: Base58.decode(seckey)\n } || null;\n\n // Online mode: try to connect to pod\n if (this.network.online) {\n try {\n await this.authenticate();\n if (!this._data.authToken && !this._data.authBasic) throw new Error('Authentication failed');\n }\n catch (error) {\n // Offline feature are enable: continue in offline mode\n if (this.settings.hasOfflineFeature()) {\n console.warn('[account] Unable to authenticate on pod: forcing offline mode');\n this.network.setForceOffline(true, {showToast: false});\n // Continue\n }\n // No offline features enable (=offline mode not allowed)\n else {\n console.error(error);\n this.logout();\n return;\n }\n\n }\n }\n\n // Get the account, from pubkey\n let jsonAccount = await this.storage.get(`${ACCOUNT_STORAGE_KEY}#${pubkey}`);\n if (!jsonAccount) {\n // Try using the old storage key\n const accountStr = await this.storage.get(ACCOUNT_STORAGE_KEY);\n jsonAccount = accountStr && ((typeof accountStr === 'string') && JSON.parse(jsonAccount) || accountStr);\n }\n\n // Invalid account: do not use it\n if (!jsonAccount || jsonAccount.pubkey !== pubkey) return;\n\n // Transform to entity\n const account = Account.fromObject(jsonAccount);\n\n // Update data\n this._data.account = account;\n this._data.mainProfile = PersonUtils.getMainProfile(account.profiles);\n this._data.loaded = true;\n\n // Emit event\n this.onLogin.next(this._data.account);\n this.onChange.next(this._data.account);\n\n if (this._debug) console.debug(`[account] Account restoration [OK] {pubkey: ${pubkey.substr(0, 8)}}, {profile: ${this._data.mainProfile}}`);\n\n return account;\n }\n\n /**\n * Save account into the local storage\n */\n protected async saveLocally(): Promise<void> {\n if (!this._data.pubkey) throw new Error('User not logged');\n\n if (this._debug) console.debug(`[account] Saving account {${this._data.pubkey.substring(0, 6)}} in local storage...`);\n\n // Convert account to json\n const json = this._data.account.asObject({keepTypename: true});\n const seckey = this._data.keypair && this._data.keypair.secretKey && Base58.encode(this._data.keypair.secretKey) || null;\n\n // Convert avatar URL to dataUrl (e.g. 'data:image/png:<base64 content>')\n const hasAvatarUrl = json.avatar && !json.avatar.endsWith(DEFAULT_AVATAR_IMAGE) &&\n (json.avatar.startsWith('http://') || (json.avatar.startsWith('https://')));\n if (hasAvatarUrl && this.network.online) {\n await this.file.getImage(json.avatar, {\n thumbnail: true,\n responseType: 'dataUrl'\n })\n .then(dataUrl => {\n if (dataUrl && this._debug) console.debug('[account] Image fetched: ', dataUrl.substring(0, 50));\n\n // TODO: make sure to display Base64 image in the menu top header\n //jsonAccount.avatar = dataUrl;\n })\n .catch(err => {\n console.error(`[account] Error while fetching image: ${json.avatar}: ${err}`);\n });\n }\n\n try {\n await Promise.all([\n this.storage.set(PUBKEY_STORAGE_KEY, this._data.pubkey),\n this.storage.set(TOKEN_STORAGE_KEY, this._data.authToken),\n this.storage.set(`${ACCOUNT_STORAGE_KEY}#${this._data.pubkey}`, json),\n // Secret key (optional)\n seckey && this.storage.set(SECKEY_STORAGE_KEY, seckey) || this.storage.remove(SECKEY_STORAGE_KEY),\n // Remove old storage key\n this.storage.remove(ACCOUNT_STORAGE_KEY)\n ]);\n\n if (this._debug) console.debug('[account] Account saved in local storage');\n }\n catch(err) {\n console.error('[account] Error while saving account locally: ' + (err && err.message || err), err);\n }\n }\n\n /**\n * Create or update an user account\n *\n * @param account\n * @param keyPair\n */\n protected async saveRemotely(account: Account, keyPair?: KeyPair): Promise<Account> {\n account.pubkey = account.pubkey || (keyPair && Base58.encode(keyPair.publicKey));\n if (!account.pubkey) throw new Error('Missing account pubkey');\n\n const now = this._debug && Date.now();\n if (this._debug) console.debug(`[account] Saving account remotely...`);\n\n const isNew = !account.id && account.id !== 0;\n\n // If this is an update: get existing account's updateDate, to avoid 'version error' when saving\n if (!isNew) {\n const existingAccount = await this.load({ fetchPolicy: 'network-only' });\n if (!existingAccount || !existingAccount.updateDate) {\n throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };\n }\n this.copyIdAndUpdateDate(existingAccount, account);\n }\n\n const json = account.asObject(MINIFY_ENTITY_FOR_POD);\n\n // User not allow to change his profiles\n delete json.profiles;\n\n // Execute mutation\n const { data } = await this.graphql.mutate<{ data: Account }>({\n mutation: isNew ? CreateMutation : SaveMutation,\n variables: { data: json },\n error: {\n code: ErrorCodes.SAVE_ACCOUNT_ERROR,\n message: 'ERROR.SAVE_ACCOUNT_ERROR'\n }\n });\n\n // Copy update properties\n this.copyIdAndUpdateDate(data, account);\n\n if (this._debug) console.debug(`[account] Account remotely saved in ${Date.now() - now}ms`);\n\n return account;\n }\n\n protected async authenticateAndGetToken(token?: string, counter?: number): Promise<string> {\n if (!this._data.pubkey) throw new Error('User not logged');\n\n if (!counter) console.info('[account] Authentication on pod...');\n\n if (counter > 4) {\n if (this._debug) console.debug(`[account] Failed to authentication on pod (after ${counter} attempts)`);\n throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };\n }\n\n // Check if valid\n if (token) {\n const data = await this.graphql.query<{ authenticate: boolean }, { token: string }>({\n query: AuthQuery,\n variables: {\n token\n },\n error: {\n code: ErrorCodes.UNAUTHORIZED,\n message: 'ERROR.UNAUTHORIZED'\n },\n fetchPolicy: 'no-cache'\n });\n\n // Token is accepted by the server\n if (data && data.authenticate) {\n // Store the token\n this.onAuthTokenChange.next(token);\n\n console.info(`[account] Authentication on pod [OK] {pubkey: '${this._data.pubkey.substr(0, 8)}'}`);\n return token; // return the token\n }\n\n // Continue (will retry with another challenge)\n }\n\n // Generate a new token\n const challengeError = {\n code: ErrorCodes.AUTH_CHALLENGE_ERROR,\n message: 'ERROR.AUTH_CHALLENGE_ERROR'\n };\n const data = await this.graphql.query<{\n authChallenge: {\n pubkey: string;\n challenge: string;\n signature: string;\n };\n }>({\n query: AuthChallengeQuery,\n variables: {},\n error: challengeError,\n fetchPolicy: 'network-only'\n });\n\n // Check challenge\n if (!data || !data.authChallenge) throw challengeError; // Should never occur\n\n // Check server signature\n const signatureOK = await this.cryptoService.verify(\n data.authChallenge.challenge,\n data.authChallenge.signature,\n data.authChallenge.pubkey\n );\n if (!signatureOK) {\n console.warn('FIXME: Bad peer signature on auth challenge !', data.authChallenge);\n }\n // TODO: check server pubkey as a valid certificate\n\n // Do the challenge\n const signature = await this.cryptoService.sign(data.authChallenge.challenge, this._data.keypair);\n const newToken = `${this._data.pubkey}:${data.authChallenge.challenge}|${signature}`;\n\n // iterate with the new token\n return await this.authenticateAndGetToken(newToken, (counter || 1) + 1 /* increment */);\n }\n\n protected copyIdAndUpdateDate(source: Account | undefined, target: Account) {\n if (!source) return;\n\n target.id = source.id || target.id;\n target.updateDate = source.updateDate || target.updateDate;\n target.settings.id = source.settings && source.settings.id || target.settings.id;\n target.settings.updateDate = source.settings && source.settings.updateDate || target.settings.updateDate;\n }\n}\n","import {Moment} from 'moment';\nimport {FormFieldDefinition} from '../../../shared/form/field.model';\nimport {Entity, EntityAsObjectOptions, EntityUtils, IEntity} from './entity.model';\nimport {Department} from './department.model';\nimport {PropertiesMap} from '../../../shared/types';\nimport {fromDateISOString, toDateISOString} from '../../../shared/dates';\nimport {isNotNil} from '../../../shared/functions';\nimport {EntityClass} from './entity.decorators';\n\n// @dynamic\n@EntityClass({typename: 'SoftwareVO'})\nexport class Software<\n T extends Software<any> = Software<any>\n >\n extends Entity<T, number>\n implements IEntity<T, number> {\n\n static fromObject: (source: any, opts?: any) => Software;\n\n label: string;\n name: string;\n description: string;\n comments: string;\n creationDate: Date | Moment;\n statusId: number;\n properties: PropertiesMap;\n\n constructor(__typename?: string) {\n super(__typename || Software.TYPENAME);\n }\n\n asObject(options?: EntityAsObjectOptions): any {\n const target: any = super.asObject(options);\n target.creationDate = toDateISOString(this.creationDate);\n target.properties = this.properties;\n return target;\n }\n\n fromObject(source: any) {\n super.fromObject(source);\n this.label = source.label;\n this.name = source.name;\n this.description = source.description;\n this.comments = source.comments;\n this.creationDate = fromDateISOString(source.creationDate);\n this.statusId = source.statusId;\n\n if (source.properties && source.properties instanceof Array) {\n this.properties = EntityUtils.getPropertyArrayAsObject(source.properties);\n } else {\n this.properties = {...source.properties};\n }\n }\n}\n\n// @dynamic\n@EntityClass({typename: 'ConfigurationVO'})\nexport class Configuration extends Software<Configuration> {\n\n static fromObject: (source: any, opts?: any) => Configuration;\n\n smallLogo: string;\n largeLogo: string;\n backgroundImages: string[];\n partners: Department[];\n\n constructor() {\n super(Configuration.TYPENAME);\n }\n\n clone(): Configuration {\n return this.copy(new Configuration());\n }\n\n copy(target: Configuration): Configuration {\n target.fromObject(this);\n return target;\n }\n\n asObject(options?: EntityAsObjectOptions): any {\n const target: any = super.asObject(options);\n target.partners = this.partners && this.partners.map(p => p.asObject(options)) || undefined;\n return target;\n }\n\n fromObject(source: any) {\n super.fromObject(source);\n this.smallLogo = source.smallLogo;\n this.largeLogo = source.largeLogo;\n this.backgroundImages = source.backgroundImages;\n this.partners = source.partners && source.partners.map(Department.fromObject) || undefined;\n }\n\n getPropertyAsBoolean(definition: FormFieldDefinition): boolean {\n const value = this.getProperty(definition);\n return isNotNil(value) ? (value && value !== 'false') : undefined;\n }\n\n getPropertyAsInt(definition: FormFieldDefinition): number {\n const value = this.getProperty(definition);\n return isNotNil(value) ? parseInt(value) : undefined;\n }\n\n getPropertyAsNumbers(definition: FormFieldDefinition): number[] {\n const value = this.getProperty(definition);\n if (typeof value === 'string') return value.split(',').map(parseFloat) || undefined;\n return isNotNil(value) ? [parseFloat(value)] : undefined;\n }\n\n getPropertyAsStrings(definition: FormFieldDefinition): string[] {\n const value = this.getProperty(definition);\n return value && value.split(',') || undefined;\n }\n\n getProperty<T = string>(definition: FormFieldDefinition): T {\n return isNotNil(this.properties[definition.key]) ? this.properties[definition.key] : (definition.defaultValue || undefined);\n }\n}\n","// TODO: rename to CONFIG_OPTIONS_MAP\n// then declare a type like this :\n// > export declare type ConfigOptions = key of CONFIG_OPTIONS_MAP\nimport {FormFieldDefinition} from '../../../shared/form/field.model';\nimport {APP_LOCALES} from '../model/settings.model';\nimport {AuthTokenType} from '../network.service';\n\nexport const CORE_CONFIG_OPTIONS = Object.freeze({\n LOGO: <FormFieldDefinition>{\n key: 'sumaris.logo',\n label: 'CONFIGURATION.OPTIONS.LOGO',\n type: 'string'\n },\n FAVICON: <FormFieldDefinition>{\n key: 'sumaris.favicon',\n label: 'CONFIGURATION.OPTIONS.FAVICON',\n type: 'string'\n },\n DEFAULT_LOCALE: <FormFieldDefinition>{\n key: 'sumaris.defaultLocale',\n label: 'CONFIGURATION.OPTIONS.DEFAULT_LOCALE',\n type: 'enum',\n values: APP_LOCALES\n },\n DEFAULT_LAT_LONG_FORMAT: <FormFieldDefinition>{\n key: 'sumaris.defaultLatLongFormat',\n label: 'CONFIGURATION.OPTIONS.DEFAULT_LATLONG_FORMAT',\n type: 'enum',\n values: [\n {\n key: 'DDMMSS',\n value: 'COMMON.LAT_LONG.DDMMSS_PLACEHOLDER'\n },\n {\n key: 'DDMM',\n value: 'COMMON.LAT_LONG.DDMM_PLACEHOLDER'\n },\n {\n key: 'DD',\n value: 'COMMON.LAT_LONG.DD_PLACEHOLDER'\n }\n ]\n },\n REGISTRATION_ENABLE: <FormFieldDefinition>{\n key: 'sumaris.registration.enable',\n label: 'CONFIGURATION.OPTIONS.HOME.ENABLE_REGISTRATION',\n type: 'boolean',\n defaultValue: true\n },\n AUTH_TOKEN_TYPE: <FormFieldDefinition>{\n key: 'sumaris.auth.token.type',\n label: 'CONFIGURATION.OPTIONS.AUTH_TOKEN_TYPE_PLACEHOLDER',\n type: 'enum',\n values: [\n {\n key: <AuthTokenType>'token',\n value: 'CONFIGURATION.OPTIONS.AUTH_TOKEN_TYPE.TOKEN'\n },\n {\n key: <AuthTokenType>'basic',\n value: 'CONFIGURATION.OPTIONS.AUTH_TOKEN_TYPE.BASIC'\n },\n {\n key: <AuthTokenType>'basic-and-token',\n value: 'CONFIGURATION.OPTIONS.AUTH_TOKEN_TYPE.BASIC_AND_TOKEN'\n }\n ],\n defaultValue: <AuthTokenType>'token'\n },\n GRAVATAR_ENABLE: <FormFieldDefinition>{\n key: 'sumaris.gravatar.enable',\n label: 'CONFIGURATION.OPTIONS.ENABLE_GRAVATAR',\n type: 'boolean',\n defaultValue: false\n },\n GRAVATAR_URL: <FormFieldDefinition>{\n key: 'sumaris.gravatar.url',\n label: 'CONFIGURATION.OPTIONS.GRAVATAR_URL',\n type: 'string',\n defaultValue: 'https://www.gravatar.com/avatar/{md5}'\n },\n TESTING: <FormFieldDefinition>{\n key: 'sumaris.testing.enable',\n label: 'CONFIGURATION.OPTIONS.TESTING',\n type: 'boolean'\n },\n APP_MIN_VERSION: <FormFieldDefinition>{\n key: 'sumaris.app.version.min',\n label: 'CONFIGURATION.OPTIONS.APP_MIN_VERSION',\n type: 'string'\n },\n HELP_URL: <FormFieldDefinition>{\n key: 'sumaris.help.url',\n label: 'CONFIGURATION.OPTIONS.HELP_URL',\n type: 'string'\n },\n FORUM_URL: <FormFieldDefinition>{\n key: 'sumaris.forum.url',\n label: 'CONFIGURATION.OPTIONS.FORUM_URL',\n type: 'string'\n },\n LOGO_LARGE: <FormFieldDefinition>{\n key: 'sumaris.logo.large',\n label: 'CONFIGURATION.OPTIONS.HOME.LOGO_LARGE',\n type: 'string'\n },\n MENU_ITEMS: <FormFieldDefinition>{\n key: 'sumaris.menu.items',\n label: 'CONFIGURATION.OPTIONS.MENU.ITEMS',\n type: 'string'\n // -- FOR DEV\n /*,defaultValue: JSON.stringify([\n {title: \"Item #1\", path: \"/settings\", icon: \"people\", after: \"MENU.HOME\"},\n {title: \"Item #2\", path: \"/settings\", icon: \"people\", before: \"MENU.LOGOUT\"}\n ])*/\n },\n HOME_PARTNERS_DEPARTMENTS: <FormFieldDefinition>{\n key: 'sumaris.partner.departments',\n label: 'CONFIGURATION.OPTIONS.HOME.PARTNER_DEPARTMENTS',\n type: 'string'\n },\n HOME_BACKGROUND_IMAGE: <FormFieldDefinition>{\n key: 'sumaris.background.images',\n label: 'CONFIGURATION.OPTIONS.HOME.BACKGROUND_IMAGES',\n type: 'string'\n },\n COLOR_PRIMARY: <FormFieldDefinition>{\n key: 'sumaris.color.primary',\n label: 'CONFIGURATION.OPTIONS.COLORS.PRIMARY',\n type: 'color'\n },\n COLOR_SECONDARY: <FormFieldDefinition>{\n key: 'sumaris.color.secondary',\n label: 'CONFIGURATION.OPTIONS.COLORS.SECONDARY',\n type: 'color'\n },\n COLOR_TERTIARY: <FormFieldDefinition>{\n key: 'sumaris.color.tertiary',\n label: 'CONFIGURATION.OPTIONS.COLORS.TERTIARY',\n type: 'color'\n },\n COLOR_SUCCESS: <FormFieldDefinition>{\n key: 'sumaris.color.success',\n label: 'CONFIGURATION.OPTIONS.COLORS.SUCCESS',\n type: 'color'\n },\n COLOR_WARNING: <FormFieldDefinition>{\n key: 'sumaris.color.warning',\n label: 'CONFIGURATION.OPTIONS.COLORS.WARNING',\n type: 'color'\n },\n COLOR_ACCENT: <FormFieldDefinition>{\n key: 'sumaris.color.accent',\n label: 'CONFIGURATION.OPTIONS.COLORS.ACCENT',\n type: 'color'\n },\n COLOR_DANGER: <FormFieldDefinition>{\n key: 'sumaris.color.danger',\n label: 'CONFIGURATION.OPTIONS.COLORS.DANGER',\n type: 'color'\n },\n ANDROID_INSTALL_URL: <FormFieldDefinition>{\n key: 'sumaris.android.install.url',\n label: 'CONFIGURATION.OPTIONS.ANDROID_INSTALL_URL',\n type: 'string'\n }\n});\n","import {Inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {gql} from '@apollo/client/core';\nimport {Configuration} from './model/config.model';\nimport {Storage} from '@ionic/storage';\nimport {BehaviorSubject, Observable, Subject, Subscription} from 'rxjs';\nimport {ErrorCodes} from './errors';\nimport {GraphqlService} from '../graphql/graphql.service';\nimport {FormFieldDefinition, FormFieldDefinitionMap} from '../../shared/form/field.model';\nimport {isNotEmptyArray, isNotNil} from '../../shared/functions';\nimport {FileService} from '../../shared/file/file.service';\nimport {NetworkService} from './network.service';\nimport {CORE_CONFIG_OPTIONS} from './config/core.config';\nimport {Platform, ToastController} from '@ionic/angular';\nimport {ShowToastOptions, Toasts} from '../../shared/toasts';\nimport {TranslateService} from '@ngx-translate/core';\nimport {filter} from 'rxjs/operators';\nimport {EntityServiceLoadOptions, IEntityService} from '../../shared/services/entity-service.class';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {BaseGraphqlService} from './base-graphql-service.class';\nimport {IStartableService} from '../../shared/services/startable-service.class';\n\n\nconst CONFIGURATION_STORAGE_KEY = 'configuration';\n\n/* ------------------------------------\n * GraphQL queries\n * ------------------------------------*/\nexport const Fragments = {\n config: gql`\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};\n\nconst LoadQuery: any = gql`\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ${Fragments.config}\n`;\n\n// Save (create or update) account mutation\nconst SaveMutation: any = gql`\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ${Fragments.config}\n`;\n\nconst ClearCache: any = gql`\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n`;\n\nconst CacheStatistics: any = gql`\n query CacheStatistics {\n cacheStatistics\n }\n`;\n\nexport const APP_CONFIG_OPTIONS = new InjectionToken<FormFieldDefinitionMap>('defaultOptions');\n\n@Injectable({\n providedIn: 'root',\n deps: [APP_CONFIG_OPTIONS]\n})\nexport class ConfigService\n extends BaseGraphqlService<Configuration, any, number>\n implements IEntityService<Configuration>, IStartableService<Configuration> {\n\n private _started = false;\n private _startPromise: Promise<Configuration>;\n private _subscription = new Subscription();\n private _optionDefs: FormFieldDefinition[];\n\n private $data = new BehaviorSubject<Configuration>(null);\n\n get started(): boolean {\n return this._started;\n }\n\n get config(): Observable<Configuration> {\n // If first call: start loading\n if (!this._started) this.start();\n\n return this.$data.pipe(filter(isNotNil));\n }\n\n constructor(\n protected platform: Platform,\n protected graphql: GraphqlService,\n protected storage: Storage,\n protected network: NetworkService,\n protected file: FileService,\n protected toastController: ToastController,\n protected translate: TranslateService,\n @Inject(ENVIRONMENT) protected environment,\n @Optional() @Inject(APP_CONFIG_OPTIONS) defaultOptionsMap: FormFieldDefinitionMap\n ) {\n super(graphql, environment);\n\n this._debug = !environment.production;\n if (this._debug) console.debug('[config] Creating service');\n\n this._optionDefs = Object.values({...CORE_CONFIG_OPTIONS, ...defaultOptionsMap});\n\n // Restart if graphql service restart\n this.graphql.onStart.subscribe(() => this.restart());\n\n // Start\n if (this.graphql.started) {\n this.start();\n }\n }\n\n start(): Promise<Configuration> {\n if (this._startPromise) return this._startPromise;\n if (this._started) return;\n\n console.info('[config] Starting configuration...');\n\n this._startPromise = this.graphql.ready()\n .then(() => this.loadOrRestoreLocally())\n .then((data) => {\n this._started = true;\n this._startPromise = undefined;\n this.$data.next(data);\n return data;\n })\n .catch((err) => {\n console.error(err && err.message || err, err);\n this._started = false;\n this._startPromise = undefined;\n return null;\n });\n return this._startPromise;\n\n }\n\n async stop(): Promise<void> {\n this._subscription.unsubscribe();\n this._subscription = new Subscription();\n this._started = false;\n this._startPromise = undefined;\n }\n\n async restart(): Promise<Configuration> {\n if (this.started) await this.stop();\n return this.start();\n }\n\n ready(): Promise<Configuration> {\n if (this._started) return Promise.resolve(this.$data.value);\n if (this._startPromise) return this._startPromise;\n return this.start();\n }\n\n async loadDefault(\n opts?: EntityServiceLoadOptions): Promise<Configuration> {\n const now = Date.now();\n console.debug('[config] Loading Pod configuration...');\n\n const query = opts && opts.query || LoadQuery;\n const variables = opts && opts.variables || undefined;\n const res = await this.graphql.query<{ data: any }>({\n query,\n variables,\n error: {code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR'},\n fetchPolicy: opts && opts.fetchPolicy || undefined/*default*/\n });\n\n const data = res && res.data ? Configuration.fromObject(res.data) : undefined;\n console.info(`[config] Pod configuration loaded in ${Date.now() - now}ms:`, data);\n return data;\n }\n\n async load(\n id: number,\n opts?: EntityServiceLoadOptions & { query?: any }): Promise<Configuration> {\n console.warn('[config] Invalid call of configService.load(id). Please use loadDefault() instead');\n\n return this.loadDefault();\n }\n\n /**\n * Save a configuration\n *\n * @param config\n */\n async save(config: Configuration): Promise<Configuration> {\n\n console.debug('[config] Saving Pod configuration...', config);\n\n const json = config.asObject();\n\n // Execute mutation\n const res = await this.graphql.mutate<{ data: any }>({\n mutation: SaveMutation,\n variables: {\n data: json\n },\n error: {\n code: ErrorCodes.SAVE_CONFIG_ERROR,\n message: 'ERROR.SAVE_CONFIG_ERROR'\n }\n });\n\n const savedConfig = res && res.data;\n\n // Copy update properties\n config.id = savedConfig && savedConfig.id || config.id;\n config.updateDate = savedConfig && savedConfig.updateDate || config.updateDate;\n\n console.debug('[config] Pod configuration saved!');\n\n const reloadedConfig = await this.loadDefault({fetchPolicy: 'network-only'});\n\n // If this is the default config\n const defaultConfig = this.$data.value;\n if (isNotNil(defaultConfig) && reloadedConfig.label === defaultConfig.label) {\n\n // Emit update event when is default config\n this.$data.next(reloadedConfig);\n }\n\n return reloadedConfig;\n }\n\n async getCacheStatistics(): Promise<string> {\n\n const now = Date.now();\n console.debug('[config] Loading server cache statistics...');\n\n const res = await this.graphql.query<{ cacheStatistics: any }>({\n query: CacheStatistics,\n variables: null,\n error: {code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR'},\n fetchPolicy: 'network-only'\n });\n\n const data = res && res.cacheStatistics || undefined;\n console.info(`[config] Server cache statistics loaded in ${Date.now() - now}ms:`, data);\n return data;\n }\n\n async clearCache(opts?: {cacheName?: string}) {\n const now = Date.now();\n console.debug('[config] Clear server cache...');\n\n const variables = {name: opts && opts.cacheName} || undefined;\n\n const res = await this.graphql.query<{ clearCache: boolean }>({\n query: ClearCache,\n variables,\n error: {code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR'},\n fetchPolicy: 'network-only'\n });\n\n const data = res && res.clearCache || undefined;\n console.info(`[config] Clear server cache in ${Date.now() - now}ms:`, data);\n return data;\n }\n\n delete(data: Configuration, options?: any): Promise<any> {\n throw new Error('Not implemented yet!');\n }\n\n listenChanges(id: number, options?: any): Observable<Configuration | undefined> {\n return new Subject(); // TODO\n }\n\n get optionDefs(): FormFieldDefinition[] {\n return this._optionDefs;\n }\n\n /* -- protected method -- */\n\n private async loadOrRestoreLocally(): Promise<Configuration> {\n let data;\n let wasJustLoaded = false;\n try {\n data = await this.loadDefault({ fetchPolicy: 'network-only' });\n wasJustLoaded = true;\n } catch (err) {\n // Log, then continue\n console.error(err && err.message || err, err);\n }\n\n // Save it into local storage, for next startup\n if (data) {\n setTimeout(() => this.storeLocally(data), 1000);\n }\n\n // If not loaded remotely: try to restore it\n else {\n data = await this.restoreLocally();\n }\n\n // Make sure label has been filled\n data.label = data.label || this.environment.name;\n\n // Reset name (if same as label)\n data.name = (data.name !== data.label) ? data.name : undefined;\n\n // Check compatible version\n if (wasJustLoaded) {\n // TODO\n }\n\n return data;\n }\n\n private async restoreLocally(): Promise<Configuration> {\n let data: Configuration;\n\n // Try to load from local storage\n const value: any = await this.storage.get(CONFIGURATION_STORAGE_KEY);\n if (value) {\n console.debug('[config] Restoring configuration from local storage...');\n if (typeof value === 'string') {\n try {\n data = Configuration.fromObject(JSON.parse(value));\n } catch (err) {\n console.error(`Failed to parse config found in local storage: ${err && err.message || err}`, err);\n }\n }\n else if (typeof value === 'object') {\n data = Configuration.fromObject(value);\n }\n\n console.debug('[config] Restoring configuration [OK]');\n }\n\n // Or load default value, from the environment\n if (!data) {\n console.debug('[config] No configuration found. Using environment...');\n data = Configuration.fromObject(this.environment as any);\n }\n\n return data;\n }\n\n private async storeLocally(data?: Configuration) {\n // Nothing to store : reset\n if (!data) {\n await this.storage.remove(CONFIGURATION_STORAGE_KEY);\n }\n // Config exists: store it in the local storage\n else {\n let now = this._debug && Date.now();\n\n // Convert images, for offline usage\n if (this.network.online && this.platform.is('mobile')) {\n const jobs = [];\n\n // Download logos\n if (data.largeLogo && data.largeLogo.startsWith('http')) {\n jobs.push(this.file.getImage(data.largeLogo)\n .then(imgUrl => data.largeLogo = imgUrl));\n }\n if (data.smallLogo && data.smallLogo.startsWith('http')) {\n jobs.push(this.file.getImage(data.smallLogo)\n .then(imgUrl => data.smallLogo = imgUrl));\n }\n\n // Background images\n if (isNotEmptyArray(data.backgroundImages)) {\n const options = {\n maxWidth: this.platform.width(),\n maxHeight: this.platform.height()\n };\n\n // Convert the FIRST image found\n // WARN: it's NOT necessary to convert AL image, but only one, for smaller memory footprint\n const index = data.backgroundImages.findIndex((img) => img && img.startsWith('http'));\n if (index !== -1) {\n data.backgroundImages = data.backgroundImages.slice(); // Copy\n jobs.push(\n this.file.getImage(data.backgroundImages[index], options)\n .then(dataUrl => data.backgroundImages[index] = dataUrl));\n }\n }\n\n // Partners\n if (isNotEmptyArray(data.partners)) {\n data.partners.forEach((dep, index) => {\n if (dep && dep.logo && dep.logo.startsWith('http')) {\n jobs.push(this.file.getImage(dep.logo, {\n maxHeight: 50/*see home page CSS */\n })\n .then(img => dep.logo = img)\n .catch(err => {\n console.error(err && err.message || err);\n delete dep.logo;\n }));\n }\n });\n }\n\n if (jobs.length) {\n if (this._debug) console.debug(`[config] Fetching ${jobs.length} images...`);\n try {\n await Promise.all(jobs);\n if (this._debug) console.debug(`[config] Fetching ${jobs.length} images [OK] in ${Date.now() - now}ms`);\n }\n catch (err) {\n console.error(`[config] Failed to fetch image(s): ${err && err.message || err}`, err);\n }\n }\n }\n\n // Saving config to storage\n {\n now = this._debug && Date.now();\n if (this._debug) console.debug('[config] Saving config into local storage...');\n await this.storage.set(CONFIGURATION_STORAGE_KEY, data.asObject());\n if (this._debug) console.debug(`[config] Saving config into local storage [OK] in ${Date.now() - now}ms`);\n }\n }\n }\n\n protected async showToast(opts: ShowToastOptions) {\n await Toasts.show(this.toastController, this.translate, opts);\n }\n}\n","import {Inject, Injectable, Optional} from '@angular/core';\nimport {Platform, ToastController} from '@ionic/angular';\nimport {AuthTokenType, NetworkService} from './network.service';\nimport {Platforms} from '@ionic/core';\nimport {SplashScreen} from '@ionic-native/splash-screen/ngx';\nimport {StatusBar} from '@ionic-native/status-bar/ngx';\nimport {Keyboard} from '@ionic-native/keyboard/ngx';\nimport {LocalSettingsService} from './local-settings.service';\nimport {CacheService} from 'ionic-cache';\nimport {AudioProvider} from '../../shared/audio/audio';\nimport {Platform as CdkPlatform} from '@angular/cdk/platform';\n\nimport {InAppBrowser} from '@ionic-native/in-app-browser/ngx';\nimport {isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank} from '../../shared/functions';\nimport {Storage} from '@ionic/storage';\nimport {EntitiesStorage} from './storage/entities-storage.service';\nimport {StorageUtils} from '../../shared/services/storage.utils';\nimport {ShowToastOptions, Toasts} from '../../shared/toasts';\nimport {TranslateService} from '@ngx-translate/core';\nimport * as momentImported from 'moment';\nimport {AccountService} from './account.service';\nimport {timer} from 'rxjs';\nimport {distinctUntilChanged, filter, first, map} from 'rxjs/operators';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {ConfigService} from './config.service';\nimport {CORE_CONFIG_OPTIONS} from './config/core.config';\nimport {MomentDateAdapter} from '@angular/material-moment-adapter';\nimport {Downloader, DownloadRequest, NotificationVisibility} from '@ionic-native/downloader/ngx';\n\nconst moment = momentImported;\n\n@Injectable({providedIn: 'root'})\nexport class PlatformService {\n\n private readonly _debug: boolean;\n private _started = false;\n private _startPromise: Promise<void>;\n private _mobile: boolean;\n private _cordova: boolean;\n private _android: boolean;\n\n touchUi: boolean;\n\n get started(): boolean {\n return this._started;\n }\n\n get mobile(): boolean {\n return isNotNil(this._mobile) ? this._mobile : this.platform.is('mobile');\n }\n\n constructor(\n private platform: Platform,\n private cdkPlatform: CdkPlatform,\n private toastController: ToastController,\n private translate: TranslateService,\n private dateAdapter: MomentDateAdapter,\n private entitiesStorage: EntitiesStorage,\n private settings: LocalSettingsService,\n private networkService: NetworkService,\n private accountService: AccountService,\n private configService: ConfigService,\n private cache: CacheService,\n private storage: Storage,\n private audioProvider: AudioProvider,\n @Inject(ENVIRONMENT) protected environment,\n @Optional() private statusBar: StatusBar,\n @Optional() private keyboard: Keyboard,\n @Optional() private splashScreen: SplashScreen,\n @Optional() private browser: InAppBrowser,\n @Optional() private downloader: Downloader,\n ) {\n\n this._debug = !environment.production;\n if (this._debug) console.debug('[platform] Creating service');\n\n this.start();\n }\n\n is(platformName: Platforms): boolean {\n return this.platform.is(platformName);\n }\n\n /**\n * Say if opened has been opened from a web browser (and NOT inside an Android or iOs App).\n * This is used to known if there is cordova features\n */\n isWebOrDesktop(): boolean {\n return !this.platform.is('mobile') || this.platform.is('mobileweb');\n }\n\n isAndroidCordova(): boolean {\n return this._android && this._cordova;\n }\n\n get canDownload(): boolean {\n return this._android && !!this.downloader;\n }\n\n width(): number {\n return this.platform.width();\n }\n\n height(): number {\n return this.platform.height();\n }\n\n start(): Promise<void> {\n if (this._startPromise) return this._startPromise;\n if (this._started) return Promise.resolve();\n\n this._started = false;\n const now = Date.now();\n this.accountService.tokenType = undefined;\n console.info('[platform] Starting platform...');\n\n this._startPromise = this.platform.ready()\n .then(() => {\n\n this._mobile = this.platform.is('mobile');\n this._cordova = this.platform.is('cordova');\n this._android = this.platform.is('android');\n\n this.configureCordovaPlugins(this._mobile);\n this.touchUi = this._mobile || this.platform.is('tablet') || this.platform.is('phablet');\n\n // Force mobile in settings\n if (this._mobile) {\n this.settings.mobile = this._mobile;\n this.settings.touchUi = this.touchUi;\n }\n\n this.configureTranslate();\n })\n .then(() => this.storageReady())\n .then((forage) => this.migrateStorage(forage))\n .then(() => Promise.all([\n this.entitiesStorage.ready(),\n this.cache.ready().then(() => this.configureCache()),\n this.settings.ready(),\n this.networkService.ready(),\n this.audioProvider.ready()\n ]))\n .then(() => {\n this._started = true;\n this._startPromise = undefined;\n console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi}, canDownload: ${this.canDownload}} in ${Date.now() - now}ms`);\n\n // Update cache configuration when network changed\n this.networkService.onNetworkStatusChanges.subscribe((type) => this.configureCache(type !== 'none'));\n\n // Update authentication type\n this.configService.config\n .pipe(\n map(config => config?.getProperty(CORE_CONFIG_OPTIONS.AUTH_TOKEN_TYPE) as AuthTokenType),\n filter(isNotNilOrBlank),\n distinctUntilChanged()\n )\n .subscribe(tokenType => {\n console.info(`[platform] Using auth token type {${tokenType}}`);\n this.accountService.tokenType = tokenType;\n });\n\n // Wait 1 more seconds, before hiding the splash screen\n setTimeout(() => {\n if (this.splashScreen) this.splashScreen.hide();\n\n // Play startup sound\n this.audioProvider.playStartupSound();\n }, 1000);\n })\n // Manage error\n .catch(err => this.onStartupError(err));\n return this._startPromise;\n }\n\n /**\n * Wait platform is ready.<br/>\n * Important: this will NOT start the platform, has it should be started by the AppComponent\n *\n * @param opts\n */\n ready(opts?: {\n checkPeriod: number;\n }): Promise<any> {\n const period = opts && opts.checkPeriod || 300;\n if (this._started) return Promise.resolve();\n return timer(period, period)\n .pipe(\n // For DEBUG :\n //tap(() => this._debug && console.debug(\"Waiting platform ready...\")),\n filter(() => this._started),\n first()\n ).toPromise();\n }\n\n open(url: string, target?: string, features?: string, replace?: boolean) {\n console.info(`[platform] Opening link: ${url}`);\n if (this.browser && this._mobile) {\n this.browser.create(url, target, features).show();\n }\n else {\n window.open(url, target, features, replace);\n }\n }\n\n async download(request: {uri: string; filename?: string } & Partial<DownloadRequest> ): Promise<string> {\n if (!request || !request.uri) throw new Error('Missing argument \\'request\\' or \\'request.uri\\'');\n if (this._android && this.downloader) {\n request = {\n visibleInDownloadsUi: true,\n notificationVisibility: NotificationVisibility.VisibleNotifyCompleted,\n ...request,\n /*destinationInExternalFilesDir: {\n dirType: 'Downloads',\n subPath: request.filename || request.title || '',\n ...request.destinationInExternalFilesDir\n }*/\n };\n\n try {\n console.debug('[platform] Downloading, using request: ' + JSON.stringify(request));\n\n const location = await this.downloader.download(request);\n\n console.info('[platform] File successfully downloaded at:' + location);\n return location;\n }\n catch(err) {\n console.error('[platform] Unable to download: ' + (err && err.message || err));\n throw err;\n }\n }\n // Fallback (no Cordova)\n // Web mode: open URI using the browser\n // TODO: find a way to download under iOS (see https://www.c-sharpcorner.com/article/how-to-download-a-file-using-file-transfer-plugin-in-ionic-3/)\n else {\n console.warn('[platform] Cannot use Cordova downloader: using browser open()');\n this.open(request.uri, '_system', 'location=no', true);\n return undefined;\n }\n }\n\n /* -- protected methods -- */\n\n protected configureCordovaPlugins(mobile: boolean) {\n console.info('[platform] Configuring Cordova plugins...');\n\n if (this.statusBar) {\n this.statusBar.styleDefault();\n this.statusBar.overlaysWebView(false);\n }\n if (this.keyboard) {\n this.keyboard.hideFormAccessoryBar(true);\n }\n\n // Force to use InAppBrowser instead of default window.open()\n if (this.browser) {\n // FIXME: this create a infinite loop (e.g. when downloading an extraction file)\n // window.open = (url?: string, target?: string, features?: string, replace?: boolean) => {\n // console.debug(\"[platform] Call to window.open() redirected to InAppBrowser.open()\");\n // this.browser.create(url, target, features).show();\n // return window;\n // };\n }\n }\n\n\n protected configureTranslate() {\n console.info('[platform] Configuring i18n ...');\n\n // this language will be used as a fallback when a translation isn't found in the current language\n this.translate.setDefaultLang(this.environment.defaultLocale);\n\n // When locale changes, apply to date adapter\n this.translate.onLangChange.subscribe(event => {\n if (event && event.lang) {\n\n // force 'en' as 'en_GB'\n if (event.lang === 'en') {\n event.lang = 'en_GB';\n }\n\n // config moment lib\n try {\n moment.locale(event.lang);\n console.debug('[platform] Use locale {' + event.lang + '}');\n }\n // If error, fallback to en\n catch (err) {\n moment.locale('en');\n console.warn('[platform] Unknown local for moment lib. Using default [en]');\n }\n\n // Config date adapter\n this.dateAdapter.setLocale(moment.locale());\n }\n });\n\n this.settings.onChange.subscribe(data => {\n if (data && data.locale && data.locale !== this.translate.currentLang) {\n this.translate.use(data.locale);\n }\n });\n\n // Use account's locale, when account inheritance enabled in settings\n this.accountService.onLogin.subscribe(account => {\n if (this.settings.settings.accountInheritance) {\n const accountLocale = account.settings && account.settings.locale;\n if (accountLocale && accountLocale !== this.settings.locale) {\n this.settings.apply({\n locale: accountLocale\n });\n }\n }\n });\n }\n\n protected configureCache(online?: boolean) {\n online = isNotNil(online) ? online : this.cache.isOnline();\n const cacheTTL = online ? 3600 /* 1h */ : 3600 * 24 * 30; /* 1 month */\n console.info(`[platform] Configuring cache [OK] {online: ${online}}, {timeToLive: ${cacheTTL / 3600}h}, {offlineInvalidate: false}`);\n this.cache.setDefaultTTL(cacheTTL);\n this.cache.setOfflineInvalidate(false); // Do not invalidate cache when offline\n }\n\n protected async storageReady(): Promise<LocalForage> {\n\n console.info(`[platform] Starting storage...`);\n const forage = await this.storage.ready();\n const driver = forage.driver();\n\n if (isNil(driver)) {\n console.error('[platform] NO DRIVER DEFINED IN STORAGE. Local storage cannot be used !');\n return Promise.resolve(forage);\n }\n\n console.info(`[platform] Starting storage [OK] {name: '${forage.config().name}', driver: '${forage.driver()}', size: ${forage.config().size}`);\n console.debug(`[platform] Storage supports: {${forage.WEBSQL}: ${forage.supports(forage.WEBSQL)}, ${forage.INDEXEDDB}: ${forage.supports(forage.INDEXEDDB)}, ${forage.LOCALSTORAGE}: ${forage.supports(forage.LOCALSTORAGE)}}`);\n\n return forage;\n }\n\n protected async migrateStorage(forage: LocalForage) {\n const canMigrate = forage &&\n ((forage.driver() === 'cordovaSQLiteDriver' && (forage.supports(forage.INDEXEDDB) || forage.supports(forage.WEBSQL))) ||\n (forage.driver() === forage.WEBSQL && forage.supports(forage.INDEXEDDB)));\n\n if (!canMigrate) return; // Skip\n\n const oldForage = forage.createInstance({\n name: forage.config().name,\n storeName: forage.config().storeName,\n driver: [forage.INDEXEDDB, forage.WEBSQL]\n });\n\n const keys = await oldForage.keys();\n\n // No data in the odl storage: skip migration\n if (isEmptyArray(keys)) {\n // Drop the old instance (not need anymore)\n console.debug(`[platform] Old storage is empty: dropping unused instance {name: '${forage.config().name}', driver: '${oldForage.driver()}'}`);\n await oldForage.dropInstance();\n }\n // IF some data stored in the OLD storage: start migration\n else {\n\n const now = Date.now();\n console.info(`[platform] Starting storage migration...`);\n\n const toast = await this.showToast({message: 'INFO.DATA_MIGRATION_STARTED',\n duration: 30000});\n try {\n await StorageUtils.copy(oldForage, forage, {keys, deleteAfterCopy: false});\n\n const duration = Date.now() - now;\n setTimeout(() => toast.dismiss(), Math.max(2000 - duration, 0));\n await this.showToast({message: 'INFO.DATA_MIGRATION_SUCCEED',\n type: 'info',\n showCloseButton: true\n });\n console.info('[platform] Starting storage migration [OK]');\n\n // Drop the old instance\n console.info(`[platform] Drop old storage {name: '${forage.config().name}', driver: '${oldForage.driver()}'}`);\n await oldForage.dropInstance();\n }\n catch (err) {\n console.error(err && err.message || err, err);\n await toast.dismiss();\n await this.showToast({message: 'ERROR.DATA_MIGRATION_FAILED',\n type: 'error',\n showCloseButton: true\n });\n }\n }\n }\n\n protected showToast(opts: ShowToastOptions): Promise<HTMLIonToastElement> {\n if (!this.toastController) throw new Error('Missing toastController in component\\'s constructor');\n return new Promise(resolve => Toasts.show(this.toastController, this.translate, {\n ...opts,\n onWillPresent: (t) => resolve(t)\n }));\n }\n\n protected async onStartupError(err) {\n console.error('[platform] Failed starting the platform! ', err);\n let message = err && err.message || err;\n const detailsMessage = err && (err.details && err.details.message || err.details);\n // Set specific error when Firefox is in private mode or history never remembered (see Mantis Ifremer #56441)\n if (err.code === 11 && this.cdkPlatform.FIREFOX) {\n message = 'ERROR.FIREFOX_NO_STORAGE';\n }\n if (this.translate) {\n message = await this.translate.get(message).toPromise();\n if (err && err.code) {\n message += ` {code: ${err.code}}`;\n }\n }\n else {\n message = `Fatal error: Please contact your administrator.\\n\\n{code: ${err && err.code || 'null'}, message: \"${message}\"}`;\n }\n if (this.toastController) {\n if (detailsMessage) {\n message += `<br/><small>${detailsMessage}</small>`;\n }\n await this.showToast({\n type: 'error',\n duration: -1,\n showCloseButton: true,\n message\n });\n }\n else if (window) {\n if (detailsMessage) {\n message += `\\n\\n{cause: \"${detailsMessage}\"}`;\n }\n window.alert(message);\n }\n else {\n console.error(message);\n if (err && err.details) console.error('cause', err.details);\n }\n }\n}\n\n","import {ChangeDetectorRef, Component, Injector, Input} from '@angular/core';\nimport {ModalController} from '@ionic/angular';\nimport {PlatformService} from '../../core/services/platform.service';\nimport {LocalSettingsService} from '../../core/services/local-settings.service';\nimport {TranslateService} from '@ngx-translate/core';\n\n@Component({\n selector: 'app-help-modal',\n templateUrl: './help.modal.html'\n})\nexport class AppHelpModal {\n\n readonly debug: boolean;\n loading = true;\n error: string = undefined;\n\n @Input() title: string;\n @Input() markdownContent: string;\n @Input() docUrl: string;\n\n @Input()\n showError = true;\n\n constructor(\n protected injector: Injector,\n protected viewCtrl: ModalController,\n protected platform: PlatformService,\n protected settings: LocalSettingsService,\n protected translate: TranslateService,\n protected cd: ChangeDetectorRef\n ) {\n // TODO: for DEV only\n //this.debug = !environment.production;\n }\n\n async close(event?: UIEvent) {\n await this.viewCtrl.dismiss();\n }\n\n markAsLoaded() {\n this.loading = false;\n this.error = null;\n }\n\n onLoadError(error?: string) {\n console.error(error);\n\n this.error = error;\n this.loading = false;\n }\n\n\n}\n","import {MatStepperIntl} from '@angular/material/stepper';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Injectable} from '@angular/core';\n\n@Injectable({providedIn: 'root'})\nexport class MatStepperI18n extends MatStepperIntl {\n\n constructor(private translate: TranslateService) {\n super();\n translate.onLangChange.subscribe(() => this.translateLabels());\n\n this.translateLabels();\n }\n\n private translateLabels() {\n this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');\n }\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SharedMaterialModule} from './material/material.module';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {IonicModule} from '@ionic/angular';\nimport {DateFormatPipe} from './pipes/date-format.pipe';\nimport {DateFromNowPipe} from './pipes/date-from-now.pipe';\nimport {ToolbarComponent} from './toolbar/toolbar';\nimport {TextMaskModule} from 'angular2-text-mask';\nimport {MatPaginatorIntl} from '@angular/material/paginator';\nimport {MatPaginatorI18n} from './material/paginator/material.paginator-i18n';\nimport {ProgressBarService} from './services/progress-bar.service';\nimport {HTTP_INTERCEPTORS} from '@angular/common/http';\nimport {ProgressInterceptor} from './interceptors/progess.interceptor';\nimport {ColorPickerModule} from 'ngx-color-picker';\nimport {AppFormField} from './form/field.component';\nimport {AudioProvider} from './audio/audio';\nimport {CloseScrollStrategy, FullscreenOverlayContainer, Overlay, OverlayContainer} from '@angular/cdk/overlay';\nimport {SharedHotkeysModule} from './hotkeys/shared-hotkeys.module';\nimport {FileService} from './file/file.service';\nimport {ModalToolbarComponent} from './toolbar/modal-toolbar';\nimport {DragDropModule} from '@angular/cdk/drag-drop';\nimport {MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, MAT_AUTOCOMPLETE_SCROLL_STRATEGY} from '@angular/material/autocomplete';\nimport {MAT_SELECT_SCROLL_STRATEGY} from '@angular/material/select';\nimport {SharedDirectivesModule} from './directives/directives.module';\nimport {SharedPipesModule} from './pipes/pipes.module';\nimport {AppLoadingSpinner} from './form/loading-spinner';\nimport {DateDiffDurationPipe} from './pipes/date-diff-duration.pipe';\nimport {LatitudeFormatPipe, LatLongFormatPipe, LongitudeFormatPipe} from './pipes/latlong-format.pipe';\nimport {HighlightPipe} from './pipes/highlight.pipe';\nimport {NumberFormatPipe} from './pipes/number-format.pipe';\nimport {MarkdownModule} from 'ngx-markdown';\nimport {AppHelpModal} from './help/help.modal';\nimport {Environment, ENVIRONMENT} from '../../environments/environment.class';\nimport {TranslateContextService} from './services/translate-context.service';\nimport {MatStepperIntl} from '@angular/material/stepper';\nimport {MatStepperI18n} from './material/stepper/material.stepper-i18n';\n\n\nexport function scrollFactory(overlay: Overlay): () => CloseScrollStrategy {\n return () => overlay.scrollStrategies.close();\n}\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n ReactiveFormsModule,\n TranslateModule,\n ColorPickerModule,\n TextMaskModule,\n DragDropModule,\n MarkdownModule,\n\n // Sub modules\n SharedMaterialModule,\n SharedDirectivesModule,\n SharedPipesModule,\n SharedHotkeysModule\n ],\n declarations: [\n ToolbarComponent,\n ModalToolbarComponent,\n AppFormField,\n AppLoadingSpinner,\n AppHelpModal\n ],\n exports: [\n CommonModule,\n IonicModule,\n TranslateModule,\n ReactiveFormsModule,\n ColorPickerModule,\n TextMaskModule,\n DragDropModule,\n MarkdownModule,\n\n // Sub-modules\n SharedMaterialModule,\n SharedDirectivesModule,\n SharedPipesModule,\n SharedHotkeysModule,\n\n // Components\n ToolbarComponent,\n ModalToolbarComponent,\n AppFormField,\n AppLoadingSpinner,\n AppHelpModal\n ]\n})\nexport class SharedModule {\n\n static forRoot(environment: Environment): ModuleWithProviders<SharedModule> {\n console.debug('[shared] Creating module (root)');\n\n return {\n ngModule: SharedModule,\n providers: [\n\n { provide: ENVIRONMENT, useValue: environment },\n\n ProgressBarService,\n AudioProvider,\n FileService,\n TranslateContextService,\n\n // Export Pipes as providers\n DateFormatPipe,\n DateFromNowPipe,\n DateDiffDurationPipe,\n LatLongFormatPipe,\n LatitudeFormatPipe,\n LongitudeFormatPipe,\n HighlightPipe,\n NumberFormatPipe,\n\n { provide: OverlayContainer, useClass: FullscreenOverlayContainer },\n { provide: HTTP_INTERCEPTORS, useClass: ProgressInterceptor, multi: true, deps: [ProgressBarService] },\n { provide: MatPaginatorIntl, useClass: MatPaginatorI18n, deps: [TranslateService] },\n { provide: MatStepperIntl, useClass: MatStepperI18n, deps: [TranslateService] },\n\n // FIXME: try to force a custom overlay for autocomplete, because of there is a bug when using inside an ionic modal\n //{ provide: Overlay, useClass: Overlay},\n { provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY, useFactory: scrollFactory, deps: [Overlay] },\n { provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, useValue: {\n autoActiveFirstOption: true\n }\n },\n { provide: MAT_SELECT_SCROLL_STRATEGY, useFactory: scrollFactory, deps: [Overlay] }\n ]\n };\n }\n}\n","import { AlertController } from '@ionic/angular';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport class Alerts {\n\n /**\n * Ask the user to save before leaving. If return undefined: user has cancelled\n *\n * @param alertCtrl\n * @param translate\n * @param event\n * @deprecated prefer ComponentDirtyGuard\n */\n static async askSaveBeforeLeave(\n alertCtrl: AlertController,\n translate: TranslateService,\n event?: UIEvent): Promise<boolean|undefined> {\n let confirm = false;\n let cancel = false;\n const translations = translate.instant(['COMMON.BTN_SAVE', 'COMMON.BTN_CANCEL', 'COMMON.BTN_ABORT_CHANGES', 'CONFIRM.SAVE', 'CONFIRM.ALERT_HEADER']);\n const alert = await alertCtrl.create({\n header: translations['CONFIRM.ALERT_HEADER'],\n message: translations['CONFIRM.SAVE'],\n buttons: [\n {\n text: translations['COMMON.BTN_CANCEL'],\n role: 'cancel',\n cssClass: 'secondary',\n handler: () => {\n cancel = true;\n }\n },\n {\n text: translations['COMMON.BTN_ABORT_CHANGES'],\n cssClass: 'secondary',\n handler: () => {\n }\n },\n {\n text: translations['COMMON.BTN_SAVE'],\n handler: () => {\n confirm = true; // update upper value\n }\n }\n ]\n });\n await alert.present();\n await alert.onDidDismiss();\n\n if (confirm) return true; // = Do save and leave\n\n if (cancel) {\n // Stop the event\n if (event) event.preventDefault();\n\n return undefined; // User cancelled\n }\n\n return false; // Leave without saving\n }\n\n /**\n * Ask the user to conform an action. If return undefined: user has cancelled\n *\n * @param alertCtrl\n * @param translate\n * @param immediate is action has an immediate effect ?\n * @param event\n * @param interpolateParams\n */\n static async askActionConfirmation(\n alertCtrl: AlertController,\n translate: TranslateService,\n immediate?: boolean,\n event?: UIEvent,\n interpolateParams?: any): Promise<boolean|undefined> {\n const messageKey = immediate === true ? 'CONFIRM.ACTION_IMMEDIATE' : 'CONFIRM.ACTION';\n return Alerts.askConfirmation(messageKey, alertCtrl, translate, event, interpolateParams);\n }\n\n\n\n /**\n * Ask the user to confirm. If return undefined: user has cancelled\n *\n * @pram messageKey i18n message key\n * @param messageKey\n * @param alertCtrl\n * @param translate\n * @param event\n * @param interpolateParams\n */\n static async askConfirmation(\n messageKey: string,\n alertCtrl: AlertController,\n translate: TranslateService,\n event?: UIEvent,\n interpolateParams?: any): Promise<boolean|undefined> {\n if (!alertCtrl || !translate) throw new Error('Missing required argument \\'alertCtrl\\' or \\'translate\\'');\n let confirm = false;\n let cancel = false;\n const translations = translate.instant(['COMMON.BTN_YES_CONTINUE', 'COMMON.BTN_CANCEL', messageKey, 'CONFIRM.ALERT_HEADER'], interpolateParams);\n const alert = await alertCtrl.create({\n header: translations['CONFIRM.ALERT_HEADER'],\n message: translations[messageKey],\n buttons: [\n {\n text: translations['COMMON.BTN_CANCEL'],\n role: 'cancel',\n cssClass: 'secondary',\n handler: () => {\n cancel = true;\n }\n },\n {\n text: translations['COMMON.BTN_YES_CONTINUE'],\n handler: () => {\n confirm = true; // update upper value\n }\n }\n ]\n });\n await alert.present();\n await alert.onDidDismiss();\n\n if (confirm) return true; // = Do save and leave\n\n if (cancel) {\n // Stop the event\n if (event) event.preventDefault();\n\n return undefined; // User cancelled\n }\n\n return false; // Leave without saving\n }\n\n\n /**\n * Ask the user to save before leaving. If return undefined: user has cancelled\n *\n * @param alertCtrl\n * @param translate\n * @param event\n * @param interpolateParams\n */\n static async askDeleteConfirmation(\n alertCtrl: AlertController,\n translate: TranslateService,\n event?: UIEvent,\n interpolateParams?: any): Promise<boolean|undefined> {\n let confirm = false;\n let cancel = false;\n const translations = translate.instant(['COMMON.BTN_YES_DELETE', 'COMMON.BTN_CANCEL', 'CONFIRM.DELETE', 'CONFIRM.ALERT_HEADER'], interpolateParams);\n const alert = await alertCtrl.create({\n header: translations['CONFIRM.ALERT_HEADER'],\n message: translations['CONFIRM.DELETE'],\n buttons: [\n {\n text: translations['COMMON.BTN_CANCEL'],\n role: 'cancel',\n cssClass: 'secondary',\n handler: () => {\n cancel = true;\n }\n },\n {\n text: translations['COMMON.BTN_YES_DELETE'],\n handler: () => {\n confirm = true; // update upper value\n }\n }\n ]\n });\n await alert.present();\n await alert.onDidDismiss();\n\n if (confirm) return true; // = Do save and leave\n\n if (cancel) {\n // Stop the event\n if (event) event.preventDefault();\n\n return undefined; // User cancelled\n }\n\n return false; // Leave without saving\n }\n\n\n static async askSaveBeforeAction(alertCtrl: AlertController,\n translate: TranslateService,\n event?: { valid: boolean },\n interpolateParams?: any): Promise<{ confirmed: boolean; save: boolean } | undefined> {\n\n let save = false;\n let confirm = false;\n let alert: HTMLIonAlertElement;\n\n // Ask user before save\n if (event && event.valid) {\n const translations = translate.instant(['COMMON.BTN_CANCEL', 'COMMON.BTN_SAVE', 'COMMON.BTN_ABORT_CHANGES',\n 'CONFIRM.SAVE_BEFORE_CONTINUE', 'CONFIRM.ALERT_HEADER'], interpolateParams);\n alert = await alertCtrl.create({\n header: translations['CONFIRM.ALERT_HEADER'],\n message: translations['CONFIRM.SAVE_BEFORE_CONTINUE'],\n buttons: [\n {\n text: translations['COMMON.BTN_CANCEL'],\n role: 'cancel',\n cssClass: 'secondary',\n handler: () => {\n }\n },\n {\n text: translations['COMMON.BTN_ABORT_CHANGES'],\n cssClass: 'secondary',\n handler: () => {\n confirm = true;\n }\n },\n {\n text: translations['COMMON.BTN_SAVE'],\n handler: () => {\n save = true;\n confirm = true;\n }\n }\n ]\n });\n } else {\n const translations = translate.instant(['COMMON.BTN_ABORT_CHANGES', 'COMMON.BTN_CANCEL', 'CONFIRM.CANCEL_CHANGES', 'CONFIRM.ALERT_HEADER'], interpolateParams);\n\n alert = await alertCtrl.create({\n header: translations['CONFIRM.ALERT_HEADER'],\n message: translations['CONFIRM.CANCEL_CHANGES'],\n buttons: [\n {\n text: translations['COMMON.BTN_ABORT_CHANGES'],\n cssClass: 'secondary',\n handler: () => {\n confirm = true;\n }\n },\n {\n text: translations['COMMON.BTN_CANCEL'],\n role: 'cancel',\n handler: () => {\n }\n }\n ]\n });\n }\n\n await alert.present();\n await alert.onDidDismiss();\n\n return {confirmed: confirm, save};\n }\n\n static async showError(\n messageKey: string,\n alertCtrl: AlertController,\n translate: TranslateService, opts?: {\n titleKey?: string;\n },\n interpolateParams?: any) {\n if (!messageKey || !alertCtrl || !translate) throw new Error('Missing a required argument (\\'messageKey\\', \\'alertCtrl\\' or \\'translate\\')');\n const titleKey = opts && opts.titleKey || 'ERROR.ALERT_HEADER';\n const translations = translate.instant(['COMMON.BTN_OK', messageKey, titleKey], interpolateParams);\n const alert = await alertCtrl.create({\n header: translations[titleKey],\n message: translations[messageKey],\n buttons: [\n {\n text: translations['COMMON.BTN_OK'],\n role: 'cancel'\n }\n ]\n });\n await alert.present();\n await alert.onDidDismiss();\n\n }\n\n\n}\n\n\n\n\n","import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {TranslateService} from '@ngx-translate/core';\nimport {AlertController} from '@ionic/angular';\nimport {Alerts} from '../alerts';\n\nexport interface CanLeave {\n dirty: boolean;\n valid: boolean;\n save(event?: Event, options?: any): Promise<boolean>;\n cancel(event?: Event): Promise<void>;\n}\n\n@Injectable()\nexport class ComponentDirtyGuard implements CanDeactivate<CanLeave> {\n\n private debug = false;\n\n constructor(\n protected translate: TranslateService,\n protected alertCtrl: AlertController,\n ) {\n }\n\n async canDeactivate(component: CanLeave, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot):\n Promise<boolean | UrlTree> {\n\n const dirty = component.dirty;\n const valid = component.valid;\n let can = {\n confirmed: !dirty,\n save: false,\n };\n\n if (this.debug) {\n console.debug(`[dirty-guard] canDeactivate component dirty: ${dirty}, valid: ${valid}`);\n }\n\n if (dirty) {\n // Ask confirmation\n can = await Alerts.askSaveBeforeAction(this.alertCtrl, this.translate, {valid});\n }\n\n if (this.debug) console.debug(`[dirty-guard] confirm: ${can.confirmed}`);\n\n if (can.confirmed) {\n if (can.save) {\n if (this.debug) console.debug(`[dirty-guard] do save`);\n const saved = await component.save();\n if (!saved) {\n if (this.debug) console.debug(`[dirty-guard] save failed, cancel deactivate`);\n return false;\n }\n } else {\n if (this.debug) console.debug(`[dirty-guard] do cancel`);\n if (dirty)\n component.cancel();\n }\n\n // Allow deactivate\n return true;\n }\n\n // Cancel deactivate\n return false;\n\n }\n\n\n}\n","import {Injectable, NgModule} from '@angular/core';\nimport {ActivatedRouteSnapshot, RouteReuseStrategy, RouterModule} from '@angular/router';\nimport {IonicRouteStrategy} from '@ionic/angular';\nimport {ComponentDirtyGuard} from './guard/component-dirty.guard';\n\n\n@Injectable()\nexport class CustomReuseStrategy extends IonicRouteStrategy {\n\n shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n const result = super.shouldReuseRoute(future, curr);\n\n // Force to reuse the route when:\n // - path change from [/new] -> [/:id]\n // - or path change from [/new] -> [/new?id=:id]\n if (!result && future.routeConfig && future.routeConfig === curr.routeConfig) {\n const pathIdParam = future.routeConfig.data && future.routeConfig.data.pathIdParam || 'id';\n const futureId = future.params[pathIdParam] === 'new' ?\n (future.queryParams[pathIdParam] || future.queryParams['id']) : future.params[pathIdParam];\n const currId = curr.params[pathIdParam] === 'new' ?\n (curr.queryParams[pathIdParam] || curr.queryParams['id']) : curr.params[pathIdParam];\n return futureId === currId &&\n // Always reload 'new' page\n currId !== 'new';\n }\n\n return result;\n }\n}\n\n@NgModule({\n imports: [\n RouterModule\n ],\n providers: [\n { provide: RouteReuseStrategy, useClass: CustomReuseStrategy },\n { provide: ComponentDirtyGuard, useClass: ComponentDirtyGuard }\n ]\n})\nexport class SharedRoutingModule {\n\n constructor() {\n console.debug('[shared-routing] Creating module...');\n }\n}\n","import {ObjectMap, Property} from '../types';\nimport {isNotNil} from '../functions';\nimport {InjectionToken} from '@angular/core';\nimport {MatAutocompleteFieldAddOptions} from '../material/autocomplete/material.autocomplete';\n\nexport declare type DisplayFn = (obj: any) => string;\n\nexport declare type CompareWithFn = (o1: any, o2: any) => boolean;\n\nexport declare type FormFieldType = 'integer' | 'double' | 'boolean' | 'string' | 'enum' | 'color' | 'peer' | 'entity' | 'entities' | 'date' | 'dateTime';\n\nexport declare interface FormFieldDefinition<T = any> {\n key: string;\n label: string;\n minValue?: number;\n maxValue?: number;\n maximumNumberDecimals?: number;\n defaultValue?: any;\n isTransient?: boolean; // Useful only for remote configuration\n values?: (string|Property)[] | InjectionToken<(string|Property)[]>;\n type: FormFieldType;\n autocomplete?: MatAutocompleteFieldAddOptions<T>;\n disabled?: boolean;\n required?: boolean;\n extra?: {\n [key: string]: {\n disabled?: boolean;\n required: boolean;\n };\n };\n}\nexport declare type FormFieldDefinitionMap = ObjectMap<FormFieldDefinition>;\n\n\nexport abstract class FormFieldValuesHolder {\n getAsBoolean(data: ObjectMap, definition: FormFieldDefinition): boolean {\n const value = this.get(data, definition);\n return isNotNil(value) ? (value && value !== 'false') : undefined;\n }\n\n getAsInt(data: any, definition: FormFieldDefinition): number {\n const value = this.get(data, definition);\n return isNotNil(value) ? parseInt(value) : undefined;\n }\n\n getAsNumbers(data: any, definition: FormFieldDefinition): number[] {\n const value = this.get(data, definition);\n if (typeof value === 'string') return value.split(',').map(parseFloat) || undefined;\n return isNotNil(value) ? [parseFloat(value)] : undefined;\n }\n\n getAsStrings(data: any, definition: FormFieldDefinition): string[] {\n const value = this.get(data, definition);\n return value && value.split(',') || undefined;\n }\n\n get<T = string>(data: any, definition: FormFieldDefinition): T {\n return isNotNil(data[definition.key]) ? data[definition.key] : (definition.defaultValue || undefined);\n }\n}\n","import {Observable} from 'rxjs';\nimport {FetchPolicy, WatchQueryFetchPolicy} from '@apollo/client/core';\nimport {SortDirection} from '@angular/material/sort';\nimport {Directive, OnDestroy} from '@angular/core';\nimport {EmptyObject} from 'apollo-angular/types';\n\nexport declare interface Page {\n offset: number;\n size: number;\n sortBy?: string;\n sortDirection?: SortDirection;\n}\n\nexport declare type FetchMoreFn<R, V = EmptyObject> = (variables?: V) => Promise<R>;\n\nexport declare interface LoadResult<T> {\n data: T[];\n total?: number;\n errors?: any[];\n fetchMore?: FetchMoreFn<LoadResult<T>>;\n}\n\nexport declare type SuggestFn<T, F> = (value: any, filter?: F, sortBy?: string, sortDirection?: SortDirection) => Promise<T[] | LoadResult<T>>;\n\nexport declare interface SuggestService<T, F> {\n suggest: SuggestFn<T, F>;\n}\n\nexport declare type FilterFn<T> = (data: T) => boolean;\nexport declare type FilterFnFactory<T, F> = (filter: F) => FilterFn<T>;\n\nexport declare interface EntityServiceLoadOptions {\n fetchPolicy?: FetchPolicy;\n trash?: boolean;\n toEntity?: boolean;\n [key: string]: any;\n}\n\nexport declare interface IEntityService<\n T,\n ID = any,\n LO = EntityServiceLoadOptions> {\n\n load(\n id: ID,\n opts?: LO\n ): Promise<T>;\n\n save(data: T, opts?: any): Promise<T>;\n\n delete(data: T, opts?: any): Promise<any>;\n\n listenChanges(id: ID, opts?: any): Observable<T | undefined>;\n}\n\nexport declare interface EntitiesServiceWatchOptions {\n fetchPolicy?: WatchQueryFetchPolicy;\n trash?: boolean;\n withTotal?: boolean;\n toEntity?: boolean;\n [key: string]: any;\n}\n\nexport declare interface IEntitiesService<T, F, O extends EntitiesServiceWatchOptions = EntitiesServiceWatchOptions> {\n\n watchAll(\n offset: number,\n size: number,\n sortBy?: string,\n sortDirection?: SortDirection,\n filter?: Partial<F>,\n options?: O\n ): Observable<LoadResult<T>>;\n\n // TODO\n /*watchPage(\n page: Page<T>,\n filter?: F,\n options?: O\n ): Observable<LoadResult<T>>;*/\n\n saveAll(data: T[], opts?: any): Promise<T[]>;\n\n deleteAll(data: T[], opts?: any): Promise<any>;\n\n asFilter(filter: Partial<F>): F;\n}\n\nexport declare type LoadResultByPageFn<T> = (offset: number, size: number) => Promise<LoadResult<T>>;\n\nexport interface IEntityFullService<T, ID, F, O extends EntitiesServiceWatchOptions & EntityServiceLoadOptions>\n extends IEntityService<T, ID, O>, IEntitiesService<T, F, O> {\n}\n\nexport function mergeLoadResult<T>(res1: LoadResult<T>, res2: LoadResult<T>): LoadResult<T> {\n return {\n data : (res1.data || []).concat(...res2.data),\n total: ((res1.total || res1.data?.length || 0) + (res2.total || res2.data?.length || 0))\n };\n}\n\n@Directive()\nexport abstract class EntitiesService<T, F, O extends EntitiesServiceWatchOptions = EntitiesServiceWatchOptions>\n implements IEntitiesService<T, F, O>, OnDestroy {\n\n ngOnDestroy() {\n // Can be override by subclasses\n }\n\n abstract watchAll(\n offset: number,\n size: number,\n sortBy?: string,\n sortDirection?: SortDirection,\n filter?: Partial<F>,\n options?: O\n ): Observable<LoadResult<T>>;\n\n // TODO\n /*watchPage(\n page: Page<T>,\n filter?: F,\n options?: O\n ): Observable<LoadResult<T>>;*/\n\n abstract saveAll(data: T[], options?: any): Promise<T[]>;\n\n abstract deleteAll(data: T[], options?: any): Promise<any>;\n\n abstract asFilter(filter: Partial<F>): F;\n}\n","import {isEmptyArray, isNil} from '../../../shared/functions';\nimport {MINIFY_ENTITY_FOR_POD, ReferentialUtils} from './referential.model';\nimport {Entity, EntityAsObjectOptions, IEntity, isInstanceOf} from './entity.model';\nimport {FilterFn} from '../../../shared/services/entity-service.class';\nimport {StoreObject} from '@apollo/client/core';\n\n\n\nexport interface IEntityFilter<F extends IEntityFilter<F, T, ID, AO, FO>,\n T extends IEntity<T, ID>,\n ID = number,\n AO extends EntityAsObjectOptions = EntityAsObjectOptions,\n FO = any> extends IEntity<F, ID, AO, FO> {\n\n asPodObject(): any;\n\n asFilterFn(): FilterFn<T>;\n\n isEmpty(): boolean;\n\n countNotEmptyCriteria(): number;\n}\n\nexport abstract class EntityFilter<F extends EntityFilter<F, T, ID, AO, FO>,\n T extends IEntity<T, ID>,\n ID = number,\n AO extends EntityAsObjectOptions = EntityAsObjectOptions,\n FO = any>\n extends Entity<F, ID, AO, FO>\n implements IEntityFilter<F, T, ID, AO, FO> {\n\n constructor(__typename?: string) {\n super(__typename);\n }\n\n /**\n * Clean a filter, before sending to the pod (e.g convert dates, remove internal properties, etc.)\n */\n asPodObject(): any {\n return this.asObject(MINIFY_ENTITY_FOR_POD as AO);\n }\n\n isEmpty(): boolean {\n return this.countNotEmptyCriteria() === 0;\n }\n\n countNotEmptyCriteria(): number {\n const json = this.asPodObject();\n return Object.keys(json)\n .filter(key => this.isCriteriaNotEmpty(key, json[key]))\n .length;\n }\n\n asFilterFn(): FilterFn<T> {\n const filterFns = this.buildFilter();\n if (isEmptyArray(filterFns)) return undefined;\n return (entity) => !filterFns.find(fn => !fn(entity));\n }\n\n protected buildFilter(): FilterFn<T>[] {\n // Can be completed by subclasses\n return [];\n }\n\n protected isCriteriaNotEmpty(key: string, value: any): boolean {\n // Can be overridden by subclasses\n return value !== undefined && value !== null &&\n (\n // not empty string\n (typeof value === 'string' && value.trim() !== '') ||\n // valid number\n (typeof value === 'number' && !isNaN(value)) ||\n // valid boolean\n (typeof value === 'boolean') ||\n // not empty array\n (value.length > 0) ||\n // entity with an id\n ReferentialUtils.isNotEmpty(value)\n );\n }\n}\n\nexport abstract class EntityFilterUtils {\n\n static isEntityFilter<F extends EntityFilter<F, any>>(obj: Partial<F>): obj is F {\n return obj && obj.asPodObject && obj.asFilterFn && true || false;\n }\n\n static fromObject<F>(source: any, filterType: new () => F): F {\n if (!source) return source;\n if (isInstanceOf(source, filterType)) return source as F;\n const target = new filterType();\n if (EntityFilterUtils.isEntityFilter(target)) {\n target.fromObject(source);\n } else {\n Object.assign(target, source);\n }\n return target;\n }\n}\n","import {BehaviorSubject, Observable} from 'rxjs';\nimport {filter, map, mergeMap} from 'rxjs/operators';\nimport {isEmptyArray, isNotEmptyArray, isNotNil} from '../functions';\nimport {EntitiesService, EntitiesServiceWatchOptions, FilterFn, FilterFnFactory, IEntitiesService, LoadResult} from './entity-service.class';\nimport {SortDirection} from '@angular/material/sort';\nimport {Directive, OnDestroy} from '@angular/core';\nimport {EntityUtils, IEntity} from '../../core/services/model/entity.model';\nimport {EntityFilter, EntityFilterUtils} from '../../core/services/model/filter.model';\nimport {waitFor} from '../observables';\n\nexport interface InMemoryEntitiesServiceOptions<T, F> {\n onSort?: (data: T[], sortBy?: string, sortDirection?: SortDirection) => T[];\n onLoad?: (data: T[]) => T[] | Promise<T[]>;\n onSave?: (data: T[]) => T[] | Promise<T[]>;\n equals?: (d1: T, d2: T) => boolean;\n\n filterFnFactory?: FilterFnFactory<T, F>;\n filterFn?: FilterFn<T>;\n\n sortByReplacement?: { [key: string]: string };\n}\n\n// @dynamic\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class InMemoryEntitiesService<\n T extends IEntity<T, ID>,\n F = any,\n ID = number,\n O extends EntitiesServiceWatchOptions = EntitiesServiceWatchOptions>\n extends EntitiesService<T, F, ID>\n implements IEntitiesService<T, F, O>, OnDestroy {\n\n debug = false;\n dirty = false;\n\n protected data: T[];\n private _hiddenData: T[];\n private _saving = false;\n\n private readonly _onChange = new BehaviorSubject(true);\n private readonly _sortFn: (data: T[], sortBy?: string, sortDirection?: SortDirection) => T[];\n private readonly _onLoad: (data: T[]) => T[] | Promise<T[]>;\n private readonly _onSaveFn: (data: T[]) => T[] | Promise<T[]>;\n private readonly _equalsFn: (d1: T, d2: T) => boolean;\n private readonly _filterFnFactory: FilterFnFactory<T, F>;\n private readonly _sortByReplacement: { [key: string]: string };\n\n\n set value(data: T[]) {\n this.setValue(data);\n }\n\n get value(): T[] {\n return this.data;\n }\n\n constructor(\n protected dataType: new() => T,\n protected filterType: new() => F,\n options?: InMemoryEntitiesServiceOptions<T, F>\n ) {\n super();\n options = {\n onSort: this.sort,\n ...options\n };\n\n this._sortFn = options.onSort;\n this._onLoad = options.onLoad;\n this._onSaveFn = options.onSave;\n this._equalsFn = options.equals;\n this._filterFnFactory = options.filterFnFactory || ((f) => {\n const filter = this.asFilter(f) as F;\n if (filter instanceof EntityFilter) {\n return filter.asFilterFn();\n }\n return undefined;\n });\n\n this._sortByReplacement = {\n // Detect rankOrder on the entity class\n id: (Object.getOwnPropertyNames(new dataType()).findIndex(key => key === 'rankOrder') !== -1) ? 'rankOrder' : undefined,\n ...options.sortByReplacement\n };\n }\n\n ngOnDestroy() {\n if (this.debug) console.debug('[memory-data-service] Destroying...');\n this._onChange.complete();\n this._onChange.unsubscribe();\n }\n\n setValue(data: T[], opts?: { emitEvent?: boolean }) {\n if (this.data !== data) {\n this._hiddenData = [];\n this.data = data;\n\n // Send to observers\n if (!opts || opts.emitEvent !== false) {\n this._onChange.next(true);\n }\n }\n this.dirty = false;\n }\n\n watchAll(\n offset: number,\n size: number,\n sortBy?: string,\n sortDirection?: SortDirection,\n filterData?: F,\n options?: any\n ): Observable<LoadResult<T>> {\n\n offset = offset >= 0 ? offset : 0;\n size = size >= 0 ? size : -1;\n\n if (!this.data) {\n console.warn('[memory-data-service] Waiting value to be set...');\n }\n\n return this._onChange\n .pipe(\n filter(isNotNil),\n mergeMap(_ => waitFor(() => !this._saving)),\n mergeMap(async (_) => {\n const excludedDataByFilter: T[] = [];\n let excludedDataByPagination: T[];\n\n try {\n if (isEmptyArray(this.data)) {\n return {data: [], total: 0};\n }\n\n // Apply sort\n let data = this._sortFn(this.data || [], sortBy, sortDirection) ;\n\n if (this._onLoad) {\n const promiseOrData = this._onLoad(data);\n data = ((promiseOrData instanceof Promise)) ? await promiseOrData : promiseOrData;\n }\n\n // Apply filter (will update hiddenData)\n data = this.filter(data, filterData, excludedDataByFilter);\n\n // Compute the total length\n const total = data.length;\n\n // If page size=0 (e.g. only need total)\n if (size === 0) {\n excludedDataByPagination = data;\n return {data: [], total};\n }\n\n // Slice in a page (using offset and size)\n if (offset > 0) {\n\n // Offset after the end: no result\n if (offset >= data.length) {\n excludedDataByPagination = data;\n data = [];\n }\n else {\n excludedDataByPagination = (size > 0 && ((offset + size) < data.length)) ?\n // Slice using limit to size\n data.slice(0, offset -1).concat(data.slice(offset + size)) :\n // Slice without limit\n data.slice(0, offset-1);\n data = (size > 0 && ((offset + size) < data.length)) ?\n // Slice using limit to size\n data.slice(offset, offset + size) :\n // Slice without limit\n data.slice(offset);\n }\n }\n\n // Apply a limit\n else if (size > 0){\n excludedDataByPagination = data.slice(size);\n data = data.slice(0, size);\n }\n // No limit:\n else if (size === -1){\n // Keep all data\n }\n\n // /!\\ If already observed, then always create a copy of the original array\n // Because datasource will only update if the array changed\n if (data === this.data) {\n data = data.slice();\n }\n\n return {data, total};\n }\n finally {\n // Remember hidden data\n this._hiddenData = !excludedDataByPagination ? excludedDataByFilter : excludedDataByFilter.concat(...excludedDataByPagination);\n }\n })\n );\n }\n\n async saveAll(data: T[], options?: any): Promise<T[]> {\n if (!this.data) throw new Error('[memory-service] Could not save, because value not set');\n\n this.markAsSaving();\n\n try {\n\n // Restore hidden data\n if (isNotEmptyArray(this._hiddenData))\n data = data.concat(...this._hiddenData);\n\n if (this._onSaveFn) {\n const res = this._onSaveFn(data);\n data = ((res instanceof Promise)) ? await res : res;\n }\n\n this.data = data;\n this.dirty = true;\n return this.data;\n }\n finally {\n this.markAsSaved();\n }\n }\n\n async deleteAll(dataToRemove: T[], options?: any): Promise<any> {\n if (!this.data) throw new Error('[memory-service] Could not delete, because value not set');\n\n // Remove deleted item, from data\n const updatedData = this.data.filter(entity => {\n const removed = dataToRemove.findIndex(entityToRemove => this.equals(entityToRemove, entity)) !== -1;\n return !removed;\n });\n const deleteCount = this.data.length - updatedData.length;\n if (deleteCount > 0) {\n this.data = updatedData;\n this.dirty = true;\n this._onChange.next(true);\n }\n }\n\n sort(data: T[], sortBy?: string, sortDirection?: SortDirection): T[] {\n // Replace sortBy, using the replacement map\n sortBy = sortBy && this._sortByReplacement[sortBy] || sortBy || 'id';\n\n // Execute the sort\n return EntityUtils.sort(data, sortBy, sortDirection);\n }\n\n asFilter(source: Partial<F>): F {\n return EntityFilterUtils.fromObject(source, this.filterType);\n }\n\n addSortByReplacement(source: string, target: string) {\n this._sortByReplacement[source] = target;\n }\n\n equals(d1: T, d2: T): boolean {\n if (this._equalsFn) return this._equalsFn(d1, d2);\n return d1 && d1.equals ? d1.equals(d2) : EntityUtils.equals(d1, d2, 'id');\n }\n\n /* -- protected methods -- */\n\n protected filter(data: T[], _filter: F, hiddenData: T[]): T[] {\n\n // if filter is DataFilter instance, use its test function\n const filterFn = this._filterFnFactory && this._filterFnFactory(_filter);\n if (filterFn) {\n const filteredData = [];\n\n data.forEach(value => {\n if (filterFn(value))\n filteredData.push(value);\n else\n hiddenData.push(value);\n });\n\n return filteredData;\n }\n\n // default, no filter\n return data;\n }\n\n protected connect(): Observable<LoadResult<T>> {\n return this._onChange.pipe(\n map(_ => {\n const data = this.data || [];\n const total = data.length;\n return {data, total};\n })\n );\n }\n\n\n\n protected markAsSaving() {\n this._saving = true;\n }\n\n protected markAsSaved() {\n this._saving = false;\n }\n}\n","import {BehaviorSubject, defer, Observable, Subject} from 'rxjs';\nimport {isNil, isNotNil} from '../functions';\nimport {LoadResult, LoadResultByPageFn} from './entity-service.class';\n\nexport type CallableWithProgressionFn<O extends CallableWithProgressionOptions> = (progression: BehaviorSubject<number>, opts?: O) => Promise<void>;\nexport interface CallableWithProgressionOptions {\n maxProgression?: number;\n [key: string]: any;\n}\n\n// @dynamic\nexport class JobUtils {\n\n static defers<O extends CallableWithProgressionOptions>(runnableList: CallableWithProgressionFn<O>[], opts?: O): Observable<number>[] {\n return runnableList.map(runnable => JobUtils.defer(runnable, opts));\n }\n\n static defer<O extends CallableWithProgressionOptions>(runnable: CallableWithProgressionFn<O>, opts?: O): Observable<number> {\n return defer<Observable<number>>(() => JobUtils.run(runnable, opts));\n }\n\n static run<O extends CallableWithProgressionOptions>(runnable: CallableWithProgressionFn<O>, opts: O): Observable<number> {\n\n const progression = new BehaviorSubject<number>(0);\n runnable(progression, opts)\n .then(() => {\n if (opts && opts.maxProgression) progression.next(opts.maxProgression);\n progression.complete();\n })\n .catch(err => progression.error(err));\n return progression;\n }\n\n static async fetchAllPages<T>(\n loadPageFn: LoadResultByPageFn<T>,\n progression: BehaviorSubject<number>,\n opts?: {\n maxProgression?: number;\n onPageLoaded?: (pageResult: LoadResult<T>) => any;\n logPrefix?: string;\n fetchSize?: number;\n }): Promise<LoadResult<T>> {\n\n const maxProgression = opts && opts.maxProgression || undefined;\n let total; let loopCount; let progressionStep; let loopDataCount: number;\n const fetchSize = opts && opts.fetchSize || 1000;\n let offset = 0;\n let data: T[] = [];\n do {\n\n if (opts && opts.logPrefix) console.debug(`${opts.logPrefix} Fetching page #${offset / fetchSize}...`);\n\n // Get some items, using paging\n const res = await loadPageFn(offset, fetchSize);\n data = data.concat(res.data);\n loopDataCount = res.data && res.data.length || 0;\n offset += loopDataCount;\n\n // Set total count (only if not already set)\n if (isNil(total) && isNotNil(res.total)) {\n total = res.total;\n loopCount = Math.round(res.total / fetchSize + 0.5); // Round to next integer\n progressionStep = maxProgression ? maxProgression / loopCount : undefined /*if 0 reset to undefined*/;\n }\n\n // Increment progression on each iteration (if possible)\n if (isNotNil(progressionStep)) {\n progression.next(progression.getValue() + progressionStep);\n }\n\n if (opts && opts.onPageLoaded) opts.onPageLoaded(res);\n\n } while (loopDataCount > 0 && ((isNil(total) && loopDataCount === fetchSize) || (isNotNil(total) && (offset < total))));\n\n // Complete progression to reach progressionStep value (because of round)\n if (isNotNil(progressionStep)) {\n\n // If total return by loadAll was bad !\n if (isNotNil(total) && data.length < total) {\n console.warn(`A function loadAll() returned a bad total (less than all page's data)! Expected ${total} but fetch ${data.length}`);\n total = data.length;\n loopCount = Math.round(data.length / fetchSize + 0.5);\n }\n\n const lastProgressionStep = opts.maxProgression - (progressionStep * loopCount);\n if (lastProgressionStep > 0) {\n progression.next(progression.getValue() + lastProgressionStep);\n }\n }\n // Or increment once\n else if (opts.maxProgression) {\n progression.next(progression.getValue() + opts.maxProgression);\n }\n\n return {\n data,\n total\n };\n }\n}\n","import {PredefinedColors} from '@ionic/core';\nimport {isNil, isNotNil} from '../functions';\n\nexport declare type ColorName = PredefinedColors |\n 'white'\n | 'red'\n | 'green'\n | 'blue';\n\n\n/**\n * Define here theme colors\n */\nconst rgbArrayMap = {\n white: [255, 255, 255],\n primary: [20, 67, 145], // ok\n secondary: [117, 196, 253], // ok\n tertiary: [91, 94, 244], // ok\n danger: [245, 61, 61], // ok\n light: [244, 245, 248], // ok\n medium: [152, 154, 162], // ok\n dark: [34, 36, 40], // ok\n red: [255, 0, 0],\n green: [0, 255, 0],\n blue: [0, 0, 255]\n};\n\n// Fill a map of Color objects\nconst colorsMap: { [key: string]: Color } = {};\n\n\n/**\n * Useful class for color conversion\n */\n// @dynamic\nexport class Color {\n\n // Helper method, to retrieve a color\n static get(name: ColorName): Color {\n return colorsMap[name] as Color;\n }\n\n static parseRgba(rgba: string): Color|null{\n if (!rgba || (!rgba.startsWith('rgb(') && !rgba.startsWith('rgba('))) return null;\n\n // Parse parts\n const parts = rgba\n .replace('rgb(', '')\n .replace('rgba(', '')\n .replace(')', '')\n .split(',');\n\n if (parts.length !== 3 && parts.length !== 4) return null;\n\n return new Color([+parts[0], +parts[1], +parts[2]],\n parts.length === 4 && +parts[3] || 1,\n 'custom');\n }\n\n static transparent = function() {\n return new Color([0,0,0], 0, 'translucent');\n };\n\n constructor(\n private _rgbArray: number[],\n private _opacity?: number,\n private _name: string = 'custom'\n ) {\n }\n get name(): string {\n return this._name;\n }\n get opacity(): number{\n return isNotNil(this._opacity) ? this._opacity : 1;\n }\n get rgb(): number[] {\n return this._rgbArray;\n }\n\n get r(): number {\n return this._rgbArray[0];\n }\n\n get g(): number {\n return this._rgbArray[1];\n }\n\n get b(): number {\n return this._rgbArray[2];\n }\n\n rgba(opacity?: number): string {\n opacity = isNotNil(opacity) ? opacity : this._opacity;\n if (isNil(opacity) || opacity < 0 || opacity > 1) {\n return 'rgb(' + this._rgbArray.join(',') + ')';\n }\n return 'rgba(' + this._rgbArray.join(',') + ',' + opacity + ')';\n }\n\n}\n\nexport declare interface ColorGradientOptions {\n opacity?: number;\n startColor?: number[];\n mainColor?: number[];\n mainColorIndex?: number;\n endColor?: number[];\n format?: 'rgb'|'hex'|'array';\n}\n\nexport declare interface ColorScaleOptions extends ColorGradientOptions{\n min?: number;\n max?: number;\n upperMax?: boolean;\n}\n\nexport declare interface ColorScaleLegendItem {\n label: string;\n color: string;\n}\n\nexport declare interface ColorScaleLegend {\n items: ColorScaleLegendItem[];\n}\n\n/**\n * Helper class for colors scale\n */\n// @dynamic\nexport class ColorScale {\n\n static custom = (count: number, options?: ColorScaleOptions) => {\n options = options || {};\n return new ColorScale(\n linearColorGradientWithIntermediate(count, {\n opacity: options.opacity,\n startColor: options.startColor || undefined,\n mainColor: options.mainColor || undefined,\n mainColorIndex: isNotNil(options.mainColorIndex) ? options.mainColorIndex : undefined,\n endColor: options.endColor || undefined,\n format: options.format\n }) as string[],\n options\n );\n };\n\n static default() {\n return ColorScale.custom(25);\n }\n\n /**\n * Create a array with the given color\n **/\n static fix(length?: number, colorName?: ColorName): any[] {\n return Array.apply(null, Array(length || 25))\n .map(String.prototype.valueOf, Color.get(colorName || 'primary').rgba(0.5));\n }\n\n private _min: number;\n private _max: number;\n private _rangeSize: number;\n private _legendItems: ColorScaleLegendItem[];\n\n get min(): number {\n return this._min;\n }\n get max(): number {\n return this._max;\n }\n\n constructor(private colorArray: string[], options?: ColorScaleOptions) {\n options = options || {};\n // reserved last colors for value > max\n const nbIntervalBeforeUpper = !options.upperMax ? colorArray.length : (colorArray.length - 1);\n this._min = options.min || 0;\n this._max = options.max || nbIntervalBeforeUpper;\n this._rangeSize = Math.round((this._max - this._min) / nbIntervalBeforeUpper);\n this._legendItems = this.computeLegend();\n }\n\n get legend(): ColorScaleLegend {\n return {\n items: this._legendItems\n };\n }\n\n getValueColor(value: number): string {\n const index = Math.floor(value * (this.colorArray.length - 1) / this._max);\n return this.colorArray[index];\n }\n\n protected computeLegend(): ColorScaleLegendItem[] {\n return this.colorArray.map((color, index) => {\n const start = index * this._rangeSize;\n const end = start + this._rangeSize;\n return {\n color,\n label: (end < this._max) ? `${start.toLocaleString()} - ${end.toLocaleString()}` : ` >= ${start}`\n };\n });\n }\n}\n\n\n// Fill colorsMap\nObject.getOwnPropertyNames(rgbArrayMap)\n .forEach((key) => {\n colorsMap[key] = new Color(rgbArrayMap[key], 1, key);\n });\n\n// Internal function\nfunction state2side(state) {\n switch (state) {\n case 0:\n return 0;\n case 1:\n return -1;\n case 2:\n return 0;\n case 3:\n return 1;\n }\n}\n\n\nconst SCALE_OPTIONS_DEFAULT = {\n startColor: rgbArrayMap.red,\n startStates: [0, 2, 3], // R=keep, V=keep, B=increase\n startStepsFn: (defaultStateSize: number) => [\n Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),\n Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),\n Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)\n ]\n};\n\n/**\n * Internal function, that create a colors scale, using iteration\n *\n * @param count\n * @param opacity\n * @param startColor\n * @param startState\n * @returns\n */\nfunction linearColorGradientWithIntermediate(count: number,\n options?: ColorGradientOptions): any[] {\n options = options || {};\n\n // From [0,1]\n options.opacity = (options.opacity > 0 && options.opacity < 1) ? options.opacity : 1;\n options.startColor = options.startColor || [255, 255, 190]; // default start = creme\n options.mainColorIndex = options.mainColorIndex && options.mainColorIndex < count - 1 ? options.mainColorIndex : count - 1;\n options.endColor = options.endColor || [255, 0, 0]; // default main = red\n options.format = options.format || 'rgb';\n\n if (!options.mainColor) {\n return linearColorGradient(count, {\n opacity: options.opacity,\n startColor: options.startColor,\n endColor: options.endColor,\n format: options.format\n });\n }\n\n else {\n // Step 1: startColor -> mainColor\n const result = linearColorGradient(options.mainColorIndex + 1, {\n opacity: options.opacity,\n startColor: options.startColor,\n endColor: options.mainColor,\n format: options.format\n });\n\n // Step 2: mainColor -> endColor\n if (options.mainColorIndex < count - 1) {\n return result.concat(\n linearColorGradient(count - options.mainColorIndex, {\n opacity: options.opacity,\n startColor: options.mainColor,\n endColor: options.endColor,\n format: options.format\n }));\n }\n else {\n return result;\n }\n }\n}\n\nfunction linearColorGradient(count: number,\n options?: ColorGradientOptions): any[] {\n\n options = options || {};\n\n // From [0,1]\n options.opacity = (options.opacity > 0 && options.opacity < 1) ? options.opacity : 1;\n options.startColor = options.startColor || [255, 255, 255]; // default start = white\n options.endColor = options.endColor || [255, 0, 0]; // default end = red\n options.format = options.format || 'rgb';\n\n const result: number[][] = [];\n const color = options.startColor.slice(); // copy the start color\n const delta = [\n Math.round((options.endColor[0] - options.startColor[0]) / count),\n Math.round((options.endColor[1] - options.startColor[1]) / count),\n Math.round((options.endColor[2] - options.startColor[2]) / count)\n ];\n\n for (let i = 0; i < count - 1; i++) {\n for (let j = 0; j < 3; j++) {\n color[j] += delta[j];\n }\n result.push(color.slice());\n }\n\n // Force last color = end color\n result.push(options.endColor.slice());\n\n // Output as array\n if (options.format === 'array') {\n return result;\n }\n\n // Output as rgb(r,g,b) string\n if (options.format === 'rgb') {\n if (options.opacity >= 1) {\n return result.map(color => 'rgb(' + color.join(',') + ')');\n } else {\n return result.map(color => 'rgba(' + color.concat(options.opacity).join(',') + ')');\n }\n }\n\n // Output as hex\n // TODO\n // return result.map(color => {\n // return \"rgb(\" + color.join(',') + \")\";\n // });\n return result;\n}\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {SharedValidators} from '../../../validator/validators';\nimport {MatAutocompleteConfigHolder} from '../material.autocomplete';\nimport {isNil, isNotNil, sleep, suggestFromArray} from '../../../functions';\nimport {BehaviorSubject} from 'rxjs';\nimport {LoadResult} from '../../../services/entity-service.class';\nimport Timer = NodeJS.Timer;\n\nclass EntityTestClass {\n id: number;\n label: string;\n name: string;\n}\n\nconst FAKE_ENTITIES = [\n {id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A'},\n {id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B'},\n {id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C'}\n];\n\nfunction deepCopy(values?: EntityTestClass[], size?: number): EntityTestClass[] {\n if (isNil(size)) {\n return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));\n }\n\n let result = [];\n let i = 1;\n while (result.length < size) {\n result = result.concat((values || FAKE_ENTITIES).map(entity => {\n const name = entity.name + ' #' + i;\n return {...entity, id: i++, name};\n }));\n }\n return result.slice(0, size);\n}\n\n@Component({\n selector: 'app-autocomplete-test',\n templateUrl: './autocomplete.test.html'\n})\nexport class AutocompleteTestPage implements OnInit {\n\n _items = deepCopy(FAKE_ENTITIES, 100);\n $items = new BehaviorSubject<EntityTestClass[]>(undefined);\n\n form: FormGroup;\n autocompleteFields = new MatAutocompleteConfigHolder();\n memoryHide = false;\n memoryMobile = true;\n memoryAutocompleteFieldName = 'entity-$items';\n memoryTimer: Timer;\n\n mode: 'mobile'|'desktop'|'memory'|'temp' = 'mobile';\n\n constructor(\n protected formBuilder: FormBuilder\n ) {\n this.form = formBuilder.group({\n entity: [null, SharedValidators.entity],\n missingEntity: [null, SharedValidators.entity],\n disableEntity: [null, SharedValidators.entity],\n });\n\n this.form.get('disableEntity').disable();\n }\n\n ngOnInit() {\n\n // From suggest\n this.autocompleteFields.add('entity-suggestFn', {\n suggestFn: (value, filter) => this.suggest(value, filter),\n attributes: ['label', 'name'],\n displayWith: this.entityToString,\n showAllOnFocus: false\n });\n\n // From items array\n this.autocompleteFields.add('entity-items', {\n items: this._items.slice(),\n attributes: ['label', 'name'],\n displayWith: this.entityToString\n });\n\n // From $items observable\n this.autocompleteFields.add('entity-$items', {\n items: this.$items,\n attributes: ['label', 'name'],\n displayWith: this.entityToString\n });\n\n // From $items with filter\n this.autocompleteFields.add('entity-items-filter', {\n service: {\n suggest: (value, filter) => this.suggest(value, filter)\n },\n attributes: ['label', 'name'],\n displayWith: this.entityToString\n });\n\n // From items\n this.autocompleteFields.add('entity-items-large', {\n items: FAKE_ENTITIES.slice(),\n attributes: ['label', 'name', 'description', 'comments'],\n displayWith: this.entityToString\n });\n\n this.loadData();\n\n }\n\n // Load the form with data\n async loadData() {\n const data = {\n entity: deepCopy(FAKE_ENTITIES)[0], // Select the second\n\n // This item is NOT in the items list => i should be displayed anyway\n missingEntity: {\n id: -1, label: '??', name: 'Missing item'\n },\n\n disableEntity: deepCopy(FAKE_ENTITIES)[2]\n };\n\n this.form.setValue(data);\n\n // Load observables\n setTimeout(() => this.loadItems(), 1000);\n }\n\n async loadItems() {\n this.$items.next(this._items.slice());\n }\n\n entityToString(item: any) {\n return [item && item.label || undefined, item && item.name || undefined].filter(isNotNil).join(' - ');\n }\n\n async suggest(value: any, filter?: any): Promise<LoadResult<any>> {\n filter = {offset: 0, size: 30, ...filter};\n const res = suggestFromArray(this._items, value, {\n ...filter,\n searchAttributes: ['label', 'name']\n });\n // Simulate a size = 30\n\n const total = res.total || res.data.length;\n\n const nextOffset = filter.offset + res.data.length;\n if (nextOffset < total) {\n filter = {...filter, offset: nextOffset};\n return {\n total,\n data: res.data,\n fetchMore: async (variables) => {\n await sleep(1000);\n return this.suggest(value, {...filter, ...variables});\n }\n };\n }\n\n return res;\n }\n\n doSubmit(event) {\n\n console.debug('Validate form: ', this.form.value);\n }\n\n compareWithFn(o1: EntityTestClass, o2: EntityTestClass): boolean {\n return o1 && o2 && o1.id === o2.id;\n }\n\n toggleMode(value) {\n if (this.mode !== value) {\n this.mode = value;\n this.stopMemoryTimer();\n }\n }\n\n startMemoryTimer() {\n this.memoryTimer = setInterval(() => {\n this.memoryHide = !this.memoryHide;\n }, 50);\n }\n\n stopMemoryTimer() {\n clearInterval(this.memoryTimer);\n this.memoryTimer = null;\n this.memoryHide = false;\n }\n\n updateFilter(fieldName: string) {\n const filter: { searchAttribute?: string } = this.autocompleteFields.get(fieldName).filter || {};\n filter.searchAttribute = (!filter || filter.searchAttribute !== 'name') ? 'name' : 'label';\n }\n\n /* -- protected methods -- */\n\n stringify(value: any) {\n return JSON.stringify(value);\n }\n}\n\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {SharedValidators} from '../../../validator/validators';\n\n\n@Component({\n selector: 'app-latlong-test',\n templateUrl: './latlong.test.html'\n})\nexport class LatLongTestPage implements OnInit {\n\n\n form: FormGroup;\n\n constructor(\n protected formBuilder: FormBuilder\n ) {\n this.form = formBuilder.group({\n empty: formBuilder.group({\n latitude: [null, Validators.compose([Validators.required, SharedValidators.latitude])],\n longitude: [null, Validators.compose([Validators.required, SharedValidators.longitude])]\n }),\n enable: formBuilder.group({\n latitude: [null, SharedValidators.latitude],\n longitude: [null, SharedValidators.longitude]\n }),\n disable: formBuilder.group({\n latitude: [null, SharedValidators.latitude],\n longitude: [null, SharedValidators.longitude]\n })\n });\n\n const disableFormGroup = this.form.get('disable');\n disableFormGroup.disable();\n\n // Copy enable value to disable form\n this.form.get('enable').valueChanges.subscribe(value => disableFormGroup.setValue(value));\n\n }\n\n ngOnInit() {\n\n\n setTimeout(() => this.loadData(), 250);\n }\n\n // Load the form with data\n async loadData() {\n const data = {\n empty: {\n latitude: null,\n longitude: null\n },\n enable: {\n latitude: 50.1,\n longitude: -2\n },\n disable: {\n latitude: 50.1,\n longitude: -2\n },\n };\n\n this.form.setValue(data);\n }\n\n doSubmit(event) {\n console.debug('Validate form: ', this.form.value);\n }\n\n geoPosition(event: UIEvent): boolean {\n console.debug('Click on geoLocation button', event);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n stringify = JSON.stringify;\n\n /* -- protected methods -- */\n\n\n}\n\n","import {Component, Inject, InjectionToken, Optional} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {TranslateService} from '@ngx-translate/core';\n\nexport declare interface TestingPage {\n label: string;\n page: string;\n}\n\nexport const APP_TESTING_PAGES = new InjectionToken<TestingPage[]>('testingPages');\n\n@Component({\n selector: 'app-material-testing',\n templateUrl: './material.testing.html'\n})\nexport class MaterialTestingPage {\n\n constructor(\n protected route: ActivatedRoute,\n protected router: Router,\n protected translate: TranslateService,\n @Optional() @Inject(APP_TESTING_PAGES) public pages: TestingPage[]\n ) {\n console.log('Testing pages:', pages);\n }\n\n async openPage(page): Promise<boolean> {\n return this.router.navigate([page], {\n relativeTo: this.route\n });\n }\n}\n\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {SharedValidators} from '../../../validator/validators';\nimport * as momentImported from 'moment';\nconst moment = momentImported;\nimport {BehaviorSubject} from 'rxjs';\nimport {Moment} from 'moment';\nimport {DateFormatPipe} from '../../../pipes/date-format.pipe';\nimport {DisplayFn} from '../../../form/field.model';\nimport {distinctUntilChanged} from 'rxjs/operators';\n\n@Component({\n selector: 'app-swipe-test',\n templateUrl: './swipe.test.html'\n})\nexport class SwipeTestPage implements OnInit {\n\n form: FormGroup;\n\n $dates = new BehaviorSubject<Moment[]>(undefined);\n private _today = moment().startOf('day');\n\n constructor(\n protected formBuilder: FormBuilder,\n protected dateFormatPipe: DateFormatPipe\n ) {\n this.form = formBuilder.group({\n empty: [null, Validators.required],\n date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],\n disabledEmpty: [null, Validators.required],\n disabledDate: [null, Validators.required]\n });\n\n this.form.get('disabledEmpty').disable();\n this.form.get('disabledDate').disable();\n\n }\n\n ngOnInit() {\n\n const dates: Moment[] = [];\n for (let d = 0; d < 7; d++) {\n dates[d] = moment(this._today).add(d-3, 'day');\n }\n this.$dates.next(dates);\n\n\n this.loadData();\n //setTimeout(() => this.loadData(), 1500);\n\n this.form.valueChanges.pipe(\n distinctUntilChanged()\n ).subscribe(() => console.debug(this.form.value));\n }\n\n // Load the form with data\n async loadData() {\n const data = {\n empty: null,\n date: this._today,\n disabledEmpty: null,\n disabledDate: this._today\n };\n\n this.form.patchValue(data);\n }\n\n doSubmit(event) {\n console.debug('Validate form: ', this.form.value);\n }\n\n /* -- protected methods -- */\n\n displayDate(): DisplayFn {\n return (obj: any) => this.dateFormatPipe.transform(obj, {pattern: 'dddd L'}).toString();\n }\n\n compareDate() {\n return (d1: Moment, d2: Moment) => d1 && d2 && d1.isSame(d2) || false;\n }\n}\n\n","import {AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport {isMoment} from 'moment';\nimport {Entity} from '../services/model/entity.model';\nimport {SharedFormArrayValidators} from '../../shared/validator/validators';\nimport {isNil, isNotEmptyArray, nullIfUndefined, round, toBoolean} from '../../shared/functions';\nimport {filterNumberInput, selectInputContent} from '../../shared/inputs';\nimport {toDateISOString} from '../../shared/dates';\nimport {waitFor, WaitForOptions} from '../../shared/observables';\nimport {Predicate} from '@angular/core';\n\nexport declare type IAppFormGetter = () => IAppForm;\n\nexport interface IAppForm {\n // From Angular form\n invalid: boolean;\n valid: boolean;\n dirty: boolean;\n pending: boolean;\n error: string;\n enabled: boolean;\n disabled: boolean;\n\n // Specific to IAppForm\n empty?: boolean;\n loading?: boolean;\n\n disable(opts?: {onlySelf?: boolean; emitEvent?: boolean;});\n enable(opts?: {onlySelf?: boolean; emitEvent?: boolean;});\n\n markAsPristine(opts?: {onlySelf?: boolean; emitEvent?: boolean;});\n markAsUntouched(opts?: {onlySelf?: boolean; emitEvent?: boolean;});\n markAsTouched(opts?: {onlySelf?: boolean; emitEvent?: boolean;});\n markAllAsTouched(opts?: {emitEvent?: boolean});\n markAsDirty(opts?: {onlySelf?: boolean; emitEvent?: boolean;});\n markAsLoading(opts?: {onlySelf?: boolean; emitEvent?: boolean;});\n markAsLoaded(opts?: {onlySelf?: boolean; emitEvent?: boolean;});\n}\n\n\n/**\n * A form that do nothing\n */\nexport class AppNullForm implements IAppForm {\n readonly invalid = false;\n readonly valid = false;\n readonly dirty = false;\n readonly empty = true;\n readonly pending = false;\n readonly error = null;\n readonly enabled = false;\n readonly loading = false;\n get disabled(): boolean {\n return !this.enabled;\n }\n\n disable(opts?: {onlySelf?: boolean; emitEvent?: boolean }){}\n enable(opts?: {onlySelf?: boolean; emitEvent?: boolean }){}\n\n markAsPristine(opts?: {onlySelf?: boolean; emitEvent?: boolean }){}\n markAsUntouched(opts?: {onlySelf?: boolean; emitEvent?: boolean }){}\n markAsTouched(opts?: {onlySelf?: boolean; emitEvent?: boolean }){}\n markAllAsTouched(opts?: { emitEvent?: boolean }) {}\n markAsDirty(opts?: {onlySelf?: boolean; emitEvent?: boolean }){}\n markAsLoading(opts?: {onlySelf?: boolean; emitEvent?: boolean }){}\n markAsLoaded(opts?: {onlySelf?: boolean; emitEvent?: boolean }){}\n}\n\n\nexport class AppFormProvider<F extends IAppForm = IAppForm> implements IAppForm {\n static NULL_FORM = new AppNullForm();\n\n constructor(private getterFn: () => F) {\n }\n\n private get delegate(): IAppForm {\n return this.getterFn() || AppFormProvider.NULL_FORM;\n }\n\n waitDelegate(opts?: WaitForOptions): Promise<F> {\n let content: F;\n return waitFor(() => {\n content = this.getterFn();\n return !!content;\n }, opts).then(_ => content);\n }\n\n /* -- delegated methods -- */\n get enabled(): boolean {\n return this.delegate.enabled;\n }\n get disabled(): boolean {\n return this.delegate.disabled;\n }\n get error(): string {\n return this.delegate.error;\n }\n get invalid(): boolean {\n return this.delegate.invalid;\n }\n get valid(): boolean {\n return this.delegate.valid;\n }\n get dirty(): boolean {\n return this.delegate.dirty;\n }\n get empty(): boolean {\n return this.delegate.empty;\n }\n get pending(): boolean {\n return this.delegate.pending;\n }\n get loading(): boolean {\n return this.delegate.loading;\n }\n disable(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n return this.delegate.disable(opts);\n }\n enable(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n return this.delegate.enable(opts);\n }\n markAsPristine(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n return this.delegate.markAsPristine(opts);\n }\n markAsUntouched(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n return this.delegate.markAsUntouched(opts);\n }\n markAsTouched(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n return this.delegate.markAsTouched(opts);\n }\n markAllAsTouched(opts?: { emitEvent?: boolean }) {\n return this.delegate.markAllAsTouched(opts);\n }\n markAsDirty(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n return this.delegate.markAsDirty(opts);\n }\n markAsLoading(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {\n return this.delegate.markAsLoading(opts);\n }\n markAsLoaded(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {\n return this.delegate.markAsLoaded(opts);\n }\n}\n\n// TODO continue to use this kind of declaration ?\nexport class AppFormUtils {\n static copyEntity2Form = copyEntity2Form;\n static getFormValueFromEntity = getFormValueFromEntity;\n static logFormErrors = logFormErrors;\n static getControlFromPath = getControlFromPath;\n static filterNumberInput = filterNumberInput;\n static disableControls = disableControls;\n static selectInputContent = selectInputContent;\n /**\n * @deprecated use markAllAsTouched() instead (naming was wrong)\n */\n static markAsTouched = markAllAsTouched;\n\n /**\n * Marks the control and all its descendant controls as touched.\n * See also:\n * - `markAsTouched()`\n */\n static markAllAsTouched = markAllAsTouched;\n static markAsUntouched = markAsUntouched;\n static waitWhilePending = waitWhilePending;\n static waitIdle = waitIdle;\n static updateValueAndValidity = updateValueAndValidity;\n\n static getFormErrors = getFormErrors;\n\n static isForm(object: any): object is IAppForm {\n return object instanceof AppFormProvider\n || 'dirty' in object && 'enabled' in object && 'valid' in object;\n }\n\n // ArrayForm\n static addValueInArray = addValueInArray;\n static removeValueInArray = removeValueInArray;\n static resizeArray = resizeArray;\n static clearValueInArray = clearValueInArray;\n\n // Calculated fields\n static calculatedSuffix = 'Calculated';\n static isControlHasInput = isControlHasInput;\n static setCalculatedValue = setCalculatedValue;\n static resetCalculatedValue = resetCalculatedValue;\n}\n\n/**\n * Fill a form using a source entity\n *\n * @param target\n * @param entity\n * @param opts\n */\nexport function copyEntity2Form(entity: any, target: FormGroup, opts?: { emitEvent?: boolean; onlySelf?: boolean }) {\n const json = getFormValueFromEntity(entity, target);\n target.patchValue(json, opts);\n}\n\nexport function getFormValueFromEntity(entity: any|undefined, form: FormGroup): { [key: string]: any } {\n return adaptValueToControl(entity, form) as { [key: string]: any };\n}\n\n/**\n * Transform an entity into a simple object, compatible with the given form\n *\n * @param source an entity (or subentity)\n * @param control\n * @param path\n */\nexport function adaptValueToControl(source: any|undefined, control: AbstractControl, path?: string): any {\n const pathPrefix = path ? path + '.' : '';\n\n // Form group\n if (control instanceof FormGroup) {\n const result = {};\n // eslint-disable-next-line guard-for-in\n for (const key in control.controls) {\n result[key] = adaptValueToControl(source && source[key], control.controls[key], pathPrefix + key);\n }\n return result;\n }\n\n // Array\n if (control instanceof FormArray) {\n\n // Split, if many values in a string\n if (typeof source === 'string') {\n source = source.split('|');\n }\n\n // Skip if value is not an array\n if (!(source instanceof Array) || control.length === 0) {\n if (isNotEmptyArray(source)) console.warn(`WARN: please resize the FormArray '${path}' to the same length of the input array`);\n return [];\n }\n\n // Use the first form group, as model\n const firstItemControl = control.at(0);\n let result = source.map((item, index) => adaptValueToControl(item, firstItemControl, pathPrefix + '#' + index)) as any[];\n\n // Truncate if too many values\n if (result.length > control.length) {\n if (firstItemControl instanceof FormControl) {\n for (let i = control.length; i < result.length; i++) {\n control.push(new FormControl(null, firstItemControl.validator));\n }\n }\n else {\n console.warn(`WARN: please resize the FormArray '${path||''}' to the same length of the input array`);\n result = result.slice(0, control.length);\n }\n }\n\n // Add values if not enought\n else if (result.length < control.length) {\n //console.warn(`WARN: Adding null value to array values`);\n for (let i = result.length; i < control.length; i++) {\n result.push(null);\n }\n }\n return result;\n }\n\n // Form control\n if (control instanceof FormControl) {\n // Date\n if (isMoment(source)) {\n return toDateISOString(source);\n }\n // Any other control: replace undefined by null value\n // because Undefined is not authorized as control value\n else {\n return nullIfUndefined(source);\n }\n }\n\n}\n\nexport function logFormErrors(control: AbstractControl, logPrefix?: string, path?: string) {\n if (!control || control.valid) return;\n logPrefix = logPrefix || '';\n // Form group\n if (control instanceof FormGroup) {\n if (!path) console.warn(`${logPrefix} Form errors:`);\n if (control.errors) {\n Object.keys(control.errors).forEach(error =>\n console.warn(`${logPrefix} -> ${path || ''} (${error})`)\n );\n }\n if (control.controls) {\n Object.keys(control.controls).forEach(child =>\n logFormErrors(control.controls[child], logPrefix, (path ? `${path}/${child}` : child)) // Recursive call\n );\n }\n }\n // Form array\n else if (control instanceof FormArray) {\n if (control.errors) {\n Object.keys(control.errors).forEach(error =>\n console.warn(`${logPrefix} -> ${path || ''} (${error})`)\n );\n }\n control.controls.forEach((child, index) => {\n logFormErrors(child, logPrefix, (path ? `${path}#${index}` : `#${index}`)); // Recursive call\n });\n }\n // Other control's errors\n else if (control.errors) {\n Object.keys(control.errors).forEach(error =>\n console.warn(`${logPrefix} -> ${path || ''} (${error})`)\n );\n }\n}\n\nexport interface FormErrors {\n [key: string]: ValidationErrors;\n}\n\nexport function getFormErrors(control: AbstractControl, opts?: {\n controlName?: string;\n result?: FormErrors;\n recursive?: boolean;\n}): FormErrors {\n if (!control || control.valid) return undefined;\n\n opts = opts || {};\n opts.result = opts.result || {};\n\n // Form group\n if (control instanceof FormGroup) {\n // Copy errors\n if (control.errors) {\n if (opts.controlName) {\n opts.result[opts.controlName] = {\n ...control.errors\n };\n }\n else {\n opts.result = {\n ...opts.result,\n ...control.errors\n };\n }\n }\n\n if (!opts || opts.recursive !== false) {\n // Loop on children controls\n for (const key in control.controls) {\n const child = control.controls[key];\n if (child && child.enabled) {\n getFormErrors(child, {\n ...opts,\n controlName: opts.controlName ? [opts.controlName, key].join('.') :  key,\n result: opts.result // Make sure to keep the same result object\n });\n }\n }\n }\n }\n\n // Form array\n else if (control instanceof FormArray) {\n control.controls.forEach((child, index) => {\n getFormErrors(child, {\n ...opts,\n controlName: (opts.controlName || '') + '#' + index,\n result: opts.result // Make sure to keep the same result object\n });\n });\n }\n\n // Other type of control (e.g simple control)\n else if (control.errors) {\n if (opts.controlName) {\n opts.result[opts.controlName] = {\n ...control.errors\n };\n }\n else {\n opts.result = {\n ...opts.result,\n ...control.errors\n };\n }\n }\n return opts.result;\n}\n\nexport function getControlFromPath(form: FormGroup, path: string): AbstractControl {\n const i = path.indexOf('.');\n if (i === -1) {\n return form.controls[path];\n }\n const key = path.substring(0, i);\n if (form.controls[key] instanceof FormGroup) {\n return getControlFromPath((form.controls[key] as FormGroup), path.substring(i + 1));\n }\n throw new Error(`Invalid form path: '${key}' should be a form group.`);\n}\n\n\nexport function disableControls(form: FormGroup, paths: string[], opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n (paths || []).forEach(path => {\n const control = AppFormUtils.getControlFromPath(form, path);\n if (control) control.disable(opts);\n });\n}\n\n\nexport function addValueInArray(arrayControl: FormArray,\n createControl: (value?: any) => AbstractControl,\n equals: (v1: any, v2: any) => boolean,\n isEmpty: (value: any) => boolean,\n value: any,\n options?: { emitEvent: boolean }): boolean {\n options = options || {emitEvent: true};\n\n let hasChanged = false;\n let index = -1;\n\n // Search if value already exists\n if (!isEmpty(value)) {\n index = (arrayControl.value || []).findIndex(v => equals(value, v));\n }\n\n // If value not exists, but last value is empty: use it\n if (index === -1 && arrayControl.length && isEmpty(arrayControl.at(arrayControl.length - 1).value)) {\n index = arrayControl.length - 1;\n }\n\n // Replace the existing value\n if (index !== -1) {\n if (!isEmpty(value)) {\n arrayControl.at(index).patchValue(value, options);\n hasChanged = true;\n }\n } else {\n const control = createControl(value);\n arrayControl.push(control);\n hasChanged = true;\n }\n\n if (hasChanged) {\n if (isNil(options.emitEvent) || options.emitEvent) {\n // Mark array control dirty\n if (!isEmpty(value)) {\n arrayControl.markAsDirty();\n }\n }\n }\n\n return hasChanged;\n}\n\nexport function resizeArray(arrayControl: FormArray,\n createControl: () => AbstractControl,\n length: number): boolean {\n const hasChanged = arrayControl.length !== length;\n\n // Increase size\n if (arrayControl.length < length) {\n while (arrayControl.length < length) {\n arrayControl.push(createControl());\n }\n }\n\n // Or reduce\n else if (arrayControl.length > length) {\n while (arrayControl.length > length) {\n arrayControl.removeAt(arrayControl.length - 1);\n }\n }\n\n return hasChanged;\n}\n\nexport function removeValueInArray(arrayControl: FormArray,\n isEmpty: (value: any) => boolean,\n index: number): boolean {\n arrayControl.removeAt(index);\n arrayControl.markAsDirty();\n return true;\n}\n\nexport function clearValueInArray(arrayControl: FormArray,\n isEmpty: (value: any) => boolean,\n index: number): boolean {\n\n const control = arrayControl.at(index);\n if (isEmpty(control.value)) return false; // skip (not need to clear)\n\n if (control instanceof FormGroup) {\n AppFormUtils.copyEntity2Form({}, control);\n }\n else if (control instanceof FormArray) {\n control.setValue([]);\n }\n else {\n control.setValue(null);\n }\n arrayControl.markAsDirty();\n return true;\n}\n\nexport function markAllAsTouched(control: AbstractControl, opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (!control) return;\n if (control instanceof FormGroup) {\n markFormGroupAsTouched(control, {...opts, onlySelf: true}); // recursive call\n }\n else if (control instanceof FormArray) {\n control.markAsTouched({onlySelf: true});\n (control.controls || []).forEach(c => markControlAsTouched(c, {...opts, onlySelf: true})); // recursive call\n }\n else {\n control.markAsTouched({onlySelf: true});\n control.updateValueAndValidity({...opts, onlySelf: true});\n }\n}\n\nexport function markFormGroupAsTouched(form: FormGroup, opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (!form) return;\n form.markAsTouched(opts);\n Object.keys(form.controls)\n .map(key => form.controls[key])\n .filter(control => control.enabled)\n .forEach(control => markControlAsTouched(control, opts));\n form.updateValueAndValidity({...opts, onlySelf: true});\n}\n\nexport function markControlAsTouched(control: AbstractControl, opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (!control) return;\n if (control instanceof FormGroup) {\n markAllAsTouched(control, { ...opts, onlySelf: true}); // recursive call\n }\n else if (control instanceof FormArray) {\n (control.controls || []).forEach(c => markControlAsTouched(c, { ...opts, onlySelf: true})); // recursive call\n }\n else {\n control.markAsTouched({onlySelf: true});\n control.updateValueAndValidity({...opts, onlySelf: true});\n }\n}\n\nexport function updateValueAndValidity(form: FormGroup, opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (!form) return;\n form.updateValueAndValidity(opts);\n Object.keys(form.controls)\n .map(key => form.controls[key])\n .filter(control => control.enabled)\n .forEach(control => {\n if (control instanceof FormGroup) {\n updateValueAndValidity(control, {...opts, onlySelf: true}); // recursive call\n }\n else {\n control.updateValueAndValidity({...opts, onlySelf: true});\n }\n });\n}\n\nexport function markAsUntouched(form: FormGroup, opts?: {onlySelf?: boolean }) {\n if (!form) return;\n form.markAsUntouched(opts);\n Object.getOwnPropertyNames(form.controls)\n .forEach(key => {\n const control = form.get(key);\n if (control instanceof FormGroup) {\n markAsUntouched(control, {onlySelf: true}); // recursive call\n }\n else {\n control.markAsUntouched({onlySelf: true});\n control.setErrors(null);\n }\n });\n}\n\n/**\n * Wait end of async validation (not pending)\n * return false\n */\nexport function waitWhilePending<T extends IAppForm | { pending: boolean }>(form: T, opts?: WaitForOptions): Promise<boolean> {\n const predicate: Predicate<void> = () => form.pending !== true;\n return waitFor(predicate, opts);\n}\n\n/**\n * Wait form is idle (not loading). This need to implement IAppForm.loading\n * @param form\n * @param opts\n */\nexport function waitIdle<T extends IAppForm | { loading: boolean }>(form: T, opts?: WaitForOptions): Promise<boolean> {\n const predicate: Predicate<void> = () => form.loading !== true;\n return waitFor(predicate, opts);\n}\n\n\nexport function isControlHasInput(controls: { [key: string]: AbstractControl}, controlName: string): boolean {\n // true if the control has a value and its 'calculated' control has the value 'false'\n return controls[controlName].value && !toBoolean(controls[controlName + AppFormUtils.calculatedSuffix].value, false);\n}\n\nexport function setCalculatedValue(controls: { [key: string]: AbstractControl}, controlName: string, value: number | undefined) {\n // set value to control\n controls[controlName].setValue(round(value));\n // set 'calculated' control to 'true'\n controls[controlName + AppFormUtils.calculatedSuffix].setValue(true);\n}\n\nexport function resetCalculatedValue(controls: { [key: string]: AbstractControl}, controlName: string) {\n if (!AppFormUtils.isControlHasInput(controls, controlName)) {\n // set undefined only if control already calculated\n AppFormUtils.setCalculatedValue(controls, controlName, undefined);\n }\n}\n\nexport interface FormArrayHelperOptions {\n allowEmptyArray: boolean;\n validators?: ValidatorFn[];\n}\n\nexport class FormArrayHelper<T = Entity<any>> {\n\n static getOrCreateArray(\n formBuilder: FormBuilder,\n form: FormGroup,\n arrayName: string): FormArray {\n let arrayControl = form.get(arrayName) as FormArray;\n if (!arrayControl) {\n arrayControl = formBuilder.array([]);\n form.addControl(arrayName, arrayControl);\n }\n return arrayControl;\n }\n\n private _allowEmptyArray: boolean;\n private readonly _validators: ValidatorFn[];\n\n get allowEmptyArray(): boolean {\n return this._allowEmptyArray;\n }\n\n set allowEmptyArray(value: boolean) {\n this.setAllowEmptyArray(value);\n }\n\n get formArray(): FormArray {\n return this._formArray;\n }\n\n constructor(\n private readonly _formArray: FormArray,\n private createControl: (value?: T) => AbstractControl,\n private equals: (v1: T, v2: T) => boolean,\n private isEmpty: (value: T) => boolean,\n options?: FormArrayHelperOptions\n ) {\n this._validators = options && options.validators;\n\n // empty array not allow by default\n this.setAllowEmptyArray(toBoolean(options && options.allowEmptyArray, false));\n }\n\n add(value?: T, options?: { emitEvent: boolean }): boolean {\n return addValueInArray(this._formArray, this.createControl, this.equals, this.isEmpty, value, options);\n }\n\n removeAt(index: number) {\n // Do not remove if last criterion\n if (!this._allowEmptyArray && this._formArray.length === 1) {\n return clearValueInArray(this._formArray, this.isEmpty, index);\n }\n else {\n return removeValueInArray(this._formArray, this.isEmpty, index);\n }\n }\n\n resize(length: number): boolean {\n return resizeArray(this._formArray, this.createControl, length);\n }\n\n clearAt(index: number): boolean {\n return clearValueInArray(this._formArray, this.isEmpty, index);\n }\n\n isLast(index: number): boolean {\n return (this._formArray.length - 1) === index;\n }\n\n removeAllEmpty() {\n let index = this._formArray.controls.findIndex(c => this.isEmpty(c.value));\n while(index !== -1) {\n this.removeAt(index);\n index = this._formArray.controls.findIndex(c => this.isEmpty(c.value));\n }\n }\n\n size(): number {\n return this._formArray.length;\n }\n\n at(index: number): AbstractControl {\n return this._formArray.at(index) as AbstractControl;\n }\n\n disable(opts?: {\n onlySelf?: boolean;\n emitEvent?: boolean;\n }) {\n this._formArray.controls.forEach(c => c.disable(opts));\n }\n\n enable(opts?: {\n onlySelf?: boolean;\n emitEvent?: boolean;\n }) {\n this._formArray.controls.forEach(c => c.enable(opts));\n }\n\n forEach(ite: (control: AbstractControl) => void ) {\n const size = this.size();\n for(let i = 0; i < size; i++) {\n const control = this._formArray.at(i);\n if (control) ite(control);\n }\n }\n\n /* -- internal methods -- */\n\n protected setAllowEmptyArray(value: boolean) {\n if (this._allowEmptyArray === value) return; // Skip if same\n\n this._allowEmptyArray = value;\n\n // Set required (or reste) min length validator\n if (this._allowEmptyArray) {\n this._formArray.setValidators(this._validators || null);\n }\n else {\n this._formArray.setValidators((this._validators || []).concat(SharedFormArrayValidators.requiredArrayMinLength(1)));\n }\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {Platform} from '@ionic/angular';\nimport {debounceTime} from 'rxjs/operators';\nimport {SharedFormGroupValidators} from '../../../validator/validators';\nimport {AppFormUtils} from '../../../../core/form/form.utils';\nimport {toDateISOString} from '../../../dates';\nimport * as momentImported from 'moment';\nimport Timer = NodeJS.Timer;\n\nconst moment = momentImported;\n\n@Component({\n selector: 'app-data-time-test',\n templateUrl: './mat-date-time.test.html'\n})\nexport class DateTimeTestPage implements OnInit {\n\n\n showLogPanel = true;\n logContent = '';\n\n memoryHide = false;\n memoryMobile = true;\n memoryTimer: Timer;\n\n form: FormGroup;\n\n constructor(\n protected platform: Platform,\n protected formBuilder: FormBuilder,\n protected cd: ChangeDetectorRef\n ) {\n this.form = formBuilder.group({\n empty: [null, Validators.required],\n enable: [null, Validators.required],\n disable: [null, Validators.required]\n }, {\n validators: SharedFormGroupValidators.dateRange('empty', 'enable')\n });\n\n const disableControl = this.form.get('disable');\n disableControl.disable();\n\n // Copy the 'enable' value, into the disable control\n this.form.get('enable').valueChanges.subscribe(value => disableControl.setValue(value));\n\n const mobile = platform.is('mobile');\n this.showLogPanel = this.showLogPanel || mobile;\n\n }\n\n ngOnInit() {\n\n setTimeout(() => this.loadData(), 250);\n\n\n }\n\n // Load the form with data\n async loadData() {\n const now = moment();\n const data = {\n empty: toDateISOString(now.clone().add(2, 'hours')),\n enable: toDateISOString(now),\n disable: now,\n };\n\n this.form.setValue(data);\n\n this.log('[test-page] Data loaded: ' + JSON.stringify(data));\n\n this.form.get('empty').valueChanges\n .pipe(debounceTime(300))\n .subscribe(value => this.log('[test-page] Value n°1: ' + JSON.stringify(value)));\n\n this.form.get('enable').valueChanges\n .pipe(debounceTime(300))\n .subscribe(value => this.log('[test-page] Value n°2: ' + JSON.stringify(value)));\n }\n\n doSubmit(event) {\n this.form.markAllAsTouched();\n this.log('[test-page] Form content: ' + JSON.stringify(this.form.value));\n this.log('[test-page] Form status: ' + this.form.status);\n if (this.form.invalid) {\n this.log('[test-page] Form errors: ' + JSON.stringify(this.form.errors));\n\n // DEBUG\n AppFormUtils.logFormErrors(this.form);\n }\n }\n\n log(message: string) {\n console.debug(message);\n\n if (this.showLogPanel) {\n this.logContent += message + '<br/>';\n this.cd.markForCheck();\n }\n }\n\n clearLogPanel() {\n this.logContent = '';\n this.cd.markForCheck();\n }\n\n startMemoryTimer() {\n this.memoryTimer = setInterval(() => {\n this.memoryHide = !this.memoryHide;\n }, 50);\n }\n\n stopMemoryTimer() {\n clearInterval(this.memoryTimer);\n this.memoryTimer = null;\n this.memoryHide = false;\n }\n\n stringify = JSON.stringify;\n\n /* -- protected methods -- */\n\n\n}\n\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\nimport {SharedValidators} from '../../../validator/validators';\nimport {MatAutocompleteConfigHolder} from '../../autocomplete/material.autocomplete';\nimport {isNotNil, suggestFromArray} from '../../../functions';\nimport {LoadResult} from '../../../services/entity-service.class';\n\nclass EntityTestClass {\n id: number;\n label: string;\n name: string;\n}\n\nconst FAKE_ENTITIES: EntityTestClass[] = [\n {id: 1, label: 'AAA', name: 'Item A'},\n {id: 2, label: 'BBB', name: 'Item B'},\n {id: 3, label: 'CCC', name: 'Item C'}\n];\n\nfunction deepCopy(values?: EntityTestClass[]): EntityTestClass[] {\n return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));\n}\n\n@Component({\n selector: 'app-chips-test',\n templateUrl: './chips.test.html'\n})\nexport class ChipsTestPage implements OnInit {\n\n private _items = deepCopy(FAKE_ENTITIES);\n private _$items = new BehaviorSubject<EntityTestClass[]>(undefined);\n\n form: FormGroup;\n autocompleteFields = new MatAutocompleteConfigHolder();\n\n constructor(\n protected formBuilder: FormBuilder\n ) {\n this.form = formBuilder.group({\n entity: [null, SharedValidators.entity],\n entityInitial: [null, SharedValidators.entity],\n disableEntity: [null, SharedValidators.entity],\n });\n\n this.form.get('disableEntity').disable();\n }\n\n ngOnInit() {\n\n // From suggest\n this.autocompleteFields.add('entity-suggestFn', {\n suggestFn: (value, filter) => this.suggest(value, filter),\n attributes: ['label', 'name'],\n displayWith: this.entityToString\n });\n\n // From items\n this.autocompleteFields.add('entity-items', {\n items: FAKE_ENTITIES.slice(),\n attributes: ['label', 'name'],\n displayWith: this.entityToString\n });\n\n // From items\n this.autocompleteFields.add('entity-$items', {\n items: this._$items,\n attributes: ['label', 'name'],\n displayWith: this.entityToString\n });\n\n this.loadData();\n //setTimeout(() => this.loadData(), 1500);\n\n //\n setTimeout(() => this.loadItems(), 1000);\n }\n\n // Load the form with data\n async loadData() {\n const data = {\n entity: [],\n\n // THis item is NOT in the items list => i should be displayed anyway\n entityInitial: FAKE_ENTITIES.slice(1, 2),\n\n disableEntity: FAKE_ENTITIES.slice(1, 2)\n };\n\n this.form.setValue(data);\n }\n\n async loadItems() {\n this._$items.next(deepCopy(FAKE_ENTITIES));\n }\n\n entityToString(item: any) {\n return [item && item.label || undefined, item && item.name || undefined].filter(isNotNil).join(' - ');\n }\n\n async suggest(value: any, filter?: any): Promise<LoadResult<EntityTestClass>> {\n return suggestFromArray(this._items, value, {\n ...filter,\n searchAttributes: ['label', 'name']\n });\n }\n\n doSubmit(event) {\n\n console.debug('Validate form: ', this.form.value);\n }\n\n compareWithFn(o1: EntityTestClass, o2: EntityTestClass): boolean {\n return o1 && o2 && o1.id === o2.id;\n }\n /* -- protected methods -- */\n\n\n stringify(value: any) {\n return JSON.stringify(value);\n }\n}\n\n","import {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AutocompleteTestPage} from '../autocomplete/testing/autocomplete.test';\nimport {LatLongTestPage} from '../latlong/testing/latlong.test';\nimport {MaterialTestingPage} from './material.testing.page';\nimport {SharedMaterialModule} from '../material.module';\nimport {IonicModule} from '@ionic/angular';\nimport {CommonModule} from '@angular/common';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {SwipeTestPage} from '../swipe/testing/swipe.test';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {DateTimeTestPage} from '../datetime/testing/mat-date-time.test';\nimport {ChipsTestPage} from '../chips/testing/chips.test';\n\n\nconst routes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n component: MaterialTestingPage\n },\n {\n path: 'autocomplete',\n pathMatch: 'full',\n component: AutocompleteTestPage\n },\n {\n path: 'datetime',\n pathMatch: 'full',\n component: DateTimeTestPage\n },\n {\n path: 'latlong',\n pathMatch: 'full',\n component: LatLongTestPage\n },\n // {\n // path: 'numpad',\n // pathMatch: 'full',\n // component: NumpadTestPage\n // },\n {\n path: 'swipe',\n pathMatch: 'full',\n component: SwipeTestPage\n },\n {\n path: 'chips',\n pathMatch: 'full',\n component: ChipsTestPage\n }\n];\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n ReactiveFormsModule,\n SharedMaterialModule,\n TranslateModule.forChild(),\n RouterModule.forChild(routes)\n ],\n declarations: [\n MaterialTestingPage,\n DateTimeTestPage,\n AutocompleteTestPage,\n LatLongTestPage,\n // NumpadTestPage,\n SwipeTestPage,\n ChipsTestPage\n ],\n exports: [\n SharedMaterialModule,\n RouterModule,\n DateTimeTestPage,\n MaterialTestingPage,\n AutocompleteTestPage,\n LatLongTestPage,\n // NumpadTestPage,\n SwipeTestPage,\n ChipsTestPage\n ]\n})\nexport class MaterialTestingModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MaterialTestingModule} from './material/testing/material.testing.module';\nimport {TranslateModule} from '@ngx-translate/core';\n\n\n@NgModule({\n imports: [\n CommonModule,\n TranslateModule.forChild(),\n MaterialTestingModule\n ],\n exports: [\n MaterialTestingModule\n ]\n})\nexport class SharedTestingModule {\n}\n","import {Component, ViewChild} from '@angular/core';\nimport {ModalController} from '@ionic/angular';\nimport {AccountService} from '../../services/account.service';\nimport {RegisterForm} from '../form/form-register';\n\n@Component({\n selector: 'modal-register',\n templateUrl: 'modal-register.html',\n})\nexport class RegisterModal {\n\n sending = false;\n\n @ViewChild('form', { static: true }) private form: RegisterForm;\n\n constructor(private accountService: AccountService,\n public viewCtrl: ModalController) {\n }\n\n cancel() {\n console.debug('[register] cancelled');\n this.viewCtrl.dismiss();\n }\n\n async doSubmit(event?: any) {\n if (this.form.form.disabled || this.sending) return; // Skip\n if (!this.form.valid || !this.form.isEnd()) {\n this.form.markAsTouched();\n return;\n }\n\n this.sending = true;\n const data = this.form.value;\n\n this.form.disable();\n\n try {\n console.debug('[register] Sending registration to server...', data);\n const res = await this.accountService.register(data);\n\n console.debug('[register] Account registered!');\n await this.viewCtrl.dismiss();\n }\n catch (err) {\n this.form.error = err && err.message || err;\n this.form.enable();\n }\n finally {\n this.sending = false;\n }\n }\n}\n","import {Directive, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {Moment} from 'moment';\nimport {DateAdapter} from '@angular/material/core';\nimport {Subscription} from 'rxjs';\nimport {DateFormatPipe} from '../../shared/pipes/date-format.pipe';\nimport {AppFormUtils, IAppForm} from './form.utils';\nimport {LocalSettingsService} from '../services/local-settings.service';\nimport {\n MatAutocompleteConfigHolder, MatAutocompleteFieldAddOptions,\n MatAutocompleteFieldConfig\n} from '../../shared/material/autocomplete/material.autocomplete';\nimport {WaitForOptions} from '../../shared/observables';\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class AppForm<T> implements IAppForm, OnInit, OnDestroy {\n\n private _subscription = new Subscription();\n private _form: FormGroup;\n protected _enable = false;\n protected _loading = true;\n\n autocompleteHelper: MatAutocompleteConfigHolder;\n autocompleteFields: {[key: string]: MatAutocompleteFieldConfig};\n error: string = null;\n\n @Input() debug = false;\n @Input() tabindex: number;\n\n get value(): any {\n return this.form.value;\n }\n\n set value(data: any) {\n this.setValue(data);\n }\n\n get dirty(): boolean {\n return this.form && this.form.dirty;\n }\n\n get invalid(): boolean {\n return !this.form || this.form.invalid;\n }\n\n get pending(): boolean {\n return !this.form || (this.form.dirty && this.form.pending);\n }\n\n get valid(): boolean {\n return this.form && this.form.valid;\n }\n\n get empty(): boolean {\n return !this.form || (!this.form.dirty && !this.form.touched);\n }\n\n get untouched(): boolean {\n return !this.form || this.form.untouched;\n }\n\n get enabled(): boolean {\n return this._enable;\n }\n\n get disabled(): boolean {\n return !this._enable;\n }\n\n disable(opts?: {\n onlySelf?: boolean;\n emitEvent?: boolean;\n }): void {\n this.form?.disable(opts);\n if (this._enable) {\n this._enable = false;\n if (!opts || opts.emitEvent !== true) this.markForCheck();\n }\n }\n\n enable(opts?: {\n onlySelf?: boolean;\n emitEvent?: boolean;\n }): void {\n this.form?.enable(opts);\n if (!this._enable) {\n this._enable = true;\n if (!opts || opts.emitEvent !== true) this.markForCheck();\n }\n }\n\n @Input()\n set form(value: FormGroup) {\n this.setForm(value);\n }\n\n get form(): FormGroup {\n return this._form;\n }\n\n @Output()\n onCancel = new EventEmitter<any>();\n\n @Output()\n onSubmit = new EventEmitter<any>();\n\n protected constructor(\n protected dateAdapter: DateAdapter<Moment> | DateFormatPipe,\n form?: FormGroup,\n protected settings?: LocalSettingsService\n ) {\n if (form) this.setForm(form);\n this.autocompleteHelper = new MatAutocompleteConfigHolder(settings && {\n getUserAttributes: (a, b) => settings.getFieldDisplayAttributes(a, b)\n });\n this.autocompleteFields = this.autocompleteHelper.fields;\n }\n\n ngOnInit() {\n this._enable ? this.enable() : this.disable();\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n this.onCancel.complete();\n this.onCancel.unsubscribe();\n this.onSubmit.complete();\n this.onSubmit.unsubscribe();\n }\n\n cancel() {\n this.onCancel.emit();\n }\n\n doSubmit(event: any) {\n if (!this.form || !this.form.valid) {\n this.markAllAsTouched({emitEvent: true});\n return;\n }\n this.onSubmit.emit(event);\n }\n\n setForm(form: FormGroup) {\n if (this._form !== form) {\n this._form = form;\n this._subscription.add(\n this._form.statusChanges.subscribe(status => this.markForCheck()));\n }\n }\n\n setValue(data: T, opts?: {emitEvent?: boolean; onlySelf?: boolean }) {\n if (!data) {\n console.warn('[form] Trying to set an empty value to form. Skipping');\n return;\n }\n\n if (this.debug) console.debug('[form] Updating form (using entity)', data);\n\n // Convert object to json, then apply it to form (e.g. convert 'undefined' into 'null')\n AppFormUtils.copyEntity2Form(data, this.form, {emitEvent: false, onlySelf: true, ...opts});\n\n if (!opts || opts.emitEvent !== true) this.markForCheck();\n }\n\n reset(data?: T, opts?: {emitEvent?: boolean; onlySelf?: boolean }) {\n if (data) {\n if (this.debug) console.debug('[form] Resetting form (using entity)', data);\n\n // Convert object to json, then apply it to form (e.g. convert 'undefined' into 'null')\n const json = AppFormUtils.getFormValueFromEntity(data, this.form);\n this.form.reset(json, {emitEvent: false, onlySelf: true});\n }\n else {\n this.form.reset(null, {emitEvent: false, onlySelf: true});\n }\n\n if (!opts || opts.emitEvent !== true) this.markForCheck();\n }\n\n markAsPristine(opts?: {onlySelf?: boolean; emitEvent?: boolean;}) {\n this.form.markAsPristine(opts);\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n\n markAsUntouched(opts?: {onlySelf?: boolean; emitEvent?: boolean;}) {\n this.form.markAsUntouched(opts);\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n\n /**\n * @deprecated prefer to use markAllAsTouched()\n * @param opts\n */\n markAsTouched(opts?: {onlySelf?: boolean; emitEvent?: boolean;}) {\n // this.form.markAllAsTouched() // This is not working well (e.g. in TripForm)\n console.warn('TODO: Replace this call by markAllAsTouched() - because of changes in ngx-components >= 0.16.0');\n AppFormUtils.markAsTouched(this.form, opts);\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n\n markAllAsTouched(opts?: { emitEvent?: boolean }) {\n // this.form.markAllAsTouched() // This is not working well (e.g. in TripForm)\n AppFormUtils.markAllAsTouched(this.form, opts);\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n\n markAsDirty(opts?: {onlySelf?: boolean; emitEvent?: boolean;}) {\n this.form.markAsDirty(opts);\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n\n markAsLoading(opts?: {onlySelf?: boolean; emitEvent?: boolean;}) {\n if (!this._loading) {\n this._loading = true;\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n }\n\n markAsLoaded(opts?: {onlySelf?: boolean; emitEvent?: boolean;}) {\n if (this._loading) {\n this._loading = false;\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n }\n\n /**\n * Wait form is idle (not loading)\n * @param opts\n */\n waitIdle(opts?: WaitForOptions): Promise<boolean> {\n return AppFormUtils.waitIdle(this, opts);\n }\n\n updateValueAndValidity(opts?: {\n onlySelf?: boolean;\n emitEvent?: boolean;\n }) {\n AppFormUtils.updateValueAndValidity(this.form, opts);\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n\n /* -- protected methods -- */\n\n protected registerSubscription(sub: Subscription): Subscription {\n return this._subscription.add(sub);\n }\n\n protected registerAutocompleteField<T = any, F = any>(fieldName: string,\n opts?: MatAutocompleteFieldAddOptions<T, F>): MatAutocompleteFieldConfig<T, F> {\n return this.autocompleteHelper.add(fieldName, opts);\n }\n\n protected markForCheck() {\n // Should be override by subclasses\n console.warn('markForCheck() has been called, but is not overwritten by component ' + this.constructor.name);\n }\n\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, OnInit, Optional, Output} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {ModalController} from '@ionic/angular';\nimport {RegisterModal} from '../../register/modal/modal-register';\nimport {AuthData} from '../../services/account.service';\nimport {AuthTokenType, NetworkService} from '../../services/network.service';\nimport {LocalSettingsService} from '../../services/local-settings.service';\nimport {slideUpDownAnimation} from '../../../shared/material/material.animations';\nimport {PlatformService} from '../../services/platform.service';\nimport {DateAdapter} from '@angular/material/core';\nimport {Moment} from 'moment';\nimport {debounceTime} from 'rxjs/operators';\nimport {AppForm} from '../../form/form.class';\nimport {ENVIRONMENT} from '../../../../environments/environment.class';\nimport {CORE_CONFIG_OPTIONS} from '../../services/config/core.config';\nimport {ConfigService} from '../../services/config.service';\n\n\n@Component({\n selector: 'app-form-auth',\n templateUrl: 'form-auth.html',\n styleUrls: ['./form-auth.scss'],\n animations: [slideUpDownAnimation],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AuthForm extends AppForm<AuthData> implements OnInit {\n\n loading = false;\n readonly mobile: boolean;\n canWorkOffline = false;\n showPwd = false;\n canRegister: boolean;\n usernamePlaceholder: string;\n\n @Output() onCancel = new EventEmitter<any>();\n @Output() onSubmit = new EventEmitter<AuthData>();\n\n disable(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(opts);\n this.showPwd = false; // Hide pwd when disable (e.g. when submitted)\n }\n\n constructor(\n platform: PlatformService,\n dateAdapter: DateAdapter<Moment>,\n formBuilder: FormBuilder,\n settings: LocalSettingsService,\n private configService: ConfigService,\n private modalCtrl: ModalController,\n public network: NetworkService,\n private cd: ChangeDetectorRef,\n @Optional() @Inject(ENVIRONMENT) protected environment\n ) {\n super(dateAdapter,\n formBuilder.group({\n username: [null, Validators.required],\n password: [null, Validators.required],\n offline: [network.offline]\n }), settings);\n\n this.mobile = platform.mobile;\n this.canWorkOffline = this.settings.hasOfflineFeature();\n this._enable = true;\n\n }\n\n ngOnInit() {\n super.ngOnInit();\n\n // Load config, to set username's label and validator\n this.registerSubscription(\n this.configService.config.subscribe(config => {\n // Set the username placeholder, with email or username\n const tokenType = config.getProperty(CORE_CONFIG_OPTIONS.AUTH_TOKEN_TYPE) as AuthTokenType;\n if (tokenType === 'token') {\n this.usernamePlaceholder = 'USER.EMAIL';\n this.form.get('username').setValidators(Validators.compose([Validators.required, Validators.email]));\n }\n else {\n this.usernamePlaceholder = 'USER.USERNAME';\n this.form.get('username').setValidators(Validators.required);\n }\n\n // Enable/disable registration link\n this.canRegister = config.getProperty(CORE_CONFIG_OPTIONS.REGISTRATION_ENABLE);\n\n this.markForCheck();\n })\n );\n\n // For DEV only\n if (this.environment && this.environment.production === false && this.environment.defaultAuthValues) {\n // Set the default user, for testing.\n // Override using environment, if any\n this.form.patchValue(this.environment.defaultAuthValues);\n }\n }\n\n cancel() {\n this.onCancel.emit();\n }\n\n doSubmit(event?: UIEvent) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.form.invalid || this.loading) return;\n\n this.loading = true;\n const data = this.form.value;\n this.showPwd = false; // Hide password\n this.error = null; // Reset error\n\n this.registerSubscription(\n this.onSubmit\n .pipe(debounceTime(500))\n .subscribe(res => this.loading = false));\n\n setTimeout(() => this.onSubmit.emit({\n username: data.username,\n password: data.password,\n offline: data.offline\n }));\n }\n\n register() {\n this.onCancel.emit();\n setTimeout(async () => {\n const modal = await this.modalCtrl.create({\n component: RegisterModal,\n backdropDismiss: false\n });\n return modal.present();\n }, 200);\n }\n\n /* -- protected functions -- */\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild, OnInit} from '@angular/core';\nimport {ModalController} from '@ionic/angular';\nimport {AccountService} from '../../services/account.service';\nimport {AuthForm} from '../form/form-auth';\nimport {firstNotNilPromise} from '../../../shared/observables';\nimport {ConfigService} from '../../services/config.service';\nimport {CORE_CONFIG_OPTIONS} from '../../services/config/core.config';\nimport {Configuration} from '../../services/model/config.model';\n\n@Component({\n templateUrl: 'modal-auth.html',\n styleUrls: ['./modal-auth.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AuthModal {\n\n loading = false;\n\n @ViewChild('form', { static: true }) private form: AuthForm;\n\n constructor(private accountService: AccountService,\n private viewCtrl: ModalController,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n }\n\n cancel() {\n this.viewCtrl.dismiss();\n }\n\n async doSubmit(): Promise<any> {\n if (this.form.disabled) return;\n if (!this.form.valid) {\n this.form.markAsTouched();\n return;\n }\n this.loading = true;\n\n try {\n const data = this.form.value;\n\n // Disable the form\n this.form.disable();\n\n const account = await this.accountService.login(data);\n return this.viewCtrl.dismiss(account);\n }\n catch (err) {\n this.loading = false;\n this.form.error = err && err.message || err;\n this.markForCheck();\n\n // Enable the form\n this.form.enable();\n\n // Reset form error on next changes\n firstNotNilPromise(this.form.form.valueChanges).then(() => {\n this.form.error = null;\n this.markForCheck();\n });\n\n return;\n }\n }\n\n protected markForCheck() {\n this.changeDetectorRef.markForCheck();\n }\n}\n","import {Component, Inject, InjectionToken, OnDestroy, Optional} from '@angular/core';\nimport {ModalController} from '@ionic/angular';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {capitalizeFirstLetter} from '../../shared/functions';\nimport {Department} from '../services/model/department.model';\nimport {Person} from '../services/model/person.model';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ConfigService} from '../services/config.service';\nimport {Configuration} from '../services/model/config.model';\nimport {Observable, Subscription} from 'rxjs';\nimport {CORE_CONFIG_OPTIONS} from '../services/config/core.config';\nimport {environment} from '../../../environments/environment';\n\nexport const APP_ABOUT_DEVELOPERS = new InjectionToken<Partial<Department>[]>('aboutDevelopers');\nexport const APP_ABOUT_PARTNERS = new InjectionToken<Partial<Department>[]>('aboutPartners');\n\n@Component({\n selector: 'modal-about',\n styleUrls: ['./modal-about.scss'],\n templateUrl: './modal-about.html'\n})\nexport class AboutModal implements OnDestroy {\n\n readonly name: string;\n readonly version: string;\n readonly sourceUrl: string;\n readonly reportIssueUrl: string;\n readonly config$: Observable<Configuration>;\n forumUrl: string;\n helpUrl: string;\n\n private readonly _subscription = new Subscription();\n\n constructor(\n protected translate: TranslateService,\n protected modalController: ModalController,\n protected configService: ConfigService,\n @Optional() @Inject(ENVIRONMENT) protected environment,\n @Optional() @Inject(APP_ABOUT_DEVELOPERS) public developers: Partial<Department>[],\n @Optional() @Inject(APP_ABOUT_PARTNERS) public partners: Partial<Department>[]\n ) {\n this.name = translate.instant('APP_NAME');\n if (this.name === 'APP_NAME') {\n // Not translated: use name from the environnement\n this.name = environment && environment.name && capitalizeFirstLetter(environment.name) || undefined;\n }\n this.version = environment && environment.version;\n this.sourceUrl = environment && environment.sourceUrl;\n this.reportIssueUrl = environment && environment.reportIssueUrl;\n this.forumUrl = environment && environment.forumUrl;\n this.helpUrl = environment && environment.helpUrl;\n this.config$ = configService.config;\n\n this._subscription.add(\n this.config$.subscribe(config => this.setConfig(config))\n );\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n }\n\n async close() {\n await this.modalController.dismiss();\n }\n\n /* -- protected functions -- */\n\n protected setConfig(config?: Configuration) {\n this.forumUrl = config?.getProperty(CORE_CONFIG_OPTIONS.FORUM_URL) || this.environment.forumUrl;\n this.helpUrl = config?.getProperty(CORE_CONFIG_OPTIONS.HELP_URL) || this.environment.helpUrl;\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, InjectionToken, Input, OnInit, Optional, ViewChild} from '@angular/core';\nimport {AlertController, IonSplitPane, MenuController, ModalController} from '@ionic/angular';\n\nimport {Router} from '@angular/router';\nimport {Account} from '../services/model/account.model';\nimport {UserProfileLabel} from '../services/model/person.model';\nimport {Configuration} from '../services/model/config.model';\nimport {AccountService} from '../services/account.service';\nimport {AboutModal} from '../about/modal-about';\n\nimport {fadeInAnimation} from '../../shared/material/material.animations';\nimport {TranslateService} from '@ngx-translate/core';\nimport {isNotNilOrBlank} from '../../shared/functions';\nimport {BehaviorSubject, merge, Subscription} from 'rxjs';\nimport {ConfigService} from '../services/config.service';\nimport {mergeMap, tap} from 'rxjs/operators';\nimport {HammerSwipeEvent} from '../../shared/gesture/hammer.utils';\nimport {PlatformService} from '../services/platform.service';\nimport {IconRef} from '../../shared/types';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {MenuService} from './menu.service';\n\nexport interface MenuItem extends IconRef {\n title: string;\n path?: string;\n action?: string | any;\n icon?: string;\n matIcon?: string;\n profile?: UserProfileLabel;\n exactProfile?: UserProfileLabel;\n color?: string;\n cssClass?: string;\n // A config property, to enable the menu item\n ifProperty?: string;\n // A config property, to override the title\n titleProperty?: string;\n titleArgs?: {[key: string]: string};\n children?: MenuItem[];\n}\n\nexport class MenuItems {\n static checkIfVisible(item: MenuItem,\n accountService: AccountService,\n config: Configuration,\n opts?: {\n isLogin?: boolean;\n debug?: boolean;\n logPrefix?: string;\n }): boolean {\n opts = opts || {};\n if (item.profile) {\n const hasProfile = accountService.isLogin() && accountService.hasMinProfile(item.profile);\n if (!hasProfile) {\n if (opts.debug) console.debug(`${opts && opts.logPrefix || '[menu]'} Hide item '${item.title}': need the min profile '${item.profile}' to access path '${item.path}'`);\n return false;\n }\n }\n\n else if (item.exactProfile) {\n const hasExactProfile = accountService.hasExactProfile(item.exactProfile);\n if (!hasExactProfile) {\n if (opts.debug) console.debug(`${opts && opts.logPrefix || '[menu]'} Hide item '${item.title}': need exact profile '${item.exactProfile}' to access path '${item.path}'`);\n return false;\n }\n }\n\n // If enable by config\n if (item.ifProperty) {\n //console.debug(\"[menu] Checking if property enable ? \" + item.ifProperty, config && config.properties);\n const isEnableByConfig = config && config.properties[item.ifProperty] === 'true';\n if (!isEnableByConfig) {\n if (opts.debug) console.debug('[menu] Config property \\'' + item.ifProperty + '\\' not \\'true\\' for ', item.path);\n return false;\n }\n }\n\n return true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n InjectionToken,\n OnDestroy,\n Optional\n} from '@angular/core';\nimport {ModalController, ToastController} from '@ionic/angular';\nimport {RegisterModal} from '../register/modal/modal-register';\nimport {BehaviorSubject, Subscription} from 'rxjs';\nimport {AccountService} from '../services/account.service';\nimport {Account, accountToString} from '../services/model/account.model';\nimport {Configuration} from '../services/model/config.model';\nimport {Department} from '../services/model/department.model';\nimport {APP_LOCALES, LocaleConfig, LocalSettings} from '../services/model/settings.model';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ConfigService} from '../services/config.service';\nimport {PlatformService} from '../services/platform.service';\nimport {LocalSettingsService} from '../services/local-settings.service';\nimport {debounceTime, distinctUntilChanged, map, startWith} from 'rxjs/operators';\nimport {AuthModal} from '../auth/modal/modal-auth';\nimport {NetworkService} from '../services/network.service';\nimport {MenuItem, MenuItems} from '../menu/menu.model';\nimport {ShowToastOptions, Toasts} from '../../shared/toasts';\nimport {fadeInAnimation, slideUpDownAnimation} from '../../shared/material/material.animations';\nimport {isNotNil, isNotNilOrBlank} from '../../shared/functions';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {HistoryPageReference} from '../services/model/history.model';\nimport {CORE_CONFIG_OPTIONS} from '../services/config/core.config';\n\nexport function getRandomImage(files: String[]) {\n const imgIndex = Math.floor(Math.random() * files.length);\n return files[imgIndex];\n}\n\nexport const APP_HOME_BUTTONS = new InjectionToken<MenuItem[]>('homeButton');\n\n@Component({\n moduleId: module.id.toString(),\n selector: 'app-page-home',\n templateUrl: 'home.html',\n styleUrls: ['./home.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [fadeInAnimation, slideUpDownAnimation]\n})\nexport class HomePage implements OnDestroy {\n\n private readonly _debug: boolean;\n private _started = false;\n private _subscription = new Subscription();\n private _config: Configuration;\n\n loading = true;\n waitingNetwork = false;\n showSpinner = true;\n accountName: String = '';\n isLogin: boolean;\n $partners = new BehaviorSubject<Department[]>(null);\n loadingBanner = true;\n logo: String;\n description: String;\n appName: string;\n isWeb: boolean;\n canRegister: boolean;\n contentStyle: any;\n pageHistory: HistoryPageReference[] = [];\n offline: boolean;\n $filteredButtons = new BehaviorSubject<MenuItem[]>(undefined);\n\n get currentLocaleCode(): string {\n return this.loading ? '' :\n (this.translate.currentLang || this.translate.defaultLang).substr(0, 2);\n }\n\n constructor(\n private accountService: AccountService,\n private modalCtrl: ModalController,\n private translate: TranslateService,\n private toastController: ToastController,\n private configService: ConfigService,\n private platform: PlatformService,\n private cd: ChangeDetectorRef,\n public network: NetworkService,\n public settings: LocalSettingsService,\n @Inject(ENVIRONMENT) protected environment,\n @Inject(APP_LOCALES) public locales: LocaleConfig[],\n @Optional() @Inject(APP_HOME_BUTTONS) public buttons: MenuItem[]\n ) {\n\n this._debug = !environment.production;\n this.showSpinner = !this.platform.started;\n this.platform.ready().then(() => this.start());\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n }\n\n async login() {\n const modal = await this.modalCtrl.create({\n component: AuthModal\n });\n return modal.present();\n }\n\n async register() {\n const modal = await this.modalCtrl.create({\n component: RegisterModal,\n backdropDismiss: false\n });\n return modal.present();\n }\n\n async logout(event: any) {\n await this.accountService.logout();\n\n // If was offline, try to reconnect (because can be a forced offline mode)\n if (this.offline) {\n await this.tryOnline();\n }\n }\n\n changeLanguage(locale: string) {\n this.settings.apply({locale})\n .then(() => {\n this.markForCheck();\n });\n }\n\n getPagePath(page: HistoryPageReference) {\n return page && page.path;\n }\n\n\n tryOnline() {\n this.waitingNetwork = true;\n this.markForCheck();\n\n this.network.tryOnline({\n showLoadingToast: false,\n showOnlineToast: true,\n showOfflineToast: false\n })\n .then(() => {\n this.waitingNetwork = false;\n this.markForCheck();\n });\n\n }\n\n /* -- protected method -- */\n\n protected async start() {\n await this.accountService.ready();\n\n this.isLogin = this.accountService.isLogin();\n if (this.isLogin) {\n this.onLogin(this.accountService.account);\n }\n\n this.offline = this.network.offline;\n\n // Listen login/logout events\n this._subscription.add(this.accountService.onLogin.subscribe(account => this.onLogin(account)));\n this._subscription.add(this.accountService.onLogout.subscribe(() => this.onLogout()));\n\n // Listen pod config\n this._subscription.add(this.configService.config.subscribe(config => this.onConfigLoaded(config)));\n\n // Listen settings changes\n this._subscription.add(\n this.settings.onChange\n .pipe(\n // Add a delay, to avoid to apply changes to often\n debounceTime(3000),\n // Start with current settings\n startWith(await this.settings.ready())\n )\n .subscribe(res => this.onSettingsChanged(res)));\n\n // Listen network changes\n this._subscription.add(\n this.network.onNetworkStatusChanges\n .pipe(\n //debounceTime(450),\n //tap(() => this.waitingNetwork = false),\n map(connectionType => connectionType === 'none'),\n distinctUntilChanged()\n )\n .subscribe(offline => {\n this.offline = offline;\n this.markForCheck();\n })\n );\n\n this._started = true;\n }\n\n protected async showToast(opts: ShowToastOptions) {\n await Toasts.show(this.toastController, this.translate, opts);\n }\n\n protected onConfigLoaded(config: Configuration) {\n console.debug('[home] Applying configuration', config);\n this._config = config;\n\n this.appName = config.label || this.environment.defaultAppName || 'SUMARiS';\n this.logo = config.largeLogo || config.smallLogo || undefined;\n this.description = config.name;\n this.isWeb = this.platform.isWebOrDesktop();\n this.canRegister = config.getPropertyAsBoolean(CORE_CONFIG_OPTIONS.REGISTRATION_ENABLE);\n\n const partners = (config.partners || []).filter(p => p && p.logo);\n this.$partners.next(partners);\n this.loadingBanner = (partners.length === 0);\n\n // If not already set, compute the background image\n if (!this.contentStyle) {\n const backgroundImages = (config.backgroundImages || [])\n // Filter on not nil, because can occur if detected has not exists (see config-service.js)\n .filter(img => isNotNil(img)\n // If offline, filter on local dataURL image\n && (!this.offline || !img.startsWith('http')));\n\n // Background image found: select one randomly\n if (backgroundImages.length) {\n const bgImage = getRandomImage(backgroundImages);\n this.contentStyle = bgImage && {'background-image': `url(${bgImage})`} || {};\n }\n\n // Use background color\n else {\n const primaryColor = config.properties && config.properties['sumaris.color.primary'] || 'var(--ion-color-primary)';\n this.contentStyle = primaryColor && {'background-color': primaryColor} || {};\n }\n }\n\n this.refreshButtons();\n this.markForCheck();\n\n // If first load, hide the loading indicator\n if (this.loading) {\n setTimeout(() => {\n this.loading = false;\n this.markForCheck();\n }, 500); // Add a delay, for animation\n }\n }\n\n protected onSettingsChanged(settings: LocalSettings) {\n if (settings.pageHistory !== this.pageHistory) {\n console.debug('[home] Page history loaded');\n this.pageHistory = settings.pageHistory || [];\n }\n // Always force a refresh (same history array, but content may have changed)\n this.markForCheck();\n }\n\n protected onLogin(account: Account) {\n if (!account) return; // Skip\n //console.debug('[home] Logged account: ', account);\n this.isLogin = true;\n this.accountName = accountToString(account);\n this.refreshButtons();\n this.markForCheck();\n }\n\n protected onLogout() {\n this.isLogin = false;\n this.accountName = '';\n this.pageHistory = [];\n this.refreshButtons();\n this.markForCheck();\n }\n\n protected refreshButtons() {\n if (!this._config) return; // Skip (waiting config to be loaded)\n if (this._debug) console.debug('[home] Refreshing buttons...');\n\n const filteredButtons = (this.buttons || [])\n .filter((item) => MenuItems.checkIfVisible(item, this.accountService, this._config, {\n isLogin: this.isLogin,\n debug: this._debug,\n logPrefix: '[home]'\n }))\n .map(item => {\n // Replace title using properties\n if (isNotNilOrBlank(item.titleProperty) && this._config) {\n const title = this._config.properties[item.titleProperty];\n if (title) return { ...item, title}; // Create a copy, to keep the original item.title\n }\n return item;\n });\n\n this.$filteredButtons.next(filteredButtons);\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n\n}\n","import {Component, OnDestroy} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ActivatedRoute} from '@angular/router';\nimport {AccountService} from '../../services/account.service';\nimport {getRandomImage} from '../../home/home';\nimport {ConfigService} from '../../services/config.service';\nimport {PlatformService} from '../../services/platform.service';\n\n@Component({\n selector: 'page-register-confirm',\n templateUrl: 'confirm.html',\n styleUrls: ['./confirm.scss']\n})\nexport class RegisterConfirmPage implements OnDestroy {\n\n subscriptions: Subscription[] = [];\n\n isLogin: boolean;\n loading = true;\n error: string;\n email: string;\n contentStyle = {};\n\n constructor(\n private platform: PlatformService,\n private accountService: AccountService,\n private activatedRoute: ActivatedRoute,\n private configService: ConfigService) {\n\n this.platform.ready().then(() => {\n this.isLogin = accountService.isLogin();\n\n // Subscriptions\n this.subscriptions.push(this.accountService.onLogin.subscribe(account => this.isLogin = true));\n this.subscriptions.push(this.accountService.onLogout.subscribe(() => this.isLogin = false));\n this.subscriptions.push(this.activatedRoute.paramMap.subscribe(params =>\n this.doConfirm(params.get('email'), params.get('code'))\n ));\n\n this.configService.config.subscribe(config => {\n\n if (config && config.backgroundImages && config.backgroundImages.length) {\n const bgImage = getRandomImage(config.backgroundImages);\n this.contentStyle = {'background-image': `url(${bgImage})`};\n } else {\n const primaryColor = config.properties && config.properties['sumaris.color.primary'] || '#144391';\n this.contentStyle = {'background-color': primaryColor};\n }\n\n this.loading = false;\n });\n });\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n this.subscriptions = [];\n }\n\n async doConfirm(email: string, code: string) {\n this.email = email;\n\n if (!code) {\n this.loading = false;\n this.error = undefined;\n return;\n }\n\n try {\n if (this.accountService.isLogin()) {\n const account = this.accountService.account;\n const emailAccount = account && account.email;\n if (email != emailAccount) {\n // Not same email => logout, then retry\n await this.accountService.logout();\n return this.doConfirm(email, code);\n }\n }\n\n // Send the confirmation code\n const confirmed = await this.accountService.confirmEmail(email, code);\n if (confirmed && this.isLogin) {\n await this.accountService.refresh();\n }\n this.loading = false;\n //this.location.replaceState(\"/confirm/\" + email + \"/\");\n }\n catch (err) {\n this.error = err && err.message || err;\n this.loading = false;\n }\n\n }\n}\n","import {ValidatorService} from '@e-is/ngx-material-table';\nimport {AbstractControl, FormBuilder, FormGroup} from '@angular/forms';\nimport {IValidatorService} from '../../../shared/services/validator-service.class';\nimport {Directive} from '@angular/core';\nimport {AppFormUtils, FormErrors} from '../../form/form.utils';\nimport {changeCaseToUnderscore, isEmptyArray} from '../../../shared/functions';\nimport {TranslateService} from '@ngx-translate/core';\n\n@Directive()\nexport abstract class AppValidatorService<T = any>\n extends ValidatorService\n implements IValidatorService<T> {\n\n protected constructor(\n protected formBuilder: FormBuilder,\n protected translate?: TranslateService\n ) {\n super();\n }\n\n getRowValidator(): FormGroup {\n return this.getFormGroup();\n }\n\n getFormGroup(data?: T): FormGroup {\n return this.formBuilder.group(this.getFormGroupConfig(data));\n }\n\n getFormGroupConfig(data?: T): { [key: string]: any} {\n return {};\n }\n\n getI18nFormErrors(control: AbstractControl): string[] {\n const errors = AppFormUtils.getFormErrors(control);\n return this.getI18nErrors(errors);\n }\n\n getI18nErrors(errors: FormErrors): string[] {\n return Object.keys(errors || {}).map(errorKey => this.getI18nError(errorKey, errors[errorKey]));\n }\n\n protected getI18nError(errorKey: string, errorContent?: any): string {\n const i18nKey = 'ERROR.FIELD_' + changeCaseToUnderscore(errorKey).toUpperCase();\n const i18nMessage = this.translate.instant(i18nKey, errorContent);\n if (i18nKey !== i18nMessage) return i18nMessage;\n if (typeof errorContent === 'string') return errorContent;\n\n // Not translated: show error\n console.error(`[validator] Cannot translate error key '${errorKey}'. Please override translateError() in your validator`);\n\n return changeCaseToUnderscore(errorKey);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {UserSettings} from '../model/settings.model';\nimport {AppValidatorService} from './base.validator.class';\n\n@Injectable({providedIn: 'root'})\nexport class UserSettingsValidatorService extends AppValidatorService<UserSettings> {\n\n constructor(\n formBuilder: FormBuilder\n ) {\n super(formBuilder);\n }\n\n getFormGroup(data?: UserSettings): FormGroup {\n return this.formBuilder.group({\n id: [data && data.id || null],\n updateDate: [data && data.updateDate || null],\n locale: [data && data.locale || null, Validators.required],\n latLongFormat: [data && data.latLongFormat || null, Validators.required],\n content: this.formBuilder.group({\n //usageMode: [data && data.content && data.content.usageMode || 'DESK', Validators.required],\n }),\n nonce: [data && data.nonce || null]\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {FormBuilder, ValidatorFn, Validators} from '@angular/forms';\nimport {Account} from '../model/account.model';\nimport {PersonUtils} from '../model/person.model';\nimport {StatusIds} from '../model/model.enum';\nimport {AccountService} from '../account.service';\nimport {SharedValidators} from '../../../shared/validator/validators';\nimport {FormFieldDefinition} from '../../../shared/form/field.model';\nimport {AppValidatorService} from './base.validator.class';\n\n@Injectable({providedIn: 'root'})\nexport class AccountValidatorService extends AppValidatorService<Account> {\n\n constructor(\n protected formBuilder: FormBuilder,\n protected accountService: AccountService\n ) {\n super(formBuilder);\n }\n\n getFormGroupConfig(data?: Account): any {\n const formDef = {\n id: [''],\n updateDate: [''],\n creationDate: [''],\n lastName: [data && data.lastName || null, Validators.compose([Validators.required, Validators.minLength(2)])],\n firstName: [data && data.firstName || null, Validators.compose([Validators.required, Validators.minLength(2)])],\n email: [data && data.email || null, Validators.compose([Validators.required, Validators.email])],\n mainProfile: [data && (data.mainProfile || PersonUtils.getMainProfile(data.profiles)) || 'GUEST', Validators.required],\n statusId: [data && data.statusId || StatusIds.TEMPORARY, Validators.required],\n pubkey: [data && data.pubkey || null, Validators.compose([Validators.required, SharedValidators.pubkey])]\n };\n\n // Add additional fields\n this.accountService.additionalFields.forEach(field => {\n //console.debug(\"[register-form] Add additional field {\" + field.name + \"} to form\", field);\n formDef[field.key] = [data && data[field.key] || null, this.getValidators(field)];\n });\n\n return formDef;\n }\n\n getValidators(field: FormFieldDefinition): ValidatorFn | ValidatorFn[] {\n const validatorFns: ValidatorFn[] = [];\n if (field.extra && field.extra.account && field.extra.account.required) {\n validatorFns.push(Validators.required);\n }\n if (field.type === 'entity') {\n validatorFns.push(SharedValidators.entity);\n }\n\n return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {AccountService} from '../services/account.service';\nimport {Account} from '../services/model/account.model';\nimport {UserSettingsValidatorService} from '../services/validator/user-settings.validator';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {AccountValidatorService} from '../services/validator/account.validator';\nimport {AppForm} from '../form/form.class';\nimport {Moment} from 'moment';\nimport {DateAdapter} from '@angular/material/core';\nimport {AppFormUtils} from '../form/form.utils';\nimport {TranslateService} from '@ngx-translate/core';\nimport {FormFieldDefinition} from '../../shared/form/field.model';\nimport {LocalSettingsService} from '../services/local-settings.service';\nimport {LAT_LONG_PATTERNS} from '../../shared/material/latlong/latlong.utils';\nimport {StatusIds} from '../services/model/model.enum';\nimport {APP_LOCALES, LocaleConfig} from '../services/model/settings.model';\nimport {Router} from '@angular/router';\n\n@Component({\n selector: 'app-page-account',\n templateUrl: 'account.html',\n styleUrls: ['./account.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AccountPage extends AppForm<Account> implements OnDestroy {\n\n loading = true;\n isLogin: boolean;\n changesSubscription: Subscription;\n account: Account;\n email: any = {\n confirmed: false,\n notConfirmed: false,\n sending: false,\n error: undefined\n };\n additionalFields: FormFieldDefinition[];\n settingsForm: FormGroup;\n settingsContentForm: FormGroup;\n locales: LocaleConfig[];\n latLongFormats = LAT_LONG_PATTERNS;\n saving = false;\n submitted = false;\n\n constructor(\n protected dateAdapter: DateAdapter<Moment>,\n protected router: Router,\n public formBuilder: FormBuilder,\n public accountService: AccountService,\n protected validatorService: AccountValidatorService,\n protected settingsValidatorService: UserSettingsValidatorService,\n protected translate: TranslateService,\n protected settings: LocalSettingsService,\n protected cd: ChangeDetectorRef,\n @Inject(APP_LOCALES) locales\n ) {\n super(dateAdapter, validatorService.getFormGroup(accountService.account), settings);\n\n this.locales = locales;\n\n // Add settings fo form\n this.settingsForm = settingsValidatorService.getFormGroup(accountService.account && accountService.account.settings);\n this.settingsContentForm = (this.settingsForm.controls['content'] as FormGroup);\n this.form.addControl('settings', this.settingsForm);\n\n // By default, disable the form\n this.disable();\n\n // Observed some events\n this.registerSubscription(this.accountService.onLogin.subscribe(account => this.onLogin(account)));\n this.registerSubscription(this.accountService.onLogout.subscribe(() => this.onLogout()));\n this.registerSubscription(this.onCancel.subscribe(() => {\n this.setValue(this.accountService.account);\n this.markAsPristine();\n }));\n\n this.registerSubscription(this.accountService.$additionalFields.subscribe((additionalFields) => {\n this.additionalFields = additionalFields.slice();\n if (accountService.isLogin()) {\n this.onLogin(this.accountService.account);\n }\n else {\n this.loading = false;\n }\n }));\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.stopListenChanges();\n }\n\n onLogin(account: Account) {\n console.debug('[account] Logged account: ', account);\n this.isLogin = true;\n\n this.setValue(account);\n\n this.email.confirmed = account && account.email && (account.statusId !== StatusIds.TEMPORARY);\n this.email.notConfirmed = account && account.email && (!account.statusId || account.statusId === StatusIds.TEMPORARY);\n\n this.enable();\n this.markAsPristine();\n\n this.startListenChanges();\n\n this.loading = false;\n }\n\n onLogout() {\n this.isLogin = false;\n this.email.confirmed = false;\n this.email.notConfirmed = false;\n this.email.sending = false;\n this.email.error = undefined;\n this.form.reset();\n this.disable();\n\n this.stopListenChanges();\n\n // Back to home\n this.router.navigateByUrl('/');\n }\n\n async refresh(event?: UIEvent) {\n\n this.disable();\n this.loading = true;\n\n return this.accountService.refresh();\n }\n\n startListenChanges() {\n if (this.changesSubscription) return; // already started\n this.changesSubscription = this.accountService.listenChanges();\n }\n\n stopListenChanges() {\n if (!this.changesSubscription) return;\n this.changesSubscription.unsubscribe();\n this.changesSubscription = undefined;\n }\n\n async sendConfirmationEmail(event: MouseEvent) {\n const json = this.form.value;\n json.email = this.form.controls['email'].value;\n if (!json.email || !this.email.notConfirmed) {\n event.preventDefault();\n return false;\n }\n\n this.email.sending = true;\n console.debug('[account] Sending confirmation email...');\n try {\n await this.accountService.sendConfirmationEmail(\n json.email,\n json.settings && json.settings.locale || this.translate.currentLang\n );\n console.debug('[account] Confirmation email sent.');\n this.email.sending = false;\n }\n catch (err) {\n this.email.sending = false;\n this.email.error = err && err.message || err;\n }\n }\n\n async save(event: MouseEvent) {\n if (this.saving) return;\n\n await AppFormUtils.waitWhilePending(this.form);\n\n if (this.form.invalid) {\n AppFormUtils.logFormErrors(this.form);\n return;\n }\n\n this.submitted = true;\n this.saving = true;\n this.error = undefined;\n\n const newAccount = Account.fromObject({\n ...(this.accountService.account.asObject()),\n ...(this.form.value)\n });\n\n console.debug('[account] Saving account...', newAccount);\n try {\n this.disable();\n\n await this.accountService.save(newAccount);\n\n this.markAsPristine();\n }\n catch (err) {\n console.error(err);\n this.error = err && err.message || err;\n }\n finally {\n this.saving = false;\n this.enable();\n }\n }\n\n enable() {\n super.enable();\n\n // Some fields are always disable\n this.form.controls.email.disable();\n this.form.controls.mainProfile.disable();\n this.form.controls.pubkey.disable();\n\n // Always disable some additional fields\n this.additionalFields\n .filter(field => field.extra && field.extra.account && field.extra.account.disabled || false)\n .forEach(field => {\n this.form.controls[field.key].disable();\n });\n this.markForCheck();\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n}\n","import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core';\nimport {Entity} from '../services/model/entity.model';\n// import fade in animation\nimport {fadeInAnimation} from '../../shared/material/material.animations';\nimport {Moment} from 'moment';\nimport {toBoolean} from '../../shared/functions';\n\n@Component({\n selector: 'app-entity-metadata',\n templateUrl: './entity-metadata.component.html',\n styleUrls: ['./entity-metadata.component.scss'],\n animations: [fadeInAnimation],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityMetadataComponent {\n\n @Input() value: Entity<any> & {creationDate?: Date | Moment; recorderDepartment?: any; recorderPerson?: any};\n\n @Input() showRecorder = true;\n}\n","import {Component, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\nimport {Hotkeys} from '../../shared/hotkeys/hotkeys.service';\nimport {Subscription} from 'rxjs';\nimport {filter, tap} from 'rxjs/operators';\n\nexport abstract class FormButtonsBarToken {\n abstract onCancel: EventEmitter<Event>;\n abstract onSave: EventEmitter<Event>;\n abstract onNext: EventEmitter<Event>;\n abstract onBack: EventEmitter<Event>;\n}\n\n@Component({\n selector: 'app-form-buttons-bar',\n templateUrl: './form-buttons-bar.component.html',\n styleUrls: ['./form-buttons-bar.component.scss'],\n providers: [\n {provide: FormButtonsBarToken, useExisting: FormButtonsBarComponent}\n ],\n})\nexport class FormButtonsBarComponent implements FormButtonsBarToken, OnDestroy {\n\n private _subscription = new Subscription();\n\n @Input() disabled = false;\n @Input() disabledCancel = false;\n @Input() classList: string;\n\n @Output() onCancel = new EventEmitter<Event>();\n @Output() onSave = new EventEmitter<Event>();\n @Output() onNext = new EventEmitter<Event>();\n @Output() onBack = new EventEmitter<Event>();\n\n constructor(private hotkeys: Hotkeys) {\n\n this._subscription.add(\n hotkeys.addShortcut({keys: 'control.s', description: 'COMMON.BTN_SAVE'})\n .pipe(filter(e => !this.disabled))\n .subscribe((event) => this.onSave.emit(event)));\n\n // Ctrl+Z\n this._subscription.add(\n hotkeys.addShortcut({keys: 'control.z', description: 'COMMON.BTN_RESET'})\n .pipe(filter(e => !this.disabled && !this.disabledCancel))\n .subscribe((event) => this.onCancel.emit(event))\n );\n\n // Escape\n this._subscription.add(\n hotkeys.addShortcut({keys: 'escape', description: 'COMMON.BTN_CLOSE', preventDefault: false})\n .pipe(\n filter(e => !e.defaultPrevented),\n //tap(() => console.debug('[form-buttons-bar] Emit back event (keydown.escape)'))\n )\n .subscribe((event) => this.onBack.emit(event)));\n }\n\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n this.onCancel.complete();\n this.onSave.complete();\n this.onNext.complete();\n this.onBack.complete();\n }\n\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {ModalController, NavParams} from '@ionic/angular';\nimport {toBoolean} from '../../shared/functions';\n\nexport declare interface ColumnItem {\n name?: string;\n label: string;\n visible: boolean;\n canHide?: boolean;\n}\n\n@Component({\n selector: 'table-select-columns',\n templateUrl: './table-select-columns.component.html'\n})\nexport class TableSelectColumnsComponent implements OnInit {\n\n @Input() columns: ColumnItem[];\n\n @Input() canHideColumns = true;\n\n constructor(\n private navParams: NavParams,\n private viewCtrl: ModalController) {\n }\n\n ngOnInit() {\n this.columns = this.columns || this.navParams.data && this.navParams.data.columns || [];\n\n this.columns.forEach(c => {\n // If cannot hide columns, make sure all columns are set to visible\n c.visible = (this.canHideColumns === false && true/*always visible*/) || c.visible;\n c.canHide = toBoolean(c.canHide, this.canHideColumns);\n });\n }\n\n onRenderItems(event: CustomEvent<{ from: number; to: number; complete: () => {} }>) {\n const element = this.columns.splice(event.detail.from, 1)[0];\n this.columns.splice(event.detail.to, 0, element);\n event.detail.complete();\n }\n\n close() {\n this.viewCtrl.dismiss(this.columns);\n }\n\n cancel() {\n this.viewCtrl.dismiss();\n }\n}\n","import {Component, EventEmitter, Inject, OnInit, Output, ViewChild} from '@angular/core';\nimport {\n AbstractControl,\n AsyncValidatorFn,\n FormBuilder,\n FormControl,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {AccountService, RegisterData} from '../../services/account.service';\nimport {Account} from '../../services/model/account.model';\nimport {referentialToString} from '../../services/model/referential.model';\nimport {MatHorizontalStepper} from '@angular/material/stepper';\nimport {Observable, Subscription, timer} from 'rxjs';\nimport {AccountValidatorService} from '../../services/validator/account.validator';\nimport {FormFieldDefinition} from '../../../shared/form/field.model';\nimport {mergeMap} from 'rxjs/operators';\nimport {LocalSettingsService} from '../../services/local-settings.service';\nimport {MatAutocompleteConfigHolder} from '../../../shared/material/autocomplete/material.autocomplete';\nimport {ENVIRONMENT} from '../../../../environments/environment.class';\n\n\n@Component({\n selector: 'form-register',\n templateUrl: 'form-register.html',\n styleUrls: ['./form-register.scss']\n})\nexport class RegisterForm implements OnInit {\n\n protected debug = false;\n\n autocompleteHelper: MatAutocompleteConfigHolder;\n additionalFields: FormFieldDefinition[];\n form: FormGroup;\n forms: FormGroup[];\n subscriptions: Subscription[] = [];\n error: string;\n sending = false;\n\n showPwd = false;\n showConfirmPwd = false;\n\n @ViewChild('stepper', { static: true }) private stepper: MatHorizontalStepper;\n\n @Output()\n onCancel = new EventEmitter<any>();\n\n @Output()\n onSubmit = new EventEmitter<RegisterData>();\n\n constructor(\n private accountService: AccountService,\n private accountValidatorService: AccountValidatorService,\n public formBuilder: FormBuilder,\n @Inject(ENVIRONMENT) protected environment,\n protected settings?: LocalSettingsService\n ) {\n\n\n this.forms = [];\n // Email form\n this.forms.push(formBuilder.group({\n email: new FormControl(null, Validators.compose([Validators.required, Validators.email]), this.emailAvailability(this.accountService)),\n confirmEmail: new FormControl(null, Validators.compose([Validators.required, this.equalsValidator('email')]))\n }));\n\n // Password form\n this.forms.push(formBuilder.group({\n password: new FormControl(null, Validators.compose([Validators.required, Validators.minLength(8)])),\n confirmPassword: new FormControl(null, Validators.compose([Validators.required, this.equalsValidator('password')]))\n }));\n\n // Detail form\n const formDetailDef = {\n lastName: new FormControl(null, Validators.compose([Validators.required, Validators.minLength(2)])),\n firstName: new FormControl(null, Validators.compose([Validators.required, Validators.minLength(2)]))\n };\n\n // Prepare autocomplete settings\n this.autocompleteHelper = new MatAutocompleteConfigHolder(settings && {\n getUserAttributes: (a, b) => settings.getFieldDisplayAttributes(a, b)\n });\n\n\n // Add additional fields to details form\n this.additionalFields = this.accountService.additionalFields\n // Keep only required fields\n .filter(field => field.extra && field.extra.registration && field.extra.registration.required);\n this.additionalFields.forEach(field => {\n //if (this.debug) console.debug(\"[register-form] Add additional field {\" + field.name + \"} to form\", field);\n formDetailDef[field.key] = new FormControl(null, this.accountValidatorService.getValidators(field));\n\n if (field.type === 'entity') {\n field.autocomplete = this.autocompleteHelper.add(field.key, field.autocomplete);\n }\n\n });\n\n this.forms.push(formBuilder.group(formDetailDef));\n\n this.form = formBuilder.group({\n emailStep: this.forms[0],\n passwordStep: this.forms[1],\n detailsStep: this.forms[2]\n });\n }\n\n ngOnInit() {\n // For DEV only ------------------------\n if (!this.environment.production) {\n this.form.setValue({\n emailStep: {\n email: 'contact@e-is.pro',\n confirmEmail: 'contact@e-is.pro'\n },\n passwordStep: {\n password: 'contactera',\n confirmPassword: 'contactera'\n },\n detailsStep: {\n lastName: 'Lavenier 2',\n firstName: 'Benoit',\n department: null\n }\n });\n }\n }\n\n get value(): RegisterData {\n const result: RegisterData = {\n username: this.form.value.emailStep.email,\n password: this.form.value.passwordStep.password,\n account: new Account()\n };\n result.account.fromObject(this.form.value.detailsStep);\n result.account.email = result.username;\n\n return result;\n }\n\n get valid(): boolean {\n return this.form.valid;\n }\n\n isEnd(): boolean {\n return this.stepper.selectedIndex === 2;\n }\n\n isBeginning(): boolean {\n return this.stepper.selectedIndex === 0;\n }\n\n slidePrev() {\n return this.stepper.previous();\n }\n\n slideNext(event?: UIEvent) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n return this.stepper.next();\n }\n\n equalsValidator(otherControlName: string): ValidatorFn {\n return function(c: AbstractControl): ValidationErrors | null {\n if (c.parent && c.value !== c.parent.value[otherControlName]) {\n return {\n equals: true\n };\n }\n return null;\n };\n }\n\n emailAvailability(accountService: AccountService): AsyncValidatorFn {\n return function(control: AbstractControl): Observable<ValidationErrors | null> {\n\n return timer(500).pipe(mergeMap(() => accountService.checkEmailAvailable(control.value)\n .then(res => null)\n .catch(err => {\n console.error(err);\n return { availability: true };\n })));\n };\n }\n\n cancel() {\n this.onCancel.emit();\n }\n\n doSubmit(event?: any) {\n if (this.form.invalid) return;\n this.sending = true;\n this.onSubmit.emit(this.value);\n }\n\n referentialToString = referentialToString;\n\n markAsTouched() {\n this.form.markAsTouched();\n }\n\n disable() {\n this.form.disable();\n }\n\n enable() {\n this.form.enable();\n }\n}\n","import {NgModule} from '@angular/core';\nimport {HttpClientModule} from '@angular/common/http';\n\n@NgModule({\n imports: [\n HttpClientModule\n ],\n exports: [\n HttpClientModule\n ]\n})\nexport class AppGraphQLModule {\n\n constructor() {\n }\n}\n\n","import {Injectable} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup, ValidationErrors, Validators} from '@angular/forms';\nimport {EntityUtils} from '../model/entity.model';\nimport {LocalSettings} from '../model/settings.model';\nimport {SharedValidators} from '../../../shared/validator/validators';\nimport {NetworkService} from '../network.service';\nimport {AppValidatorService} from './base.validator.class';\n\n@Injectable({providedIn: 'root'})\nexport class LocalSettingsValidatorService extends AppValidatorService<LocalSettings> {\n\n constructor(\n formBuilder: FormBuilder,\n private networkService: NetworkService\n ) {\n super(formBuilder);\n }\n\n getFormGroup(data?: LocalSettings): FormGroup {\n return this.formBuilder.group({\n accountInheritance: [data && data.accountInheritance || true, Validators.required],\n locale: [data && data.locale || null, Validators.required],\n latLongFormat: [data && data.latLongFormat || null, Validators.required],\n usageMode: [data && data.usageMode || 'DESK', Validators.required],\n peerUrl: [data && data.peerUrl, Validators.required],\n properties: this.getPropertiesArray(data && data.properties)\n }, {\n asyncValidators: (group: FormGroup) => this.peerAlive(group.get('peerUrl'))\n });\n }\n\n getPropertiesArray(array?: any) {\n const properties = EntityUtils.getMapAsArray(array || {});\n return this.formBuilder.array(\n properties.map(item => this.getPropertyFormGroup(item))\n );\n }\n\n getPropertyFormGroup(data?: {key: string; value?: string}): FormGroup {\n return this.formBuilder.group({\n key: [data && data.key || null, Validators.compose([Validators.required, Validators.max(50)])],\n value: [data && data.value || null, Validators.compose([Validators.required, Validators.max(100)])]\n });\n }\n\n /* -- protected methods -- */\n\n protected async peerAlive(peerUrlControl: AbstractControl): Promise<ValidationErrors | null> {\n\n // Offline mode: no error\n if (this.networkService.offline) {\n SharedValidators.clearError(peerUrlControl, 'peerAlive');\n }\n else {\n const alive = await this.networkService.checkPeerAlive(peerUrlControl.value);\n // KO: add a validation error\n if (!alive) {\n const errors: ValidationErrors = peerUrlControl.errors || {};\n errors['peerAlive'] = true;\n peerUrlControl.setErrors(errors);\n peerUrlControl.markAsTouched({onlySelf: true});\n // Return the error (should be apply to the parent form)\n return { peerAlive: true};\n }\n // OK: remove the existing on control\n else {\n SharedValidators.clearError(peerUrlControl, 'peerAlive');\n }\n }\n }\n\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit} from '@angular/core';\nimport {AccountService} from '../services/account.service';\nimport {EntityUtils} from '../services/model/entity.model';\nimport {APP_LOCALES, LocaleConfig, LocalSettings, UsageMode} from '../services/model/settings.model';\nimport {Peer} from '../services/model/peer.model';\nimport {FormArray, FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport {AppForm} from '../form/form.class';\nimport {Moment} from 'moment';\nimport {DateAdapter} from '@angular/material/core';\nimport {AppFormUtils, FormArrayHelper} from '../form/form.utils';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ValidatorService} from '@e-is/ngx-material-table';\nimport {LocalSettingsValidatorService} from '../services/validator/local-settings.validator';\nimport {PlatformService} from '../services/platform.service';\nimport {NetworkService} from '../services/network.service';\nimport {isNil, isNilOrBlank, toBoolean} from '../../shared/functions';\nimport {LocalSettingsService} from '../services/local-settings.service';\nimport {FormFieldDefinition, FormFieldDefinitionMap} from '../../shared/form/field.model';\nimport {merge} from 'rxjs';\nimport {AlertController} from '@ionic/angular';\nimport {Alerts} from '../../shared/alerts';\nimport {Property} from '../../shared/types';\nimport {Router} from '@angular/router';\nimport {CanLeave} from '../../shared/guard/component-dirty.guard';\n\n@Component({\n selector: 'page-settings',\n templateUrl: 'settings.page.html',\n providers: [\n {provide: ValidatorService, useExisting: LocalSettingsValidatorService},\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SettingsPage extends AppForm<LocalSettings> implements OnInit, OnDestroy, CanLeave {\n\n private data: LocalSettings;\n\n mobile: boolean;\n loading = true;\n saving = false;\n usageModes: UsageMode[] = ['FIELD', 'DESK'];\n\n propertyDefinitions: FormFieldDefinition[];\n propertyDefinitionsByKey: FormFieldDefinitionMap = {};\n propertyDefinitionsByIndex: { [index: number]: FormFieldDefinition } = {};\n propertiesFormHelper: FormArrayHelper<Property>;\n\n latLongFormats = ['DDMMSS', 'DDMM', 'DD'];\n\n get accountInheritance(): boolean {\n return this.form.controls['accountInheritance'].value;\n }\n\n get isLogin(): boolean {\n return this.accountService.isLogin();\n }\n\n get propertiesForm(): FormArray {\n return this.form.get('properties') as FormArray;\n }\n\n constructor(\n protected dateAdapter: DateAdapter<Moment>,\n protected platform: PlatformService,\n protected router: Router,\n protected validatorService: LocalSettingsValidatorService,\n protected alertCtrl: AlertController,\n protected translate: TranslateService,\n protected formBuilder: FormBuilder,\n protected accountService: AccountService,\n protected settings: LocalSettingsService,\n protected cd: ChangeDetectorRef,\n public network: NetworkService,\n @Inject(APP_LOCALES) public locales: LocaleConfig[]\n ) {\n super(dateAdapter, validatorService.getFormGroup(), settings);\n\n this.propertiesFormHelper = new FormArrayHelper<Property>(\n this.form.get('properties') as FormArray,\n (value) => this.validatorService.getPropertyFormGroup(value),\n (v1, v2) => (!v1 && !v2) || (v1.key === v2.key),\n (value) => isNil(value) || (isNil(value.key) && isNil(value.value)),\n {\n allowEmptyArray: true\n }\n );\n\n this.mobile = this.platform.mobile;\n\n // By default, disable the form\n this._enable = false;\n }\n\n async ngOnInit() {\n super.ngOnInit();\n\n // Make sure platform is ready\n await this.platform.ready();\n\n this.propertyDefinitions = this.settings.optionDefs.slice(); // copy options\n this.propertyDefinitions.forEach(o => this.propertyDefinitionsByKey[o.key] = o); // fill map\n\n // Load settings\n await this.load();\n\n this.registerSubscription(\n merge(\n this.accountService.onLogin,\n this.accountService.onLogout\n )\n .subscribe(() => this.setAccountInheritance(this.accountInheritance)));\n }\n\n getPropertyDefinition(index: number): FormFieldDefinition {\n let definition = this.propertyDefinitionsByIndex[index];\n if (!definition) {\n definition = this.updatePropertyDefinition(index);\n this.propertyDefinitionsByIndex[index] = definition;\n }\n return definition;\n }\n\n updatePropertyDefinition(index: number): FormFieldDefinition {\n const key = (this.propertiesForm.at(index) as FormGroup).controls.key.value;\n const definition = key && this.propertyDefinitionsByKey[key] || null;\n this.propertyDefinitionsByIndex[index] = definition; // update map by index\n this.markForCheck();\n return definition;\n }\n\n removePropertyAt(index: number) {\n this.propertiesFormHelper.removeAt(index);\n this.propertyDefinitionsByIndex = {}; // clear cache by index\n this.markForCheck();\n }\n\n async load() {\n\n this.loading = true;\n console.debug('[settings] Loading settings...');\n\n const data = this.settings.settings;\n\n // Set defaults\n data.accountInheritance = toBoolean(data.accountInheritance, true);\n data.locale = data.locale || this.translate.currentLang || this.translate.defaultLang;\n data.latLongFormat = data.latLongFormat || 'DDMMSS';\n data.usageMode = data.usageMode || 'DESK';\n\n // Set peer\n if (isNilOrBlank(data.peerUrl)) {\n await this.network.ready();\n const peer = this.network.peer;\n data.peerUrl = peer && peer.url;\n }\n\n // Remember data\n this.updateView(data);\n }\n\n updateView(data: LocalSettings) {\n if (!data) return; //skip\n this.data = data;\n\n const json: any = {...data};\n\n // Transform properties map into array\n json.properties = EntityUtils.getMapAsArray(data.properties || {});\n this.propertiesFormHelper.resize(json.properties.length);\n\n this.form.patchValue(json, {emitEvent: false});\n this.markAsPristine();\n\n this.enable({emitEvent: false});\n\n // Apply inheritance\n this.setAccountInheritance(data.accountInheritance, {emitEvent: false});\n\n this.loading = false;\n this.error = null;\n this.markForCheck();\n }\n\n async save(event?: UIEvent, options?: any): Promise<boolean> {\n if (this.saving) return; // Skip\n\n // Remove all empty controls\n this.propertiesFormHelper.removeAllEmpty();\n\n if (this.form.invalid && this.debug) {\n AppFormUtils.logFormErrors(this.form);\n }\n\n console.debug('[settings] Saving local settings...');\n\n this.saving = true;\n this.error = undefined;\n const data = await this.getValue();\n\n // Check peer alive, before saving\n const peerChanged = this.form.get('peerUrl').dirty;\n\n // Clean page history, when peer changed\n if (peerChanged) data.pageHistory = [];\n\n try {\n this.disable();\n\n await this.settings.apply(data);\n this.data = data;\n this.markAsPristine();\n\n // If peer changed\n if (peerChanged) {\n // Restart the network\n this.network.peer = Peer.parseUrl(data.peerUrl);\n }\n\n return true;\n } catch (err) {\n console.error(err);\n this.error = err && err.message || err;\n return false;\n } finally {\n this.enable({emitEvent: false});\n\n // Apply inheritance\n this.setAccountInheritance(data.accountInheritance, {emitEvent: false});\n\n this.saving = false;\n this.markForCheck();\n }\n }\n\n\n setAccountInheritance(enable: boolean, opts?: { emitEvent?: boolean }) {\n // Make sure to update the value in control\n this.form.controls['accountInheritance'].setValue(enable, opts);\n if (this.data.accountInheritance !== enable) {\n this.form.controls['accountInheritance'].markAsDirty({onlySelf: false});\n }\n\n if (enable) {\n if (this.isLogin) {\n // Force using account settings\n const account = this.accountService.account;\n\n // Copy values\n if (account.settings) {\n if (account.settings.locale) this.form.get('locale').setValue(account.settings.locale, opts);\n if (account.settings.latLongFormat) this.form.get('latLongFormat').setValue(account.settings.latLongFormat, opts);\n }\n // Disable fields\n this.form.get('locale').disable(opts);\n this.form.get('latLongFormat').disable(opts);\n } else {\n // Enable fields\n this.form.get('locale').enable(opts);\n this.form.get('latLongFormat').enable(opts);\n }\n } else {\n // Restore previous values\n this.form.get('locale').setValue(this.data.locale, opts);\n this.form.get('latLongFormat').setValue(this.data.latLongFormat, opts);\n\n // Enable fields\n this.form.get('locale').enable(opts);\n this.form.get('latLongFormat').enable(opts);\n }\n\n // Mark for check, if need\n if (!opts || opts.emitEvent) {\n this.markForCheck();\n }\n }\n\n async showSelectPeerModal(opts?: {\n allowSelectDownPeer?: boolean;\n canCancel?: boolean;\n }) {\n const peer = await this.network.showSelectPeerModal(opts);\n if (peer && peer.url) {\n const control = this.form.get('peerUrl') as FormControl;\n control.setValue(peer.url, {emitEvent: true, onlySelf: false});\n control.markAsDirty({onlySelf: false});\n this.markAsDirty();\n }\n }\n\n async cancel(event?: UIEvent) {\n await this.load();\n }\n\n async close(event?: UIEvent) {\n if (this.saving) return;\n\n if (this.dirty) {\n // Ask user confirmation\n const confirmation = await Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate);\n if (confirmation) {\n await this.save(event);\n }\n }\n\n // Back to home\n return this.router.navigateByUrl('/', { skipLocationChange: true });\n }\n\n async clearCache(event?: UIEvent) {\n const confirm = await Alerts.askActionConfirmation(this.alertCtrl, this.translate, true, event);\n if (confirm) {\n await this.network.clearCache();\n this.settings.removeOfflineFeatures();\n }\n }\n\n /* -- protected functions -- */\n\n protected async getValue(): Promise<LocalSettings> {\n const json = await this.getJsonValueToSave();\n\n // Override properties from account\n if (json.accountInheritance && this.isLogin) {\n const account = this.accountService.account;\n const userSettings = account && account.settings;\n console.debug(`[settings] Applying account inheritance {locale: '${userSettings.locale}', latLongFormat: '${userSettings.latLongFormat}'}...`);\n json.locale = userSettings.locale || json.locale;\n json.latLongFormat = userSettings.latLongFormat || json.latLongFormat;\n }\n\n return json;\n }\n\n protected getJsonValueToSave(): Promise<any> {\n const json = this.form.value;\n json.properties = EntityUtils.getPropertyArrayAsObject(json.properties);\n\n return Promise.resolve(json);\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, OnInit, Optional} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup, FormGroupDirective, Validators} from '@angular/forms';\nimport {EntityUtils} from '../services/model/entity.model';\nimport {FormFieldDefinition, FormFieldDefinitionMap} from '../../shared/form/field.model';\nimport {isEmptyArray, isNil} from '../../shared/functions';\nimport {DateAdapter} from '@angular/material/core';\nimport {Moment} from 'moment';\nimport {LocalSettingsService} from '../services/local-settings.service';\nimport {AppForm} from './form.class';\nimport {FormArrayHelper, FormArrayHelperOptions} from './form.utils';\nimport {Property} from '../../shared/types';\n\n@Component({\n selector: 'app-properties-form',\n templateUrl: 'properties.form.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AppPropertiesForm<T = Property> extends AppForm<T[]> implements OnInit {\n\n\n loading = true;\n definitionsMapByKey: FormFieldDefinitionMap = {};\n definitionsByIndex: { [index: number]: FormFieldDefinition } = {};\n helper: FormArrayHelper<Property>;\n\n @Input() formArrayName: string;\n\n @Input() formArray: FormArray;\n\n @Input() options: FormArrayHelperOptions;\n\n @Input() definitions: FormFieldDefinition[];\n\n set value(data: T[]) {\n this.setValue(data);\n }\n\n get value(): T[] {\n return this.formArray.value as T[];\n }\n\n get fieldForms(): FormGroup[] {\n return this.formArray.controls as FormGroup[];\n }\n\n constructor(\n protected injector: Injector,\n protected formBuilder: FormBuilder,\n protected dateAdapter: DateAdapter<Moment>,\n protected settings: LocalSettingsService,\n protected cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective\n ) {\n super(dateAdapter,\n null,\n settings);\n\n //this.debug = !environment.production;\n }\n\n ngOnInit() {\n if (isEmptyArray(this.definitions)) {\n throw new Error('Missing or invalid attribute \\'definitions\\'');\n }\n\n // Fill options map\n this.definitionsMapByKey = {};\n this.definitions.forEach(o => {\n this.definitionsMapByKey[o.key] = o;\n });\n\n // Retrieve the form\n const form = (this.formArray && this.formArray.parent as FormGroup || this.formGroupDir && this.formGroupDir.form || this.formBuilder.group({}));\n this.setForm(form);\n\n this.formArray = this.formArray || this.formArrayName && form.get(this.formArrayName) as FormArray;\n this.formArrayName = this.formArrayName || this.formArray && Object.keys(form.controls).find(key => form.get(key) === this.formArray) || 'properties';\n if (!this.formArray) {\n console.warn(`Missing array control '${this.formArrayName}'. Will create it!`);\n this.formArray = this.formBuilder.array([]);\n this.form.addControl(this.formArrayName, this.formArray);\n }\n\n this.helper = new FormArrayHelper<Property>(\n this.formArray,\n (value) => this.getPropertyFormGroup(value),\n (v1, v2) => (!v1 && !v2) || v1.key === v2.key,\n (value) => isNil(value) || (isNil(value.key) && isNil(value.value)),\n this.options\n );\n\n super.ngOnInit();\n }\n\n getDefinitionAt(index: number): FormFieldDefinition {\n let definition = this.definitionsByIndex[index];\n if (!definition) {\n definition = this.updateDefinitionAt(index);\n this.definitionsByIndex[index] = definition;\n }\n return definition;\n }\n\n updateDefinitionAt(index: number): FormFieldDefinition {\n const key = (this.formArray.at(index) as FormGroup).controls.key.value;\n const definition = key && this.definitionsMapByKey[key] || null;\n this.definitionsByIndex[index] = definition; // update map by index\n this.markForCheck();\n return definition;\n }\n\n removeAt(index: number) {\n this.helper.removeAt(index);\n this.definitionsByIndex = {}; // clear map by index\n this.markForCheck();\n }\n\n isUnknownField(fieldForm: FormGroup) {\n const keyControl = fieldForm.get('key');\n const key = keyControl && keyControl.value;\n return key && isNil(this.definitionsMapByKey[key]);\n }\n\n setValue(data: T[] | any) {\n if (!data) return; // Skip\n\n // Transform properties map into array\n const values = EntityUtils.getMapAsArray<T>(data);\n this.helper.resize(values.length);\n this.helper.formArray.patchValue(values, {emitEvent: false});\n\n this.markAsPristine();\n this.loading = false;\n }\n\n /* -- protected methods -- */\n\n protected getPropertyFormGroup(data?: {key: string; value?: string}): FormGroup {\n return this.formBuilder.group({\n key: [data && data.key || null, Validators.compose([Validators.required, Validators.max(50)])],\n value: [data && data.value || null, Validators.required]\n });\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n}\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Optional,\n Output\n} from '@angular/core';\nimport {AbstractControl, FormArray, FormBuilder, FormGroup, FormGroupDirective, Validators} from '@angular/forms';\nimport {referentialToString} from '../services/model/referential.model';\nimport {isNil} from '../../shared/functions';\nimport {DateAdapter} from '@angular/material/core';\nimport {Moment} from 'moment';\nimport {LocalSettingsService} from '../services/local-settings.service';\nimport {AppForm} from './form.class';\nimport {AppFormUtils, FormArrayHelper, FormArrayHelperOptions} from './form.utils';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {Observable} from 'rxjs';\nimport {Color} from '@ionic/core';\n\nexport declare interface ItemButton<T = any> {\n title?: string;\n click: (event: UIEvent, item: T, index: number) => void;\n icon: string;\n color?: Color;\n disabled?: Observable<boolean>;\n}\n\nexport declare type AppListFormOptions<T> = FormArrayHelperOptions & {\n allowMultipleSelection?: boolean;\n buttons?: ItemButton<T>[];\n};\n\n@Component({\n selector: 'app-list-form',\n templateUrl: 'list.form.html',\n styleUrls: ['./list.form.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AppListForm<T = any> extends AppForm<T[]> implements OnInit {\n loading = true;\n helper: FormArrayHelper<T>;\n selection = new SelectionModel<T>(true, []);\n\n @Input() formArrayName: string;\n @Input() formArray: FormArray;\n @Input() options: AppListFormOptions<T>;\n\n @Input('displayWith') displayWithFn: (item: any) => string = referentialToString;\n @Input('equals') equalsFn: (v1: T, v2: T) => boolean;\n\n @Output() onNewItem = new EventEmitter<UIEvent>();\n @Output() selectionChanges = new EventEmitter<T[]>(true);\n\n set value(data: T[]) {\n this.setValue(data);\n }\n\n get value(): T[] {\n return this.formArray.value as T[];\n }\n\n get itemControls(): FormGroup[] {\n return this.formArray && this.formArray.controls as FormGroup[];\n }\n\n get length(): number {\n return this.helper ? this.helper.size() : 0;\n }\n\n get empty(): boolean {\n return this.length === 0;\n }\n\n get touched(): boolean {\n return this.formArray && (this.formArray.touched || (this.formArray.controls || []).findIndex(c => c.touched) !== -1);\n }\n\n get untouched(): boolean {\n return !this.formArray || this.formArray.untouched || (this.formArray.controls || []).findIndex(c => c.touched) === -1;\n }\n\n get dirty(): boolean {\n return this.formArray && this.formArray.dirty;\n }\n\n get invalid(): boolean {\n return !this.formArray || this.formArray.invalid;\n }\n\n get valid(): boolean {\n return this.formArray && this.formArray.valid;\n }\n\n get pending(): boolean {\n return !this.formArray || this.formArray.pending;\n }\n\n markAsTouched(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {\n AppFormUtils.markAsTouched(this.formArray, opts);\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n\n markAllAsTouched(opts?: { emitEvent?: boolean }) {\n AppFormUtils.markAllAsTouched(this.formArray, opts);\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n\n constructor(\n protected injector: Injector,\n protected formBuilder: FormBuilder,\n protected dateAdapter: DateAdapter<Moment>,\n protected settings: LocalSettingsService,\n protected cd: ChangeDetectorRef,\n @Optional() private formGroupDir: FormGroupDirective\n ) {\n super(dateAdapter,\n null,\n settings);\n\n //this.debug = !environment.production;\n }\n\n ngOnInit() {\n\n this.options = {\n allowEmptyArray: true,\n allowMultipleSelection: true,\n buttons: [],\n ...this.options};\n\n // Retrieve the form\n const form = (this.formArray && this.formArray.parent as FormGroup || this.formGroupDir && this.formGroupDir.form || this.formBuilder.group({}));\n this.setForm(form);\n\n this.formArray = this.formArray || this.formArrayName && form.get(this.formArrayName) as FormArray;\n this.formArrayName = this.formArrayName || this.formArray && Object.keys(form.controls).find(key => form.get(key) === this.formArray) || 'properties';\n if (!this.formArray) {\n console.warn(`Missing array control '${this.formArrayName}'. Will create it!`);\n this.formArray = this.formBuilder.array([]);\n this.form.addControl(this.formArrayName, this.formArray);\n }\n\n this.equalsFn = this.equalsFn || ((v1: any, v2: any) => (isNil(v1) && isNil(v2)) || v1 === v2);\n this.helper = new FormArrayHelper<T>(\n this.formArray,\n (value) => this.createControl(value),\n this.equalsFn,\n (value) => isNil(value),\n this.options\n );\n\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n\n this.onNewItem.complete();\n this.onNewItem.unsubscribe();\n this.selectionChanges.complete();\n this.selectionChanges.unsubscribe();\n }\n\n setValue(data: T[] | any) {\n data = data || [];\n\n if (this.helper) {\n this.helper.resize(data.length);\n this.helper.formArray.patchValue(data, {emitEvent: false});\n }\n else {\n console.warn('TODO: cannot applyied setValue() on fromArray, because formArrayHelper not exists yet !');\n }\n\n this.selection.clear();\n this.markAsPristine();\n this.loading = false;\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n isAllSelected() {\n return this.selection.selected.length === this.length;\n }\n\n async masterToggle(opts?: {emitEvent?: boolean}) {\n if (this.loading) return;\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n const items = this.value;\n items.forEach(item => this.selection.select(item));\n }\n\n if (!opts || opts.emitEvent !== false) {\n this.selectionChanges.emit(this.selection.selected);\n }\n }\n\n async onItemClick(event: MouseEvent, item: T, opts?: {emitEvent?: boolean}) {\n\n if (!item || event.defaultPrevented || !this.selectionChanges.observers.length) return;\n\n // Multiple selection (if ctrl+click)\n if (event.ctrlKey && this.options.allowMultipleSelection) {\n this.selection.toggle(item);\n }\n else {\n // Unselect all\n\n // Select the item (or reselect)\n if (!this.selection.isSelected(item) || (this.options.allowMultipleSelection && this.selection.selected.length > 1)) {\n this.selection.clear();\n this.selection.select(item);\n }\n // Unselect all\n else {\n this.selection.clear();\n }\n }\n\n if (!opts || opts.emitEvent !== false) {\n this.selectionChanges.emit(this.selection.selected);\n }\n }\n\n async onItemButtonClick(button: ItemButton, event: MouseEvent, item: T, index: number) {\n if (button.click) button.click(event, item, index);\n await this.onItemClick(event, item);\n }\n\n hasSelection(): boolean {\n return this.selection.hasValue();\n }\n\n onNewClick(event: UIEvent) {\n this.onNewItem.emit(event);\n }\n\n add(value: T, opts?: {emitEvent?: boolean}) {\n const done = this.helper.add(value, {emitEvent: true});\n if (done) {\n if (!this.options.allowMultipleSelection) {\n this.selection.clear();\n }\n this.selection.toggle(value);\n this.markForCheck();\n\n if (!opts || opts.emitEvent !== false) {\n this.selectionChanges.emit(this.selection.selected);\n }\n }\n }\n\n removeAt(index: number) {\n const item = this.helper.at(index).value;\n if (this.selection.isSelected(item)) {\n this.selection.deselect(item);\n }\n this.helper.removeAt(index);\n }\n\n displayWith(value: T): string {\n return this.displayWithFn ? this.displayWithFn(value) : (value as any);\n }\n\n /* -- protected methods -- */\n\n protected createControl(data?: any): AbstractControl {\n return this.formBuilder.control(data || null, Validators.required);\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n}\n\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\n\nimport {UsageMode} from '../model/settings.model';\n\n@Pipe({\n name: 'isOnField'\n})\n@Injectable({providedIn: 'root'})\nexport class IsOnFieldModePipe implements PipeTransform {\n\n transform(value: UsageMode): boolean {\n return value === 'FIELD';\n }\n}\n\n\n@Pipe({\n name: 'isNotOnField'\n})\n@Injectable({providedIn: 'root'})\nexport class IsNotOnFieldModePipe implements PipeTransform {\n\n transform(value: UsageMode): boolean {\n return value !== 'FIELD';\n }\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {Person, PersonUtils} from '../model/person.model';\n\n@Pipe({\n name: 'personToString'\n})\n@Injectable({providedIn: 'root'})\nexport class PersonToStringPipe implements PipeTransform {\n\n transform(value: Person | Person[], separator?: string): string {\n if (Array.isArray(value)) return PersonUtils.personsToString(value, separator);\n return PersonUtils.personToString(value as Person);\n }\n}\n\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {ModalController, ToastController} from '@ionic/angular';\nimport {Subscription} from 'rxjs';\nimport {Configuration} from '../services/model/config.model';\nimport {ConfigService} from '../services/config.service';\nimport {PlatformService} from '../services/platform.service';\nimport {debounceTime, distinctUntilChanged, map} from 'rxjs/operators';\nimport {NetworkService} from '../services/network.service';\nimport {CORE_CONFIG_OPTIONS} from '../services/config/core.config';\nimport {VersionUtils} from '../../shared/version/versions';\nimport {slideUpDownAnimation} from '../../shared/material/material.animations';\nimport {isNilOrBlank, isNotEmptyArray, isNotNilOrBlank, sleep} from '../../shared/functions';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {ShowToastOptions, Toasts} from '../../shared/toasts';\nimport {TranslateService} from '@ngx-translate/core';\n\n\nexport declare interface InstallAppLink {\n name: string;\n url: string;\n platform?: 'android' | 'ios';\n version?: string;\n downloadFilename?: string;\n description?: string;\n mimeType?: string;\n}\n\nconst MimeTypes = Object.freeze({\n ANDROID_APK: 'application/vnd.android.package-archive'\n});\n\n@Component({\n selector: 'app-install-upgrade-card',\n templateUrl: 'install-upgrade-card.component.html',\n styleUrls: ['./install-upgrade-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [slideUpDownAnimation]\n})\nexport class AppInstallUpgradeCard implements OnInit, OnDestroy {\n\n private _subscription = new Subscription();\n private _showUpdateOfflineFeature = false;\n\n loading = true;\n downloading = false;\n waitingNetwork = false;\n installLinks: InstallAppLink[];\n updateLinks: InstallAppLink[];\n offline: boolean;\n upgradeVersion: string;\n canDownload: boolean;\n\n @Input() isLogin: boolean;\n @Input() showUpgradeWarning = true;\n @Input() showOfflineWarning = true;\n @Input() showInstallButton = false;\n\n @Input()\n set showUpdateOfflineFeature(value: boolean) {\n if (value === this._showUpdateOfflineFeature) return; // Skip\n this._showUpdateOfflineFeature = value;\n this.markForCheck();\n }\n\n get showUpdateOfflineFeature(): boolean {\n return this._showUpdateOfflineFeature;\n }\n\n constructor(\n private modalCtrl: ModalController,\n private configService: ConfigService,\n private toastController: ToastController,\n private translate: TranslateService,\n private cd: ChangeDetectorRef,\n public platform: PlatformService,\n public network: NetworkService,\n @Inject(ENVIRONMENT) protected environment\n ) {\n }\n\n @Output()\n onUpdateOfflineModeClick = new EventEmitter<UIEvent>();\n\n async ngOnInit() {\n\n await this.platform.ready();\n\n this.offline = this.network.offline;\n\n // Listen pod config\n this._subscription.add(\n this.configService.config\n .pipe(\n debounceTime(1000)\n )\n .subscribe(config => this.checkNeedInstallOrUpdate(config)));\n\n // Listen network changes\n this._subscription.add(\n this.network.onNetworkStatusChanges\n .pipe(\n //debounceTime(450),\n //tap(() => this.waitingNetwork = false),\n map(connectionType => connectionType === 'none'),\n distinctUntilChanged()\n )\n .subscribe(offline => {\n if (this.offline !== offline) {\n this.offline = offline;\n this.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n }\n\n async download(event: UIEvent, link: InstallAppLink) {\n if (!link || !link.url) {\n console.error('[install-upgrade-card] Missing required argument \\'link.url\\'');\n return; // Skip\n }\n\n this.downloading = true;\n\n try {\n console.info('[install-upgrade-card] User ask download of: ' + link.url);\n const location = this.platform.download({\n uri: link.url,\n title: link.name,\n filename: link.downloadFilename,\n mimeType: link.mimeType\n });\n console.info('[install-upgrade-card] File downloaded at: ' + location);\n }\n\n // Failed: display a toast\n catch(err) {\n console.error('[install-upgrade] Download failed: ' + (err && err.message || err));\n this.showToast({\n message: 'ERROR.DOWNLOAD_FAILED',\n messageParams: {error: err},\n type: 'error',\n showCloseButton: true\n });\n return; // Stop here\n }\n finally {\n this.downloading = false;\n this.markForCheck();\n }\n\n this.showToast({\n message: 'INFO.DOWNLOAD_UPDATE_SUCCEED',\n type: 'info',\n showCloseButton: true\n });\n }\n\n async tryOnline() {\n this.waitingNetwork = true;\n this.markForCheck();\n\n try {\n await this.network.tryOnline({\n showLoadingToast: false,\n showOnlineToast: true,\n showOfflineToast: false\n });\n }\n finally {\n this.waitingNetwork = false;\n this.markForCheck();\n }\n }\n\n getPlatformName(platform: 'android'|'ios') {\n switch (platform) {\n case 'android':\n return 'Android';\n case 'ios':\n return 'iOS';\n default:\n return '';\n }\n }\n\n asLink(value: any): InstallAppLink {\n return value as InstallAppLink;\n }\n\n /* -- private method -- */\n\n private async checkNeedInstallOrUpdate(config: Configuration) {\n console.info('[install] Check if need to install or upgrade...');\n\n try {\n const installLinks = this.getAllInstallLinks(config);\n\n // Check for upgrade\n this.updateLinks = this.getCompatibleUpgradeLinks(installLinks, config);\n\n // Check for install links (if no upgrade need)\n this.installLinks = !this.updateLinks && this.getCompatibleInstallLinks(installLinks);\n\n await sleep(500); // Add a delay, for animation\n\n }\n finally {\n this.loading = false;\n this.markForCheck();\n }\n }\n\n private getCompatibleInstallLinks(installLinks: InstallAppLink[]): InstallAppLink[] {\n\n // Cordova already running: not need to install\n if (this.platform.is('cordova')) return undefined;\n\n // If mobile web: return all\n if (this.platform.is('mobileweb')) {\n return installLinks;\n }\n\n return undefined;\n }\n\n private getCompatibleUpgradeLinks(installLinks: InstallAppLink[], config: Configuration): InstallAppLink[] {\n const appVersion = this.environment.version;\n const appMinVersionFromPod = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);\n\n if (!appVersion) {\n console.error('Missing value for \\'environment.version\\': cannot check app compatibility!');\n return undefined;\n }\n\n const needUpgrade = appMinVersionFromPod && !VersionUtils.isCompatible(appMinVersionFromPod, appVersion);\n if (!needUpgrade) return undefined;\n\n const upgradeLinks = installLinks\n .filter(link => this.platform.is('mobileweb') || (link.platform && this.platform.is(link.platform)));\n\n // Use min version as default version\n upgradeLinks.forEach(link => {\n link.version = link.version || appMinVersionFromPod;\n });\n\n return isNotEmptyArray(upgradeLinks) ? upgradeLinks : undefined;\n }\n\n private getAllInstallLinks(config: Configuration): InstallAppLink[] {\n const result: InstallAppLink[] = [];\n\n // Android\n {\n // Get URL (from config, or environment)\n let url = config.getProperty(CORE_CONFIG_OPTIONS.ANDROID_INSTALL_URL);\n if (isNilOrBlank(url)) url = this.environment.defaultAndroidInstallUrl || null;\n const minVersion = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);\n\n // Compute App name\n const name: string = isNotNilOrBlank(url) && config.label || this.environment.defaultAppName || 'SUMARiS';\n\n if (url) {\n let downloadFilename: string;\n let version;\n let mimeType;\n\n // Get file name\n const filename = this.getFilename(url);\n version = minVersion || 'latest';\n\n // OK, this is a downloadable APK file (e.g. NOT a link to a playstore)\n if (filename?.endsWith('.apk')) {\n // Define mime type\n mimeType = MimeTypes.ANDROID_APK;\n\n // Get the file version (if any)\n const versionMatches = /-v([1-9][0-9]*\\.[0-9]+\\.(:?(:?alpha|beta|rc)?[0-9]*))/i.exec(filename);\n version = versionMatches && versionMatches[1] || version;\n\n // Compute a new file name, with the version\n if (isNotNilOrBlank(name)) {\n downloadFilename = `${name}-v${version}.apk`.toLowerCase();\n }\n\n else {\n downloadFilename = filename;\n\n // Replace 'latest' with the app version, if present\n if (downloadFilename.indexOf('latest')) {\n downloadFilename = downloadFilename.replace('latest', version);\n }\n }\n }\n\n result.push({ name, url, platform: 'android', version, downloadFilename, mimeType });\n }\n }\n\n // iOS - TODO\n //{\n // (...)\n //}\n\n return result;\n }\n\n private getFilename(url: string): string {\n if (!url) return;\n // Get last part (or all string, if no '/')\n let filename = url.substring(url.lastIndexOf('/')+1);\n\n const queryParamIndex = filename.indexOf('?');\n if (queryParamIndex !== -1) {\n // Remove query params\n return filename.substring(0, queryParamIndex);\n }\n\n return filename;\n }\n\n private markForCheck() {\n this.cd.markForCheck();\n }\n\n private async showToast(opts: ShowToastOptions) {\n await Toasts.show(this.toastController, this.translate, opts);\n }\n}\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {Account, accountToString} from '../model/account.model';\n\n@Pipe({\n name: 'isLogin'\n})\n@Injectable({providedIn: 'root'})\nexport class IsLoginAccountPipe implements PipeTransform {\n\n transform(value: Account): boolean {\n return value && value.pubkey && true;\n }\n}\n\n@Pipe({\n name: 'accountToString'\n})\n@Injectable({providedIn: 'root'})\nexport class AccountToStringPipe implements PipeTransform {\n\n transform(value: Account): string {\n return accountToString(value);\n }\n}\n\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {Department, departmentsToString, departmentToString} from '../model/department.model';\n\n@Pipe({\n name: 'departmentToString'\n})\n@Injectable({providedIn: 'root'})\nexport class DepartmentToStringPipe implements PipeTransform {\n\n transform(value: Department | (Department[]), separator?: string): string {\n if (value instanceof Array) return departmentsToString(value, separator);\n return departmentToString(value);\n }\n}\n\n","import {Injectable} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {MenuItem} from './menu.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MenuService {\n\n private readonly _toggledSubject = new Subject<void>();\n private readonly _visibleSubject = new Subject<boolean>();\n\n get menuToggled$(): Observable<void> {\n return this._toggledSubject.asObservable();\n }\n\n get menuVisible$(): Observable<boolean> {\n return this._visibleSubject.asObservable();\n }\n\n toggleMenu() {\n this._toggledSubject.next();\n }\n\n menuVisible(value: boolean) {\n this._visibleSubject.next(value);\n }\n\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, InjectionToken, Input, OnInit, Optional, ViewChild} from '@angular/core';\nimport {AlertController, IonSplitPane, MenuController, ModalController} from '@ionic/angular';\n\nimport {Router} from '@angular/router';\nimport {Account} from '../services/model/account.model';\nimport {Configuration} from '../services/model/config.model';\nimport {AccountService} from '../services/account.service';\nimport {AboutModal} from '../about/modal-about';\n\nimport {fadeInAnimation} from '../../shared/material/material.animations';\nimport {TranslateService} from '@ngx-translate/core';\nimport {isNotNilOrBlank} from '../../shared/functions';\nimport {BehaviorSubject, merge, Subscription} from 'rxjs';\nimport {ConfigService} from '../services/config.service';\nimport {mergeMap, tap} from 'rxjs/operators';\nimport {HammerSwipeEvent} from '../../shared/gesture/hammer.utils';\nimport {PlatformService} from '../services/platform.service';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {MenuService} from './menu.service';\nimport {MenuItem, MenuItems} from './menu.model';\nimport {CORE_CONFIG_OPTIONS} from '../services/config/core.config';\n\nexport const APP_MENU_ITEMS = new InjectionToken<MenuItem[]>('menuItems');\n\nconst SPLIT_PANE_SHOW_WHEN = 'lg';\n\n@Component({\n selector: 'app-menu',\n templateUrl: 'menu.component.html',\n styleUrls: ['./menu.component.scss'],\n animations: [fadeInAnimation],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuComponent implements OnInit {\n\n private readonly _debug: boolean;\n private _subscription = new Subscription();\n private _config: Configuration;\n private _screenWidth: number;\n\n public loading = true;\n public isLogin = false;\n accountName: string;\n accountAvatar: string;\n accountEmail: string;\n\n public splitPaneOpened: boolean;\n\n @Input() logo: String;\n\n @Input() appName: String;\n\n $items = new BehaviorSubject<MenuItem[]>(undefined);\n\n @Input()\n appVersion: String = this.environment.version;\n\n @Input() side = 'left';\n\n @ViewChild('splitPane', { static: true }) splitPane: IonSplitPane;\n\n constructor(\n protected platformService: PlatformService,\n protected accountService: AccountService,\n protected router: Router,\n protected menu: MenuController,\n protected modalCtrl: ModalController,\n protected alertController: AlertController,\n protected translate: TranslateService,\n protected configService: ConfigService,\n protected cd: ChangeDetectorRef,\n protected menuService: MenuService,\n @Inject(ENVIRONMENT) protected environment,\n @Optional() @Inject(APP_MENU_ITEMS) protected items: MenuItem[]\n ) {\n\n this._debug = !environment.production;\n\n this.onResize();\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event?: UIEvent) {\n this._screenWidth = window.innerWidth;\n console.debug('[menu] Screen size (px): ' + this._screenWidth);\n }\n\n async ngOnInit() {\n this.splitPaneOpened = true;\n this.splitPane.when = SPLIT_PANE_SHOW_WHEN;\n\n // Wait platform started\n await this.platformService.ready();\n\n this.splitPaneOpened = true;\n\n // Listen to menu service event\n this.menuService.menuToggled$\n .subscribe(() => this.toggleSplitPane());\n\n // Update component when refresh is need (=login events or config changed)\n this._subscription.add(\n merge(\n this.accountService.onLogin,\n this.accountService.onLogout,\n this.configService.config\n .pipe(\n tap(config => this._config = config)\n )\n )\n .pipe(\n // Wait account service ready (can be restarted)\n mergeMap(() => this.accountService.ready())\n )\n .subscribe(account => {\n if (this.accountService.isLogin()) {\n this.onLogin(this.accountService.account);\n\n } else {\n this.onLogout(true);\n }\n }));\n }\n\n async onLogin(account: Account) {\n console.info('[menu] Update using logged account');\n this.accountAvatar = account.avatar;\n this.accountName = account.displayName;\n this.accountEmail = account.email;\n this.isLogin = true;\n await this.refreshMenuItems();\n\n setTimeout(() => {\n this.loading = false;\n this.detectChanges();\n }, 500);\n }\n\n async onLogout(skipRedirect?: boolean) {\n if (!skipRedirect) console.debug('[menu] logout');\n this.isLogin = false;\n //this.splitPaneOpened = false;\n //this.splitPane.when = false;\n this.accountAvatar = null;\n this.accountEmail = null;\n this.accountName = null;\n await this.refreshMenuItems();\n\n // Wait the end of fadeout, to reset the account\n if (!skipRedirect) {\n await this.router.navigate(['']);\n }\n\n this.loading = false;\n this.detectChanges();\n }\n\n async logout() {\n\n const translations = await this.translate.get([\n 'AUTH.LOGOUT.CONFIRM_TITLE',\n 'AUTH.LOGOUT.CONFIRM_MESSAGE',\n 'COMMON.BTN_CANCEL',\n 'AUTH.LOGOUT.BTN_CONFIRM'\n ]).toPromise();\n const alert = await this.alertController.create({\n header: translations['AUTH.LOGOUT.CONFIRM_TITLE'],\n message: translations['AUTH.LOGOUT.CONFIRM_MESSAGE'],\n buttons: [\n {\n text: translations['COMMON.BTN_CANCEL'],\n role: 'cancel',\n cssClass: 'secondary'\n }, {\n text: translations['AUTH.LOGOUT.BTN_CONFIRM'],\n cssClass: 'ion-color-primary',\n handler: () => {\n this.accountService.logout();\n\n setTimeout(() =>\n // Back to home\n this.router.navigateByUrl('/', {replaceUrl: true /* will clear router history */})\n , 100);\n }\n }\n ]\n });\n\n await alert.present();\n }\n\n async menuClose(): Promise<boolean> {\n return this.menu.close('left');\n }\n\n async openAboutModal(event) {\n const modal = await this.modalCtrl.create({component: AboutModal});\n return modal.present();\n }\n\n toggleSplitPane(event?: MouseEvent) {\n if (event && event.defaultPrevented) return;\n if (event) event.preventDefault();\n\n this.splitPaneOpened = !this.splitPaneOpened;\n if (!this.splitPaneOpened) {\n this.splitPane.when = false;\n } else {\n this.splitPane.when = SPLIT_PANE_SHOW_WHEN;\n }\n this.menuService.menuVisible(this.splitPaneOpened);\n\n this.detectChanges();\n }\n\n async doAction(action: string, event: UIEvent) {\n this.menuClose();\n\n switch (action) {\n case 'logout':\n await this.logout();\n break;\n case 'about':\n await this.openAboutModal(event);\n break;\n default:\n throw new Error('Unknown action: ' + action);\n }\n }\n\n onSwipeRight(event: HammerSwipeEvent) {\n // Skip, if not a valid swipe event\n if (!event || event.pointerType !== 'touch' || event.velocity < 0.4) {\n //event.preventDefault();\n return false;\n }\n\n // Will open the left menu, so cancelled this swipe event\n const startX = event.center.x - event.distance;\n if (startX <= 50) {\n // DEBUG\n //console.debug(\"[menu] Cancel swipe right, because near the left menu {x: \" + startX + \", velocity: \" + event.velocity + \"}\");\n event.preventDefault();\n return false;\n }\n\n // OK: continue\n\n // DEBUG\n //console.debug(\"[menu] Received swipe right {x: \" + startX + \", velocity: \" + event.velocity + \"}\");\n }\n\n /* -- protected methods -- */\n\n protected refreshMenuItems() {\n if (this._debug) console.debug('[menu] Refreshing menu items...');\n\n let items = this.items || [];\n\n // Insert menu items, from the config\n const configValue: string = this._config && this._config.getProperty(CORE_CONFIG_OPTIONS.MENU_ITEMS);\n if (isNotNilOrBlank(configValue)) {\n try {\n const configItems = JSON.parse(configValue);\n items = (configItems || []).reduce((res, item) => {\n if (item.after) {\n const index = res.findIndex(i => i.title === item.after);\n if (index !== -1) {\n return res.slice(0, index+1)\n .concat(item)\n .concat(res.slice(index+1))\n }\n }\n if (item.before) {\n const index = res.findIndex(i => i.title === item.before);\n if (index !== -1) {\n return res.slice(0, index)\n .concat(item)\n .concat(res.slice(index))\n }\n }\n return res.concat(item);\n }, items)\n }\n catch(err) {\n console.error(`[menu] Invalid value for option '${CORE_CONFIG_OPTIONS.MENU_ITEMS.key}'. Expected an array of menu item`, err);\n }\n }\n\n const opts = { isLogin: this.isLogin, debug: this._debug };\n const filteredItems = items\n .filter(item => MenuItems.checkIfVisible(item, this.accountService, this._config, opts))\n .map(item => {\n // Replace title using properties\n if (isNotNilOrBlank(item.titleProperty) && this._config) {\n const title = this._config.properties[item.titleProperty];\n if (title) return { ...item, title}; // Create a copy, to keep the original item.title\n }\n return item;\n });\n\n this.$items.next(filteredItems);\n }\n\n protected detectChanges() {\n this.cd.detectChanges();\n }\n}\n\n","import {NgModule} from '@angular/core';\nimport {SharedModule} from '../../shared/shared.module';\nimport {MenuComponent} from './menu.component';\n// import ngx-translate and the http loader\nimport {TranslateModule} from '@ngx-translate/core';\nimport {RouterModule} from '@angular/router';\n\n@NgModule({\n imports: [\n SharedModule,\n RouterModule,\n TranslateModule\n ],\n\n declarations: [\n // Components\n MenuComponent\n ],\n exports: [\n // Modules\n TranslateModule,\n // Components\n MenuComponent\n ]\n})\nexport class AppMenuModule {\n\n}\n","import {ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, TemplateRef, ViewChild} from '@angular/core';\nimport {MatColumnDef, MatTable} from '@angular/material/table';\nimport {TableElement} from '@e-is/ngx-material-table';\nimport {MatMenuTrigger} from '@angular/material/menu';\nimport {isNil, toBoolean} from '../../shared/functions';\n\n@Component({\n selector: 'app-actions-column',\n templateUrl: './actions-column.component.html',\n})\nexport class ActionsColumnComponent implements OnInit, OnDestroy {\n\n @ViewChild(MatColumnDef) columnDef: MatColumnDef;\n @ViewChild(MatMenuTrigger) matMenuTrigger: MatMenuTrigger;\n\n @Input() stickyEnd = false;\n @Input() canCancel: boolean;\n @Input() canDelete: boolean;\n @Input() canBackward: boolean;\n @Input() canForward: boolean;\n @Input() canConfirmAndAdd: boolean;\n @Input() dirtyIcon: boolean|string;\n @Input() optionsTitle = 'COMMON.BTN_OPTIONS';\n @Input('class') classList: string;\n @Input() cellTemplate: TemplateRef<any>;\n\n @Output() optionsClick = new EventEmitter<UIEvent>();\n @Output() cancelOrDeleteClick = new EventEmitter<{ event: Event; row: TableElement<any> }>();\n @Output() confirmAndAddClick = new EventEmitter<{ event: Event; row: TableElement<any> }>();\n @Output() backward = new EventEmitter<{ event: Event; row: TableElement<any> }>();\n @Output() forward = new EventEmitter<{ event: Event; row: TableElement<any> }>();\n\n constructor(private table: MatTable<any>,\n private cd: ChangeDetectorRef,\n // TODO auto configure using AppTable ? (need a forwardRef() in the table component\n //@Optional() private appTable: AppTable<any>\n ) {\n if (!table) throw new Error(`[actions-column] this column component must be inside a MatTable component`);\n }\n\n ngOnInit(): void {\n this.cd.detectChanges();\n this.table.addColumnDef(this.columnDef);\n this.canCancel = toBoolean(this.canCancel, this.cancelOrDeleteClick.observers.length > 0);\n this.canDelete = toBoolean(this.canDelete, this.cancelOrDeleteClick.observers.length > 0);\n this.canConfirmAndAdd = toBoolean(this.canConfirmAndAdd, this.confirmAndAddClick.observers.length > 0);\n this.canBackward = toBoolean(this.canBackward, this.backward.observers.length > 0);\n this.canForward = toBoolean(this.canForward, this.forward.observers.length > 0);\n if (isNil(this.dirtyIcon)) {\n this.dirtyIcon = 'star';\n }\n }\n\n ngOnDestroy() {\n this.table.removeColumnDef(this.columnDef);\n this.optionsClick.complete();\n this.optionsClick.unsubscribe();\n this.cancelOrDeleteClick.complete();\n this.cancelOrDeleteClick.unsubscribe();\n this.confirmAndAddClick.complete();\n this.confirmAndAddClick.unsubscribe();\n this.backward.complete();\n this.backward.unsubscribe();\n this.forward.complete();\n this.forward.unsubscribe();\n }\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthForm} from './auth/form/form-auth';\nimport {AuthModal} from './auth/modal/modal-auth';\nimport {AboutModal} from './about/modal-about';\nimport {RegisterConfirmPage} from './register/confirm/confirm';\nimport {AccountPage} from './account/account';\nimport {SharedModule} from '../shared/shared.module';\nimport {EntityMetadataComponent} from './form/entity-metadata.component';\nimport {FormButtonsBarComponent} from './form/form-buttons-bar.component';\nimport {TableSelectColumnsComponent} from './table/table-select-columns.component';\nimport {IonicStorageModule} from '@ionic/storage';\nimport {HomePage} from './home/home';\nimport {RegisterForm} from './register/form/form-register';\nimport {RegisterModal} from './register/modal/modal-register';\nimport {AppGraphQLModule} from './graphql/graphql.module';\n// import ngx-translate and the http loader\nimport {HttpClientModule} from '@angular/common/http';\nimport {SelectPeerModal} from './peer/select-peer.modal';\nimport {SettingsPage} from './settings/settings.page';\nimport {CacheModule} from 'ionic-cache';\nimport {AppPropertiesForm} from './form/properties.form';\nimport {AppListForm} from './form/list.form';\nimport {PlatformService} from './services/platform.service';\nimport {IsNotOnFieldModePipe, IsOnFieldModePipe} from './services/pipes/usage-mode.pipes';\nimport {PersonToStringPipe} from './services/pipes/person-to-string.pipe';\nimport {AppInstallUpgradeCard} from './install/install-upgrade-card.component';\nimport {AccountToStringPipe, IsLoginAccountPipe} from './services/pipes/account.pipes';\nimport {DepartmentToStringPipe} from './services/pipes/department-to-string.pipe';\nimport {NgxJdenticonModule} from 'ngx-jdenticon';\nimport {AppMenuModule} from './menu/menu.module';\nimport {ActionsColumnComponent} from './table/actions-column.component';\n\n@NgModule({\n imports: [\n SharedModule,\n RouterModule,\n HttpClientModule,\n AppGraphQLModule,\n CacheModule,\n IonicStorageModule,\n NgxJdenticonModule,\n AppMenuModule\n ],\n\n declarations: [\n // Pipes\n IsOnFieldModePipe,\n IsNotOnFieldModePipe,\n PersonToStringPipe,\n IsLoginAccountPipe,\n AccountToStringPipe,\n DepartmentToStringPipe,\n\n // Home and menu\n HomePage,\n AboutModal,\n\n // Auth & Register\n AuthForm,\n AuthModal,\n RegisterForm,\n RegisterModal,\n RegisterConfirmPage,\n AccountPage,\n SettingsPage,\n\n // Network\n SelectPeerModal,\n AppInstallUpgradeCard,\n\n // Other components\n TableSelectColumnsComponent,\n ActionsColumnComponent,\n EntityMetadataComponent,\n FormButtonsBarComponent,\n AppPropertiesForm,\n AppListForm\n\n ],\n exports: [\n SharedModule,\n RouterModule,\n AppGraphQLModule,\n AppMenuModule,\n\n // Pipes\n IsOnFieldModePipe,\n IsNotOnFieldModePipe,\n PersonToStringPipe,\n IsLoginAccountPipe,\n AccountToStringPipe,\n\n // Components\n HomePage,\n AuthForm,\n AuthModal,\n TableSelectColumnsComponent,\n ActionsColumnComponent,\n EntityMetadataComponent,\n FormButtonsBarComponent,\n AboutModal,\n AppPropertiesForm,\n AppListForm,\n AppInstallUpgradeCard,\n DepartmentToStringPipe,\n ]\n})\nexport class CoreModule {\n\n static forRoot(): ModuleWithProviders<CoreModule> {\n console.info('[core] Creating module (root)');\n return {\n ngModule: CoreModule,\n providers: [ PlatformService ]\n };\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {Observable} from 'rxjs';\nimport {ModalController} from '@ionic/angular';\nimport {AuthModal} from '../auth/modal/modal-auth';\nimport {AccountService} from './account.service';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\n\n@Injectable({providedIn: 'root'})\nexport class AuthGuardService implements CanActivate {\n\n private readonly _debug: boolean;\n\n constructor(private accountService: AccountService,\n private modalCtrl: ModalController,\n private router: Router,\n @Inject(ENVIRONMENT) protected environment\n ) {\n this._debug = !environment.production;\n }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n // If account not started: loop after started\n if (!this.accountService.started) {\n return this.accountService.ready()\n // Iterate\n .then(() => this.canActivate(next, state) as Promise<boolean | UrlTree>);\n }\n\n // Force login\n if (!this.accountService.isLogin()) {\n if (this._debug) console.debug('[auth-gard] Need authentication for page /' + next.url.join('/'));\n return this.login(next)\n .then(res => {\n if (!res) {\n if (this._debug) console.debug('[auth-gard] Authentication cancelled. Could not access to /' + next.url.join('/'));\n return this.router.parseUrl('/home');\n }\n // Iterate\n return this.canActivate(next, state) as Promise<boolean | UrlTree>;\n });\n }\n\n if (next.data && next.data.profile && !this.accountService.hasMinProfile(next.data.profile)) {\n if (this._debug) console.debug('[auth-gard] Not authorized access to /' + next.url.join('/') + '. Missing required profile: ' + next.data.profile);\n return false;\n }\n if (this._debug) console.debug('[auth-gard] Authorized access to /' + next.url.join('/'));\n return true;\n }\n\n login(next?: ActivatedRouteSnapshot): Promise<boolean> {\n return new Promise<boolean>(async (resolve) => {\n const modal = await this.modalCtrl.create({component: AuthModal, componentProps: {next}});\n modal.onDidDismiss()\n .then(() => {\n if (this.accountService.isLogin()) {\n resolve(true);\n return;\n }\n resolve(false);\n });\n return modal.present();\n });\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ErrorCodes } from './errors';\n\nimport { FetchPolicy, InternalRefetchQueriesInclude, MutationUpdaterFn } from '@apollo/client/core';\nimport { SortDirection } from '@angular/material/sort';\n\nimport { BaseGraphqlService } from './base-graphql-service.class';\nimport { EntitiesServiceWatchOptions, EntityServiceLoadOptions, IEntitiesService, IEntityService, LoadResult } from '../../shared/services/entity-service.class';\nimport { GraphqlService } from '../graphql/graphql.service';\nimport { PlatformService } from './platform.service';\nimport { environment } from '../../../environments/environment';\nimport { Entity, EntityAsObjectOptions, EntityUtils } from './model/entity.model';\nimport { chainPromises } from '../../shared/observables';\nimport { isEmptyArray, isNil, isNotNil, removeEnd } from '../../shared/functions';\nimport { Directive } from '@angular/core';\nimport { FetchResult } from '@apollo/client/link/core';\nimport { EntityFilter, EntityFilterUtils } from './model/filter.model';\nimport { DocumentNode } from 'graphql';\n\nexport type MutableWatchQueriesUpdatePolicy = 'update-cache' | 'refetch-queries';\n\nexport interface BaseEntityGraphqlQueries {\n load?: any;\n loadAll: any;\n loadAllWithTotal?: any;\n countAll?: any;\n}\nexport interface BaseEntityGraphqlMutations {\n save?: any;\n delete?: any;\n saveAll?: any;\n deleteAll?: any;\n}\n\nexport interface BaseEntityGraphqlSubscriptions {\n listenChanges?: any;\n}\nexport interface BaseEntityServiceOptions<\n T extends Entity<any, ID>,\n ID = number,\n Q extends BaseEntityGraphqlQueries = BaseEntityGraphqlQueries,\n M extends BaseEntityGraphqlMutations = BaseEntityGraphqlMutations,\n S extends BaseEntityGraphqlSubscriptions = BaseEntityGraphqlSubscriptions> {\n queries: Q;\n mutations?: Partial<M>;\n subscriptions?: Partial<S>;\n equalsFn?: (e1: T, e2: T) => boolean;\n isNewFn?: (e: T) => boolean;\n defaultSortBy?: keyof T;\n defaultSortDirection?: SortDirection;\n watchQueriesUpdatePolicy?: MutableWatchQueriesUpdatePolicy;\n}\n\nexport interface EntitySaveOptions {\n refetchQueries?: ((result: FetchResult<{data: any}>) => InternalRefetchQueriesInclude) | InternalRefetchQueriesInclude;\n awaitRefetchQueries?: boolean;\n update?: MutationUpdaterFn<{ data: any; }>;\n}\n\n\n// @dynamic\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class BaseEntityService<\n T extends Entity<T, ID>,\n F extends EntityFilter<F, T, ID>,\n ID = number,\n WO extends EntitiesServiceWatchOptions = EntitiesServiceWatchOptions,\n LO extends EntityServiceLoadOptions = EntityServiceLoadOptions,\n Q extends BaseEntityGraphqlQueries = BaseEntityGraphqlQueries,\n M extends BaseEntityGraphqlMutations = BaseEntityGraphqlMutations,\n S extends BaseEntityGraphqlSubscriptions = BaseEntityGraphqlSubscriptions>\n extends BaseGraphqlService<T, F, ID>\n implements\n IEntitiesService<T, F, WO>,\n IEntityService<T, ID, LO> {\n\n protected readonly _typename: string;\n protected readonly _logTypeName: string;\n\n protected readonly queries: Q;\n protected readonly mutations: Partial<M>;\n protected readonly subscriptions: Partial<S>;\n protected readonly equalsFn: (e1: T, e2: T) => boolean;\n protected readonly isNewFn: (e: T) => boolean;\n\n protected readonly defaultSortBy: keyof T;\n protected readonly defaultSortDirection: SortDirection;\n protected readonly watchQueriesUpdatePolicy: MutableWatchQueriesUpdatePolicy;\n\n protected constructor(\n protected graphql: GraphqlService,\n protected platform: PlatformService,\n protected dataType: new() => T,\n protected filterType: new() => F,\n options: BaseEntityServiceOptions<T, ID, Q, M, S>\n ) {\n super(graphql, environment);\n this.queries = options.queries;\n this.mutations = options.mutations || <Partial<M>>{};\n this.subscriptions = options.subscriptions || <Partial<S>>{};\n this.equalsFn = options.equalsFn || ((e1, e2) => EntityUtils.equals(e1, e2, 'id'));\n this.isNewFn = options.isNewFn || ((e) => EntityUtils.isNotEmpty(e, 'id'));\n this.defaultSortBy = options.defaultSortBy || 'id';\n this.defaultSortDirection = options.defaultSortDirection || 'asc';\n this.watchQueriesUpdatePolicy = options.watchQueriesUpdatePolicy || 'update-cache';\n\n platform.ready().then(() => {\n // No limit for updatable watch queries, if desktop\n if (!platform.mobile) {\n this._mutableWatchQueriesMaxCount = -1;\n }\n });\n\n const obj = new dataType();\n this._typename = obj.__typename || 'UnknownVO';\n this._logTypeName = removeEnd(this._typename, 'VO');\n\n // For DEV only\n this._debug = !environment.production;\n }\n\n watch(id: number, opts?: WO & { query?: any }): Observable<T> {\n\n if (this._debug) console.debug(this._logPrefix + `Watching ${this._logTypeName} {${id}}...`);\n\n const query = opts && opts.query || this.queries.load;\n return this.graphql.watchQuery<{data: any}>({\n query,\n variables: { id },\n fetchPolicy: opts && (opts.fetchPolicy as FetchPolicy) || undefined,\n error: {code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR'}\n })\n .pipe(\n map(({data}) => (!opts || opts.toEntity !== false)\n ? (data && this.fromObject(data))\n : (data as T))\n );\n }\n\n async load(id: ID, opts?: LO & { query?: any }): Promise<T> {\n\n if (this._debug) console.debug(this._logPrefix + `Loading ${this._logTypeName} {${id}}...`);\n const query = opts && opts.query || this.queries.load;\n\n const { data } = await this.graphql.query<{data: any}>({\n query,\n variables: { id },\n fetchPolicy: opts && (opts.fetchPolicy as FetchPolicy) || undefined,\n error: {code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR'}\n });\n\n // Convert to entity\n return (!opts || opts.toEntity !== false)\n ? (data && this.fromObject(data))\n : (data as T);\n }\n\n watchAll(offset: number,\n size: number,\n sortBy?: string,\n sortDirection?: SortDirection,\n filter?: F,\n opts?: WO & { query?: any }\n ): Observable<LoadResult<T>> {\n\n filter = this.asFilter(filter);\n\n const variables: any = {\n offset: offset || 0,\n size: size || 100,\n sortBy: sortBy || this.defaultSortBy,\n sortDirection: sortDirection || this.defaultSortDirection,\n filter: filter && filter.asPodObject()\n };\n\n let now = this._debug && Date.now();\n if (this._debug) console.debug(this._logPrefix + `Watching ${this._logTypeName}...`, variables);\n\n const withTotal = (!opts || opts.withTotal !== false) && this.queries.loadAllWithTotal && true;\n const query = (opts && opts.query) // use given query\n // Or get loadAll or loadAllWithTotal query\n || (withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll);\n return this.mutableWatchQuery<LoadResult<any>>({\n queryName: withTotal ? 'LoadAllWithTotal' : 'LoadAll',\n query,\n arrayFieldName: 'data',\n totalFieldName: withTotal ? 'total' : undefined,\n insertFilterFn: filter && filter.asFilterFn(),\n variables,\n error: {code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR'},\n fetchPolicy: opts && opts.fetchPolicy || undefined\n })\n .pipe(\n map(({data, total}) => {\n // Convert to entity (if need)\n const entities = (!opts || opts.toEntity !== false)\n ? (data || []).map(json => this.fromObject(json))\n : (data || []) as T[];\n\n if (now) {\n console.debug(this._logPrefix + `${this._logTypeName} loaded in ${Date.now() - now}ms`, entities);\n now = null;\n }\n return {data: entities, total};\n })\n );\n }\n\n async loadAll(offset: number,\n size: number,\n sortBy?: string,\n sortDirection?: SortDirection,\n filter?: Partial<F>,\n opts?: LO & {\n query?: any;\n debug?: boolean;\n withTotal?: boolean;\n }\n ): Promise<LoadResult<T>> {\n\n const debug = this._debug && (!opts || opts.debug !== false);\n\n filter = this.asFilter(filter);\n\n const variables: any = {\n offset: offset || 0,\n size: size || 100,\n sortBy: sortBy || 'id',\n sortDirection: sortDirection || 'asc',\n filter: filter && filter.asPodObject()\n };\n\n const now = Date.now();\n if (debug) console.debug(this._logPrefix + `Loading ${this._logTypeName}...`, variables);\n\n const withTotal = (!opts || opts.withTotal !== false) && this.queries.loadAllWithTotal && true;\n const query = (opts && opts.query) // use given query\n // Or get loadAll or loadAllWithTotal query\n || (withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll);\n const {data, total} = await this.graphql.query<LoadResult<any>>({\n query,\n variables,\n error: {code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR'},\n fetchPolicy: opts && opts.fetchPolicy || 'network-only'\n });\n const entities = (!opts || opts.toEntity !== false) ?\n (data || []).map(json => this.fromObject(json)) :\n (data || []) as T[];\n if (debug) console.debug(this._logPrefix + `${this._logTypeName} items loaded in ${Date.now() - now}ms`);\n\n const res: LoadResult<T> = {\n data: entities,\n total\n };\n\n // Add fetch more capability, if total was fetched\n if (withTotal) {\n const nextOffset = offset + entities.length;\n if (nextOffset < res.total) {\n res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts);\n }\n }\n\n return res;\n }\n\n async countAll(filter?: Partial<F>, opts?: LO) {\n // If no countAll query\n if (!this.queries.countAll) {\n // Fail if no loadAll (cannot count)\n if (!this.queries.loadAllWithTotal) throw new Error('Not implemented');\n\n // Use loadAll query, with size = 0;\n return (await this.loadAll(0, 1, null, null, filter,\n <LO & { withTotal: boolean; }>{withTotal: true}))?.total || 0;\n }\n\n filter = this.asFilter(filter);\n\n const res = await this.graphql.query<{ total: number;}>({\n query: this.queries.countAll,\n variables: {\n filter: filter && filter.asPodObject()\n },\n error: {code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR'},\n fetchPolicy: opts && opts.fetchPolicy || 'network-only'\n });\n return res.total;\n }\n\n async saveAll(entities: T[], opts?: EntitySaveOptions): Promise<T[]> {\n if (isEmptyArray(entities)) return entities; // Nothing to save: skip\n\n if (!this.mutations.saveAll) {\n if (!this.mutations.save) throw new Error('Not implemented');\n // Save one by one\n return chainPromises((entities || [])\n .map(entity => (() => this.save(entity, opts))));\n }\n\n let hasNewEntities = false;\n const json = entities.map(entity => {\n hasNewEntities = hasNewEntities || this.isNewFn(entity);\n this.fillDefaultProperties(entity);\n return this.asObject(entity);\n });\n\n const now = Date.now();\n if (this._debug) console.debug(this._logPrefix + `Saving all ${this._logTypeName}...`, json);\n\n await this.graphql.mutate<LoadResult<any>>({\n mutation: this.mutations.saveAll,\n refetchQueries: this.getRefetchQueriesForMutation(opts),\n awaitRefetchQueries: opts && opts.awaitRefetchQueries,\n variables: {\n data: json\n },\n error: {code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR'},\n update: (proxy, {data}) => {\n const savedEntities = data && data.data;\n if (savedEntities) {\n // Update entities (id and update date)\n entities.forEach(entity => {\n const savedEntity = savedEntities.find(e => this.equalsFn(e, entity));\n this.copyIdAndUpdateDate(savedEntity, entity);\n });\n\n if (hasNewEntities && this.watchQueriesUpdatePolicy === 'update-cache') {\n // Update the cache\n this.insertIntoMutableCachedQueries(proxy, {\n queries: this.getLoadQueries(),\n data: savedEntities\n });\n }\n }\n\n if (opts && opts.update) {\n opts.update(proxy, {data});\n }\n\n if (this._debug) console.debug(`${this._logTypeName} saved in ${Date.now() - now}ms`, entities);\n\n }\n });\n\n return entities;\n }\n\n /**\n * Save a referential entity\n *\n * @param entity\n * @param opts\n */\n async save(entity: T, opts?: EntitySaveOptions): Promise<T> {\n if (!this.mutations.save) {\n if (!this.mutations.saveAll) throw new Error('Not implemented');\n const data = await this.saveAll([entity], opts);\n return data && data[0];\n }\n\n // Fill default properties\n this.fillDefaultProperties(entity);\n\n // Transform into json\n const json = this.asObject(entity);\n\n const isNew = this.isNewFn(json);\n\n const now = Date.now();\n if (this._debug) console.debug(this._logPrefix + `Saving ${this._logTypeName}...`, json);\n\n await this.graphql.mutate<{data: any}>({\n mutation: this.mutations.save,\n refetchQueries: this.getRefetchQueriesForMutation(opts),\n awaitRefetchQueries: opts && opts.awaitRefetchQueries,\n variables: {\n data: json\n },\n error: {code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR'},\n update: (cache, {data}) => {\n // Update entity\n const savedEntity = data && data.data;\n this.copyIdAndUpdateDate(savedEntity, entity);\n\n // Insert into the cache\n if (isNew && this.watchQueriesUpdatePolicy === 'update-cache') {\n this.insertIntoMutableCachedQueries(cache, {\n queries: this.getLoadQueries(),\n data: savedEntity\n });\n }\n\n if (opts && opts.update) {\n opts.update(cache, {data});\n }\n\n if (this._debug) console.debug(this._logPrefix + `${entity.__typename} saved in ${Date.now() - now}ms`, entity);\n }\n });\n\n return entity;\n }\n\n /**\n * Delete referential entities\n */\n async deleteAll(entities: T[], opts?: Partial<{\n update: MutationUpdaterFn<any>;\n }> | any): Promise<any> {\n if (!this.mutations.deleteAll) {\n if (!this.mutations.delete) throw new Error('Not implemented');\n // Delete one by one\n return chainPromises((entities || [])\n .map(entity => (() => this.delete(entity, opts))));\n }\n\n // Filter saved entities\n entities = entities && entities.filter(e => isNotNil(e.id));\n\n // Nothing to save: skip\n if (isEmptyArray(entities)) return;\n\n const ids = entities.map(t => t.id);\n const now = Date.now();\n if (this._debug) console.debug(this._logPrefix + `Deleting ${this._logTypeName}...`, ids);\n\n await this.graphql.mutate<any>({\n mutation: this.mutations.deleteAll,\n refetchQueries: this.getRefetchQueriesForMutation(opts),\n awaitRefetchQueries: opts && opts.awaitRefetchQueries,\n variables: { ids },\n error: {code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR'},\n update: (cache, res) => {\n\n // Remove from cache\n if (this.watchQueriesUpdatePolicy === 'update-cache') {\n this.removeFromMutableCachedQueriesByIds(cache, {\n queries: this.getLoadQueries(),\n ids\n });\n }\n\n if (opts && opts.update) {\n opts.update(cache, res);\n }\n\n if (this._debug) console.debug(this._logPrefix + `${this._logTypeName} deleted in ${Date.now() - now}ms`);\n }\n });\n }\n\n /**\n * Delete a referential entity\n */\n async delete(entity: T, opts?: EntitySaveOptions | any): Promise<any> {\n if (!this.mutations.delete) {\n if (!this.mutations.deleteAll) throw new Error('Not implemented');\n const data = await this.deleteAll([entity], opts);\n return data && data[0];\n }\n\n // Nothing to save: skip\n if (!entity || isNil(entity.id)) return;\n\n const id = entity.id;\n const now = new Date();\n if (this._debug) console.debug(this._logPrefix + `Deleting ${this._logTypeName} {${id}}...`);\n\n await this.graphql.mutate<any>({\n mutation: this.mutations.delete,\n refetchQueries: this.getRefetchQueriesForMutation(opts),\n awaitRefetchQueries: opts && opts.awaitRefetchQueries,\n variables: { id },\n error: {code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR'},\n update: (proxy, res) => {\n\n // Remove from cache\n if (this.watchQueriesUpdatePolicy === 'update-cache') {\n this.removeFromMutableCachedQueriesByIds(proxy, {\n queries: this.getLoadQueries(),\n ids: [id]\n });\n }\n\n if (opts && opts.update) {\n opts.update(proxy, res);\n }\n\n if (this._debug) console.debug(this._logPrefix + `${this._logTypeName} deleted in ${new Date().getTime() - now.getTime()}ms`);\n }\n });\n }\n\n listenChanges(id: ID, opts?: {\n query?: any;\n variables?: any;\n interval?: number;\n toEntity?: boolean;\n }): Observable<T> {\n if (isNil(id)) throw Error('Missing argument \\'id\\' ');\n if (!this.subscriptions.listenChanges) throw Error('Not implemented!');\n\n const variables = opts && opts.variables || {\n id,\n interval: opts && opts.interval || 10 // seconds\n };\n if (this._debug) console.debug(this._logPrefix + `[WS] Listening for changes on ${this._logTypeName} {${id}}...`);\n\n return this.graphql.subscribe<{data: any}>({\n query: opts && opts.query || this.subscriptions.listenChanges,\n variables,\n error: {\n code: ErrorCodes.SUBSCRIBE_DATA_ERROR,\n message: 'ERROR.SUBSCRIBE_DATA_ERROR'\n }\n })\n .pipe(\n map(({data}) => {\n const entity = (!opts || opts.toEntity !== false) ? data && this.fromObject(data) : data;\n if (entity && this._debug) console.debug(this._logPrefix + `[WS] Received changes on ${this._logTypeName} {${id}}`, entity);\n\n // TODO: missing = deleted ?\n if (!entity) console.warn(this._logPrefix + `[WS] Received deletion on ${this._logTypeName} {${id}} - TODO check implementation`);\n\n return entity;\n })\n );\n }\n\n copyIdAndUpdateDate(source: T, target: T) {\n if (!source) return;\n\n // Update (id and updateDate)\n EntityUtils.copyIdAndUpdateDate(source, target);\n }\n\n\n fromObject(source: any): T {\n if (!source) return source;\n const target = new this.dataType();\n target.fromObject(source);\n return target;\n }\n\n asFilter(source: any): F {\n return EntityFilterUtils.fromObject(source, this.filterType);\n }\n\n /* -- protected functions -- */\n\n protected fillDefaultProperties(source: T) {\n // Can be override by subclasses\n }\n\n protected asObject(entity: T, opts?: EntityAsObjectOptions): any {\n // Can be override by subclasses\n return entity.asObject(opts);\n }\n\n protected getRefetchQueriesForMutation(opts?: EntitySaveOptions): ((result: FetchResult<{data: any}>) => InternalRefetchQueriesInclude) | InternalRefetchQueriesInclude {\n if (opts && opts.refetchQueries) return opts.refetchQueries;\n\n // Skip if update policy not used refecth queries\n if (this.watchQueriesUpdatePolicy !== 'refetch-queries') return undefined;\n\n const queries = this.getLoadQueries();\n if (!queries.length) return undefined; // Skip if empty\n\n // Find the refetch queries definition\n return this.findRefetchQueries({queries});\n }\n\n protected getLoadQueries(): DocumentNode[] {\n return [this.queries.loadAll, this.queries.loadAllWithTotal].filter(isNotNil);\n }\n\n}\n","import {AppTable} from './table.class';\nimport {debounceTime} from 'rxjs/operators';\nimport {firstFalsePromise} from '../../shared/observables';\nimport {TableElement} from '@e-is/ngx-material-table';\nimport {AppFormUtils} from '../form/form.utils';\n\nexport class AppTableUtils {\n\n static waitIdle(table: AppTable<any, any, any>): Promise<any> {\n if (!table || !table.dataSource) {\n throw new Error('Invalid table. Missing table or table.dataSource');\n }\n return table.dataSource.waitIdle();\n }\n\n static logRowErrors(row: TableElement<any>, logPrefix?: string): void {\n AppFormUtils.logFormErrors(row.validator, logPrefix);\n }\n\n}\n","import {TableDataSource, TableElement, ValidatorService} from '@e-is/ngx-material-table';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {Entity, IEntity} from '../services/model/entity.model';\nimport {ErrorCodes} from '../services/errors';\nimport {catchError, debounceTime, map, takeUntil} from 'rxjs/operators';\nimport {Directive, OnDestroy} from '@angular/core';\nimport {SortDirection} from '@angular/material/sort';\nimport {CollectionViewer} from '@angular/cdk/collections';\nimport {TableDataSourceOptions} from '@e-is/ngx-material-table/src/app/ngx-material-table/table-data-source';\nimport {EntitiesServiceWatchOptions, IEntitiesService, LoadResult} from '../../shared/services/entity-service.class';\nimport {firstFalsePromise, firstNotNilPromise} from '../../shared/observables';\nimport {isNotEmptyArray, isNotNil, removeEnd, toBoolean} from '../../shared/functions';\nimport {AppTableUtils} from './table.utils';\n\n\nexport declare interface AppTableDataServiceOptions<O extends EntitiesServiceWatchOptions = EntitiesServiceWatchOptions> extends EntitiesServiceWatchOptions {\n [key: string]: any;\n saveOnlyDirtyRows?: boolean;\n readOnly?: boolean;\n}\nexport class AppTableDataSourceOptions<\n T extends Entity<T, ID>,\n ID = number,\n O extends EntitiesServiceWatchOptions = EntitiesServiceWatchOptions> implements TableDataSourceOptions {\n [key: string]: any;\n prependNewElements?: boolean;\n suppressErrors?: boolean;\n keepOriginalDataAfterConfirm?: boolean;\n onRowCreated?: (row: TableElement<T>) => Promise<void> | void;\n dataServiceOptions?: AppTableDataServiceOptions<O>;\n debug?: boolean;\n}\n\n// @dynamic\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class EntitiesTableDataSource<\n T extends IEntity<T, ID>,\n F = any,\n ID = number,\n O extends EntitiesServiceWatchOptions = EntitiesServiceWatchOptions>\n extends TableDataSource<T>\n implements OnDestroy {\n\n private readonly _logTypeName: string;\n private readonly _options: AppTableDataSourceOptions<T, ID, O>;\n\n protected readonly _debug: boolean;\n protected _creating = false;\n protected _saving = false;\n protected _useValidator = false;\n protected _stopWatching$ = new Subject<any>();\n protected _editingRowCount = 0;\n\n loadingSubject = new BehaviorSubject<boolean>(undefined);\n\n get serviceOptions(): AppTableDataServiceOptions<O> {\n return this._options.dataServiceOptions;\n }\n\n set serviceOptions(value: AppTableDataServiceOptions<O>) {\n this._options.dataServiceOptions = value;\n }\n\n get options(): AppTableDataSourceOptions<T, ID, O> {\n return this._options;\n }\n\n get loaded(): boolean {\n return this.loadingSubject.value === false; // Should be false when undefined (initial state)\n }\n\n get loading(): boolean {\n return this.loadingSubject.value !== false; // Should be true when undefined (initial state)\n }\n\n /**\n * Creates a new TableDataSource instance, that can be used as datasource of `@angular/cdk` data-table.\n *\n * @param dataService A service to load and save data\n * @param dataType Type of data contained by the Table. If not specified, then `data` with at least one element must be specified.\n * @param environment\n * @param validatorService Service that create instances of the FormGroup used to validate row fields.\n * @param config Additional configuration for table.\n */\n constructor(dataType: new() => T,\n public readonly dataService: IEntitiesService<T, F, O>,\n validatorService?: ValidatorService,\n config?: AppTableDataSourceOptions<T, ID, O>) {\n super([], dataType, validatorService, config);\n this._options = {\n dataServiceOptions: {},\n debug: config && config.suppressErrors === false,\n keepOriginalDataAfterConfirm: false,\n ...config\n };\n this._useValidator = isNotNil(validatorService);\n\n this._logTypeName = removeEnd((new dataType()).__typename || 'UnknownVO', 'VO');\n\n // For DEV ONLY\n this._debug = this._options.debug === true;\n }\n\n ngOnDestroy() {\n this._stopWatching$.next();\n this._stopWatching$.complete();\n this._stopWatching$.unsubscribe();\n this.loadingSubject.complete();\n this.loadingSubject.unsubscribe();\n }\n\n watchAll(offset: number,\n size: number,\n sortBy?: string,\n sortDirection?: SortDirection,\n filter?: Partial<F>): Observable<LoadResult<T>> {\n\n this._stopWatching$.next();\n this._editingRowCount = 0;\n this.markAsLoading();\n\n return this.dataService.watchAll(offset, size, sortBy, sortDirection, filter, this.serviceOptions as O)\n .pipe(\n // Stop this pipe next time we call watchAll()\n takeUntil(this._stopWatching$),\n catchError(err => this.handleError(err, 'ERROR.LOAD_DATA_ERROR')),\n map((res: LoadResult<T>) => {\n if (this._saving) {\n console.info(`[table-datasource] Received ${this._logTypeName} data (from service), but still saving: skip`);\n } else if (this._editingRowCount > 0) {\n console.warn(`[table-datasource] Received ${this._logTypeName} data, while ${this._editingRowCount} rows still editing: skip; Please check save() implementation in the table!`);\n } else {\n this.updateDatasource((res.data || []) as T[]);\n }\n return res;\n })\n );\n }\n\n async save(): Promise<boolean> {\n if (toBoolean(this.serviceOptions.readOnly, false)) {\n console.error('[table-datasource] Enable to save, because serviceOptions.readOnly=true');\n return false;\n }\n // Saving twice (should never occur)\n if (this._saving) {\n console.warn(`[table-datasource] Trying to save ${this._logTypeName} rows twice. Skip`);\n return false;\n }\n\n this._saving = true;\n this.markAsLoading();\n\n const onlyDirtyRows = toBoolean(this.serviceOptions.saveOnlyDirtyRows, false);\n\n try {\n if (this._debug) console.debug(`[table-datasource] Saving ${this._logTypeName} rows... {onlyDirty: ${onlyDirtyRows}}`);\n\n // Get all rows\n const rows = await this.getRows();\n\n // Finish editing all rows\n const invalidRows = rows.filter(row => row.editing && !row.confirmEditCreate());\n\n // Cannot finish some rows: error\n if (invalidRows.length) {\n // log errors\n if (this._debug) invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this._logTypeName} row #${row.id}`));\n // Stop with an error\n throw {code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR'};\n }\n\n this._editingRowCount = 0;\n\n let data: T[];\n let dataToSave: T[];\n\n if (this._useValidator) {\n dataToSave = [];\n data = rows.map(row => {\n const currentData = new this.dataConstructor() as T;\n currentData.fromObject(row.currentData);\n // Filter to keep only dirty row\n if (onlyDirtyRows && row.validator.dirty) dataToSave.push(currentData);\n return currentData;\n });\n if (!onlyDirtyRows) dataToSave = data;\n }\n // Or use the current data without conversion (when no validator service used)\n else {\n data = rows.map(row => row.currentData);\n // save all data, as we don't have any dirty marker\n dataToSave = data;\n }\n\n // If no data to save: exit\n if (onlyDirtyRows && !dataToSave.length) {\n if (this._debug) console.debug(`[table-datasource] No ${this._logTypeName} data to save. Skip`);\n return false;\n }\n\n if (this._debug) console.debug(`[table-datasource] Asking service to save this ${this._logTypeName} data:`, dataToSave);\n await this.dataService.saveAll(dataToSave, this.serviceOptions);\n\n if (this._debug) console.debug(`[table-datasource] Saving ${this._logTypeName} data [OK]`);\n\n // LP 23/03/2021: update datasource is necessary but can be changed to a refetch() on QueryRef (must be created and registered in GraphqlService.watchQuery)\n this.updateDatasource(data, {emitEvent: false});\n\n return true;\n } catch (error) {\n if (this._debug) console.error('[table-datasource] Error while saving: ' + error && error.message || error);\n throw error;\n } finally {\n this._saving = false;\n this.markAsLoaded();\n }\n }\n\n updateDatasource(data: T[], opts?: { emitEvent: boolean }) {\n if (this._debug) console.debug(`[table-datasource] Updating datasource with data:`, data);\n\n super.updateDatasource(data, opts);\n\n if (!opts || opts.emitEvent !== false) {\n this.markAsLoaded();\n }\n }\n\n // Overwrite default signature\n createNew(insertAt?: number): void {\n this.asyncCreateNew(insertAt);\n }\n\n connect(collectionViewer: CollectionViewer): Observable<TableElement<T>[] | ReadonlyArray<TableElement<T>>> {\n // DEBUG console.debug(\"[entities-datasource] connect\");\n return super.connect(collectionViewer);\n }\n\n disconnect(collectionViewer?: CollectionViewer) {\n super.disconnect(collectionViewer);\n this._stopWatching$.next();\n }\n\n async waitIdle(debounceTimeMs?: number): Promise<any> {\n return firstFalsePromise(this.loadingSubject\n .asObservable()\n .pipe(\n debounceTime(debounceTimeMs || 100) // if not started yet, wait\n ));\n }\n\n confirmCreate(row: TableElement<T>) {\n if (!super.confirmCreate(row)) return false;\n if (row.editing && row.validator) {\n console.warn('[table-datasource] Row still has {editing: true} after confirmCreate()! Force editing to false');\n row.validator.disable({onlySelf: true, emitEvent: false});\n }\n return true;\n }\n\n confirmEdit(row: TableElement<T>): boolean {\n if (!super.confirmEdit(row)) return false;\n if (row.editing && row.validator) {\n console.warn('[table-datasource] Row still has {editing: true} after confirmCreate()! Force editing to false');\n row.validator.disable({onlySelf: true, emitEvent: false});\n }\n return true;\n }\n\n startEdit(row: TableElement<T>) {\n if (this._debug) console.debug('[table-datasource] Start to edit row', row);\n row.startEdit();\n this._editingRowCount++;\n }\n\n cancelOrDelete(row: TableElement<T>) {\n if (this._debug) console.debug('[table-datasource] Cancelling or deleting row', row);\n row.cancelOrDelete();\n this._editingRowCount--;\n }\n\n handleError(error: any, message: string): Observable<LoadResult<T>> {\n const errorMsg = error && error.message || error;\n console.error(`[table-datasource] Service ${this._logTypeName} sent error: ${errorMsg}`, error);\n this.markAsLoaded();\n throw new Error(message || errorMsg);\n }\n\n handleErrorPromise(error: any) {\n const errorMsg = error && error.message || error;\n console.error(`[table-datasource] Service ${this._logTypeName} sent error: ${errorMsg}`, error);\n this.markAsLoaded();\n throw error;\n }\n\n delete(id: number): void {\n // If new row: not need to propagate to the dataService\n if (id === -1) {\n return super.delete(id);\n }\n\n const row = this.getRow(id);\n if (!row) {\n console.error(`[table-datasource] Row to delete with id=${id} not found`);\n return;\n }\n\n this.loadingSubject.next(true);\n\n this.dataService.deleteAll([row.currentData], this.serviceOptions)\n .catch(err => this.handleErrorPromise(err))\n .then(() => {\n setTimeout(() => {\n // make sure row has been deleted (because GrapQHl cache remove can failed)\n const present = this.getRow(id) === row;\n if (present) super.delete(id);\n this.loadingSubject.next(false);\n }, 300);\n });\n }\n\n public deleteAll(rows: TableElement<T>[]): Promise<any> {\n\n this.markAsLoading();\n\n const data = rows.map(r => r.currentData);\n const rowsById = rows.reduce((res, row) => {\n res[row.id] = row;\n return res;\n }, {});\n const self = this;\n const selfDelete = super.delete;\n\n return this.dataService.deleteAll(data, this.serviceOptions)\n .catch(err => this.handleErrorPromise(err))\n .then(() => {\n // Workaround, to be sure all rows has been deleted\n // Sometimes, the service miss deletion, or GrapQHl cache remove failed\n const rowNotDeleted = Object.getOwnPropertyNames(rowsById).reduce((res, id) => {\n const row = rowsById[id];\n const present = self.getRow(+id) === row;\n return present ? res.concat(row) : res;\n }, []).sort((a, b) => a.id > b.id ? -1 : 1);\n // Apply missing deletion\n if (isNotEmptyArray(rowNotDeleted)) {\n console.warn(`[table-datasource] Force deletion of ${rowNotDeleted.length} rows (Is service applying deletion to observable ?)`);\n rowNotDeleted.forEach(r => selfDelete.call(self, r.id));\n }\n this.loadingSubject.next(false);\n });\n }\n\n public getRows(): Promise<TableElement<T>[]> {\n return firstNotNilPromise(this.connect(null)) as Promise<TableElement<T>[]>;\n }\n\n public async asyncCreateNew(insertAt?: number): Promise<void> {\n if (this._creating) return; // Avoid multiple call (should never occur)\n\n this._creating = true;\n\n super.createNew(insertAt);\n const row = this.getRow(-1);\n\n if (row && this._options && this._options.onRowCreated) {\n const res = this._options.onRowCreated(row);\n // If async function, wait the end before ending\n if (res instanceof Promise) {\n try {\n await res;\n }\n catch (err) {\n console.error(err && err.message || err, err);\n }\n }\n }\n\n this._editingRowCount++;\n this._creating = false;\n }\n\n /* -- protected method -- */\n\n markAsLoading() {\n if (this.loadingSubject.value !== true) {\n this.loadingSubject.next(true);\n }\n }\n\n markAsLoaded() {\n if (this.loadingSubject.value !== false) {\n this.loadingSubject.next(false);\n }\n }\n}\n","import { AfterViewInit, Directive, EventEmitter, Injector, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, MatSortable, SortDirection } from '@angular/material/sort';\nimport { MatTable } from '@angular/material/table';\nimport { BehaviorSubject, combineLatest, EMPTY, merge, Observable, of, Subject, Subscription } from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, filter, first, map, mergeMap, startWith, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { TableElement } from '@e-is/ngx-material-table';\nimport { EntitiesTableDataSource } from './entities-table-datasource.class';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { EntityUtils, IEntity } from '../services/model/entity.model';\nimport { AlertController, ModalController, Platform, ToastController } from '@ionic/angular';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ColumnItem, TableSelectColumnsComponent } from './table-select-columns.component';\nimport { Location } from '@angular/common';\nimport { ErrorCodes } from '../services/errors';\nimport { AppFormUtils, IAppForm } from '../form/form.utils';\nimport { LocalSettingsService } from '../services/local-settings.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { PlatformService } from '../services/platform.service';\nimport { MatAutocompleteConfigHolder, MatAutocompleteFieldAddOptions, MatAutocompleteFieldConfig } from '../../shared/material/autocomplete/material.autocomplete';\nimport { CompletableEvent, createPromiseEventEmitter, emitPromiseEvent } from '../../shared/events';\nimport { changeCaseToUnderscore, isEmptyArray, isNil, isNotNil, toBoolean } from '../../shared/functions';\nimport {chainPromises, firstFalsePromise} from '../../shared/observables';\nimport { ShowToastOptions, Toasts } from '../../shared/toasts';\nimport { Alerts } from '../../shared/alerts';\nimport { SharedValidators } from '../../shared/validator/validators';\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport {LoadResult} from '../../shared/services/entity-service.class';\n\nexport const SETTINGS_DISPLAY_COLUMNS = 'displayColumns';\nexport const SETTINGS_SORTED_COLUMN = 'sortedColumn';\nexport const SETTINGS_FILTER = 'filter';\nexport const SETTINGS_PAGE_SIZE = 'pageSize';\nexport const DEFAULT_PAGE_SIZE = 20;\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [20, 50, 100, 200, 500];\nexport const RESERVED_START_COLUMNS = ['select', 'id'];\nexport const RESERVED_END_COLUMNS = ['actions'];\nexport const DEFAULT_REQUIRED_COLUMNS = ['id'];\n\nexport class CellValueChangeListener {\n subject: Subject<any>;\n subscription: Subscription; // The row start editing subscription\n formPath: string;\n emitInitialValue: boolean;\n}\n\n\nexport interface IModalDetailOptions<T = any> {\n // Data\n isNew: boolean;\n data: T;\n disabled: boolean;\n\n // Callback functions\n onDelete: (event: UIEvent, data: T) => Promise<boolean>;\n}\n\nexport type SaveActionType = 'delete' | 'sort' | 'filter';\n\n// @dynamic\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class AppTable<\n T extends IEntity<T, ID>,\n F = any,\n ID = number\n >\n implements OnInit, OnDestroy, AfterViewInit, IAppForm {\n\n private _initialized = false;\n private _subscription = new Subscription();\n private _dataSourceloadingSubscription: Subscription;\n\n private _cellValueChangesDefs: {\n [key: string]: CellValueChangeListener;\n } = {};\n\n protected _enabled = true;\n protected _destroy$ = new Subject();\n protected _autocompleteConfigHolder: MatAutocompleteConfigHolder;\n protected allowRowDetail = true;\n protected translate: TranslateService;\n protected alertCtrl: AlertController;\n protected toastController: ToastController;\n protected previouslyEditedRowId: number;\n\n excludesColumns: string[] = [];\n displayedColumns: string[];\n totalRowCount: number|null = null;\n visibleRowCount: number;\n\n loadingSubject = new BehaviorSubject<boolean>(true);\n savingSubject = new BehaviorSubject<boolean>(false);\n dirtySubject = new BehaviorSubject<boolean>(false);\n errorSubject = new BehaviorSubject<string>(undefined);\n\n get error(): string {\n return this.errorSubject.value;\n }\n\n get error$(): Observable<string> {\n return this.errorSubject.asObservable();\n }\n\n /**\n * @deprecated\n * @param error\n */\n set error(error: string) {\n this.setError(error);\n }\n\n get loading$(): Observable<boolean> {\n return this.loadingSubject.asObservable();\n }\n\n get saving$(): Observable<boolean> {\n return this.savingSubject.asObservable();\n }\n\n isRateLimitReached = false;\n selection = new SelectionModel<TableElement<T>>(true, []);\n editedRow: TableElement<T> = undefined;\n autocompleteFields: {[key: string]: MatAutocompleteFieldConfig};\n mobile: boolean;\n\n // Table options\n @Input() settingsId: string;\n @Input() debug: boolean;\n @Input() i18nColumnPrefix = 'COMMON.';\n @Input() i18nColumnSuffix: string;\n @Input() autoLoad = true;\n @Input() readOnly: boolean;\n @Input() inlineEdition: boolean;\n @Input() focusFirstColumn = false;\n @Input() confirmBeforeDelete = false;\n @Input() confirmBeforeCancel = false;\n @Input() undoableDeletion = false;\n @Input() saveBeforeDelete: boolean;\n @Input() keepEditedRowOnSave: boolean;\n @Input() saveBeforeSort: boolean;\n @Input() saveBeforeFilter: boolean;\n @Input() propagateRowError = false;\n\n @Input() defaultSortBy: string;\n @Input() defaultSortDirection: SortDirection;\n @Input() defaultPageSize = DEFAULT_PAGE_SIZE;\n @Input() defaultPageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS;\n\n // Focus manager\n @Input() focusColumn: string;\n\n get firstUserColumn(): string {\n return this.displayedColumns[RESERVED_START_COLUMNS.length];\n }\n\n get lastUserColumn(): string {\n return this.displayedColumns[this.displayedColumns.length - RESERVED_END_COLUMNS.length - 1];\n }\n\n @Input() set dataSource(value: EntitiesTableDataSource<T, F, ID>) {\n this.setDatasource(value);\n }\n\n get dataSource(): EntitiesTableDataSource<T, F, ID> {\n return this._dataSource;\n }\n\n @Input() set filter(value: F) {\n this.setFilter(value);\n }\n\n get filter(): F {\n return this._filter;\n }\n\n get empty(): boolean {\n return this.loading || this.totalRowCount === 0;\n }\n\n @Output() onRefresh = new EventEmitter<any>();\n @Output() onOpenRow = new EventEmitter<{ id?: ID; row: TableElement<T> }>();\n @Output() onNewRow = new EventEmitter<any>();\n @Output() onStartEditingRow = new EventEmitter<TableElement<T>>();\n @Output() onConfirmEditCreateRow = new EventEmitter<TableElement<T>>();\n @Output() onCancelOrDeleteRow = new EventEmitter<TableElement<T>>();\n @Output() onBeforeDeleteRows = createPromiseEventEmitter<boolean, {rows: TableElement<T>[]}>();\n @Output() onBeforeCancelRows = createPromiseEventEmitter<boolean, {rows: TableElement<T>[]}>();\n @Output() onBeforeSave = createPromiseEventEmitter<{confirmed: boolean; save: boolean}, {action: SaveActionType; valid: boolean}>();\n @Output() onAfterDeletedRows = new EventEmitter<TableElement<T>[]>();\n @Output() onSort = new EventEmitter<any>();\n @Output() onDirty = new EventEmitter<boolean>();\n @Output() onError = new EventEmitter<string>();\n\n get dirty(): boolean {\n return this.dirtySubject.value;\n }\n\n get valid(): boolean {\n return this.editedRow && this.editedRow.editing ? this.editedRow.validator?.valid : true;\n }\n\n get invalid(): boolean {\n return this.editedRow && this.editedRow.editing ? this.editedRow.validator?.invalid : false;\n }\n\n get pending(): boolean {\n return this.editedRow && this.editedRow.editing ? this.editedRow.validator?.pending : false;\n }\n\n disable(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (this.sort) this.sort.disabled = true;\n this._enabled = false;\n }\n\n enable(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (this.sort) this.sort.disabled = false;\n this._enabled = true;\n }\n\n get enabled(): boolean {\n return this._enabled;\n }\n\n // FIXME: need to hidden buttons (in HTML), etc. when disabled\n @Input() set disabled(disabled: boolean) {\n if (disabled !== !this._enabled) {\n if (disabled) this.disable({emitEvent: false});\n else this.enable({emitEvent: false});\n }\n }\n\n get disabled(): boolean {\n return !this._enabled;\n }\n\n markAsDirty(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (this.dirtySubject.value !== true) {\n this.dirtySubject.next(true);\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n }\n\n markAsPristine(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (this.dirtySubject.value !== false) {\n this.dirtySubject.next(false);\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n }\n\n markAsUntouched(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (this.dirtySubject.value !== false || (this.editedRow && this.editedRow.id !== this.previouslyEditedRowId)) {\n // Cancel the current editing row only if editing and if it was not previously saved\n this.dirtySubject.next(false);\n if (this.editedRow?.editing) {\n this.dataSource.cancelOrDelete(this.editedRow);\n }\n this.editedRow = null;\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n this.previouslyEditedRowId = undefined;\n }\n\n /**\n * @deprecated prefer to use markAllAsTouched()\n * @param opts\n */\n markAsTouched(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n console.warn('TODO: Replace this call by markAllAsTouched() - because of changes in ngx-components >= 0.16.0');\n if (this.editedRow?.editing) {\n this.editedRow.validator?.markAllAsTouched();\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n }\n\n markAllAsTouched(opts?: { emitEvent?: boolean }) {\n if (this.editedRow?.editing) {\n this.editedRow.validator?.markAllAsTouched();\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n }\n\n markAsSaving(opts?: { emitEvent?: boolean }) {\n if (this.savingSubject.value !== true) {\n this.savingSubject.next(true);\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n }\n\n markAsSaved(opts?: { emitEvent?: boolean }) {\n if (this.savingSubject.value !== false) {\n this.savingSubject.next(false);\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n }\n\n markAsLoading(opts?: {emitEvent?: boolean}) {\n this.setLoading(true, opts);\n }\n\n markAsLoaded(opts?: {emitEvent?: boolean}) {\n this.setLoading(false, opts);\n }\n\n protected markRowAsDirty(row?: TableElement<T>, opts?: { onlySelf?: boolean; emitEVent?: boolean; }) {\n row = row || this.editedRow;\n if (row) row.validator?.markAsDirty(opts);\n this.markAsDirty(opts);\n }\n\n get loading(): boolean {\n return this.loadingSubject.value;\n }\n\n get loaded(): boolean {\n return !this.loadingSubject.value;\n }\n\n enableSort() {\n if (this.sort) this.sort.disabled = false;\n }\n\n disableSort() {\n if (this.sort) this.sort.disabled = true;\n }\n\n set pageSize(value: number) {\n this.defaultPageSize = value;\n if (this.paginator) {\n this.paginator.pageSize = value;\n }\n }\n\n get pageSize(): number {\n return this.paginator && this.paginator.pageSize || this.defaultPageSize || DEFAULT_PAGE_SIZE;\n }\n\n get pageOffset(): number {\n return this.paginator && this.paginator.pageIndex * this.paginator.pageSize || 0;\n }\n\n get sortActive(): string {\n return this.sort && this.sort.active;\n }\n get sortDirection(): 'asc' | 'desc' {\n return this.sort && this.sort.direction && (this.sort.direction === 'desc' ? 'desc' : 'asc') || undefined;\n }\n\n private _paginator: MatPaginator|null = null;\n\n @Input() set paginator(value: MatPaginator) {\n this._paginator = value;\n }\n\n get paginator(): MatPaginator {\n return this._paginator || this.childPaginator;\n }\n\n @ViewChild(MatTable, {static: false}) table: MatTable<T>;\n @ViewChild(MatPaginator, {static: false}) childPaginator: MatPaginator;\n @ViewChild(MatSort, {static: false}) sort: MatSort;\n\n protected constructor(\n protected route: ActivatedRoute,\n protected router: Router,\n protected platform: Platform | PlatformService,\n protected location: Location,\n protected modalCtrl: ModalController,\n protected settings: LocalSettingsService,\n protected columns: string[],\n protected _dataSource?: EntitiesTableDataSource<T, F, ID>,\n private _filter?: F,\n injector?: Injector\n ) {\n this.mobile = this.platform.is('mobile');\n this.translate = injector && injector.get(TranslateService);\n this.alertCtrl = injector && injector.get(AlertController);\n this.toastController = injector && injector.get(ToastController);\n this._autocompleteConfigHolder = new MatAutocompleteConfigHolder({\n getUserAttributes: (a, b) => settings.getFieldDisplayAttributes(a, b)\n });\n this.autocompleteFields = this._autocompleteConfigHolder.fields;\n\n }\n\n ngOnInit() {\n if (this._initialized) return; // Init only once\n this._initialized = true;\n\n // Set defaults\n this.readOnly = toBoolean(this.readOnly, false); // read/write by default\n this.inlineEdition = !this.readOnly && toBoolean(this.inlineEdition, false); // force to false when readonly\n this.saveBeforeDelete = toBoolean(this.saveBeforeDelete, !this.readOnly); // force to false when readonly\n this.saveBeforeSort = toBoolean(this.saveBeforeSort, !this.readOnly); // force to false when readonly\n this.saveBeforeFilter = toBoolean(this.saveBeforeFilter, !this.readOnly); // force to false when readonly\n this.keepEditedRowOnSave = toBoolean(this.keepEditedRowOnSave, this.inlineEdition);\n\n // Check ask user confirmation is possible\n if (this.confirmBeforeDelete && !this.alertCtrl) throw Error('Missing \\'alertCtrl\\' or \\'injector\\' in component\\'s constructor.');\n\n // Defined unique id for settings for the page\n this.settingsId = this.settingsId || this.generateTableId();\n\n this.displayedColumns = this.getDisplayColumns();\n\n // Load the sorted columns, from settings\n {\n const sortedColumn = this.getSortedColumn();\n this.defaultSortBy = sortedColumn.id;\n this.defaultSortDirection = sortedColumn.start;\n }\n\n this.defaultPageSize = this.getPageSize();\n\n // Propagate error to event emitter\n this.registerSubscription(this.errorSubject\n .subscribe(value => this.onError.emit(value)));\n\n // Propagate dirty to event emitter\n this.registerSubscription(this.dirtySubject\n .subscribe(value => this.onDirty.emit(value)));\n\n // Propagate row dirty state to table\n this.registerSubscription(\n this.onStartEditingRow\n .pipe(\n filter(row => row.validator && true),\n mergeMap(row => row.validator.valueChanges\n .pipe(\n takeUntil(\n // Stop if next another row, or destroying\n combineLatest([\n this.onStartEditingRow,\n this._destroy$\n ])\n ),\n map(() => row.validator?.dirty),\n filter(dirty => dirty === true),\n first(),\n // DEBUG\n //tap(() => console.debug(\"Propagate row's dirty to table...\"))\n ))\n )\n .subscribe(() => this.markAsDirty())\n );\n\n // Call datasource refresh, on each refresh events\n this.registerSubscription(\n this.onRefresh\n .pipe(\n startWith<any, any>(this.autoLoad ? {} : 'skip'),\n switchMap(\n (event: any) => {\n this.dirtySubject.next(false);\n this.selection.clear();\n if (event === 'skip') {\n return of(undefined);\n }\n if (!this._dataSource) {\n if (this.debug) console.debug('[table] Skipping data load: no dataSource defined');\n return of(undefined);\n }\n if (this.debug) console.debug('[table] Calling dataSource.watchAll()...');\n return this._dataSource.watchAll(\n this.pageOffset,\n this.pageSize,\n this.sortActive,\n this.sortDirection,\n this._filter\n );\n }),\n catchError(err => {\n if (this.debug) console.error(err);\n this.setError(err && err.message || err);\n return of(undefined); // Continue\n })\n )\n .subscribe(res => this.updateView(res)));\n\n // Listen dataSource events\n if (this._dataSource) this.listenDatasourceLoading(this._dataSource);\n }\n\n ngAfterViewInit() {\n if (this.debug) {\n // Warn if table not exists\n if (!this.table) {\n setTimeout(() => {\n if (!this.table) {\n console.warn(`[table] Missing <mat-table> in the HTML template (after waiting 500ms)! Component: ${this.constructor.name}`);\n }\n }, 500);\n }\n\n if (!this.displayedColumns) console.warn(`[table] Missing 'displayedColumns'. Did you call super.ngOnInit() in component ${this.constructor.name} ?`);\n }\n\n merge(\n // Listen sort events\n this.sort && this.sort.sortChange\n .pipe(\n mergeMap(async () => this.saveBeforeAction('sort')),\n filter(res => res === true),\n // Save sort in settings\n tap(() => {\n const value = [this.sort.active, this.sort.direction || 'asc'].join(':');\n this.settings.savePageSetting(this.settingsId, value, SETTINGS_SORTED_COLUMN);\n })\n )\n || EMPTY,\n\n // Listen paginator events\n this.paginator && this.paginator.page\n .pipe(\n mergeMap(async () => this.saveBeforeAction('sort')),\n filter(res => res === true),\n // Save page size\n tap(() => this.settings.savePageSetting(this.settingsId, this.paginator.pageSize, SETTINGS_PAGE_SIZE))\n ) || EMPTY\n ).subscribe(value => {\n this.onSort.emit();\n this.onRefresh.emit(value);\n });\n\n // If the user changes the sort order, reset back to the first page.\n if (this.sort && this.paginator) {\n this.registerSubscription(\n this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0)\n );\n }\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n\n // Unsubscribe column value changes\n Object.keys(this._cellValueChangesDefs).forEach(col => this.stopCellValueChanges(col, true));\n this._cellValueChangesDefs = {};\n\n this.loadingSubject.unsubscribe();\n this.savingSubject.unsubscribe();\n this.errorSubject.unsubscribe();\n this.dirtySubject.unsubscribe();\n\n this.onRefresh.unsubscribe();\n this.onOpenRow.unsubscribe();\n this.onNewRow.unsubscribe();\n this.onStartEditingRow.unsubscribe();\n this.onConfirmEditCreateRow.unsubscribe();\n this.onCancelOrDeleteRow.unsubscribe();\n this.onBeforeDeleteRows.unsubscribe();\n this.onBeforeCancelRows.unsubscribe();\n this.onBeforeSave.unsubscribe();\n this.onAfterDeletedRows.unsubscribe();\n this.onSort.unsubscribe();\n this.onDirty.unsubscribe();\n this.onError.unsubscribe();\n\n this._destroy$.next();\n this._destroy$.unsubscribe();\n\n this._dataSource?.ngOnDestroy();\n }\n\n async updateView(res: LoadResult<T> | undefined, opts?: {\n emitEvent?: boolean;\n }): Promise<void> {\n if (!res) return; // Skip (e.g error)\n if (res && res.data) {\n this.isRateLimitReached = !this.paginator || (res.data.length < this.paginator.pageSize);\n this.visibleRowCount = res.data.length;\n this.totalRowCount = isNotNil(res.total) ? res.total : ((this.paginator && this.paginator.pageIndex * (this.paginator.pageSize || DEFAULT_PAGE_SIZE) || 0) + this.visibleRowCount);\n if (this.debug) console.debug(`[table] ${res.data.length} rows loaded`);\n } else {\n //if (this.debug) console.debug('[table] NO rows loaded');\n this.isRateLimitReached = true;\n this.totalRowCount = 0;\n this.visibleRowCount = 0;\n }\n\n if (!opts || opts.emitEvent !== false) {\n this.markAsUntouched({emitEvent: false});\n this.markAsPristine({emitEvent: false});\n this.markAsLoaded({emitEvent: false});\n }\n\n this.markForCheck();\n }\n\n setDatasource(datasource: EntitiesTableDataSource<T, F, ID>) {\n if (this._dataSource) throw new Error('[table] dataSource already set !');\n if (datasource && this._dataSource !== datasource) {\n this._dataSource = datasource;\n if (this._initialized) this.listenDatasourceLoading(datasource);\n }\n }\n\n resetDataSource() {\n if (this._dataSourceloadingSubscription) {\n this._dataSourceloadingSubscription.unsubscribe();\n this._subscription.remove(this._dataSourceloadingSubscription);\n }\n this._dataSource?.ngOnDestroy();\n this._dataSource = null;\n }\n\n addColumnDef(column: CdkColumnDef) {\n this.table.addColumnDef(column);\n }\n\n removeColumnDef(column: CdkColumnDef) {\n this.table.removeColumnDef(column);\n }\n\n setFilter(filter: F, opts?: { emitEvent: boolean }) {\n opts = opts || {emitEvent: true};\n\n if (this.saveBeforeFilter) {\n\n // if a dirty table is to be saved before filter\n if (this.dirty) {\n\n // Save\n this.saveBeforeAction('filter').then(saved => {\n // Apply filter only if user didn't cancel the save or the save is ok\n if (saved) {\n this.applyFilter(filter, opts);\n }\n });\n\n } else {\n // apply filter on non dirty table\n this.applyFilter(filter, opts);\n }\n\n } else {\n\n // apply filter directly\n this.applyFilter(filter, opts);\n }\n }\n\n confirmAndAdd(event?: Event, row?: TableElement<T>): boolean {\n if (!this.confirmEditCreate(event, row)) {\n return false;\n }\n // Add row\n return this.addRow(event);\n }\n\n confirmAndBackward(event?: Event, row?: TableElement<T>): boolean {\n\n // Deleting edited row, if empty and not dirty\n const previousRow = this.editedRow;\n if (previousRow && (previousRow.id === -1) && previousRow.validator?.invalid && !(previousRow.validator?.dirty)) {\n this.deleteNewRow(event, previousRow);\n\n // Wait deletion is done, then edit previous row (by id, because of reloading)\n firstFalsePromise(this.loadingSubject)\n .then(() => this.editRowById(event, row.id, {focusColumn: this.lastUserColumn}));\n return true;\n }\n\n // Edit next row\n this.editRow(event, row, {focusColumn: this.lastUserColumn});\n return true;\n }\n\n confirmAndForward(event?: Event, row?: TableElement<T>): boolean {\n row = row || this.editedRow;\n if (!this.confirmEditCreate(event, row)) {\n return false;\n }\n // Edit next row\n this.editRowById(event, row.id + 1, {focusColumn: this.firstUserColumn});\n return true;\n }\n\n async editRowById(event: Event|undefined, id: number, opts?: {focusColumn?: string; }) {\n if (id < 0) return;\n if (id >= this.visibleRowCount) {\n this.focusColumn = opts && opts.focusColumn || this.firstUserColumn;\n this.addRow(event);\n }\n else {\n const row = await this.dataSource.getRow(id);\n this.editRow(event, row, opts);\n }\n }\n\n /**\n * Confirm the creation of the given row, or if not specified the currently edited row\n *\n * @param event\n * @param row\n */\n confirmEditCreate(event?: Event, row?: TableElement<T>): boolean {\n row = row || this.editedRow;\n if (!row || !row.editing) return true; // no row to confirm\n\n // Stop event\n event?.stopPropagation();\n\n // Confirmation edition or creation\n const confirmed = row.confirmEditCreate();\n\n if (confirmed) {\n // If edit finished, forget edited row\n if (row === this.editedRow) {\n this.editedRow = undefined;\n }\n\n // Mark table as dirty (if row is dirty)\n if (row.validator?.dirty) {\n this.markAsDirty({emitEvent: false /* because of resetError() */});\n }\n\n // Clear error\n this.resetError();\n\n // Emit the confirm event\n this.onConfirmEditCreateRow.next(row);\n\n return true; // Continue\n }\n\n if (row.validator) {\n // If pending: Wait end of validation, then loop\n if (row.validator.pending) {\n AppFormUtils.waitWhilePending(row.validator).then(() => this.confirmEditCreate(event, row));\n return false;\n }\n\n // NOT confirmed = row has error\n if (this.debug) {\n console.warn('[table] Cannot confirm row, because invalid');\n AppFormUtils.logFormErrors(row.validator, '[table] ');\n }\n\n // fix: mark all controls as touched to show errors\n row.validator.markAllAsTouched();\n\n // Compute row error, and propagate to table's error\n if (this.propagateRowError) {\n const error = this.getRowError(row);\n this.setError(error);\n }\n }\n\n return false;\n }\n\n cancelOrDelete(event: Event, row: TableElement<T>, opts?: { interactive?: boolean; keepEditing?: boolean; }) {\n if (row.id === -1) {\n this.deleteNewRow(event, row);\n } else {\n this.cancelExistingRow(event, row, opts);\n }\n }\n\n addRow(event?: Event, insertAt?: number): boolean {\n if (this.debug) console.debug('[table] Asking for new row...');\n if (!this._enabled) return false;\n\n // Use modal if inline edition is disabled\n if (!this.inlineEdition) {\n this.openNewRowDetail(event);\n return false;\n }\n\n // Try to finish edited row first\n if (!this.confirmEditCreate()) {\n return false;\n }\n\n // Add new row\n this.addRowToTable(insertAt);\n return true;\n }\n\n async save(opts?: { keepEditing?: boolean }): Promise<boolean> {\n opts = {\n keepEditing: this.keepEditedRowOnSave,\n ...opts\n };\n if (this.readOnly) {\n throw {code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY'};\n }\n\n this.resetError();\n\n // Keep edited row id (should be done BEFORE confirmEditCreate() )\n this.previouslyEditedRowId = opts.keepEditing && this.editedRow?.editing ? this.editedRow.id : undefined;\n const previouslyEditedData = isNotNil(this.previouslyEditedRowId) && this.editedRow.currentData || this.singleSelectedRow?.currentData;\n\n if (!this.confirmEditCreate()) {\n throw {code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR'};\n }\n\n // Mark as saving\n this.markAsSaving();\n\n try {\n\n // Calling service save()\n if (this.debug) console.debug('[table] Calling dataSource.save()...');\n const isOK = await this._dataSource.save();\n\n if (isOK) this.markAsPristine();\n\n return isOK;\n } catch (err) {\n this.setError(err && err.message || err);\n throw err;\n }\n finally {\n this.markAsSaved();\n\n // Restore previous row\n if (isNotNil(this.previouslyEditedRowId)) {\n await this.selectRowByIdOrData(this.previouslyEditedRowId, previouslyEditedData);\n }\n }\n }\n\n cancel(event?: Event, opts?: { interactive?: boolean; }) {\n\n // Check confirmation\n if ((!opts || opts.interactive !== false) && this.dirty && (this.confirmBeforeCancel || this.onBeforeCancelRows.observers.length > 0)) {\n event?.stopPropagation();\n this.canCancelRows().then(confirm => {\n // If confirmed, loop\n if (confirm) this.cancel(null, {interactive: false});\n });\n return;\n }\n\n this.onRefresh.emit();\n }\n\n async duplicateRow(event?: Event, row?: TableElement<T>, opts?: {\n skipProperties?: string[];\n }) {\n event?.stopPropagation();\n\n row = row || this.singleSelectedRow;\n if (!row || !this.confirmEditCreate(event, row)) {\n return false;\n }\n\n const newRow = await this.addRowToTable(row.id + 1);\n const json = {...row.currentData, id: null};\n\n // Reset some properties (e.g. rankOrder, etc)\n if (opts && opts.skipProperties) {\n const newData = newRow.currentData;\n opts.skipProperties.forEach(key => json[key] = newData[key]);\n }\n\n if (newRow.validator) {\n newRow.validator.patchValue(json);\n newRow.validator.markAsDirty();\n }\n else {\n if (newRow.currentData?.fromObject) {\n newRow.currentData.fromObject(json);\n }\n else {\n newRow.currentData = json;\n }\n this.markAsDirty();\n }\n\n // select\n this.clickRow(undefined, newRow);\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n isAllSelected() {\n // DEBUG\n //console.debug('isAllSelected. lengths', this.selection.selected.length, this.totalRowCount);\n\n return this.selection.selected.length === this.totalRowCount ||\n this.selection.selected.length === this.visibleRowCount;\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n async masterToggle() {\n\n if (this.loading) return;\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n const rows = await this._dataSource.getRows();\n rows.forEach(row => this.selection.select(row));\n }\n }\n\n deleteSelection(event: UIEvent): Promise<number> {\n return this.deleteRows(event, this.selection.selected);\n }\n\n /**\n *\n * @param event\n * @param row\n * @param opts Use interactive=false to avoid user interaction (e.g. user confirmation)\n */\n async deleteRow(event: UIEvent|null, row: TableElement<T>, opts?: {interactive?: boolean;}): Promise<boolean> {\n const deleteCount = await this.deleteRows(event, [row], opts);\n return deleteCount === 1;\n }\n\n /**\n *\n * @param event\n * @param rows\n * @param opts Use interactive=false to avoid user interaction (e.g. user confirmation)\n */\n async deleteRows(event: UIEvent|null, rows: TableElement<T>[], opts?: {interactive?: boolean;}): Promise<number> {\n if (this.readOnly) {\n throw {code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY'};\n }\n if (event?.defaultPrevented) return 0; // SKip\n event?.preventDefault();\n\n if (!this._enabled) return 0;\n if (this.loading || isEmptyArray(rows)) return 0;\n\n // Check if can delete\n const canDelete = await this.canDeleteRows(rows, opts);\n if (!canDelete) return 0; // Cannot delete\n\n if (this.saveBeforeDelete) {\n // Cancel invalid rows (because of save() will failed if there is invalid rows)\n rows.filter(row => !row.validator?.valid)\n .forEach(row => row.cancelOrDelete());\n\n // If data need to be saved first: do it\n const saved = await this.saveBeforeAction('delete');\n if (!saved) {\n // Stop if save cancelled or save failed\n return;\n }\n }\n\n if (this.debug) console.debug('[table] Delete selection...');\n\n const rowsToDelete = rows.slice()\n // Reverse row order\n // This is a workaround, need because row.delete() has async execution\n // and index cache is updated with a delay)\n .sort((a, b) => a.id > b.id ? -1 : 1);\n\n try {\n const deleteCount = rowsToDelete.length;\n await this._dataSource.deleteAll(rowsToDelete);\n\n // Not need to update manually, because watchALl().subscribe() will update this count\n //this.totalRowCount -= deleteCount;\n //this.visibleRowCount -= deleteCount;\n this.selection.clear();\n this.editedRow = undefined;\n this.markAsDirty({emitEvent: false /*markForCheck() is called just after*/});\n this.markForCheck();\n this.onAfterDeletedRows.next(rowsToDelete);\n return deleteCount;\n } catch (err) {\n this.setError(err && err.message || err);\n throw err;\n }\n }\n\n selectRowById(id: number): Promise<boolean> {\n if (id === undefined) return Promise.resolve(false);\n return this.dataSource.waitIdle()\n .then(() => this.dataSource.getRow(id))\n .then(row => row && this.clickRow(null, row));\n }\n\n /**\n * Try to select row by data. Will use dataEquals() (that call EntityUtils.equals()) to find same row's data\n * @param data\n */\n selectRowByData(data: T): Promise<boolean> {\n if (data === undefined) return Promise.resolve(false);\n return this.dataSource.waitIdle()\n .then(() => this.dataSource.getRows())\n .then(rows => rows.find(row => this.equals(row.currentData, data)))\n .then(row => row && this.clickRow(null, row));\n }\n\n clickRow(event: UIEvent|undefined, row: TableElement<T>): boolean {\n if (this.loading) {\n // Wait while loading, and loop\n if (this.debug) console.debug(\"[table] Waiting before apply clickRow() (datasource is busy)...\");\n this.dataSource?.waitIdle().then(() => this.clickRow(event, row));\n return false;\n }\n\n // DEBUG\n //console.debug(\"[table] Detect click on row\");\n\n if (row.id === -1 || row.editing) return true; // Already in edition\n if (event?.defaultPrevented) return false; // Cancelled by event\n\n // Open the detail page (if not inline editing)\n if (!this.inlineEdition) {\n\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n this.markAsLoading();\n this.openRow(row.currentData.id, row)\n .then(() => this.markAsLoaded());\n\n return true;\n }\n\n // Start editing row\n return this.editRow(event, row, {focusColumn: undefined /*force to use the click target*/});\n }\n\n moveRow(id: number, direction: number) {\n this.dataSource.move(id, direction);\n }\n\n async openSelectColumnsModal(event?: Event): Promise<any> {\n\n // Copy current columns (deep copy)\n const columns = this.getCurrentColumns();\n\n const hasTopModal = !!(await this.modalCtrl.getTop());\n const modal = await this.modalCtrl.create({\n component: TableSelectColumnsComponent,\n componentProps: {columns},\n cssClass: hasTopModal && 'stack-modal'\n });\n\n // Open the modal\n await modal.present();\n\n // On dismiss\n const {data} = await modal.onDidDismiss();\n if (!data) return; // CANCELLED\n\n // Apply columns\n const userColumns = (data || []).filter(c => c.canHide === false || c.visible).map(c => c.name) || [];\n this.displayedColumns = RESERVED_START_COLUMNS.concat(userColumns).concat(RESERVED_END_COLUMNS);\n this.markForCheck();\n\n // Update user settings\n await this.settings.savePageSetting(this.settingsId, userColumns, SETTINGS_DISPLAY_COLUMNS);\n }\n\n trackByFn(index: number, row: TableElement<T>) {\n return row.id;\n }\n\n doRefresh(event?: CompletableEvent) {\n this.onRefresh.emit(event);\n\n // When target wait for a complete (e.g. IonRefresher)\n if (event?.target && event.target.complete) {\n setTimeout(async () => {\n await firstFalsePromise(this.loadingSubject);\n event.target.complete();\n });\n }\n }\n\n getCurrentColumns(): ColumnItem[] {\n const hiddenColumns = this.columns.slice(RESERVED_START_COLUMNS.length)\n .filter(name => this.displayedColumns.indexOf(name) === -1);\n return this.displayedColumns\n .concat(hiddenColumns)\n .filter(name => !RESERVED_START_COLUMNS.includes(name) && !RESERVED_END_COLUMNS.includes(name)\n && !this.excludesColumns.includes(name))\n .map(name => ({\n name,\n label: this.getI18nColumnName(name),\n visible: this.displayedColumns.indexOf(name) !== -1,\n canHide: this.getRequiredColumns().indexOf(name) === -1\n }));\n }\n\n escapeEditingRow(event?: Event, row?: TableElement<T>) {\n row = row || this.editedRow;\n if (!row || !row.editing) return;\n\n // DEBUG\n //console.debug('[app-table] Cancel the row (keydown.escape)');\n\n if (event) {\n // Avoid to cancel the editor\n event.preventDefault();\n event.stopPropagation();\n }\n\n // If new row is invalid: delete silently\n if (row.id === -1 && row.validator.invalid) {\n this.deleteNewRow(event, row);\n }\n // If exists\n else {\n // cancel (if confirmation)\n if (this.confirmBeforeCancel) {\n this.cancelExistingRow(event, row, {keepEditing: false});\n }\n // Or validate, if no confirmation\n else {\n this.confirmEditCreate(event, row);\n }\n }\n }\n\n /* -- protected method -- */\n\n protected editRow(event: Event|undefined, row: TableElement<T>, opts?: {focusColumn?: string}): boolean {\n\n if (!this._enabled) return false;\n if (this.editedRow === row) return true; // Already the edited row\n if (event?.defaultPrevented) return false;\n\n if (!this.confirmEditCreate()) {\n return false;\n }\n\n if (!row.editing && !this.loading) {\n this.focusColumn = opts && opts.focusColumn || this.focusColumn;\n this._dataSource.startEdit(row);\n }\n this.editedRow = row;\n this.onStartEditingRow.emit(row);\n return true;\n }\n\n /**\n * Try to select row, by row.id, or by data. WIll use EntityUtils.equals()\n * @param id\n * @param data\n * @protected\n */\n protected async selectRowByIdOrData(id: number, data?: T): Promise<boolean> {\n let done = false;\n try {\n\n // Select by row id (if NOT a new row)\n if (isNotNil(id) || id !== -1) {\n done = await this.selectRowById(id);\n if (done) return true;\n console.warn('[app-table] Save: Cannot reselect row by row.id: ', id);\n }\n\n // Try by data\n if (data) {\n done = await this.selectRowByData(data);\n if (done) return true;\n console.warn('[app-table] Save: Cannot reselect row by data: ', data);\n }\n\n return false;\n }\n catch(err) {\n // Log, but continue\n console.error(err && err.message || err);\n return false;\n }\n }\n\n /**\n * return the selected row if unique in selection\n */\n protected get singleSelectedRow(): TableElement<T> {\n return this.selection.selected?.length === 1 ? this.selection.selected[0] : undefined;\n }\n\n protected async canDeleteRows(rows: TableElement<T>[], opts?: { interactive?: boolean; }): Promise<boolean> {\n\n // Check using emitter\n if (this.onBeforeDeleteRows.observers.length > 0) {\n try {\n const canDelete = await emitPromiseEvent(this.onBeforeDeleteRows, 'canDelete', {\n detail: {rows}\n });\n if (!canDelete) return false;\n }\n catch (err) {\n if (err === 'CANCELLED') return false; // User cancel\n console.error('Error while checking if can delete rows', err);\n throw err;\n }\n }\n\n // Ask user confirmation\n if (this.confirmBeforeDelete && (!opts || opts.interactive !== false)) {\n return this.askDeleteConfirmation(null, rows);\n }\n return true;\n }\n\n protected async canCancelRows(rows?: TableElement<T>[], opts?: { interactive?: boolean; }): Promise<boolean> {\n\n // Get dirty rows\n rows = rows || (await this.dataSource.getRows()).filter(row => row.validator?.dirty);\n\n if (isEmptyArray(rows)) return true; // No dirty: OK\n\n // Check using emitter\n if (this.onBeforeCancelRows.observers.length > 0) {\n try {\n const isCancel = await emitPromiseEvent(this.onBeforeCancelRows, 'canCancel', {\n detail: {rows}\n });\n if (!isCancel) return false;\n }\n catch (err) {\n if (err === 'CANCELLED') return false; // User cancel\n console.error('Error while checking if can cancel rows', err);\n throw err;\n }\n }\n\n // Ask user confirmation\n if (this.confirmBeforeCancel && (!opts || opts.interactive !== false)) {\n return this.askCancelConfirmation(null, rows);\n }\n return true;\n }\n\n protected async saveBeforeAction(saveAction: SaveActionType): Promise<boolean> {\n\n if (!this.dirty) {\n // Continue without save\n return true;\n }\n\n let save: boolean;\n switch (saveAction) {\n case 'delete':\n save = this.saveBeforeDelete;\n break;\n case 'filter':\n save = this.saveBeforeFilter;\n break;\n case 'sort':\n save = this.saveBeforeSort;\n break;\n default:\n save = true;\n }\n\n // Default behavior\n let confirmed = true;\n\n if (save) {\n if (this.onBeforeSave.observers.length > 0) {\n // Ask confirmation\n try {\n const res = await emitPromiseEvent(this.onBeforeSave, 'beforeSave', {\n detail: {action: saveAction, valid: this.valid}\n });\n confirmed = res.confirmed;\n save = res.save;\n }\n catch (err) {\n if (err === 'CANCELLED') return false; // User cancel\n console.error('Error while checking if can delete rows', err);\n throw err;\n }\n\n }\n }\n\n if (confirmed) {\n if (save) {\n // User confirmed save\n const saved = await this.save();\n this.markAsDirty(); // Restore dirty flag\n return saved;\n }\n return true; // No save but continue action\n }\n return false; // User cancel the action\n }\n\n /**\n * Open a row. By default, will to open row detail page.\n * Can be override by subclasses, BUT prefer to subscribe on onOpenRow\n * @param id\n * @param row\n * @protected\n */\n protected async openRow(id: ID, row: TableElement<T>): Promise<boolean> {\n if (this.allowRowDetail) {\n if (this.debug && this.dirty) {\n console.warn('[table] Opening row details, but table has unsaved changes!');\n }\n\n if (this.onOpenRow.observers.length) {\n this.onOpenRow.emit({id, row});\n return true;\n }\n\n // No ID defined: unable to open details\n if (isNil(id)) {\n console.warn('[table] Opening row details, but data has no id!');\n return false;\n }\n\n return await this.router.navigate([id], {\n relativeTo: this.route,\n queryParams: {}\n });\n }\n return false;\n }\n\n protected async openNewRowDetail(event?: any): Promise<boolean> {\n if (!this.allowRowDetail) return false;\n\n if (this.onNewRow.observers.length) {\n this.onNewRow.emit(event);\n return true;\n }\n\n return await this.router.navigate(['new'], {\n relativeTo: this.route\n });\n }\n\n // can be overridden to add more required columns\n protected getRequiredColumns() {\n return DEFAULT_REQUIRED_COLUMNS;\n }\n\n protected getUserColumns(): string[] {\n return this.settings.getPageSettings(this.settingsId, SETTINGS_DISPLAY_COLUMNS);\n }\n\n protected getSortedColumn(): MatSortable {\n const data = this.settings.getPageSettings(this.settingsId, SETTINGS_SORTED_COLUMN);\n const parts = data && data.split(':');\n if (parts && parts.length === 2 && this.columns.includes(parts[0])) {\n return {id: parts[0], start: parts[1] === 'desc' ? 'desc' : 'asc', disableClear: false};\n }\n if (this.defaultSortBy) {\n return {id: this.defaultSortBy, start: this.defaultSortDirection || 'asc', disableClear: false};\n }\n return {id: 'id', start: 'asc', disableClear: false};\n }\n\n protected getPageSize(): number {\n const pageSize = this.settings.getPageSettings<number>(this.settingsId, SETTINGS_PAGE_SIZE);\n return pageSize || this.defaultPageSize;\n }\n\n protected getDisplayColumns(): string[] {\n let userColumns = this.getUserColumns();\n\n // No user override\n if (!userColumns) {\n // Return default, without columns to hide\n return this.columns.filter(column => !this.excludesColumns.includes(column));\n }\n\n // Get fixed start columns\n const fixedStartColumns = this.columns.filter(c => RESERVED_START_COLUMNS.includes(c));\n\n // Remove end columns\n const fixedEndColumns = this.columns.filter(c => RESERVED_END_COLUMNS.includes(c));\n\n // Remove fixed columns from user columns\n userColumns = userColumns.filter(c => !fixedStartColumns.includes(c) && !fixedEndColumns.includes(c) && this.columns.includes(c));\n\n // Add required columns if missing\n userColumns.push(...this.getRequiredColumns().filter(c => !fixedStartColumns.includes(c) && !fixedEndColumns.includes(c) && !userColumns.includes(c)));\n\n return fixedStartColumns\n .concat(userColumns)\n .concat(fixedEndColumns)\n // Remove columns to hide\n .filter(column => !this.excludesColumns.includes(column));\n }\n\n /**\n * Recompute display columns\n *\n * @protected\n */\n protected updateColumns() {\n this.displayedColumns = this.getDisplayColumns();\n if (!this.loading) this.markForCheck();\n }\n\n protected registerSubscription(sub: Subscription) {\n this._subscription.add(sub);\n }\n\n protected unregisterSubscription(sub: Subscription) {\n this._subscription.remove(sub);\n }\n\n protected registerAutocompleteField(fieldName: string, options?: MatAutocompleteFieldAddOptions): MatAutocompleteFieldConfig {\n return this._autocompleteConfigHolder.add(fieldName, options);\n }\n\n protected getI18nColumnName(columnName: string) {\n return this.i18nColumnPrefix + changeCaseToUnderscore(columnName).toUpperCase();\n }\n\n protected generateTableId() {\n return this.location.path(true).replace(/[?].*$/g, '').replace(/\\/[\\d]+/g, '_id') + '_' + this.constructor.name;\n //if (this.debug) console.debug(\"[table] id = \" + id);\n //return id;\n }\n\n protected async addRowToTable(insertAt?: number): Promise<TableElement<T>> {\n this.focusFirstColumn = true;\n await this._dataSource.asyncCreateNew(insertAt);\n this.editedRow = this._dataSource.getRow(-1);\n // Emit start editing event\n this.onStartEditingRow.emit(this.editedRow);\n this.totalRowCount++;\n this.visibleRowCount++;\n this.markAsDirty({emitEvent: false /*markForCheck() is called just after*/});\n this.markForCheck();\n return this.editedRow;\n }\n\n protected registerCellValueChanges(name: string, formPath?: string, emitInitialValue?: boolean): Observable<any> {\n formPath = formPath || name;\n emitInitialValue = emitInitialValue || false;\n let def = this._cellValueChangesDefs[name];\n if (def && (def.formPath !== formPath || def.emitInitialValue !== emitInitialValue)) {\n throw Error('Already register a cell value change for this name, with different \\'formPath\\' or \\'emitInitialValue\\'. Please use same arguments.');\n }\n\n // Not exists: register new definition\n if (!def) {\n if (this.debug) console.debug(`[table] New listener {${name}} for value changes on path ${formPath}`);\n def = {\n subject: new Subject<any>(),\n subscription: null,\n formPath,\n emitInitialValue\n };\n this._cellValueChangesDefs[name] = def;\n\n // Start the listener, when editing starts\n this.registerSubscription(\n this.onStartEditingRow.subscribe(row => this.startCellValueChanges(name, row)));\n }\n\n return def.subject;\n }\n\n protected setShowColumn(columnName: string, show: boolean, opts?: { emitEvent?: boolean }) {\n if (!this.excludesColumns.includes(columnName) !== show) {\n if (!show) {\n this.excludesColumns.push(columnName);\n } else {\n const index = this.excludesColumns.findIndex(value => value === columnName);\n if (index >= 0) this.excludesColumns.splice(index, 1);\n }\n\n // Recompute display columns\n if (this.displayedColumns && (!opts || opts.emitEvent !== false)) {\n this.updateColumns();\n }\n }\n }\n\n protected getShowColumn(columnName: string): boolean {\n return !this.excludesColumns.includes(columnName);\n }\n\n protected startsWithUpperCase(input: string, search: string): boolean {\n return input && input.toUpperCase().startsWith(search);\n }\n\n protected markForCheck() {\n // Should be override by subclasses, depending on ChangeDetectionStrategy\n }\n\n protected async askDeleteConfirmation(event?: UIEvent, rows?: TableElement<T>[]): Promise<boolean> {\n if (this.undoableDeletion) {\n // Special message, for undoable deletion\n return Alerts.askConfirmation(rows?.length === 1 ? 'CONFIRM.DELETE_ROW' : 'CONFIRM.DELETE_ROWS', this.alertCtrl, this.translate, event);\n }\n // Immediate deletion action\n return Alerts.askActionConfirmation(this.alertCtrl, this.translate, true, event);\n }\n\n protected async askCancelConfirmation(event?: UIEvent, rows?: TableElement<T>[]): Promise<boolean> {\n return Alerts.askConfirmation(rows?.length === 1 ? 'CONFIRM.CANCEL_ROW' : 'CONFIRM.CANCEL_ROWS', this.alertCtrl, this.translate, event);\n }\n\n protected async askRestoreConfirmation(event?: UIEvent): Promise<boolean> {\n return Alerts.askActionConfirmation(this.alertCtrl, this.translate, false, event);\n }\n\n protected async showToast(opts: ShowToastOptions) {\n if (!this.toastController) throw new Error('Missing toastController in component\\'s constructor');\n return Toasts.show(this.toastController, this.translate, opts);\n }\n\n protected resetError(opts?: {emitEvent?: boolean;}) {\n this.setError(undefined, opts);\n }\n\n protected getRowError(row?: TableElement<T>, opts?: {\n separator?: string;\n recursive?: boolean;\n }): string {\n row = row || this.editedRow;\n if (!row || !this.translate) return undefined;\n\n const separator = opts && opts.separator || ', ';\n const recursive = !opts || opts.recursive !== false\n const errors = AppFormUtils.getFormErrors(row.validator, { recursive });\n const i18nErrors = errors && Object.keys(errors).reduce((res, key) => {\n\n const control = row.validator.get(key);\n // Should be a control map of errors\n if (control) {\n // Try to convert from a map, for one column control\n const i18nFieldNameKey = this.getI18nFieldName(key);\n const i18nFieldName = this.translate.instant(i18nFieldNameKey);\n\n // OK, we have a field name: use it\n const columnErrors = Object.keys(control.errors).map(errorKey => this.getI18nError(errorKey, control.errors[errorKey]));\n if (isEmptyArray(columnErrors)) return res;\n // Add separator\n if (res.length) res += separator;\n return res + i18nFieldName + \": \" + columnErrors.join(separator);\n }\n\n // Or try as global form error\n const formError = this.getI18nError(key, errors[key]);\n if (isNil(formError)) return res;\n return res + (res.length ? separator : '') + formError;\n }, \"\");\n return i18nErrors;\n }\n\n protected getI18nFieldName(fieldName: string) {\n // Use columns has default name\n // Can be override by subclasses, to resolve all field name\n return this.getI18nColumnName(fieldName);\n }\n\n protected getI18nError(errorKey: string, errorContent?: any): string {\n return SharedValidators.translateError((a,b) => this.translate.instant(a,b), errorKey, errorContent);\n }\n\n protected setError(value: string, opts?: {emitEvent?: boolean;}) {\n if (this.errorSubject.value !== value) {\n this.errorSubject.next(value);\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n }\n\n /**\n * Compare data equality (default by id)\n * Can be overridden to add additional properties to compare\n *\n * @param d1\n * @param d2\n * @protected\n */\n protected equals(d1: T, d2: T): boolean {\n return EntityUtils.equals(d1, d2, 'id');\n }\n\n /* -- private method -- */\n\n private setLoading(value: boolean, opts?: {emitEvent?: boolean}) {\n if (this.loadingSubject.value !== value) {\n this.loadingSubject.next(value);\n\n if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n }\n\n private deleteNewRow(event: Event|undefined, row: TableElement<T>) {\n event?.stopPropagation();\n\n this.selection.clear();\n this.editedRow = undefined; // unselect row\n this._dataSource.cancelOrDelete(row);\n this.onCancelOrDeleteRow.next(row);\n this.resetError();\n this.totalRowCount--;\n this.visibleRowCount--;\n }\n\n private cancelExistingRow(event: Event|undefined, row: TableElement<T>, opts?: {interactive?: boolean; keepEditing?: boolean;}) {\n\n const confirmed = (!opts || opts.interactive !== false);\n\n // Ask user confirmation, if cancel\n if (!confirmed && row.validator?.dirty && (this.confirmBeforeCancel || this.onBeforeCancelRows.observers.length > 0)) {\n event.stopPropagation();\n this.canCancelRows([row], opts)\n .then(confirm => {\n // If confirmed, loop\n if (confirm) this.cancelExistingRow(event, row, {interactive: false});\n });\n return;\n }\n\n const keepEditing = row.editing && (!opts || opts.keepEditing !== false);\n this.editedRow = undefined; // unselect row\n this._dataSource.cancelOrDelete(row);\n this.onCancelOrDeleteRow.next(row);\n\n // Mark row as pristine\n const markRowAsPristine = this.dataSource?.options.keepOriginalDataAfterConfirm === true;\n if (markRowAsPristine) {\n row.validator?.markAsPristine();\n // Check if table is now pristine\n this.checkIfPristine();\n }\n\n // Restore editing state\n if (keepEditing) {\n this.editRow(undefined, row);\n }\n }\n\n private async checkIfPristine(opts?: {emitEvent?: boolean;}) {\n if (!this.dirty) return; // Already pristine\n\n const rows = await this._dataSource.getRows();\n const pristine = (rows || []).findIndex(row => row.validator?.dirty) === -1;\n if (pristine) this.markAsPristine(opts);\n }\n\n private applyFilter(filter: F, opts: { emitEvent: boolean }) {\n if (this.debug) console.debug('[table] Applying filter', filter);\n this._filter = filter;\n if (opts && opts.emitEvent) {\n if (this.paginator && this.paginator.pageIndex > 0) {\n this.paginator.pageIndex = 0;\n }\n this.onRefresh.emit();\n }\n }\n\n private listenDatasourceLoading(dataSource: EntitiesTableDataSource<T, F, ID>) {\n if (!dataSource) throw new Error('[table] dataSource not set !');\n\n // Cleaning previous subscription on datasource\n if (isNotNil(this._dataSourceloadingSubscription)) {\n if (this.debug) console.debug('[table] Many call to listenDatasource(): Cleaning previous subscriptions...');\n this._dataSourceloadingSubscription.unsubscribe();\n this._subscription.remove(this._dataSourceloadingSubscription);\n }\n this._dataSourceloadingSubscription = this._dataSource.loadingSubject\n .pipe(\n distinctUntilChanged(),\n\n // If changed to True: propagate as soon as possible\n tap((loading) => loading && this.setLoading(true)),\n\n // If changed to False: wait 250ms before propagate (to make sure the spinner has been displayed)\n debounceTime(250),\n tap(loading => !loading && this.setLoading(false))\n )\n .subscribe();\n\n this._subscription.add(this._dataSourceloadingSubscription);\n }\n\n\n private startCellValueChanges(name: string, row: TableElement<T>) {\n const def = this._cellValueChangesDefs[name];\n if (!def) {\n console.warn('[table] Listener with name {' + name + '} not registered! Please call registerCellValueChanges() before;');\n return;\n }\n // Stop previous subscription\n if (def.subscription) {\n def.subscription.unsubscribe();\n def.subscription = null;\n } else {\n if (this.debug) console.debug(`[table] Start values changes on row path {${def.formPath}}`);\n }\n\n // Listen value changes, and redirect to event emitter\n const control = row.validator && AppFormUtils.getControlFromPath(row.validator, def.formPath);\n if (!control) {\n console.warn(`[table] Could not listen cell changes: no validator or invalid form path {${def.formPath}}`);\n } else {\n def.subscription = control.valueChanges\n .pipe(\n // don't emit if control is disabled\n filter(() => control.enabled)\n )\n .subscribe((value) => def.subject.next(value));\n\n // Emit the actual value\n if (def.emitInitialValue !== false) {\n def.subject.next(control.value);\n }\n }\n }\n\n private stopCellValueChanges(name: string, destroy?: boolean) {\n const def = this._cellValueChangesDefs[name];\n if (!def) return;\n if (def.subscription) {\n if (this.debug) console.debug('[table] Stop value changes on row path {' + def.formPath + '}');\n def.subscription.unsubscribe();\n def.subscription = null;\n }\n if (destroy && def.subject) {\n def.subject.complete();\n def.subject.unsubscribe();\n }\n }\n}\n\n","import {AfterViewInit, Directive, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, ViewChild} from '@angular/core';\nimport {ActivatedRoute, Params, Router} from '@angular/router';\nimport {MatTabChangeEvent, MatTabGroup} from '@angular/material/tabs';\nimport {AlertController, IonContent, ToastController} from '@ionic/angular';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Subscription, TeardownLogic} from 'rxjs';\nimport {AppTable} from '../table/table.class';\nimport {AppForm} from './form.class';\nimport {FormButtonsBarToken} from './form-buttons-bar.component';\nimport {AppFormProvider, AppFormUtils, IAppForm, IAppFormGetter} from './form.utils';\nimport {ShowToastOptions, Toasts} from '../../shared/toasts';\nimport {HammerSwipeEvent} from '../../shared/gesture/hammer.utils';\nimport {ToolbarToken} from '../../shared/toolbar/toolbar';\nimport {isNotNil, toNumber} from '../../shared/functions';\nimport {CanLeave} from '../../shared/guard/component-dirty.guard';\nimport {AbstractControl} from '@angular/forms';\nimport {WaitForOptions} from '../../shared/observables';\n\nexport interface IAppEditor\n extends CanLeave, IAppForm {\n save(event?: Event, options?: any): Promise<boolean>;\n cancel(event?: Event): Promise<void>;\n}\n\nexport class AppTabEditorOptions {\n\n /**\n * Number of tab. 1 by default\n */\n tabCount?: number;\n\n /**\n * '200ms' by default\n */\n tabGroupAnimationDuration?: string;\n\n /**\n * Should enable swipe between tab, on touch screen\n */\n enableSwipe?: boolean; // true by default\n}\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class AppTabEditor<T = any, ID = number, O = any> implements IAppEditor, OnInit, OnDestroy, AfterViewInit {\n\n private _children: IAppForm[];\n private _subscription = new Subscription();\n protected _enabled = false;\n protected _dirty = false;\n protected _loading = true;\n protected _selectedTabIndex = 0;\n protected toastController: ToastController;\n\n // From options\n tabCount: number;\n enableSwipe: boolean;\n tabGroupAnimationDuration: string;\n\n debug = false;\n previousDataId: ID;\n\n submitted = false;\n error: string;\n queryParams: Params;\n i18nContext: {\n prefix: string;\n suffix: string;\n };\n\n @Input() queryTabIndexParamName: string;\n\n @ViewChild('tabGroup', { static: true }) tabGroup: MatTabGroup;\n @ViewChild(ToolbarToken) toolbar: ToolbarToken|null = null;\n @ViewChild(FormButtonsBarToken, { static: true }) formButtonsBar: FormButtonsBarToken|null = null;\n @ViewChild(IonContent, {static: true}) content: IonContent;\n\n get tables(): AppTable<any>[] {\n return this._children && (this._children.filter(c => c instanceof AppTable) as AppTable<any>[]);\n }\n\n get dirty(): boolean {\n return this._dirty || (this._children?.findIndex(c => c.enabled && c.dirty) !== -1) || false;\n }\n\n /**\n * Is valid (tables and forms)\n */\n get valid(): boolean {\n // Important: Should be not invalid AND not pending, so use '!valid' (DO NOT use 'invalid')\n return !this._children || this._children.findIndex(c => c.enabled && !c.valid) === -1;\n }\n\n get invalid(): boolean {\n return (this._children?.findIndex(c => c.enabled && c.invalid) !== -1) || false;\n }\n\n get pending(): boolean {\n return (this._children?.findIndex(c => c.enabled && c.pending) !== -1) || false;\n }\n\n get loading(): boolean {\n return this._loading || (this._children?.findIndex(c => c.enabled && c.loading) !== -1) || false;\n }\n\n get enabled(): boolean {\n return this._enabled;\n }\n\n get disabled(): boolean {\n return !this._enabled;\n }\n\n get children(): IAppForm[] {\n return this._children;\n }\n\n get empty(): boolean {\n return this._enabled;\n }\n\n get selectedTabIndex(): number {\n return this._selectedTabIndex;\n }\n\n @Input() set selectedTabIndex(value: number) {\n this.setSelectedTabIndex(value);\n }\n\n @Output() readonly selectedTabIndexChange = new EventEmitter<number>();\n\n abstract get isNewData(): boolean;\n\n protected constructor(\n protected route: ActivatedRoute,\n protected router: Router,\n protected alertCtrl: AlertController,\n protected translate: TranslateService,\n @Optional() options?: AppTabEditorOptions\n ) {\n options = {\n tabCount: 1,\n enableSwipe: true,\n tabGroupAnimationDuration: '200ms',\n ...options\n };\n this.tabCount = options.tabCount;\n this.enableSwipe = options.enableSwipe;\n this.tabGroupAnimationDuration = options.tabGroupAnimationDuration;\n }\n\n ngOnInit() {\n this.queryTabIndexParamName = this.queryTabIndexParamName || 'tab';\n\n // Read the selected tab index, from path query params\n if (this.tabGroup) {\n this.registerSubscription(this.route.queryParams\n .subscribe(queryParams => {\n this.queryParams = {...queryParams};\n\n // Parse tab param\n if (this.tabCount > 1 && this.queryTabIndexParamName) {\n const tabIndex = queryParams[this.queryTabIndexParamName];\n this.queryParams[this.queryTabIndexParamName] = tabIndex && parseInt(tabIndex) || undefined;\n if (isNotNil(this.queryParams[this.queryTabIndexParamName])) {\n this.selectedTabIndex = this.queryParams[this.queryTabIndexParamName];\n }\n }\n\n // Realign tab, after a delay because the tab can be disabled when component is created\n setTimeout(() => this.tabGroup.realignInkBar(), 500);\n }));\n }\n if (this.formButtonsBar) {\n this.registerSubscription(this.formButtonsBar.onBack.subscribe(event => this.goBack(event)));\n }\n }\n\n ngAfterViewInit() {\n // Can be override by subclasses\n }\n\n ngOnDestroy() {\n this._subscription.unsubscribe();\n this.selectedTabIndexChange.complete();\n }\n\n addChildForm(form: IAppForm | IAppFormGetter): AppTabEditor<T, ID, O> {\n if (!form) throw new Error('Trying to register an undefined child form');\n this._children = this._children || [];\n if (typeof form === 'function') {\n this._children.push(new AppFormProvider(form));\n }\n else {\n this._children.push(form);\n }\n return this;\n }\n\n addChildForms(forms: (IAppForm | IAppFormGetter)[]): AppTabEditor<T, ID, O> {\n (forms || []).forEach(form => this.addChildForm(form));\n return this;\n }\n\n disable(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n this._enabled = false;\n this._children?.forEach(c => c.disable(opts));\n if (!this.loading && (!opts || opts.emitEvent !== false)) this.markForCheck();\n }\n\n enable(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n this._enabled = true;\n this._children?.forEach(c => c.enable(opts));\n if (!this.loading && (!opts || opts.emitEvent !== false)) this.markForCheck();\n }\n\n markAsPristine(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n this.error = null;\n this.submitted = false;\n this._dirty = false;\n this._children?.forEach(c => c.markAsPristine(opts));\n if (!this.loading && (!opts || opts.emitEvent !== false)) this.markForCheck();\n }\n\n markAsUntouched(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n this._children?.forEach(c => c.markAsUntouched());\n if (!this.loading && (!opts || opts.emitEvent !== false)) this.markForCheck();\n }\n\n /**\n * @deprecated prefer to use markAllAsTouched()\n * @param opts\n */\n markAsTouched(opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n this._children?.forEach(c => c.markAsTouched(opts));\n if (!this.loading && (!opts || opts.emitEvent !== false)) this.markForCheck();\n }\n\n markAllAsTouched(opts?: {emitEvent?: boolean }) {\n this._children?.forEach(c => c.markAllAsTouched(opts));\n if (!this.loading && (!opts || opts.emitEvent !== false)) this.markForCheck();\n }\n\n markAsDirty(opts?: {onlySelf?: boolean; emitEvent?: boolean;}){\n this._dirty = true;\n if (!this.loading && (!opts || opts.emitEvent !== false)) this.markForCheck();\n }\n\n markAsLoading(opts?: {onlySelf?: boolean; emitEvent?: boolean;}){\n if (!this._loading) {\n this._loading = true;\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n }\n\n markAsLoaded(opts?: {\n onlySelf?: boolean;\n emitEvent?: boolean;\n }){\n if (this._loading) {\n this._loading = false;\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n }\n\n onTabChange(event: MatTabChangeEvent, queryTabIndexParamName?: string): boolean {\n queryTabIndexParamName = queryTabIndexParamName || this.queryTabIndexParamName;\n\n if (!queryTabIndexParamName) return true; // Skip if tab query param not set\n\n if (!this.queryParams || +this.queryParams[queryTabIndexParamName] !== event.index) {\n\n this.queryParams = this.queryParams || {};\n this.queryParams[queryTabIndexParamName] = event.index;\n\n if (queryTabIndexParamName === 'tab' && isNotNil(this.queryParams['subtab'])) {\n delete this.queryParams.subtab; // clean subtab\n }\n this.router.navigate(['.'], {\n relativeTo: this.route,\n queryParams: this.queryParams,\n replaceUrl: true\n });\n return true;\n }\n return false;\n }\n\n /**\n * Action triggered when user swipes\n */\n onSwipeTab(event: HammerSwipeEvent): boolean {\n // DEBUG\n // if (this.debug) console.debug(\"[tab-page] onSwipeTab()\");\n\n // Skip, if not a valid swipe event\n if (!this.enableSwipe || !event\n || event.defaultPrevented || (event.srcEvent && event.srcEvent.defaultPrevented)\n || event.pointerType !== 'touch'\n ) {\n return false;\n }\n\n // DEBUG\n //if (this.debug)\n //console.debug(\"[tab-page] Detected swipe: \" + event.type, event);\n\n let selectTabIndex = this.selectedTabIndex;\n switch (event.type) {\n // Open next tab\n case 'swipeleft':\n const isLast = selectTabIndex >= (this.tabCount - 1);\n selectTabIndex = isLast ? 0 : selectTabIndex + 1;\n break;\n\n\n // Open previous tab\n case 'swiperight':\n const isFirst = selectTabIndex <= 0;\n selectTabIndex = isFirst ? this.tabCount : selectTabIndex - 1;\n break;\n\n // Other case\n default:\n console.error('[tab-page] Unknown swipe action: ' + event.type);\n return false;\n }\n\n setTimeout(() => {\n this.selectedTabIndex = selectTabIndex;\n this.markForCheck();\n });\n\n return true;\n }\n\n onSubTabChange(event: MatTabChangeEvent) {\n this.onTabChange(event, 'subtab');\n }\n\n async cancel(event?: Event): Promise<void> {\n if (this.isNewData) {\n await this.unload(); // async reset\n }\n else if (this.dirty){\n await this.reload(); // async reload\n }\n }\n\n /**\n * Unload the page (remove all data). Useful when reusing angular cache a cancelled page\n *\n * @param opts\n */\n async unload(opts?: {emitEvent?: boolean }) {\n console.debug('[tab-page] Unloading data...');\n this.markAsLoading();\n this.selectedTabIndex = 0;\n this._children.forEach(f => {\n if (f instanceof AppForm) {\n f.reset(null, opts);\n }\n else if (f instanceof AppTable) {\n f.dataSource.disconnect();\n }\n });\n // TODO: find a way to remove current page from the navigation history\n }\n\n async reloadWithConfirmation(confirm?: boolean) {\n const needConfirm = this.dirty;\n // if not confirm yet: ask confirmation\n if (!confirm && needConfirm) {\n const translations = this.translate.instant(['COMMON.BTN_ABORT_CHANGES', 'COMMON.BTN_CANCEL', 'CONFIRM.CANCEL_CHANGES', 'CONFIRM.ALERT_HEADER']);\n const alert = await this.alertCtrl.create({\n header: translations['CONFIRM.ALERT_HEADER'],\n message: translations['CONFIRM.CANCEL_CHANGES'],\n buttons: [\n {\n text: translations['COMMON.BTN_ABORT_CHANGES'],\n cssClass: 'secondary',\n handler: () => {\n confirm = true; // update upper value\n }\n },\n {\n text: translations['COMMON.BTN_CANCEL'],\n role: 'cancel',\n handler: () => {\n }\n }\n ]\n });\n await alert.present();\n await alert.onDidDismiss();\n }\n\n // If confirm: execute the reload\n if (confirm || !needConfirm) {\n this.scrollToTop();\n this.disable();\n return await this.reload();\n }\n }\n\n async goBack(event?: Event): Promise<void | boolean> {\n // Go back\n if (this.toolbar?.canGoBack) {\n return this.toolbar.goBack();\n } else {\n // Back to home\n return this.router.navigateByUrl('/');\n }\n }\n\n setSelectedTabIndex(value: number, opts?: {emitEvent?: boolean; realignInkBar?: boolean }) {\n // Fix value\n if (value < 0) {\n value = 0;\n }\n else if (value > this.tabCount - 1) {\n value = this.tabCount - 1;\n }\n\n this._selectedTabIndex = value;\n this.selectedTabIndexChange.next(value);\n\n if (this.tabGroup && (!opts || opts.realignInkBar !== false)) {\n this.tabGroup.selectedIndex = value;\n this.markForCheck();\n // Wait tab change in UI, before realign ink tab\n setTimeout(() => this.tabGroup.realignInkBar(), 200);\n }\n else if (!opts || opts.emitEvent !== false) {\n this.markForCheck();\n }\n }\n\n waitIdle(opts?: WaitForOptions): Promise<any> {\n return AppFormUtils.waitIdle(this, opts);\n }\n\n abstract load(id?: ID, options?: O): Promise<void>;\n\n abstract save(event?: Event, options?: any): Promise<boolean>;\n\n abstract reload(): Promise<void>;\n\n\n /* -- protected methods -- */\n\n protected async scrollToTop(duration?: number) {\n duration = toNumber(duration, 500);\n\n if (!this.content) {\n console.warn(`[tab-editor] Cannot scroll to top. (no 'ion-content' tag found ${this.constructor.name}`);\n\n // TODO: FIXME (not working as the page is not the window)\n const scrollToTop = window.setInterval(() => {\n const pos = window.pageYOffset;\n if (pos > 0) {\n window.scrollTo(0, pos - 20); // how far to scroll on each step\n } else {\n window.clearInterval(scrollToTop);\n }\n }, 16);\n return;\n }\n\n return this.content.scrollToTop(duration);\n }\n\n protected registerSubscription(sub: Subscription|TeardownLogic) {\n this._subscription.add(sub);\n }\n\n protected unregisterSubscription(sub: Subscription) {\n this._subscription.remove(sub);\n }\n\n protected async saveIfDirtyAndConfirm(event?: UIEvent, opts?: {\n emitEvent: boolean;\n\n }): Promise<boolean> {\n if (!this.dirty) return true;\n\n let confirm = false;\n let cancel = false;\n const translations = this.translate.instant(['COMMON.BTN_SAVE', 'COMMON.BTN_CANCEL', 'COMMON.BTN_ABORT_CHANGES', 'CONFIRM.SAVE', 'CONFIRM.ALERT_HEADER']);\n const alert = await this.alertCtrl.create({\n header: translations['CONFIRM.ALERT_HEADER'],\n message: translations['CONFIRM.SAVE'],\n buttons: [\n {\n text: translations['COMMON.BTN_CANCEL'],\n role: 'cancel',\n cssClass: 'secondary',\n handler: () => {\n cancel = true;\n }\n },\n {\n text: translations['COMMON.BTN_ABORT_CHANGES'],\n cssClass: 'secondary',\n handler: () => {\n }\n },\n {\n text: translations['COMMON.BTN_SAVE'],\n handler: () => {\n confirm = true; // update upper value\n }\n }\n ]\n });\n await alert.present();\n await alert.onDidDismiss();\n\n if (!confirm) {\n return !cancel;\n }\n\n return await this.save(event, opts);\n }\n\n protected async showToast(opts: ShowToastOptions) {\n if (!this.toastController) throw new Error('Missing toastController in component\\'s constructor');\n await Toasts.show(this.toastController, this.translate, opts);\n }\n\n protected logFormErrors() {\n if (this.debug) console.debug('[app-tab-editor] Page not valid. Checking where (forms, tables)...');\n this._children?.forEach(c => this.logChildrenFormErrors(c));\n }\n\n protected logChildrenFormErrors(c: IAppForm | AbstractControl, prefix?: string, path?: string) {\n prefix = prefix || '[app-tab-editor] ';\n // If editor\n if (c instanceof AppTabEditor) {\n c.logFormErrors();\n }\n // Angular form control\n else if (c instanceof AbstractControl) {\n AppFormUtils.logFormErrors(c, prefix, path);\n }\n // If form provider: get delegate\n else if (c instanceof AppFormProvider) {\n if (!c.empty && !c.valid) {\n c.waitDelegate({timeout: 1000}).then(delegate => this.logChildrenFormErrors(delegate, prefix, 'provider'));\n }\n }\n // If table\n else if (c instanceof AppTable) {\n if (c.invalid && c.editedRow && c.editedRow.validator) {\n const path = c.constructor.name.toLowerCase();\n AppFormUtils.logFormErrors(c.editedRow.validator, prefix, path);\n }\n }\n // If IAppForm\n else if (c instanceof AppForm) {\n if (!c.empty && !c.valid) {\n if (c.pending) {\n const path = c.constructor.name.toLowerCase();\n console.warn( `${prefix} -> ${path}: waiting while pending...`);\n AppFormUtils.waitWhilePending(c, {timeout: 1000})\n .then(() => this.logChildrenFormErrors(c.form, prefix, path));\n }\n else {\n AppFormUtils.logFormErrors(c.form, prefix);\n }\n }\n }\n else {\n console.warn( `${prefix} Unknown children sub-form: `, c);\n }\n }\n\n protected markForCheck() {\n // Should be override by subclasses, if change detection is Push\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n EventEmitter,\n Injector,\n OnDestroy,\n OnInit,\n Optional\n} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {AlertController, ToastController} from '@ionic/angular';\n\nimport {TranslateService} from '@ngx-translate/core';\nimport {Subject} from 'rxjs';\nimport {Moment} from 'moment';\nimport {AddToPageHistoryOptions, LocalSettingsService} from '../services/local-settings.service';\nimport {filter} from 'rxjs/operators';\nimport {Entity} from '../services/model/entity.model';\nimport {UsageMode} from '../services/model/settings.model';\nimport {FormGroup} from '@angular/forms';\nimport {AppTabEditor, AppTabEditorOptions} from './editor.class';\nimport {AppFormUtils} from './form.utils';\nimport {Alerts} from '../../shared/alerts';\nimport {ErrorCodes, ServerErrorCodes} from '../services/errors';\nimport {isInt, isNotEmptyArray, isNumber, toNumber} from '../../shared/functions';\nimport {EntityServiceLoadOptions, IEntityService} from '../../shared/services/entity-service.class';\nimport {isNil, isNilOrBlank, isNotNil, toBoolean} from '../../shared/functions';\nimport {DateFormatPipe} from '../../shared/pipes/date-format.pipe';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {HistoryPageReference} from '../services/model/history.model';\nimport {WaitForOptions} from '../../shared/observables';\n\nexport class AppEditorOptions extends AppTabEditorOptions {\n autoLoad?: boolean;\n autoLoadDelay?: number;\n pathIdAttribute?: string;\n enableListenChanges?: boolean;\n\n /**\n * Change page route (window URL) when saving for the first time\n */\n autoUpdateRoute?: boolean; // Default to true\n\n /**\n * Open the next tab, after saving for the first time\n */\n autoOpenNextTab?: boolean; // Default to true\n\n i18nPrefix?: string;\n}\n\n// @dynamic\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class AppEntityEditor<\n T extends Entity<T, ID>,\n S extends IEntityService<T, ID> = IEntityService<T, any>,\n ID = number\n >\n extends AppTabEditor<T, ID, EntityServiceLoadOptions>\n implements OnInit, OnDestroy, AfterViewInit {\n\n private _usageMode: UsageMode;\n private readonly _enableListenChanges: boolean;\n private readonly _pathIdAttribute: string;\n private readonly _autoLoad: boolean;\n private readonly _autoLoadDelay: number;\n private readonly _autoUpdateRoute: boolean;\n private _autoOpenNextTab: boolean;\n\n protected dateFormat: DateFormatPipe;\n protected cd: ChangeDetectorRef;\n protected settings: LocalSettingsService;\n\n data: T;\n saving = false;\n hasRemoteListener = false;\n defaultBackHref: string;\n historyIcon: {icon?: string; matIcon?: string };\n\n $title = new Subject<string>();\n onUpdateView = new EventEmitter<T>();\n\n get usageMode(): UsageMode {\n return this._usageMode;\n }\n\n set usageMode(value: UsageMode) {\n if (this._usageMode !== value) {\n this._usageMode = value;\n this.markForCheck();\n }\n }\n\n get isOnFieldMode(): boolean {\n return this.settings.isOnFieldMode(this._usageMode);\n }\n\n get isNewData(): boolean {\n return isNil(this.data?.id);\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n get service(): S {\n return this.dataService;\n }\n\n markAsSaving(opts?: { emitEvent?: boolean }){\n if (!this.saving) {\n this.saving = true;\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n }\n\n markAsSaved(opts?: { emitEvent?: boolean }){\n if (this.saving) {\n this.saving = false;\n if (!opts || opts.emitEvent !== false) this.markForCheck();\n }\n }\n\n protected constructor(\n injector: Injector,\n protected dataType: new() => T,\n protected dataService?: S,\n @Optional() options?: AppEditorOptions\n ) {\n super(injector.get(ActivatedRoute),\n injector.get(Router),\n injector.get(AlertController),\n injector.get(TranslateService),\n options);\n options = <AppEditorOptions>{\n // Default options\n enableListenChanges: (injector.get(ENVIRONMENT).listenRemoteChanges === true),\n pathIdAttribute: 'id',\n autoLoad: true,\n autoUpdateRoute: true,\n i18nPrefix: '',\n\n // Following options are override inside ngOnInit()\n // autoOpenNextTab: ...,\n\n // Override defaults\n ...options\n };\n\n this.settings = injector.get(LocalSettingsService);\n this.cd = injector.get(ChangeDetectorRef);\n this.dateFormat = injector.get(DateFormatPipe);\n this.toastController = injector.get(ToastController);\n this._enableListenChanges = options.enableListenChanges;\n this._pathIdAttribute = options.pathIdAttribute;\n this._autoLoad = options.autoLoad;\n this._autoLoadDelay = options.autoLoadDelay;\n this._autoUpdateRoute = options.autoUpdateRoute;\n this._autoOpenNextTab = options.autoOpenNextTab;\n this.i18nContext = {\n prefix: options.i18nPrefix,\n suffix: ''\n };\n\n // FOR DEV ONLY ----\n //this.debug = !environment.production;\n }\n\n ngOnInit() {\n super.ngOnInit();\n\n // Defaults\n this._autoOpenNextTab = toBoolean(this._autoOpenNextTab, !this.isOnFieldMode);\n this.historyIcon = this.historyIcon || {icon: 'list'};\n\n // Register forms\n this.registerForms();\n\n // Disable page, during load\n this.disable();\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n // Load data\n if (this._autoLoad) {\n setTimeout(() => this.loadFromRoute(), this._autoLoadDelay);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n\n this.$title.complete();\n this.$title.unsubscribe();\n this.onUpdateView.complete();\n this.onUpdateView.unsubscribe();\n }\n\n /**\n * Load data from the snapshot route\n *\n * @param route\n * @protected\n */\n protected loadFromRoute(): Promise<void> {\n const route = this.route.snapshot;\n if (!route || isNilOrBlank(this._pathIdAttribute)) {\n throw new Error('Unable to load from route: missing \\'route\\' or \\'options.pathIdAttribute\\'.');\n }\n let id = route.params[this._pathIdAttribute];\n if (isNil(id) || id === 'new') {\n return this.load(undefined, route.params);\n } else {\n // Convert as number, if need\n if (isInt(id)) {\n id = parseInt(id);\n }\n return this.load(id, route.params);\n }\n }\n\n /**\n * Load data from id, using the dataService\n *\n * @param id\n * @param opts\n */\n async load(id?: ID, opts?: EntityServiceLoadOptions & {\n emitEvent?: boolean;\n openTabIndex?: number;\n updateTabAndRoute?: boolean;\n [key: string]: any;\n }) {\n if (!this.dataService) throw new Error('Cannot load data: missing \\'dataService\\'!');\n\n this.error = null;\n\n // New data\n if (isNil(id)) {\n\n // Create using default values\n const data = new this.dataType();\n this._usageMode = this.computeUsageMode(data);\n await this.onNewEntity(data, opts);\n await this.updateView(data, {\n openTabIndex: 0,\n ...opts\n });\n this.markAsLoaded();\n }\n\n // Load existing data\n else {\n try {\n const data = await this.dataService.load(id, opts);\n if (!data) throw {code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND'};\n this._usageMode = this.computeUsageMode(data);\n await this.onEntityLoaded(data, opts);\n await this.updateView(data, opts);\n this.startListenRemoteChanges();\n }\n catch (err) {\n this.setError(err);\n this.selectedTabIndex = 0;\n }\n finally {\n this.markAsLoaded();\n }\n }\n }\n\n startListenRemoteChanges() {\n // Skip if disable, or already listening\n if (this.hasRemoteListener || !this._enableListenChanges || this.isNewData) return;\n\n // Listen for changes on server\n this.hasRemoteListener = true;\n\n this.registerSubscription(\n this.dataService.listenChanges(this.data.id)\n .pipe(filter(isNotNil))\n .subscribe((data: T) => {\n if (data.updateDate && (data.updateDate as Moment).isAfter(this.data.updateDate)) {\n if (!this.dirty) {\n if (this.debug) console.debug(`[data-editor] Changes detected on server, at {${data.updateDate}} : reloading page...`);\n this.updateView(data);\n } else {\n if (this.debug) console.debug(`[data-editor] Changes detected on server, at {${data.updateDate}}, but page is dirty: skip reloading.`);\n }\n }\n })\n .add(() => this.hasRemoteListener = false)\n );\n }\n\n async updateView(data: T | null, opts?: {\n emitEvent?: boolean;\n openTabIndex?: number;\n updateRoute?: boolean;\n }): Promise<void> {\n const idChanged = isNotNil(data.id)\n && this.previousDataId !== undefined // Ignore if first loading (=undefined)\n && this.previousDataId !== data.id;\n\n opts = {\n updateRoute: this._autoUpdateRoute && idChanged && !this.loading,\n openTabIndex: this._autoOpenNextTab && idChanged && isNil(this.previousDataId) && this.selectedTabIndex + 1 < this.tabCount ? this.selectedTabIndex + 1 : undefined,\n ...opts\n };\n\n this.data = data;\n this.previousDataId = data.id || null;\n\n const promiseOrVoid = this.setValue(data);\n if (promiseOrVoid) await promiseOrVoid;\n\n if (!opts || opts.emitEvent !== false) {\n this.markAsPristine();\n this.markAsUntouched();\n this.updateViewState(data);\n\n // Need to update route\n if (opts.updateRoute === true) {\n this.updateTabAndRoute(data, opts)\n // Update the title - should be executed AFTER updateRoute because of path change - fix #185\n .then(() => this.updateTitle(data));\n }\n else {\n // Update the tag group index\n this.updateTabIndex(opts.openTabIndex);\n\n // Update the title.\n this.updateTitle(data);\n }\n\n this.onUpdateView.emit(data);\n }\n }\n\n /**\n * Enable or disable state\n */\n updateViewState(data: T, opts?: {onlySelf?: boolean; emitEvent?: boolean }) {\n if (this.isNewData || this.canUserWrite(data)) {\n this.enable(opts);\n }\n else {\n this.disable(opts);\n\n // Allow to sort table\n this.tables.forEach(t => t.enableSort());\n }\n\n }\n\n /**\n * Update the route location, and open the next tab\n */\n async updateTabAndRoute(data: T, opts?: {\n openTabIndex?: number;\n }): Promise<void> {\n\n this.queryParams = this.queryParams || {};\n\n // Open the tab group\n this.updateTabIndex(opts && opts.openTabIndex);\n\n // Save the opened tab into the queryParams\n this.queryParams.tab = this.selectedTabIndex;\n\n // Update route location\n const forcedQueryParams = {};\n forcedQueryParams[this._pathIdAttribute] = data && isNotNil(data.id) ? data.id : 'new';\n if (data && isNotNil(data.id)) {\n await this.router.navigate(['.'], {\n relativeTo: this.route,\n queryParams: {...this.queryParams, ...forcedQueryParams}\n });\n }\n else {\n await this.router.navigate(['..', 'new'], {\n relativeTo: this.route,\n queryParams: {...this.queryParams, ...forcedQueryParams}\n });\n }\n\n await this.updateRoute(data, this.queryParams);\n }\n\n /**\n * Update the route location, and open the next tab\n */\n updateTabIndex(tabIndex?: number) {\n\n // Open the second tab\n if (isNotNil(tabIndex)) {\n if (this.selectedTabIndex !== tabIndex) {\n this.selectedTabIndex = tabIndex;\n this.markForCheck();\n }\n }\n }\n\n async saveAndClose(event: Event, options?: any): Promise<boolean> {\n\n const saved = await this.save(event);\n if (saved) {\n await this.close(event);\n }\n return saved;\n }\n\n async close(event: Event) {\n if (event) {\n if (event.defaultPrevented) return;\n event.preventDefault();\n event.stopPropagation();\n }\n return this.goBack();\n }\n\n async save(event?: Event, options?: any): Promise<boolean> {\n if (this.loading || this.saving) {\n console.debug('[data-editor] Skip save: editor is busy (loading or saving)');\n return false;\n }\n if (!this.dirty) {\n console.debug('[data-editor] Skip save: editor not dirty');\n return true;\n }\n\n // Wait end of async validation\n await this.waitWhilePending();\n\n // If invalid\n if (this.invalid) {\n this.markAllAsTouched();\n this.logFormErrors();\n this.openFirstInvalidTab();\n\n this.submitted = true;\n return false;\n }\n\n this.markAsSaving();\n this.error = undefined;\n\n if (this.debug) console.debug('[data-editor] Saving data...');\n\n try {\n // Get data\n const data = await this.getValue();\n\n this.disable();\n\n // Save form\n const updatedData = await this.dataService.save(data, options);\n\n await this.onEntitySaved(updatedData);\n\n // Update the view (e.g metadata)\n await this.updateView(updatedData, options);\n\n // Subscribe to remote changes\n if (!this.hasRemoteListener) this.startListenRemoteChanges();\n\n this.submitted = false;\n\n return true;\n } catch (err) {\n this.submitted = true;\n this.setError(err);\n this.selectedTabIndex = 0;\n this.scrollToTop(); // Scroll to top (to show error)\n this.markAsDirty();\n this.enable();\n\n // Concurrent change on pod\n if (err.code === ServerErrorCodes.BAD_UPDATE_DATE && isNotNil(this.data.id)) {\n // Call a data reload (in background), to update the GraphQL cache, and allow to cancel changes\n this.dataService.load(this.data.id, {fetchPolicy: 'network-only'}).then(() => {\n console.debug('[data-editor] Data cache reloaded. User can reload page');\n });\n }\n\n return false;\n } finally {\n this.markAsSaved();\n }\n }\n\n /**\n * Save data (if dirty and valid), and return it. Otherwise, return nil value.\n */\n async saveAndGetDataIfValid(): Promise<T | undefined> {\n // Form is not valid\n if (!this.valid) {\n\n // Make sure validation is finished\n await AppFormUtils.waitWhilePending(this);\n\n // If invalid: Open the first tab in error\n if (this.invalid) {\n this.openFirstInvalidTab();\n return undefined;\n }\n\n // Continue (valid)\n }\n\n // Form is valid, but not saved\n if (this.dirty) {\n const saved = await this.save(new Event('save'));\n if (!saved) return undefined;\n }\n\n // Valid and saved data\n return this.data;\n }\n\n async delete(event?: UIEvent): Promise<boolean> {\n if (this.loading || this.saving) return false;\n\n // Ask user confirmation\n const confirmation = await Alerts.askDeleteConfirmation(this.alertCtrl, this.translate);\n if (!confirmation) return;\n\n console.debug('[data-editor] Asking to delete...');\n\n this.markAsSaving();\n this.error = undefined;\n\n try {\n // Get data\n const data = await this.getValue();\n const isNew = this.isNewData;\n\n this.disable();\n\n if (!isNew) {\n await this.dataService.delete(data);\n }\n\n await this.onEntityDeleted(data);\n\n // Remove page history\n this.removePageHistory();\n\n\n } catch (err) {\n this.submitted = true;\n this.setError(err);\n this.selectedTabIndex = 0;\n this.markAsSaved();\n this.enable();\n return false;\n }\n\n // Wait, then go back (wait is need in order to update back href is need)\n await setTimeout(() => this.goBack(), 500);\n\n return true;\n }\n\n async reload() {\n this.markAsLoading();\n await this.load(this.data && this.data.id);\n }\n\n async goBack(event?: Event): Promise<void | boolean> {\n // Go back\n if (this.toolbar?.canGoBack) {\n return this.toolbar.goBack();\n }\n else if (this.defaultBackHref) {\n return this.router.navigateByUrl(this.defaultBackHref);\n } else {\n // Back to home\n return this.router.navigateByUrl('/');\n }\n }\n\n setError(err: any) {\n console.error('[data-editor] ' + err && err.message || err, err);\n let userMessage = err && err.message && this.translate.instant(err.message) || err;\n\n // Add details error (if any) under the main message\n const detailMessage = err && err.details && (err.details.message || err.details) || undefined;\n if (detailMessage) {\n userMessage += `<br/><small class=\"hidden-xs hidden-sm\" title=\"${detailMessage}\">`;\n userMessage += detailMessage.length < 70 ? detailMessage : detailMessage.substring(0, 67) + '...';\n userMessage += '</small>';\n }\n this.error = userMessage;\n }\n\n /* -- protected methods to override -- */\n\n protected abstract registerForms();\n\n protected abstract computeTitle(data: T): Promise<string>;\n\n protected abstract setValue(data: T): Promise<void> | void;\n\n protected abstract get form(): FormGroup;\n\n protected abstract getFirstInvalidTabIndex(): number;\n\n protected abstract canUserWrite(data: T): boolean;\n\n\n /* -- protected methods -- */\n\n async unload(): Promise<void> {\n this.form.reset();\n this.registerForms();\n this._dirty = false;\n this.data = null;\n this.saving = false;\n }\n\n protected async onBeforeEntityLoad(): Promise<void> {\n // can be overwrite by subclasses\n }\n\n protected async onNewEntity(data: T, options?: EntityServiceLoadOptions): Promise<void> {\n // can be overwrite by subclasses\n }\n\n protected async onEntityLoaded(data: T, options?: EntityServiceLoadOptions): Promise<void> {\n // can be overwrite by subclasses\n }\n\n protected async onEntitySaved(data: T): Promise<void> {\n // can be overwrite by subclasses\n }\n\n protected async onEntityDeleted(data: T): Promise<void> {\n // can be overwrite by subclasses\n }\n\n protected computeUsageMode(data: T): UsageMode {\n return this.settings.isUsageMode('FIELD') ? 'FIELD' : 'DESK';\n }\n\n protected waitWhilePending(opts?: WaitForOptions): Promise<boolean> {\n return AppFormUtils.waitWhilePending(this, opts);\n }\n\n protected async getValue(): Promise<T> {\n const json = await this.getJsonValueToSave();\n\n const res = new this.dataType();\n res.fromObject(json);\n\n return res;\n }\n\n protected getJsonValueToSave(): Promise<any> {\n return Promise.resolve(this.form.value);\n }\n\n /**\n * Compute the title\n *\n * @param data\n */\n protected async updateTitle(data?: T) {\n data = data || this.data;\n const title = await this.computeTitle(data);\n this.$title.next(title);\n\n // If NOT data, then add to page history\n if (!this.isNewData) {\n const page = await this.computePageHistory(title);\n return this.addToPageHistory(page);\n }\n }\n\n protected async addToPageHistory(page: HistoryPageReference, opts?: AddToPageHistoryOptions) {\n if (!page) return; // Skip\n\n return this.settings.addToPageHistory(page, {\n removePathQueryParams: true,\n removeTitleSmallTag: true,\n emitEvent: false,\n ...opts\n });\n }\n\n protected async computePageHistory(title: string): Promise<HistoryPageReference> {\n return {\n title,\n path: this.router.url\n };\n }\n\n protected async removePageHistory(opts?: { emitEvent?: boolean }) {\n return this.settings.removePageHistory(this.router.url, opts);\n }\n\n\n protected computePageUrl(id: ID|'new'): string | any[] {\n const parentUrl = this.getParentPageUrl();\n return parentUrl && `${parentUrl}/${id}`;\n }\n\n protected getParentPageUrl(withQueryParams?: boolean) {\n let parentUrl = this.defaultBackHref;\n\n // Remove query params\n if (withQueryParams !== true && parentUrl && parentUrl.indexOf('?') !== -1) {\n parentUrl = parentUrl.substr(0, parentUrl.indexOf('?'));\n }\n\n return parentUrl;\n }\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n /* -- private functions -- */\n\n /**\n * Open the first tab that is invalid\n */\n private openFirstInvalidTab() {\n const invalidTabIndex = this.getFirstInvalidTabIndex();\n if (invalidTabIndex !== -1 && this.selectedTabIndex !== invalidTabIndex) {\n this.selectedTabIndex = invalidTabIndex;\n this.markForCheck();\n }\n }\n\n protected async updateRoute(data: T, queryParams: any): Promise<boolean> {\n const path = this.computePageUrl(isNotNil(data.id) ? data.id : 'new');\n const commands: any[] = (path && typeof path === 'string') ? path.split('/') : path as any[];\n if (isNotEmptyArray(commands)) {\n return await this.router.navigate(commands, {\n replaceUrl: true,\n queryParams: this.queryParams\n });\n }\n else {\n console.warn('Skip page route update. Invalid page path: ', path);\n }\n }\n}\n\n","import { Directive, Injector, Input } from '@angular/core';\nimport { ValidatorService } from '@e-is/ngx-material-table';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ModalController, Platform } from '@ionic/angular';\nimport { Location } from '@angular/common';\nimport { LocalSettingsService } from '../services/local-settings.service';\nimport { AppTableDataSourceOptions, EntitiesTableDataSource } from './entities-table-datasource.class';\nimport { AppTable } from './table.class';\nimport { IEntity } from '../services/model/entity.model';\nimport { InMemoryEntitiesService } from '../../shared/services/memory-entity-service.class';\nimport { isEmptyArray } from '../../shared/functions';\n\n// @dynamic\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class AppInMemoryTable<\n T extends IEntity<T, ID>,\n F = any,\n ID = number\n > extends AppTable<T, F, ID> {\n\n @Input() canEdit = false;\n @Input() canDelete = false;\n\n set value(data: T[]) {\n this.setValue(data);\n }\n\n get value(): T[] {\n return this.memoryDataService.value;\n }\n\n protected constructor(\n protected injector: Injector,\n protected columns: string[],\n protected dataType: new () => T,\n protected memoryDataService: InMemoryEntitiesService<T, F, ID>,\n protected validatorService: ValidatorService,\n options?: AppTableDataSourceOptions<T, ID>,\n filter?: F\n ) {\n super(injector.get(ActivatedRoute),\n injector.get(Router),\n injector.get(Platform),\n injector.get(Location),\n injector.get(ModalController),\n injector.get(LocalSettingsService),\n columns,\n new EntitiesTableDataSource<T, F, ID>(dataType, memoryDataService, validatorService, options),\n filter,\n injector);\n\n this.autoLoad = false; // waiting value to be set\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n setValue(value: T[], opts?: { emitEvent?: boolean }) {\n // Reset previous error\n if (this.error) {\n this.setError(null);\n this.markForCheck();\n }\n this.memoryDataService.value = value;\n if (!opts || opts.emitEvent !== false) {\n this.onRefresh.emit();\n }\n }\n\n protected equals(t1: T, t2: T): boolean {\n return this.memoryDataService.equals(t1, t2);\n }\n}\n\n","\nexport const ErrorCodes = {\n LOAD_USER_EVENTS_ERROR: 50000,\n SAVE_USER_EVENT_ERROR: 50001\n};\n","import {Moment} from 'moment';\nimport {Entity, EntityAsObjectOptions, IEntity} from '../../../core/services/model/entity.model';\nimport {PredefinedColors} from '@ionic/core';\nimport {fromDateISOString} from '../../../shared/dates';\nimport {EntityClass} from '../../../core/services/model/entity.decorators';\n\nexport const UserEventTypes = {\n DEBUG_DATA: 'DEBUG_DATA',\n INBOX_MESSAGE: 'INBOX_MESSAGE'\n};\n\n// @dynamic\n@EntityClass({typename: 'UserEventVO'})\nexport class UserEvent extends Entity<UserEvent> {\n\n static fromObject: (source: any, opts?: any) => UserEvent;\n\n eventType: string;\n issuer: string;\n recipient: string;\n updateDate: Moment;\n creationDate: Moment;\n\n content: string | any;\n signature: string;\n readSignature: string;\n\n constructor() {\n super(UserEvent.TYPENAME);\n }\n\n asObject(opts?: EntityAsObjectOptions): any {\n const target = super.asObject(opts);\n\n // Serialize content\n if (typeof target.content === 'object') {\n target.content = JSON.stringify(target.content);\n }\n\n return target;\n }\n\n fromObject(source: any) {\n Object.assign(this, source); // Copy all properties\n super.fromObject(source);\n this.creationDate = fromDateISOString(source.creationDate);\n\n try {\n // Deserialize content\n if (typeof source.content === 'string' && source.content.startsWith('{')) {\n this.content = JSON.parse(source.content);\n }\n\n // Deserialize content.context\n if (this.content && typeof this.content.context === 'string' && this.content.context.startsWith('{')) {\n this.content.context = JSON.parse(this.content.context);\n }\n }\n catch(err) {\n console.error('Error during UserEvent deserialization', err);\n }\n }\n}\n\n\nexport interface UserEventAction<T extends IEntity<T>> {\n\n name: string | any;\n title?: string;\n\n icon?: string;\n matIcon?: string;\n color?: PredefinedColors;\n\n executeAction: (event: UserEvent, context?: T) => any | Promise<any>;\n\n}\n","import {gql} from '@apollo/client/core';\n\nexport const SocialFragments = {\n userEvent: gql`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 }`,\n lightUserEvent: gql`fragment LightUserEventFragment on UserEventVO {\n id\n issuer\n recipient\n updateDate\n creationDate\n eventType\n readSignature\n __typename\n }`\n};\n","import {Inject, Injectable} from '@angular/core';\nimport {gql} from '@apollo/client/core';\nimport {ErrorCodes} from './errors';\nimport {AccountService} from '../../core/services/account.service';\nimport {GraphqlService} from '../../core/graphql/graphql.service';\nimport {Observable, of} from 'rxjs';\nimport {UserEvent, UserEventAction, UserEventTypes} from './model/user-event.model';\nimport {SocialFragments} from './social.fragments';\nimport {SortDirection} from '@angular/material/sort';\nimport {EntitiesServiceWatchOptions, EntityServiceLoadOptions, FilterFn, IEntitiesService, LoadResult, Page} from '../../shared/services/entity-service.class';\nimport {map} from 'rxjs/operators';\nimport {isEmptyArray, isNil, isNilOrBlank, toNumber} from '../../shared/functions';\nimport {ShowToastOptions, Toasts} from '../../shared/toasts';\nimport {OverlayEventDetail} from '@ionic/core';\nimport {ToastController} from '@ionic/angular';\nimport {TranslateService} from '@ngx-translate/core';\nimport {NetworkService} from '../../core/services/network.service';\nimport {BaseGraphqlService} from '../../core/services/base-graphql-service.class';\nimport {Entity, EntityUtils} from '../../core/services/model/entity.model';\nimport {ENVIRONMENT} from '../../../environments/environment.class';\nimport {EntityFilter} from '../../core/services/model/filter.model';\nimport {EntityClass} from '../../core/services/model/entity.decorators';\n\n// @dynamic\n@EntityClass({typename: 'UserEventVO'})\nexport class UserEventFilter extends EntityFilter<UserEventFilter, UserEvent> {\n\n static fromObject: (source: any, opts?: any) => UserEventFilter;\n\n issuer: string = null;\n recipient: string = null;\n\n fromObject(source: any, opts?: any) {\n super.fromObject(source, opts);\n this.issuer = source.issuer;\n this.recipient = source.recipient;\n }\n\n protected buildFilter(): FilterFn<UserEvent>[] {\n const filterFns = super.buildFilter();\n\n // issuer\n if (this.issuer) {\n filterFns.push(t => (t.issuer === this.issuer));\n }\n if (this.recipient) {\n filterFns.push(t => (t.recipient === this.recipient));\n }\n\n return filterFns;\n }\n}\n\nconst SaveQuery: any = gql`\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ${SocialFragments.userEvent}\n`;\n\nconst LoadAllQuery: any = gql`\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ${SocialFragments.lightUserEvent}\n`;\n\nconst DeleteByIdsMutation: any = gql`\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n`;\n\nconst LoadAllWithContentQuery: any = gql`\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ${SocialFragments.userEvent}\n`;\n\nexport declare interface UserEventWatchOptions extends EntitiesServiceWatchOptions {\n withContent?: boolean; // Default to false\n}\n\nexport interface UserEventActionDefinition extends UserEventAction<any> {\n __typename: string;\n}\n\n@Injectable({providedIn: 'root'})\nexport class UserEventService\n extends BaseGraphqlService<UserEvent, UserEventFilter>\n implements IEntitiesService<UserEvent, UserEventFilter, UserEventWatchOptions> {\n\n private _userEventActions: UserEventActionDefinition[] = [];\n\n constructor(\n protected graphql: GraphqlService,\n protected accountService: AccountService,\n protected network: NetworkService,\n protected translate: TranslateService,\n protected toastController: ToastController,\n @Inject(ENVIRONMENT) protected environment,\n ) {\n super(graphql, environment);\n\n // For DEV only\n this._debug = !environment.production;\n }\n\n /**\n *\n * @param offset\n * @param size\n * @param sortBy\n * @param sortDirection\n * @param filter\n * @param options\n * @deprecated use watchPage() instead\n */\n watchAll(offset: number,\n size: number,\n sortBy?: string,\n sortDirection?: SortDirection,\n filter?: UserEventFilter,\n options?: UserEventWatchOptions): Observable<LoadResult<UserEvent>> {\n return this.watchPage(<Page>{offset, size, sortBy, sortDirection}, filter, options);\n }\n\n watchPage(page: Page,\n filter?: Partial<UserEventFilter>,\n options?: UserEventWatchOptions): Observable<LoadResult<UserEvent>> {\n\n let now = this._debug && Date.now();\n //if (this._debug)\n console.debug('[user-event-service] Loading user events...', filter);\n\n filter = this.asFilter(filter);\n\n // Force recipient to current issuer, if not admin and not specified\n if (isNilOrBlank(filter.recipient) || !this.accountService.isAdmin()) {\n const recipient = this.accountService.account.pubkey;\n if (recipient !== filter.recipient) {\n console.warn('[user-events-service] Force user event filter.recipient=' + recipient);\n filter.recipient = recipient;\n }\n }\n\n const withContent = options && options.withContent === true;\n\n return this.mutableWatchQuery<LoadResult<any>>({\n queryName: withContent ? 'LoadAllWithContent' : 'LoadAll',\n query: withContent ? LoadAllWithContentQuery : LoadAllQuery,\n variables: {\n page: {\n sortBy: 'updateDate',\n ...page,\n sortDirection: (page.sortDirection || 'DESC').toUpperCase(),\n },\n filter: filter && filter.asPodObject()\n },\n arrayFieldName: 'data',\n error: {code: ErrorCodes.LOAD_USER_EVENTS_ERROR, message: 'SOCIAL.ERROR.LOAD_USER_EVENTS_ERROR'},\n fetchPolicy: options && options.fetchPolicy || undefined\n })\n .pipe(\n map(res => {\n const data = res && (res.data || []).map(UserEvent.fromObject);\n\n if (now) {\n console.debug(`[user-event-service] ${data.length} user events loaded in ${Date.now() - now}ms`);\n now = null;\n }\n return {\n data,\n total: res && toNumber(res.total, data.length)\n };\n })\n );\n }\n\n saveAll(data: UserEvent[], options?: any): Promise<UserEvent[]> {\n return Promise.all(data\n .map(entity => this.save(entity, options))\n );\n }\n\n /**\n * Save a userEvent entity\n *\n * @param entity\n */\n async save(entity: UserEvent, options?: EntityServiceLoadOptions): Promise<UserEvent> {\n\n this.fillDefaultProperties(entity);\n\n // Transform into json\n const isNew = isNil(entity.id);\n const json = entity.asObject();\n\n const now = Date.now();\n if (this._debug) console.debug(`[user-event-service] Saving user event...`, json);\n\n await this.graphql.mutate<{ data: any }>({\n mutation: SaveQuery,\n variables: {\n data: json\n },\n error: { code: ErrorCodes.SAVE_USER_EVENT_ERROR, message: 'SOCIAL.ERROR.SAVE_USER_EVENT_ERROR' },\n update: (proxy, {data}) => {\n // Update entity\n const savedEntity = data && data.data;\n if (savedEntity) {\n if (this._debug) console.debug(`[user-event-service] User event saved in ${Date.now() - now}ms`, entity);\n this.copyIdAndUpdateDate(savedEntity, entity);\n\n // Add to cache\n if (isNew) {\n this.insertIntoMutableCachedQueries(proxy,{\n query: LoadAllQuery,\n data: {\n ...savedEntity,\n content: null\n }\n });\n this.insertIntoMutableCachedQueries(proxy,{\n query: LoadAllWithContentQuery,\n data: savedEntity\n });\n }\n }\n }\n });\n\n return entity;\n }\n\n\n\n /**\n * Save many trips\n *\n * @param entities\n * @param opts\n */\n async deleteAll(entities: UserEvent[], opts?: {\n trash?: boolean; // True by default\n }): Promise<any> {\n\n const ids = entities && entities\n .map(t => t.id);\n if (isEmptyArray(ids)) return; // stop, if nothing else to do\n\n const now = Date.now();\n if (this._debug) console.debug('[user-event-service] Deleting events... ids:', ids);\n\n await this.graphql.mutate<any>({\n mutation: DeleteByIdsMutation,\n variables: {\n ids\n },\n update: (proxy) => {\n // Remove from caches\n this.removeFromMutableCachedQueriesByIds(proxy, {\n query: LoadAllQuery,\n ids\n });\n this.removeFromMutableCachedQueriesByIds(proxy, {\n query: LoadAllWithContentQuery,\n ids\n });\n\n if (this._debug) console.debug(`[user-event-service] Events deleted in ${Date.now() - now}ms`);\n }\n });\n }\n\n /**\n * Delete userEvent entities\n */\n async delete(data: UserEvent): Promise<any> {\n if (!data) return; // skip\n await this.deleteAll([data]);\n }\n\n listenChanges(id: number, options?: any): Observable<UserEvent | undefined> {\n // TODO\n console.warn('TODO: implement listen changes on user events');\n return of();\n }\n\n registerAction(definition: UserEventActionDefinition) {\n console.info(`[user-event-service] Registering action ${definition.name} for ${definition.__typename}`);\n this._userEventActions.push(definition);\n }\n\n getActionsByTypename(typename: string): UserEventAction<any>[] {\n return this._userEventActions.filter(def => def.__typename === typename);\n }\n\n async showToastErrorWithContext(opts: {\n error?: any;\n message?: string;\n context: any | (() => any) | Promise<any>;}) {\n\n let message = opts.message || (opts.error && opts.error.message || opts.error);\n\n // Make sure message a string\n if (!message || typeof message !== 'string') {\n message = 'ERROR.UNKNOWN_TECHNICAL_ERROR';\n }\n\n // If offline, display a simple alert\n if (this.network.offline) {\n this.showToast({message, type: 'error'});\n return;\n }\n\n // Translate the message (to be able to extract details content)\n message = this.translate.instant(message);\n\n // Clean details parts\n if (message && message.indexOf('<small>') !== -1) {\n message = message.substr(0, message.indexOf('<small>') - 1);\n }\n\n const res = await this.showToast({\n type: 'error',\n duration: 15000,\n message: message + '<br/><br/><b>' + this.translate.instant('CONFIRM.SEND_DEBUG_DATA') + '</b>',\n buttons: [{\n icon: 'bug',\n text: this.translate.instant('COMMON.BTN_SEND'),\n role: 'send'\n }]\n });\n if (!res || res.role !== 'send') return;\n\n // Send debug data\n try {\n if (this._debug) console.debug('Sending debug data...');\n\n // Call content factory\n let context: any = opts && opts.context;\n if (typeof context === 'function') {\n context = context();\n }\n if (context instanceof Promise) {\n context = await context;\n }\n\n // Send the message\n const userEvent = await this.sendDataForDebug({\n message,\n error: opts.error || undefined,\n context: this.convertObjectToString(context)\n });\n\n console.info('Debug data successfully sent to admin', userEvent);\n this.showToast({\n type: 'info',\n message: 'INFO.DEBUG_DATA_SEND',\n showCloseButton: true\n });\n }\n catch (err) {\n console.error('Error while sending debug data:', err);\n }\n }\n\n sendDataForDebug(data: any): Promise<UserEvent> {\n const userEvent = new UserEvent();\n userEvent.eventType = UserEventTypes.DEBUG_DATA;\n userEvent.content = this.convertObjectToString(data);\n return this.save(userEvent);\n }\n\n asFilter(filter: Partial<UserEventFilter>): UserEventFilter {\n return UserEventFilter.fromObject(filter);\n }\n\n /* -- protected methods -- */\n\n protected convertObjectToString(data: any): string {\n if (typeof data === 'string'){\n return data;\n }\n // Serialize content into string\n else if (typeof data === 'object'){\n if (data instanceof Entity) {\n return JSON.stringify(data.asObject({keepTypename: true, keepLocalId: true, minify: false}));\n }\n else {\n return JSON.stringify(data);\n }\n }\n }\n\n protected async showToast<T=any>(opts: ShowToastOptions): Promise<OverlayEventDetail<T>> {\n if (!this.toastController) throw new Error('Missing toastController in component\\'s constructor');\n return await Toasts.show(this.toastController, this.translate, opts);\n }\n\n protected fillDefaultProperties(entity: UserEvent) {\n entity.issuer = this.accountService.account.pubkey;\n\n // TODO: compute hash (using cryptoService)\n // TODO: compute sign\n console.warn('TODO: sign user event before sending');\n }\n\n protected copyIdAndUpdateDate(source: UserEvent, target: UserEvent) {\n EntityUtils.copyIdAndUpdateDate(source, target);\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Injector, Input, OnInit } from '@angular/core';\nimport { TableElement } from '@e-is/ngx-material-table';\nimport { UserEventFilter, UserEventService } from '../services/user-event.service';\nimport { AccountService } from '../../core/services/account.service';\nimport { UserEvent, UserEventAction, UserEventTypes } from '../services/model/user-event.model';\nimport { LocalSettingsService } from '../../core/services/local-settings.service';\nimport { toBoolean } from '../../shared/functions';\nimport { Moment } from 'moment';\nimport { AppTable, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS } from '../../core/table/table.class';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ModalController, Platform } from '@ionic/angular';\nimport { Location } from '@angular/common';\nimport { EntitiesTableDataSource } from '../../core/table/entities-table-datasource.class';\nimport { SortDirection } from '@angular/material/sort';\nimport { EntitiesStorage } from '../../core/services/storage/entities-storage.service';\nimport { PredefinedColors } from '@ionic/core';\nimport { IEntity } from '../../core/services/model/entity.model';\nimport { ENVIRONMENT } from '../../../environments/environment.class';\n\n\nexport interface UserEventDetail<T extends IEntity<T>> {\n title: string;\n description?: string;\n path?: string;\n\n action?: string | any;\n actionTitle?: string;\n actionColor?: PredefinedColors;\n\n icon?: string;\n matIcon?: string;\n color?: string;\n cssClass?: string;\n time?: Moment;\n\n // A config property, to override the title\n titleProperty?: string;\n titleArgs?: {[key: string]: string};\n\n // conversion\n fromObject?: (source: any) => T;\n childrenFields?: string[];\n}\nexport interface UserEventIcon{\n icon?: string;\n matIcon?: string;\n color?: PredefinedColors;\n}\nconst ICONS_MAP: {[key: string]: UserEventIcon } = {\n DEBUG_DATA: {matIcon: 'bug_report'},\n INBOX_MESSAGE: {matIcon: 'mail'},\n};\n\n// TODO: refactor with a registration done by data service:\n// - userEventService.registerEventAction({__typename: 'TripVO', ...})\n// - userEventService.getActionsFor(__typename): UserEventDetailAction\n/*const DETAILS_MAP: {[key: string]: UserEventAction<RootDataEntity<any>>} = {\n \"TripVO\": {\n icon: null,\n matIcon: \"content_copy\",\n action: 'copyToLocal',\n actionTitle: 'SOCIAL.USER_EVENT.BTN_COPY_TO_LOCAL',\n actionColor: 'primary',\n fromObject: Trip.fromObject,\n childrenFields: ['operation', 'landing']\n },\n \"ObservedLocationVO\": {\n icon: null,\n matIcon: \"content_copy\",\n action: 'copyToLocal',\n actionTitle: 'SOCIAL.USER_EVENT.BTN_COPY_TO_LOCAL',\n actionColor: 'primary',\n fromObject: ObservedLocation.fromObject,\n childrenFields: ['landings']\n }\n}*/\n\n\n@Component({\n selector: 'app-user-events-table',\n styleUrls: ['user-events.table.scss'],\n templateUrl: './user-events.table.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n })\nexport class UserEventsTable extends AppTable<UserEvent, UserEventFilter>\n implements OnInit {\n\n dateTimePattern: string;\n canEdit: boolean;\n canDelete: boolean;\n isAdmin: boolean;\n\n @Input() recipient: string;\n\n @Input() withContent: boolean;\n @Input() defaultSortBy: string;\n @Input() defaultSortDirection: SortDirection;\n\n constructor(\n protected injector: Injector,\n protected accountService: AccountService,\n protected service: UserEventService,\n protected entities: EntitiesStorage,\n protected cd: ChangeDetectorRef,\n @Inject(ENVIRONMENT) protected environment\n ) {\n super(injector.get(ActivatedRoute),\n injector.get(Router),\n injector.get(Platform),\n injector.get(Location),\n injector.get(ModalController),\n injector.get(LocalSettingsService),\n // columns\n RESERVED_START_COLUMNS\n .concat([\n 'creationDate',\n 'icon',\n 'eventType',\n 'message'\n ])\n .concat(RESERVED_END_COLUMNS),\n null,\n null,\n injector);\n\n this.i18nColumnPrefix = 'SOCIAL.USER_EVENT.';\n this.autoLoad = false; // this.start()\n this.inlineEdition = false;\n this.defaultSortBy = 'creationDate';\n this.defaultSortDirection = 'desc';\n\n }\n\n ngOnInit() {\n super.ngOnInit();\n\n // Load date/time pattern\n this.dateTimePattern = this.translate.instant('COMMON.DATE_TIME_PATTERN');\n this.withContent = toBoolean(this.withContent, false);\n\n const account = this.accountService.account;\n const pubkey = account && account.pubkey;\n this.isAdmin = this.accountService.isAdmin();\n this.canEdit = this.isAdmin || pubkey === this.recipient;\n this.canDelete = this.canEdit;\n\n this.setDatasource(new EntitiesTableDataSource(UserEvent,\n this.service,\n null,\n {\n prependNewElements: false,\n suppressErrors: true,\n dataServiceOptions: {\n withContent: this.withContent\n }\n }));\n\n const filter = this.filter || new UserEventFilter();\n filter.recipient = this.recipient;\n this.setFilter(filter, {emitEvent: true});\n }\n\n async start() {\n console.debug('[user-event] Starting...');\n\n // Waiting account to be ready\n await this.accountService.ready();\n\n // Load data\n this.onRefresh.emit();\n }\n\n getIcon(source: UserEvent): UserEventIcon {\n return ICONS_MAP[source.eventType];\n }\n\n getDetail(source: UserEvent): Partial<UserEventDetail<IEntity<any>> & {actions: UserEventAction<any>[]}> {\n if (!source) return undefined;\n\n if (source.content && source.eventType === UserEventTypes.DEBUG_DATA) {\n const context = source.content.context;\n if (context && context.__typename) {\n const actions = this.service.getActionsByTypename(context.__typename);\n return {\n actions,\n title: source.content.error && source.content.error.message || source.content.message,\n description: source.content.error && source.content.error.details || undefined\n };\n }\n }\n\n console.debug('TODO: implement getDetail() for event: ', source);\n return {};\n }\n\n\n async doAction(action: UserEventAction<any>, row: TableElement<UserEvent>) {\n\n const event = row.currentData;\n const context = event.content && event.content.context;\n\n this.markAsLoading();\n\n if (action && typeof action.executeAction === 'function') {\n try {\n let res = action.executeAction(event, context);\n res = (res instanceof Promise) ? await res : res;\n } catch (err) {\n this.setError(err && err.message || err);\n console.error(`[user-event] Failed to execute action ${action.name}: ${err && err.message || err}`, err);\n }\n finally {\n this.markAsLoaded();\n }\n }\n }\n\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {UserEventService} from './services/user-event.service';\nimport {UserEventsTable} from './list/user-events.table';\nimport {CoreModule} from '../core/core.module';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule\n ],\n declarations: [\n UserEventsTable\n ],\n exports: [\n UserEventsTable\n ]\n})\nexport class SocialModule {\n\n static forRoot(): ModuleWithProviders<SocialModule> {\n console.debug('[social] Creating module (root)');\n\n return {\n ngModule: SocialModule,\n providers: [\n UserEventService\n ]\n };\n }\n}\n","import { EntityClass } from '../../../core/services/model/entity.decorators';\nimport { EntityFilter } from '../../../core/services/model/filter.model';\nimport { Person } from '../../../core/services/model/person.model';\nimport { FilterFn } from '../../../shared/services/entity-service.class';\nimport { EntityAsObjectOptions, EntityUtils } from '../../../core/services/model/entity.model';\nimport { StoreObject } from '@apollo/client/core';\nimport { isNil, isNotEmptyArray, isNotNil } from '../../../shared/functions';\n\n// @dynamic\n@EntityClass({ typename: 'PersonFilterVO' })\nexport class PersonFilter extends EntityFilter<PersonFilter, Person> {\n\n static fromObject: (source, opts?: any) => PersonFilter;\n\n static searchFilter(source: any): FilterFn<Person> {\n return source && PersonFilter.fromObject(source).asFilterFn();\n }\n\n email: string;\n pubkey: string;\n searchText: string;\n statusIds: number[];\n userProfiles: string[];\n excludedIds: number[];\n searchAttribute: string;\n searchAttributes: string[];\n\n constructor() {\n super(PersonFilter.TYPENAME);\n }\n\n fromObject(source: any, opts?: EntityAsObjectOptions) {\n super.fromObject(source, opts);\n this.email = source.email;\n this.pubkey = source.pubkey;\n this.searchText = source.searchText;\n this.statusIds = source.statusIds || (isNotNil(source.statusId) ? [source.statusId] : undefined);\n this.userProfiles = source.userProfiles;\n this.excludedIds = source.excludedIds;\n this.searchAttribute = source.searchAttribute;\n this.searchAttributes = source.searchAttributes;\n }\n\n asObject(opts?: EntityAsObjectOptions): StoreObject {\n const target = super.asObject(opts);\n target.email = this.email;\n target.pubkey = this.pubkey;\n target.searchText = this.searchText;\n target.statusIds = this.statusIds;\n target.userProfiles = this.userProfiles;\n target.excludedIds = this.excludedIds;\n target.searchAttribute = this.searchAttribute;\n target.searchAttributes = this.searchAttributes;\n return target;\n }\n\n protected buildFilter(): FilterFn<Person>[] {\n\n const filterFns = super.buildFilter();\n\n // Filter by status\n if (isNotEmptyArray(this.statusIds)) {\n filterFns.push(e => this.statusIds.includes(e.statusId));\n }\n\n // Filter excluded ids\n if (isNotEmptyArray(this.excludedIds)) {\n filterFns.push(e => isNil(e.id) || !this.excludedIds.includes(e.id));\n }\n\n // Search text\n const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttribute || this.searchAttributes || ['lastName', 'firstName', 'department.name'], this.searchText);\n if (searchTextFilter) filterFns.push(searchTextFilter);\n\n return filterFns;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {FetchPolicy, gql} from '@apollo/client/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {GraphqlService} from '../../core/graphql/graphql.service';\nimport {NetworkService} from '../../core/services/network.service';\nimport {EntitiesStorage} from '../../core/services/storage/entities-storage.service';\nimport {Person, UserProfileLabel} from '../../core/services/model/person.model';\nimport {ReferentialUtils} from '../../core/services/model/referential.model';\nimport {StatusIds} from '../../core/services/model/model.enum';\nimport {SortDirection} from '@angular/material/sort';\nimport {JobUtils} from '../../shared/services/job.utils';\nimport {LoadResult, SuggestService} from '../../shared/services/entity-service.class';\nimport {PlatformService} from '../../core/services/platform.service';\nimport {PersonFilter} from './filter/person.filter';\nimport {isInstanceOf} from '../../core/services/model/entity.model';\nimport {BaseEntityGraphqlMutations, BaseEntityService} from '../../core/services/base-entity-service.class';\nimport {environment} from '../../../environments/environment';\n\nexport const PersonFragments = {\n person: gql`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 }`\n};\n\n// Load persons query\nconst PersonQueries = {\n loadAll: gql`\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}`,\n\n loadAllWithTotal: gql`\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}`\n};\n\n\nconst PersonMutations: BaseEntityGraphqlMutations = {\n saveAll: gql`\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ${PersonFragments.person}`,\n deleteAll: gql`\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }`\n};\n\n@Injectable({providedIn: 'root'})\nexport class PersonService extends BaseEntityService<Person, PersonFilter>\n implements SuggestService<Person, PersonFilter> {\n\n constructor(\n protected graphql: GraphqlService,\n protected platform: PlatformService,\n protected network: NetworkService,\n protected entities: EntitiesStorage\n ) {\n super(graphql, platform, Person, PersonFilter, {\n queries: PersonQueries,\n mutations: PersonMutations,\n defaultSortBy: 'lastName',\n defaultSortDirection: 'asc'\n });\n\n // for DEV only -----\n this._debug = !environment.production;\n }\n\n async loadAll(offset: number, size: number, sortBy?: string,\n sortDirection?: SortDirection,\n filter?: Partial<PersonFilter>, opts?: {\n [key: string]: any;\n fetchPolicy?: FetchPolicy;\n debug?: boolean;\n withTotal?: boolean;\n toEntity?: boolean;\n }): Promise<LoadResult<Person>> {\n\n const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only');\n if (offline) {\n return this.loadAllLocally(offset, size, sortBy, sortDirection, filter, opts);\n }\n\n return super.loadAll(offset, size, sortBy, sortDirection, filter, opts);\n }\n\n async loadAllLocally(offset: number, size: number, sortBy?: string, sortDirection?: SortDirection,\n filter?: Partial<PersonFilter>,\n opts?: {\n [key: string]: any;\n fetchPolicy?: FetchPolicy;\n debug?: boolean;\n withTotal?: boolean;\n toEntity?: boolean;\n }): Promise<LoadResult<Person>> {\n\n filter = this.asFilter(filter);\n\n const variables = {\n offset: offset || 0,\n size: size || 100,\n sortBy: sortBy || this.defaultSortBy,\n sortDirection: sortDirection || this.defaultSortDirection,\n filter: filter && filter.asFilterFn()\n };\n\n const {data, total} = await this.entities.loadAll<Person>('PersonVO', variables);\n\n const entities = (!opts || opts.toEntity !== false) ?\n (data || []).map(Person.fromObject) :\n (data || []) as Person[];\n return {\n data: entities,\n total\n };\n }\n\n async suggest(value: any, filter?: PersonFilter, sortBy?: string, sortDirection?: SortDirection): Promise<LoadResult<Person>> {\n if (ReferentialUtils.isNotEmpty(value)) return {data: [value]};\n value = (typeof value === 'string' && value !== '*') && value || undefined;\n sortBy = sortBy || filter.searchAttribute || (filter.searchAttributes && filter.searchAttributes[0]);\n return this.loadAll(0, !value ? 30 : 10, sortBy, sortDirection,\n {\n ...filter,\n searchText: value as string,\n statusIds: filter && filter.statusIds || [StatusIds.ENABLE],\n userProfiles: filter && filter.userProfiles\n },\n { withTotal: true /* need by autocomplete */ }\n );\n }\n\n async executeImport(progression: BehaviorSubject<number>,\n opts?: {\n maxProgression?: number;\n }): Promise<void> {\n\n const maxProgression = opts && opts.maxProgression || 100;\n const filter = {\n statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY],\n userProfiles: <UserProfileLabel[]>['SUPERVISOR', 'USER', 'GUEST']\n };\n\n console.info('[person-service] Importing persons...');\n\n const res = await JobUtils.fetchAllPages((offset, size) =>\n super.loadAll(offset, size, 'id', null, filter, {\n debug: false,\n fetchPolicy: 'network-only',\n withTotal: (offset === 0), // Compute total only once\n toEntity: false\n }),\n progression,\n {maxProgression: maxProgression * 0.9}\n );\n\n // Save result locally\n await this.entities.saveAll(res.data, {entityName: 'PersonVO', reset: true});\n }\n\n /* -- protected methods -- */\n\n protected asObject(source: Person | any): any {\n if (!source) return undefined;\n\n console.debug('TODO check isInstanceOf');\n if (!isInstanceOf(source, Person)) {\n source = Person.fromObject(source);\n }\n const target = source.asObject();\n\n // Not known in server GraphQL schema\n delete target.mainProfile;\n\n // Minify the department object\n target.department = source.department && source.department.asObject(true);\n\n return target;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ValidatorService } from '@e-is/ngx-material-table';\nimport {FormGroup, FormBuilder, Validators} from '@angular/forms';\nimport { Person } from '../../../core/services/model/person.model';\nimport { Account } from '../../../core/services/model/account.model';\nimport { SharedValidators } from '../../../shared/validator/validators';\nimport {AccountValidatorService} from '../../../core/services/validator/account.validator';\n\n@Injectable({providedIn: 'root'})\nexport class PersonValidatorService implements ValidatorService {\n\n constructor(\n protected formBuilder: FormBuilder,\n protected accountValidatorService: AccountValidatorService\n ) {\n }\n\n getRowValidator(): FormGroup {\n return this.getFormGroup();\n }\n\n getFormGroup(data?: Person): FormGroup {\n\n // Use account validator as base form group definition\n // BUT add more flexibility (e.g. 'pubkey' become optional)\n // This is need to be able to store person that are not using SUMARiS tools (e.g. onboard observers)\n const formConfig = this.accountValidatorService.getFormGroupConfig(data && Account.fromObject(data.asObject()));\n formConfig.pubkey = [data && data.pubkey || null, SharedValidators.pubkey];\n formConfig.username = [data && data.username || null, Validators.minLength(2)];\n formConfig.usernameExtranet = [data && data.usernameExtranet || null, Validators.minLength(2)];\n formConfig.avatar = [data && data.avatar || null];\n\n return this.formBuilder.group(formConfig);\n }\n\n\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Injector, Input, OnInit, ViewChild} from '@angular/core';\nimport {Person, PRIORITIZED_AUTHORITIES} from '../../../core/services/model/person.model';\nimport { referentialToString, StatusById, StatusList } from '../../../core/services/model/referential.model';\nimport {PersonService} from '../../services/person.service';\nimport {PersonValidatorService} from '../../services/validator/person.validator';\nimport {ModalController} from '@ionic/angular';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {AccountService} from '../../../core/services/account.service';\nimport {Location} from '@angular/common';\nimport {AbstractControl, FormBuilder, FormGroup} from '@angular/forms';\nimport {AppTable, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, SETTINGS_FILTER} from '../../../core/table/table.class';\nimport {ValidatorService} from '@e-is/ngx-material-table';\nimport {FormFieldDefinition} from '../../../shared/form/field.model';\nimport {PlatformService} from '../../../core/services/platform.service';\nimport {LocalSettingsService} from '../../../core/services/local-settings.service';\nimport {debounceTime, filter, tap} from 'rxjs/operators';\nimport {EntitiesTableDataSource} from '../../../core/table/entities-table-datasource.class';\nimport {Beans, isNotNil, splitById} from '../../../shared/functions';\nimport {ENVIRONMENT} from '../../../../environments/environment.class';\nimport {PersonFilter} from '../../services/filter/person.filter';\nimport {ConfigService} from '../../../core/services/config.service';\nimport {CORE_CONFIG_OPTIONS} from '../../../core/services/config/core.config';\nimport {AuthTokenType} from '../../../core/services/network.service';\nimport {MatExpansionPanel} from '@angular/material/expansion';\nimport {slideUpDownAnimation} from '../../../shared/material/material.animations';\n\n@Component({\n selector: 'app-users-table',\n templateUrl: 'users.html',\n styleUrls: ['./users.scss'],\n providers: [\n {provide: ValidatorService, useExisting: PersonValidatorService}\n ],\n animations: [slideUpDownAnimation],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UsersPage extends AppTable<Person, PersonFilter> implements OnInit {\n\n canEdit = false;\n filterForm: FormGroup;\n profiles = [...PRIORITIZED_AUTHORITIES].reverse();\n additionalFields: FormFieldDefinition[];\n filterCriteriaCount = 0;\n\n readonly statusList = StatusList;\n readonly statusById = StatusById;\n\n set showUsernameColumn(value: boolean) {\n this.setShowColumn('username', value);\n }\n\n set showUsernameExtranetColumn(value: boolean) {\n this.setShowColumn('usernameExtranet', value);\n }\n\n @Input() useSticky = false;\n\n @ViewChild(MatExpansionPanel, {static: true}) filterExpansionPanel: MatExpansionPanel;\n\n constructor(\n protected route: ActivatedRoute,\n protected router: Router,\n protected platform: PlatformService,\n protected location: Location,\n protected modalCtrl: ModalController,\n protected accountService: AccountService,\n protected settings: LocalSettingsService,\n protected validatorService: ValidatorService,\n protected configService: ConfigService,\n protected dataService: PersonService,\n protected cd: ChangeDetectorRef,\n formBuilder: FormBuilder,\n injector: Injector,\n @Inject(ENVIRONMENT) environment\n ) {\n super(route, router, platform, location, modalCtrl, settings,\n RESERVED_START_COLUMNS\n .concat([\n 'avatar',\n 'lastName',\n 'firstName',\n 'email',\n 'profile',\n 'status',\n 'username',\n 'usernameExtranet',\n 'pubkey'\n ])\n .concat(accountService.additionalFields.map(field => field.key))\n .concat(RESERVED_END_COLUMNS),\n new EntitiesTableDataSource(Person, dataService, validatorService, {\n prependNewElements: false,\n suppressErrors: environment.production,\n dataServiceOptions: {\n saveOnlyDirtyRows: true\n }\n }),\n null,\n injector\n );\n\n\n this.inlineEdition = accountService.isAdmin(); // Allow inline edition only if admin\n this.canEdit = accountService.isAdmin();\n this.confirmBeforeDelete = true;\n this.autoLoad = false; // Wait config loading\n this.i18nColumnPrefix = 'USER.';\n this.defaultSortBy = 'lastName';\n this.defaultSortDirection = 'asc';\n\n this.filterForm = formBuilder.group({\n searchText: [null],\n statusId: [null]\n });\n\n this.additionalFields = (this.accountService.additionalFields || [])\n .filter(field => isNotNil(field.autocomplete))\n .map(field => {\n // Make sure to get the final autocomplete config (e.g. with a suggestFn function)\n field.autocomplete = this.registerAutocompleteField(field.key, {\n ...field.autocomplete // Copy, to be sure the original config is unchanged\n });\n return field;\n });\n\n // For DEV only --\n this.debug = !environment.production;\n }\n\n ngOnInit() {\n super.ngOnInit();\n\n this.registerSubscription(\n this.configService.config.subscribe(config => {\n const authTokenType = config.getProperty(CORE_CONFIG_OPTIONS.AUTH_TOKEN_TYPE) as AuthTokenType;\n console.debug('[users] AuthTokenType=' + authTokenType)\n switch (authTokenType) {\n case \"basic\":\n this.setShowColumn('pubkey', false, {emitEvent: false});\n case \"basic-and-token\":\n this.setShowColumn('username', true, {emitEvent: false});\n this.setShowColumn('usernameExtranet', true, {emitEvent: false});\n break;\n case \"token\":\n this.setShowColumn('pubkey', true, {emitEvent: false});\n this.setShowColumn('username', false, {emitEvent: false});\n this.setShowColumn('usernameExtranet', false, {emitEvent: false});\n }\n this.updateColumns();\n this.onRefresh.emit();\n })\n )\n\n this.registerSubscription(\n this.onRefresh.subscribe(() => {\n this.filterForm.markAsUntouched();\n this.filterForm.markAsPristine();\n }));\n\n // Update filter when changes\n this.registerSubscription(\n this.filterForm.valueChanges\n .pipe(\n debounceTime(250),\n filter(() => this.filterForm.valid),\n tap(json => {\n const filter = PersonFilter.fromObject(json);\n this.filterCriteriaCount = filter.countNotEmptyCriteria();\n this.markForCheck();\n // Update the filter, without reloading the content\n this.setFilter(filter, {emitEvent: false});\n }),\n // Save filter in settings (after a debounce time)\n debounceTime(500),\n tap(json => this.settings.savePageSetting(this.settingsId, json, SETTINGS_FILTER))\n )\n .subscribe());\n\n // Restore filter from settings, or load all\n this.restoreFilterOrLoad();\n }\n\n applyFilterAndClosePanel(event?: UIEvent) {\n this.onRefresh.emit(event);\n this.filterExpansionPanel.close();\n }\n\n resetFilter(event?: UIEvent) {\n this.totalRowCount = undefined;\n this.filterCriteriaCount = 0;\n this.markAsLoading();\n this.filterForm.reset();\n this.setFilter(null);\n }\n\n protected async restoreFilterOrLoad() {\n this.markAsLoading();\n\n console.debug(\"[users] Restoring filter from settings...\");\n\n const json = this.settings.getPageSettings(this.settingsId, SETTINGS_FILTER) || {};\n const filter = PersonFilter.fromObject(json);\n\n this.filterForm.patchValue(json);\n this.setFilter(filter, {emitEvent: true});\n }\n\n clearControlValue(event: UIEvent, formControl: AbstractControl): boolean {\n if (event) event.stopPropagation(); // Avoid to enter input the field\n formControl.setValue(null);\n return false;\n }\n\n referentialToString = referentialToString;\n\n /* -- protected methods -- */\n\n protected markForCheck() {\n this.cd.markForCheck();\n }\n\n}\n\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {CoreModule} from '../core/core.module';\nimport {UsersPage} from './users/list/users';\nimport {SocialModule} from '../social/social.module';\nimport {NgxJdenticonModule} from 'ngx-jdenticon';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {SharedMaterialModule} from '../shared/material/material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n SocialModule,\n SharedMaterialModule,\n NgxJdenticonModule,\n TranslateModule.forChild()\n ],\n declarations: [\n UsersPage\n ],\n exports: [\n UsersPage\n ]\n})\nexport class AdminModule {\n\n constructor() {\n console.debug('[admin] Creating module');\n }\n}\n","import {RouterModule, Routes} from '@angular/router';\nimport {UsersPage} from './users/list/users';\nimport {AuthGuardService} from '../core/services/auth-guard.service';\nimport {NgModule} from '@angular/core';\nimport {SharedRoutingModule} from '../shared/shared-routing.module';\nimport {AdminModule} from './admin.module';\n\nconst routes: Routes = [\n {\n path: 'users',\n pathMatch: 'full',\n component: UsersPage,\n canActivate: [AuthGuardService],\n data: {\n profile: 'ADMIN'\n }\n }\n];\n\n@NgModule({\n imports: [\n SharedRoutingModule,\n AdminModule,\n RouterModule.forChild(routes)\n ],\n exports: [RouterModule]\n})\nexport class AdminRoutingModule { }\n","export const ErrorCodes = {\n LOAD_PERSONS_ERROR: 100,\n SAVE_PERSONS_ERROR: 101,\n DELETE_PERSONS_ERROR: 102,\n};\n","// Environment\n\nexport * from './src/environments/environment.class';\n\n// Shared\nexport * from './src/app/shared/constants';\nexport * from './src/app/shared/shared.module';\nexport {SharedRoutingModule} from './src/app/shared/shared-routing.module';\n\n// Shared material\nexport * from './src/app/shared/material/material.module';\nexport * from './src/app/shared/material/boolean/boolean.module';\nexport {MatBooleanField} from './src/app/shared/material/boolean/material.boolean';\nexport * from './src/app/shared/material/autocomplete/material.autocomplete.module';\nexport {MatAutocompleteField, MatAutocompleteFieldConfig, MatAutocompleteConfigHolder, MatAutocompleteFieldAddOptions} from './src/app/shared/material/autocomplete/material.autocomplete';\nexport * from './src/app/shared/material/chips/chips.module';\nexport * from './src/app/shared/material/chips/material.chips';\nexport * from './src/app/shared/material/material.animations';\nexport * from './src/app/shared/material/paginator/material.paginator-i18n';\nexport * from './src/app/shared/material/stepper/material.stepper-i18n';\nexport * from './src/app/shared/material/datetime/datetime.module';\nexport {MatDateShort} from './src/app/shared/material/datetime/material.dateshort';\nexport {MatDateTime} from './src/app/shared/material/datetime/material.datetime';\nexport {MatDate} from './src/app/shared/material/datetime/material.date';\nexport {MatLatLongField} from './src/app/shared/material/latlong/material.latlong';\nexport * from './src/app/shared/material/latlong/material.latlong.module';\nexport * from './src/app/shared/material/duration/duration.module';\nexport * from './src/app/shared/material/duration/material.duration';\nexport * from './src/app/shared/material/numpad/numpad.module';\nexport * from './src/app/shared/material/numpad/numpad.directive';\nexport * from './src/app/shared/material/numpad/numpad.append-to-input.directive';\nexport * from './src/app/shared/material/numpad/numpad.container';\nexport * from './src/app/shared/material/numpad/numpad.content';\nexport * from './src/app/shared/material/numpad/numpad.component';\nexport * from './src/app/shared/material/swipe/swipe.module';\nexport * from './src/app/shared/material/swipe/material.swipe';\n\n// Shared components\nexport * from './src/app/shared/inputs';\nexport {AppFormField} from './src/app/shared/form/field.component';\nexport * from './src/app/shared/form/loading-spinner';\nexport * from './src/app/shared/form/field.model';\nexport * from './src/app/shared/toolbar/toolbar';\nexport * from './src/app/shared/toolbar/modal-toolbar';\nexport * from './src/app/shared/interceptors/progess.interceptor';\nexport * from './src/app/shared/toasts';\nexport * from './src/app/shared/help/help.modal';\nexport * from './src/app/shared/guard/component-dirty.guard';\n\n// Shared directives\nexport * from './src/app/shared/directives/directives.module';\nexport * from './src/app/shared/directives/autofocus.directive';\n\n// Shared pipes\nexport * from './src/app/shared/pipes/pipes.module';\nexport * from './src/app/shared/pipes/date-format.pipe';\nexport * from './src/app/shared/pipes/date-from-now.pipe';\nexport * from './src/app/shared/pipes/date-diff-duration.pipe';\nexport * from './src/app/shared/pipes/latlong-format.pipe';\nexport * from './src/app/shared/pipes/highlight.pipe';\nexport * from './src/app/shared/pipes/number-format.pipe';\nexport * from './src/app/shared/pipes/properties.pipe';\nexport * from './src/app/shared/pipes/duration.pipe';\nexport * from './src/app/shared/pipes/file-size.pipe';\nexport * from './src/app/shared/pipes/math.pipes';\nexport * from './src/app/shared/pipes/arrays.pipe';\nexport * from './src/app/shared/pipes/maps.pipe';\nexport * from './src/app/shared/pipes/string.pipes';\nexport * from './src/app/shared/pipes/translate-context.pipe';\nexport * from './src/app/shared/pipes/ng-init.pipe';\n\n// Shared services\nexport * from './src/app/shared/audio/audio';\nexport * from './src/app/shared/file/file.service';\nexport * from './src/app/shared/services/startable-service.class';\nexport * from './src/app/shared/services/entity-service.class';\nexport * from './src/app/shared/services/memory-entity-service.class';\nexport * from './src/app/shared/services/progress-bar.service';\nexport * from './src/app/shared/services/translate-context.service';\nexport * from './src/app/shared/services/job.utils';\n\n// Shared other\nexport * from './src/app/shared/types';\nexport * from './src/app/shared/dates';\nexport * from './src/app/shared/functions';\nexport * from './src/app/shared/observables';\nexport * from './src/app/shared/events';\nexport * from './src/app/shared/alerts';\nexport * from './src/app/shared/hotkeys/shared-hotkeys.module';\nexport * from './src/app/shared/hotkeys/hotkeys.service';\nexport * from './src/app/shared/hotkeys/dialog/hotkeys-dialog.component';\nexport {Color, ColorName, ColorScale, ColorScaleLegend, ColorScaleOptions, ColorGradientOptions, ColorScaleLegendItem} from './src/app/shared/graph/graph-colors';\nexport * from './src/app/shared/graph/colors.utils';\nexport * from './src/app/shared/gesture/gesture-config';\nexport * from './src/app/shared/gesture/hammer.utils';\nexport * from './src/app/shared/validator/validators';\nexport * from './src/app/shared/material/latlong/latlong.utils';\n\n// Shared test\nexport * from './src/app/shared/shared.testing.module';\nexport * from './src/app/shared/material/testing/material.testing.module';\nexport * from './src/app/shared/material/testing/material.testing.page';\nexport * from './src/app/shared/material/autocomplete/testing/autocomplete.test';\nexport * from './src/app/shared/material/latlong/testing/latlong.test';\nexport * from './src/app/shared/material/swipe/testing/swipe.test';\nexport * from './src/app/shared/material/datetime/testing/mat-date-time.test';\nexport * from './src/app/shared/material/chips/testing/chips.test';\n\n// Core\nexport * from './src/app/core/core.module';\n\n// Core model\nexport * from './src/app/core/services/model/account.model';\nexport * from './src/app/core/services/model/config.model';\nexport * from './src/app/core/services/model/department.model';\nexport * from './src/app/core/services/model/entity.model';\nexport * from './src/app/core/services/model/filter.model';\nexport * from './src/app/core/services/model/history.model';\nexport * from './src/app/core/services/model/model.enum';\nexport * from './src/app/core/services/model/peer.model';\nexport * from './src/app/core/services/model/person.model';\nexport { IReferentialRef, ReferentialRef,\n BaseReferential, Referential, ReferentialUtils,\n ReferentialAsObjectOptions,\n referentialToString, referentialsToString,\n IStatus, StatusList, StatusById,\n MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD } from './src/app/core/services/model/referential.model';\nexport * from './src/app/core/services/model/settings.model';\n\n// GraphQL\nexport * from './src/app/core/graphql/graphql.module';\nexport * from './src/app/core/graphql/graphql.service';\n\n// Core pipes\nexport * from './src/app/core/services/pipes/account.pipes';\nexport * from './src/app/core/services/pipes/department-to-string.pipe';\nexport * from './src/app/core/services/pipes/person-to-string.pipe';\nexport * from './src/app/core/services/pipes/usage-mode.pipes';\n\n// Core services\nexport * from './src/app/vendor';\nexport * from './src/app/core/services/platform.service';\nexport * from './src/app/core/services/network.service';\nexport * from './src/app/core/services/config.service';\nexport {CORE_CONFIG_OPTIONS} from './src/app/core/services/config/core.config';\nexport * from './src/app/core/services/local-settings.service';\nexport * from './src/app/core/services/account.service';\nexport * from './src/app/core/services/crypto.service';\nexport * from './src/app/core/services/auth-guard.service';\nexport * from './src/app/core/services/base58';\nexport * from './src/app/core/services/base-graphql-service.class';\nexport * from './src/app/core/services/base-entity-service.class';\nexport * from './src/app/core/services/storage/entities-storage.service';\nexport * from './src/app/core/services/storage/entity-store.class';\nexport * from './src/app/core/services/validator/base.validator.class';\n\n// Core components\nexport * from './src/app/core/form/editor.class';\nexport * from './src/app/core/form/entity-editor.class';\nexport * from './src/app/core/form/entity-metadata.component';\nexport * from './src/app/core/form/form.class';\nexport * from './src/app/core/form/form.utils';\nexport * from './src/app/core/form/form-buttons-bar.component';\nexport * from './src/app/core/form/list.form';\nexport * from './src/app/core/form/properties.form';\nexport * from './src/app/core/table/table.class';\nexport * from './src/app/core/table/table.utils';\nexport * from './src/app/core/table/memory-table.class';\nexport * from './src/app/core/table/entities-table-datasource.class';\nexport * from './src/app/core/table/table-select-columns.component';\nexport * from './src/app/core/table/actions-column.component';\nexport * from './src/app/core/home/home';\nexport * from './src/app/core/settings/settings.page';\nexport * from './src/app/core/account/account';\nexport * from './src/app/core/auth/form/form-auth';\nexport * from './src/app/core/auth/modal/modal-auth';\nexport * from './src/app/core/register/confirm/confirm';\nexport * from './src/app/core/about/modal-about';\nexport * from './src/app/core/peer/select-peer.modal';\nexport * from './src/app/core/install/install-upgrade-card.component';\nexport * from './src/app/core/menu/menu.component';\nexport * from './src/app/core/menu/menu.model';\nexport * from './src/app/core/menu/menu.module';\nexport * from './src/app/core/menu/menu.service';\n\n// Core decorator\nexport {EntityClass, EntityClasses} from './src/app/core/services/model/entity.decorators';\n\n// Social\nexport * from './src/app/social/social.module';\nexport * from './src/app/social/services/model/user-event.model';\nexport * from './src/app/social/services/user-event.service';\nexport * from './src/app/social/list/user-events.table';\n\n// Admin\nexport * from './src/app/admin/admin.module';\nexport {AdminRoutingModule} from './src/app/admin/admin-routing.module';\nexport * from './src/app/admin/services/filter/person.filter';\nexport * from './src/app/admin/services/validator/person.validator';\nexport * from './src/app/admin/services/errors';\nexport * from './src/app/admin/services/person.service';\nexport * from './src/app/admin/users/list/users';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {RegisterForm as ɵd} from './src/app/core/register/form/form-register';\nexport {RegisterModal as ɵf} from './src/app/core/register/modal/modal-register';\nexport {AccountValidatorService as ɵe} from './src/app/core/services/validator/account.validator';\nexport {LocalSettingsValidatorService as ɵh} from './src/app/core/services/validator/local-settings.validator';\nexport {UserSettingsValidatorService as ɵg} from './src/app/core/services/validator/user-settings.validator';\nexport {isFocusableElement as ɵc} from './src/app/shared/focusable';\nexport {MatNumpadDomService as ɵb} from './src/app/shared/material/numpad/numpad.dom-service';\nexport {CustomReuseStrategy as ɵa} from './src/app/shared/shared-routing.module';"],"names":["InjectionToken","filter","first","timer","map","merge","takeUntil","EventEmitter","fromEvent","DEFAULT_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","noop","Subscription","BehaviorSubject","Subject","isObservable","startWith","debounceTime","takeWhile","switchMap","tap","distinctUntilChanged","mergeMap","Component","ChangeDetectionStrategy","ChangeDetectorRef","FormGroupDirective","Optional","Input","HostBinding","Output","ViewChild","MatAutocomplete","MatAutocompleteTrigger","isMoment","Pipe","Injectable","MomentDateAdapter","TranslateService","moment","momentImported","DateAdapter","roundFloat","of","Directive","NgModule","CommonModule","IonicModule","TranslateModule","ElementRef","Platform","Keyboard","ScrollingModule","ReactiveFormsModule","MatCommonModule","MatAutocompleteModule","MatFormFieldModule","MatInputModule","MatIconModule","MatButtonModule","MatSelectModule","AbstractControl","Validators","FormBuilder","ViewChildren","TextMaskModule","DAY_MASK","HOUR_MASK","MatDatepickerModule","MatMomentDateModule","NgxMaterialTimepickerModule","MatRippleModule","MatRadioModule","MatCheckboxModule","AnimationState","trigger","state","style","transition","animate","HostListener","ComponentFactoryResolver","ApplicationRef","Injector","Inject","DOCUMENT","Renderer2","FormControl","MatChipsModule","MatTableModule","MatSortModule","MatPaginatorModule","CdkTableModule","MatExpansionModule","MatToolbarModule","MatDialogModule","MatMenuModule","MatCardModule","MatTabsModule","MatListModule","MatStepperModule","MatButtonToggleModule","MatProgressSpinnerModule","MatProgressBarModule","MatBadgeModule","MatSlideToggleModule","A11yModule","OverlayModule","MatDividerModule","MatTooltipModule","HammerGestureConfig","Router","IonRouterOutlet","MatPaginatorIntl","HttpResponse","catchError","AudioManagement","NativeAudio","Vibration","MAT_DIALOG_DATA","Observable","EventManager","MatDialog","ModalController","uuidv4","uuidv4Imported","HttpClient","sha256","Peer","Storage","IonicSafeString","createAnimation","Connection","CacheService","Network","SplashScreen","ToastController","ErrorCodes","defer","throttleTime","UserSettings","Referential","ReferentialRef","Department","Person","Account","getMainDefinition","ApolloLink","NetworkStatus","IonicStorageWrapper","WebSocketLink","RetryLink","HttpHeaders","InMemoryCache","persistCache","SerializingLink","QueueLink","loggerLink","ApolloClient","Apollo","HttpLink","Fragments","gql","LoadQuery","SaveMutation","Software","Configuration","NotificationVisibility","CdkPlatform","StatusBar","InAppBrowser","Downloader","MatStepperIntl","OverlayContainer","FullscreenOverlayContainer","HTTP_INTERCEPTORS","MAT_AUTOCOMPLETE_SCROLL_STRATEGY","Overlay","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS","MAT_SELECT_SCROLL_STRATEGY","ColorPickerModule","DragDropModule","MarkdownModule","AlertController","IonicRouteStrategy","RouterModule","RouteReuseStrategy","FAKE_ENTITIES","deepCopy","ActivatedRoute","FormGroup","FormArray","routes","ValidatorService","NavParams","HttpClientModule","SelectionModel","MenuController","MatTable","MatColumnDef","MatMenuTrigger","CacheModule","IonicStorageModule","NgxJdenticonModule","TableDataSource","combineLatest","EMPTY","Location","MatPaginator","MatSort","IonContent","UserEvent","UserEventFilter","PersonFilter","MatExpansionPanel"],"mappings":"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"}