mesauth-angular 1.3.5 → 1.5.5

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/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, NgZone, EnvironmentProviders, OnDestroy, OnInit, EventEmitter, ChangeDetectorRef, AfterViewInit } from '@angular/core';
2
+ import { InjectionToken, NgZone, EnvironmentProviders, OnDestroy, OnInit, EventEmitter, ChangeDetectorRef, AfterViewInit, ElementRef } from '@angular/core';
3
3
  import { HttpClient, HttpInterceptorFn } from '@angular/common/http';
4
4
  import { Observable } from 'rxjs';
5
5
  import { Router } from '@angular/router';
6
- import { SafeHtml } from '@angular/platform-browser';
6
+ import { SafeHtml, SafeResourceUrl } from '@angular/platform-browser';
7
7
 
8
8
  interface MesAuthConfig {
9
9
  apiBaseUrl: string;
@@ -101,31 +101,6 @@ interface UserFrontEndRoutesGrouped {
101
101
  feUrl?: string;
102
102
  routes: FrontEndRoute[];
103
103
  }
104
- interface FrontEndRouteMaster {
105
- id: number;
106
- appId: string;
107
- routePath: string;
108
- routeName: string;
109
- description?: string;
110
- icon?: string;
111
- cssClass?: string;
112
- parentId?: number | null;
113
- sortOrder: number;
114
- isLabel: boolean;
115
- isActive: boolean;
116
- createdAt: string;
117
- updatedAt?: string;
118
- }
119
- interface CreateFrontEndRouteDto {
120
- routePath: string;
121
- routeName: string;
122
- description?: string;
123
- icon?: string;
124
- cssClass?: string;
125
- parentId?: number | null;
126
- sortOrder?: number;
127
- isLabel?: boolean;
128
- }
129
104
  interface PagedList<T> {
130
105
  items: T[];
131
106
  totalCount: number;
@@ -152,6 +127,8 @@ declare class MesAuthService {
152
127
  currentUser$: Observable<IUser | null>;
153
128
  private _notifications;
154
129
  notifications$: Observable<any>;
130
+ private _approvalEvents;
131
+ approvalEvents$: Observable<any>;
155
132
  private apiBase;
156
133
  private config;
157
134
  private http;
@@ -171,53 +148,6 @@ declare class MesAuthService {
171
148
  * Returns routes grouped by application
172
149
  */
173
150
  getFrontEndRoutes(): Observable<UserFrontEndRoutesGrouped[]>;
174
- /**
175
- * Get master routes for a specific application
176
- * @param appId - The application ID
177
- */
178
- getRouteMasters(appId: string): Observable<FrontEndRouteMaster[]>;
179
- /**
180
- * Register/sync frontend routes for an application
181
- * This is typically called on app startup to sync routes from the frontend app
182
- * @param appId - The application ID (passed via X-App-Id header)
183
- * @param routes - Array of route definitions
184
- */
185
- registerFrontEndRoutes(appId: string, routes: CreateFrontEndRouteDto[]): Observable<any>;
186
- /**
187
- * Create a new route master
188
- * @param appId - The application ID
189
- * @param route - Route details
190
- */
191
- createRouteMaster(appId: string, route: CreateFrontEndRouteDto): Observable<FrontEndRouteMaster>;
192
- /**
193
- * Update an existing route master
194
- * @param routeId - The route master ID
195
- * @param route - Updated route details
196
- */
197
- updateRouteMaster(routeId: number, route: Partial<CreateFrontEndRouteDto> & {
198
- isActive?: boolean;
199
- }): Observable<FrontEndRouteMaster>;
200
- /**
201
- * Delete a route master
202
- * @param routeId - The route master ID
203
- */
204
- deleteRouteMaster(routeId: number): Observable<any>;
205
- /**
206
- * Assign a route to a role
207
- * @param routeMasterId - The route master ID
208
- * @param roleId - The role ID (GUID)
209
- */
210
- assignRouteToRole(routeMasterId: number, roleId: string): Observable<any>;
211
- /**
212
- * Remove a route assignment from a role
213
- * @param mappingId - The mapping ID
214
- */
215
- removeRouteFromRole(mappingId: number): Observable<any>;
216
- /**
217
- * Get route-to-role mappings for a specific role
218
- * @param roleId - The role ID (GUID)
219
- */
220
- getRouteMappingsByRole(roleId: string): Observable<any[]>;
221
151
  private startConnection;
222
152
  stop(): void;
223
153
  logout(): Observable<any>;
@@ -268,19 +198,24 @@ declare class UserProfileComponent implements OnInit, OnDestroy {
268
198
  private router;
269
199
  private themeService;
270
200
  private cdr;
201
+ private http;
271
202
  notificationClick: EventEmitter<void>;
203
+ approvalClick: EventEmitter<void>;
272
204
  get themeClass(): string;
273
205
  currentUser: i0.WritableSignal<IUser>;
274
206
  currentTheme: Theme;
275
207
  unreadCount: number;
208
+ pendingApprovalCount: number;
276
209
  dropdownOpen: boolean;
277
210
  private hasUser;
278
211
  private destroy$;
279
212
  avatarRefresh: i0.WritableSignal<number>;
280
- constructor(authService: MesAuthService, router: Router, themeService: ThemeService, cdr: ChangeDetectorRef);
213
+ constructor(authService: MesAuthService, router: Router, themeService: ThemeService, cdr: ChangeDetectorRef, http: HttpClient);
281
214
  ngOnInit(): void;
282
215
  ngOnDestroy(): void;
283
216
  loadUnreadCount(): void;
217
+ loadPendingApprovalCount(): void;
218
+ onApprovalClick(): void;
284
219
  getAvatarUrl(user: IUser): string;
285
220
  getLastNameInitial(user: IUser): string;
286
221
  toggleDropdown(): void;
@@ -290,13 +225,226 @@ declare class UserProfileComponent implements OnInit, OnDestroy {
290
225
  onLogout(): void;
291
226
  onNotificationClick(): void;
292
227
  static ɵfac: i0.ɵɵFactoryDeclaration<UserProfileComponent, never>;
293
- static ɵcmp: i0.ɵɵComponentDeclaration<UserProfileComponent, "ma-user-profile", never, {}, { "notificationClick": "notificationClick"; }, never, never, true, never>;
228
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserProfileComponent, "ma-user-profile", never, {}, { "notificationClick": "notificationClick"; "approvalClick": "approvalClick"; }, never, never, true, never>;
229
+ }
230
+
231
+ declare enum ApprovalStepMode {
232
+ Sequential = 0,
233
+ Parallel = 1
234
+ }
235
+ declare enum ApprovalDocumentStatus {
236
+ Draft = 0,
237
+ Pending = 1,
238
+ Approved = 2,
239
+ Rejected = 3,
240
+ Cancelled = 4,
241
+ Expired = 5
242
+ }
243
+ declare enum ApprovalStepStatus {
244
+ Waiting = 0,
245
+ Active = 1,
246
+ Approved = 2,
247
+ Rejected = 3,
248
+ Delegated = 4,
249
+ Expired = 5,
250
+ Skipped = 6
251
+ }
252
+ declare enum ApprovalActionType {
253
+ Created = 0,
254
+ Submitted = 1,
255
+ Approved = 2,
256
+ Rejected = 3,
257
+ Delegated = 4,
258
+ Cancelled = 5,
259
+ Commented = 6,
260
+ Expired = 7,
261
+ StepAdvanced = 8
262
+ }
263
+ interface ApprovalDocumentSummaryDto {
264
+ id: string;
265
+ title: string;
266
+ description?: string;
267
+ thumbnailPath?: string;
268
+ sourceAppId: string;
269
+ referenceId: string;
270
+ requestedByUserName: string;
271
+ status: ApprovalDocumentStatus;
272
+ currentStepOrder: number;
273
+ totalSteps: number;
274
+ currentStepName?: string;
275
+ createdAt: string;
276
+ completedAt?: string;
277
+ }
278
+ interface ApprovalStepDto {
279
+ id: number;
280
+ stepOrder: number;
281
+ stepName: string;
282
+ mode: ApprovalStepMode;
283
+ assignedUserId: string;
284
+ assignedUserName: string;
285
+ delegatedToUserId?: string;
286
+ delegatedToUserName?: string;
287
+ status: ApprovalStepStatus;
288
+ comment?: string;
289
+ decidedAt?: string;
290
+ deadlineAt?: string;
291
+ }
292
+ interface ApprovalReferenceDto {
293
+ userId: string;
294
+ userName: string;
295
+ addedAt: string;
296
+ }
297
+ interface ApprovalDocumentDto {
298
+ id: string;
299
+ title: string;
300
+ description?: string;
301
+ contentPath: string;
302
+ thumbnailPath?: string;
303
+ sourceAppId: string;
304
+ referenceId: string;
305
+ templateId?: number;
306
+ requestedByUserId: string;
307
+ requestedByUserName: string;
308
+ status: ApprovalDocumentStatus;
309
+ currentStepOrder: number;
310
+ callbackUrl?: string;
311
+ createdAt: string;
312
+ updatedAt: string;
313
+ completedAt?: string;
314
+ deadlineAt?: string;
315
+ steps: ApprovalStepDto[];
316
+ references: ApprovalReferenceDto[];
317
+ }
318
+ interface ApprovalHistoryDto {
319
+ id: number;
320
+ documentId: string;
321
+ stepId?: number;
322
+ action: ApprovalActionType;
323
+ actorUserId: string;
324
+ actorUserName: string;
325
+ comment?: string;
326
+ details?: string;
327
+ timestamp: string;
328
+ }
329
+ interface ApprovalTemplateSummaryDto {
330
+ id: number;
331
+ name: string;
332
+ description?: string;
333
+ sourceAppId: string;
334
+ stepCount: number;
335
+ referenceCount: number;
336
+ isActive: boolean;
337
+ createdAt: string;
338
+ }
339
+ interface ApprovalTemplateStepDto {
340
+ id: number;
341
+ stepOrder: number;
342
+ stepName: string;
343
+ mode: ApprovalStepMode;
344
+ deadlineHours?: number;
345
+ assigneeUserIds: string[];
346
+ }
347
+ interface ApprovalTemplateDto {
348
+ id: number;
349
+ name: string;
350
+ description?: string;
351
+ sourceAppId: string;
352
+ createdByUserId: string;
353
+ isActive: boolean;
354
+ createdAt: string;
355
+ updatedAt: string;
356
+ steps: ApprovalTemplateStepDto[];
357
+ referenceUserIds: string[];
358
+ }
359
+ interface ApprovalDashboardDto {
360
+ pendingCount: number;
361
+ approvedTodayCount: number;
362
+ rejectedTodayCount: number;
363
+ recentActivity: ApprovalDocumentSummaryDto[];
364
+ }
365
+ interface CreateApprovalResponseDto {
366
+ documentId: string;
367
+ message: string;
368
+ }
369
+ interface ApprovalStepRequest {
370
+ stepOrder: number;
371
+ stepName: string;
372
+ mode?: ApprovalStepMode;
373
+ approverUserIds: string[];
374
+ deadlineHours?: number;
375
+ }
376
+ interface CreateApprovalRequest {
377
+ title: string;
378
+ description?: string;
379
+ contentHtml: string;
380
+ thumbnailBase64?: string;
381
+ referenceId: string;
382
+ templateId?: number;
383
+ requestedByUserId?: string;
384
+ callbackUrl?: string;
385
+ deadlineHours?: number;
386
+ steps?: ApprovalStepRequest[];
387
+ referenceUserIds?: string[];
388
+ }
389
+ interface ApproveRejectRequest {
390
+ comment?: string;
391
+ }
392
+ interface DelegateRequest {
393
+ toUserId: string;
394
+ reason?: string;
395
+ }
396
+ interface CreateApprovalTemplateRequest {
397
+ name: string;
398
+ description?: string;
399
+ sourceAppId: string;
400
+ steps: ApprovalStepRequest[];
401
+ referenceUserIds?: string[];
402
+ }
403
+ interface UpdateApprovalTemplateRequest {
404
+ name: string;
405
+ description?: string;
406
+ steps: ApprovalStepRequest[];
407
+ referenceUserIds?: string[];
408
+ }
409
+ interface ApprovalSubmitResult {
410
+ documentId: string;
411
+ message: string;
412
+ }
413
+
414
+ type PanelTab = 'processing' | 'approved' | 'rejected';
415
+ declare class MaApprovalPanelComponent implements OnInit, OnDestroy {
416
+ approvalActioned: EventEmitter<void>;
417
+ isOpen: boolean;
418
+ loading: boolean;
419
+ activeTab: PanelTab;
420
+ processingItems: ApprovalDocumentSummaryDto[];
421
+ approvedItems: ApprovalDocumentSummaryDto[];
422
+ rejectedItems: ApprovalDocumentSummaryDto[];
423
+ private destroy$;
424
+ private mesAuth;
425
+ private http;
426
+ private router;
427
+ private approvalSvc;
428
+ ngOnInit(): void;
429
+ ngOnDestroy(): void;
430
+ open(): void;
431
+ close(): void;
432
+ toggle(): void;
433
+ switchTab(tab: PanelTab): void;
434
+ private loadAllTabs;
435
+ private loadCurrentTab;
436
+ navigateToDetail(id: string): void;
437
+ showMore(status: 'approved' | 'rejected'): void;
438
+ static ɵfac: i0.ɵɵFactoryDeclaration<MaApprovalPanelComponent, never>;
439
+ static ɵcmp: i0.ɵɵComponentDeclaration<MaApprovalPanelComponent, "ma-approval-panel", never, {}, { "approvalActioned": "approvalActioned"; }, never, never, true, never>;
294
440
  }
295
441
 
296
442
  declare class MaUserComponent implements AfterViewInit {
297
443
  userProfile?: UserProfileComponent;
444
+ approvalPanel: MaApprovalPanelComponent;
298
445
  ngAfterViewInit(): void;
299
446
  onNotificationRead(): void;
447
+ onApprovalActioned(): void;
300
448
  static ɵfac: i0.ɵɵFactoryDeclaration<MaUserComponent, never>;
301
449
  static ɵcmp: i0.ɵɵComponentDeclaration<MaUserComponent, "ma-user", never, {}, {}, never, never, true, never>;
302
450
  }
@@ -356,6 +504,7 @@ declare class NotificationPanelComponent implements OnInit, OnDestroy {
356
504
  get currentNotifications(): NotificationDto[];
357
505
  selectedNotification: NotificationDto | null;
358
506
  selectedNotificationHtml: SafeHtml | null;
507
+ selectedNotificationUrl: SafeResourceUrl | null;
359
508
  selectedNotificationDate: string;
360
509
  getNotificationMessage(notification: NotificationDto): string;
361
510
  typeOf(notification: {
@@ -402,5 +551,84 @@ declare class ToastContainerComponent implements OnInit, OnDestroy {
402
551
  static ɵcmp: i0.ɵɵComponentDeclaration<ToastContainerComponent, "ma-toast-container", never, {}, {}, never, never, true, never>;
403
552
  }
404
553
 
405
- export { MES_AUTH_CONFIG, MaUserComponent, MesAuthModule, MesAuthService, NotificationBadgeComponent, NotificationPanelComponent, NotificationType, ThemeService, ToastContainerComponent, ToastService, UserProfileComponent, mesAuthInterceptor, provideMesAuth };
406
- export type { CreateFrontEndRouteDto, FrontEndRoute, FrontEndRouteMaster, IUser, MesAuthConfig, NotificationDto, PagedList, RealTimeNotificationDto, Theme, Toast, UserFrontEndRoutesGrouped };
554
+ declare class MaApprovalService {
555
+ private apiBase;
556
+ private http;
557
+ private config;
558
+ constructor();
559
+ init(config: MesAuthConfig, httpClient: HttpClient): void;
560
+ private get opts();
561
+ getDashboard(): Observable<ApprovalDashboardDto>;
562
+ getPendingApprovals(page?: number, pageSize?: number): Observable<PagedList<ApprovalDocumentSummaryDto>>;
563
+ getMyRequests(page?: number, pageSize?: number, status?: ApprovalDocumentStatus): Observable<PagedList<ApprovalDocumentSummaryDto>>;
564
+ getDocument(id: string): Observable<ApprovalDocumentDto>;
565
+ getDocumentHistory(id: string): Observable<ApprovalHistoryDto[]>;
566
+ getDocumentContentUrl(id: string): string;
567
+ getDocumentThumbnailUrl(id: string): string;
568
+ approve(documentId: string, comment?: string): Observable<void>;
569
+ reject(documentId: string, comment: string): Observable<void>;
570
+ delegate(documentId: string, toUserId: string, reason?: string): Observable<void>;
571
+ cancel(documentId: string, reason?: string): Observable<void>;
572
+ getTemplates(appId?: string): Observable<ApprovalTemplateSummaryDto[]>;
573
+ getTemplate(id: number): Observable<ApprovalTemplateDto>;
574
+ createTemplate(request: CreateApprovalTemplateRequest): Observable<ApprovalTemplateDto>;
575
+ updateTemplate(id: number, request: UpdateApprovalTemplateRequest): Observable<ApprovalTemplateDto>;
576
+ deleteTemplate(id: number): Observable<void>;
577
+ createApproval(request: CreateApprovalRequest): Observable<CreateApprovalResponseDto>;
578
+ static ɵfac: i0.ɵɵFactoryDeclaration<MaApprovalService, never>;
579
+ static ɵprov: i0.ɵɵInjectableDeclaration<MaApprovalService>;
580
+ }
581
+
582
+ declare class MaArvContainerComponent implements OnInit, OnDestroy {
583
+ title: string;
584
+ description?: string;
585
+ referenceId: string;
586
+ templateId?: number;
587
+ callbackUrl?: string;
588
+ deadlineHours?: number;
589
+ approvalSubmitted: EventEmitter<ApprovalSubmitResult>;
590
+ approvalSubmiting: EventEmitter<void>;
591
+ cancelled: EventEmitter<void>;
592
+ contentBody: ElementRef<HTMLElement>;
593
+ routingMode: 'template' | 'adhoc';
594
+ templates: ApprovalTemplateSummaryDto[];
595
+ selectedTemplateId: number | null;
596
+ adHocSteps: ApprovalStepRequest[];
597
+ referenceUserIds: string[];
598
+ refSearchQuery: string;
599
+ refSearchResults: any[];
600
+ userSearchQuery: string[];
601
+ userSearchResults: any[][];
602
+ submitting: boolean;
603
+ isSubmitted: boolean;
604
+ errorMessage: string;
605
+ userLabelMap: Record<string, string>;
606
+ private destroy$;
607
+ private mesAuth;
608
+ private approvalSvc;
609
+ private http;
610
+ ngOnInit(): void;
611
+ ngOnDestroy(): void;
612
+ private loadTemplates;
613
+ onTemplateChange(event: Event): void;
614
+ addStep(): void;
615
+ removeStep(i: number): void;
616
+ addApprover(stepIndex: number, userId: string): void;
617
+ removeApprover(stepIndex: number, approverIndex: number): void;
618
+ addReference(userId: string): void;
619
+ private storeLabelFromResults;
620
+ removeReference(j: number): void;
621
+ onUserSearchInput(stepIndex: number, query: string): void;
622
+ onRefSearchInput(query: string): void;
623
+ private searchUsers;
624
+ submit(): Promise<void>;
625
+ onCancel(): void;
626
+ captureContent(): Promise<string>;
627
+ private captureThumbnail;
628
+ private getStyleProperties;
629
+ static ɵfac: i0.ɵɵFactoryDeclaration<MaArvContainerComponent, never>;
630
+ static ɵcmp: i0.ɵɵComponentDeclaration<MaArvContainerComponent, "ma-arv-container", never, { "title": { "alias": "title"; "required": false; }; "description": { "alias": "description"; "required": false; }; "referenceId": { "alias": "referenceId"; "required": false; }; "templateId": { "alias": "templateId"; "required": false; }; "callbackUrl": { "alias": "callbackUrl"; "required": false; }; "deadlineHours": { "alias": "deadlineHours"; "required": false; }; }, { "approvalSubmitted": "approvalSubmitted"; "approvalSubmiting": "approvalSubmiting"; "cancelled": "cancelled"; }, never, ["*"], true, never>;
631
+ }
632
+
633
+ export { ApprovalActionType, ApprovalDocumentStatus, ApprovalStepMode, ApprovalStepStatus, MES_AUTH_CONFIG, MaApprovalPanelComponent, MaApprovalService, MaArvContainerComponent, MaUserComponent, MesAuthModule, MesAuthService, NotificationBadgeComponent, NotificationPanelComponent, NotificationType, ThemeService, ToastContainerComponent, ToastService, UserProfileComponent, mesAuthInterceptor, provideMesAuth };
634
+ export type { ApprovalDashboardDto, ApprovalDocumentDto, ApprovalDocumentSummaryDto, ApprovalHistoryDto, ApprovalReferenceDto, ApprovalStepDto, ApprovalStepRequest, ApprovalSubmitResult, ApprovalTemplateDto, ApprovalTemplateStepDto, ApprovalTemplateSummaryDto, ApproveRejectRequest, CreateApprovalRequest, CreateApprovalResponseDto, CreateApprovalTemplateRequest, DelegateRequest, FrontEndRoute, IUser, MesAuthConfig, NotificationDto, PagedList, RealTimeNotificationDto, Theme, Toast, UpdateApprovalTemplateRequest, UserFrontEndRoutesGrouped };
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "mesauth-angular",
3
- "version": "1.3.5",
3
+ "version": "1.5.5",
4
4
  "description": "Angular helper library to connect to a backend API and SignalR hub to surface the current logged-in user and incoming notifications with dark/light theme support",
5
5
  "keywords": [
6
6
  "angular",
7
7
  "signalr",
8
8
  "notifications",
9
9
  "auth",
10
+ "approval",
10
11
  "mes"
11
12
  ],
12
13
  "license": "MIT",