@sumaris-net/ngx-components 1.13.2 → 1.14.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.
- package/bundles/sumaris-net.ngx-components.umd.js +260 -50
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +5 -0
- package/esm2015/src/app/core/services/account.service.js +1 -3
- package/esm2015/src/app/core/services/config/core.config.js +7 -1
- package/esm2015/src/app/core/services/network.service.js +53 -4
- package/esm2015/src/app/core/services/network.utils.js +1 -1
- package/esm2015/src/app/core/services/platform.service.js +88 -5
- package/esm2015/src/app/shared/dates.js +24 -1
- package/esm2015/src/app/shared/http/http.utils.js +14 -2
- package/esm2015/src/app/shared/upload-file/upload-file.component.js +12 -7
- package/esm2015/src/app/shared/upload-file/upload-file.model.js +8 -1
- package/esm2015/src/app/shared/version/versions.js +5 -1
- package/esm2015/src/environments/environment.class.js +1 -1
- package/fesm2015/sumaris-net.ngx-components.js +198 -12
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +2 -1
- package/src/app/core/services/config/core.config.d.ts +1 -0
- package/src/app/core/services/network.service.d.ts +10 -1
- package/src/app/core/services/network.utils.d.ts +15 -0
- package/src/app/core/services/platform.service.d.ts +5 -0
- package/src/app/shared/dates.d.ts +7 -0
- package/src/app/shared/http/http.utils.d.ts +1 -0
- package/src/app/shared/upload-file/upload-file.model.d.ts +5 -3
- package/src/app/shared/version/versions.d.ts +2 -0
- package/src/assets/i18n/en-US.json +2 -5
- package/src/assets/i18n/en.json +2 -5
- package/src/assets/i18n/fr.json +4 -3
- package/src/assets/manifest.json +5 -5
- package/src/environments/environment.class.d.ts +1 -0
- package/src/theme/_responsive.scss +7 -3
- package/sumaris-net.ngx-components.metadata.json +1 -1
- package/src/assets/manifest.sumaris.json +0 -17
|
@@ -10,4 +10,11 @@ export class FileResponse {
|
|
|
10
10
|
this.statusText = (init === null || init === void 0 ? void 0 : init.statusText) || 'OK';
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
export function isProgressEvent(event) {
|
|
14
|
+
return event.type === HttpEventType.UploadProgress
|
|
15
|
+
|| event.type === HttpEventType.DownloadProgress;
|
|
16
|
+
}
|
|
17
|
+
export function isResponseEvent(event) {
|
|
18
|
+
return event.type === HttpEventType.Response;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVksYUFBYSxFQUFrQyxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdEMsTUFBTSxPQUFPLFVBQWMsU0FBUSxJQUFJO0NBTXRDO0FBVUQsTUFBTSxPQUFPLFlBQVk7SUFLdkIsWUFBWSxJQUE0RDtRQUgvRCxTQUFJLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUlyQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sS0FBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxVQUFVLEtBQUksSUFBSSxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQUlELE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBdUM7SUFDckUsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxjQUFjO1dBQzdDLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLGdCQUFnQixDQUFDO0FBQ3JELENBQUM7QUFDRCxNQUFNLFVBQVUsZUFBZSxDQUFJLEtBQWtDO0lBQ25FLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsUUFBUSxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBQcm9ncmVzc0V2ZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7aXNOb3ROaWx9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBVcGxvYWRGaWxlPFQ+IGV4dGVuZHMgRmlsZSB7XG4gIHByb2dyZXNzPzogbnVtYmVyO1xuICBkZWxldGluZz86IGJvb2xlYW47XG4gIGVycm9yPzogc3RyaW5nO1xuXG4gIHJlc3BvbnNlPzogRmlsZVJlc3BvbnNlPFQ+IHwgSHR0cFJlc3BvbnNlPFQ+O1xufVxuXG5leHBvcnQgdHlwZSBGaWxlVXBsb2FkRm48VD4gPSAoZmlsZTogRmlsZSkgPT4gT2JzZXJ2YWJsZTxGaWxlRXZlbnQ8VD4gfCBIdHRwRXZlbnQ8VD4+O1xuZXhwb3J0IHR5cGUgRmlsZURlbGV0ZUZuPFQ+ID0gKGZpbGU6IFVwbG9hZEZpbGU8VD4pID0+IFByb21pc2U8Ym9vbGVhbj47XG5leHBvcnQgaW50ZXJmYWNlIEZpbGVQcm9ncmVzc0V2ZW50IHtcbiAgdHlwZTogSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzIHwgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcztcbiAgbG9hZGVkOiBudW1iZXI7XG4gIHRvdGFsPzogbnVtYmVyO1xuICBzdGF0dXNUZXh0Pzogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIEZpbGVSZXNwb25zZTxUPiB7XG4gIHJlYWRvbmx5IGJvZHk6IFR8bnVsbDtcbiAgcmVhZG9ubHkgdHlwZSA9IEh0dHBFdmVudFR5cGUuUmVzcG9uc2U7XG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xuICByZWFkb25seSBzdGF0dXNUZXh0OiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKGluaXQ/OiB7Ym9keT86IFR8bnVsbDsgc3RhdHVzVGV4dD86IHN0cmluZzsgc3RhdHVzPzogbnVtYmVyfSkge1xuICAgIHRoaXMuYm9keSA9IGlzTm90TmlsKGluaXQ/LmJvZHkpID8gaW5pdC5ib2R5IDogbnVsbDtcbiAgICB0aGlzLnN0YXR1cyA9IGluaXQ/LnN0YXR1cyB8fCAwO1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IGluaXQ/LnN0YXR1c1RleHQgfHwgJ09LJztcbiAgfVxufVxuXG5leHBvcnQgZGVjbGFyZSB0eXBlIEZpbGVFdmVudDxUPiA9IEh0dHBQcm9ncmVzc0V2ZW50IHwgSHR0cFJlc3BvbnNlPFQ+IHwgRmlsZVByb2dyZXNzRXZlbnQgfCBGaWxlUmVzcG9uc2U8VD4gO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9ncmVzc0V2ZW50KGV2ZW50OiAgSHR0cEV2ZW50PGFueT4gfCBGaWxlRXZlbnQ8YW55Pik6IGV2ZW50IGlzIEh0dHBQcm9ncmVzc0V2ZW50IHwgRmlsZVByb2dyZXNzRXZlbnQge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzc1xuICAgIHx8IGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Jlc3BvbnNlRXZlbnQ8VD4oZXZlbnQ6IEh0dHBFdmVudDxUPiB8IEZpbGVFdmVudDxUPik6IGV2ZW50IGlzIEh0dHBSZXNwb25zZTxUPiB8IEZpbGVSZXNwb25zZTxUPiB7XG4gIHJldHVybiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlO1xufVxuIl19
|
|
@@ -6,6 +6,7 @@ export class VersionUtils {
|
|
|
6
6
|
}
|
|
7
7
|
VersionUtils.compare = compareVersionNumbers;
|
|
8
8
|
VersionUtils.isCompatible = isVersionCompatible;
|
|
9
|
+
VersionUtils.isSame = isSameVersion;
|
|
9
10
|
/**
|
|
10
11
|
* Compare two software version numbers (e.g. 1.7.1)
|
|
11
12
|
* Returns:
|
|
@@ -74,4 +75,7 @@ export function isVersionCompatible(minVersion, actualVersion) {
|
|
|
74
75
|
//console.debug(`[http] Checking actual version {${actualVersion}} is compatible with min expected version {${minVersion}}`);
|
|
75
76
|
return compareVersionNumbers(minVersion, actualVersion) <= 0;
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
+
export function isSameVersion(v1, v2) {
|
|
79
|
+
return compareVersionNumbers(v1, v2) === 0;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE1BQU0sTUFBTSxHQUFHO0lBQ2IsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixtQkFBbUIsRUFBRSwwREFBMEQ7Q0FDaEYsQ0FBQztBQUdGLE1BQU0sT0FBTyxZQUFZOztBQUNoQixvQkFBTyxHQUFHLHFCQUFxQixDQUFDO0FBQ2hDLHlCQUFZLEdBQUcsbUJBQW1CLENBQUM7QUFDbkMsbUJBQU0sR0FBRyxhQUFhLENBQUM7QUFHaEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0YsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFO0lBQzNDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5Qix3REFBd0Q7SUFFeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0RCxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdCLFNBQVM7U0FDVjtRQUNELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMzQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNYO0lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNYO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBSztJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELGdDQUFnQztRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkMsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDN0Qsb0RBQW9EO1lBQ3BELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3Qyx5QkFBeUI7WUFDekIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkQ7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxRQUFRO1lBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3QztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsYUFBYTtJQUMzRCxXQUFXO0lBQ1gsNkhBQTZIO0lBQzdILE9BQU8scUJBQXFCLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUNsQyxPQUFPLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuY29uc3QgcmVnZXhwID0ge1xuICBQT1NJVElWRV9JTlRFR0VSOiAvXlxcZCskLyxcbiAgVkVSU0lPTl9QQVJUX1JFR0VYUDogL15bMC05XSt8YWxwaGFbMC05XSt8YmV0YVswLTldK3xyY1swLTldK3xbMC05XSstU05BUFNIT1QkL1xufTtcblxuXG5leHBvcnQgY2xhc3MgVmVyc2lvblV0aWxzIHtcbiAgc3RhdGljIGNvbXBhcmUgPSBjb21wYXJlVmVyc2lvbk51bWJlcnM7XG4gIHN0YXRpYyBpc0NvbXBhdGlibGUgPSBpc1ZlcnNpb25Db21wYXRpYmxlO1xuICBzdGF0aWMgaXNTYW1lID0gaXNTYW1lVmVyc2lvbjtcbn1cblxuLyoqXG4gKiBDb21wYXJlIHR3byBzb2Z0d2FyZSB2ZXJzaW9uIG51bWJlcnMgKGUuZy4gMS43LjEpXG4gKiBSZXR1cm5zOlxuICpcbiAqICAwIGlmIHRoZXkncmUgaWRlbnRpY2FsXG4gKiAgbmVnYXRpdmUgaWYgdjEgPCB2MlxuICogIHBvc2l0aXZlIGlmIHYxID4gdjJcbiAqICBOYW4gaWYgdGhleSBpbiB0aGUgd3JvbmcgZm9ybWF0XG4gKlxuICogIEUuZy46XG4gKlxuICogIGFzc2VydCh2ZXJzaW9uX251bWJlcl9jb21wYXJlKFwiMS43LjFcIiwgXCIxLjYuMTBcIikgPiAwKTtcbiAqICBhc3NlcnQodmVyc2lvbl9udW1iZXJfY29tcGFyZShcIjEuNy4xXCIsIFwiMS43LjEwXCIpIDwgMCk7XG4gKlxuICogIFwiVW5pdCB0ZXN0c1wiOiBodHRwOi8vanNmaWRkbGUubmV0L3JpcHBlcjIzNC9YdjlXTC8yOC9cbiAqXG4gKiAgVGFrZW4gZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82ODMyNzIxLzExMjM2XG4gKi9cbiBleHBvcnQgZnVuY3Rpb24gY29tcGFyZVZlcnNpb25OdW1iZXJzKHYxLCB2Mil7XG4gIGNvbnN0IHYxcGFydHMgPSB2MS5zcGxpdCgnLicpO1xuICBjb25zdCB2MnBhcnRzID0gdjIuc3BsaXQoJy4nKTtcblxuICAvLyBGaXJzdCwgdmFsaWRhdGUgYm90aCBudW1iZXJzIGFyZSB0cnVlIHZlcnNpb24gbnVtYmVyc1xuXG4gIGlmICghdmFsaWRhdGVQYXJ0cyh2MXBhcnRzKSB8fCAhdmFsaWRhdGVQYXJ0cyh2MnBhcnRzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHYxcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodjJwYXJ0cy5sZW5ndGggPT09IGkpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICh2MXBhcnRzW2ldID09PSB2MnBhcnRzW2ldKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHYxcGFydHNbaV0gPiB2MnBhcnRzW2ldKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgaWYgKHYxcGFydHMubGVuZ3RoICE9IHYycGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGFydHMocGFydHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBpc051bWJlciA9IHJlZ2V4cC5QT1NJVElWRV9JTlRFR0VSLnRlc3QocGFydHNbaV0pO1xuICAgIC8vIEZpcnN0IHBhcnQgTVVTVCBiZSBhbiBpbnRlZ2VyXG4gICAgaWYgKGkgPT09IDAgJiYgIWlzTnVtYmVyKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gSWYgbm90IGludGVnZXIsIHNob3VsZCBiZSAnYWxwaGEnLCAnYmV0YScsIGV0Yy5cbiAgICBpZiAoIWlzTnVtYmVyKSB7XG4gICAgICBpZiAoIXJlZ2V4cC5WRVJTSU9OX1BBUlRfUkVHRVhQLnRlc3QocGFydHNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBSZW1vdmUgJy1TTkFQU0hPVCcsIGFzIGl0IHNob3VsZCBuZXZlciBiZSBpbiBwcm9kXG4gICAgICBwYXJ0c1tpXSA9IHBhcnRzW2ldLnJlcGxhY2UoJy1TTkFQU0hPVCcsICcnKTtcbiAgICAgIC8vIENoZWNrIGFnYWluIGlmIG51bWVyaWNcbiAgICAgIGlzTnVtYmVyID0gcmVnZXhwLlBPU0lUSVZFX0lOVEVHRVIudGVzdChwYXJ0c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBzdHJpbmcgdG8gaW50IChuZWVkIGJ5IGNvbXBhcmUgb3BlcmF0b3JzKVxuICAgIGlmIChpc051bWJlcikgcGFydHNbaV0gPSBwYXJzZUludChwYXJ0c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlcnNpb25Db21wYXRpYmxlKG1pblZlcnNpb24sIGFjdHVhbFZlcnNpb24pOiBib29sZWFuIHtcbiAgLy8gREVWIE9OTFlcbiAgLy9jb25zb2xlLmRlYnVnKGBbaHR0cF0gQ2hlY2tpbmcgYWN0dWFsIHZlcnNpb24geyR7YWN0dWFsVmVyc2lvbn19IGlzIGNvbXBhdGlibGUgd2l0aCBtaW4gZXhwZWN0ZWQgdmVyc2lvbiB7JHttaW5WZXJzaW9ufX1gKTtcbiAgcmV0dXJuIGNvbXBhcmVWZXJzaW9uTnVtYmVycyhtaW5WZXJzaW9uLCBhY3R1YWxWZXJzaW9uKSA8PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lVmVyc2lvbih2MSwgdjIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvbXBhcmVWZXJzaW9uTnVtYmVycyh2MSwgdjIpID09PSAwO1xufVxuIl19
|
|
@@ -2,4 +2,4 @@ import { InjectionToken } from '@angular/core';
|
|
|
2
2
|
export const ENVIRONMENT = new InjectionToken('ENV');
|
|
3
3
|
export class Environment {
|
|
4
4
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFjLEtBQUssQ0FBQyxDQUFDO0FBRWxFLE1BQU0sT0FBTyxXQUFXO0NBbUV2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZldGNoUG9saWN5IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlQ29uZmlnIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gbmV3IEluamVjdGlvblRva2VuPEVudmlyb25tZW50PignRU5WJyk7XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwcm9kdWN0aW9uOiBib29sZWFuO1xuICBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgLy8gQSBwZWVyIHRvIHVzZSBhdCBzdGFydHVwICh1c2VmdWwgb24gYSB3ZWIgc2l0ZSBkZXBsb3ltZW50KVxuICBkZWZhdWx0UGVlcj86IHsgaG9zdDogc3RyaW5nOyBwb3J0OiBudW1iZXI7IHVzZVNzbD86IGJvb2xlYW47IHBhdGg/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgLy8gQSBsaXN0IG9mIHBlZXJzLCB0byBzZWxlY3QgYXMgcGVlciwgaW4gc2V0dGluZ3NcbiAgZGVmYXVsdFBlZXJzPzogeyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlcjsgdXNlU3NsPzogYm9vbGVhbjsgcGF0aD86IHN0cmluZyB9W107XG5cbiAgLy8gTWluIGNvbXBhdGlibGUgdmVyc2lvbiBmb3IgdGhlIHBlZXJcbiAgcGVlck1pblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLy8gSW50ZXJ2YWwgdG8gY2hlY2sgaWYgd2ViIHBhZ2UgbXVzdCBiZSByZWxvYWQsIGluIG1pbGxpc1xuICBjaGVja0FwcFZlcnNpb25JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcblxuICAvLyBFbmFibGUgY2FjaGUgcGVyc2lzdGVuY2UgP1xuICBwZXJzaXN0Q2FjaGU/OiBib29sZWFuO1xuXG4gIC8vIEZvcmNlIG9mZmxpbmUgbW9kZSA/IC8hXFwgRm9yIERFViBvbmx5XG4gIG9mZmxpbmU/OiBib29sZWFuO1xuXG4gIC8vIEFwb2xsbyAoZ3JhcGhRTCkgY29uZmlnXG4gIGFwb2xsb0ZldGNoUG9saWN5PzogIEZldGNoUG9saWN5O1xuXG4gIC8vIERlZmF1bHQgdmFsdWVzXG4gIGRlZmF1bHRMb2NhbGU6IHN0cmluZztcbiAgZGVmYXVsdExhdExvbmdGb3JtYXQ/OiAnREQnIHwgJ0RETU0nIHwgJ0RETU1TUyc7XG4gIGRlZmF1bHREZXBhcnRtZW50SWQ/OiBudW1iZXI7XG4gIGRlZmF1bHRBcHBOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0QW5kcm9pZEluc3RhbGxVcmw/OiBzdHJpbmc7XG5cbiAgLy8gU3RvcmFnZVxuICBzdG9yYWdlPzogUGFydGlhbDxTdG9yYWdlQ29uZmlnPjtcbiAgc3RvcmFnZVNhdmVQZXJpb2RNcz86IG51bWJlcjtcblxuICAvLyBBYm91dFxuICBzb3VyY2VVcmw/OiBzdHJpbmc7XG4gIHJlcG9ydElzc3VlVXJsPzogc3RyaW5nO1xuICBmb3J1bVVybD86IHN0cmluZztcbiAgaGVscFVybD86IHN0cmluZztcblxuICAvLyBEZWZhdWx0IGF1dGhlbnRpY2F0aW9uIC8hXFwgRm9yIERFViBvbmx5XG4gIC8vIChzZWUgdmFsdWVzIGluIHRoZSB0ZXN0IGRhdGFiYXNlIC0gWE1MIGZpbGVzIGluIFBvZCdzIG1vZHVsZSlcbiAgZGVmYXVsdEF1dGhWYWx1ZXM/OiB7XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIH07XG5cbiAgLy8gQWNjb3VudFxuICBhY2NvdW50Pzoge1xuICAgIHNob3dBY2NvdW50QnV0dG9uPzogYm9vbGVhbjsgLy8gU2hvdyBhY2NvdW50IGJ1dHRvbiBpbiBob21lIHBhZ2UgKGlmIHVuZGVmaW5lZCA9IHRydWUpXG4gICAgZW5hYmxlTGlzdGVuQ2hhbmdlcz86IGJvb2xlYW47XG4gICAgLy8gSWYgdW5kZWZpbmVkIG9yIDAsIHRoZW4gbGlzdGVuIG9ubHkgY2hhbmdlcyBtYWRlIGJ5IHRoZSBwb2RcbiAgICAvLyBJZiBncmVhdGVyIHRoYW4gMCA6IHdpbGwgY2hlY2sgY29uY3VycmVudCBjaGFuZ2VzIGluIHRoZSBEQiAoZS5nLiBjaGFuZ2VzIG1kZSBieSBhbm90aGVyIHNvZnR3YXJlKSBBTkQgY2hhbmdlcyBtYWRlIHRoZSBwb2RcbiAgICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcbiAgfTtcblxuICBlbnRpdHlFZGl0b3I/OiB7XG4gICAgZW5hYmxlTGlzdGVuQ2hhbmdlcz86IGJvb2xlYW47XG4gICAgLy8gSWYgdW5kZWZpbmVkIG9yIDAsIHRoZW4gbGlzdGVuIG9ubHkgY2hhbmdlcyBtYWRlIGJ5IHRoZSBwb2RcbiAgICAvLyBJZiBncmVhdGVyIHRoYW4gMCA6IHdpbGwgY2hlY2sgY29uY3VycmVudCBjaGFuZ2VzIGluIHRoZSBEQiAoZS5nLiBjaGFuZ2VzIG1kZSBieSBhbm90aGVyIHNvZnR3YXJlKSBBTkQgY2hhbmdlcyBtYWRlIHRoZSBwb2RcbiAgICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcbiAgfTtcblxufVxuIl19
|
|
@@ -46,6 +46,7 @@ import * as momentImported from 'moment';
|
|
|
46
46
|
import { isMoment } from 'moment';
|
|
47
47
|
import * as i1 from '@angular/material-moment-adapter';
|
|
48
48
|
import { MomentDateAdapter, MatMomentDateModule } from '@angular/material-moment-adapter';
|
|
49
|
+
import * as momentTZImported from 'moment-timezone';
|
|
49
50
|
import { Keyboard } from '@ionic-native/keyboard/ngx';
|
|
50
51
|
import { TextMaskModule } from 'angular2-text-mask';
|
|
51
52
|
import { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';
|
|
@@ -2196,6 +2197,7 @@ FileSizePipe.decorators = [
|
|
|
2196
2197
|
];
|
|
2197
2198
|
|
|
2198
2199
|
const moment$5 = momentImported;
|
|
2200
|
+
const tz = momentTZImported;
|
|
2199
2201
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2200
2202
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
2201
2203
|
class DateUtils {
|
|
@@ -2218,6 +2220,27 @@ class DateUtils {
|
|
|
2218
2220
|
const d2 = fromDateISOString(date2);
|
|
2219
2221
|
return (!d1 && !d2) || d1.isSame(d2, granularity);
|
|
2220
2222
|
}
|
|
2223
|
+
/**
|
|
2224
|
+
* Create a copy of a date, without time fields (always return a new Moment object, or undefined).
|
|
2225
|
+
* Same implementation as the Java class Dates.resetTime() (see any SUMARiS like Pod)
|
|
2226
|
+
* @param value
|
|
2227
|
+
* @param timezone a timezone (see https://momentjs.com/timezone/)
|
|
2228
|
+
*/
|
|
2229
|
+
static resetTime(value, timezone) {
|
|
2230
|
+
if (!value)
|
|
2231
|
+
return undefined;
|
|
2232
|
+
const date = fromDateISOString(value);
|
|
2233
|
+
// No timezone
|
|
2234
|
+
if (!timezone) {
|
|
2235
|
+
return date.clone().startOf('day');
|
|
2236
|
+
}
|
|
2237
|
+
// Use timezone
|
|
2238
|
+
return moment$5.tz(timezone)
|
|
2239
|
+
.set('year', date.get('year'))
|
|
2240
|
+
.set('month', date.get('month'))
|
|
2241
|
+
.set('day', date.get('day'))
|
|
2242
|
+
.startOf('day');
|
|
2243
|
+
}
|
|
2221
2244
|
}
|
|
2222
2245
|
function toDateISOString(value) {
|
|
2223
2246
|
if (!value)
|
|
@@ -9979,7 +10002,18 @@ class HttpUtils {
|
|
|
9979
10002
|
static getResource(http, uri, opts) {
|
|
9980
10003
|
return __awaiter(this, void 0, void 0, function* () {
|
|
9981
10004
|
// Add headers
|
|
9982
|
-
opts = Object.assign({}, opts
|
|
10005
|
+
opts = Object.assign({}, opts
|
|
10006
|
+
//headers: new HttpHeaders(),
|
|
10007
|
+
//.append('X-App-Name', environment.name)
|
|
10008
|
+
//.append('X-App-Version', environment.version),
|
|
10009
|
+
);
|
|
10010
|
+
// Force no cache
|
|
10011
|
+
if (opts.nocache === true) {
|
|
10012
|
+
opts.headers = (opts.headers instanceof HttpHeaders ? opts.headers : new HttpHeaders(opts.headers));
|
|
10013
|
+
opts.headers
|
|
10014
|
+
.append('Cache-Control', 'no-cache')
|
|
10015
|
+
.append('Pragma', 'no-cache');
|
|
10016
|
+
}
|
|
9983
10017
|
try {
|
|
9984
10018
|
// Using web http client
|
|
9985
10019
|
return (yield http.get(uri, opts).toPromise());
|
|
@@ -10021,6 +10055,7 @@ class VersionUtils {
|
|
|
10021
10055
|
}
|
|
10022
10056
|
VersionUtils.compare = compareVersionNumbers;
|
|
10023
10057
|
VersionUtils.isCompatible = isVersionCompatible;
|
|
10058
|
+
VersionUtils.isSame = isSameVersion;
|
|
10024
10059
|
/**
|
|
10025
10060
|
* Compare two software version numbers (e.g. 1.7.1)
|
|
10026
10061
|
* Returns:
|
|
@@ -10089,6 +10124,9 @@ function isVersionCompatible(minVersion, actualVersion) {
|
|
|
10089
10124
|
//console.debug(`[http] Checking actual version {${actualVersion}} is compatible with min expected version {${minVersion}}`);
|
|
10090
10125
|
return compareVersionNumbers(minVersion, actualVersion) <= 0;
|
|
10091
10126
|
}
|
|
10127
|
+
function isSameVersion(v1, v2) {
|
|
10128
|
+
return compareVersionNumbers(v1, v2) === 0;
|
|
10129
|
+
}
|
|
10092
10130
|
|
|
10093
10131
|
class SelectPeerModal {
|
|
10094
10132
|
constructor(viewCtrl, cd, http, environment) {
|
|
@@ -11020,15 +11058,65 @@ class NetworkService extends StartableService {
|
|
|
11020
11058
|
});
|
|
11021
11059
|
}
|
|
11022
11060
|
getNodeInfo(peer) {
|
|
11061
|
+
const path = this.computePeerPath(peer, '/api/node/info');
|
|
11062
|
+
return this.get(path);
|
|
11063
|
+
}
|
|
11064
|
+
getAppManifest(peer, opts) {
|
|
11065
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11066
|
+
try {
|
|
11067
|
+
let path = this.computePeerPath(peer, 'manifest.json');
|
|
11068
|
+
if (opts === null || opts === void 0 ? void 0 : opts.nocache) {
|
|
11069
|
+
path += '?t=' + Date.now();
|
|
11070
|
+
}
|
|
11071
|
+
return yield this.get(path, opts);
|
|
11072
|
+
}
|
|
11073
|
+
catch (err) {
|
|
11074
|
+
if (this.environment.production)
|
|
11075
|
+
console.error('[network] Cannot load file \'manifest.json\'. Please make sure webserver config allow CORS access', err);
|
|
11076
|
+
else
|
|
11077
|
+
console.error('[network] Cannot load file \'manifest.json\'.', err);
|
|
11078
|
+
// Continue
|
|
11079
|
+
}
|
|
11080
|
+
});
|
|
11081
|
+
}
|
|
11082
|
+
getAppVersion(peer, opts) {
|
|
11083
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11084
|
+
try {
|
|
11085
|
+
let path = this.computePeerPath(peer, 'version.appup');
|
|
11086
|
+
if (opts === null || opts === void 0 ? void 0 : opts.nocache) {
|
|
11087
|
+
path += '?t=' + Date.now();
|
|
11088
|
+
}
|
|
11089
|
+
const appVersion = yield this.get(path, opts);
|
|
11090
|
+
if (isNotNilOrBlank(appVersion))
|
|
11091
|
+
return appVersion;
|
|
11092
|
+
}
|
|
11093
|
+
catch (err) {
|
|
11094
|
+
if (this.environment.production)
|
|
11095
|
+
console.error('[network] Cannot load file \'version.appup\'. Please make sure webserver config allow CORS access');
|
|
11096
|
+
else
|
|
11097
|
+
console.error('[network] Cannot load file \'version.appup\'.', err);
|
|
11098
|
+
// Continue
|
|
11099
|
+
}
|
|
11100
|
+
// Try loading manifest.json
|
|
11101
|
+
const manifest = yield this.getAppManifest(peer, opts);
|
|
11102
|
+
return manifest === null || manifest === void 0 ? void 0 : manifest.version;
|
|
11103
|
+
});
|
|
11104
|
+
}
|
|
11105
|
+
computePeerPath(peer, path) {
|
|
11023
11106
|
peer = peer || this.peer;
|
|
11024
11107
|
if (!peer)
|
|
11025
11108
|
return undefined;
|
|
11026
|
-
let peerUrl =
|
|
11109
|
+
let peerUrl = (peer instanceof Peer) ? peer.url : peer;
|
|
11027
11110
|
// Remove trailing slash
|
|
11028
11111
|
if (peerUrl.endsWith('/')) {
|
|
11029
11112
|
peerUrl = peerUrl.substr(0, peerUrl.length - 1);
|
|
11030
11113
|
}
|
|
11031
|
-
|
|
11114
|
+
// Add first path
|
|
11115
|
+
if (!path.startsWith('/')) {
|
|
11116
|
+
path = '/' + path;
|
|
11117
|
+
}
|
|
11118
|
+
// Concat peer URL and path
|
|
11119
|
+
return peerUrl + path;
|
|
11032
11120
|
}
|
|
11033
11121
|
/**
|
|
11034
11122
|
* Allow to force offline mode
|
|
@@ -13951,8 +14039,6 @@ class AccountService extends BaseGraphqlService {
|
|
|
13951
14039
|
}
|
|
13952
14040
|
canUserWriteDataForDepartment(recorderDepartment) {
|
|
13953
14041
|
if (ReferentialUtils.isEmpty(recorderDepartment)) {
|
|
13954
|
-
if (!this.isAdmin())
|
|
13955
|
-
console.warn('Unable to check if user has right: invalid recorderDepartment', recorderDepartment);
|
|
13956
14042
|
return this.isAdmin();
|
|
13957
14043
|
}
|
|
13958
14044
|
// Should be login, and status ENABLE
|
|
@@ -15037,6 +15123,12 @@ const CORE_CONFIG_OPTIONS = Object.freeze({
|
|
|
15037
15123
|
key: 'sumaris.android.install.url',
|
|
15038
15124
|
label: 'CONFIGURATION.OPTIONS.ANDROID_INSTALL_URL',
|
|
15039
15125
|
type: 'string'
|
|
15126
|
+
},
|
|
15127
|
+
DB_TIMEZONE: {
|
|
15128
|
+
key: 'sumaris.persistence.db.timezone',
|
|
15129
|
+
label: 'DB Timezone (readonly)',
|
|
15130
|
+
type: 'string',
|
|
15131
|
+
isTransient: true // ONly on server, cannot be set
|
|
15040
15132
|
}
|
|
15041
15133
|
});
|
|
15042
15134
|
|
|
@@ -15471,6 +15563,7 @@ class PlatformService extends StartableService {
|
|
|
15471
15563
|
return this.platform.height();
|
|
15472
15564
|
}
|
|
15473
15565
|
ngOnStart() {
|
|
15566
|
+
var _a;
|
|
15474
15567
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15475
15568
|
const now = Date.now();
|
|
15476
15569
|
this.accountService.tokenType = undefined;
|
|
@@ -15496,11 +15589,16 @@ class PlatformService extends StartableService {
|
|
|
15496
15589
|
this.networkService.ready(),
|
|
15497
15590
|
this.audioProvider.ready()
|
|
15498
15591
|
]);
|
|
15499
|
-
|
|
15592
|
+
// Check if web app has update, and reload page if need
|
|
15593
|
+
if (this.isWeb() && this.environment.production) {
|
|
15594
|
+
yield this.checkAppVersion({ canReload: true });
|
|
15595
|
+
}
|
|
15500
15596
|
// Update cache configuration when network changed
|
|
15501
15597
|
this.networkService.onNetworkStatusChanges
|
|
15502
|
-
.pipe(skip(1)
|
|
15598
|
+
.pipe(skip(1) // Olready done once, so we skip the first event
|
|
15599
|
+
)
|
|
15503
15600
|
.subscribe(type => this.configureCache(type !== 'none'));
|
|
15601
|
+
console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, web: ${this.isWeb()}, downloader: ${this.canDownload}, fileOpener: ${this.canOpenFile}} in ${Date.now() - now}ms`);
|
|
15504
15602
|
// Update authentication type
|
|
15505
15603
|
this.configService.config
|
|
15506
15604
|
.pipe(map(config => config === null || config === void 0 ? void 0 : config.getProperty(CORE_CONFIG_OPTIONS.AUTH_TOKEN_TYPE)), filter(isNotNilOrBlank), distinctUntilChanged())
|
|
@@ -15517,6 +15615,14 @@ class PlatformService extends StartableService {
|
|
|
15517
15615
|
this.audioProvider.playStartupSound();
|
|
15518
15616
|
}, 1000);
|
|
15519
15617
|
}
|
|
15618
|
+
// Check if new version, every 1 min
|
|
15619
|
+
const checkIntervalMs = (this.environment.checkAppVersionIntervalInSeconds || 0) * 1000;
|
|
15620
|
+
if (this.isWeb() && this.environment.production && checkIntervalMs > 0) {
|
|
15621
|
+
(_a = this.checkAppVersionTimer) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
15622
|
+
this.checkAppVersionTimer = timer(checkIntervalMs, checkIntervalMs)
|
|
15623
|
+
.subscribe(_ => this.checkAppVersion({ silent: true, canReload: false /*do NOT auto reload, when app is started*/ }));
|
|
15624
|
+
this.registerSubscription(this.checkAppVersionTimer);
|
|
15625
|
+
}
|
|
15520
15626
|
}
|
|
15521
15627
|
catch (err) {
|
|
15522
15628
|
// Manage startup error
|
|
@@ -15638,6 +15744,74 @@ class PlatformService extends StartableService {
|
|
|
15638
15744
|
this.cache.setDefaultTTL(cacheTTL);
|
|
15639
15745
|
this.cache.setOfflineInvalidate(false); // Do not invalidate cache when offline
|
|
15640
15746
|
}
|
|
15747
|
+
checkAppVersion(opts) {
|
|
15748
|
+
var _a, _b, _c;
|
|
15749
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15750
|
+
if (this.networkService.offline || !this.isWeb())
|
|
15751
|
+
return; // Skip
|
|
15752
|
+
const silent = (opts === null || opts === void 0 ? void 0 : opts.silent) === true;
|
|
15753
|
+
const production = this.environment.production;
|
|
15754
|
+
const canAutoReload = !opts || opts.canReload !== false;
|
|
15755
|
+
if (!silent)
|
|
15756
|
+
console.info('[platform] Checking remote app version...');
|
|
15757
|
+
const actualVersion = this.environment.version;
|
|
15758
|
+
if (isNilOrBlank(actualVersion)) {
|
|
15759
|
+
console.error('[platform] Missing required value for \'environment.version\'. Cannot check remote app version.');
|
|
15760
|
+
(_a = this.checkAppVersionTimer) === null || _a === void 0 ? void 0 : _a.unsubscribe(); // Stop timer if exists
|
|
15761
|
+
return; // Skip
|
|
15762
|
+
}
|
|
15763
|
+
const peer = undefined; // location.origin + this.environment.baseUrl;
|
|
15764
|
+
const remoteVersion = yield this.networkService.getAppVersion(peer);
|
|
15765
|
+
if (isNilOrBlank(remoteVersion)) {
|
|
15766
|
+
if (production && !silent)
|
|
15767
|
+
console.error('[platform] Cannot load remote app version. Skipping version check');
|
|
15768
|
+
(_b = this.checkAppVersionTimer) === null || _b === void 0 ? void 0 : _b.unsubscribe(); // Stop timer if exists
|
|
15769
|
+
return;
|
|
15770
|
+
}
|
|
15771
|
+
if (VersionUtils.isCompatible(remoteVersion, actualVersion)) {
|
|
15772
|
+
if (!silent)
|
|
15773
|
+
console.info('[platform] Checking remote app version [OK]');
|
|
15774
|
+
return;
|
|
15775
|
+
}
|
|
15776
|
+
// If newer version exists
|
|
15777
|
+
let reloadPath = location.href.replace(/[&]?version=[0-9.]+/gi, ''); // Remove old version in query params
|
|
15778
|
+
reloadPath += (reloadPath.indexOf('?') === -1) ? '?' : '&'; // Add query param separator
|
|
15779
|
+
reloadPath += 'version=' + remoteVersion; // Add version (to avoid a reload infinite loop)
|
|
15780
|
+
// Already try to reload, but version still bad
|
|
15781
|
+
if (reloadPath === location.href) {
|
|
15782
|
+
if (canAutoReload)
|
|
15783
|
+
console.error(`[platform] Reloaded page failed, because version still mismatch! Please check version.appup file (expected app version: ${actualVersion})`);
|
|
15784
|
+
// Stop timer, to avoid infinite loop
|
|
15785
|
+
(_c = this.checkAppVersionTimer) === null || _c === void 0 ? void 0 : _c.unsubscribe();
|
|
15786
|
+
return;
|
|
15787
|
+
}
|
|
15788
|
+
console.warn(`[platform] More recent version detected (remote: ${remoteVersion}, actual: ${actualVersion}`);
|
|
15789
|
+
// Auto reload
|
|
15790
|
+
if (canAutoReload) {
|
|
15791
|
+
console.info('[platform] Will reloading at ' + reloadPath);
|
|
15792
|
+
location.href = reloadPath;
|
|
15793
|
+
// App stop
|
|
15794
|
+
}
|
|
15795
|
+
// Ask user to reload
|
|
15796
|
+
else {
|
|
15797
|
+
yield this.showToast({
|
|
15798
|
+
message: 'CONFIRM.RELOAD_APP',
|
|
15799
|
+
messageParams: { version: remoteVersion, name: this.environment.name },
|
|
15800
|
+
type: 'info', duration: -1,
|
|
15801
|
+
buttons: [
|
|
15802
|
+
// Reload button
|
|
15803
|
+
{ text: this.translate.instant('COMMON.BTN_RELOAD'),
|
|
15804
|
+
side: 'end',
|
|
15805
|
+
handler: () => {
|
|
15806
|
+
location.href = reloadPath;
|
|
15807
|
+
return true;
|
|
15808
|
+
}
|
|
15809
|
+
}
|
|
15810
|
+
]
|
|
15811
|
+
});
|
|
15812
|
+
}
|
|
15813
|
+
});
|
|
15814
|
+
}
|
|
15641
15815
|
storageReady() {
|
|
15642
15816
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15643
15817
|
console.info(`[platform] Starting storage...`);
|
|
@@ -15853,6 +16027,13 @@ class FileResponse {
|
|
|
15853
16027
|
this.statusText = (init === null || init === void 0 ? void 0 : init.statusText) || 'OK';
|
|
15854
16028
|
}
|
|
15855
16029
|
}
|
|
16030
|
+
function isProgressEvent(event) {
|
|
16031
|
+
return event.type === HttpEventType.UploadProgress
|
|
16032
|
+
|| event.type === HttpEventType.DownloadProgress;
|
|
16033
|
+
}
|
|
16034
|
+
function isResponseEvent(event) {
|
|
16035
|
+
return event.type === HttpEventType.Response;
|
|
16036
|
+
}
|
|
15856
16037
|
|
|
15857
16038
|
class UploadFileComponent {
|
|
15858
16039
|
constructor(cd, translate) {
|
|
@@ -15988,7 +16169,7 @@ class UploadFileComponent {
|
|
|
15988
16169
|
switchMap(file => this.uploadFn(file)
|
|
15989
16170
|
.pipe(map((event) => {
|
|
15990
16171
|
// Progress event
|
|
15991
|
-
if ((event
|
|
16172
|
+
if (isProgressEvent(event)) {
|
|
15992
16173
|
if (isNotNil(event.loaded) && event.loaded >= 0) {
|
|
15993
16174
|
file.progress = Math.min(1, event.loaded / (event.total || 1));
|
|
15994
16175
|
}
|
|
@@ -15996,15 +16177,20 @@ class UploadFileComponent {
|
|
|
15996
16177
|
file.progress = -1; // Indeterminate progression
|
|
15997
16178
|
}
|
|
15998
16179
|
}
|
|
16180
|
+
// User event
|
|
16181
|
+
else if (event.type === HttpEventType.User) {
|
|
16182
|
+
file.progress = -1; // Indeterminate progression
|
|
16183
|
+
}
|
|
15999
16184
|
// Response event
|
|
16000
|
-
else if (event
|
|
16185
|
+
else if (isResponseEvent(event)) {
|
|
16001
16186
|
file.progress = 1;
|
|
16002
16187
|
file.response = event;
|
|
16003
16188
|
console.debug(`[upload-file] ${file.name}: ${event.statusText || 'OK'}`, file.response);
|
|
16004
16189
|
}
|
|
16005
|
-
// Other events
|
|
16190
|
+
// Other events: ignore
|
|
16006
16191
|
else {
|
|
16007
|
-
|
|
16192
|
+
// DEBUG
|
|
16193
|
+
console.debug('[upload-file] Ignoring a file event: ', event);
|
|
16008
16194
|
}
|
|
16009
16195
|
return file;
|
|
16010
16196
|
}), catchError((err) => {
|
|
@@ -26630,5 +26816,5 @@ CoreTestingModule.decorators = [
|
|
|
26630
26816
|
* Generated bundle index. Do not edit.
|
|
26631
26817
|
*/
|
|
26632
26818
|
|
|
26633
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetPipe, Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UserEvent, UserEventFilter, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isControlHasInput, isCordova, isDesktop, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isTouchUi, isWindow, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0$b as ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppIconComponent as ɵi, NumpadTestPage as ɵj, MatBadgeIconTestPage as ɵk, ToastTestingModule as ɵl, ToastTestingPage as ɵm };
|
|
26819
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetPipe, Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UserEvent, UserEventFilter, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isControlHasInput, isCordova, isDesktop, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindow, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0$b as ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppIconComponent as ɵi, NumpadTestPage as ɵj, MatBadgeIconTestPage as ɵk, ToastTestingModule as ɵl, ToastTestingPage as ɵm };
|
|
26634
26820
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|