@sumaris-net/ngx-components 1.9.3 → 1.9.6

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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFjLEtBQUssQ0FBQyxDQUFDO0FBRWxFLE1BQU0sT0FBTyxXQUFXO0NBZ0R2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmV0Y2hQb2xpY3l9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHtTdG9yYWdlQ29uZmlnfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gbmV3IEluamVjdGlvblRva2VuPEVudmlyb25tZW50PignRU5WJyk7XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwcm9kdWN0aW9uOiBib29sZWFuO1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGxpc3RlblJlbW90ZUNoYW5nZXM/OiBib29sZWFuO1xuXG4gIC8vIEEgcGVlciB0byB1c2UgYXQgc3RhcnR1cCAodXNlZnVsIG9uIGEgd2ViIHNpdGUgZGVwbG95bWVudClcbiAgZGVmYXVsdFBlZXI/OiB7IGhvc3Q6IHN0cmluZzsgcG9ydDogbnVtYmVyOyB1c2VTc2w/OiBib29sZWFuOyBwYXRoPzogc3RyaW5nIH0gfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gIC8vIEEgbGlzdCBvZiBwZWVycywgdG8gc2VsZWN0IGFzIHBlZXIsIGluIHNldHRpbmdzXG4gIGRlZmF1bHRQZWVycz86IHsgaG9zdDogc3RyaW5nOyBwb3J0OiBudW1iZXI7IHVzZVNzbD86IGJvb2xlYW47IHBhdGg/OiBzdHJpbmcgfVtdO1xuXG4gIC8vIE1pbiBjb21wYXRpYmxlIHZlcnNpb24gZm9yIHRoZSBwZWVyXG4gIHBlZXJNaW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8vIEVuYWJsZSBjYWNoZSBwZXJzaXN0ZW5jZSA/XG4gIHBlcnNpc3RDYWNoZT86IGJvb2xlYW47XG5cbiAgLy8gRm9yY2Ugb2ZmbGluZSBtb2RlID8gLyFcXCBGb3IgREVWIG9ubHlcbiAgb2ZmbGluZT86IGJvb2xlYW47XG5cbiAgLy8gQXBvbGxvIChncmFwaFFMKSBjb25maWdcbiAgYXBvbGxvRmV0Y2hQb2xpY3k/OiAgRmV0Y2hQb2xpY3k7XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgZGVmYXVsdExvY2FsZTogc3RyaW5nO1xuICBkZWZhdWx0TGF0TG9uZ0Zvcm1hdD86ICdERCcgfCAnRERNTScgfCAnRERNTVNTJztcbiAgZGVmYXVsdERlcGFydG1lbnRJZD86IG51bWJlcjtcbiAgZGVmYXVsdEFwcE5hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRBbmRyb2lkSW5zdGFsbFVybD86IHN0cmluZztcblxuICAvLyBTdG9yYWdlXG4gIHN0b3JhZ2U/OiBQYXJ0aWFsPFN0b3JhZ2VDb25maWc+O1xuICBzdG9yYWdlU2F2ZVBlcmlvZE1zPzogbnVtYmVyO1xuXG4gIC8vIEFib3V0XG4gIHNvdXJjZVVybD86IHN0cmluZztcbiAgcmVwb3J0SXNzdWVVcmw/OiBzdHJpbmc7XG4gIGZvcnVtVXJsPzogc3RyaW5nO1xuICBoZWxwVXJsPzogc3RyaW5nO1xuXG4gIC8vIERldmVsb3BtZW50XG4gIC8vIChzZWUgdmFsdWVzIGluIHRoZSB0ZXN0IGRhdGFiYXNlIC0gWE1MIGZpbGVzIGluIFBvZCdzIG1vZHVsZSlcbiAgZGVmYXVsdEF1dGhWYWx1ZXM/OiB7XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIH07XG59XG4iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFjLEtBQUssQ0FBQyxDQUFDO0FBRWxFLE1BQU0sT0FBTyxXQUFXO0NBNER2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmV0Y2hQb2xpY3l9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHtTdG9yYWdlQ29uZmlnfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gbmV3IEluamVjdGlvblRva2VuPEVudmlyb25tZW50PignRU5WJyk7XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwcm9kdWN0aW9uOiBib29sZWFuO1xuICBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgLy8gQSBwZWVyIHRvIHVzZSBhdCBzdGFydHVwICh1c2VmdWwgb24gYSB3ZWIgc2l0ZSBkZXBsb3ltZW50KVxuICBkZWZhdWx0UGVlcj86IHsgaG9zdDogc3RyaW5nOyBwb3J0OiBudW1iZXI7IHVzZVNzbD86IGJvb2xlYW47IHBhdGg/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgLy8gQSBsaXN0IG9mIHBlZXJzLCB0byBzZWxlY3QgYXMgcGVlciwgaW4gc2V0dGluZ3NcbiAgZGVmYXVsdFBlZXJzPzogeyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlcjsgdXNlU3NsPzogYm9vbGVhbjsgcGF0aD86IHN0cmluZyB9W107XG5cbiAgLy8gTWluIGNvbXBhdGlibGUgdmVyc2lvbiBmb3IgdGhlIHBlZXJcbiAgcGVlck1pblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLy8gRW5hYmxlIGNhY2hlIHBlcnNpc3RlbmNlID9cbiAgcGVyc2lzdENhY2hlPzogYm9vbGVhbjtcblxuICAvLyBGb3JjZSBvZmZsaW5lIG1vZGUgPyAvIVxcIEZvciBERVYgb25seVxuICBvZmZsaW5lPzogYm9vbGVhbjtcblxuICAvLyBBcG9sbG8gKGdyYXBoUUwpIGNvbmZpZ1xuICBhcG9sbG9GZXRjaFBvbGljeT86ICBGZXRjaFBvbGljeTtcblxuICAvLyBEZWZhdWx0IHZhbHVlc1xuICBkZWZhdWx0TG9jYWxlOiBzdHJpbmc7XG4gIGRlZmF1bHRMYXRMb25nRm9ybWF0PzogJ0REJyB8ICdERE1NJyB8ICdERE1NU1MnO1xuICBkZWZhdWx0RGVwYXJ0bWVudElkPzogbnVtYmVyO1xuICBkZWZhdWx0QXBwTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdEFuZHJvaWRJbnN0YWxsVXJsPzogc3RyaW5nO1xuXG4gIC8vIFN0b3JhZ2VcbiAgc3RvcmFnZT86IFBhcnRpYWw8U3RvcmFnZUNvbmZpZz47XG4gIHN0b3JhZ2VTYXZlUGVyaW9kTXM/OiBudW1iZXI7XG5cbiAgLy8gQWJvdXRcbiAgc291cmNlVXJsPzogc3RyaW5nO1xuICByZXBvcnRJc3N1ZVVybD86IHN0cmluZztcbiAgZm9ydW1Vcmw/OiBzdHJpbmc7XG4gIGhlbHBVcmw/OiBzdHJpbmc7XG5cbiAgLy8gRGVmYXVsdCBhdXRoZW50aWNhdGlvbiAvIVxcIEZvciBERVYgb25seVxuICAvLyAoc2VlIHZhbHVlcyBpbiB0aGUgdGVzdCBkYXRhYmFzZSAtIFhNTCBmaWxlcyBpbiBQb2QncyBtb2R1bGUpXG4gIGRlZmF1bHRBdXRoVmFsdWVzPzoge1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICB9O1xuXG4gIC8vIEFjY291bnRcbiAgYWNjb3VudD86IHtcbiAgICBlbmFibGVMaXN0ZW5DaGFuZ2VzPzogYm9vbGVhbjtcbiAgICAvLyBJZiB1bmRlZmluZWQgb3IgMCwgdGhlbiBsaXN0ZW4gb25seSBjaGFuZ2VzIG1hZGUgYnkgdGhlIHBvZFxuICAgIC8vIElmIGdyZWF0ZXIgdGhhbiAwIDogd2lsbCBjaGVjayBjb25jdXJyZW50IGNoYW5nZXMgaW4gdGhlIERCIChlLmcuIGNoYW5nZXMgbWRlIGJ5IGFub3RoZXIgc29mdHdhcmUpIEFORCBjaGFuZ2VzIG1hZGUgdGhlIHBvZFxuICAgIGxpc3RlbkludGVydmFsSW5TZWNvbmQ/OiBudW1iZXI7XG4gIH07XG5cbiAgZW50aXR5RWRpdG9yPzoge1xuICAgIGVuYWJsZUxpc3RlbkNoYW5nZXM/OiBib29sZWFuO1xuICB9O1xuXG59XG4iXX0=
@@ -9,8 +9,6 @@ export const environment = Object.freeze({
9
9
  defaultLocale: 'fr',
10
10
  defaultLatLongFormat: 'DDMM',
11
11
  apolloFetchPolicy: 'cache-first',
12
- // FIXME: GraphQL subscription never unsubscribe...
13
- listenRemoteChanges: false,
14
12
  // FIXME: enable cache
15
13
  persistCache: false,
16
14
  // TODO: make this works
@@ -63,6 +61,13 @@ export const environment = Object.freeze({
63
61
  // username: 'admq2', password: 'q22006'
64
62
  // Token auth (using Person.pubkey)
65
63
  username: 'admin@sumaris.net', password: 'admin',
64
+ },
65
+ account: {
66
+ enableListenChanges: true,
67
+ listenIntervalInSecond: 30
68
+ },
69
+ entityEditor: {
70
+ enableListenChanges: false
66
71
  }
67
72
  });
68
73
  /*
@@ -72,4 +77,4 @@ export const environment = Object.freeze({
72
77
  * because it will have performance impact when throw error
73
78
  */
74
79
  import 'zone.js/dist/zone-error';
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdGQUFnRjtBQUNoRiwyRUFBMkU7QUFDM0UsZ0VBQWdFO0FBSWhFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBZ0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNwRCxJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLE9BQU8sRUFBRSxHQUFHO0lBQ1osYUFBYSxFQUFFLElBQUk7SUFDbkIsb0JBQW9CLEVBQUUsTUFBTTtJQUM1QixpQkFBaUIsRUFBRSxhQUFhO0lBRWhDLG1EQUFtRDtJQUNuRCxtQkFBbUIsRUFBRSxLQUFLO0lBRTFCLHNCQUFzQjtJQUN0QixZQUFZLEVBQUUsS0FBSztJQUVuQix3QkFBd0I7SUFDeEIsZ0JBQWdCO0lBRWhCLGNBQWMsRUFBRSxPQUFPO0lBRXZCLFlBQVksRUFBRTtRQUNaO1lBQ0UsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLFlBQVk7WUFDbEIsSUFBSSxFQUFFLEVBQUU7U0FDVDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixJQUFJLEVBQUUsR0FBRztTQUNWO0tBQ0Y7SUFDRCxjQUFjLEVBQUUsU0FBUztJQUN6Qix3QkFBd0IsRUFBRSwrREFBK0Q7SUFFekYsVUFBVTtJQUNWLE9BQU8sRUFBRTtRQUNQLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQztLQUMvRDtJQUVELFFBQVE7SUFDUixTQUFTLEVBQUUscUVBQXFFO0lBQ2hGLGNBQWMsRUFBRSw4RUFBOEU7SUFDOUYsUUFBUSxFQUFFLDJCQUEyQjtJQUNyQyxPQUFPLEVBQUUsZ0dBQWdHO0lBRXpHLGNBQWM7SUFDZCxpQkFBaUIsRUFBRTtRQUVqQixxQ0FBcUM7UUFDckMsd0NBQXdDO1FBRXhDLG1DQUFtQztRQUNuQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE9BQU87S0FDakQ7Q0FDRixDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILE9BQU8seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgY2FuIGJlIHJlcGxhY2VkIGR1cmluZyBidWlsZCBieSB1c2luZyB0aGUgYGZpbGVSZXBsYWNlbWVudHNgIGFycmF5LlxuLy8gYG5nIGJ1aWxkIC0tLXByb2RgIHJlcGxhY2VzIGBlbnZpcm9ubWVudC50c2Agd2l0aCBgZW52aXJvbm1lbnQucHJvZC50c2AuXG4vLyBUaGUgbGlzdCBvZiBmaWxlIHJlcGxhY2VtZW50cyBjYW4gYmUgZm91bmQgaW4gYGFuZ3VsYXIuanNvbmAuXG5cbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gJy4vZW52aXJvbm1lbnQuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIG5hbWU6ICdAc3VtYXJpcy1uZXQvbmd4LWNvbXBvbmVudHMnLCAvLyBvdmVycmlkZGVuIGJ5IEVOVklST05NRU5UIHRva2VuXG4gIHZlcnNpb246IHVuZGVmaW5lZCwgLy8gb3ZlcnJpZGRlbiBieSBFTlZJUk9OTUVOVCB0b2tlblxuICBwcm9kdWN0aW9uOiB0cnVlLCAvLyBsZXQgdG8gdHJ1ZSAhIGJlY2F1c2UgdXNlZCBieSBwYWNrYWdlclxuICBiYXNlVXJsOiAnLycsXG4gIGRlZmF1bHRMb2NhbGU6ICdmcicsXG4gIGRlZmF1bHRMYXRMb25nRm9ybWF0OiAnRERNTScsXG4gIGFwb2xsb0ZldGNoUG9saWN5OiAnY2FjaGUtZmlyc3QnLFxuXG4gIC8vIEZJWE1FOiBHcmFwaFFMIHN1YnNjcmlwdGlvbiBuZXZlciB1bnN1YnNjcmliZS4uLlxuICBsaXN0ZW5SZW1vdGVDaGFuZ2VzOiBmYWxzZSxcblxuICAvLyBGSVhNRTogZW5hYmxlIGNhY2hlXG4gIHBlcnNpc3RDYWNoZTogZmFsc2UsXG5cbiAgLy8gVE9ETzogbWFrZSB0aGlzIHdvcmtzXG4gIC8vb2ZmbGluZTogdHJ1ZSxcblxuICBwZWVyTWluVmVyc2lvbjogJzEuOC4wJyxcblxuICBkZWZhdWx0UGVlcnM6IFtcbiAgICB7XG4gICAgICBob3N0OiAnbG9jYWxob3N0JyxcbiAgICAgIHBvcnQ6IDgwODBcbiAgICB9LFxuICAgIHtcbiAgICAgIGhvc3Q6ICdsb2NhbGhvc3QnLFxuICAgICAgcG9ydDogODA4MVxuICAgIH0sXG4gICAge1xuICAgICAgaG9zdDogJzE5Mi4xNjguMC40NScsXG4gICAgICBwb3J0OiA4MDgwXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnMTkyLjE2OC4wLjI0JyxcbiAgICAgIHBvcnQ6IDgwODBcbiAgICB9LFxuICAgIHtcbiAgICAgIGhvc3Q6ICcxOTIuMTY4LjAuMjknLFxuICAgICAgcG9ydDogODA4MFxuICAgIH0sXG4gICAge1xuICAgICAgaG9zdDogJ3NpaC5zZmEuc2MnLFxuICAgICAgcG9ydDogODBcbiAgICB9LFxuICAgIHtcbiAgICAgIGhvc3Q6ICd0ZXN0LnN1bWFyaXMubmV0JyxcbiAgICAgIHBvcnQ6IDQ0M1xuICAgIH1cbiAgXSxcbiAgZGVmYXVsdEFwcE5hbWU6ICdTVU1BUmlTJyxcbiAgZGVmYXVsdEFuZHJvaWRJbnN0YWxsVXJsOiAnaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPW5ldC5zdW1hcmlzLmFwcCcsXG5cbiAgLy8gU3RvcmFnZVxuICBzdG9yYWdlOiB7XG4gICAgZHJpdmVyT3JkZXI6IFsnc3FsaXRlJywgJ2luZGV4ZWRkYicsICd3ZWJzcWwnLCAnbG9jYWxzdG9yYWdlJ11cbiAgfSxcblxuICAvLyBBYm91dFxuICBzb3VyY2VVcmw6ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9uZ3gtc3VtYXJpcy1jb21wb25lbnRzJyxcbiAgcmVwb3J0SXNzdWVVcmw6ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9uZ3gtc3VtYXJpcy1jb21wb25lbnRzLy0vaXNzdWVzJyxcbiAgZm9ydW1Vcmw6ICdodHRwczovL2ZvcnVtLnN1bWFyaXMubmV0JyxcbiAgaGVscFVybDogJ2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtZG9jLy0vYmxvYi9tYXN0ZXIvdXNlci1tYW51YWwvaW5kZXhfZnIubWQnLFxuXG4gIC8vIERldmVsb3BtZW50XG4gIGRlZmF1bHRBdXRoVmFsdWVzOiB7XG5cbiAgICAvLyBCYXNpYyBhdXRoICh1c2luZyBQZXJzb24udXNlcm5hbWUpXG4gICAgLy8gdXNlcm5hbWU6ICdhZG1xMicsIHBhc3N3b3JkOiAncTIyMDA2J1xuXG4gICAgLy8gVG9rZW4gYXV0aCAodXNpbmcgUGVyc29uLnB1YmtleSlcbiAgICB1c2VybmFtZTogJ2FkbWluQHN1bWFyaXMubmV0JywgcGFzc3dvcmQ6ICdhZG1pbicsXG4gIH1cbn0pO1xuXG4vKlxuICogSW4gZGV2ZWxvcG1lbnQgbW9kZSwgdG8gaWdub3JlIHpvbmUgcmVsYXRlZCBlcnJvciBzdGFjayBmcmFtZXMgc3VjaCBhc1xuICogYHpvbmUucnVuYCwgYHpvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrYCBmb3IgZWFzaWVyIGRlYnVnZ2luZywgeW91IGNhblxuICogaW1wb3J0IHRoZSBmb2xsb3dpbmcgZmlsZSwgYnV0IHBsZWFzZSBjb21tZW50IGl0IG91dCBpbiBwcm9kdWN0aW9uIG1vZGVcbiAqIGJlY2F1c2UgaXQgd2lsbCBoYXZlIHBlcmZvcm1hbmNlIGltcGFjdCB3aGVuIHRocm93IGVycm9yXG4gKi9cbmltcG9ydCAnem9uZS5qcy9kaXN0L3pvbmUtZXJyb3InO1xuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdGQUFnRjtBQUNoRiwyRUFBMkU7QUFDM0UsZ0VBQWdFO0FBSWhFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBZ0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNwRCxJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLE9BQU8sRUFBRSxHQUFHO0lBQ1osYUFBYSxFQUFFLElBQUk7SUFDbkIsb0JBQW9CLEVBQUUsTUFBTTtJQUM1QixpQkFBaUIsRUFBRSxhQUFhO0lBRWhDLHNCQUFzQjtJQUN0QixZQUFZLEVBQUUsS0FBSztJQUVuQix3QkFBd0I7SUFDeEIsZ0JBQWdCO0lBRWhCLGNBQWMsRUFBRSxPQUFPO0lBRXZCLFlBQVksRUFBRTtRQUNaO1lBQ0UsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLFlBQVk7WUFDbEIsSUFBSSxFQUFFLEVBQUU7U0FDVDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixJQUFJLEVBQUUsR0FBRztTQUNWO0tBQ0Y7SUFDRCxjQUFjLEVBQUUsU0FBUztJQUN6Qix3QkFBd0IsRUFBRSwrREFBK0Q7SUFFekYsVUFBVTtJQUNWLE9BQU8sRUFBRTtRQUNQLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQztLQUMvRDtJQUVELFFBQVE7SUFDUixTQUFTLEVBQUUscUVBQXFFO0lBQ2hGLGNBQWMsRUFBRSw4RUFBOEU7SUFDOUYsUUFBUSxFQUFFLDJCQUEyQjtJQUNyQyxPQUFPLEVBQUUsZ0dBQWdHO0lBRXpHLGNBQWM7SUFDZCxpQkFBaUIsRUFBRTtRQUVqQixxQ0FBcUM7UUFDckMsd0NBQXdDO1FBRXhDLG1DQUFtQztRQUNuQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE9BQU87S0FDakQ7SUFFRCxPQUFPLEVBQUU7UUFDUCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLHNCQUFzQixFQUFFLEVBQUU7S0FDM0I7SUFFRCxZQUFZLEVBQUU7UUFDWixtQkFBbUIsRUFBRSxLQUFLO0tBQzNCO0NBQ0YsQ0FBQyxDQUFDO0FBRUg7Ozs7O0dBS0c7QUFDSCxPQUFPLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGNhbiBiZSByZXBsYWNlZCBkdXJpbmcgYnVpbGQgYnkgdXNpbmcgdGhlIGBmaWxlUmVwbGFjZW1lbnRzYCBhcnJheS5cbi8vIGBuZyBidWlsZCAtLS1wcm9kYCByZXBsYWNlcyBgZW52aXJvbm1lbnQudHNgIHdpdGggYGVudmlyb25tZW50LnByb2QudHNgLlxuLy8gVGhlIGxpc3Qgb2YgZmlsZSByZXBsYWNlbWVudHMgY2FuIGJlIGZvdW5kIGluIGBhbmd1bGFyLmpzb25gLlxuXG5pbXBvcnQge0Vudmlyb25tZW50fSBmcm9tICcuL2Vudmlyb25tZW50LmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IGVudmlyb25tZW50OiBFbnZpcm9ubWVudCA9IE9iamVjdC5mcmVlemUoe1xuICBuYW1lOiAnQHN1bWFyaXMtbmV0L25neC1jb21wb25lbnRzJywgLy8gb3ZlcnJpZGRlbiBieSBFTlZJUk9OTUVOVCB0b2tlblxuICB2ZXJzaW9uOiB1bmRlZmluZWQsIC8vIG92ZXJyaWRkZW4gYnkgRU5WSVJPTk1FTlQgdG9rZW5cbiAgcHJvZHVjdGlvbjogdHJ1ZSwgLy8gbGV0IHRvIHRydWUgISBiZWNhdXNlIHVzZWQgYnkgcGFja2FnZXJcbiAgYmFzZVVybDogJy8nLFxuICBkZWZhdWx0TG9jYWxlOiAnZnInLFxuICBkZWZhdWx0TGF0TG9uZ0Zvcm1hdDogJ0RETU0nLFxuICBhcG9sbG9GZXRjaFBvbGljeTogJ2NhY2hlLWZpcnN0JyxcblxuICAvLyBGSVhNRTogZW5hYmxlIGNhY2hlXG4gIHBlcnNpc3RDYWNoZTogZmFsc2UsXG5cbiAgLy8gVE9ETzogbWFrZSB0aGlzIHdvcmtzXG4gIC8vb2ZmbGluZTogdHJ1ZSxcblxuICBwZWVyTWluVmVyc2lvbjogJzEuOC4wJyxcblxuICBkZWZhdWx0UGVlcnM6IFtcbiAgICB7XG4gICAgICBob3N0OiAnbG9jYWxob3N0JyxcbiAgICAgIHBvcnQ6IDgwODBcbiAgICB9LFxuICAgIHtcbiAgICAgIGhvc3Q6ICdsb2NhbGhvc3QnLFxuICAgICAgcG9ydDogODA4MVxuICAgIH0sXG4gICAge1xuICAgICAgaG9zdDogJzE5Mi4xNjguMC40NScsXG4gICAgICBwb3J0OiA4MDgwXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnMTkyLjE2OC4wLjI0JyxcbiAgICAgIHBvcnQ6IDgwODBcbiAgICB9LFxuICAgIHtcbiAgICAgIGhvc3Q6ICcxOTIuMTY4LjAuMjknLFxuICAgICAgcG9ydDogODA4MFxuICAgIH0sXG4gICAge1xuICAgICAgaG9zdDogJ3NpaC5zZmEuc2MnLFxuICAgICAgcG9ydDogODBcbiAgICB9LFxuICAgIHtcbiAgICAgIGhvc3Q6ICd0ZXN0LnN1bWFyaXMubmV0JyxcbiAgICAgIHBvcnQ6IDQ0M1xuICAgIH1cbiAgXSxcbiAgZGVmYXVsdEFwcE5hbWU6ICdTVU1BUmlTJyxcbiAgZGVmYXVsdEFuZHJvaWRJbnN0YWxsVXJsOiAnaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPW5ldC5zdW1hcmlzLmFwcCcsXG5cbiAgLy8gU3RvcmFnZVxuICBzdG9yYWdlOiB7XG4gICAgZHJpdmVyT3JkZXI6IFsnc3FsaXRlJywgJ2luZGV4ZWRkYicsICd3ZWJzcWwnLCAnbG9jYWxzdG9yYWdlJ11cbiAgfSxcblxuICAvLyBBYm91dFxuICBzb3VyY2VVcmw6ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9uZ3gtc3VtYXJpcy1jb21wb25lbnRzJyxcbiAgcmVwb3J0SXNzdWVVcmw6ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9uZ3gtc3VtYXJpcy1jb21wb25lbnRzLy0vaXNzdWVzJyxcbiAgZm9ydW1Vcmw6ICdodHRwczovL2ZvcnVtLnN1bWFyaXMubmV0JyxcbiAgaGVscFVybDogJ2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtZG9jLy0vYmxvYi9tYXN0ZXIvdXNlci1tYW51YWwvaW5kZXhfZnIubWQnLFxuXG4gIC8vIERldmVsb3BtZW50XG4gIGRlZmF1bHRBdXRoVmFsdWVzOiB7XG5cbiAgICAvLyBCYXNpYyBhdXRoICh1c2luZyBQZXJzb24udXNlcm5hbWUpXG4gICAgLy8gdXNlcm5hbWU6ICdhZG1xMicsIHBhc3N3b3JkOiAncTIyMDA2J1xuXG4gICAgLy8gVG9rZW4gYXV0aCAodXNpbmcgUGVyc29uLnB1YmtleSlcbiAgICB1c2VybmFtZTogJ2FkbWluQHN1bWFyaXMubmV0JywgcGFzc3dvcmQ6ICdhZG1pbicsXG4gIH0sXG5cbiAgYWNjb3VudDoge1xuICAgIGVuYWJsZUxpc3RlbkNoYW5nZXM6IHRydWUsXG4gICAgbGlzdGVuSW50ZXJ2YWxJblNlY29uZDogMzBcbiAgfSxcblxuICBlbnRpdHlFZGl0b3I6IHtcbiAgICBlbmFibGVMaXN0ZW5DaGFuZ2VzOiBmYWxzZVxuICB9XG59KTtcblxuLypcbiAqIEluIGRldmVsb3BtZW50IG1vZGUsIHRvIGlnbm9yZSB6b25lIHJlbGF0ZWQgZXJyb3Igc3RhY2sgZnJhbWVzIHN1Y2ggYXNcbiAqIGB6b25lLnJ1bmAsIGB6b25lRGVsZWdhdGUuaW52b2tlVGFza2AgZm9yIGVhc2llciBkZWJ1Z2dpbmcsIHlvdSBjYW5cbiAqIGltcG9ydCB0aGUgZm9sbG93aW5nIGZpbGUsIGJ1dCBwbGVhc2UgY29tbWVudCBpdCBvdXQgaW4gcHJvZHVjdGlvbiBtb2RlXG4gKiBiZWNhdXNlIGl0IHdpbGwgaGF2ZSBwZXJmb3JtYW5jZSBpbXBhY3Qgd2hlbiB0aHJvdyBlcnJvclxuICovXG5pbXBvcnQgJ3pvbmUuanMvZGlzdC96b25lLWVycm9yJztcbiJdfQ==
@@ -9440,8 +9440,6 @@ const environment = Object.freeze({
9440
9440
  defaultLocale: 'fr',
9441
9441
  defaultLatLongFormat: 'DDMM',
9442
9442
  apolloFetchPolicy: 'cache-first',
9443
- // FIXME: GraphQL subscription never unsubscribe...
9444
- listenRemoteChanges: false,
9445
9443
  // FIXME: enable cache
9446
9444
  persistCache: false,
9447
9445
  // TODO: make this works
@@ -9494,6 +9492,13 @@ const environment = Object.freeze({
9494
9492
  // username: 'admq2', password: 'q22006'
9495
9493
  // Token auth (using Person.pubkey)
9496
9494
  username: 'admin@sumaris.net', password: 'admin',
9495
+ },
9496
+ account: {
9497
+ enableListenChanges: true,
9498
+ listenIntervalInSecond: 30
9499
+ },
9500
+ entityEditor: {
9501
+ enableListenChanges: false
9497
9502
  }
9498
9503
  });
9499
9504
 
@@ -13022,8 +13027,6 @@ class GraphqlService extends StartableService {
13022
13027
  }
13023
13028
  const headers = new HttpHeaders()
13024
13029
  .append('Authorization', authorization);
13025
- //.append('X-App-Name', environment.name)
13026
- //.append('X-App-Version', environment.version)
13027
13030
  // Use the setContext method to set the HTTP headers.
13028
13031
  operation.setContext(Object.assign(Object.assign({}, operation.getContext()), { headers }));
13029
13032
  // Call the next link in the middleware chain.
@@ -13576,7 +13579,7 @@ const AccountSubscriptions = {
13576
13579
  }`
13577
13580
  };
13578
13581
  class AccountService extends BaseGraphqlService {
13579
- constructor(cryptoService, network, graphql, settings, storage, file, environment) {
13582
+ constructor(cryptoService, network, graphql, settings, storage, file, translate, toastController, environment) {
13580
13583
  super(graphql, environment);
13581
13584
  this.cryptoService = cryptoService;
13582
13585
  this.network = network;
@@ -13584,13 +13587,15 @@ class AccountService extends BaseGraphqlService {
13584
13587
  this.settings = settings;
13585
13588
  this.storage = storage;
13586
13589
  this.file = file;
13590
+ this.translate = translate;
13591
+ this.toastController = toastController;
13587
13592
  this.environment = environment;
13588
13593
  this.onLogin = new Subject();
13589
13594
  this.onLogout = new Subject();
13590
13595
  this.onChange = new Subject();
13591
13596
  this.onAuthTokenChange = new Subject();
13592
13597
  this.onAuthBasicChange = new Subject();
13593
- this._stopWatching$ = new Subject();
13598
+ this._listenChangesSubscription = null;
13594
13599
  this._cache = {
13595
13600
  loaded: false,
13596
13601
  keypair: null,
@@ -13603,6 +13608,7 @@ class AccountService extends BaseGraphqlService {
13603
13608
  };
13604
13609
  this._$additionalFields = new BehaviorSubject([]);
13605
13610
  this._tokenType$ = new BehaviorSubject(undefined);
13611
+ this._enableListenChanges = (!environment.account || environment.account.enableListenChanges !== false);
13606
13612
  this._debug = !environment.production;
13607
13613
  if (this._debug)
13608
13614
  console.debug('[account-service] Creating service');
@@ -13790,6 +13796,9 @@ class AccountService extends BaseGraphqlService {
13790
13796
  // Emit events
13791
13797
  this.onLogin.next(this._data);
13792
13798
  this.onChange.next(this._data);
13799
+ // Listen remote changes
13800
+ if (this._enableListenChanges)
13801
+ this.startListenChanges();
13793
13802
  return this._data;
13794
13803
  }
13795
13804
  catch (error) {
@@ -13913,22 +13922,39 @@ class AccountService extends BaseGraphqlService {
13913
13922
  // Emit event to observers
13914
13923
  this.onLogin.next(this._data);
13915
13924
  this.onChange.next(this._data);
13925
+ if (this._enableListenChanges)
13926
+ this.startListenChanges();
13916
13927
  return this._data;
13917
13928
  });
13918
13929
  }
13919
- refresh() {
13930
+ reload() {
13920
13931
  return __awaiter(this, void 0, void 0, function* () {
13921
13932
  if (!this._cache.pubkey)
13922
13933
  throw new Error('User not logged');
13923
13934
  if (this.network.offline)
13924
13935
  throw new Error('Cannot check account in offline mode');
13925
- yield this.loadData();
13926
- yield this.saveLocally();
13927
- console.debug('[account] Successfully reload account');
13928
- // Emit login event to subscribers
13929
- this.onLogin.next(this._data);
13930
- this.onChange.next(this._data);
13931
- return this._data;
13936
+ const now = Date.now();
13937
+ console.debug(`[account] Reloading account...`);
13938
+ const wasLogin = this.isLogin();
13939
+ try {
13940
+ yield this.loadData();
13941
+ yield this.saveLocally();
13942
+ console.debug(`[account] Reloading account [OK] in ${Date.now() - now}ms`);
13943
+ // Emit login event to subscribers
13944
+ this.onLogin.next(this._data);
13945
+ this.onChange.next(this._data);
13946
+ return this._data;
13947
+ }
13948
+ catch (error) {
13949
+ // Cannot reload but was login: force to logout
13950
+ if (wasLogin && !this.isLogin()) {
13951
+ console.error(`[account] Reloading account failed. Will force logout...`, error);
13952
+ yield this.logout();
13953
+ }
13954
+ else {
13955
+ throw error;
13956
+ }
13957
+ }
13932
13958
  });
13933
13959
  }
13934
13960
  /**
@@ -13993,7 +14019,7 @@ class AccountService extends BaseGraphqlService {
13993
14019
  if (hadAuthBasic)
13994
14020
  this.onAuthBasicChange.next(undefined);
13995
14021
  this.onChange.next(undefined);
13996
- this._stopWatching$.next();
14022
+ this.stopListenChanges();
13997
14023
  });
13998
14024
  }
13999
14025
  /**
@@ -14110,60 +14136,10 @@ class AccountService extends BaseGraphqlService {
14110
14136
  return res && res.confirmAccountEmail;
14111
14137
  });
14112
14138
  }
14113
- watch() {
14114
- if (!this._cache.pubkey)
14115
- throw new Error('Not logged in');
14116
- if (!this.started) {
14117
- // Wait service ready, then loop
14118
- return from(this.ready())
14119
- .pipe(switchMap(() => this.watch()));
14120
- }
14121
- this._stopWatching$.next(); // Stop previous listening
14122
- console.debug('[account] [WS] Watching changes');
14123
- return this.graphql.subscribe({
14124
- query: AccountSubscriptions.listenChanges,
14125
- variables: {
14126
- interval: 10
14127
- },
14128
- error: {
14129
- code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
14130
- message: 'ERROR.ACCOUNT.SUBSCRIBE_ACCOUNT_ERROR'
14131
- }
14132
- })
14133
- .pipe(
14134
- // Stop this pipe next time we call watch()
14135
- takeUntil(this._stopWatching$), map(({ data }) => {
14136
- var _a;
14137
- if (!data)
14138
- return;
14139
- const existingUpdateDate = toDateISOString((_a = this._data) === null || _a === void 0 ? void 0 : _a.updateDate);
14140
- if (existingUpdateDate === data.updateDate)
14141
- return;
14142
- console.debug(`[account] [WS] Detected update on {${data.updateDate}}`);
14143
- return Account.fromObject(data);
14144
- }), filter(isNotNil));
14145
- }
14146
- listenChanges() {
14147
- const self = this;
14148
- const subscription = this.watch()
14149
- .subscribe({
14150
- next: (data) => self.refresh(),
14151
- error: (err) => {
14152
- if (err && +err.code === ServerErrorCodes.NOT_FOUND) {
14153
- console.info('[account] Account not exists anymore: force user to logout...', err);
14154
- self.logout();
14155
- }
14156
- else if (err && +err.code === ServerErrorCodes.UNAUTHORIZED) {
14157
- console.info('[account] Account not authorized: force user to logout...', err);
14158
- self.logout();
14159
- }
14160
- else {
14161
- console.warn('[account] [WS] Received error:', err);
14162
- }
14163
- }
14164
- });
14165
- subscription.add(() => console.debug('[account] [WS] Stop listening changes'));
14166
- return subscription;
14139
+ listenChanges(opts) {
14140
+ if (this._enableListenChanges)
14141
+ return new Subscription(); // Already started: skip
14142
+ return this.startListenChanges(opts);
14167
14143
  }
14168
14144
  get additionalFields() {
14169
14145
  return this._$additionalFields.getValue();
@@ -14185,6 +14161,7 @@ class AccountService extends BaseGraphqlService {
14185
14161
  }
14186
14162
  /* -- protected method -- */
14187
14163
  resetData() {
14164
+ this.stopListenChanges();
14188
14165
  this._cache.loaded = false;
14189
14166
  this._cache.keypair = null;
14190
14167
  this._cache.authToken = null;
@@ -14312,6 +14289,8 @@ class AccountService extends BaseGraphqlService {
14312
14289
  // Emit event
14313
14290
  this.onLogin.next(this._data);
14314
14291
  this.onChange.next(this._data);
14292
+ if (this._enableListenChanges)
14293
+ this.startListenChanges();
14315
14294
  if (this._debug)
14316
14295
  console.debug(`[account] Account restoration [OK] {pubkey: ${pubkey.substr(0, 8)}}, {profile: ${this._cache.mainProfile}}`);
14317
14296
  return account;
@@ -14511,6 +14490,74 @@ class AccountService extends BaseGraphqlService {
14511
14490
  return yield this.authenticateAndGetToken(newToken, (counter || 1) + 1 /* increment */);
14512
14491
  });
14513
14492
  }
14493
+ startListenChanges(opts) {
14494
+ if (this._listenChangesSubscription)
14495
+ this.stopListenChanges(); // Stop previous subscription
14496
+ if (this.network.offline)
14497
+ return new Subscription(); // Offline: skip
14498
+ const subscription = this.watchChanges(opts)
14499
+ .subscribe({
14500
+ next: (data) => {
14501
+ console.debug(`[account] Remote update detected at ${data.updateDate}`);
14502
+ this.reload();
14503
+ },
14504
+ error: (err) => {
14505
+ if (err && +err.code === ServerErrorCodes.NOT_FOUND) {
14506
+ console.info('[account] [WS] Account not exists anymore: force user to logout...', err);
14507
+ this.logout();
14508
+ }
14509
+ else if (err && +err.code === ServerErrorCodes.UNAUTHORIZED) {
14510
+ console.info('[account] [WS] Account not authorized: force user to logout...', err);
14511
+ this.logout();
14512
+ }
14513
+ else {
14514
+ console.warn('[account] [WS] Received error:', err);
14515
+ }
14516
+ }
14517
+ });
14518
+ // Add close log
14519
+ subscription.add(() => console.debug(`[account] Stop watching remote changes`));
14520
+ this._listenChangesSubscription = subscription;
14521
+ // Make sure to use the stop function, when unsubscribe
14522
+ return new Subscription(() => this.stopListenChanges());
14523
+ }
14524
+ stopListenChanges() {
14525
+ if (this._listenChangesSubscription) {
14526
+ this._listenChangesSubscription.unsubscribe();
14527
+ this._listenChangesSubscription = null;
14528
+ }
14529
+ }
14530
+ watchChanges(opts) {
14531
+ var _a;
14532
+ if (!this.started) {
14533
+ // Wait service ready, then loop
14534
+ return from(this.ready())
14535
+ .pipe(switchMap(() => this.watchChanges(opts)));
14536
+ }
14537
+ if (!this._cache.pubkey)
14538
+ throw new Error('Not logged in');
14539
+ if (this.network.offline)
14540
+ throw new Error('Cannot watch account changes: network is offline.');
14541
+ const variables = {
14542
+ interval: Math.max(0, (opts === null || opts === void 0 ? void 0 : opts.intervalInSecond) || ((_a = this.environment.account) === null || _a === void 0 ? void 0 : _a.listenIntervalInSecond) || 0)
14543
+ };
14544
+ console.debug(`[account] Watching remote changes, every ${variables.interval}s`);
14545
+ return this.graphql.subscribe({
14546
+ query: AccountSubscriptions.listenChanges,
14547
+ variables,
14548
+ error: {
14549
+ code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
14550
+ message: 'ERROR.ACCOUNT.SUBSCRIBE_ACCOUNT_ERROR'
14551
+ }
14552
+ }).pipe(map(({ data }) => data),
14553
+ // Keep only if newer
14554
+ filter(data => {
14555
+ var _a;
14556
+ const currentUpdateDate = fromDateISOString((_a = this._data) === null || _a === void 0 ? void 0 : _a.updateDate);
14557
+ const remoteUpdateDate = fromDateISOString(data === null || data === void 0 ? void 0 : data.updateDate);
14558
+ return (remoteUpdateDate && (!currentUpdateDate || !remoteUpdateDate.isSame(currentUpdateDate, 'millisecond')));
14559
+ }));
14560
+ }
14514
14561
  copyIdAndUpdateDate(source, target) {
14515
14562
  if (!source)
14516
14563
  return;
@@ -14524,8 +14571,11 @@ class AccountService extends BaseGraphqlService {
14524
14571
  target.id = source.id || target.id;
14525
14572
  target.updateDate = source.updateDate || target.updateDate;
14526
14573
  }
14574
+ showToast(opts) {
14575
+ return Toasts.show(this.toastController, this.translate, opts);
14576
+ }
14527
14577
  }
14528
- AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(CryptoService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(FileService), i0.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
14578
+ AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(CryptoService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$1.TranslateService, 8), i0.ɵɵinject(i1$4.ToastController, 8), i0.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
14529
14579
  AccountService.decorators = [
14530
14580
  { type: Injectable, args: [{ providedIn: 'root' },] }
14531
14581
  ];
@@ -14536,6 +14586,8 @@ AccountService.ctorParameters = () => [
14536
14586
  { type: LocalSettingsService },
14537
14587
  { type: Storage },
14538
14588
  { type: FileService },
14589
+ { type: TranslateService, decorators: [{ type: Optional }] },
14590
+ { type: ToastController, decorators: [{ type: Optional }] },
14539
14591
  { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] }
14540
14592
  ];
14541
14593
 
@@ -18210,7 +18262,7 @@ class RegisterConfirmPage {
18210
18262
  // Send the confirmation code
18211
18263
  const confirmed = yield this.accountService.confirmEmail(email, code);
18212
18264
  if (confirmed && this.isLogin) {
18213
- yield this.accountService.refresh();
18265
+ yield this.accountService.reload();
18214
18266
  }
18215
18267
  this.loading = false;
18216
18268
  //this.location.replaceState("/confirm/" + email + "/");
@@ -18441,7 +18493,7 @@ class AccountPage extends AppForm {
18441
18493
  return __awaiter(this, void 0, void 0, function* () {
18442
18494
  this.disable();
18443
18495
  this.markAsLoading();
18444
- return this.accountService.refresh();
18496
+ return this.accountService.reload();
18445
18497
  });
18446
18498
  }
18447
18499
  startListenChanges() {
@@ -23443,6 +23495,7 @@ class AppEditorOptions extends AppTabEditorOptions {
23443
23495
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
23444
23496
  class AppEntityEditor extends AppTabEditor {
23445
23497
  constructor(injector, dataType, dataService, options) {
23498
+ var _a;
23446
23499
  super(injector.get(ActivatedRoute), injector.get(Router), injector.get(AlertController), injector.get(TranslateService), options);
23447
23500
  this.dataType = dataType;
23448
23501
  this.dataService = dataService;
@@ -23451,7 +23504,7 @@ class AppEntityEditor extends AppTabEditor {
23451
23504
  this.onUpdateView = new EventEmitter();
23452
23505
  options = Object.assign({
23453
23506
  // Default options
23454
- enableListenChanges: (injector.get(ENVIRONMENT).listenRemoteChanges === true), pathIdAttribute: 'id', autoLoad: true, autoUpdateRoute: true, i18nPrefix: '' }, options);
23507
+ enableListenChanges: (((_a = injector.get(ENVIRONMENT).entityEditor) === null || _a === void 0 ? void 0 : _a.enableListenChanges) === true), pathIdAttribute: 'id', autoLoad: true, autoUpdateRoute: true, i18nPrefix: '' }, options);
23455
23508
  this.settings = injector.get(LocalSettingsService);
23456
23509
  this.errorTranslator = injector.get(FormErrorTranslator);
23457
23510
  this.cd = injector.get(ChangeDetectorRef);