@arsedizioni/ars-utils 18.2.247 → 18.2.250

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.
@@ -1,38 +1,79 @@
1
1
  import { computed, inject, Injectable, RendererFactory2, signal } from "@angular/core";
2
+ import { BroadcastChannelManager } from './broadcastChannelHandler';
2
3
  import * as i0 from "@angular/core";
3
4
  export class ThemeService {
4
5
  constructor() {
6
+ // messaggi broadcast
7
+ this.broadcastChannel = new BroadcastChannelManager('THEME-SERVICE');
8
+ this.broadcastMessage = '$theme-changed';
9
+ // per intercettare il cambio di tema a livello di sistema
10
+ this.prefersColorSchemeMediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');
5
11
  this.renderFactory2 = inject(RendererFactory2);
6
12
  this.renderer = this.renderFactory2.createRenderer(null, null);
13
+ /**
14
+ * Current theme
15
+ */
7
16
  this.theme = signal("light");
8
- this.themeIcon = computed(() => {
9
- return this.theme() === "dark" ? "light_mode" : "dark_mode";
10
- });
11
- this.themeName = computed(() => {
12
- return this.theme() === "dark" ? "Passa a tema chiaro" : "Passa a tema scuro";
17
+ /**
18
+ * The current theme is "System default"
19
+ */
20
+ this.auto = computed(() => this.theme() === 'system');
21
+ /**
22
+ * Configuration schema about the icon, the text and the toggle() sequence
23
+ */
24
+ this.themeInfo = {
25
+ ['system']: { icon: 'auto_mode', name: 'Impostazione predefinita di sistema', next: 'light', tooltip: 'Passa a tema chiaro', },
26
+ ['light']: { icon: 'light_mode', name: 'Tema chiaro', next: 'dark', tooltip: 'Passa a tema scuro', },
27
+ ['dark']: { icon: 'dark_mode', name: 'Tema scuro', next: 'system', tooltip: 'Passa a tema predefinito di sistema', },
28
+ };
29
+ /**
30
+ * Icon of the current theme (mat-icon code)
31
+ */
32
+ this.themeIcon = computed(() => this.themeInfo[this.theme()].icon);
33
+ /**
34
+ * Current theme name
35
+ */
36
+ this.themeName = computed(() => this.themeInfo[this.theme()].name);
37
+ /**
38
+ * Tooltip text on toggle
39
+ */
40
+ this.toggleTooltip = computed(() => this.themeInfo[this.theme()].tooltip);
41
+ // reagisce al cambio di tema nel sistema
42
+ this.prefersColorSchemeMediaQueryList.onchange = (_) => this.auto() ? this.setTheme() : null;
43
+ // reagisce al messaggio broadcast (sincronizza i temi tra i popup dell'applicazione)
44
+ this.broadcastChannel.subscribe({
45
+ messageId: this.broadcastMessage,
46
+ action: (bag) => {
47
+ if (this.theme() !== bag.data) {
48
+ this.setTheme(bag.data);
49
+ }
50
+ }
13
51
  });
52
+ // inizializza il tema
14
53
  this.setTheme(localStorage.getItem("preferred-theme") ?? null);
15
54
  }
55
+ ngOnDestroy() {
56
+ // chiude il canale di comunicazione broadcast
57
+ this.broadcastChannel.dispose();
58
+ }
16
59
  /**
17
60
  * Set the new theme
18
- * @param theme : the theme
61
+ * @param theme the new theme
19
62
  */
20
- setTheme(theme = null) {
21
- if (!theme) {
22
- this.theme.set(window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
23
- }
24
- else {
25
- this.renderer.removeClass(document.body, this.theme());
26
- this.theme.set(theme);
27
- }
28
- this.renderer.addClass(document.body, this.theme());
63
+ setTheme(theme = 'system') {
64
+ this.renderer.removeClass(document.body, 'light');
65
+ this.renderer.removeClass(document.body, 'dark');
66
+ this.theme.set(theme);
29
67
  localStorage.setItem("preferred-theme", this.theme());
68
+ this.renderer.addClass(document.body, this.auto() ? (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light") : theme);
69
+ // lancia il messaggio broadcast
70
+ this.broadcastChannel.sendMessage(this.broadcastMessage, this.theme());
30
71
  }
31
72
  /**
32
73
  * Toggle theme
33
74
  */
34
75
  toggleTheme() {
35
- this.setTheme(this.theme() === "dark" ? "light" : "dark");
76
+ this.setTheme(this.themeInfo[this.theme()].next);
36
77
  }
37
78
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38
79
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ThemeService, providedIn: "root" }); }
@@ -43,4 +84,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
43
84
  providedIn: "root",
44
85
  }]
45
86
  }], ctorParameters: () => [] });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jb3JlL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLL0YsTUFBTSxPQUFPLFlBQVk7SUFZeEI7UUFWUSxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFDLGFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsVUFBSyxHQUFHLE1BQU0sQ0FBbUIsT0FBTyxDQUFDLENBQUM7UUFDMUMsY0FBUyxHQUFtQixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFDYSxjQUFTLEdBQW1CLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7UUFHRixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQXVCLElBQUksSUFBSSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFFBQVEsQ0FBQyxRQUFpQyxJQUFJO1FBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuSCxDQUFDO2FBQU0sQ0FBQztZQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELENBQUM7OEdBcENXLFlBQVk7a0hBQVosWUFBWSxjQUZaLE1BQU07OzJGQUVOLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXJGYWN0b3J5MiwgU2lnbmFsLCBzaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGhlbWVTZXJ2aWNlIHtcclxuXHJcblx0cHJpdmF0ZSByZW5kZXJGYWN0b3J5MiA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyKTtcclxuXHRwcml2YXRlIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJGYWN0b3J5Mi5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcclxuXHRwdWJsaWMgcmVhZG9ubHkgdGhlbWUgPSBzaWduYWw8XCJkYXJrXCIgfCBcImxpZ2h0XCI+KFwibGlnaHRcIik7XHJcblx0cHVibGljIHJlYWRvbmx5IHRoZW1lSWNvbjogU2lnbmFsPHN0cmluZz4gPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRyZXR1cm4gdGhpcy50aGVtZSgpID09PSBcImRhcmtcIiA/IFwibGlnaHRfbW9kZVwiIDogXCJkYXJrX21vZGVcIjtcclxuXHR9KTtcclxuXHRwdWJsaWMgcmVhZG9ubHkgdGhlbWVOYW1lOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdHJldHVybiB0aGlzLnRoZW1lKCkgPT09IFwiZGFya1wiID8gXCJQYXNzYSBhIHRlbWEgY2hpYXJvXCIgOiBcIlBhc3NhIGEgdGVtYSBzY3Vyb1wiO1xyXG5cdH0pO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuc2V0VGhlbWUobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJwcmVmZXJyZWQtdGhlbWVcIikgYXMgKFwiZGFya1wiIHwgXCJsaWdodFwiKSA/PyBudWxsKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCB0aGUgbmV3IHRoZW1lXHJcblx0ICogQHBhcmFtIHRoZW1lIDogdGhlIHRoZW1lXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzZXRUaGVtZSh0aGVtZTogXCJkYXJrXCIgfCBcImxpZ2h0XCIgfCBudWxsID0gbnVsbCkgIHtcclxuXHRcdGlmICghdGhlbWUpIHtcclxuXHRcdFx0dGhpcy50aGVtZS5zZXQod2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpLm1hdGNoZXMgPyBcImRhcmtcIiA6IFwibGlnaHRcIik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMudGhlbWUoKSk7XHJcblx0XHRcdHRoaXMudGhlbWUuc2V0KHRoZW1lKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy50aGVtZSgpKTtcclxuXHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwicHJlZmVycmVkLXRoZW1lXCIsIHRoaXMudGhlbWUoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUb2dnbGUgdGhlbWVcclxuXHQgKi9cclxuXHR0b2dnbGVUaGVtZSgpIHtcclxuXHRcdHRoaXMuc2V0VGhlbWUodGhpcy50aGVtZSgpID09PSBcImRhcmtcIiA/IFwibGlnaHRcIiA6IFwiZGFya1wiKTtcclxuXHR9XHJcbn0iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jb3JlL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLGdCQUFnQixFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsdUJBQXVCLEVBQThCLE1BQU0sMkJBQTJCLENBQUM7O0FBcUJoRyxNQUFNLE9BQU8sWUFBWTtJQTRDdkI7UUExQ0EscUJBQXFCO1FBQ0oscUJBQWdCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRSxxQkFBZ0IsR0FBVyxnQkFBZ0IsQ0FBQztRQUU3RCwwREFBMEQ7UUFDekMscUNBQWdDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBRTlGLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUMsYUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVsRTs7V0FFRztRQUNjLFVBQUssR0FBRyxNQUFNLENBQVksT0FBTyxDQUFDLENBQUM7UUFDcEQ7O1dBRUc7UUFDYyxTQUFJLEdBQW9CLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7UUFFbkY7O1dBRUc7UUFDYyxjQUFTLEdBQXVDO1lBQy9ELENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxxQ0FBcUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsR0FBRztZQUM5SCxDQUFDLE9BQU8sQ0FBQyxF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Q0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7OEdBekZVLFlBQVk7a0hBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBSZW5kZXJlckZhY3RvcnkyLCBTaWduYWwsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJyb2FkY2FzdENoYW5uZWxNYW5hZ2VyLCBCcm9hZGNhc3RDaGFubmVsTWVzc2FnZUJhZyB9IGZyb20gJy4vYnJvYWRjYXN0Q2hhbm5lbEhhbmRsZXInO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBLaW5kIG9mIHRoZW1lczogc3lzdGVtIGRlZmF1bHQsIGxpZ2h0IG9yIGRhcmtcclxuICovXHJcbnR5cGUgdGhlbWVUeXBlID0gJ3N5c3RlbScgfCAnbGlnaHQnIHwgJ2RhcmsnO1xyXG5cclxuLyoqXHJcbiAqIEF2YWlsYWJsZSB0aGVtZXMnIHNjaGVtYVxyXG4gKi9cclxuaW50ZXJmYWNlIHRoZW1lSW5mb1JlY29yZCB7XHJcbiAgaWNvbjogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBuZXh0OiB0aGVtZVR5cGU7XHJcbiAgdG9vbHRpcDogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaGVtZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICAvLyBtZXNzYWdnaSBicm9hZGNhc3RcclxuICBwcml2YXRlIHJlYWRvbmx5IGJyb2FkY2FzdENoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbE1hbmFnZXIoJ1RIRU1FLVNFUlZJQ0UnKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGJyb2FkY2FzdE1lc3NhZ2U6IHN0cmluZyA9ICckdGhlbWUtY2hhbmdlZCc7XHJcblxyXG4gIC8vIHBlciBpbnRlcmNldHRhcmUgaWwgY2FtYmlvIGRpIHRlbWEgYSBsaXZlbGxvIGRpIHNpc3RlbWFcclxuICBwcml2YXRlIHJlYWRvbmx5IHByZWZlcnNDb2xvclNjaGVtZU1lZGlhUXVlcnlMaXN0ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKTtcclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJGYWN0b3J5MiA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyKTtcclxuICBwcml2YXRlIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJGYWN0b3J5Mi5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VycmVudCB0aGVtZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdGhlbWUgPSBzaWduYWw8dGhlbWVUeXBlPihcImxpZ2h0XCIpO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBjdXJyZW50IHRoZW1lIGlzIFwiU3lzdGVtIGRlZmF1bHRcIlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0bzogU2lnbmFsPGJvb2xlYW4+ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50aGVtZSgpID09PSAnc3lzdGVtJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyYXRpb24gc2NoZW1hIGFib3V0IHRoZSBpY29uLCB0aGUgdGV4dCBhbmQgdGhlIHRvZ2dsZSgpIHNlcXVlbmNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0aGVtZUluZm86IFJlY29yZDx0aGVtZVR5cGUsIHRoZW1lSW5mb1JlY29yZD4gPSB7XHJcbiAgICBbJ3N5c3RlbSddOiB7IGljb246ICdhdXRvX21vZGUnLCBuYW1lOiAnSW1wb3N0YXppb25lIHByZWRlZmluaXRhIGRpIHNpc3RlbWEnLCBuZXh0OiAnbGlnaHQnLCB0b29sdGlwOiAnUGFzc2EgYSB0ZW1hIGNoaWFybycsIH0sXHJcbiAgICBbJ2xpZ2h0J106IHsgaWNvbjogJ2xpZ2h0X21vZGUnLCBuYW1lOiAnVGVtYSBjaGlhcm8nLCBuZXh0OiAnZGFyaycsIHRvb2x0aXA6ICdQYXNzYSBhIHRlbWEgc2N1cm8nLCB9LFxyXG4gICAgWydkYXJrJ106IHsgaWNvbjogJ2RhcmtfbW9kZScsIG5hbWU6ICdUZW1hIHNjdXJvJywgbmV4dDogJ3N5c3RlbScsIHRvb2x0aXA6ICdQYXNzYSBhIHRlbWEgcHJlZGVmaW5pdG8gZGkgc2lzdGVtYScsIH0sXHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWNvbiBvZiB0aGUgY3VycmVudCB0aGVtZSAobWF0LWljb24gY29kZSlcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgdGhlbWVJY29uOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudGhlbWVJbmZvW3RoaXMudGhlbWUoKV0uaWNvbik7XHJcbiAgLyoqXHJcbiAgICogQ3VycmVudCB0aGVtZSBuYW1lXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IHRoZW1lTmFtZTogU2lnbmFsPHN0cmluZz4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRoZW1lSW5mb1t0aGlzLnRoZW1lKCldLm5hbWUpO1xyXG4gIC8qKlxyXG4gICAqIFRvb2x0aXAgdGV4dCBvbiB0b2dnbGUgXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IHRvZ2dsZVRvb2x0aXA6IFNpZ25hbDxzdHJpbmc+ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50aGVtZUluZm9bdGhpcy50aGVtZSgpXS50b29sdGlwKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgLy8gcmVhZ2lzY2UgYWwgY2FtYmlvIGRpIHRlbWEgbmVsIHNpc3RlbWFcclxuICAgIHRoaXMucHJlZmVyc0NvbG9yU2NoZW1lTWVkaWFRdWVyeUxpc3Qub25jaGFuZ2UgPSAoXzogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4gdGhpcy5hdXRvKCkgPyB0aGlzLnNldFRoZW1lKCkgOiBudWxsO1xyXG5cclxuICAgIC8vIHJlYWdpc2NlIGFsIG1lc3NhZ2dpbyBicm9hZGNhc3QgKHNpbmNyb25penphIGkgdGVtaSB0cmEgaSBwb3B1cCBkZWxsJ2FwcGxpY2F6aW9uZSlcclxuICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5zdWJzY3JpYmU8dGhlbWVUeXBlPih7XHJcbiAgICAgIG1lc3NhZ2VJZDogdGhpcy5icm9hZGNhc3RNZXNzYWdlLFxyXG4gICAgICBhY3Rpb246IChiYWc6IEJyb2FkY2FzdENoYW5uZWxNZXNzYWdlQmFnPHRoZW1lVHlwZT4pID0+IHtcclxuICAgICAgICBpZiAodGhpcy50aGVtZSgpICE9PSBiYWcuZGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRUaGVtZShiYWcuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBpbml6aWFsaXp6YSBpbCB0ZW1hXHJcbiAgICB0aGlzLnNldFRoZW1lKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicHJlZmVycmVkLXRoZW1lXCIpIGFzIHRoZW1lVHlwZSA/PyBudWxsKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy8gY2hpdWRlIGlsIGNhbmFsZSBkaSBjb211bmljYXppb25lIGJyb2FkY2FzdFxyXG4gICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIG5ldyB0aGVtZVxyXG4gICAqIEBwYXJhbSB0aGVtZSB0aGUgbmV3IHRoZW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRUaGVtZSh0aGVtZTogdGhlbWVUeXBlID0gJ3N5c3RlbScpIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2xpZ2h0Jyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksICdkYXJrJyk7XHJcblxyXG4gICAgdGhpcy50aGVtZS5zZXQodGhlbWUpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJwcmVmZXJyZWQtdGhlbWVcIiwgdGhpcy50aGVtZSgpKTtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5hdXRvKCkgPyAod2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpLm1hdGNoZXMgPyBcImRhcmtcIiA6IFwibGlnaHRcIikgOiB0aGVtZSk7XHJcblxyXG4gICAgLy8gbGFuY2lhIGlsIG1lc3NhZ2dpbyBicm9hZGNhc3RcclxuICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5zZW5kTWVzc2FnZSh0aGlzLmJyb2FkY2FzdE1lc3NhZ2UsIHRoaXMudGhlbWUoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlbWVcclxuICAgKi9cclxuICBwdWJsaWMgdG9nZ2xlVGhlbWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFRoZW1lKHRoaXMudGhlbWVJbmZvW3RoaXMudGhlbWUoKV0ubmV4dCk7XHJcbiAgfVxyXG59Il19
