@sumaris-net/ngx-components 1.13.2 → 1.14.0
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 +237 -48
- 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 +3 -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 +92 -8
- 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 +178 -14
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -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/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 +2 -1
- 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
|
@@ -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
|
|
@@ -9979,7 +9979,18 @@ class HttpUtils {
|
|
|
9979
9979
|
static getResource(http, uri, opts) {
|
|
9980
9980
|
return __awaiter(this, void 0, void 0, function* () {
|
|
9981
9981
|
// Add headers
|
|
9982
|
-
opts = Object.assign({}, opts
|
|
9982
|
+
opts = Object.assign({}, opts
|
|
9983
|
+
//headers: new HttpHeaders(),
|
|
9984
|
+
//.append('X-App-Name', environment.name)
|
|
9985
|
+
//.append('X-App-Version', environment.version),
|
|
9986
|
+
);
|
|
9987
|
+
// Force no cache
|
|
9988
|
+
if (opts.nocache === true) {
|
|
9989
|
+
opts.headers = (opts.headers instanceof HttpHeaders ? opts.headers : new HttpHeaders(opts.headers));
|
|
9990
|
+
opts.headers
|
|
9991
|
+
.append('Cache-Control', 'no-cache')
|
|
9992
|
+
.append('Pragma', 'no-cache');
|
|
9993
|
+
}
|
|
9983
9994
|
try {
|
|
9984
9995
|
// Using web http client
|
|
9985
9996
|
return (yield http.get(uri, opts).toPromise());
|
|
@@ -10021,6 +10032,7 @@ class VersionUtils {
|
|
|
10021
10032
|
}
|
|
10022
10033
|
VersionUtils.compare = compareVersionNumbers;
|
|
10023
10034
|
VersionUtils.isCompatible = isVersionCompatible;
|
|
10035
|
+
VersionUtils.isSame = isSameVersion;
|
|
10024
10036
|
/**
|
|
10025
10037
|
* Compare two software version numbers (e.g. 1.7.1)
|
|
10026
10038
|
* Returns:
|
|
@@ -10089,6 +10101,9 @@ function isVersionCompatible(minVersion, actualVersion) {
|
|
|
10089
10101
|
//console.debug(`[http] Checking actual version {${actualVersion}} is compatible with min expected version {${minVersion}}`);
|
|
10090
10102
|
return compareVersionNumbers(minVersion, actualVersion) <= 0;
|
|
10091
10103
|
}
|
|
10104
|
+
function isSameVersion(v1, v2) {
|
|
10105
|
+
return compareVersionNumbers(v1, v2) === 0;
|
|
10106
|
+
}
|
|
10092
10107
|
|
|
10093
10108
|
class SelectPeerModal {
|
|
10094
10109
|
constructor(viewCtrl, cd, http, environment) {
|
|
@@ -11020,15 +11035,65 @@ class NetworkService extends StartableService {
|
|
|
11020
11035
|
});
|
|
11021
11036
|
}
|
|
11022
11037
|
getNodeInfo(peer) {
|
|
11038
|
+
const path = this.computePeerPath(peer, '/api/node/info');
|
|
11039
|
+
return this.get(path);
|
|
11040
|
+
}
|
|
11041
|
+
getAppManifest(peer, opts) {
|
|
11042
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11043
|
+
try {
|
|
11044
|
+
let path = this.computePeerPath(peer, 'manifest.json');
|
|
11045
|
+
if (opts === null || opts === void 0 ? void 0 : opts.nocache) {
|
|
11046
|
+
path += '?t=' + Date.now();
|
|
11047
|
+
}
|
|
11048
|
+
return yield this.get(path, opts);
|
|
11049
|
+
}
|
|
11050
|
+
catch (err) {
|
|
11051
|
+
if (this.environment.production)
|
|
11052
|
+
console.error('[network] Cannot load file \'manifest.json\'. Please make sure webserver config allow CORS access', err);
|
|
11053
|
+
else
|
|
11054
|
+
console.error('[network] Cannot load file \'manifest.json\'.', err);
|
|
11055
|
+
// Continue
|
|
11056
|
+
}
|
|
11057
|
+
});
|
|
11058
|
+
}
|
|
11059
|
+
getAppVersion(peer, opts) {
|
|
11060
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11061
|
+
try {
|
|
11062
|
+
let path = this.computePeerPath(peer, 'version.appup');
|
|
11063
|
+
if (opts === null || opts === void 0 ? void 0 : opts.nocache) {
|
|
11064
|
+
path += '?t=' + Date.now();
|
|
11065
|
+
}
|
|
11066
|
+
const appVersion = yield this.get(path, opts);
|
|
11067
|
+
if (isNotNilOrBlank(appVersion))
|
|
11068
|
+
return appVersion;
|
|
11069
|
+
}
|
|
11070
|
+
catch (err) {
|
|
11071
|
+
if (this.environment.production)
|
|
11072
|
+
console.error('[network] Cannot load file \'version.appup\'. Please make sure webserver config allow CORS access');
|
|
11073
|
+
else
|
|
11074
|
+
console.error('[network] Cannot load file \'version.appup\'.', err);
|
|
11075
|
+
// Continue
|
|
11076
|
+
}
|
|
11077
|
+
// Try loading manifest.json
|
|
11078
|
+
const manifest = yield this.getAppManifest(peer, opts);
|
|
11079
|
+
return manifest === null || manifest === void 0 ? void 0 : manifest.version;
|
|
11080
|
+
});
|
|
11081
|
+
}
|
|
11082
|
+
computePeerPath(peer, path) {
|
|
11023
11083
|
peer = peer || this.peer;
|
|
11024
11084
|
if (!peer)
|
|
11025
11085
|
return undefined;
|
|
11026
|
-
let peerUrl =
|
|
11086
|
+
let peerUrl = (peer instanceof Peer) ? peer.url : peer;
|
|
11027
11087
|
// Remove trailing slash
|
|
11028
11088
|
if (peerUrl.endsWith('/')) {
|
|
11029
11089
|
peerUrl = peerUrl.substr(0, peerUrl.length - 1);
|
|
11030
11090
|
}
|
|
11031
|
-
|
|
11091
|
+
// Add first path
|
|
11092
|
+
if (!path.startsWith('/')) {
|
|
11093
|
+
path = '/' + path;
|
|
11094
|
+
}
|
|
11095
|
+
// Concat peer URL and path
|
|
11096
|
+
return peerUrl + path;
|
|
11032
11097
|
}
|
|
11033
11098
|
/**
|
|
11034
11099
|
* Allow to force offline mode
|
|
@@ -13951,8 +14016,6 @@ class AccountService extends BaseGraphqlService {
|
|
|
13951
14016
|
}
|
|
13952
14017
|
canUserWriteDataForDepartment(recorderDepartment) {
|
|
13953
14018
|
if (ReferentialUtils.isEmpty(recorderDepartment)) {
|
|
13954
|
-
if (!this.isAdmin())
|
|
13955
|
-
console.warn('Unable to check if user has right: invalid recorderDepartment', recorderDepartment);
|
|
13956
14019
|
return this.isAdmin();
|
|
13957
14020
|
}
|
|
13958
14021
|
// Should be login, and status ENABLE
|
|
@@ -15037,6 +15100,12 @@ const CORE_CONFIG_OPTIONS = Object.freeze({
|
|
|
15037
15100
|
key: 'sumaris.android.install.url',
|
|
15038
15101
|
label: 'CONFIGURATION.OPTIONS.ANDROID_INSTALL_URL',
|
|
15039
15102
|
type: 'string'
|
|
15103
|
+
},
|
|
15104
|
+
DB_TIMEZONE: {
|
|
15105
|
+
key: 'sumaris.persistence.db.timezone',
|
|
15106
|
+
label: 'DB Timezone (readonly)',
|
|
15107
|
+
type: 'string',
|
|
15108
|
+
isTransient: true // ONly on server, cannot be set
|
|
15040
15109
|
}
|
|
15041
15110
|
});
|
|
15042
15111
|
|
|
@@ -15471,6 +15540,7 @@ class PlatformService extends StartableService {
|
|
|
15471
15540
|
return this.platform.height();
|
|
15472
15541
|
}
|
|
15473
15542
|
ngOnStart() {
|
|
15543
|
+
var _a, _b;
|
|
15474
15544
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15475
15545
|
const now = Date.now();
|
|
15476
15546
|
this.accountService.tokenType = undefined;
|
|
@@ -15491,16 +15561,22 @@ class PlatformService extends StartableService {
|
|
|
15491
15561
|
// Start root services
|
|
15492
15562
|
yield Promise.all([
|
|
15493
15563
|
this.entitiesStorage.ready(),
|
|
15494
|
-
this.cache.ready()
|
|
15564
|
+
this.cache.ready(),
|
|
15495
15565
|
this.settings.ready(),
|
|
15496
15566
|
this.networkService.ready(),
|
|
15497
15567
|
this.audioProvider.ready()
|
|
15498
15568
|
]);
|
|
15499
|
-
|
|
15569
|
+
yield Promise.all([
|
|
15570
|
+
this.configureCache(),
|
|
15571
|
+
this.checkAppVersion({ canReload: true })
|
|
15572
|
+
]);
|
|
15500
15573
|
// Update cache configuration when network changed
|
|
15501
15574
|
this.networkService.onNetworkStatusChanges
|
|
15502
|
-
.pipe(skip(1)
|
|
15503
|
-
|
|
15575
|
+
.pipe(skip(1), map(type => type !== 'none'), debounceTime(1000), distinctUntilChanged(),
|
|
15576
|
+
// Configure the cache
|
|
15577
|
+
tap(online => this.configureCache(online)))
|
|
15578
|
+
.subscribe();
|
|
15579
|
+
console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, web: ${this.isWeb()}, downloader: ${this.canDownload}, fileOpener: ${this.canOpenFile}} in ${Date.now() - now}ms`);
|
|
15504
15580
|
// Update authentication type
|
|
15505
15581
|
this.configService.config
|
|
15506
15582
|
.pipe(map(config => config === null || config === void 0 ? void 0 : config.getProperty(CORE_CONFIG_OPTIONS.AUTH_TOKEN_TYPE)), filter(isNotNilOrBlank), distinctUntilChanged())
|
|
@@ -15517,6 +15593,15 @@ class PlatformService extends StartableService {
|
|
|
15517
15593
|
this.audioProvider.playStartupSound();
|
|
15518
15594
|
}, 1000);
|
|
15519
15595
|
}
|
|
15596
|
+
// Check if new version, every 1 min
|
|
15597
|
+
if (this.isWeb()) {
|
|
15598
|
+
const intervalMs = (((_a = this.environment) === null || _a === void 0 ? void 0 : _a.checkAppVersionIntervalInSeconds) || 0) * 1000;
|
|
15599
|
+
if (intervalMs > 0) {
|
|
15600
|
+
(_b = this.checkAppVersionTimer) === null || _b === void 0 ? void 0 : _b.unsubscribe();
|
|
15601
|
+
this.checkAppVersionTimer = timer(intervalMs, intervalMs)
|
|
15602
|
+
.subscribe(_ => this.checkAppVersion({ silent: true, canReload: false /*do NOT auto reload, when app is started*/ }));
|
|
15603
|
+
}
|
|
15604
|
+
}
|
|
15520
15605
|
}
|
|
15521
15606
|
catch (err) {
|
|
15522
15607
|
// Manage startup error
|
|
@@ -15638,6 +15723,73 @@ class PlatformService extends StartableService {
|
|
|
15638
15723
|
this.cache.setDefaultTTL(cacheTTL);
|
|
15639
15724
|
this.cache.setOfflineInvalidate(false); // Do not invalidate cache when offline
|
|
15640
15725
|
}
|
|
15726
|
+
checkAppVersion(opts) {
|
|
15727
|
+
var _a, _b, _c;
|
|
15728
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15729
|
+
if (this.networkService.offline || !this.isWeb())
|
|
15730
|
+
return; // Skip
|
|
15731
|
+
const silent = (opts === null || opts === void 0 ? void 0 : opts.silent) === true;
|
|
15732
|
+
const production = this.environment.production;
|
|
15733
|
+
if (!silent)
|
|
15734
|
+
console.info('[platform] Checking remote app version...');
|
|
15735
|
+
const actualVersion = this.environment.version;
|
|
15736
|
+
if (isNilOrBlank(actualVersion)) {
|
|
15737
|
+
console.warn('[platform] Missing required value for \'environment.version\'. Cannot check remote app version.');
|
|
15738
|
+
(_a = this.checkAppVersionTimer) === null || _a === void 0 ? void 0 : _a.unsubscribe(); // Stop timer if exists
|
|
15739
|
+
return; // Skip
|
|
15740
|
+
}
|
|
15741
|
+
const peer = undefined; // location.origin + this.environment.baseUrl;
|
|
15742
|
+
const remoteVersion = yield this.networkService.getAppVersion(peer);
|
|
15743
|
+
if (isNilOrBlank(remoteVersion)) {
|
|
15744
|
+
if (production && !silent)
|
|
15745
|
+
console.error('[platform] Cannot load remote app version. Skipping version check');
|
|
15746
|
+
(_b = this.checkAppVersionTimer) === null || _b === void 0 ? void 0 : _b.unsubscribe(); // Stop timer if exists
|
|
15747
|
+
return;
|
|
15748
|
+
}
|
|
15749
|
+
if (VersionUtils.isCompatible(remoteVersion, actualVersion)) {
|
|
15750
|
+
if (!silent)
|
|
15751
|
+
console.info('[platform] Checking remote app version [OK]');
|
|
15752
|
+
return;
|
|
15753
|
+
}
|
|
15754
|
+
// If newer version exists
|
|
15755
|
+
const canAutoReload = !opts || opts.canReload !== false;
|
|
15756
|
+
// Avoid infinite loop, if already reloaded
|
|
15757
|
+
if (location.href.indexOf('?version=' + remoteVersion) !== -1) {
|
|
15758
|
+
if (canAutoReload)
|
|
15759
|
+
console.error(`[platform] Reloaded page failed, because version still mismatch! Please check version.appup file (expected app version: ${actualVersion})`);
|
|
15760
|
+
(_c = this.checkAppVersionTimer) === null || _c === void 0 ? void 0 : _c.unsubscribe();
|
|
15761
|
+
return;
|
|
15762
|
+
}
|
|
15763
|
+
console.warn(`[platform] More recent version detected (remote: ${remoteVersion}, actual: ${actualVersion}`);
|
|
15764
|
+
let reloadPath = location.href.replace(/[&?]{1}[a-z_-]=[0-9.]+/gi, ''); // Remove query params
|
|
15765
|
+
reloadPath += (reloadPath.indexOf('?') === -1) ? '?' : '&'; // Add query param separator
|
|
15766
|
+
reloadPath += 'version=' + remoteVersion; // Add version (to avoid a reload infinite loop)
|
|
15767
|
+
console.info('[platform] Will reloading at ' + reloadPath);
|
|
15768
|
+
// Auto reload
|
|
15769
|
+
if (canAutoReload) {
|
|
15770
|
+
location.href = reloadPath;
|
|
15771
|
+
// App stop
|
|
15772
|
+
}
|
|
15773
|
+
// Ask user to reload
|
|
15774
|
+
else {
|
|
15775
|
+
yield this.showToast({
|
|
15776
|
+
message: 'CONFIRM.RELOAD_APP',
|
|
15777
|
+
messageParams: { version: remoteVersion, name: this.environment.name },
|
|
15778
|
+
type: 'info', duration: -1,
|
|
15779
|
+
buttons: [
|
|
15780
|
+
// Reload button
|
|
15781
|
+
{ text: this.translate.instant('COMMON.BTN_RELOAD'),
|
|
15782
|
+
side: 'end',
|
|
15783
|
+
handler: () => {
|
|
15784
|
+
location.href = reloadPath;
|
|
15785
|
+
return true;
|
|
15786
|
+
}
|
|
15787
|
+
}
|
|
15788
|
+
]
|
|
15789
|
+
});
|
|
15790
|
+
}
|
|
15791
|
+
});
|
|
15792
|
+
}
|
|
15641
15793
|
storageReady() {
|
|
15642
15794
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15643
15795
|
console.info(`[platform] Starting storage...`);
|
|
@@ -15853,6 +16005,13 @@ class FileResponse {
|
|
|
15853
16005
|
this.statusText = (init === null || init === void 0 ? void 0 : init.statusText) || 'OK';
|
|
15854
16006
|
}
|
|
15855
16007
|
}
|
|
16008
|
+
function isProgressEvent(event) {
|
|
16009
|
+
return event.type === HttpEventType.UploadProgress
|
|
16010
|
+
|| event.type === HttpEventType.DownloadProgress;
|
|
16011
|
+
}
|
|
16012
|
+
function isResponseEvent(event) {
|
|
16013
|
+
return event.type === HttpEventType.Response;
|
|
16014
|
+
}
|
|
15856
16015
|
|
|
15857
16016
|
class UploadFileComponent {
|
|
15858
16017
|
constructor(cd, translate) {
|
|
@@ -15988,7 +16147,7 @@ class UploadFileComponent {
|
|
|
15988
16147
|
switchMap(file => this.uploadFn(file)
|
|
15989
16148
|
.pipe(map((event) => {
|
|
15990
16149
|
// Progress event
|
|
15991
|
-
if ((event
|
|
16150
|
+
if (isProgressEvent(event)) {
|
|
15992
16151
|
if (isNotNil(event.loaded) && event.loaded >= 0) {
|
|
15993
16152
|
file.progress = Math.min(1, event.loaded / (event.total || 1));
|
|
15994
16153
|
}
|
|
@@ -15996,15 +16155,20 @@ class UploadFileComponent {
|
|
|
15996
16155
|
file.progress = -1; // Indeterminate progression
|
|
15997
16156
|
}
|
|
15998
16157
|
}
|
|
16158
|
+
// User event
|
|
16159
|
+
else if (event.type === HttpEventType.User) {
|
|
16160
|
+
file.progress = -1; // Indeterminate progression
|
|
16161
|
+
}
|
|
15999
16162
|
// Response event
|
|
16000
|
-
else if (event
|
|
16163
|
+
else if (isResponseEvent(event)) {
|
|
16001
16164
|
file.progress = 1;
|
|
16002
16165
|
file.response = event;
|
|
16003
16166
|
console.debug(`[upload-file] ${file.name}: ${event.statusText || 'OK'}`, file.response);
|
|
16004
16167
|
}
|
|
16005
|
-
// Other events
|
|
16168
|
+
// Other events: ignore
|
|
16006
16169
|
else {
|
|
16007
|
-
|
|
16170
|
+
// DEBUG
|
|
16171
|
+
console.debug('[upload-file] Ignoring a file event: ', event);
|
|
16008
16172
|
}
|
|
16009
16173
|
return file;
|
|
16010
16174
|
}), catchError((err) => {
|
|
@@ -26630,5 +26794,5 @@ CoreTestingModule.decorators = [
|
|
|
26630
26794
|
* Generated bundle index. Do not edit.
|
|
26631
26795
|
*/
|
|
26632
26796
|
|
|
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 };
|
|
26797
|
+
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
26798
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|