@sumaris-net/ngx-components 1.9.4 → 1.9.7

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