@masterteam/delegations 0.0.21 → 0.0.23

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/delegations",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/delegations",
6
6
  "linkDirectory": false,
@@ -20,8 +20,8 @@
20
20
  "tailwindcss": "^4.2.2",
21
21
  "tailwindcss-primeui": "^0.6.1",
22
22
  "@ngxs/store": "^20.1.0",
23
- "@masterteam/components": "^0.0.175",
24
23
  "@masterteam/forms": "^0.0.80",
24
+ "@masterteam/components": "^0.0.175",
25
25
  "@masterteam/icons": "^0.0.15"
26
26
  },
27
27
  "sideEffects": false,
@@ -9,6 +9,7 @@ import { HttpContext, HttpInterceptorFn } from '@angular/common/http';
9
9
  import { DynamicFormConfig } from '@masterteam/components';
10
10
  import { ModalRef } from '@masterteam/components/dialog';
11
11
  import { ModalService } from '@masterteam/components/modal';
12
+ import { TreeNode, TreeActionEvent } from '@masterteam/components/tree';
12
13
  import * as rxjs from 'rxjs';
13
14
  import { StateContext } from '@ngxs/store';
14
15
 
@@ -269,6 +270,7 @@ interface RejectDelegationRequest {
269
270
  declare enum DelegationsActionKey {
270
271
  GetMy = "getMy",
271
272
  GetAssigned = "getAssigned",
273
+ GetAdmin = "getAdmin",
272
274
  GetActive = "getActive",
273
275
  GetDetail = "getDetail",
274
276
  GetScopeOptions = "getScopeOptions",
@@ -282,6 +284,7 @@ declare enum DelegationsActionKey {
282
284
  interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {
283
285
  my: DelegationPage<DelegationRow> | null;
284
286
  assigned: DelegationPage<DelegationRow> | null;
287
+ admin: DelegationPage<DelegationRow> | null;
285
288
  active: DelegationPage<DelegationRow> | null;
286
289
  detail: DelegationDetail | null;
287
290
  scopeOptions: DelegationScopeOptions | null;
@@ -300,6 +303,7 @@ declare class TopbarDelegationMenu {
300
303
  /** Path to the management page, e.g. `/control-panel/delegations` or `/delegations`. */
301
304
  readonly managePath: _angular_core.InputSignal<string>;
302
305
  readonly compact: _angular_core.InputSignal<boolean>;
306
+ readonly showManageLink: _angular_core.InputSignal<boolean>;
303
307
  private readonly facade;
304
308
  private readonly modal;
305
309
  private readonly transloco;
@@ -317,7 +321,7 @@ declare class TopbarDelegationMenu {
317
321
  endSession(event: MouseEvent): void;
318
322
  private openConfirm;
319
323
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TopbarDelegationMenu, never>;
320
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarDelegationMenu, "mt-topbar-delegation-menu", never, { "managePath": { "alias": "managePath"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
324
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarDelegationMenu, "mt-topbar-delegation-menu", never, { "managePath": { "alias": "managePath"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "showManageLink": { "alias": "showManageLink"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
321
325
  }
322
326
 
323
327
  interface StatusVisual {
@@ -410,7 +414,13 @@ declare class DelegationsList implements OnInit {
410
414
  * `withComponentInputBinding()` — admin passes `data: { adminMode: true }`.
411
415
  */
412
416
  readonly adminMode: _angular_core.InputSignal<boolean>;
417
+ readonly surfaceTitleKey: _angular_core.InputSignal<string>;
418
+ readonly assignedTabLabelKey: _angular_core.InputSignal<string>;
419
+ readonly assignedDecisionTab: _angular_core.InputSignal<boolean>;
420
+ readonly assignedEmptyStateKey: _angular_core.InputSignal<string>;
421
+ readonly assignedStatus: _angular_core.InputSignal<DelegationEffectiveStatus | null>;
413
422
  private readonly facade;
423
+ private readonly location;
414
424
  private readonly modal;
415
425
  private readonly transloco;
416
426
  protected readonly breadcrumbItems: _angular_core.WritableSignal<({
@@ -427,15 +437,20 @@ declare class DelegationsList implements OnInit {
427
437
  routerLink?: undefined;
428
438
  })[]>;
429
439
  protected readonly activeTab: _angular_core.WritableSignal<DelegationTab>;
430
- protected readonly tabs: _angular_core.WritableSignal<{
440
+ protected readonly surfaceTitle: _angular_core.Signal<string>;
441
+ protected readonly tabs: _angular_core.Signal<{
431
442
  value: DelegationTab;
432
443
  label: string;
433
444
  }[]>;
434
445
  protected readonly isLoading: _angular_core.Signal<boolean>;
446
+ protected readonly isLoadingScopeOptions: _angular_core.Signal<boolean>;
435
447
  protected readonly scopeOptions: _angular_core.Signal<_masterteam_delegations.DelegationScopeOptions | null>;
436
448
  protected readonly rows: _angular_core.Signal<DelegationRow[]>;
449
+ protected readonly emptyStateKey: _angular_core.Signal<string>;
437
450
  statusCol: _angular_core.Signal<TemplateRef<unknown>>;
438
451
  userCol: _angular_core.Signal<TemplateRef<unknown>>;
452
+ delegatorCol: _angular_core.Signal<TemplateRef<unknown>>;
453
+ delegatedUserCol: _angular_core.Signal<TemplateRef<unknown>>;
439
454
  scopeCol: _angular_core.Signal<TemplateRef<unknown>>;
440
455
  daysCol: _angular_core.Signal<TemplateRef<unknown>>;
441
456
  protected readonly canCreate: _angular_core.Signal<boolean>;
@@ -446,11 +461,13 @@ declare class DelegationsList implements OnInit {
446
461
  private readonly weekdayKeys;
447
462
  ngOnInit(): void;
448
463
  protected switchTab(tab: DelegationTab): void;
464
+ protected goBack(): void;
449
465
  private loadCurrentTab;
450
466
  private reloadCurrentTab;
451
467
  protected has(row: DelegationRow, action: DelegationAllowedAction): boolean;
452
468
  protected formatDays(row: DelegationRow): string;
453
469
  protected formatScopeSummary(value: DelegationRow['scopeSummary']): string;
470
+ protected getListedParty(row: DelegationRow): DelegationParty;
454
471
  private viewDetails;
455
472
  private openForm;
456
473
  private approve;
@@ -459,9 +476,18 @@ declare class DelegationsList implements OnInit {
459
476
  private startSession;
460
477
  private mark;
461
478
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DelegationsList, never>;
462
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DelegationsList, "mt-delegations-list", never, { "showBreadcrumb": { "alias": "showBreadcrumb"; "required": false; "isSignal": true; }; "adminMode": { "alias": "adminMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
479
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DelegationsList, "mt-delegations-list", never, { "showBreadcrumb": { "alias": "showBreadcrumb"; "required": false; "isSignal": true; }; "adminMode": { "alias": "adminMode"; "required": false; "isSignal": true; }; "surfaceTitleKey": { "alias": "surfaceTitleKey"; "required": false; "isSignal": true; }; "assignedTabLabelKey": { "alias": "assignedTabLabelKey"; "required": false; "isSignal": true; }; "assignedDecisionTab": { "alias": "assignedDecisionTab"; "required": false; "isSignal": true; }; "assignedEmptyStateKey": { "alias": "assignedEmptyStateKey"; "required": false; "isSignal": true; }; "assignedStatus": { "alias": "assignedStatus"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
463
480
  }
464
481
 
482
+ interface DelegationFormUserValue {
483
+ id: string;
484
+ userId: string;
485
+ displayName: string;
486
+ userName: string;
487
+ email?: string | null;
488
+ photo?: string | null;
489
+ isExternal: boolean;
490
+ }
465
491
  /**
466
492
  * Delegation create/edit form (doc 04). Uses the v2 explicit-scope endpoints so
467
493
  * the persisted `DelegationScopeSelection` matches what scope/preview validated.
@@ -494,9 +520,10 @@ declare class DelegationForm implements OnInit {
494
520
  isSaving: _angular_core.Signal<boolean>;
495
521
  context: HttpContext;
496
522
  protected readonly scope: _angular_core.WritableSignal<DelegationScopeSelection>;
497
- /** Selected delegator id (admin mode only); drives scope/options + create payload. */
523
+ protected readonly currentDelegator: _angular_core.WritableSignal<DelegationFormUserValue | null>;
524
+ /** Selected delegator id drives scope/options loading and the admin payload. */
498
525
  protected readonly selectedDelegatorId: _angular_core.Signal<string | undefined>;
499
- /** In admin mode the scope picker only loads once a delegator is chosen. */
526
+ /** Admin mode waits for a chosen delegator; self-service always has one. */
500
527
  protected readonly showScopePicker: _angular_core.Signal<boolean>;
501
528
  protected readonly specificDaysOptions: _angular_core.WritableSignal<{
502
529
  label: string;
@@ -507,6 +534,7 @@ declare class DelegationForm implements OnInit {
507
534
  ngOnInit(): void;
508
535
  protected readonly canSubmit: _angular_core.Signal<boolean>;
509
536
  onSubmit(): void;
537
+ private mapPartyToUserValue;
510
538
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DelegationForm, never>;
511
539
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DelegationForm, "mt-delegation-form", never, { "delegationForEdit": { "alias": "delegationForEdit"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "adminMode": { "alias": "adminMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
512
540
  }
@@ -579,23 +607,22 @@ declare class ScopePicker {
579
607
  protected readonly isPreviewing: _angular_core.Signal<boolean>;
580
608
  protected readonly errorOptions: _angular_core.Signal<string | null>;
581
609
  protected readonly groups: _angular_core.Signal<DelegationGrantableHierarchyGroup[]>;
610
+ protected readonly activeLang: _angular_core.Signal<string>;
582
611
  /** Selected grant keys for O(1) checkbox state. */
583
612
  protected readonly selectedKeys: _angular_core.Signal<Set<string>>;
584
- private readonly expanded;
613
+ protected readonly treeSelection: _angular_core.WritableSignal<TreeNode<any>[] | null>;
614
+ protected readonly treeNodes: _angular_core.Signal<TreeNode<any>[]>;
615
+ protected readonly grantIndex: _angular_core.Signal<Map<string, DelegationGrant>>;
585
616
  constructor();
586
- protected isExpanded(group: DelegationGrantableHierarchyGroup): boolean;
587
- protected toggleAccordion(group: DelegationGrantableHierarchyGroup): void;
588
- protected isSelected(grant: DelegationGrant): boolean;
589
- protected getGroupLabel(group: DelegationGrantableHierarchyGroup): string;
590
- protected getTargetLabel(target: DelegationScopeTarget): string;
591
- protected getActionLabel(grant: DelegationGrant): string;
592
- protected getTargetActions(targetGroup: DelegationGrantableTargetGroup): DelegationGrant[];
617
+ protected onTreeAction(event: TreeActionEvent): void;
593
618
  protected getPreviewSummary(summary: DelegationDisplayValue | undefined): string;
594
619
  protected formatDeniedOperation(value?: string | null): string;
595
620
  protected formatDeniedTarget(value?: string | null): string;
596
- protected toggleGrant(grant: DelegationGrant): void;
597
- protected selectedCount(group: DelegationGrantableHierarchyGroup): number;
598
- protected selectedTargetCount(targetGroup: DelegationGrantableTargetGroup): number;
621
+ private buildTreeNodes;
622
+ private buildTargetNode;
623
+ private getGroupLabel;
624
+ private getTargetLabel;
625
+ private getActionLabel;
599
626
  private currentLanguage;
600
627
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScopePicker, never>;
601
628
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScopePicker, "mt-scope-picker", never, { "scope": { "alias": "scope"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "delegatorUserId": { "alias": "delegatorUserId"; "required": false; "isSignal": true; }; }, { "scope": "scopeChange"; }, never, never, true, never>;
@@ -618,6 +645,11 @@ declare class GetAssignedDelegations {
618
645
  static readonly type = "[Delegations] Get Assigned Delegations";
619
646
  constructor(query?: DelegationListQuery);
620
647
  }
648
+ declare class GetAdminDelegations {
649
+ query: DelegationListQuery;
650
+ static readonly type = "[Delegations] Get Admin Delegations";
651
+ constructor(query?: DelegationListQuery);
652
+ }
621
653
  declare class GetActiveAssignedDelegations {
622
654
  query: DelegationListQuery;
623
655
  static readonly type = "[Delegations] Get Active Assigned Delegations";
@@ -707,6 +739,7 @@ declare class DelegationsState {
707
739
  private http;
708
740
  static getMy(state: DelegationsStateModel): DelegationPage<DelegationRow> | null;
709
741
  static getAssigned(state: DelegationsStateModel): DelegationPage<DelegationRow> | null;
742
+ static getAdmin(state: DelegationsStateModel): DelegationPage<DelegationRow> | null;
710
743
  static getActive(state: DelegationsStateModel): DelegationPage<DelegationRow> | null;
711
744
  static getDetail(state: DelegationsStateModel): DelegationDetail | null;
712
745
  static getScopeOptions(state: DelegationsStateModel): DelegationScopeOptions | null;
@@ -715,6 +748,7 @@ declare class DelegationsState {
715
748
  static getErrors(state: DelegationsStateModel): Record<string, string | null | undefined>;
716
749
  getMy(ctx: StateContext<DelegationsStateModel>, { query }: GetMyDelegations): rxjs.Observable<Response<DelegationPage<DelegationRow>>>;
717
750
  getAssigned(ctx: StateContext<DelegationsStateModel>, { query }: GetAssignedDelegations): rxjs.Observable<Response<DelegationPage<DelegationRow>>>;
751
+ getAdmin(ctx: StateContext<DelegationsStateModel>, { query }: GetAdminDelegations): rxjs.Observable<Response<DelegationPage<DelegationRow>>>;
718
752
  getActive(ctx: StateContext<DelegationsStateModel>, { query }: GetActiveAssignedDelegations): rxjs.Observable<Response<DelegationPage<DelegationRow>>>;
719
753
  getDetail(ctx: StateContext<DelegationsStateModel>, { id }: GetDelegationDetail): rxjs.Observable<Response<DelegationDetail>>;
720
754
  clearDetail(ctx: StateContext<DelegationsStateModel>): void;
@@ -736,6 +770,7 @@ declare class DelegationsFacade {
736
770
  private readonly store;
737
771
  readonly myPage: _angular_core.Signal<_masterteam_delegations.DelegationPage<_masterteam_delegations.DelegationRow> | null>;
738
772
  readonly assignedPage: _angular_core.Signal<_masterteam_delegations.DelegationPage<_masterteam_delegations.DelegationRow> | null>;
773
+ readonly adminPage: _angular_core.Signal<_masterteam_delegations.DelegationPage<_masterteam_delegations.DelegationRow> | null>;
739
774
  readonly activePage: _angular_core.Signal<_masterteam_delegations.DelegationPage<_masterteam_delegations.DelegationRow> | null>;
740
775
  readonly detail: _angular_core.Signal<_masterteam_delegations.DelegationDetail | null>;
741
776
  readonly scopeOptions: _angular_core.Signal<_masterteam_delegations.DelegationScopeOptions | null>;
@@ -744,9 +779,11 @@ declare class DelegationsFacade {
744
779
  private readonly errors;
745
780
  readonly myItems: _angular_core.Signal<_masterteam_delegations.DelegationRow[]>;
746
781
  readonly assignedItems: _angular_core.Signal<_masterteam_delegations.DelegationRow[]>;
782
+ readonly adminItems: _angular_core.Signal<_masterteam_delegations.DelegationRow[]>;
747
783
  readonly activeItems: _angular_core.Signal<_masterteam_delegations.DelegationRow[]>;
748
784
  readonly isLoadingMy: _angular_core.Signal<boolean>;
749
785
  readonly isLoadingAssigned: _angular_core.Signal<boolean>;
786
+ readonly isLoadingAdmin: _angular_core.Signal<boolean>;
750
787
  readonly isLoadingActive: _angular_core.Signal<boolean>;
751
788
  readonly isLoadingDetail: _angular_core.Signal<boolean>;
752
789
  readonly isLoadingScopeOptions: _angular_core.Signal<boolean>;
@@ -757,11 +794,13 @@ declare class DelegationsFacade {
757
794
  readonly isCancelling: _angular_core.Signal<boolean>;
758
795
  readonly errorMy: _angular_core.Signal<string | null>;
759
796
  readonly errorAssigned: _angular_core.Signal<string | null>;
797
+ readonly errorAdmin: _angular_core.Signal<string | null>;
760
798
  readonly errorDetail: _angular_core.Signal<string | null>;
761
799
  readonly errorScopeOptions: _angular_core.Signal<string | null>;
762
800
  readonly errorSave: _angular_core.Signal<string | null>;
763
801
  getMy(query?: DelegationListQuery): rxjs.Observable<void>;
764
802
  getAssigned(query?: DelegationListQuery): rxjs.Observable<void>;
803
+ getAdmin(query?: DelegationListQuery): rxjs.Observable<void>;
765
804
  getActive(query?: DelegationListQuery): rxjs.Observable<void>;
766
805
  getDetail(id: number): rxjs.Observable<void>;
767
806
  clearDetail(): rxjs.Observable<void>;
@@ -865,5 +904,5 @@ declare class DelegationSessionFacade {
865
904
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<DelegationSessionFacade>;
866
905
  }
867
906
 
868
- export { ApproveDelegation, CancelDelegation, ClearDelegationDetail, ClearScopePreview, CreateDelegationLegacy, CreateDelegationV2, DelegationDetailDrawer, DelegationForm, DelegationSessionActionKey, DelegationSessionFacade, DelegationSessionState, DelegationStatusChip, Delegations, DelegationsActionKey, DelegationsFacade, DelegationsList, DelegationsState, EndDelegationSession, GetActiveAssignedDelegations, GetAssignedDelegations, GetDelegationDetail, GetMyDelegations, GetScopeOptions, LoadDelegationCandidates, PreviewScope, RejectDelegation, RejectDelegationDialog, ScopePicker, StartDelegationSession, StartSessionDialog, SwitchDelegationSession, TopbarDelegationMenu, UpdateDelegationLegacy, UpdateDelegationV2, appDelegationInterceptor };
907
+ export { ApproveDelegation, CancelDelegation, ClearDelegationDetail, ClearScopePreview, CreateDelegationLegacy, CreateDelegationV2, DelegationDetailDrawer, DelegationForm, DelegationSessionActionKey, DelegationSessionFacade, DelegationSessionState, DelegationStatusChip, Delegations, DelegationsActionKey, DelegationsFacade, DelegationsList, DelegationsState, EndDelegationSession, GetActiveAssignedDelegations, GetAdminDelegations, GetAssignedDelegations, GetDelegationDetail, GetMyDelegations, GetScopeOptions, LoadDelegationCandidates, PreviewScope, RejectDelegation, RejectDelegationDialog, ScopePicker, StartDelegationSession, StartSessionDialog, SwitchDelegationSession, TopbarDelegationMenu, UpdateDelegationLegacy, UpdateDelegationV2, appDelegationInterceptor };
869
908
  export type { ActiveDelegationSession, ApproveDelegationRequest, CreateDelegationLegacyRequest, CreateDelegationV2Request, DelegationAllowedAction, DelegationApprovalInfo, DelegationApprovalStatus, DelegationCancellationInfo, DelegationDayRuleMode, DelegationDetail, DelegationDisplayValue, DelegationDto, DelegationEffectiveStatus, DelegationGrant, DelegationListQuery, DelegationPage, DelegationParty, DelegationRow, DelegationScopeAction, DelegationScopeCombinationRule, DelegationScopeDeniedItem, DelegationScopeFact, DelegationScopeHierarchyGroup, DelegationScopeHierarchyTarget, DelegationScopeOptions, DelegationScopePreview, DelegationScopeSelection, DelegationScopeTarget, DelegationScopeWarning, DelegationSessionInvalidationReason, DelegationSessionStateModel, DelegationSortDirection, DelegationStatusInfo, DelegationsStateModel, RejectDelegationRequest, UpdateDelegationLegacyRequest, UpdateDelegationV2Request };