@@ -30,7 +30,7 @@ const ClipperMessages = {
30
30
  COMMAND_SEARCH_RESTORED: '$clipper-command-search-restored',
31
31
  COMMAND_SEARCH_EXECUTED: '$clipper-command-search-executed',
32
32
  COMMAND_HISTORY_OPEN: '$clipper-history-open',
33
- COMMAND_DASHBOARD_LOADED: '$clipper-dashboard-loaded',
33
+ COMMAND_DASHBOARD_UPDATED: '$clipper-dashboard-updated',
34
34
  // Interop
35
35
  INTEROP_RS_NEW_LAW: '$clipper-interop-rs-new-law',
36
36
  INTEROP_RS_NEW_ACTIVITY: '$clipper-interop-rs-new-activity',
@@ -2247,10 +2247,19 @@ class ClipperService {
2247
2247
  this.dashboard.expiringDeadlines = r.value.expiringDeadlines;
2248
2248
  this.dashboard.isTrial = r.value.isTrial;
2249
2249
  this.dashboard.items.set(r.value.items);
2250
- this.broadcastService.sendMessage(ClipperMessages.COMMAND_DASHBOARD_LOADED);
2250
+ this.broadcastService.sendMessage(ClipperMessages.COMMAND_DASHBOARD_UPDATED);
2251
2251
  }
2252
2252
  });
2253
2253
  }
2254
+ /**
2255
+ * Update unread items
2256
+ * @param module : the module
2257
+ * @param increment : the increment (can be negative)
2258
+ */
2259
+ updateUnreadItems(module, increment) {
2260
+ this.dashboard.updateUnreadItems(module, increment);
2261
+ this.broadcastService.sendMessage(ClipperMessages.COMMAND_DASHBOARD_UPDATED);
2262
+ }
2254
2263
  ///
2255
2264
  // LINKS
2256
2265
  ///