@arsedizioni/ars-utils 22.0.49 → 22.0.51
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/fesm2022/arsedizioni-ars-utils-support.common.mjs +167 -32
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +5 -5
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-support.common.d.ts +65 -11
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import {
|
|
3
|
+
import { signal, Service, inject, DestroyRef } from '@angular/core';
|
|
4
4
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { BroadcastService } from '@arsedizioni/ars-utils/core';
|
|
6
6
|
|
|
@@ -44,33 +44,101 @@ var SupportProductModule;
|
|
|
44
44
|
SupportProductModule[SupportProductModule["DgiCLP"] = 1024] = "DgiCLP";
|
|
45
45
|
})(SupportProductModule || (SupportProductModule = {}));
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
* Private state container for the Support module.
|
|
50
|
+
*
|
|
51
|
+
* Intentionally NOT exported from the barrel: it must never be injected by
|
|
52
|
+
* application code. Its state is re-published through {@link SupportService};
|
|
53
|
+
* {@link NotificationsService} injects it to read the config and update the
|
|
54
|
+
* unread-count signal.
|
|
55
|
+
*/
|
|
56
|
+
class CoreService {
|
|
48
57
|
constructor() {
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.destroyRef = inject(DestroyRef);
|
|
52
|
-
this.broadcastInitialized = false;
|
|
53
|
-
this.products = SupportProduct.None;
|
|
54
|
-
this.productModules = SupportProductModule.None;
|
|
58
|
+
this._products = SupportProduct.None;
|
|
59
|
+
this._productModules = SupportProductModule.None;
|
|
55
60
|
/** Number of unread notifications, or `undefined` when there are none. */
|
|
56
61
|
this.unreadNotifications = signal(undefined, /* @ts-ignore */
|
|
57
62
|
...(ngDevMode ? [{ debugName: "unreadNotifications" }] : /* istanbul ignore next */ []));
|
|
58
63
|
}
|
|
59
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* Gets the base URI of the Support back-end service.
|
|
66
|
+
* @returns The configured service URI, or undefined before initialize().
|
|
67
|
+
*/
|
|
60
68
|
get serviceUri() {
|
|
61
69
|
return this._serviceUri;
|
|
62
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Sets the base URI of the Support back-end service.
|
|
73
|
+
* @param uri - The base URL.
|
|
74
|
+
* @returns void
|
|
75
|
+
*/
|
|
76
|
+
setServiceUri(uri) {
|
|
77
|
+
this._serviceUri = uri;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Gets the products bitmask used to scope notifications.
|
|
81
|
+
* @returns The active {@link SupportProduct} bitmask.
|
|
82
|
+
*/
|
|
83
|
+
get products() {
|
|
84
|
+
return this._products;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Sets the products bitmask used to scope notifications.
|
|
88
|
+
* @param products - The products bitmask.
|
|
89
|
+
* @returns void
|
|
90
|
+
*/
|
|
91
|
+
setProducts(products) {
|
|
92
|
+
this._products = products;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Gets the product-modules bitmask used to scope notifications.
|
|
96
|
+
* @returns The active {@link SupportProductModule} bitmask.
|
|
97
|
+
*/
|
|
98
|
+
get productModules() {
|
|
99
|
+
return this._productModules;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Sets the product-modules bitmask used to scope notifications.
|
|
103
|
+
* @param productModules - The product-modules bitmask.
|
|
104
|
+
* @returns void
|
|
105
|
+
*/
|
|
106
|
+
setProductModules(productModules) {
|
|
107
|
+
this._productModules = productModules;
|
|
108
|
+
}
|
|
109
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: CoreService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
110
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.1", ngImport: i0, type: CoreService }); }
|
|
111
|
+
}
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: CoreService, decorators: [{
|
|
113
|
+
type: Service
|
|
114
|
+
}] });
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Notifications service for the Support module: the unread-count tracking,
|
|
118
|
+
* the notification queries and document download, plus the session bootstrap
|
|
119
|
+
* (the `NOTIFICATION_READ` broadcast subscription). State lives in the
|
|
120
|
+
* private {@link CoreService}.
|
|
121
|
+
*/
|
|
122
|
+
class NotificationsService {
|
|
123
|
+
constructor() {
|
|
124
|
+
this.httpClient = inject(HttpClient);
|
|
125
|
+
this.broadcastService = inject(BroadcastService);
|
|
126
|
+
this.destroyRef = inject(DestroyRef);
|
|
127
|
+
this.core = inject(CoreService);
|
|
128
|
+
this.broadcastInitialized = false;
|
|
129
|
+
}
|
|
63
130
|
/**
|
|
64
131
|
* Initialises the service with the back-end URI and the products/modules it should track.
|
|
65
132
|
* Must be called once during application bootstrap before any other method.
|
|
66
|
-
* @param serviceUri
|
|
67
|
-
* @param products
|
|
133
|
+
* @param serviceUri - Base URL of the support service.
|
|
134
|
+
* @param products - Bitmask of `SupportProduct` values to scope notifications (default: `None`).
|
|
68
135
|
* @param productModules - Bitmask of `SupportProductModule` values to scope notifications (default: `None`).
|
|
136
|
+
* @returns void
|
|
69
137
|
*/
|
|
70
138
|
initialize(serviceUri, products = SupportProduct.None, productModules = SupportProductModule.None) {
|
|
71
|
-
this.
|
|
72
|
-
this.products
|
|
73
|
-
this.productModules
|
|
139
|
+
this.core.setServiceUri(serviceUri);
|
|
140
|
+
this.core.setProducts(products);
|
|
141
|
+
this.core.setProductModules(productModules);
|
|
74
142
|
if (!this.broadcastInitialized) {
|
|
75
143
|
this.broadcastInitialized = true;
|
|
76
144
|
this.broadcastService
|
|
@@ -83,19 +151,19 @@ class SupportService {
|
|
|
83
151
|
});
|
|
84
152
|
}
|
|
85
153
|
}
|
|
86
|
-
// ── Notifications ──────────────────────────────────────────────────────────
|
|
87
154
|
/**
|
|
88
155
|
* Fetches the count of unread notifications from the server and updates
|
|
89
156
|
* the `unreadNotifications` signal. Sets `undefined` when the count is zero.
|
|
157
|
+
* @returns void
|
|
90
158
|
*/
|
|
91
159
|
countUnreadNotifications() {
|
|
92
160
|
this.httpClient
|
|
93
|
-
.get(this.
|
|
94
|
-
'/notifications/unread/?products=' + (this.products ?? 0) +
|
|
95
|
-
'&modules=' + (this.productModules ?? 0))
|
|
161
|
+
.get(this.core.serviceUri +
|
|
162
|
+
'/notifications/unread/?products=' + (this.core.products ?? 0) +
|
|
163
|
+
'&modules=' + (this.core.productModules ?? 0))
|
|
96
164
|
.subscribe((r) => {
|
|
97
165
|
if (r.success) {
|
|
98
|
-
this.unreadNotifications.set(r.value > 0 ? r.value : undefined);
|
|
166
|
+
this.core.unreadNotifications.set(r.value > 0 ? r.value : undefined);
|
|
99
167
|
}
|
|
100
168
|
});
|
|
101
169
|
}
|
|
@@ -107,9 +175,9 @@ class SupportService {
|
|
|
107
175
|
* @returns An observable that emits `ApiResult<SupportNotificationsSearchResult>`.
|
|
108
176
|
*/
|
|
109
177
|
queryNotifications(params) {
|
|
110
|
-
params.products = this.products ?? 0;
|
|
111
|
-
params.productModules = this.productModules ?? 0;
|
|
112
|
-
return this.httpClient.post(this.
|
|
178
|
+
params.products = this.core.products ?? 0;
|
|
179
|
+
params.productModules = this.core.productModules ?? 0;
|
|
180
|
+
return this.httpClient.post(this.core.serviceUri + '/notifications', params);
|
|
113
181
|
}
|
|
114
182
|
/**
|
|
115
183
|
* Retrieves a single notification by id.
|
|
@@ -117,7 +185,7 @@ class SupportService {
|
|
|
117
185
|
* @returns An observable that emits `ApiResult<SupportNotificationInfo>`.
|
|
118
186
|
*/
|
|
119
187
|
getNotification(id) {
|
|
120
|
-
return this.httpClient.get(this.
|
|
188
|
+
return this.httpClient.get(this.core.serviceUri + '/notifications/' + id);
|
|
121
189
|
}
|
|
122
190
|
/**
|
|
123
191
|
* Marks one or more notifications as read.
|
|
@@ -125,7 +193,7 @@ class SupportService {
|
|
|
125
193
|
* @returns An observable that emits `ApiResult<boolean>`.
|
|
126
194
|
*/
|
|
127
195
|
markNotifications(params) {
|
|
128
|
-
return this.httpClient.post(this.
|
|
196
|
+
return this.httpClient.post(this.core.serviceUri + '/notifications/mark', params);
|
|
129
197
|
}
|
|
130
198
|
/**
|
|
131
199
|
* Downloads a notification attachment as a binary blob.
|
|
@@ -133,18 +201,85 @@ class SupportService {
|
|
|
133
201
|
* @returns An observable that emits the binary blob response.
|
|
134
202
|
*/
|
|
135
203
|
downloadNotificationDocument(documentId) {
|
|
136
|
-
return this.httpClient.get(this.
|
|
204
|
+
return this.httpClient.get(this.core.serviceUri + '/documents/download/' + documentId, { responseType: 'blob' });
|
|
205
|
+
}
|
|
206
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: NotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
207
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.1", ngImport: i0, type: NotificationsService }); }
|
|
208
|
+
}
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: NotificationsService, decorators: [{
|
|
210
|
+
type: Service
|
|
211
|
+
}] });
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Public entry point for the Support module.
|
|
215
|
+
*
|
|
216
|
+
* The private {@link CoreService} is never exposed; its state is re-published
|
|
217
|
+
* here. All operations are reached through the namespaced sub-service:
|
|
218
|
+
* - `support.notifications` — unread count, queries, mark, document download
|
|
219
|
+
*
|
|
220
|
+
* The facade itself exposes ONLY the re-published core state plus `initialize`
|
|
221
|
+
* — it intentionally does NOT flatten the sub-service methods.
|
|
222
|
+
*/
|
|
223
|
+
class SupportService {
|
|
224
|
+
constructor() {
|
|
225
|
+
/** Private: never exposed to consumers. */
|
|
226
|
+
this.core = inject(CoreService);
|
|
227
|
+
/** Notifications sub-service (unread count, queries, mark, downloads). */
|
|
228
|
+
this.notifications = inject(NotificationsService);
|
|
137
229
|
}
|
|
138
|
-
|
|
139
|
-
|
|
230
|
+
// ── Re-published core state ─────────────────────────────────────────────────
|
|
231
|
+
/**
|
|
232
|
+
* Gets the base URI of the Support back-end service.
|
|
233
|
+
* @returns The configured service URI, or undefined before initialize().
|
|
234
|
+
*/
|
|
235
|
+
get serviceUri() { return this.core.serviceUri; }
|
|
236
|
+
/**
|
|
237
|
+
* Gets the products bitmask used to scope notifications.
|
|
238
|
+
* @returns The active {@link SupportProduct} bitmask.
|
|
239
|
+
*/
|
|
240
|
+
get products() { return this.core.products; }
|
|
241
|
+
/**
|
|
242
|
+
* Gets the product-modules bitmask used to scope notifications.
|
|
243
|
+
* @returns The active {@link SupportProductModule} bitmask.
|
|
244
|
+
*/
|
|
245
|
+
get productModules() { return this.core.productModules; }
|
|
246
|
+
/** Number of unread notifications, or `undefined` when there are none. */
|
|
247
|
+
get unreadNotifications() { return this.core.unreadNotifications; }
|
|
248
|
+
// ── Lifecycle (the only flattened sub-service method) ───────────────────────
|
|
249
|
+
/**
|
|
250
|
+
* Initialises the service with the back-end URI and the products/modules to track.
|
|
251
|
+
* @param serviceUri - Base URL of the support service.
|
|
252
|
+
* @param products - Bitmask of `SupportProduct` values (default: `None`).
|
|
253
|
+
* @param productModules - Bitmask of `SupportProductModule` values (default: `None`).
|
|
254
|
+
* @returns void
|
|
255
|
+
*/
|
|
256
|
+
initialize(serviceUri, products = SupportProduct.None, productModules = SupportProductModule.None) {
|
|
257
|
+
this.notifications.initialize(serviceUri, products, productModules);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Updates the unread notifications count by fetching it from the server and setting the `unreadNotifications` signal. Sets `undefined` when the count is zero.
|
|
261
|
+
* @param products - Bitmask of `SupportProduct` values to scope the count (default: current value).
|
|
262
|
+
* @param productModules - Bitmask of `SupportProductModule` values to scope the count (default: current value).
|
|
263
|
+
* @returns void
|
|
264
|
+
*/
|
|
265
|
+
setProducts(products, productModules) {
|
|
266
|
+
this.core.setProducts(products);
|
|
267
|
+
this.core.setProductModules(productModules);
|
|
268
|
+
}
|
|
269
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: SupportService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
270
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.1", ngImport: i0, type: SupportService }); }
|
|
140
271
|
}
|
|
141
272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: SupportService, decorators: [{
|
|
142
|
-
type:
|
|
143
|
-
args: [{
|
|
144
|
-
providedIn: 'root',
|
|
145
|
-
}]
|
|
273
|
+
type: Service
|
|
146
274
|
}] });
|
|
147
275
|
|
|
276
|
+
// Public barrel for the Support services.
|
|
277
|
+
//
|
|
278
|
+
// CoreService is intentionally NOT exported: it is private/internal and must
|
|
279
|
+
// never be injected directly. Consumers use SupportService (the facade, with
|
|
280
|
+
// the namespaced `notifications` sub-service and the re-published core state)
|
|
281
|
+
// or the NotificationsService directly in size-sensitive code.
|
|
282
|
+
|
|
148
283
|
/*
|
|
149
284
|
* Public API Surface of ars-utils
|
|
150
285
|
*/
|
|
@@ -153,5 +288,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
153
288
|
* Generated bundle index. Do not edit.
|
|
154
289
|
*/
|
|
155
290
|
|
|
156
|
-
export { SupportMessages, SupportProduct, SupportProductModule, SupportService };
|
|
291
|
+
export { NotificationsService, SupportMessages, SupportProduct, SupportProductModule, SupportService };
|
|
157
292
|
//# sourceMappingURL=arsedizioni-ars-utils-support.common.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-support.common.mjs","sources":["../../../projects/ars-utils/support.common/common/messages.ts","../../../projects/ars-utils/support.common/common/definitions.ts","../../../projects/ars-utils/support.common/common/services/support.service.ts","../../../projects/ars-utils/support.common/public_api.ts","../../../projects/ars-utils/support.common/arsedizioni-ars-utils-support.common.ts"],"sourcesContent":["export const SupportMessages = {\r\n /**\r\n * Messages\r\n */\r\n // Error\r\n ERROR: '§support-error',\r\n\r\n // Login\r\n LOGIN_CHANGED: '§support-login-changed',\r\n LOGIN_COMPLETED: '§support-login-completed',\r\n LOGOUT_COMPLETED: '§support-logout-completed',\r\n LOGIN_PENDING: '§support-login-pending',\r\n LOGIN_FAILED: '§support-login-failed', \r\n LOGOUT: '§support-logout',\r\n\r\n // Notifications\r\n NOTIFICATION_READ: '§support-notification-read',\r\n};\r\n","import { LoginResult } from '@arsedizioni/ars-utils/core';\r\nimport { LoginOAuthType } from '@arsedizioni/ars-utils/ui.oauth';\r\n\r\n\r\n\r\nexport interface SupportUserInfo {\r\n id: number;\r\n groups?: number;\r\n groupNames?: string;\r\n displayName?: string;\r\n dashboard?: string;\r\n sessionId?: string;\r\n email?: string;\r\n customerId?: number;\r\n companyName?: string;\r\n role: number;\r\n scopes?: string[];\r\n sla: number;\r\n isCommercial?: boolean;\r\n isAdministrator: boolean;\r\n isGuest: boolean;\r\n isUser: boolean;\r\n isOperator: boolean;\r\n isTemporary: boolean;\r\n}\r\n\r\n\r\nexport interface SupportLoginResult extends LoginResult<SupportUserInfo> {\r\n}\r\n\r\nexport interface SupportLoginInfo {\r\n context: SupportUserInfo;\r\n oauth?: LoginOAuthType;\r\n remember?: boolean;\r\n}\r\n\r\nexport interface SupportNotificationsSearchParams {\r\n any?: string;\r\n products?: number;\r\n productModules?: number;\r\n first?: number;\r\n count?: number;\r\n}\r\n\r\nexport interface SupportNotificationsSearchResult {\r\n interval?: string;\r\n items?: SupportNotificationInfo[];\r\n total?: number;\r\n}\r\n\r\nexport interface Notification {\r\n id: number;\r\n products: number;\r\n productModules?: number;\r\n publishingDate?: Date;\r\n title: string;\r\n text: string;\r\n state: number;\r\n created: Date;\r\n createdBy: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n productNames?: string;\r\n productModuleNames?: string;\r\n isPublished: boolean;\r\n isInternal: boolean;\r\n stateName: string;\r\n documents?: SupportDocumentInfo[];\r\n isRead: boolean;\r\n totalRead: number;\r\n}\r\n\r\nexport interface SupportDocumentInfo {\r\n id?: number;\r\n origin?: number;\r\n ownerId?: number;\r\n name?: string;\r\n description?: string;\r\n size?: number;\r\n binaryId?: number;\r\n url?: string;\r\n customerId?: number;\r\n created?: Date;\r\n createdBy?: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n isBinary?: boolean;\r\n}\r\n\r\nexport interface SupportNotificationInfo {\r\n id: number;\r\n products?: number;\r\n productModules?: number;\r\n publishingDate?: Date;\r\n title: string;\r\n text: string;\r\n state: number;\r\n created: Date;\r\n createdBy: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n productNames?: string;\r\n productModuleNames?: string;\r\n isPublished: boolean;\r\n isInternal: boolean;\r\n stateName: string;\r\n documents?: SupportDocumentInfo[];\r\n isRead: boolean;\r\n totalRead: number;\r\n isMenuOpen?: boolean;\r\n isOver?: boolean;\r\n\r\n}\r\n\r\nexport interface SupportNotificationsMarkParams {\r\n ids: number[];\r\n unmark: boolean;\r\n}\r\n\r\nexport enum SupportProduct {\r\n None = 0,\r\n Clipper = 1,\r\n Evolution = 1 << 1,\r\n DGInfo = 1 << 2\r\n}\r\n\r\nexport enum SupportProductModule {\r\n None = 0,\r\n EvoFormazione = 1,\r\n EvoDPI = 1 << 1,\r\n EvoSorveglianzaSanitaria = 1 << 2,\r\n EvoRegistroEScadenzario = 1 << 3,\r\n EvoAttrezzatureEImpianti = 1 << 4,\r\n EvoMonitoraggio = 1 << 5,\r\n EvoBollettino = 1 << 6,\r\n DgiADR = 1 << 7,\r\n DgiRID = 1 << 8,\r\n DgiIMDG = 1 << 9,\r\n DgiCLP = 1 << 10,\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, Injectable, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ApiResult, BroadcastMessageInfo, BroadcastService } from '@arsedizioni/ars-utils/core';\nimport { SupportMessages } from '../messages';\nimport { SupportNotificationInfo, SupportNotificationsMarkParams, SupportNotificationsSearchParams, SupportNotificationsSearchResult, SupportProduct, SupportProductModule } from '../definitions';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SupportService {\n\n private readonly httpClient = inject(HttpClient);\n private readonly broadcastService = inject(BroadcastService);\n private readonly destroyRef = inject(DestroyRef);\n private broadcastInitialized = false;\n\n private _serviceUri: string | undefined;\n\n /** Base URI of the Support back-end service. */\n get serviceUri(): string | undefined {\n return this._serviceUri;\n }\n\n public products: SupportProduct = SupportProduct.None;\n public productModules: SupportProductModule = SupportProductModule.None;\n\n /** Number of unread notifications, or `undefined` when there are none. */\n public readonly unreadNotifications = signal<number | undefined>(undefined);\n\n /**\n * Initialises the service with the back-end URI and the products/modules it should track.\n * Must be called once during application bootstrap before any other method.\n * @param serviceUri - Base URL of the support service.\n * @param products - Bitmask of `SupportProduct` values to scope notifications (default: `None`).\n * @param productModules - Bitmask of `SupportProductModule` values to scope notifications (default: `None`).\n */\n initialize(\n serviceUri: string,\n products: SupportProduct = SupportProduct.None,\n productModules: SupportProductModule = SupportProductModule.None\n ): void {\n this._serviceUri = serviceUri;\n this.products = products;\n this.productModules = productModules;\n\n if (!this.broadcastInitialized) {\n this.broadcastInitialized = true;\n this.broadcastService\n .getMessage()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((message: BroadcastMessageInfo) => {\n if (message.id === SupportMessages.NOTIFICATION_READ) {\n this.countUnreadNotifications();\n }\n });\n }\n }\n\n // ── Notifications ──────────────────────────────────────────────────────────\n\n /**\n * Fetches the count of unread notifications from the server and updates\n * the `unreadNotifications` signal. Sets `undefined` when the count is zero.\n */\n countUnreadNotifications(): void {\n this.httpClient\n .get<ApiResult<number>>(\n this._serviceUri +\n '/notifications/unread/?products=' + (this.products ?? 0) +\n '&modules=' + (this.productModules ?? 0)\n )\n .subscribe((r: ApiResult<number>) => {\n if (r.success) {\n this.unreadNotifications.set(r.value > 0 ? r.value : undefined);\n }\n });\n }\n\n /**\n * Queries the notification list using the supplied filter parameters.\n * The `products` and `productModules` fields are automatically populated\n * from the service configuration before the request is sent.\n * @param params - Search parameters for the notification query.\n * @returns An observable that emits `ApiResult<SupportNotificationsSearchResult>`.\n */\n queryNotifications(params: SupportNotificationsSearchParams) {\n params.products = this.products ?? 0;\n params.productModules = this.productModules ?? 0;\n return this.httpClient.post<ApiResult<SupportNotificationsSearchResult>>(\n this._serviceUri + '/notifications',\n params\n );\n }\n\n /**\n * Retrieves a single notification by id.\n * @param id - The notification id.\n * @returns An observable that emits `ApiResult<SupportNotificationInfo>`.\n */\n getNotification(id: number) {\n return this.httpClient.get<ApiResult<SupportNotificationInfo>>(\n this._serviceUri + '/notifications/' + id\n );\n }\n\n /**\n * Marks one or more notifications as read.\n * @param params - Parameters identifying the notifications to mark.\n * @returns An observable that emits `ApiResult<boolean>`.\n */\n markNotifications(params: SupportNotificationsMarkParams) {\n return this.httpClient.post<ApiResult<boolean>>(\n this._serviceUri + '/notifications/mark',\n params\n );\n }\n\n /**\n * Downloads a notification attachment as a binary blob.\n * @param documentId - The id of the document to download.\n * @returns An observable that emits the binary blob response.\n */\n downloadNotificationDocument(documentId: number) {\n return this.httpClient.get(\n this._serviceUri + '/documents/download/' + documentId,\n { responseType: 'blob' }\n );\n }\n}\n\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './common/messages';\r\nexport * from './common/definitions';\r\nexport * from './common/services/support.service';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-support.common.mjs","sources":["../../../projects/ars-utils/support.common/common/messages.ts","../../../projects/ars-utils/support.common/common/definitions.ts","../../../projects/ars-utils/support.common/common/services/core.service.ts","../../../projects/ars-utils/support.common/common/services/notifications.service.ts","../../../projects/ars-utils/support.common/common/services/support.service.ts","../../../projects/ars-utils/support.common/common/services/index.ts","../../../projects/ars-utils/support.common/public_api.ts","../../../projects/ars-utils/support.common/arsedizioni-ars-utils-support.common.ts"],"sourcesContent":["export const SupportMessages = {\r\n /**\r\n * Messages\r\n */\r\n // Error\r\n ERROR: '§support-error',\r\n\r\n // Login\r\n LOGIN_CHANGED: '§support-login-changed',\r\n LOGIN_COMPLETED: '§support-login-completed',\r\n LOGOUT_COMPLETED: '§support-logout-completed',\r\n LOGIN_PENDING: '§support-login-pending',\r\n LOGIN_FAILED: '§support-login-failed', \r\n LOGOUT: '§support-logout',\r\n\r\n // Notifications\r\n NOTIFICATION_READ: '§support-notification-read',\r\n};\r\n","import { LoginResult } from '@arsedizioni/ars-utils/core';\r\nimport { LoginOAuthType } from '@arsedizioni/ars-utils/ui.oauth';\r\n\r\n\r\n\r\nexport interface SupportUserInfo {\r\n id: number;\r\n groups?: number;\r\n groupNames?: string;\r\n displayName?: string;\r\n dashboard?: string;\r\n sessionId?: string;\r\n email?: string;\r\n customerId?: number;\r\n companyName?: string;\r\n role: number;\r\n scopes?: string[];\r\n sla: number;\r\n isCommercial?: boolean;\r\n isAdministrator: boolean;\r\n isGuest: boolean;\r\n isUser: boolean;\r\n isOperator: boolean;\r\n isTemporary: boolean;\r\n}\r\n\r\n\r\nexport interface SupportLoginResult extends LoginResult<SupportUserInfo> {\r\n}\r\n\r\nexport interface SupportLoginInfo {\r\n context: SupportUserInfo;\r\n oauth?: LoginOAuthType;\r\n remember?: boolean;\r\n}\r\n\r\nexport interface SupportNotificationsSearchParams {\r\n any?: string;\r\n products?: number;\r\n productModules?: number;\r\n first?: number;\r\n count?: number;\r\n}\r\n\r\nexport interface SupportNotificationsSearchResult {\r\n interval?: string;\r\n items?: SupportNotificationInfo[];\r\n total?: number;\r\n}\r\n\r\nexport interface Notification {\r\n id: number;\r\n products: number;\r\n productModules?: number;\r\n publishingDate?: Date;\r\n title: string;\r\n text: string;\r\n state: number;\r\n created: Date;\r\n createdBy: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n productNames?: string;\r\n productModuleNames?: string;\r\n isPublished: boolean;\r\n isInternal: boolean;\r\n stateName: string;\r\n documents?: SupportDocumentInfo[];\r\n isRead: boolean;\r\n totalRead: number;\r\n}\r\n\r\nexport interface SupportDocumentInfo {\r\n id?: number;\r\n origin?: number;\r\n ownerId?: number;\r\n name?: string;\r\n description?: string;\r\n size?: number;\r\n binaryId?: number;\r\n url?: string;\r\n customerId?: number;\r\n created?: Date;\r\n createdBy?: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n isBinary?: boolean;\r\n}\r\n\r\nexport interface SupportNotificationInfo {\r\n id: number;\r\n products?: number;\r\n productModules?: number;\r\n publishingDate?: Date;\r\n title: string;\r\n text: string;\r\n state: number;\r\n created: Date;\r\n createdBy: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n productNames?: string;\r\n productModuleNames?: string;\r\n isPublished: boolean;\r\n isInternal: boolean;\r\n stateName: string;\r\n documents?: SupportDocumentInfo[];\r\n isRead: boolean;\r\n totalRead: number;\r\n isMenuOpen?: boolean;\r\n isOver?: boolean;\r\n\r\n}\r\n\r\nexport interface SupportNotificationsMarkParams {\r\n ids: number[];\r\n unmark: boolean;\r\n}\r\n\r\nexport enum SupportProduct {\r\n None = 0,\r\n Clipper = 1,\r\n Evolution = 1 << 1,\r\n DGInfo = 1 << 2\r\n}\r\n\r\nexport enum SupportProductModule {\r\n None = 0,\r\n EvoFormazione = 1,\r\n EvoDPI = 1 << 1,\r\n EvoSorveglianzaSanitaria = 1 << 2,\r\n EvoRegistroEScadenzario = 1 << 3,\r\n EvoAttrezzatureEImpianti = 1 << 4,\r\n EvoMonitoraggio = 1 << 5,\r\n EvoBollettino = 1 << 6,\r\n DgiADR = 1 << 7,\r\n DgiRID = 1 << 8,\r\n DgiIMDG = 1 << 9,\r\n DgiCLP = 1 << 10,\r\n}\r\n","import { Service, WritableSignal, signal } from '@angular/core';\nimport { SupportProduct, SupportProductModule } from '../definitions';\n\n/**\n * @internal\n * Private state container for the Support module.\n *\n * Intentionally NOT exported from the barrel: it must never be injected by\n * application code. Its state is re-published through {@link SupportService};\n * {@link NotificationsService} injects it to read the config and update the\n * unread-count signal.\n */\n@Service()\nexport class CoreService {\n\n private _serviceUri: string | undefined;\n /**\n * Gets the base URI of the Support back-end service.\n * @returns The configured service URI, or undefined before initialize().\n */\n get serviceUri(): string | undefined {\n return this._serviceUri;\n }\n /**\n * Sets the base URI of the Support back-end service.\n * @param uri - The base URL.\n * @returns void\n */\n setServiceUri(uri: string): void {\n this._serviceUri = uri;\n }\n\n private _products: SupportProduct = SupportProduct.None;\n /**\n * Gets the products bitmask used to scope notifications.\n * @returns The active {@link SupportProduct} bitmask.\n */\n get products(): SupportProduct {\n return this._products;\n }\n /**\n * Sets the products bitmask used to scope notifications.\n * @param products - The products bitmask.\n * @returns void\n */\n setProducts(products: SupportProduct): void {\n this._products = products;\n }\n\n private _productModules: SupportProductModule = SupportProductModule.None;\n /**\n * Gets the product-modules bitmask used to scope notifications.\n * @returns The active {@link SupportProductModule} bitmask.\n */\n get productModules(): SupportProductModule {\n return this._productModules;\n }\n /**\n * Sets the product-modules bitmask used to scope notifications.\n * @param productModules - The product-modules bitmask.\n * @returns void\n */\n setProductModules(productModules: SupportProductModule): void {\n this._productModules = productModules;\n }\n\n /** Number of unread notifications, or `undefined` when there are none. */\n public readonly unreadNotifications: WritableSignal<number | undefined> = signal<number | undefined>(undefined);\n}\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, Service, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ApiResult, BroadcastMessageInfo, BroadcastService } from '@arsedizioni/ars-utils/core';\nimport { SupportMessages } from '../messages';\nimport {\n SupportNotificationInfo, SupportNotificationsMarkParams, SupportNotificationsSearchParams,\n SupportNotificationsSearchResult, SupportProduct, SupportProductModule\n} from '../definitions';\nimport { CoreService } from './core.service';\n\n/**\n * Notifications service for the Support module: the unread-count tracking,\n * the notification queries and document download, plus the session bootstrap\n * (the `NOTIFICATION_READ` broadcast subscription). State lives in the\n * private {@link CoreService}.\n */\n@Service()\nexport class NotificationsService {\n\n private readonly httpClient = inject(HttpClient);\n private readonly broadcastService = inject(BroadcastService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly core = inject(CoreService);\n\n private broadcastInitialized = false;\n\n /**\n * Initialises the service with the back-end URI and the products/modules it should track.\n * Must be called once during application bootstrap before any other method.\n * @param serviceUri - Base URL of the support service.\n * @param products - Bitmask of `SupportProduct` values to scope notifications (default: `None`).\n * @param productModules - Bitmask of `SupportProductModule` values to scope notifications (default: `None`).\n * @returns void\n */\n initialize(\n serviceUri: string,\n products: SupportProduct = SupportProduct.None,\n productModules: SupportProductModule = SupportProductModule.None\n ): void {\n this.core.setServiceUri(serviceUri);\n this.core.setProducts(products);\n this.core.setProductModules(productModules);\n\n if (!this.broadcastInitialized) {\n this.broadcastInitialized = true;\n this.broadcastService\n .getMessage()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((message: BroadcastMessageInfo) => {\n if (message.id === SupportMessages.NOTIFICATION_READ) {\n this.countUnreadNotifications();\n }\n });\n }\n }\n\n /**\n * Fetches the count of unread notifications from the server and updates\n * the `unreadNotifications` signal. Sets `undefined` when the count is zero.\n * @returns void\n */\n countUnreadNotifications(): void {\n this.httpClient\n .get<ApiResult<number>>(\n this.core.serviceUri +\n '/notifications/unread/?products=' + (this.core.products ?? 0) +\n '&modules=' + (this.core.productModules ?? 0)\n )\n .subscribe((r: ApiResult<number>) => {\n if (r.success) {\n this.core.unreadNotifications.set(r.value > 0 ? r.value : undefined);\n }\n });\n }\n\n /**\n * Queries the notification list using the supplied filter parameters.\n * The `products` and `productModules` fields are automatically populated\n * from the service configuration before the request is sent.\n * @param params - Search parameters for the notification query.\n * @returns An observable that emits `ApiResult<SupportNotificationsSearchResult>`.\n */\n queryNotifications(params: SupportNotificationsSearchParams) {\n params.products = this.core.products ?? 0;\n params.productModules = this.core.productModules ?? 0;\n return this.httpClient.post<ApiResult<SupportNotificationsSearchResult>>(\n this.core.serviceUri + '/notifications',\n params\n );\n }\n\n /**\n * Retrieves a single notification by id.\n * @param id - The notification id.\n * @returns An observable that emits `ApiResult<SupportNotificationInfo>`.\n */\n getNotification(id: number) {\n return this.httpClient.get<ApiResult<SupportNotificationInfo>>(\n this.core.serviceUri + '/notifications/' + id\n );\n }\n\n /**\n * Marks one or more notifications as read.\n * @param params - Parameters identifying the notifications to mark.\n * @returns An observable that emits `ApiResult<boolean>`.\n */\n markNotifications(params: SupportNotificationsMarkParams) {\n return this.httpClient.post<ApiResult<boolean>>(\n this.core.serviceUri + '/notifications/mark',\n params\n );\n }\n\n /**\n * Downloads a notification attachment as a binary blob.\n * @param documentId - The id of the document to download.\n * @returns An observable that emits the binary blob response.\n */\n downloadNotificationDocument(documentId: number) {\n return this.httpClient.get(\n this.core.serviceUri + '/documents/download/' + documentId,\n { responseType: 'blob' }\n );\n }\n}\n","import { Service, Signal, inject } from '@angular/core';\nimport { SupportProduct, SupportProductModule } from '../definitions';\nimport { CoreService } from './core.service';\nimport { NotificationsService } from './notifications.service';\n\n/**\n * Public entry point for the Support module.\n *\n * The private {@link CoreService} is never exposed; its state is re-published\n * here. All operations are reached through the namespaced sub-service:\n * - `support.notifications` — unread count, queries, mark, document download\n *\n * The facade itself exposes ONLY the re-published core state plus `initialize`\n * — it intentionally does NOT flatten the sub-service methods.\n */\n@Service()\nexport class SupportService {\n\n /** Private: never exposed to consumers. */\n private readonly core = inject(CoreService);\n\n /** Notifications sub-service (unread count, queries, mark, downloads). */\n readonly notifications = inject(NotificationsService);\n\n // ── Re-published core state ─────────────────────────────────────────────────\n\n /**\n * Gets the base URI of the Support back-end service.\n * @returns The configured service URI, or undefined before initialize().\n */\n get serviceUri(): string | undefined { return this.core.serviceUri; }\n\n /**\n * Gets the products bitmask used to scope notifications.\n * @returns The active {@link SupportProduct} bitmask.\n */\n get products(): SupportProduct { return this.core.products; }\n\n /**\n * Gets the product-modules bitmask used to scope notifications.\n * @returns The active {@link SupportProductModule} bitmask.\n */\n get productModules(): SupportProductModule { return this.core.productModules; }\n\n /** Number of unread notifications, or `undefined` when there are none. */\n get unreadNotifications(): Signal<number | undefined> { return this.core.unreadNotifications; }\n\n // ── Lifecycle (the only flattened sub-service method) ───────────────────────\n\n /**\n * Initialises the service with the back-end URI and the products/modules to track.\n * @param serviceUri - Base URL of the support service.\n * @param products - Bitmask of `SupportProduct` values (default: `None`).\n * @param productModules - Bitmask of `SupportProductModule` values (default: `None`).\n * @returns void\n */\n initialize(\n serviceUri: string,\n products: SupportProduct = SupportProduct.None,\n productModules: SupportProductModule = SupportProductModule.None\n ): void {\n this.notifications.initialize(serviceUri, products, productModules);\n }\n\n /**\n * Updates the unread notifications count by fetching it from the server and setting the `unreadNotifications` signal. Sets `undefined` when the count is zero.\n * @param products - Bitmask of `SupportProduct` values to scope the count (default: current value).\n * @param productModules - Bitmask of `SupportProductModule` values to scope the count (default: current value).\n * @returns void\n */\n setProducts(products: SupportProduct, productModules: SupportProductModule): void {\n this.core.setProducts(products);\n this.core.setProductModules(productModules);\n }\n}\n","// Public barrel for the Support services.\n//\n// CoreService is intentionally NOT exported: it is private/internal and must\n// never be injected directly. Consumers use SupportService (the facade, with\n// the namespaced `notifications` sub-service and the re-published core state)\n// or the NotificationsService directly in size-sensitive code.\nexport * from './notifications.service';\nexport * from './support.service';\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './common/messages';\r\nexport * from './common/definitions';\r\nexport * from './common/services/index';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -50,7 +50,7 @@ class SupportNotificationComponent {
|
|
|
50
50
|
*/
|
|
51
51
|
fetch() {
|
|
52
52
|
this.dialogService.busy('Caricamento in corso...');
|
|
53
|
-
this.supportService.getNotification(this.id)
|
|
53
|
+
this.supportService.notifications.getNotification(this.id)
|
|
54
54
|
.pipe(finalize(() => this.dialogService.clearBusy()))
|
|
55
55
|
.subscribe(r => {
|
|
56
56
|
if (!r.success) {
|
|
@@ -70,7 +70,7 @@ class SupportNotificationComponent {
|
|
|
70
70
|
if (doc.isBinary) {
|
|
71
71
|
if (doc.id === undefined)
|
|
72
72
|
return;
|
|
73
|
-
this.supportService.downloadNotificationDocument(doc.id).subscribe(blob => {
|
|
73
|
+
this.supportService.notifications.downloadNotificationDocument(doc.id).subscribe(blob => {
|
|
74
74
|
saveAs(blob);
|
|
75
75
|
});
|
|
76
76
|
}
|
|
@@ -173,7 +173,7 @@ class SupportNotificationsBrowserComponent {
|
|
|
173
173
|
*/
|
|
174
174
|
fetch() {
|
|
175
175
|
this.dialogService.busy('Caricamento in corso...');
|
|
176
|
-
this.supportService.queryNotifications(this.searchParams)
|
|
176
|
+
this.supportService.notifications.queryNotifications(this.searchParams)
|
|
177
177
|
.pipe(finalize(() => this.dialogService.clearBusy()))
|
|
178
178
|
.subscribe(r => {
|
|
179
179
|
if (!r.success) {
|
|
@@ -208,7 +208,7 @@ class SupportNotificationsBrowserComponent {
|
|
|
208
208
|
if (!ids)
|
|
209
209
|
return;
|
|
210
210
|
this.dialogService.busy('Aggiornamento in corso...');
|
|
211
|
-
this.supportService.markNotifications({ ids, unmark })
|
|
211
|
+
this.supportService.notifications.markNotifications({ ids, unmark })
|
|
212
212
|
.pipe(finalize(() => this.dialogService.clearBusy()))
|
|
213
213
|
.subscribe(r => {
|
|
214
214
|
if (!r.success) {
|
|
@@ -218,7 +218,7 @@ class SupportNotificationsBrowserComponent {
|
|
|
218
218
|
const idSet = new Set(ids);
|
|
219
219
|
this.items.update(list => list.map(n => idSet.has(n.id) ? { ...n, isRead: !unmark } : n));
|
|
220
220
|
this.selection.clear();
|
|
221
|
-
this.supportService.countUnreadNotifications();
|
|
221
|
+
this.supportService.notifications.countUnreadNotifications();
|
|
222
222
|
}
|
|
223
223
|
});
|
|
224
224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-support.ui.mjs","sources":["../../../projects/ars-utils/support.ui/ui/notifications-browser/notification/notification.component.ts","../../../projects/ars-utils/support.ui/ui/notifications-browser/notification/notification.component.html","../../../projects/ars-utils/support.ui/ui/notifications-browser/notifications-browser.component.ts","../../../projects/ars-utils/support.ui/ui/notifications-browser/notifications-browser.component.html","../../../projects/ars-utils/support.ui/public_api.ts","../../../projects/ars-utils/support.ui/arsedizioni-ars-utils-support.ui.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogClose, MatDialogContent, MatDialogActions } from '@angular/material/dialog';\nimport { BroadcastService, ScreenService, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { SupportDocumentInfo, SupportMessages, SupportNotificationInfo, SupportService } from '@arsedizioni/ars-utils/support.common';\nimport { DialogService, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { saveAs } from 'file-saver';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { finalize } from 'rxjs';\n\nexport interface SupportNotificationData {\n id?: number;\n}\n\n\n@Component({\n host: { 'Bind': SystemUtils.generateUUID() },\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatDialogTitle, MatButtonModule, MatTooltipModule, MatDialogClose, MatIconModule, MatDialogContent,\n MatDialogActions, MatMenuModule, SafeHtmlPipe]\n})\nexport class SupportNotificationComponent {\n\n protected readonly screenService = inject(ScreenService);\n private readonly supportService = inject(SupportService);\n private readonly broadcastService = inject(BroadcastService);\n private readonly dialogService = inject(DialogService);\n private readonly dialogData: SupportNotificationData = inject(MAT_DIALOG_DATA);\n\n /** Id of the notification to display, resolved from dialog data. */\n protected readonly id: number = this.dialogData?.id ?? -1;\n\n /** The loaded notification; `undefined` until the fetch completes. */\n protected readonly item = signal<SupportNotificationInfo | undefined>(undefined);\n\n constructor() {\n this.fetch();\n }\n\n /**\n * Fetches the notification from the server and populates the `item` signal.\n */\n private fetch(): void {\n this.dialogService.busy('Caricamento in corso...');\n this.supportService.getNotification(this.id)\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) {\n this.dialogService.error(r.message);\n } else {\n this.item.set(r.value);\n this.broadcastService.sendMessage(SupportMessages.NOTIFICATION_READ, r.value.id);\n }\n });\n }\n\n /**\n * Downloads a binary attachment using FileSaver, or opens a URL document in a new tab.\n * @param doc - The notification document to open or download.\n */\n protected downloadDocument(doc: SupportDocumentInfo): void {\n if (doc.isBinary) {\n if (doc.id === undefined) return;\n this.supportService.downloadNotificationDocument(doc.id).subscribe(blob => {\n saveAs(blob);\n });\n } else if (doc.url) {\n window.open(doc.url, '_blank');\n }\n }\n\n}\n","<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div fxFlex=\"*\">\r\n <div mat-dialog-title>{{item()?.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item()?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</mat-dialog-content>\r\n@if (item()?.documents && item()!.documents!.length > 0) {\r\n<mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\">\r\n {{item()!.documents!.length}}\r\n @if (item()!.documents!.length === 1) {\r\n <span>Documento scaricabile</span>\r\n } @else {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item()!.documents; track doc.id) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n } @else {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</mat-dialog-actions>\r\n}","import {\n ChangeDetectionStrategy,\n Component, DestroyRef,\n afterNextRender,\n inject,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BroadcastService, FormatPipe, ScreenService, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { SupportMessages, SupportNotificationInfo, SupportNotificationsSearchParams, SupportService } from '@arsedizioni/ars-utils/support.common';\nimport { DialogService, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { finalize } from 'rxjs';\nimport { SupportNotificationComponent } from './notification/notification.component';\n\n@Component({\n host: { 'Bind': SystemUtils.generateUUID() },\n templateUrl: './notifications-browser.component.html',\n styleUrls: ['./notifications-browser.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatDialogTitle, MatButtonModule, MatTooltipModule, MatDialogClose,\n MatIconModule, MatFormFieldModule, MatInputModule, FormsModule, MatMenuModule, MatBadgeModule, MatDividerModule, MatDialogContent,\n MatCheckboxModule, MatDialogActions, MatPaginatorModule, FormatPipe]\n})\nexport class SupportNotificationsBrowserComponent {\n\n readonly paginator = viewChild.required<MatPaginator>('paginator');\n protected readonly screenService = inject(ScreenService);\n private readonly supportService = inject(SupportService);\n private readonly broadcastService = inject(BroadcastService);\n private readonly dialogService = inject(DialogService);\n private readonly destroyRef = inject(DestroyRef);\n protected selection = new SelectableModel<SupportNotificationInfo, number>(true, 'id');\n protected searchParams: SupportNotificationsSearchParams = {\n first: 0,\n count: 25\n };\n protected total = signal<number>(-1);\n protected items = signal<SupportNotificationInfo[]>([]);\n\n constructor() {\n // React to message broadcasting\n this.broadcastService.getMessage()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(message => {\n if (message.id === SupportMessages.NOTIFICATION_READ) {\n this.items.update(list =>\n list.map(n => n.id === message.data ? { ...n, isRead: true } : n)\n );\n }\n });\n\n afterNextRender(() => this.find());\n }\n\n /**\n * Scrolls the notifications list back to the top.\n */\n private updateScroll(): void {\n const elem = document.getElementById('notifications-browser-scroller');\n if (elem?.parentElement) {\n elem.parentElement.scrollTop = 0;\n }\n }\n\n /**\n * Resets the `isMenuOpen` flag on all items after a context menu is closed.\n */\n protected updateMenuButtonsVisibility(): void {\n this.items.update(list => list.map(n => ({ ...n, isMenuOpen: false })));\n }\n\n /**\n * Returns the ids of the currently selected items.\n * Shows an error and returns `undefined` when the selection exceeds 50 items.\n * @returns An array of selected notification ids, or `undefined` on validation failure.\n */\n private getSelectedIds(): number[] | undefined {\n if ((this.selection.all?.length ?? 0) > 50) {\n this.dialogService.error('La selezione non può contenere più di 50 elementi.');\n return undefined;\n }\n return this.selection.all?.map(n => n.id) ?? [];\n }\n\n /**\n * Returns the CSS class to apply to the read-state indicator stripe.\n * @param item - The notification to evaluate.\n * @returns `'unread-bg'` when the notification has not been read, otherwise `undefined`.\n */\n protected getItemStateCssClass(item: SupportNotificationInfo): string | undefined {\n return !item.isRead ? 'unread-bg' : undefined;\n }\n\n /**\n * Returns the tooltip text for the read-state indicator stripe.\n * @param item - The notification to evaluate.\n * @returns `'Non letto'` when unread, otherwise an empty string.\n */\n protected getItemStateTooltip(item: SupportNotificationInfo): string {\n return !item.isRead ? 'Non letto' : '';\n }\n\n /**\n * Resets pagination to page 0 and fetches a fresh result set.\n */\n protected find(): void {\n this.searchParams.first = 0;\n const paginator = this.paginator();\n if (paginator) {\n paginator.pageIndex = 0;\n }\n this.fetch();\n }\n\n /**\n * Fetches the current page of notifications from the server.\n */\n private fetch(): void {\n this.dialogService.busy('Caricamento in corso...');\n this.supportService.queryNotifications(this.searchParams)\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) {\n this.dialogService.error(r.message);\n } else {\n this.items.set(r.value?.items ?? []);\n this.total.set(r.value?.total ?? 0);\n this.updateScroll();\n }\n });\n }\n\n /**\n * Handles paginator page changes and loads the corresponding result page.\n * @param e - The `PageEvent` emitted by `MatPaginator`.\n */\n protected fetchMore(e: PageEvent): void {\n const first = e.pageIndex * (this.searchParams.count ?? 25);\n this.searchParams.first = first;\n this.fetch();\n }\n\n\n /**\n * Marks one or more notifications as read or unread.\n * When no specific item is supplied, acts on the current selection.\n * @param item - A single notification to mark, or `undefined` to use the selection.\n * @param unmark - `true` to mark as unread; `false` (default) to mark as read.\n */\n protected mark(item?: SupportNotificationInfo, unmark: boolean = false): void {\n if (!item && !this.selection.all?.length) return;\n const ids: number[] | undefined = item ? [item.id] : this.getSelectedIds();\n if (!ids) return;\n this.dialogService.busy('Aggiornamento in corso...');\n this.supportService.markNotifications({ ids, unmark })\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) {\n this.dialogService.error(r.message);\n } else {\n const idSet = new Set(ids);\n this.items.update(list =>\n list.map(n => idSet.has(n.id) ? { ...n, isRead: !unmark } : n)\n );\n this.selection.clear();\n this.supportService.countUnreadNotifications();\n }\n });\n }\n\n /**\n * Opens the notification detail dialog for the given item.\n * @param item - The notification to display.\n */\n protected show(item: SupportNotificationInfo): void {\n this.dialogService.open(SupportNotificationComponent, {\n ariaLabel: 'visualizza notifica',\n autoFocus: 'dialog',\n restoreFocus: false,\n disableClose: true,\n data: { id: item.id },\n minWidth: '375px',\n maxWidth: '900px',\n width: '99%',\n height: '99%'\n });\n }\n\n}\n","<div class=\"notifications-browser-fixed\">\r\n <div class=\"notifications-browser-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n <div mat-dialog-title>Novità e informazioni</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"padding-left: 24px; padding-right: 24px; padding-bottom: 10px;\">\r\n <div fxLayout=\"row wrap\" fxFill fxLayoutAlign=\"space-between\">\r\n <div fxFlex=\"200px\" fxFlexAlign=\"end\">\r\n <mat-form-field style=\"width:200px\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Cerca</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" [(ngModel)]=\"searchParams.any\" maxlength=\"200\"\r\n (keyup.Enter)=\"find()\" autofocus placeholder=\"Inserisci testo + INVIO...\" />\r\n @if (searchParams.any) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"searchParams.any = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (selection.hasValue()) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <button mat-menu-item (click)=\"selection.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"mark(undefined, true)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come già letto'\" (click)=\"mark(undefined)\">\r\n <mat-icon>flag</mat-icon>Segna come già letto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"notifications-browser-scrollable\">\r\n <div id=\"notifications-browser-scroller\">\r\n @if (total() === 0) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of items(); track item.id; let i = $index) {\r\n <div (mouseenter)=\"item.isOver = true;\" (mouseleave)=\"item.isOver = false\"\r\n [matContextMenuTriggerFor]=\"contextMenu\" [matContextMenuTriggerData]=\"{item: item}\">\r\n <div class=\"news\" fxLayout=\"row\" fxLayoutGap=\"6px\" fxFill [class.news-selected]=\"selection.isSelected(item.id)\"\r\n [class.news-read]=\"item.isRead\">\r\n <div fxFlex=\"6px\" [class]=\"getItemStateCssClass(item)\" [matTooltip]=\"getItemStateTooltip(item)\">\r\n </div>\r\n <div fxFlex=\"48px\" fxFlexAlign=\"center\" fxLayoutAlign=\"center\">\r\n @if (screenService.isTouchable || item.isOver || selection.isSelected(item.id)) {\r\n <mat-checkbox (change)=\"$event ? selection.toggle(item, item.id) : null\"\r\n [checked]=\"selection.isSelected(item.id)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" (click)=\"show(item); $event.stopPropagation()\">\r\n <div class=\"info-1 uppercase\">\r\n {{ (item.publishingDate ?? item.created) | format:'D':'dd/MM/yyyy'}}</div>\r\n <div>{{item.title}}</div>\r\n <div class=\"info-2 uppercase\">\r\n {{item.productNames}}\r\n @if (item.productModuleNames) {\r\n <span> | {{item.productModuleNames}}</span>\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex=\"50px\" fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Menu\" [attr.aria-label]=\"'Menu opzioni'\"\r\n [matMenuTriggerFor]=\"contextMenu\" [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\"\r\n [hidden]=\"!(item.isOver || item.isMenuOpen || selection.isSelected(item.id))\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n @if (item.isRead) {\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"mark(item, true)\">\r\n <mat-icon>flag</mat-icon>Segna come da leggere\r\n </button>\r\n } @else {\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come da già letto'\" (click)=\"mark(item)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come già letto\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions class=\"notifications-browser-fixed\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend unread-bg\"></div>\r\n da leggere\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\">\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [length]=\"total()\" [pageSize]=\"searchParams.count\"\r\n [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\"></mat-paginator>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './ui/notifications-browser/notifications-browser.component';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-support.ui.mjs","sources":["../../../projects/ars-utils/support.ui/ui/notifications-browser/notification/notification.component.ts","../../../projects/ars-utils/support.ui/ui/notifications-browser/notification/notification.component.html","../../../projects/ars-utils/support.ui/ui/notifications-browser/notifications-browser.component.ts","../../../projects/ars-utils/support.ui/ui/notifications-browser/notifications-browser.component.html","../../../projects/ars-utils/support.ui/public_api.ts","../../../projects/ars-utils/support.ui/arsedizioni-ars-utils-support.ui.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogClose, MatDialogContent, MatDialogActions } from '@angular/material/dialog';\nimport { BroadcastService, ScreenService, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { SupportDocumentInfo, SupportMessages, SupportNotificationInfo, SupportService } from '@arsedizioni/ars-utils/support.common';\nimport { DialogService, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { saveAs } from 'file-saver';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { finalize } from 'rxjs';\n\nexport interface SupportNotificationData {\n id?: number;\n}\n\n\n@Component({\n host: { 'Bind': SystemUtils.generateUUID() },\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatDialogTitle, MatButtonModule, MatTooltipModule, MatDialogClose, MatIconModule, MatDialogContent,\n MatDialogActions, MatMenuModule, SafeHtmlPipe]\n})\nexport class SupportNotificationComponent {\n\n protected readonly screenService = inject(ScreenService);\n private readonly supportService = inject(SupportService);\n private readonly broadcastService = inject(BroadcastService);\n private readonly dialogService = inject(DialogService);\n private readonly dialogData: SupportNotificationData = inject(MAT_DIALOG_DATA);\n\n /** Id of the notification to display, resolved from dialog data. */\n protected readonly id: number = this.dialogData?.id ?? -1;\n\n /** The loaded notification; `undefined` until the fetch completes. */\n protected readonly item = signal<SupportNotificationInfo | undefined>(undefined);\n\n constructor() {\n this.fetch();\n }\n\n /**\n * Fetches the notification from the server and populates the `item` signal.\n */\n private fetch(): void {\n this.dialogService.busy('Caricamento in corso...');\n this.supportService.notifications.getNotification(this.id)\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) {\n this.dialogService.error(r.message);\n } else {\n this.item.set(r.value);\n this.broadcastService.sendMessage(SupportMessages.NOTIFICATION_READ, r.value.id);\n }\n });\n }\n\n /**\n * Downloads a binary attachment using FileSaver, or opens a URL document in a new tab.\n * @param doc - The notification document to open or download.\n */\n protected downloadDocument(doc: SupportDocumentInfo): void {\n if (doc.isBinary) {\n if (doc.id === undefined) return;\n this.supportService.notifications.downloadNotificationDocument(doc.id).subscribe(blob => {\n saveAs(blob);\n });\n } else if (doc.url) {\n window.open(doc.url, '_blank');\n }\n }\n\n}\n","<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div fxFlex=\"*\">\r\n <div mat-dialog-title>{{item()?.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item()?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</mat-dialog-content>\r\n@if (item()?.documents && item()!.documents!.length > 0) {\r\n<mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\">\r\n {{item()!.documents!.length}}\r\n @if (item()!.documents!.length === 1) {\r\n <span>Documento scaricabile</span>\r\n } @else {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item()!.documents; track doc.id) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n } @else {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</mat-dialog-actions>\r\n}","import {\n ChangeDetectionStrategy,\n Component, DestroyRef,\n afterNextRender,\n inject,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BroadcastService, FormatPipe, ScreenService, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { SupportMessages, SupportNotificationInfo, SupportNotificationsSearchParams, SupportService } from '@arsedizioni/ars-utils/support.common';\nimport { DialogService, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { finalize } from 'rxjs';\nimport { SupportNotificationComponent } from './notification/notification.component';\n\n@Component({\n host: { 'Bind': SystemUtils.generateUUID() },\n templateUrl: './notifications-browser.component.html',\n styleUrls: ['./notifications-browser.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatDialogTitle, MatButtonModule, MatTooltipModule, MatDialogClose,\n MatIconModule, MatFormFieldModule, MatInputModule, FormsModule, MatMenuModule, MatBadgeModule, MatDividerModule, MatDialogContent,\n MatCheckboxModule, MatDialogActions, MatPaginatorModule, FormatPipe]\n})\nexport class SupportNotificationsBrowserComponent {\n\n readonly paginator = viewChild.required<MatPaginator>('paginator');\n protected readonly screenService = inject(ScreenService);\n private readonly supportService = inject(SupportService);\n private readonly broadcastService = inject(BroadcastService);\n private readonly dialogService = inject(DialogService);\n private readonly destroyRef = inject(DestroyRef);\n protected selection = new SelectableModel<SupportNotificationInfo, number>(true, 'id');\n protected searchParams: SupportNotificationsSearchParams = {\n first: 0,\n count: 25\n };\n protected total = signal<number>(-1);\n protected items = signal<SupportNotificationInfo[]>([]);\n\n constructor() {\n // React to message broadcasting\n this.broadcastService.getMessage()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(message => {\n if (message.id === SupportMessages.NOTIFICATION_READ) {\n this.items.update(list =>\n list.map(n => n.id === message.data ? { ...n, isRead: true } : n)\n );\n }\n });\n\n afterNextRender(() => this.find());\n }\n\n /**\n * Scrolls the notifications list back to the top.\n */\n private updateScroll(): void {\n const elem = document.getElementById('notifications-browser-scroller');\n if (elem?.parentElement) {\n elem.parentElement.scrollTop = 0;\n }\n }\n\n /**\n * Resets the `isMenuOpen` flag on all items after a context menu is closed.\n */\n protected updateMenuButtonsVisibility(): void {\n this.items.update(list => list.map(n => ({ ...n, isMenuOpen: false })));\n }\n\n /**\n * Returns the ids of the currently selected items.\n * Shows an error and returns `undefined` when the selection exceeds 50 items.\n * @returns An array of selected notification ids, or `undefined` on validation failure.\n */\n private getSelectedIds(): number[] | undefined {\n if ((this.selection.all?.length ?? 0) > 50) {\n this.dialogService.error('La selezione non può contenere più di 50 elementi.');\n return undefined;\n }\n return this.selection.all?.map(n => n.id) ?? [];\n }\n\n /**\n * Returns the CSS class to apply to the read-state indicator stripe.\n * @param item - The notification to evaluate.\n * @returns `'unread-bg'` when the notification has not been read, otherwise `undefined`.\n */\n protected getItemStateCssClass(item: SupportNotificationInfo): string | undefined {\n return !item.isRead ? 'unread-bg' : undefined;\n }\n\n /**\n * Returns the tooltip text for the read-state indicator stripe.\n * @param item - The notification to evaluate.\n * @returns `'Non letto'` when unread, otherwise an empty string.\n */\n protected getItemStateTooltip(item: SupportNotificationInfo): string {\n return !item.isRead ? 'Non letto' : '';\n }\n\n /**\n * Resets pagination to page 0 and fetches a fresh result set.\n */\n protected find(): void {\n this.searchParams.first = 0;\n const paginator = this.paginator();\n if (paginator) {\n paginator.pageIndex = 0;\n }\n this.fetch();\n }\n\n /**\n * Fetches the current page of notifications from the server.\n */\n private fetch(): void {\n this.dialogService.busy('Caricamento in corso...');\n this.supportService.notifications.queryNotifications(this.searchParams)\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) {\n this.dialogService.error(r.message);\n } else {\n this.items.set(r.value?.items ?? []);\n this.total.set(r.value?.total ?? 0);\n this.updateScroll();\n }\n });\n }\n\n /**\n * Handles paginator page changes and loads the corresponding result page.\n * @param e - The `PageEvent` emitted by `MatPaginator`.\n */\n protected fetchMore(e: PageEvent): void {\n const first = e.pageIndex * (this.searchParams.count ?? 25);\n this.searchParams.first = first;\n this.fetch();\n }\n\n\n /**\n * Marks one or more notifications as read or unread.\n * When no specific item is supplied, acts on the current selection.\n * @param item - A single notification to mark, or `undefined` to use the selection.\n * @param unmark - `true` to mark as unread; `false` (default) to mark as read.\n */\n protected mark(item?: SupportNotificationInfo, unmark: boolean = false): void {\n if (!item && !this.selection.all?.length) return;\n const ids: number[] | undefined = item ? [item.id] : this.getSelectedIds();\n if (!ids) return;\n this.dialogService.busy('Aggiornamento in corso...');\n this.supportService.notifications.markNotifications({ ids, unmark })\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) {\n this.dialogService.error(r.message);\n } else {\n const idSet = new Set(ids);\n this.items.update(list =>\n list.map(n => idSet.has(n.id) ? { ...n, isRead: !unmark } : n)\n );\n this.selection.clear();\n this.supportService.notifications.countUnreadNotifications();\n }\n });\n }\n\n /**\n * Opens the notification detail dialog for the given item.\n * @param item - The notification to display.\n */\n protected show(item: SupportNotificationInfo): void {\n this.dialogService.open(SupportNotificationComponent, {\n ariaLabel: 'visualizza notifica',\n autoFocus: 'dialog',\n restoreFocus: false,\n disableClose: true,\n data: { id: item.id },\n minWidth: '375px',\n maxWidth: '900px',\n width: '99%',\n height: '99%'\n });\n }\n\n}\n","<div class=\"notifications-browser-fixed\">\r\n <div class=\"notifications-browser-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n <div mat-dialog-title>Novità e informazioni</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"padding-left: 24px; padding-right: 24px; padding-bottom: 10px;\">\r\n <div fxLayout=\"row wrap\" fxFill fxLayoutAlign=\"space-between\">\r\n <div fxFlex=\"200px\" fxFlexAlign=\"end\">\r\n <mat-form-field style=\"width:200px\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Cerca</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" [(ngModel)]=\"searchParams.any\" maxlength=\"200\"\r\n (keyup.Enter)=\"find()\" autofocus placeholder=\"Inserisci testo + INVIO...\" />\r\n @if (searchParams.any) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"searchParams.any = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (selection.hasValue()) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <button mat-menu-item (click)=\"selection.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"mark(undefined, true)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come già letto'\" (click)=\"mark(undefined)\">\r\n <mat-icon>flag</mat-icon>Segna come già letto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"notifications-browser-scrollable\">\r\n <div id=\"notifications-browser-scroller\">\r\n @if (total() === 0) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of items(); track item.id; let i = $index) {\r\n <div (mouseenter)=\"item.isOver = true;\" (mouseleave)=\"item.isOver = false\"\r\n [matContextMenuTriggerFor]=\"contextMenu\" [matContextMenuTriggerData]=\"{item: item}\">\r\n <div class=\"news\" fxLayout=\"row\" fxLayoutGap=\"6px\" fxFill [class.news-selected]=\"selection.isSelected(item.id)\"\r\n [class.news-read]=\"item.isRead\">\r\n <div fxFlex=\"6px\" [class]=\"getItemStateCssClass(item)\" [matTooltip]=\"getItemStateTooltip(item)\">\r\n </div>\r\n <div fxFlex=\"48px\" fxFlexAlign=\"center\" fxLayoutAlign=\"center\">\r\n @if (screenService.isTouchable || item.isOver || selection.isSelected(item.id)) {\r\n <mat-checkbox (change)=\"$event ? selection.toggle(item, item.id) : null\"\r\n [checked]=\"selection.isSelected(item.id)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" (click)=\"show(item); $event.stopPropagation()\">\r\n <div class=\"info-1 uppercase\">\r\n {{ (item.publishingDate ?? item.created) | format:'D':'dd/MM/yyyy'}}</div>\r\n <div>{{item.title}}</div>\r\n <div class=\"info-2 uppercase\">\r\n {{item.productNames}}\r\n @if (item.productModuleNames) {\r\n <span> | {{item.productModuleNames}}</span>\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex=\"50px\" fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Menu\" [attr.aria-label]=\"'Menu opzioni'\"\r\n [matMenuTriggerFor]=\"contextMenu\" [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\"\r\n [hidden]=\"!(item.isOver || item.isMenuOpen || selection.isSelected(item.id))\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n @if (item.isRead) {\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"mark(item, true)\">\r\n <mat-icon>flag</mat-icon>Segna come da leggere\r\n </button>\r\n } @else {\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come da già letto'\" (click)=\"mark(item)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come già letto\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions class=\"notifications-browser-fixed\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend unread-bg\"></div>\r\n da leggere\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\">\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [length]=\"total()\" [pageSize]=\"searchParams.count\"\r\n [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\"></mat-paginator>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './ui/notifications-browser/notifications-browser.component';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i5"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,6 +2,7 @@ import { LoginResult, ApiResult } from '@arsedizioni/ars-utils/core';
|
|
|
2
2
|
import { LoginOAuthType } from '@arsedizioni/ars-utils/ui.oauth';
|
|
3
3
|
import * as rxjs from 'rxjs';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
+
import { Signal } from '@angular/core';
|
|
5
6
|
|
|
6
7
|
declare const SupportMessages: {
|
|
7
8
|
/**
|
|
@@ -141,29 +142,31 @@ declare enum SupportProductModule {
|
|
|
141
142
|
DgiCLP = 1024
|
|
142
143
|
}
|
|
143
144
|
|
|
144
|
-
|
|
145
|
+
/**
|
|
146
|
+
* Notifications service for the Support module: the unread-count tracking,
|
|
147
|
+
* the notification queries and document download, plus the session bootstrap
|
|
148
|
+
* (the `NOTIFICATION_READ` broadcast subscription). State lives in the
|
|
149
|
+
* private {@link CoreService}.
|
|
150
|
+
*/
|
|
151
|
+
declare class NotificationsService {
|
|
145
152
|
private readonly httpClient;
|
|
146
153
|
private readonly broadcastService;
|
|
147
154
|
private readonly destroyRef;
|
|
155
|
+
private readonly core;
|
|
148
156
|
private broadcastInitialized;
|
|
149
|
-
private _serviceUri;
|
|
150
|
-
/** Base URI of the Support back-end service. */
|
|
151
|
-
get serviceUri(): string | undefined;
|
|
152
|
-
products: SupportProduct;
|
|
153
|
-
productModules: SupportProductModule;
|
|
154
|
-
/** Number of unread notifications, or `undefined` when there are none. */
|
|
155
|
-
readonly unreadNotifications: i0.WritableSignal<number>;
|
|
156
157
|
/**
|
|
157
158
|
* Initialises the service with the back-end URI and the products/modules it should track.
|
|
158
159
|
* Must be called once during application bootstrap before any other method.
|
|
159
|
-
* @param serviceUri
|
|
160
|
-
* @param products
|
|
160
|
+
* @param serviceUri - Base URL of the support service.
|
|
161
|
+
* @param products - Bitmask of `SupportProduct` values to scope notifications (default: `None`).
|
|
161
162
|
* @param productModules - Bitmask of `SupportProductModule` values to scope notifications (default: `None`).
|
|
163
|
+
* @returns void
|
|
162
164
|
*/
|
|
163
165
|
initialize(serviceUri: string, products?: SupportProduct, productModules?: SupportProductModule): void;
|
|
164
166
|
/**
|
|
165
167
|
* Fetches the count of unread notifications from the server and updates
|
|
166
168
|
* the `unreadNotifications` signal. Sets `undefined` when the count is zero.
|
|
169
|
+
* @returns void
|
|
167
170
|
*/
|
|
168
171
|
countUnreadNotifications(): void;
|
|
169
172
|
/**
|
|
@@ -192,9 +195,60 @@ declare class SupportService {
|
|
|
192
195
|
* @returns An observable that emits the binary blob response.
|
|
193
196
|
*/
|
|
194
197
|
downloadNotificationDocument(documentId: number): rxjs.Observable<Blob>;
|
|
198
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NotificationsService, never>;
|
|
199
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<NotificationsService>;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Public entry point for the Support module.
|
|
204
|
+
*
|
|
205
|
+
* The private {@link CoreService} is never exposed; its state is re-published
|
|
206
|
+
* here. All operations are reached through the namespaced sub-service:
|
|
207
|
+
* - `support.notifications` — unread count, queries, mark, document download
|
|
208
|
+
*
|
|
209
|
+
* The facade itself exposes ONLY the re-published core state plus `initialize`
|
|
210
|
+
* — it intentionally does NOT flatten the sub-service methods.
|
|
211
|
+
*/
|
|
212
|
+
declare class SupportService {
|
|
213
|
+
/** Private: never exposed to consumers. */
|
|
214
|
+
private readonly core;
|
|
215
|
+
/** Notifications sub-service (unread count, queries, mark, downloads). */
|
|
216
|
+
readonly notifications: NotificationsService;
|
|
217
|
+
/**
|
|
218
|
+
* Gets the base URI of the Support back-end service.
|
|
219
|
+
* @returns The configured service URI, or undefined before initialize().
|
|
220
|
+
*/
|
|
221
|
+
get serviceUri(): string | undefined;
|
|
222
|
+
/**
|
|
223
|
+
* Gets the products bitmask used to scope notifications.
|
|
224
|
+
* @returns The active {@link SupportProduct} bitmask.
|
|
225
|
+
*/
|
|
226
|
+
get products(): SupportProduct;
|
|
227
|
+
/**
|
|
228
|
+
* Gets the product-modules bitmask used to scope notifications.
|
|
229
|
+
* @returns The active {@link SupportProductModule} bitmask.
|
|
230
|
+
*/
|
|
231
|
+
get productModules(): SupportProductModule;
|
|
232
|
+
/** Number of unread notifications, or `undefined` when there are none. */
|
|
233
|
+
get unreadNotifications(): Signal<number | undefined>;
|
|
234
|
+
/**
|
|
235
|
+
* Initialises the service with the back-end URI and the products/modules to track.
|
|
236
|
+
* @param serviceUri - Base URL of the support service.
|
|
237
|
+
* @param products - Bitmask of `SupportProduct` values (default: `None`).
|
|
238
|
+
* @param productModules - Bitmask of `SupportProductModule` values (default: `None`).
|
|
239
|
+
* @returns void
|
|
240
|
+
*/
|
|
241
|
+
initialize(serviceUri: string, products?: SupportProduct, productModules?: SupportProductModule): void;
|
|
242
|
+
/**
|
|
243
|
+
* Updates the unread notifications count by fetching it from the server and setting the `unreadNotifications` signal. Sets `undefined` when the count is zero.
|
|
244
|
+
* @param products - Bitmask of `SupportProduct` values to scope the count (default: current value).
|
|
245
|
+
* @param productModules - Bitmask of `SupportProductModule` values to scope the count (default: current value).
|
|
246
|
+
* @returns void
|
|
247
|
+
*/
|
|
248
|
+
setProducts(products: SupportProduct, productModules: SupportProductModule): void;
|
|
195
249
|
static ɵfac: i0.ɵɵFactoryDeclaration<SupportService, never>;
|
|
196
250
|
static ɵprov: i0.ɵɵInjectableDeclaration<SupportService>;
|
|
197
251
|
}
|
|
198
252
|
|
|
199
|
-
export { SupportMessages, SupportProduct, SupportProductModule, SupportService };
|
|
253
|
+
export { NotificationsService, SupportMessages, SupportProduct, SupportProductModule, SupportService };
|
|
200
254
|
export type { Notification, SupportDocumentInfo, SupportLoginInfo, SupportLoginResult, SupportNotificationInfo, SupportNotificationsMarkParams, SupportNotificationsSearchParams, SupportNotificationsSearchResult, SupportUserInfo };
|