@masterteam/delegations 0.0.11 → 0.1.0
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/assets/delegations.css +2 -2
- package/assets/i18n/ar.json +94 -4
- package/assets/i18n/en.json +93 -3
- package/fesm2022/masterteam-delegations.mjs +1616 -407
- package/fesm2022/masterteam-delegations.mjs.map +1 -1
- package/package.json +4 -4
- package/types/masterteam-delegations.d.ts +763 -142
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-delegations.mjs","sources":["../../../../packages/masterteam/delegations/src/lib/delegations/delegations.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.html","../../../../packages/masterteam/delegations/src/store/delegations/delegations.model.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.actions.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.state.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.facade.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/delegation-form.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/delegation-form.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations-list/delegations-list.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations-list/delegations-list.html","../../../../packages/masterteam/delegations/src/store/index.ts","../../../../packages/masterteam/delegations/src/masterteam-delegations.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\r\nimport { Router, RouterOutlet } from '@angular/router';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Page } from '@masterteam/components/page';\r\n\r\n@Component({\r\n selector: 'mt-delegations',\r\n imports: [Page, RouterOutlet, TranslocoDirective],\r\n templateUrl: './delegations.html',\r\n styleUrl: './delegations.css',\r\n})\r\nexport default class Delegations {\r\n private readonly router = inject(Router);\r\n\r\n goBack() {\r\n this.router.navigate(['control-panel/product-settings']);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <mt-page\r\n [title]=\"t('delegations.delegations')\"\r\n [avatarIcon]=\"'custom.hierarchy-structure'\"\r\n [contentClass]=\"'max-[1025px]:p-4 max-[640px]:p-3'\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-indigo-50)',\r\n '--p-avatar-color': 'var(--p-indigo-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <router-outlet />\r\n </mt-page>\r\n</ng-container>\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport interface DelegationUser {\r\n id: string;\r\n userId: string;\r\n displayName: string;\r\n mobile: string;\r\n userName: string;\r\n email: string;\r\n photo: string;\r\n}\r\n\r\nexport interface DelegationDateTime {\r\n displayValue: string;\r\n actualValue: string;\r\n}\r\n\r\nexport interface Delegation {\r\n id?: number;\r\n delegateFrom?: DelegationUser;\r\n delegateTo?: DelegationUser;\r\n delegateFromDateTime?: DelegationDateTime;\r\n delegateToDateTime?: DelegationDateTime;\r\n delegationStatus?: boolean;\r\n isActive?: boolean;\r\n description?: string;\r\n delegationDaysType?: 'fullRange' | 'specificDays';\r\n specificDays?: number[];\r\n}\r\n\r\nexport interface DelegationFormData {\r\n delegateTo: string;\r\n delegateFromDateTime: string;\r\n delegateToDateTime: string;\r\n delegateFrom: string;\r\n description?: string;\r\n delegationDaysType?: 'fullRange' | 'specificDays';\r\n specificDays?: number[];\r\n isActive?: boolean;\r\n}\r\n\r\nexport enum DelegationsActionKey {\r\n GetDelegations = 'getDelegations',\r\n AddDelegation = 'addDelegation',\r\n UpdateDelegation = 'updateDelegation',\r\n DeleteDelegation = 'deleteDelegation',\r\n GetDelegationForm = 'getDelegationForm',\r\n}\r\n\r\nexport interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {\r\n allDelegations: Delegation[];\r\n selectedDelegation: Delegation | null;\r\n}\r\n","import { DelegationFormData } from './delegations.model';\r\n\r\nexport class GetDelegations {\r\n static readonly type = '[Delegations] Get Delegations';\r\n}\r\n\r\nexport class AddDelegation {\r\n static readonly type = '[Delegations] Add Delegation';\r\n constructor(public delegation: DelegationFormData) {}\r\n}\r\n\r\nexport class UpdateDelegation {\r\n static readonly type = '[Delegations] Update Delegation';\r\n constructor(\r\n public id: number,\r\n public delegation: DelegationFormData,\r\n ) {}\r\n}\r\n\r\nexport class DeleteDelegation {\r\n static readonly type = '[Delegations] Delete Delegation';\r\n constructor(public id: number) {}\r\n}\r\n\r\nexport class GetDelegation {\r\n static readonly type = '[Delegations] Get Delegation';\r\n constructor(public id: number) {}\r\n}\r\n\r\nexport class ClearSelectedDelegation {\r\n static readonly type = '[Delegations] Clear Selected Delegation';\r\n}\r\n","import { State, Action, StateContext, Selector } from '@ngxs/store';\r\nimport {\r\n GetDelegations,\r\n AddDelegation,\r\n UpdateDelegation,\r\n DeleteDelegation,\r\n GetDelegation,\r\n ClearSelectedDelegation,\r\n} from './delegations.actions';\r\nimport {\r\n Delegation,\r\n DelegationsActionKey,\r\n DelegationsStateModel,\r\n} from './delegations.model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Response } from './api.model';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\n\r\n@State<DelegationsStateModel>({\r\n name: 'delegations',\r\n defaults: {\r\n allDelegations: [],\r\n selectedDelegation: null,\r\n loadingActive: [],\r\n errors: {},\r\n },\r\n})\r\n@Injectable()\r\nexport class DelegationsState extends CrudStateBase<\r\n Delegation,\r\n DelegationsStateModel,\r\n DelegationsActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n\r\n // ============================================================================\r\n // Selectors - Individual data selectors for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getAllDelegations(state: DelegationsStateModel): Delegation[] {\r\n return state.allDelegations;\r\n }\r\n\r\n @Selector()\r\n static getSelectedDelegation(\r\n state: DelegationsStateModel,\r\n ): Delegation | null {\r\n return state.selectedDelegation;\r\n }\r\n\r\n // ============================================================================\r\n // Loading/Error Slice Selectors - REQUIRED for optimal performance\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getLoadingActive(state: DelegationsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: DelegationsStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n @Action(GetDelegations)\r\n getDelegations(ctx: StateContext<DelegationsStateModel>) {\r\n const req$ = this.http.get<Response<Delegation[]>>(\r\n 'identity/delegations/all',\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetDelegations,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n allDelegations: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetDelegation)\r\n getDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id }: GetDelegation,\r\n ) {\r\n const req$ = this.http.get<Response<Delegation>>(\r\n `identity/delegations/${id}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetDelegationForm,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n selectedDelegation: response.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(AddDelegation)\r\n addDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { delegation }: AddDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(\r\n 'identity/delegations',\r\n delegation,\r\n );\r\n\r\n return this.create(ctx, {\r\n key: DelegationsActionKey.AddDelegation,\r\n request$: req$,\r\n stateProperty: (state) => state.allDelegations,\r\n });\r\n }\r\n\r\n @Action(UpdateDelegation)\r\n updateDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, delegation }: UpdateDelegation,\r\n ) {\r\n const req$ = this.http.put<Response<Delegation>>(\r\n `identity/delegations/${id}`,\r\n delegation,\r\n );\r\n\r\n return this.update(ctx, {\r\n key: DelegationsActionKey.UpdateDelegation,\r\n request$: req$,\r\n uniqueKey: 'id',\r\n id,\r\n stateProperty: (state) => state.allDelegations,\r\n });\r\n }\r\n\r\n @Action(DeleteDelegation)\r\n deleteDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id }: DeleteDelegation,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(`identity/delegations/${id}`);\r\n\r\n return this.delete(ctx, {\r\n key: DelegationsActionKey.DeleteDelegation,\r\n request$: req$,\r\n uniqueKey: 'id',\r\n id,\r\n stateProperty: (state) => state.allDelegations,\r\n });\r\n }\r\n\r\n @Action(ClearSelectedDelegation)\r\n clearSelectedDelegation(ctx: StateContext<DelegationsStateModel>) {\r\n ctx.patchState({ selectedDelegation: null });\r\n }\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport {\r\n AddDelegation,\r\n DeleteDelegation,\r\n GetDelegation,\r\n GetDelegations,\r\n UpdateDelegation,\r\n ClearSelectedDelegation,\r\n} from './delegations.actions';\r\nimport { DelegationsActionKey, DelegationFormData } from './delegations.model';\r\nimport { DelegationsState } from './delegations.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DelegationsFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly allDelegations = select(DelegationsState.getAllDelegations);\r\n readonly selectedDelegation = select(DelegationsState.getSelectedDelegation);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(DelegationsState.getLoadingActive);\r\n private readonly errors = select(DelegationsState.getErrors);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingDelegations = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetDelegations),\r\n );\r\n readonly isLoadingDelegation = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetDelegationForm),\r\n );\r\n readonly isAddingDelegation = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.AddDelegation),\r\n );\r\n readonly isUpdatingDelegation = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.UpdateDelegation),\r\n );\r\n readonly isDeletingDelegation = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.DeleteDelegation),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly delegationsError = computed(\r\n () => this.errors()[DelegationsActionKey.GetDelegations] ?? null,\r\n );\r\n readonly delegationError = computed(\r\n () => this.errors()[DelegationsActionKey.GetDelegationForm] ?? null,\r\n );\r\n readonly addDelegationError = computed(\r\n () => this.errors()[DelegationsActionKey.AddDelegation] ?? null,\r\n );\r\n readonly updateDelegationError = computed(\r\n () => this.errors()[DelegationsActionKey.UpdateDelegation] ?? null,\r\n );\r\n readonly deleteDelegationError = computed(\r\n () => this.errors()[DelegationsActionKey.DeleteDelegation] ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Derived Data - Computed from data selectors\r\n // ============================================================================\r\n readonly activeDelegations = computed(() =>\r\n this.allDelegations().filter((d) => d.isActive === true),\r\n );\r\n\r\n readonly inactiveDelegations = computed(() =>\r\n this.allDelegations().filter((d) => d.isActive === false),\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n\r\n getDelegations() {\r\n return this.store.dispatch(new GetDelegations());\r\n }\r\n\r\n addDelegation(delegation: DelegationFormData) {\r\n return this.store.dispatch(new AddDelegation(delegation));\r\n }\r\n\r\n updateDelegation(id: number, delegation: DelegationFormData) {\r\n return this.store.dispatch(new UpdateDelegation(id, delegation));\r\n }\r\n\r\n deleteDelegation(id: number) {\r\n return this.store.dispatch(new DeleteDelegation(id));\r\n }\r\n\r\n loadDelegation(id: number) {\r\n return this.store.dispatch(new GetDelegation(id));\r\n }\r\n\r\n clearSelectedDelegation() {\r\n return this.store.dispatch(new ClearSelectedDelegation());\r\n }\r\n}\r\n","import {\r\n Component,\r\n inject,\r\n OnInit,\r\n effect,\r\n input,\r\n computed,\r\n signal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\n\r\n// Masterteam dialog\r\nimport { DialogService, ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n DynamicFormConfig,\r\n TextareaFieldConfig,\r\n ValidatorConfig,\r\n RadioButtonFieldConfig,\r\n MultiSelectFieldConfig,\r\n ToggleFieldConfig,\r\n} from '@masterteam/components';\r\nimport {\r\n Delegation,\r\n DelegationsFacade,\r\n DelegationFormData,\r\n} from '../../../store/delegations';\r\nimport { UserSearchFieldConfig } from '@masterteam/components';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DateFieldConfig } from '@masterteam/components';\r\n\r\n@Component({\r\n selector: 'mt-delegation-form',\r\n templateUrl: './delegation-form.html',\r\n styleUrls: ['./delegation-form.css'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n TranslocoDirective,\r\n SkeletonModule,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n ],\r\n providers: [DialogService],\r\n})\r\nexport default class DelegationForm implements OnInit {\r\n private readonly halfWidthFieldClass = 'flex flex-col gap-1 lg:col-span-6';\r\n private readonly fullWidthFieldClass = 'flex flex-col gap-1 lg:col-span-12';\r\n\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n delegationForEdit = input<Delegation | null>(null);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(DelegationsFacade);\r\n selectedDelegation = this.facade.selectedDelegation;\r\n delegationFormControl = new FormControl();\r\n formValue = toSignal(this.delegationFormControl.valueChanges);\r\n getDelegationFormLoading = this.facade.isLoadingDelegation;\r\n isAddingDelegation = this.facade.isAddingDelegation;\r\n isUpdatingDelegation = this.facade.isUpdatingDelegation;\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n });\r\n\r\n isDelegatingToSelf = computed(() => {\r\n const formValue = this.formValue();\r\n const fromId = formValue.delegateFrom?.id || formValue.delegateFrom;\r\n const toId = formValue.delegateTo?.id || formValue.delegateTo;\r\n return fromId === toId;\r\n });\r\n\r\n specificDaysOptions = signal([\r\n {\r\n label: this.translocoService.translate('delegations.sunday'),\r\n value: 0,\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.monday'),\r\n value: 1,\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.tuesday'),\r\n value: 2,\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.wednesday'),\r\n value: 3,\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.thursday'),\r\n value: 4,\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.friday'),\r\n value: 5,\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.saturday'),\r\n value: 6,\r\n },\r\n ]);\r\n\r\n delegationFormConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'delegationFormConfig',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 gap-4 items-start lg:grid-cols-12',\r\n order: 1,\r\n fields: [\r\n new UserSearchFieldConfig({\r\n key: 'delegateFrom',\r\n label: this.translocoService.translate(\r\n 'delegations.originally-assigned-to',\r\n ),\r\n apiUrl: 'Identity/users',\r\n context: this.context,\r\n validators: [ValidatorConfig.required()],\r\n order: 1,\r\n cssClass: this.halfWidthFieldClass,\r\n colSpan: 6,\r\n disabled: !!this.delegationForEdit()?.id,\r\n }),\r\n new UserSearchFieldConfig({\r\n key: 'delegateTo',\r\n label: this.translocoService.translate('delegations.delegated-to'),\r\n apiUrl: 'Identity/users',\r\n context: this.context,\r\n validators: [ValidatorConfig.required()],\r\n order: 2,\r\n cssClass: this.halfWidthFieldClass,\r\n colSpan: 6,\r\n disabled: !!this.delegationForEdit()?.id,\r\n }),\r\n new TextareaFieldConfig({\r\n key: 'description',\r\n label: this.translocoService.translate('delegations.description'),\r\n placeholder: this.translocoService.translate(\r\n 'delegations.description',\r\n ),\r\n cssClass: this.fullWidthFieldClass,\r\n colSpan: 12,\r\n order: 3,\r\n }),\r\n new DateFieldConfig({\r\n key: 'delegateFromDateTime',\r\n label: this.translocoService.translate(\r\n 'delegations.delegation-date-from',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'delegations.delegation-date-from',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n showTime: true,\r\n cssClass: this.halfWidthFieldClass,\r\n colSpan: 6,\r\n order: 4,\r\n }),\r\n new DateFieldConfig({\r\n key: 'delegateToDateTime',\r\n label: this.translocoService.translate(\r\n 'delegations.delegation-date-to',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'delegations.delegation-date-to',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n showTime: true,\r\n cssClass: this.halfWidthFieldClass,\r\n colSpan: 6,\r\n order: 5,\r\n }),\r\n new RadioButtonFieldConfig({\r\n key: 'delegationDaysType',\r\n label: this.translocoService.translate(\r\n 'delegations.delegation-days-apply',\r\n ),\r\n options: [\r\n {\r\n label: this.translocoService.translate(\r\n 'delegations.full-range',\r\n ),\r\n value: 'FullRange',\r\n },\r\n {\r\n label: this.translocoService.translate(\r\n 'delegations.specific-days',\r\n ),\r\n value: 'SpecificDays',\r\n },\r\n ],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n validators: [ValidatorConfig.required()],\r\n cssClass: this.fullWidthFieldClass,\r\n colSpan: 12,\r\n order: 6,\r\n }),\r\n new MultiSelectFieldConfig({\r\n key: 'specificDays',\r\n label: this.translocoService.translate('delegations.specific-days'),\r\n options: this.specificDaysOptions(),\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n maxSelectedLabels: 7,\r\n relations: [\r\n {\r\n key: 'delegationDaysType',\r\n value: 'SpecificDays',\r\n action: 'show',\r\n },\r\n ],\r\n cssClass: this.fullWidthFieldClass,\r\n colSpan: 12,\r\n order: 7,\r\n }),\r\n new ToggleFieldConfig({\r\n key: 'isActive',\r\n label: this.translocoService.translate(\r\n 'delegations.active-delegation',\r\n ),\r\n cssClass: `${this.fullWidthFieldClass} mt-5`,\r\n order: 8,\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n const delegationId = this.delegationForEdit()?.id;\r\n if (this.selectedDelegation() && delegationId) {\r\n const delegation = this.selectedDelegation();\r\n const data = {\r\n delegateFrom: delegation?.delegateFrom,\r\n delegateTo: delegation?.delegateTo,\r\n description: delegation?.description,\r\n delegateFromDateTime: delegation?.delegateFromDateTime?.actualValue,\r\n delegateToDateTime: delegation?.delegateToDateTime?.actualValue,\r\n delegationDaysType: delegation?.delegationDaysType || 'FullRange',\r\n specificDays: delegation?.specificDays || [],\r\n isActive: delegation?.isActive ?? false,\r\n };\r\n this.delegationFormControl.patchValue(data);\r\n } else {\r\n this.delegationFormControl.reset({\r\n delegationDaysType: 'FullRange',\r\n isActive: true,\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const delegationId = this.delegationForEdit()?.id;\r\n if (delegationId) {\r\n this.facade.loadDelegation(delegationId);\r\n }\r\n }\r\n\r\n onSubmit() {\r\n if (!this.delegationFormControl.valid) {\r\n return;\r\n }\r\n\r\n const formValue = this.delegationFormControl.value;\r\n const payload: DelegationFormData = {\r\n delegateFrom: formValue?.delegateFrom?.id || formValue?.delegateFrom,\r\n delegateTo: formValue?.delegateTo?.id || formValue?.delegateTo,\r\n description: formValue?.description,\r\n delegateFromDateTime: formValue?.delegateFromDateTime,\r\n delegateToDateTime: formValue?.delegateToDateTime,\r\n delegationDaysType: formValue?.delegationDaysType || 'FullRange',\r\n specificDays:\r\n formValue?.delegationDaysType === 'SpecificDays'\r\n ? formValue?.specificDays || []\r\n : undefined,\r\n isActive: formValue?.isActive ?? false,\r\n };\r\n\r\n const delegationId = this.delegationForEdit()?.id;\r\n if (delegationId) {\r\n this.facade.updateDelegation(delegationId, payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n } else {\r\n this.facade.addDelegation(payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n }\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'delegations'\">\r\n <div\r\n [class]=\"\r\n 'delegation-form-content flex min-w-0 flex-col gap-3 overflow-x-hidden p-4 max-[640px]:p-3 ' +\r\n modal.contentClass\r\n \"\r\n >\r\n @if (getDelegationFormLoading()) {\r\n <p-skeleton class=\"my-4 mt-7\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"6rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"delegationFormConfig()\"\r\n [formControl]=\"delegationFormControl\"\r\n />\r\n }\r\n </div>\r\n\r\n <div\r\n [class]=\"\r\n 'delegation-form-footer ' +\r\n modal.footerClass +\r\n ' flex-col gap-2 sm:flex-row sm:items-center sm:justify-end'\r\n \"\r\n >\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n (click)=\"ref.close()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n />\r\n <mt-button\r\n [label]=\"delegationForEdit() ? t('update') : t('create')\"\r\n [loading]=\"isAddingDelegation() || isUpdatingDelegation()\"\r\n [disabled]=\"!delegationFormControl.valid || isDelegatingToSelf()\"\r\n (click)=\"onSubmit()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n linkedSignal,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { DelegationsFacade } from '../../../store/delegations';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport DelegationForm from '../delegation-form/delegation-form';\r\nimport { finalize } from 'rxjs';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { Icon } from '@masterteam/icons';\r\n\r\n@Component({\r\n selector: 'mt-delegations-list',\r\n styleUrl: './delegations-list.css',\r\n templateUrl: './delegations-list.html',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n SkeletonModule,\r\n Table,\r\n Avatar,\r\n TranslocoDirective,\r\n Breadcrumb,\r\n Icon,\r\n ],\r\n})\r\nexport default class DelegationsList implements OnInit {\r\n statusCol = viewChild.required<TemplateRef<any>>('statusCol');\r\n userCol = viewChild.required<TemplateRef<any>>('userCol');\r\n userCol2 = viewChild.required<TemplateRef<any>>('userCol2');\r\n daysCol = viewChild.required<TemplateRef<any>>('daysCol');\r\n\r\n private readonly facade = inject(DelegationsFacade);\r\n readonly modal: ModalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n\r\n breadcrumbItems = linkedSignal(() => [\r\n {\r\n label: '',\r\n icon: 'general.home-line',\r\n routerLink: '/control-panel/workspaces',\r\n },\r\n {\r\n label: this.translocoService.translate(\r\n 'product-settings.product-settings',\r\n ),\r\n routerLink: '/control-panel/product-settings',\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.delegations'),\r\n },\r\n ]);\r\n\r\n delegations = computed(() => {\r\n const tab = this.activeTab();\r\n const all = this.allDelegations();\r\n const activeDelegations = this.activeDelegations();\r\n const inactiveDelegations = this.inactiveDelegations();\r\n\r\n switch (tab) {\r\n case 'active':\r\n return activeDelegations;\r\n case 'inactive':\r\n return inactiveDelegations;\r\n case 'all':\r\n default:\r\n return all;\r\n }\r\n });\r\n\r\n tabs = signal([\r\n {\r\n label: this.translocoService.translate('delegations.all'),\r\n value: 'all',\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.active'),\r\n value: 'active',\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.inactive'),\r\n value: 'inactive',\r\n },\r\n ]);\r\n activeTab = signal<string>('all');\r\n tableActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.plus',\r\n label: this.translocoService.translate('delegations.add-delegation'),\r\n color: 'primary',\r\n action: () => {\r\n this.addDelegationDialog();\r\n },\r\n },\r\n ]);\r\n\r\n deletingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.translocoService.translate('edit'),\r\n color: 'primary',\r\n action: (row: any) => {\r\n this.facade.clearSelectedDelegation();\r\n this.addDelegationDialog(row);\r\n },\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate('delete'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.deletingRowIds.update((ids) => [...ids, row.id]);\r\n this.facade\r\n .deleteDelegation(row.id)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row.id),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n },\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: any) => this.deletingRowIds().includes(row.id),\r\n },\r\n ]);\r\n\r\n tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'isActive',\r\n label: this.translocoService.translate('delegations.status'),\r\n type: 'custom',\r\n customCellTpl: this.statusCol(),\r\n filterConfig: {\r\n type: 'select',\r\n label: this.translocoService.translate('delegations.status'),\r\n options: [\r\n {\r\n label: this.translocoService.translate('delegations.active'),\r\n value: true,\r\n },\r\n {\r\n label: this.translocoService.translate('delegations.inactive'),\r\n value: false,\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n key: 'delegateFrom.displayName',\r\n label: this.translocoService.translate(\r\n 'delegations.originally-assigned-to',\r\n ),\r\n type: 'custom',\r\n customCellTpl: this.userCol(),\r\n },\r\n {\r\n key: 'delegateTo.displayName',\r\n label: this.translocoService.translate('delegations.delegated-to'),\r\n type: 'custom',\r\n customCellTpl: this.userCol2(),\r\n },\r\n {\r\n key: 'delegateFromDateTime',\r\n label: this.translocoService.translate('delegations.start-date'),\r\n type: 'dateTime',\r\n filterConfig: {\r\n type: 'date',\r\n label: this.translocoService.translate('delegations.start-date'),\r\n },\r\n },\r\n {\r\n key: 'delegateToDateTime',\r\n label: this.translocoService.translate('delegations.end-date'),\r\n type: 'dateTime',\r\n filterConfig: {\r\n type: 'date',\r\n label: this.translocoService.translate('delegations.end-date'),\r\n },\r\n },\r\n {\r\n key: 'days',\r\n label: this.translocoService.translate('delegations.days'),\r\n type: 'custom',\r\n customCellTpl: this.daysCol(),\r\n },\r\n ]);\r\n\r\n loading = this.facade.isLoadingDelegations;\r\n private allDelegations = this.facade.allDelegations;\r\n private activeDelegations = this.facade.activeDelegations;\r\n private inactiveDelegations = this.facade.inactiveDelegations;\r\n\r\n ngOnInit(): void {\r\n this.facade.getDelegations();\r\n }\r\n\r\n addDelegationDialog(delegation: any | null = null) {\r\n const modalType: 'drawer' | 'dialog' = delegation ? 'drawer' : 'dialog';\r\n const styleClass =\r\n modalType === 'drawer'\r\n ? '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]'\r\n : '!w-[min(96vw,50rem)] !max-w-[96vw]';\r\n\r\n this.modal.openModal(DelegationForm, modalType, {\r\n header: delegation\r\n ? this.translocoService.translate('delegations.edit-delegation')\r\n : this.translocoService.translate('delegations.add-delegation'),\r\n styleClass,\r\n position: modalType === 'drawer' ? 'end' : '',\r\n appendTo: modalType === 'drawer' ? 'page-content' : 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n delegationForEdit: delegation,\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'delegations'\">\r\n <div class=\"min-w-0 space-y-4\">\r\n <div class=\"flex min-w-0 items-center justify-between gap-4\">\r\n <div class=\"min-w-0 space-y-1\">\r\n <h1 class=\"text-xl font-semibold text-slate-900 tracking-tight\">\r\n {{ t(\"delegations\") }}\r\n </h1>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems()\"\r\n [styleClass]=\"'flex justify-start mx-1'\"\r\n ></mt-breadcrumb>\r\n </div>\r\n </div>\r\n <ng-template #statusCol let-row>\r\n <span\r\n class=\"flex items-center gap-2 text-md\"\r\n [class]=\"row.isActive ? 'text-green-700 ' : 'text-red-700 '\"\r\n >\r\n <mt-icon\r\n class=\"text-2xl\"\r\n [icon]=\"row.isActive ? 'media.play-circle' : 'media.pause-circle'\"\r\n ></mt-icon>\r\n {{ row.isActive ? t(\"active\") : t(\"inactive\") }}\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #userCol let-row>\r\n <div class=\"flex min-w-0 items-center gap-2\">\r\n <mt-avatar class=\"shrink-0\" [icon]=\"'custom.user-pp'\"></mt-avatar>\r\n <span class=\"truncate\">{{ row.delegateFrom?.displayName }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template #userCol2 let-row>\r\n <div class=\"flex min-w-0 items-center gap-2\">\r\n <mt-avatar class=\"shrink-0\" [icon]=\"'custom.user-pp'\"></mt-avatar>\r\n <span class=\"truncate\">{{ row.delegateTo?.displayName }}</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #daysCol let-row>\r\n <div>{{ row.dayCounts }} {{ t(\"days\") }}</div>\r\n </ng-template>\r\n\r\n <mt-table\r\n [tabs]=\"tabs()\"\r\n [(activeTab)]=\"activeTab\"\r\n [data]=\"delegations()\"\r\n [columns]=\"tableColumns()\"\r\n [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n [loading]=\"loading()\"\r\n storageKey=\"delegations-list-table\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n","// store/index.ts\r\nexport * from './delegations';\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":"masterteam-delegations.mjs","sources":["../../../../packages/masterteam/delegations/src/lib/delegations/delegation-status-chip/delegation-status-chip.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.actions.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.model.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.state.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.facade.ts","../../../../packages/masterteam/delegations/src/lib/delegations/start-session-dialog/start-session-dialog.ts","../../../../packages/masterteam/delegations/src/lib/delegations/start-session-dialog/start-session-dialog.html","../../../../packages/masterteam/delegations/src/lib/delegations/topbar-delegation-menu/topbar-delegation-menu.ts","../../../../packages/masterteam/delegations/src/lib/delegations/topbar-delegation-menu/topbar-delegation-menu.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.html","../../../../packages/masterteam/delegations/src/store/delegations/delegations.actions.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.model.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.state.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.facade.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/scope-picker/scope-picker.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/scope-picker/scope-picker.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/delegation-form.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/delegation-form.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-detail-drawer/delegation-detail-drawer.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-detail-drawer/delegation-detail-drawer.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations-list/delegations-list.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations-list/delegations-list.html","../../../../packages/masterteam/delegations/src/interceptors/app-delegation.interceptor.ts","../../../../packages/masterteam/delegations/src/store/index.ts","../../../../packages/masterteam/delegations/src/public-api.ts","../../../../packages/masterteam/delegations/src/masterteam-delegations.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Chip } from '@masterteam/components/chip';\r\nimport { DelegationStatus } from '../../../store/delegations/delegations.model';\r\n\r\ninterface StatusVisual {\r\n i18nKey: string;\r\n styleClass: string;\r\n}\r\n\r\nconst STATUS_VISUAL: Record<DelegationStatus, StatusVisual> = {\r\n Active: {\r\n i18nKey: 'delegations.active',\r\n styleClass: 'mt-status-chip mt-status-chip--active',\r\n },\r\n Scheduled: {\r\n i18nKey: 'delegations.scheduled',\r\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\r\n },\r\n PendingApproval: {\r\n i18nKey: 'delegations.pending-approval',\r\n styleClass: 'mt-status-chip mt-status-chip--pending',\r\n },\r\n Expired: {\r\n i18nKey: 'delegations.expired',\r\n styleClass: 'mt-status-chip mt-status-chip--expired',\r\n },\r\n Rejected: {\r\n i18nKey: 'delegations.rejected',\r\n styleClass: 'mt-status-chip mt-status-chip--rejected',\r\n },\r\n Cancelled: {\r\n i18nKey: 'delegations.cancelled',\r\n styleClass: 'mt-status-chip mt-status-chip--cancelled',\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'mt-delegation-status-chip',\r\n standalone: true,\r\n imports: [Chip, TranslocoDirective],\r\n template: `\r\n <ng-container *transloco=\"let t\">\r\n @let v = visual();\r\n <mt-chip [label]=\"t(v.i18nKey)\" [styleClass]=\"v.styleClass\"></mt-chip>\r\n </ng-container>\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n display: inline-flex;\r\n }\r\n :host ::ng-deep .mt-status-chip {\r\n font-weight: 500;\r\n font-size: 0.75rem;\r\n border-radius: 9999px;\r\n padding-inline: 0.625rem;\r\n padding-block: 0.125rem;\r\n }\r\n :host ::ng-deep .mt-status-chip--active {\r\n background-color: rgb(220 252 231);\r\n color: rgb(22 101 52);\r\n }\r\n :host ::ng-deep .mt-status-chip--scheduled {\r\n background-color: rgb(219 234 254);\r\n color: rgb(30 64 175);\r\n }\r\n :host ::ng-deep .mt-status-chip--pending {\r\n background-color: rgb(254 249 195);\r\n color: rgb(133 77 14);\r\n }\r\n :host ::ng-deep .mt-status-chip--expired {\r\n background-color: rgb(243 244 246);\r\n color: rgb(75 85 99);\r\n }\r\n :host ::ng-deep .mt-status-chip--rejected {\r\n background-color: rgb(254 226 226);\r\n color: rgb(153 27 27);\r\n }\r\n :host ::ng-deep .mt-status-chip--cancelled {\r\n background-color: rgb(229 231 235);\r\n color: rgb(55 65 81);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--active {\r\n background-color: rgba(34, 197, 94, 0.2);\r\n color: rgb(134 239 172);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--scheduled {\r\n background-color: rgba(59, 130, 246, 0.2);\r\n color: rgb(147 197 253);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--pending {\r\n background-color: rgba(234, 179, 8, 0.2);\r\n color: rgb(253 224 71);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--expired {\r\n background-color: rgba(148, 163, 184, 0.2);\r\n color: rgb(203 213 225);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--rejected {\r\n background-color: rgba(239, 68, 68, 0.2);\r\n color: rgb(252 165 165);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--cancelled {\r\n background-color: rgba(148, 163, 184, 0.15);\r\n color: rgb(203 213 225);\r\n }\r\n `,\r\n ],\r\n})\r\nexport class DelegationStatusChip {\r\n readonly status = input.required<DelegationStatus>();\r\n\r\n protected readonly visual = computed<StatusVisual>(\r\n () => STATUS_VISUAL[this.status()],\r\n );\r\n}\r\n","import { DelegationSummary } from '../delegations/delegations.model';\r\n\r\n/** Reads sessionStorage + login candidates, restores any tab-local active session. */\r\nexport class BootstrapDelegationSession {\r\n static readonly type = '[DelegationSession] Bootstrap';\r\n}\r\n\r\n/** Replaces the candidate pool (called after LoginSuccess or when user.delegations changes). */\r\nexport class SetDelegationCandidates {\r\n static readonly type = '[DelegationSession] Set Candidates';\r\n constructor(public candidates: DelegationSummary[]) {}\r\n}\r\n\r\n/** Start a delegated session for the given assignment. */\r\nexport class StartDelegationSession {\r\n static readonly type = '[DelegationSession] Start';\r\n constructor(public delegationId: number) {}\r\n}\r\n\r\n/** End the current delegated session (server + local). */\r\nexport class EndDelegationSession {\r\n static readonly type = '[DelegationSession] End';\r\n constructor(public options: { silent?: boolean } = {}) {}\r\n}\r\n\r\n/** Atomically end current + start another. */\r\nexport class SwitchDelegationSession {\r\n static readonly type = '[DelegationSession] Switch';\r\n constructor(public delegationId: number) {}\r\n}\r\n\r\n/** Refresh the delegation access token via refresh-token rotation. */\r\nexport class RefreshDelegationSession {\r\n static readonly type = '[DelegationSession] Refresh';\r\n}\r\n\r\n/** Verify the current session against the server (used after bootstrap). */\r\nexport class VerifyDelegationSession {\r\n static readonly type = '[DelegationSession] Verify';\r\n}\r\n\r\n/** Surface a recoverable session error from any pipeline (e.g. 403 codes). */\r\nexport class DelegationSessionInvalidated {\r\n static readonly type = '[DelegationSession] Invalidated';\r\n constructor(\r\n public reason:\r\n | 'TokenPrincipalMismatch'\r\n | 'NotActive'\r\n | 'ScopeDenied'\r\n | 'Expired'\r\n | 'Unknown',\r\n ) {}\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\nimport {\r\n DelegationSummary,\r\n DelegationTokenPair,\r\n} from '../delegations/delegations.model';\r\n\r\nexport const DELEGATION_SESSION_STORAGE_KEY = 'mt.delegation.session.v1';\r\n\r\nexport interface ActiveDelegationSession {\r\n accessToken: string;\r\n accessTokenExpiresAtUtc: string;\r\n refreshToken: string;\r\n refreshTokenExpiresAtUtc: string;\r\n delegation: DelegationSummary;\r\n}\r\n\r\nexport function toActiveSession(\r\n pair: DelegationTokenPair,\r\n): ActiveDelegationSession {\r\n return {\r\n accessToken: pair.accessToken,\r\n accessTokenExpiresAtUtc: pair.accessTokenExpiresAtUtc,\r\n refreshToken: pair.refreshToken,\r\n refreshTokenExpiresAtUtc: pair.refreshTokenExpiresAtUtc,\r\n delegation: pair.delegation,\r\n };\r\n}\r\n\r\nexport enum DelegationSessionActionKey {\r\n Bootstrap = 'bootstrap',\r\n StartSession = 'startSession',\r\n EndSession = 'endSession',\r\n RefreshSession = 'refreshSession',\r\n GetSession = 'getSession',\r\n}\r\n\r\nexport interface DelegationSessionStateModel extends LoadingStateShape<DelegationSessionActionKey> {\r\n active: ActiveDelegationSession | null;\r\n candidates: DelegationSummary[];\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport {\r\n Action,\r\n Actions,\r\n ofActionDispatched,\r\n ofActionSuccessful,\r\n Selector,\r\n State,\r\n StateContext,\r\n Store,\r\n} from '@ngxs/store';\r\nimport { handleApiRequest } from '@masterteam/components';\r\nimport { catchError, EMPTY, switchMap } from 'rxjs';\r\nimport { Response } from '../delegations/api.model';\r\nimport {\r\n DelegationSummary,\r\n DelegationTokenPair,\r\n} from '../delegations/delegations.model';\r\nimport {\r\n BootstrapDelegationSession,\r\n DelegationSessionInvalidated,\r\n EndDelegationSession,\r\n RefreshDelegationSession,\r\n SetDelegationCandidates,\r\n StartDelegationSession,\r\n SwitchDelegationSession,\r\n VerifyDelegationSession,\r\n} from './delegation-session.actions';\r\nimport {\r\n ActiveDelegationSession,\r\n DELEGATION_SESSION_STORAGE_KEY,\r\n DelegationSessionActionKey,\r\n DelegationSessionStateModel,\r\n toActiveSession,\r\n} from './delegation-session.model';\r\n\r\nconst BASE = 'identity/delegations';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Action shells for loose coupling with gateway-auth (matched by `type` string).\r\n// ---------------------------------------------------------------------------\r\nclass GatewayLoginSuccessShell {\r\n static readonly type = '[Auth] Login Success';\r\n}\r\nclass GatewayLogoutShell {\r\n static readonly type = '[Auth] Logout';\r\n}\r\n\r\nfunction readStored(): ActiveDelegationSession | null {\r\n try {\r\n const raw = sessionStorage.getItem(DELEGATION_SESSION_STORAGE_KEY);\r\n if (!raw) return null;\r\n const parsed = JSON.parse(raw) as ActiveDelegationSession;\r\n if (!parsed?.accessToken || !parsed?.accessTokenExpiresAtUtc) return null;\r\n if (new Date(parsed.accessTokenExpiresAtUtc).getTime() < Date.now()) {\r\n sessionStorage.removeItem(DELEGATION_SESSION_STORAGE_KEY);\r\n return null;\r\n }\r\n return parsed;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction writeStored(value: ActiveDelegationSession | null): void {\r\n try {\r\n if (value) {\r\n sessionStorage.setItem(\r\n DELEGATION_SESSION_STORAGE_KEY,\r\n JSON.stringify(value),\r\n );\r\n } else {\r\n sessionStorage.removeItem(DELEGATION_SESSION_STORAGE_KEY);\r\n }\r\n } catch {\r\n /* sessionStorage may be unavailable in some embeds; ignore */\r\n }\r\n}\r\n\r\n/**\r\n * Filters a delegation list to \"candidates the user could activate\".\r\n * Active + StartSession in allowedActions is the runtime gate.\r\n */\r\nexport function pickCandidates(\r\n delegations: DelegationSummary[] | undefined | null,\r\n): DelegationSummary[] {\r\n if (!Array.isArray(delegations)) return [];\r\n return delegations.filter(\r\n (d) => d.status === 'Active' && d.allowedActions?.includes('StartSession'),\r\n );\r\n}\r\n\r\n@State<DelegationSessionStateModel>({\r\n name: 'delegationSession',\r\n defaults: {\r\n active: null,\r\n candidates: [],\r\n loadingActive: [],\r\n errors: {},\r\n },\r\n})\r\n@Injectable()\r\nexport class DelegationSessionState {\r\n private http = inject(HttpClient);\r\n private actions$ = inject(Actions);\r\n private store = inject(Store);\r\n\r\n constructor() {\r\n // ---- Bridge to gateway-auth lifecycle (loose coupling via Actions stream) ----\r\n // We use local action *shells* matching gateway-auth's type strings to avoid\r\n // a hard project dependency on @masterteam/gateway-auth. NGXS matches actions\r\n // by the static `type` field, so any class with the same type string works.\r\n this.actions$\r\n .pipe(ofActionSuccessful(GatewayLoginSuccessShell))\r\n .subscribe(() => {\r\n this.store.dispatch(new BootstrapDelegationSession());\r\n });\r\n\r\n this.actions$\r\n .pipe(ofActionDispatched(GatewayLogoutShell))\r\n .subscribe(() => {\r\n this.store.dispatch(new EndDelegationSession({ silent: true }));\r\n });\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Selectors\r\n // ---------------------------------------------------------------------------\r\n\r\n @Selector()\r\n static getActive(\r\n state: DelegationSessionStateModel,\r\n ): ActiveDelegationSession | null {\r\n return state.active;\r\n }\r\n\r\n @Selector()\r\n static getCandidates(\r\n state: DelegationSessionStateModel,\r\n ): DelegationSummary[] {\r\n return state.candidates;\r\n }\r\n\r\n @Selector()\r\n static isDelegated(state: DelegationSessionStateModel): boolean {\r\n return !!state.active;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: DelegationSessionStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: DelegationSessionStateModel,\r\n ): Record<string, string | null | undefined> {\r\n return state.errors;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Actions\r\n // ---------------------------------------------------------------------------\r\n\r\n @Action(BootstrapDelegationSession)\r\n bootstrap(ctx: StateContext<DelegationSessionStateModel>) {\r\n // 1. Hydrate active session from sessionStorage (tab-local).\r\n const stored = readStored();\r\n ctx.patchState({ active: stored });\r\n\r\n // 2. Hydrate candidates from gateway-auth user.delegations (loose lookup).\r\n const authUser = (this.store.snapshot() as Record<string, unknown>)['auth'];\r\n const userDelegations: DelegationSummary[] =\r\n (authUser as { user?: { delegations?: DelegationSummary[] } })?.user\r\n ?.delegations ?? [];\r\n ctx.patchState({ candidates: pickCandidates(userDelegations) });\r\n\r\n // 3. If we had a stored session, verify it against the server.\r\n if (stored) {\r\n this.store.dispatch(new VerifyDelegationSession());\r\n }\r\n }\r\n\r\n @Action(SetDelegationCandidates)\r\n setCandidates(\r\n ctx: StateContext<DelegationSessionStateModel>,\r\n { candidates }: SetDelegationCandidates,\r\n ) {\r\n ctx.patchState({ candidates });\r\n }\r\n\r\n @Action(VerifyDelegationSession)\r\n verify(ctx: StateContext<DelegationSessionStateModel>) {\r\n const req$ = this.http.get<Response<DelegationSummary | null>>(\r\n `${BASE}/session`,\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationSessionActionKey.GetSession,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n if (!response.data) {\r\n writeStored(null);\r\n return { active: null };\r\n }\r\n const current = ctx.getState().active;\r\n if (current && response.data.id === current.delegation.id) {\r\n // Server confirms the same delegation — keep token, just refresh summary.\r\n const updated: ActiveDelegationSession = {\r\n ...current,\r\n delegation: response.data,\r\n };\r\n writeStored(updated);\r\n return { active: updated };\r\n }\r\n // Mismatch — drop local session.\r\n writeStored(null);\r\n return { active: null };\r\n },\r\n });\r\n }\r\n\r\n @Action(StartDelegationSession)\r\n start(\r\n ctx: StateContext<DelegationSessionStateModel>,\r\n { delegationId }: StartDelegationSession,\r\n ) {\r\n const req$ = this.http.post<Response<DelegationTokenPair>>(\r\n `${BASE}/${delegationId}/token`,\r\n {},\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationSessionActionKey.StartSession,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const active = toActiveSession(response.data);\r\n writeStored(active);\r\n return { active };\r\n },\r\n });\r\n }\r\n\r\n @Action(EndDelegationSession)\r\n end(\r\n ctx: StateContext<DelegationSessionStateModel>,\r\n { options }: EndDelegationSession,\r\n ) {\r\n const state = ctx.getState();\r\n // Always clear local state immediately.\r\n writeStored(null);\r\n ctx.patchState({ active: null });\r\n\r\n if (!state.active || options.silent) {\r\n return EMPTY;\r\n }\r\n // Fire-and-forget the server end call; failures don't roll back local clear.\r\n return this.http\r\n .post<Response<void>>(`${BASE}/session/end`, {})\r\n .pipe(catchError(() => EMPTY));\r\n }\r\n\r\n @Action(SwitchDelegationSession)\r\n switch(\r\n ctx: StateContext<DelegationSessionStateModel>,\r\n { delegationId }: SwitchDelegationSession,\r\n ) {\r\n return this.store\r\n .dispatch(new EndDelegationSession({ silent: true }))\r\n .pipe(\r\n switchMap(() =>\r\n this.store.dispatch(new StartDelegationSession(delegationId)),\r\n ),\r\n );\r\n }\r\n\r\n @Action(RefreshDelegationSession)\r\n refresh(ctx: StateContext<DelegationSessionStateModel>) {\r\n const current = ctx.getState().active;\r\n if (!current) return EMPTY;\r\n const req$ = this.http.post<Response<DelegationTokenPair>>(\r\n `${BASE}/token/refresh`,\r\n { refreshToken: current.refreshToken },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationSessionActionKey.RefreshSession,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const active = toActiveSession(response.data);\r\n writeStored(active);\r\n return { active };\r\n },\r\n });\r\n }\r\n\r\n @Action(DelegationSessionInvalidated)\r\n invalidated(ctx: StateContext<DelegationSessionStateModel>) {\r\n // Same effect as EndDelegationSession({ silent: true }), but as a distinct\r\n // signal so UI can react with a toast or modal.\r\n writeStored(null);\r\n ctx.patchState({ active: null });\r\n return EMPTY;\r\n }\r\n}\r\n","import { computed, inject, Injectable } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport {\r\n BootstrapDelegationSession,\r\n DelegationSessionInvalidated,\r\n EndDelegationSession,\r\n RefreshDelegationSession,\r\n SetDelegationCandidates,\r\n StartDelegationSession,\r\n SwitchDelegationSession,\r\n VerifyDelegationSession,\r\n} from './delegation-session.actions';\r\nimport { DelegationSessionActionKey } from './delegation-session.model';\r\nimport { DelegationSessionState } from './delegation-session.state';\r\nimport { DelegationSummary } from '../delegations/delegations.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DelegationSessionFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ---------------------------------------------------------------------------\r\n // Data slices\r\n // ---------------------------------------------------------------------------\r\n readonly active = select(DelegationSessionState.getActive);\r\n readonly candidates = select(DelegationSessionState.getCandidates);\r\n readonly isDelegated = select(DelegationSessionState.isDelegated);\r\n\r\n private readonly loadingActive = select(\r\n DelegationSessionState.getLoadingActive,\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Derived (used by interceptor + topbar menu)\r\n // ---------------------------------------------------------------------------\r\n readonly delegator = computed(\r\n () => this.active()?.delegation.delegator ?? null,\r\n );\r\n readonly accessToken = computed(() => this.active()?.accessToken ?? null);\r\n readonly accessTokenExpiresAtUtc = computed(\r\n () => this.active()?.accessTokenExpiresAtUtc ?? null,\r\n );\r\n readonly hasCandidates = computed(() => this.candidates().length > 0);\r\n\r\n readonly isStartingSession = computed(() =>\r\n this.loadingActive().includes(DelegationSessionActionKey.StartSession),\r\n );\r\n readonly isEndingSession = computed(() =>\r\n this.loadingActive().includes(DelegationSessionActionKey.EndSession),\r\n );\r\n readonly isRefreshingSession = computed(() =>\r\n this.loadingActive().includes(DelegationSessionActionKey.RefreshSession),\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Dispatchers\r\n // ---------------------------------------------------------------------------\r\n bootstrap() {\r\n return this.store.dispatch(new BootstrapDelegationSession());\r\n }\r\n setCandidates(candidates: DelegationSummary[]) {\r\n return this.store.dispatch(new SetDelegationCandidates(candidates));\r\n }\r\n startSession(delegationId: number) {\r\n return this.store.dispatch(new StartDelegationSession(delegationId));\r\n }\r\n endSession(opts: { silent?: boolean } = {}) {\r\n return this.store.dispatch(new EndDelegationSession(opts));\r\n }\r\n switchSession(delegationId: number) {\r\n return this.store.dispatch(new SwitchDelegationSession(delegationId));\r\n }\r\n refreshSession() {\r\n return this.store.dispatch(new RefreshDelegationSession());\r\n }\r\n verifySession() {\r\n return this.store.dispatch(new VerifyDelegationSession());\r\n }\r\n invalidate(\r\n reason:\r\n | 'TokenPrincipalMismatch'\r\n | 'NotActive'\r\n | 'ScopeDenied'\r\n | 'Expired'\r\n | 'Unknown' = 'Unknown',\r\n ) {\r\n return this.store.dispatch(new DelegationSessionInvalidated(reason));\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\r\nimport { DelegationSummary } from '../../../store/delegations/delegations.model';\r\n\r\n/**\r\n * Confirmation dialog opened by the topbar menu before starting (or switching to)\r\n * a delegated session. Calls the facade and closes itself on success.\r\n */\r\n@Component({\r\n selector: 'mt-start-session-dialog',\r\n standalone: true,\r\n imports: [CommonModule, Avatar, Button, TranslocoDirective],\r\n templateUrl: './start-session-dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class StartSessionDialog {\r\n readonly candidate = input.required<DelegationSummary>();\r\n readonly intent = input<'start' | 'switch'>('start');\r\n\r\n private readonly ref: ModalRef = inject(ModalRef);\r\n private readonly facade = inject(DelegationSessionFacade);\r\n\r\n protected readonly isBusy = computed(\r\n () => this.facade.isStartingSession() || this.facade.isEndingSession(),\r\n );\r\n\r\n protected readonly title = computed(() =>\r\n this.intent() === 'switch'\r\n ? 'delegations.switch-session-confirm-title'\r\n : 'delegations.start-session-confirm-title',\r\n );\r\n\r\n protected readonly body = computed(() =>\r\n this.intent() === 'switch'\r\n ? 'delegations.switch-session-confirm-body'\r\n : 'delegations.start-session-confirm-body',\r\n );\r\n\r\n confirm(): void {\r\n const id = this.candidate().id;\r\n const op$ =\r\n this.intent() === 'switch'\r\n ? this.facade.switchSession(id)\r\n : this.facade.startSession(id);\r\n op$.subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => {\r\n /* facade publishes the error to the toast pipeline; just stay open */\r\n },\r\n });\r\n }\r\n\r\n cancel(): void {\r\n this.ref.close(false);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"flex flex-col gap-4 p-2\">\r\n <div class=\"flex items-start gap-3\">\r\n <mt-avatar\r\n [image]=\"candidate().delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-12! h-12! text-lg! bg-surface-200!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <div class=\"text-base font-medium text-gray-900 truncate\">\r\n {{ candidate().delegator.displayName }}\r\n </div>\r\n @if (candidate().delegator.email) {\r\n <div class=\"text-xs text-gray-500 truncate\">\r\n {{ candidate().delegator.email }}\r\n </div>\r\n }\r\n @if (candidate().scopeSummary) {\r\n <div class=\"text-xs text-gray-500 mt-1\">\r\n {{ t(\"delegations.scope\") }}: {{ candidate().scopeSummary }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <p class=\"text-sm text-gray-600 leading-relaxed\">\r\n {{ t(body()) }}\r\n </p>\r\n\r\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\r\n <mt-button\r\n variant=\"outlined\"\r\n color=\"secondary\"\r\n [label]=\"t('cancel')\"\r\n [disabled]=\"isBusy()\"\r\n (click)=\"cancel()\"\r\n ></mt-button>\r\n <mt-button\r\n color=\"primary\"\r\n icon=\"user.users-check\"\r\n [label]=\"\r\n intent() === 'switch'\r\n ? t('delegations.switch-session')\r\n : t('delegations.start-session')\r\n \"\r\n [loading]=\"isBusy()\"\r\n (click)=\"confirm()\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { Popover } from 'primeng/popover';\r\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\r\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\r\nimport { DelegationSummary } from '../../../store/delegations/delegations.model';\r\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\r\n\r\n/**\r\n * Topbar surface for the delegation runtime.\r\n *\r\n * State A — no candidates, no active session: renders nothing.\r\n * State B — candidates exist, no active session: shows a \"Switch identity\" affordance.\r\n * State C — active delegation session: shows the delegator name + back/switch.\r\n *\r\n * Designed to be projected into a host topbar's `[actions]` slot (alongside the\r\n * existing user popover) — it does NOT replace the user dropdown.\r\n */\r\n@Component({\r\n selector: 'mt-topbar-delegation-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Avatar,\r\n Button,\r\n Icon,\r\n Popover,\r\n RouterLink,\r\n TranslocoDirective,\r\n DelegationStatusChip,\r\n ],\r\n templateUrl: './topbar-delegation-menu.html',\r\n styleUrls: ['./topbar-delegation-menu.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TopbarDelegationMenu {\r\n /** Path to the management page, e.g. `/control-panel/delegations` or `/delegations`. */\r\n readonly managePath = input<string>('/delegations');\r\n\r\n /** Compact mode hides the inline delegator name next to the button. */\r\n readonly compact = input<boolean>(false);\r\n\r\n private readonly facade = inject(DelegationSessionFacade);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n protected readonly popover = viewChild.required<Popover>('popover');\r\n\r\n protected readonly active = this.facade.active;\r\n protected readonly candidates = this.facade.candidates;\r\n protected readonly hasCandidates = this.facade.hasCandidates;\r\n protected readonly isStarting = this.facade.isStartingSession;\r\n protected readonly isEnding = this.facade.isEndingSession;\r\n\r\n protected readonly delegatorName = computed(\r\n () => this.active()?.delegation.delegator.displayName ?? '',\r\n );\r\n\r\n /** State machine: which UI to render. */\r\n protected readonly mode = computed<'hidden' | 'candidates' | 'active'>(() => {\r\n if (this.active()) return 'active';\r\n if (this.hasCandidates()) return 'candidates';\r\n return 'hidden';\r\n });\r\n\r\n togglePopover(event: Event): void {\r\n this.popover().toggle(event);\r\n }\r\n\r\n startCandidate(candidate: DelegationSummary, event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.popover().hide();\r\n this.openConfirmation(candidate, 'start');\r\n }\r\n\r\n switchTo(candidate: DelegationSummary, event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.popover().hide();\r\n this.openConfirmation(candidate, 'switch');\r\n }\r\n\r\n endSession(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.popover().hide();\r\n this.facade.endSession().subscribe();\r\n }\r\n\r\n private openConfirmation(\r\n candidate: DelegationSummary,\r\n intent: 'start' | 'switch',\r\n ): void {\r\n this.modal.openModal(StartSessionDialog, 'dialog', {\r\n header: this.transloco.translate(\r\n intent === 'switch'\r\n ? 'delegations.switch-session'\r\n : 'delegations.start-session',\r\n ),\r\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n candidate,\r\n intent,\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n @if (mode() !== \"hidden\") {\r\n <div class=\"mt-delegation-trigger flex items-center gap-2\">\r\n <button\r\n type=\"button\"\r\n class=\"mt-delegation-trigger__button flex items-center gap-2 px-2 py-1 rounded-full cursor-pointer hover:bg-surface-100\"\r\n [attr.aria-label]=\"t('delegations.delegation-menu')\"\r\n (click)=\"togglePopover($event)\"\r\n >\r\n @if (mode() === \"active\") {\r\n <mt-icon\r\n icon=\"user.users-check\"\r\n styleClass=\"text-lg text-primary\"\r\n ></mt-icon>\r\n @if (!compact()) {\r\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\r\n {{ t(\"delegations.acting-on-behalf-of\") }}: {{ delegatorName() }}\r\n </span>\r\n }\r\n <mt-delegation-status-chip\r\n status=\"Active\"\r\n ></mt-delegation-status-chip>\r\n } @else {\r\n <mt-icon\r\n icon=\"user.users-plus\"\r\n styleClass=\"text-lg text-primary\"\r\n ></mt-icon>\r\n @if (!compact()) {\r\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\r\n {{ t(\"delegations.delegations-available\") }}\r\n </span>\r\n }\r\n }\r\n </button>\r\n </div>\r\n\r\n <p-popover #popover [pt]=\"{ content: { class: 'p-0!' } }\">\r\n <div class=\"flex flex-col min-w-80 max-w-96 p-0\">\r\n @if (mode() === \"active\" && active(); as session) {\r\n <!-- ============================================================ -->\r\n <!-- STATE C — active session -->\r\n <!-- ============================================================ -->\r\n <div\r\n class=\"flex items-start gap-3 border-b border-gray-200 px-4 py-4\"\r\n >\r\n <mt-avatar\r\n [image]=\"session.delegation.delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-11! h-11! text-xl! text-gray-600! bg-surface-300!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <div class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.acting-on-behalf-of\") }}\r\n </div>\r\n <div class=\"text-sm font-medium text-gray-900 truncate\">\r\n {{ session.delegation.delegator.displayName }}\r\n </div>\r\n @if (session.delegation.scopeSummary) {\r\n <div\r\n class=\"text-xs text-gray-500 mt-1 truncate\"\r\n [title]=\"session.delegation.scopeSummary\"\r\n >\r\n {{ t(\"delegations.scope\") }}:\r\n {{ session.delegation.scopeSummary }}\r\n </div>\r\n }\r\n <div class=\"text-xs text-gray-400 mt-1\">\r\n {{ t(\"delegations.session-ends-at\") }}:\r\n {{ session.accessTokenExpiresAtUtc | date: \"short\" }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-1 px-2 py-2\">\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"arrow.arrow-left\"\r\n [label]=\"t('delegations.back-to-my-session')\"\r\n [loading]=\"isEnding()\"\r\n styleClass=\"w-full justify-start\"\r\n (click)=\"endSession($event)\"\r\n ></mt-button>\r\n </div>\r\n\r\n @if (candidates().length > 1) {\r\n <div class=\"border-t border-gray-200 pt-2 px-2 pb-2\">\r\n <div class=\"text-xs text-gray-500 px-2 pb-1\">\r\n {{ t(\"delegations.switch-to-another\") }}\r\n </div>\r\n @for (cand of candidates(); track cand.id) {\r\n @if (cand.id !== session.delegation.id) {\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer\"\r\n (click)=\"switchTo(cand, $event)\"\r\n >\r\n <div class=\"flex items-center gap-2 min-w-0\">\r\n <mt-avatar\r\n [image]=\"cand.delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-7! h-7! text-sm! bg-surface-200!\"\r\n ></mt-avatar>\r\n <span class=\"text-sm text-gray-900 truncate\">\r\n {{ cand.delegator.displayName }}\r\n </span>\r\n </div>\r\n <mt-icon\r\n icon=\"arrow.switch-horizontal-01\"\r\n styleClass=\"text-base text-gray-400\"\r\n ></mt-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n } @else if (mode() === \"candidates\") {\r\n <!-- ============================================================ -->\r\n <!-- STATE B — candidates available, no active session -->\r\n <!-- ============================================================ -->\r\n <div class=\"border-b border-gray-200 px-4 py-3\">\r\n <div class=\"text-sm font-medium text-gray-900\">\r\n {{ t(\"delegations.you-can-act-as\") }}\r\n </div>\r\n <div class=\"text-xs text-gray-500 mt-1\">\r\n {{ t(\"delegations.choose-delegator-hint\") }}\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col gap-1 px-2 py-2 max-h-72 overflow-y-auto\">\r\n @for (cand of candidates(); track cand.id) {\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer text-start\"\r\n (click)=\"startCandidate(cand, $event)\"\r\n >\r\n <div class=\"flex items-center gap-2 min-w-0 flex-1\">\r\n <mt-avatar\r\n [image]=\"cand.delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-9! h-9! text-base! bg-surface-200!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span class=\"text-sm font-medium text-gray-900 truncate\">\r\n {{ cand.delegator.displayName }}\r\n </span>\r\n @if (cand.scopeSummary) {\r\n <span\r\n class=\"text-xs text-gray-500 truncate\"\r\n [title]=\"cand.scopeSummary\"\r\n >\r\n {{ cand.scopeSummary }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n <mt-icon\r\n icon=\"arrow.arrow-right\"\r\n styleClass=\"text-base text-gray-400\"\r\n ></mt-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Footer (always shown when popover renders) -->\r\n <div class=\"border-t border-gray-200 px-2 py-2\">\r\n <a\r\n [routerLink]=\"managePath()\"\r\n (click)=\"popover().hide()\"\r\n class=\"flex items-center gap-2 px-3 py-2 rounded-md text-gray-700 hover:bg-surface-100 text-sm cursor-pointer\"\r\n >\r\n <mt-icon\r\n icon=\"general.settings-02\"\r\n styleClass=\"text-base\"\r\n ></mt-icon>\r\n <span>{{ t(\"delegations.manage-delegations\") }}</span>\r\n </a>\r\n </div>\r\n </div>\r\n </p-popover>\r\n }\r\n</ng-container>\r\n","import { Component, inject } from '@angular/core';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Page } from '@masterteam/components/page';\n\n@Component({\n selector: 'mt-delegations',\n imports: [Page, RouterOutlet, TranslocoDirective],\n templateUrl: './delegations.html',\n styleUrl: './delegations.css',\n})\nexport default class Delegations {\n private readonly router = inject(Router);\n\n goBack() {\n this.router.navigate(['control-panel/product-settings']);\n }\n}\n","<ng-container *transloco=\"let t\">\n <mt-page\n [title]=\"t('delegations.delegations')\"\n [avatarIcon]=\"'custom.hierarchy-structure'\"\n [contentClass]=\"'max-[1025px]:p-4 max-[640px]:p-3'\"\n [avatarStyle]=\"{\n '--p-avatar-background': 'var(--p-indigo-50)',\n '--p-avatar-color': 'var(--p-indigo-700)',\n }\"\n (backButtonClick)=\"goBack()\"\n backButton\n >\n <router-outlet />\n </mt-page>\n</ng-container>\n","import {\r\n ApproveDelegationRequest,\r\n CancelDelegationRequest,\r\n CreateDelegationRequest,\r\n DelegationListQuery,\r\n DelegationScopeRequest,\r\n RejectDelegationRequest,\r\n UpdateDelegationRequest,\r\n} from './delegations.model';\r\n\r\n// ---------------------------------------------------------------------------\r\n// List / detail\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class GetMyDelegations {\r\n static readonly type = '[Delegations] Get My Delegations';\r\n constructor(public query: DelegationListQuery = {}) {}\r\n}\r\n\r\nexport class GetAssignedDelegations {\r\n static readonly type = '[Delegations] Get Assigned Delegations';\r\n constructor(public query: DelegationListQuery = {}) {}\r\n}\r\n\r\nexport class GetDelegation {\r\n static readonly type = '[Delegations] Get Delegation';\r\n constructor(\r\n public id: number,\r\n public includeStatusHistory: boolean = false,\r\n ) {}\r\n}\r\n\r\nexport class ClearSelectedDelegation {\r\n static readonly type = '[Delegations] Clear Selected Delegation';\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Lifecycle\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class CreateDelegation {\r\n static readonly type = '[Delegations] Create Delegation';\r\n constructor(public request: CreateDelegationRequest) {}\r\n}\r\n\r\nexport class UpdateDelegation {\r\n static readonly type = '[Delegations] Update Delegation';\r\n constructor(\r\n public id: number,\r\n public request: UpdateDelegationRequest,\r\n ) {}\r\n}\r\n\r\nexport class ApproveDelegation {\r\n static readonly type = '[Delegations] Approve Delegation';\r\n constructor(\r\n public id: number,\r\n public request: ApproveDelegationRequest,\r\n ) {}\r\n}\r\n\r\nexport class RejectDelegation {\r\n static readonly type = '[Delegations] Reject Delegation';\r\n constructor(\r\n public id: number,\r\n public request: RejectDelegationRequest,\r\n ) {}\r\n}\r\n\r\nexport class CancelDelegation {\r\n static readonly type = '[Delegations] Cancel Delegation';\r\n constructor(\r\n public id: number,\r\n public request: CancelDelegationRequest,\r\n ) {}\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Scope picker (form support)\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class GetScopeOptions {\r\n static readonly type = '[Delegations] Get Scope Options';\r\n /** Admin-only override; ignored for normal users. */\r\n constructor(public delegatorUserId?: string) {}\r\n}\r\n\r\nexport class PreviewScope {\r\n static readonly type = '[Delegations] Preview Scope';\r\n constructor(public scope: DelegationScopeRequest) {}\r\n}\r\n\r\nexport class ClearScopePreview {\r\n static readonly type = '[Delegations] Clear Scope Preview';\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\n// ============================================================================\r\n// Status / approval / activation / allowed actions\r\n// ============================================================================\r\n\r\nexport type DelegationStatus =\r\n | 'PendingApproval'\r\n | 'Scheduled'\r\n | 'Active'\r\n | 'Expired'\r\n | 'Rejected'\r\n | 'Cancelled';\r\n\r\nexport type DelegationApprovalStatus =\r\n | 'NotRequired'\r\n | 'Pending'\r\n | 'Approved'\r\n | 'Rejected';\r\n\r\nexport type DelegationActivationState =\r\n | 'ApprovalRequired'\r\n | 'NotStarted'\r\n | 'OutsideAllowedDay'\r\n | 'Started';\r\n\r\nexport type DelegationAllowedAction =\r\n | 'View'\r\n | 'Edit'\r\n | 'Cancel'\r\n | 'Approve'\r\n | 'Reject'\r\n | 'GenerateToken'\r\n | 'StartSession'\r\n | 'Clone';\r\n\r\n// ============================================================================\r\n// Primitives\r\n// ============================================================================\r\n\r\nexport interface DelegationUser {\r\n id: string;\r\n displayName: string;\r\n email?: string;\r\n photo?: string;\r\n}\r\n\r\nexport interface DelegationDayRules {\r\n type: 'FullRange' | 'SpecificDays';\r\n specificDays: number[];\r\n specificDayLabels?: string[];\r\n}\r\n\r\nexport interface DelegationApprovalMeta {\r\n status: DelegationApprovalStatus;\r\n approvedBy?: DelegationUser | null;\r\n approvedAtUtc?: string | null;\r\n rejectedBy?: DelegationUser | null;\r\n rejectedAtUtc?: string | null;\r\n rejectionReason?: string | null;\r\n}\r\n\r\nexport interface DelegationCancellationMeta {\r\n cancelledBy?: DelegationUser | null;\r\n cancelledAtUtc?: string | null;\r\n cancellationReason?: string | null;\r\n}\r\n\r\n// ============================================================================\r\n// Scope\r\n// ============================================================================\r\n\r\nexport type DelegationTargetType =\r\n | 'Level'\r\n | 'LevelModule'\r\n | 'ServiceModule'\r\n | 'ProcessStep'\r\n | 'Report'\r\n | 'SystemAction';\r\n\r\nexport type DelegationPermissionModuleType = 'Level' | 'LevelModule';\r\n\r\nexport type DelegationReadPolicy =\r\n | 'ImplicitReadForSelectedActions'\r\n | 'ExplicitReadOnly'\r\n | 'NoReadUnlessOwnPermission';\r\n\r\nexport interface DelegationScopeOperation {\r\n operationKey: string;\r\n permissionCommand: string;\r\n displayName: string;\r\n isHighRisk?: boolean;\r\n}\r\n\r\nexport interface DelegationScopeTarget {\r\n targetType: DelegationTargetType;\r\n targetId?: number;\r\n displayName: string;\r\n levelId?: number;\r\n levelName?: string;\r\n levelModuleId?: number;\r\n domainModuleId?: number;\r\n moduleKey: string;\r\n moduleName?: string;\r\n permissionModuleType?: DelegationPermissionModuleType;\r\n permissionTargetId?: number;\r\n operations: DelegationScopeOperation[];\r\n dataFilter?: unknown;\r\n constraints?: unknown;\r\n}\r\n\r\nexport interface DelegationScopeAccessibility {\r\n appAccessibilityId: number;\r\n accessibilityGroupId: number;\r\n moduleKey: string;\r\n moduleName: string;\r\n groupName: string;\r\n}\r\n\r\nexport interface DelegationScopeWarning {\r\n code: string;\r\n message: string;\r\n}\r\n\r\nexport interface DelegationScope {\r\n mode: 'Explicit';\r\n summary: string;\r\n readPolicy: DelegationReadPolicy;\r\n accessibilities: DelegationScopeAccessibility[];\r\n targets: DelegationScopeTarget[];\r\n warnings: DelegationScopeWarning[];\r\n}\r\n\r\n// ============================================================================\r\n// Scope options / preview (form picker)\r\n// ============================================================================\r\n\r\nexport interface DelegationScopeOperationOption {\r\n operationKey: string;\r\n permissionCommand: string;\r\n displayName: string;\r\n isDelegable: boolean;\r\n isHighRisk?: boolean;\r\n reason?: string;\r\n}\r\n\r\nexport interface DelegationScopeTargetOption {\r\n targetType: DelegationTargetType;\r\n targetId?: number;\r\n displayName: string;\r\n levelId?: number;\r\n levelName?: string;\r\n levelModuleId?: number;\r\n domainModuleId?: number;\r\n moduleKey: string;\r\n moduleName?: string;\r\n permissionModuleType?: DelegationPermissionModuleType;\r\n permissionTargetId?: number;\r\n operations: DelegationScopeOperationOption[];\r\n}\r\n\r\nexport interface DelegationScopeAccessibilityOption {\r\n appAccessibilityId: number;\r\n moduleKey: string;\r\n moduleName: string;\r\n groups: { accessibilityGroupId: number; name: string }[];\r\n}\r\n\r\nexport interface DelegationScopeReadPolicyOption {\r\n key: DelegationReadPolicy;\r\n isDefault: boolean;\r\n}\r\n\r\nexport interface DelegationScopePreset {\r\n key: string;\r\n displayName: string;\r\n description: string;\r\n}\r\n\r\nexport interface DelegationScopeOptions {\r\n delegator: DelegationUser;\r\n scopeModes: 'Explicit'[];\r\n readPolicies: DelegationScopeReadPolicyOption[];\r\n accessibilities: DelegationScopeAccessibilityOption[];\r\n targets: DelegationScopeTargetOption[];\r\n recommendedPresets: DelegationScopePreset[];\r\n}\r\n\r\nexport interface DelegationScopeRequestTargetOperation {\r\n operationKey: string;\r\n permissionCommand: string;\r\n}\r\n\r\nexport interface DelegationScopeRequestTarget {\r\n targetType: DelegationTargetType;\r\n targetId?: number;\r\n levelId?: number;\r\n levelModuleId?: number;\r\n domainModuleId?: number;\r\n moduleKey: string;\r\n permissionModuleType?: DelegationPermissionModuleType;\r\n permissionTargetId?: number;\r\n operations: DelegationScopeRequestTargetOperation[];\r\n dataFilter?: unknown;\r\n constraints?: unknown;\r\n}\r\n\r\nexport interface DelegationScopeRequest {\r\n mode: 'Explicit';\r\n readPolicy: DelegationReadPolicy;\r\n accessibilityGroupIds: number[];\r\n targets: DelegationScopeRequestTarget[];\r\n}\r\n\r\nexport interface DelegationScopePreviewDeniedItem {\r\n targetType: DelegationTargetType;\r\n targetId?: number;\r\n operationKey: string;\r\n permissionCommand: string;\r\n reasonCode: string;\r\n message: string;\r\n}\r\n\r\nexport interface DelegationScopePreview {\r\n isValid: boolean;\r\n normalizedScope?: DelegationScope;\r\n summary?: string | null;\r\n warnings: DelegationScopeWarning[];\r\n deniedItems: DelegationScopePreviewDeniedItem[];\r\n}\r\n\r\n// ============================================================================\r\n// Delegation record + summary\r\n// ============================================================================\r\n\r\nexport interface Delegation {\r\n id: number;\r\n delegator: DelegationUser;\r\n delegatedUser: DelegationUser;\r\n description?: string;\r\n startDateUtc: string;\r\n endDateUtc: string;\r\n timeZoneId: string;\r\n dayRules: DelegationDayRules;\r\n status: DelegationStatus;\r\n statusReason: string;\r\n activationState: DelegationActivationState;\r\n isUsableNow: boolean;\r\n requiresApproval: boolean;\r\n approval: DelegationApprovalMeta;\r\n cancellation: DelegationCancellationMeta;\r\n createdBy: DelegationUser;\r\n createdAtUtc: string;\r\n updatedBy?: DelegationUser | null;\r\n updatedAtUtc?: string | null;\r\n allowedActions: DelegationAllowedAction[];\r\n scope: DelegationScope;\r\n token: { canGenerate: boolean; reason?: string };\r\n rowVersion: string;\r\n calculatedAtUtc: string;\r\n}\r\n\r\nexport interface DelegationStatusHistoryEntry {\r\n id: number;\r\n fromStatus?: DelegationStatus | null;\r\n toStatus: DelegationStatus;\r\n fromApprovalStatus?: DelegationApprovalStatus | null;\r\n toApprovalStatus?: DelegationApprovalStatus | null;\r\n actor: DelegationUser;\r\n action: string;\r\n reason?: string | null;\r\n createdAtUtc: string;\r\n}\r\n\r\nexport interface DelegationDetail extends Delegation {\r\n statusHistory?: DelegationStatusHistoryEntry[];\r\n}\r\n\r\n/** Minimal shape returned by login + topbar candidate listing. */\r\nexport interface DelegationSummary {\r\n id: number;\r\n delegator: DelegationUser;\r\n delegatedUser: DelegationUser;\r\n status: DelegationStatus;\r\n allowedActions: DelegationAllowedAction[];\r\n startDateUtc: string;\r\n endDateUtc: string;\r\n scopeSummary?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Requests / pagination\r\n// ============================================================================\r\n\r\nexport interface DelegationListQuery {\r\n page?: number;\r\n pageSize?: number;\r\n status?: DelegationStatus[];\r\n q?: string;\r\n startFrom?: string;\r\n startTo?: string;\r\n endFrom?: string;\r\n endTo?: string;\r\n activeOn?: string;\r\n approvalStatus?: DelegationApprovalStatus;\r\n moduleId?: number;\r\n accessibilityGroupId?: number;\r\n sortBy?:\r\n | 'createdAt'\r\n | 'startDate'\r\n | 'endDate'\r\n | 'status'\r\n | 'delegatorName'\r\n | 'delegatedUserName';\r\n sortDir?: 'asc' | 'desc';\r\n}\r\n\r\nexport interface PagedResult<T> {\r\n items: T[];\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPreviousPage: boolean;\r\n serverTimeUtc: string;\r\n}\r\n\r\nexport interface CreateDelegationRequest {\r\n delegatedUserId: string;\r\n description?: string;\r\n startDateUtc: string;\r\n endDateUtc: string;\r\n timeZoneId: string;\r\n dayRules: DelegationDayRules;\r\n requiresApproval: boolean;\r\n scope: DelegationScopeRequest;\r\n}\r\n\r\nexport interface UpdateDelegationRequest {\r\n rowVersion: string;\r\n description?: string;\r\n startDateUtc: string;\r\n endDateUtc: string;\r\n timeZoneId: string;\r\n dayRules: DelegationDayRules;\r\n requiresApproval?: boolean;\r\n scope: DelegationScopeRequest;\r\n}\r\n\r\nexport interface ApproveDelegationRequest {\r\n rowVersion: string;\r\n comment?: string;\r\n}\r\n\r\nexport interface RejectDelegationRequest {\r\n rowVersion: string;\r\n reason: string;\r\n}\r\n\r\nexport interface CancelDelegationRequest {\r\n rowVersion: string;\r\n reason: string;\r\n}\r\n\r\n// ============================================================================\r\n// Tokens / session\r\n// ============================================================================\r\n\r\nexport interface DelegationTokenPair {\r\n accessToken: string;\r\n accessTokenExpiresAtUtc: string;\r\n refreshToken: string;\r\n refreshTokenExpiresAtUtc: string;\r\n delegation: DelegationSummary;\r\n}\r\n\r\n// ============================================================================\r\n// NGXS state shape + action keys\r\n// ============================================================================\r\n\r\nexport enum DelegationsActionKey {\r\n GetMyDelegations = 'getMyDelegations',\r\n GetAssignedDelegations = 'getAssignedDelegations',\r\n GetDelegation = 'getDelegation',\r\n CreateDelegation = 'createDelegation',\r\n UpdateDelegation = 'updateDelegation',\r\n ApproveDelegation = 'approveDelegation',\r\n RejectDelegation = 'rejectDelegation',\r\n CancelDelegation = 'cancelDelegation',\r\n GetScopeOptions = 'getScopeOptions',\r\n PreviewScope = 'previewScope',\r\n}\r\n\r\nexport interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {\r\n my: PagedResult<Delegation> | null;\r\n assigned: PagedResult<Delegation> | null;\r\n selected: DelegationDetail | null;\r\n scopeOptions: DelegationScopeOptions | null;\r\n scopePreview: DelegationScopePreview | null;\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { handleApiRequest } from '@masterteam/components';\r\nimport { Response } from './api.model';\r\nimport {\r\n ApproveDelegation,\r\n CancelDelegation,\r\n ClearScopePreview,\r\n ClearSelectedDelegation,\r\n CreateDelegation,\r\n GetAssignedDelegations,\r\n GetDelegation,\r\n GetMyDelegations,\r\n GetScopeOptions,\r\n PreviewScope,\r\n RejectDelegation,\r\n UpdateDelegation,\r\n} from './delegations.actions';\r\nimport {\r\n Delegation,\r\n DelegationDetail,\r\n DelegationListQuery,\r\n DelegationScopeOptions,\r\n DelegationScopePreview,\r\n DelegationsActionKey,\r\n DelegationsStateModel,\r\n PagedResult,\r\n} from './delegations.model';\r\n\r\nconst BASE = 'identity/delegations';\r\n\r\nfunction buildListParams(query: DelegationListQuery): HttpParams {\r\n let params = new HttpParams();\r\n if (query.page != null) params = params.set('page', query.page);\r\n if (query.pageSize != null) params = params.set('pageSize', query.pageSize);\r\n if (query.q) params = params.set('q', query.q);\r\n if (query.startFrom) params = params.set('startFrom', query.startFrom);\r\n if (query.startTo) params = params.set('startTo', query.startTo);\r\n if (query.endFrom) params = params.set('endFrom', query.endFrom);\r\n if (query.endTo) params = params.set('endTo', query.endTo);\r\n if (query.activeOn) params = params.set('activeOn', query.activeOn);\r\n if (query.approvalStatus)\r\n params = params.set('approvalStatus', query.approvalStatus);\r\n if (query.moduleId != null) params = params.set('moduleId', query.moduleId);\r\n if (query.accessibilityGroupId != null)\r\n params = params.set('accessibilityGroupId', query.accessibilityGroupId);\r\n if (query.sortBy) params = params.set('sortBy', query.sortBy);\r\n if (query.sortDir) params = params.set('sortDir', query.sortDir);\r\n if (query.status?.length) {\r\n for (const s of query.status) {\r\n params = params.append('status', s);\r\n }\r\n }\r\n return params;\r\n}\r\n\r\nfunction replaceInPage(\r\n page: PagedResult<Delegation> | null,\r\n updated: Delegation,\r\n): PagedResult<Delegation> | null {\r\n if (!page) return page;\r\n const idx = page.items.findIndex((it) => it.id === updated.id);\r\n if (idx === -1) return page;\r\n const items = page.items.slice();\r\n items[idx] = updated;\r\n return { ...page, items };\r\n}\r\n\r\n@State<DelegationsStateModel>({\r\n name: 'delegations',\r\n defaults: {\r\n my: null,\r\n assigned: null,\r\n selected: null,\r\n scopeOptions: null,\r\n scopePreview: null,\r\n loadingActive: [],\r\n errors: {},\r\n },\r\n})\r\n@Injectable()\r\nexport class DelegationsState {\r\n private http = inject(HttpClient);\r\n\r\n // ============================================================================\r\n // Selectors\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getMyPage(\r\n state: DelegationsStateModel,\r\n ): PagedResult<Delegation> | null {\r\n return state.my;\r\n }\r\n\r\n @Selector()\r\n static getAssignedPage(\r\n state: DelegationsStateModel,\r\n ): PagedResult<Delegation> | null {\r\n return state.assigned;\r\n }\r\n\r\n @Selector()\r\n static getSelected(state: DelegationsStateModel): DelegationDetail | null {\r\n return state.selected;\r\n }\r\n\r\n @Selector()\r\n static getScopeOptions(\r\n state: DelegationsStateModel,\r\n ): DelegationScopeOptions | null {\r\n return state.scopeOptions;\r\n }\r\n\r\n @Selector()\r\n static getScopePreview(\r\n state: DelegationsStateModel,\r\n ): DelegationScopePreview | null {\r\n return state.scopePreview;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: DelegationsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: DelegationsStateModel,\r\n ): Record<string, string | null | undefined> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // List\r\n // ============================================================================\r\n\r\n @Action(GetMyDelegations)\r\n getMyDelegations(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { query }: GetMyDelegations,\r\n ) {\r\n const req$ = this.http.get<Response<PagedResult<Delegation>>>(\r\n `${BASE}/my`,\r\n {\r\n params: buildListParams(query),\r\n },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetMyDelegations,\r\n request$: req$,\r\n onSuccess: (response) => ({ my: response.data }),\r\n });\r\n }\r\n\r\n @Action(GetAssignedDelegations)\r\n getAssignedDelegations(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { query }: GetAssignedDelegations,\r\n ) {\r\n const req$ = this.http.get<Response<PagedResult<Delegation>>>(\r\n `${BASE}/assigned`,\r\n { params: buildListParams(query) },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetAssignedDelegations,\r\n request$: req$,\r\n onSuccess: (response) => ({ assigned: response.data }),\r\n });\r\n }\r\n\r\n @Action(GetDelegation)\r\n getDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, includeStatusHistory }: GetDelegation,\r\n ) {\r\n let params = new HttpParams();\r\n if (includeStatusHistory) {\r\n params = params.set('include', 'statusHistory');\r\n }\r\n const req$ = this.http.get<Response<DelegationDetail>>(`${BASE}/${id}`, {\r\n params,\r\n });\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetDelegation,\r\n request$: req$,\r\n onSuccess: (response) => ({ selected: response.data ?? null }),\r\n });\r\n }\r\n\r\n @Action(ClearSelectedDelegation)\r\n clearSelectedDelegation(ctx: StateContext<DelegationsStateModel>) {\r\n ctx.patchState({ selected: null });\r\n }\r\n\r\n // ============================================================================\r\n // Lifecycle\r\n // ============================================================================\r\n\r\n @Action(CreateDelegation)\r\n createDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { request }: CreateDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(BASE, request);\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.CreateDelegation,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const created = response.data;\r\n const state = ctx.getState();\r\n return {\r\n my: state.my\r\n ? { ...state.my, items: [created, ...state.my.items] }\r\n : state.my,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateDelegation)\r\n updateDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: UpdateDelegation,\r\n ) {\r\n const req$ = this.http.put<Response<Delegation>>(`${BASE}/${id}`, request);\r\n return this.applyLifecycleResult(\r\n ctx,\r\n DelegationsActionKey.UpdateDelegation,\r\n req$,\r\n );\r\n }\r\n\r\n @Action(ApproveDelegation)\r\n approveDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: ApproveDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(\r\n `${BASE}/${id}/approve`,\r\n request,\r\n );\r\n return this.applyLifecycleResult(\r\n ctx,\r\n DelegationsActionKey.ApproveDelegation,\r\n req$,\r\n );\r\n }\r\n\r\n @Action(RejectDelegation)\r\n rejectDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: RejectDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(\r\n `${BASE}/${id}/reject`,\r\n request,\r\n );\r\n return this.applyLifecycleResult(\r\n ctx,\r\n DelegationsActionKey.RejectDelegation,\r\n req$,\r\n );\r\n }\r\n\r\n @Action(CancelDelegation)\r\n cancelDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: CancelDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(\r\n `${BASE}/${id}/cancel`,\r\n request,\r\n );\r\n return this.applyLifecycleResult(\r\n ctx,\r\n DelegationsActionKey.CancelDelegation,\r\n req$,\r\n );\r\n }\r\n\r\n // ============================================================================\r\n // Scope (options + preview)\r\n // ============================================================================\r\n\r\n @Action(GetScopeOptions)\r\n getScopeOptions(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { delegatorUserId }: GetScopeOptions,\r\n ) {\r\n let params = new HttpParams();\r\n if (delegatorUserId)\r\n params = params.set('delegatorUserId', delegatorUserId);\r\n const url = delegatorUserId\r\n ? `identity/admin/delegations/scope/options`\r\n : `${BASE}/scope/options`;\r\n const req$ = this.http.get<Response<DelegationScopeOptions>>(url, {\r\n params,\r\n });\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetScopeOptions,\r\n request$: req$,\r\n onSuccess: (response) => ({ scopeOptions: response.data ?? null }),\r\n });\r\n }\r\n\r\n @Action(PreviewScope)\r\n previewScope(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { scope }: PreviewScope,\r\n ) {\r\n const req$ = this.http.post<Response<DelegationScopePreview>>(\r\n `${BASE}/scope/preview`,\r\n scope,\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.PreviewScope,\r\n request$: req$,\r\n onSuccess: (response) => ({ scopePreview: response.data ?? null }),\r\n });\r\n }\r\n\r\n @Action(ClearScopePreview)\r\n clearScopePreview(ctx: StateContext<DelegationsStateModel>) {\r\n ctx.patchState({ scopePreview: null });\r\n }\r\n\r\n // ============================================================================\r\n // Helpers\r\n // ============================================================================\r\n\r\n private applyLifecycleResult(\r\n ctx: StateContext<DelegationsStateModel>,\r\n key: DelegationsActionKey,\r\n req$: ReturnType<HttpClient['post']>,\r\n ) {\r\n return handleApiRequest({\r\n ctx,\r\n key,\r\n request$: req$ as any,\r\n onSuccess: (response: Response<Delegation>) => {\r\n const updated = response.data;\r\n const state = ctx.getState();\r\n return {\r\n my: replaceInPage(state.my, updated),\r\n assigned: replaceInPage(state.assigned, updated),\r\n selected:\r\n state.selected && state.selected.id === updated.id\r\n ? { ...state.selected, ...updated }\r\n : state.selected,\r\n };\r\n },\r\n });\r\n }\r\n}\r\n","import { computed, inject, Injectable } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport {\r\n ApproveDelegation,\r\n CancelDelegation,\r\n ClearScopePreview,\r\n ClearSelectedDelegation,\r\n CreateDelegation,\r\n GetAssignedDelegations,\r\n GetDelegation,\r\n GetMyDelegations,\r\n GetScopeOptions,\r\n PreviewScope,\r\n RejectDelegation,\r\n UpdateDelegation,\r\n} from './delegations.actions';\r\nimport {\r\n ApproveDelegationRequest,\r\n CancelDelegationRequest,\r\n CreateDelegationRequest,\r\n DelegationListQuery,\r\n DelegationScopeRequest,\r\n DelegationsActionKey,\r\n RejectDelegationRequest,\r\n UpdateDelegationRequest,\r\n} from './delegations.model';\r\nimport { DelegationsState } from './delegations.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DelegationsFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ---------------------------------------------------------------------------\r\n // Data slices\r\n // ---------------------------------------------------------------------------\r\n readonly myPage = select(DelegationsState.getMyPage);\r\n readonly assignedPage = select(DelegationsState.getAssignedPage);\r\n readonly selected = select(DelegationsState.getSelected);\r\n readonly scopeOptions = select(DelegationsState.getScopeOptions);\r\n readonly scopePreview = select(DelegationsState.getScopePreview);\r\n\r\n private readonly loadingActive = select(DelegationsState.getLoadingActive);\r\n private readonly errors = select(DelegationsState.getErrors);\r\n\r\n // ---------------------------------------------------------------------------\r\n // Derived\r\n // ---------------------------------------------------------------------------\r\n readonly myItems = computed(() => this.myPage()?.items ?? []);\r\n readonly assignedItems = computed(() => this.assignedPage()?.items ?? []);\r\n\r\n // ---------------------------------------------------------------------------\r\n // Loading\r\n // ---------------------------------------------------------------------------\r\n readonly isLoadingMy = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetMyDelegations),\r\n );\r\n readonly isLoadingAssigned = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetAssignedDelegations),\r\n );\r\n readonly isLoadingDetail = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetDelegation),\r\n );\r\n readonly isCreating = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.CreateDelegation),\r\n );\r\n readonly isUpdating = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.UpdateDelegation),\r\n );\r\n readonly isApproving = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.ApproveDelegation),\r\n );\r\n readonly isRejecting = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.RejectDelegation),\r\n );\r\n readonly isCancelling = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.CancelDelegation),\r\n );\r\n readonly isLoadingScopeOptions = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetScopeOptions),\r\n );\r\n readonly isPreviewingScope = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.PreviewScope),\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Errors\r\n // ---------------------------------------------------------------------------\r\n readonly errorMy = computed(\r\n () => this.errors()[DelegationsActionKey.GetMyDelegations] ?? null,\r\n );\r\n readonly errorAssigned = computed(\r\n () => this.errors()[DelegationsActionKey.GetAssignedDelegations] ?? null,\r\n );\r\n readonly errorDetail = computed(\r\n () => this.errors()[DelegationsActionKey.GetDelegation] ?? null,\r\n );\r\n readonly errorCreate = computed(\r\n () => this.errors()[DelegationsActionKey.CreateDelegation] ?? null,\r\n );\r\n readonly errorUpdate = computed(\r\n () => this.errors()[DelegationsActionKey.UpdateDelegation] ?? null,\r\n );\r\n readonly errorApprove = computed(\r\n () => this.errors()[DelegationsActionKey.ApproveDelegation] ?? null,\r\n );\r\n readonly errorReject = computed(\r\n () => this.errors()[DelegationsActionKey.RejectDelegation] ?? null,\r\n );\r\n readonly errorCancel = computed(\r\n () => this.errors()[DelegationsActionKey.CancelDelegation] ?? null,\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Dispatchers\r\n // ---------------------------------------------------------------------------\r\n getMy(query: DelegationListQuery = {}) {\r\n return this.store.dispatch(new GetMyDelegations(query));\r\n }\r\n getAssigned(query: DelegationListQuery = {}) {\r\n return this.store.dispatch(new GetAssignedDelegations(query));\r\n }\r\n getOne(id: number, includeStatusHistory = false) {\r\n return this.store.dispatch(new GetDelegation(id, includeStatusHistory));\r\n }\r\n clearSelected() {\r\n return this.store.dispatch(new ClearSelectedDelegation());\r\n }\r\n create(request: CreateDelegationRequest) {\r\n return this.store.dispatch(new CreateDelegation(request));\r\n }\r\n update(id: number, request: UpdateDelegationRequest) {\r\n return this.store.dispatch(new UpdateDelegation(id, request));\r\n }\r\n approve(id: number, request: ApproveDelegationRequest) {\r\n return this.store.dispatch(new ApproveDelegation(id, request));\r\n }\r\n reject(id: number, request: RejectDelegationRequest) {\r\n return this.store.dispatch(new RejectDelegation(id, request));\r\n }\r\n cancel(id: number, request: CancelDelegationRequest) {\r\n return this.store.dispatch(new CancelDelegation(id, request));\r\n }\r\n loadScopeOptions(delegatorUserId?: string) {\r\n return this.store.dispatch(new GetScopeOptions(delegatorUserId));\r\n }\r\n previewScope(scope: DelegationScopeRequest) {\r\n return this.store.dispatch(new PreviewScope(scope));\r\n }\r\n clearScopePreview() {\r\n return this.store.dispatch(new ClearScopePreview());\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n OnInit,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { DelegationsFacade } from '../../../../store/delegations/delegations.facade';\r\nimport {\r\n DelegationReadPolicy,\r\n DelegationScopeAccessibilityOption,\r\n DelegationScopeOperationOption,\r\n DelegationScopeRequest,\r\n DelegationScopeRequestTarget,\r\n DelegationScopeTargetOption,\r\n} from '../../../../store/delegations/delegations.model';\r\n\r\ninterface AccessibilityGroupOption {\r\n appAccessibilityId: number;\r\n accessibilityGroupId: number;\r\n moduleName: string;\r\n groupName: string;\r\n}\r\n\r\nconst EMPTY_SCOPE: DelegationScopeRequest = {\r\n mode: 'Explicit',\r\n readPolicy: 'ImplicitReadForSelectedActions',\r\n accessibilityGroupIds: [],\r\n targets: [],\r\n};\r\n\r\nfunction targetKey(t: DelegationScopeTargetOption): string {\r\n return `${t.targetType}:${t.targetId ?? ''}:${t.permissionTargetId ?? ''}:${t.moduleKey}`;\r\n}\r\n\r\nfunction requestTargetKey(t: DelegationScopeRequestTarget): string {\r\n return `${t.targetType}:${t.targetId ?? ''}:${t.permissionTargetId ?? ''}:${t.moduleKey}`;\r\n}\r\n\r\n/**\r\n * Scope picker driven entirely by Identity-provided options.\r\n *\r\n * - `[(scope)]` two-way binds a normalized `DelegationScopeRequest`.\r\n * - Loads options via `DelegationsFacade.loadScopeOptions()` on init.\r\n * - Calls `/scope/preview` (debounced) so the user sees the server-built summary\r\n * and denied items before they save.\r\n * - Non-delegable operations render disabled with the BE-supplied `reason`.\r\n */\r\n@Component({\r\n selector: 'mt-scope-picker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Icon,\r\n SkeletonModule,\r\n TooltipModule,\r\n TranslocoDirective,\r\n ],\r\n templateUrl: './scope-picker.html',\r\n styleUrls: ['./scope-picker.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ScopePicker implements OnInit {\r\n /** Two-way bound — the form drives initial value and reads updates back. */\r\n readonly scope = model<DelegationScopeRequest>(EMPTY_SCOPE);\r\n readonly readonly = input<boolean>(false);\r\n /** Admin scope-as-another-user — passed through to the options endpoint. */\r\n readonly delegatorUserId = input<string | undefined>(undefined);\r\n\r\n private readonly facade = inject(DelegationsFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n protected readonly options = this.facade.scopeOptions;\r\n protected readonly preview = this.facade.scopePreview;\r\n protected readonly isLoadingOptions = this.facade.isLoadingScopeOptions;\r\n protected readonly isPreviewing = this.facade.isPreviewingScope;\r\n\r\n /** Set of accordion target keys currently expanded. */\r\n private readonly expanded = signal<Set<string>>(new Set());\r\n\r\n protected readonly readPolicies = computed(\r\n () => this.options()?.readPolicies ?? [],\r\n );\r\n\r\n /** Flat list of accessibility group options (across modules). */\r\n protected readonly accessibilityGroups = computed<AccessibilityGroupOption[]>(\r\n () => {\r\n const acc = this.options()?.accessibilities ?? [];\r\n return acc.flatMap((a: DelegationScopeAccessibilityOption) =>\r\n a.groups.map((g) => ({\r\n appAccessibilityId: a.appAccessibilityId,\r\n accessibilityGroupId: g.accessibilityGroupId,\r\n moduleName: a.moduleName,\r\n groupName: g.name,\r\n })),\r\n );\r\n },\r\n );\r\n\r\n /** Targets grouped by `targetType` for the accordion UI. */\r\n protected readonly groupedTargets = computed(() => {\r\n const targets = this.options()?.targets ?? [];\r\n const map = new Map<string, DelegationScopeTargetOption[]>();\r\n for (const t of targets) {\r\n const list = map.get(t.targetType) ?? [];\r\n list.push(t);\r\n map.set(t.targetType, list);\r\n }\r\n return Array.from(map.entries()).map(([type, items]) => ({\r\n type,\r\n items,\r\n }));\r\n });\r\n\r\n /** O(1) lookup: is this accessibility group selected? */\r\n protected readonly selectedAccessibilityIds = computed(\r\n () => new Set(this.scope().accessibilityGroupIds ?? []),\r\n );\r\n\r\n /** O(1) lookup: which targets are picked, and which ops per target? */\r\n protected readonly selectedTargetMap = computed(() => {\r\n const map = new Map<string, Set<string>>();\r\n for (const t of this.scope().targets) {\r\n const key = requestTargetKey(t);\r\n map.set(\r\n key,\r\n new Set(t.operations.map((op) => op.permissionCommand)),\r\n );\r\n }\r\n return map;\r\n });\r\n\r\n // -------------------------------------------------------------------------\r\n // Lifecycle\r\n // -------------------------------------------------------------------------\r\n ngOnInit(): void {\r\n this.facade.loadScopeOptions(this.delegatorUserId());\r\n }\r\n\r\n constructor() {\r\n // Debounced preview: whenever the scope changes, call /scope/preview.\r\n // (Skips the empty initial value.)\r\n let timer: ReturnType<typeof setTimeout> | null = null;\r\n effect(() => {\r\n const s = this.scope();\r\n const hasContent =\r\n s.accessibilityGroupIds.length > 0 || s.targets.length > 0;\r\n untracked(() => {\r\n if (!hasContent) {\r\n this.facade.clearScopePreview();\r\n return;\r\n }\r\n if (timer) clearTimeout(timer);\r\n timer = setTimeout(() => this.facade.previewScope(s), 300);\r\n });\r\n });\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // UI handlers\r\n // -------------------------------------------------------------------------\r\n protected setReadPolicy(policy: DelegationReadPolicy): void {\r\n if (this.readonly()) return;\r\n this.scope.update((s) => ({ ...s, readPolicy: policy }));\r\n }\r\n\r\n protected toggleAccessibility(group: AccessibilityGroupOption): void {\r\n if (this.readonly()) return;\r\n this.scope.update((s) => {\r\n const ids = new Set(s.accessibilityGroupIds);\r\n if (ids.has(group.accessibilityGroupId)) {\r\n ids.delete(group.accessibilityGroupId);\r\n } else {\r\n ids.add(group.accessibilityGroupId);\r\n }\r\n return { ...s, accessibilityGroupIds: Array.from(ids) };\r\n });\r\n }\r\n\r\n protected isAccessibilitySelected(\r\n group: AccessibilityGroupOption,\r\n ): boolean {\r\n return this.selectedAccessibilityIds().has(group.accessibilityGroupId);\r\n }\r\n\r\n protected toggleAccordion(target: DelegationScopeTargetOption): void {\r\n const key = targetKey(target);\r\n const next = new Set(this.expanded());\r\n if (next.has(key)) next.delete(key);\r\n else next.add(key);\r\n this.expanded.set(next);\r\n }\r\n\r\n protected isExpanded(target: DelegationScopeTargetOption): boolean {\r\n return this.expanded().has(targetKey(target));\r\n }\r\n\r\n protected toggleOperation(\r\n target: DelegationScopeTargetOption,\r\n op: DelegationScopeOperationOption,\r\n ): void {\r\n if (this.readonly() || !op.isDelegable) return;\r\n this.scope.update((s) => {\r\n const reqKey = `${target.targetType}:${target.targetId ?? ''}:${target.permissionTargetId ?? ''}:${target.moduleKey}`;\r\n const targets = [...s.targets];\r\n const idx = targets.findIndex((t) => requestTargetKey(t) === reqKey);\r\n const baseRequest: DelegationScopeRequestTarget = {\r\n targetType: target.targetType,\r\n targetId: target.targetId,\r\n levelId: target.levelId,\r\n levelModuleId: target.levelModuleId,\r\n domainModuleId: target.domainModuleId,\r\n moduleKey: target.moduleKey,\r\n permissionModuleType: target.permissionModuleType,\r\n permissionTargetId: target.permissionTargetId,\r\n operations: [],\r\n };\r\n\r\n if (idx === -1) {\r\n targets.push({\r\n ...baseRequest,\r\n operations: [\r\n {\r\n operationKey: op.operationKey,\r\n permissionCommand: op.permissionCommand,\r\n },\r\n ],\r\n });\r\n } else {\r\n const current = targets[idx];\r\n const opIdx = current.operations.findIndex(\r\n (o) => o.permissionCommand === op.permissionCommand,\r\n );\r\n if (opIdx === -1) {\r\n targets[idx] = {\r\n ...current,\r\n operations: [\r\n ...current.operations,\r\n {\r\n operationKey: op.operationKey,\r\n permissionCommand: op.permissionCommand,\r\n },\r\n ],\r\n };\r\n } else {\r\n const nextOps = current.operations.slice();\r\n nextOps.splice(opIdx, 1);\r\n if (nextOps.length === 0) {\r\n // last op removed — drop the target entirely\r\n targets.splice(idx, 1);\r\n } else {\r\n targets[idx] = { ...current, operations: nextOps };\r\n }\r\n }\r\n }\r\n return { ...s, targets };\r\n });\r\n }\r\n\r\n protected isOperationSelected(\r\n target: DelegationScopeTargetOption,\r\n op: DelegationScopeOperationOption,\r\n ): boolean {\r\n const key = `${target.targetType}:${target.targetId ?? ''}:${target.permissionTargetId ?? ''}:${target.moduleKey}`;\r\n return (\r\n this.selectedTargetMap().get(key)?.has(op.permissionCommand) ?? false\r\n );\r\n }\r\n\r\n protected selectedOpsCount(\r\n target: DelegationScopeTargetOption,\r\n ): number {\r\n const key = `${target.targetType}:${target.targetId ?? ''}:${target.permissionTargetId ?? ''}:${target.moduleKey}`;\r\n return this.selectedTargetMap().get(key)?.size ?? 0;\r\n }\r\n\r\n protected reasonLabel(op: DelegationScopeOperationOption): string {\r\n return op.reason ?? this.transloco.translate('delegations.non-delegable-reason');\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"mt-scope-picker flex flex-col gap-4\">\r\n <!-- Loading skeleton -->\r\n @if (isLoadingOptions() && !options()) {\r\n <p-skeleton height=\"2rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\"></p-skeleton>\r\n } @else if (options(); as opts) {\r\n <!-- ============================================================ -->\r\n <!-- Read policy -->\r\n <!-- ============================================================ -->\r\n <section class=\"flex flex-col gap-2\">\r\n <h4 class=\"text-sm font-medium text-gray-800\">\r\n {{ t('delegations.read-policy') }}\r\n </h4>\r\n <div class=\"flex flex-wrap gap-2\">\r\n @for (rp of readPolicies(); track rp.key) {\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-1.5 rounded-full text-xs border transition-colors cursor-pointer\"\r\n [class.border-primary]=\"scope().readPolicy === rp.key\"\r\n [class.bg-primary-50]=\"scope().readPolicy === rp.key\"\r\n [class.text-primary]=\"scope().readPolicy === rp.key\"\r\n [class.border-gray-300]=\"scope().readPolicy !== rp.key\"\r\n [class.text-gray-700]=\"scope().readPolicy !== rp.key\"\r\n [disabled]=\"readonly()\"\r\n (click)=\"setReadPolicy(rp.key)\">\r\n {{ t('delegations.' + (rp.key === 'ImplicitReadForSelectedActions'\r\n ? 'implicit-read'\r\n : rp.key === 'ExplicitReadOnly'\r\n ? 'explicit-read-only'\r\n : 'no-read-unless-own-permission')) }}\r\n </button>\r\n }\r\n </div>\r\n </section>\r\n\r\n <!-- ============================================================ -->\r\n <!-- Accessibilities -->\r\n <!-- ============================================================ -->\r\n @if (accessibilityGroups().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <h4 class=\"text-sm font-medium text-gray-800\">\r\n {{ t('delegations.scope') }} —\r\n {{ t('delegations.delegated-to') }}\r\n </h4>\r\n <div class=\"flex flex-wrap gap-2\">\r\n @for (g of accessibilityGroups(); track g.accessibilityGroupId) {\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center gap-2 px-3 py-1.5 rounded-md text-xs border transition-colors cursor-pointer\"\r\n [class.border-primary]=\"isAccessibilitySelected(g)\"\r\n [class.bg-primary-50]=\"isAccessibilitySelected(g)\"\r\n [class.text-primary]=\"isAccessibilitySelected(g)\"\r\n [class.border-gray-300]=\"!isAccessibilitySelected(g)\"\r\n [class.text-gray-700]=\"!isAccessibilitySelected(g)\"\r\n [disabled]=\"readonly()\"\r\n (click)=\"toggleAccessibility(g)\">\r\n @if (isAccessibilitySelected(g)) {\r\n <mt-icon icon=\"general.check\" styleClass=\"text-sm\"></mt-icon>\r\n }\r\n <span>{{ g.moduleName }} / {{ g.groupName }}</span>\r\n </button>\r\n }\r\n </div>\r\n </section>\r\n }\r\n\r\n <!-- ============================================================ -->\r\n <!-- Targets + operations -->\r\n <!-- ============================================================ -->\r\n <section class=\"flex flex-col gap-2\">\r\n <h4 class=\"text-sm font-medium text-gray-800\">\r\n {{ t('delegations.target-type') }} /\r\n {{ t('delegations.operations') }}\r\n </h4>\r\n\r\n @if (groupedTargets().length === 0) {\r\n <p class=\"text-xs text-gray-500\">\r\n {{ t('delegations.no-targets-selected') }}\r\n </p>\r\n }\r\n\r\n @for (group of groupedTargets(); track group.type) {\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"text-xs uppercase text-gray-500 tracking-wide px-2\">\r\n {{ group.type }}\r\n </div>\r\n @for (target of group.items; track target.displayName) {\r\n <div class=\"border border-gray-200 rounded-md overflow-hidden\">\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center justify-between w-full px-3 py-2 hover:bg-surface-50 cursor-pointer\"\r\n (click)=\"toggleAccordion(target)\">\r\n <div class=\"flex items-center gap-2 min-w-0\">\r\n <mt-icon\r\n [icon]=\"\r\n isExpanded(target)\r\n ? 'arrow.chevron-down'\r\n : 'arrow.chevron-right'\r\n \"\r\n styleClass=\"text-base text-gray-400\"></mt-icon>\r\n <span class=\"text-sm text-gray-900 truncate\">\r\n {{ target.displayName }}\r\n </span>\r\n </div>\r\n @if (selectedOpsCount(target); as count) {\r\n @if (count > 0) {\r\n <span\r\n class=\"text-xs text-primary font-medium px-2 py-0.5 rounded-full bg-primary-50\">\r\n {{ count }}\r\n </span>\r\n }\r\n }\r\n </button>\r\n\r\n @if (isExpanded(target)) {\r\n <div class=\"flex flex-col gap-1 px-3 py-2 bg-surface-50/40\">\r\n @for (op of target.operations; track op.permissionCommand) {\r\n <label\r\n class=\"flex items-center gap-2 px-2 py-1.5 rounded-md cursor-pointer\"\r\n [class.opacity-60]=\"!op.isDelegable\"\r\n [class.cursor-not-allowed]=\"!op.isDelegable\"\r\n [class.hover:bg-surface-100]=\"op.isDelegable\"\r\n [pTooltip]=\"!op.isDelegable ? reasonLabel(op) : null\"\r\n tooltipPosition=\"top\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isOperationSelected(target, op)\"\r\n [disabled]=\"!op.isDelegable || readonly()\"\r\n (change)=\"toggleOperation(target, op)\" />\r\n <span class=\"text-sm\">{{ op.displayName }}</span>\r\n @if (op.isHighRisk) {\r\n <mt-icon\r\n icon=\"alert.alert-triangle\"\r\n styleClass=\"text-sm text-amber-500\"\r\n [pTooltip]=\"t('delegations.high-risk-action')\"\r\n tooltipPosition=\"top\"></mt-icon>\r\n }\r\n @if (!op.isDelegable) {\r\n <span class=\"text-xs text-gray-400 ms-auto\">\r\n {{ reasonLabel(op) }}\r\n </span>\r\n }\r\n </label>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </section>\r\n\r\n <!-- ============================================================ -->\r\n <!-- Preview -->\r\n <!-- ============================================================ -->\r\n <section\r\n class=\"flex flex-col gap-1 px-3 py-2 rounded-md border border-dashed border-gray-300 bg-surface-50\">\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <div class=\"text-xs font-medium text-gray-700\">\r\n {{ t('delegations.preview-scope') }}\r\n </div>\r\n @if (isPreviewing()) {\r\n <p-skeleton width=\"6rem\" height=\"0.75rem\"></p-skeleton>\r\n }\r\n </div>\r\n @if (preview(); as p) {\r\n @if (p.isValid) {\r\n <div class=\"text-sm text-gray-900\">\r\n {{ p.summary || t('delegations.scope-summary') }}\r\n </div>\r\n } @else {\r\n <div class=\"text-sm text-red-700\">\r\n {{ t('delegations.scope-preview-invalid') }}\r\n </div>\r\n }\r\n @if (p.warnings.length > 0) {\r\n <ul class=\"text-xs text-amber-700 list-disc list-inside\">\r\n @for (w of p.warnings; track w.code) {\r\n <li>{{ w.message }}</li>\r\n }\r\n </ul>\r\n }\r\n @if (p.deniedItems.length > 0) {\r\n <ul class=\"text-xs text-red-700 list-disc list-inside\">\r\n @for (d of p.deniedItems; track d.permissionCommand) {\r\n <li>{{ d.message }}</li>\r\n }\r\n </ul>\r\n }\r\n } @else {\r\n <div class=\"text-xs text-gray-500\">\r\n {{ t('delegations.no-operations-selected') }}\r\n </div>\r\n }\r\n </section>\r\n }\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport {\r\n DateFieldConfig,\r\n DynamicFormConfig,\r\n MultiSelectFieldConfig,\r\n RadioButtonFieldConfig,\r\n REQUEST_CONTEXT,\r\n TextareaFieldConfig,\r\n ToggleFieldConfig,\r\n UserSearchFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { ScopePicker } from './scope-picker/scope-picker';\r\nimport {\r\n CreateDelegationRequest,\r\n Delegation,\r\n DelegationScopeRequest,\r\n UpdateDelegationRequest,\r\n} from '../../../store/delegations/delegations.model';\r\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\r\n\r\nconst EMPTY_SCOPE: DelegationScopeRequest = {\r\n mode: 'Explicit',\r\n readPolicy: 'ImplicitReadForSelectedActions',\r\n accessibilityGroupIds: [],\r\n targets: [],\r\n};\r\n\r\n/**\r\n * Delegation create/edit form, target-shape compliant.\r\n *\r\n * - Delegator is server-derived from the authenticated principal — not collected\r\n * here (admin \"create on behalf of\" lives behind a separate flag).\r\n * - `isActive` no longer exists; status is server-calculated.\r\n * - Scope is collected by `<mt-scope-picker>` (loaded from `/scope/options`)\r\n * and validated via `/scope/preview` on every change. Edit mode rehydrates\r\n * the scope from the loaded delegation.\r\n */\r\n@Component({\r\n selector: 'mt-delegation-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n ScopePicker,\r\n TranslocoDirective,\r\n ],\r\n templateUrl: './delegation-form.html',\r\n styleUrls: ['./delegation-form.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class DelegationForm implements OnInit {\r\n readonly delegationForEdit = input<Delegation | null>(null);\r\n readonly readonly = input<boolean>(false);\r\n\r\n private readonly halfWidth = 'flex flex-col gap-1 lg:col-span-6';\r\n private readonly fullWidth = 'flex flex-col gap-1 lg:col-span-12';\r\n\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly facade = inject(DelegationsFacade);\r\n\r\n // Reactive form\r\n delegationFormControl = new FormControl();\r\n formValue = toSignal(this.delegationFormControl.valueChanges);\r\n\r\n selected = this.facade.selected;\r\n isDetailLoading = this.facade.isLoadingDetail;\r\n isSaving = computed(\r\n () => this.facade.isCreating() || this.facade.isUpdating(),\r\n );\r\n\r\n context = new HttpContext().set(REQUEST_CONTEXT, { useBaseUrl: false });\r\n\r\n protected readonly isDelegatingToSelf = computed(() => {\r\n const v = this.formValue();\r\n if (!v) return false;\r\n const toId = (v.delegatedUser?.id ?? v.delegatedUser) as string | undefined;\r\n const meId = (this.selected()?.delegator?.id ?? '') as string;\r\n return !!toId && !!meId && toId === meId;\r\n });\r\n\r\n // The current scope draft (built outside the form for MVP; placeholder UI).\r\n protected readonly scope = signal<DelegationScopeRequest>(EMPTY_SCOPE);\r\n\r\n protected readonly specificDaysOptions = signal([\r\n { label: this.transloco.translate('delegations.sunday'), value: 0 },\r\n { label: this.transloco.translate('delegations.monday'), value: 1 },\r\n { label: this.transloco.translate('delegations.tuesday'), value: 2 },\r\n { label: this.transloco.translate('delegations.wednesday'), value: 3 },\r\n { label: this.transloco.translate('delegations.thursday'), value: 4 },\r\n { label: this.transloco.translate('delegations.friday'), value: 5 },\r\n { label: this.transloco.translate('delegations.saturday'), value: 6 },\r\n ]);\r\n\r\n protected readonly delegationFormConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'delegationFormConfig',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 gap-4 items-start lg:grid-cols-12',\r\n order: 1,\r\n fields: [\r\n new UserSearchFieldConfig({\r\n key: 'delegatedUser',\r\n label: this.transloco.translate('delegations.delegated-to'),\r\n apiUrl: 'Identity/users',\r\n context: this.context,\r\n validators: [ValidatorConfig.required()],\r\n cssClass: this.halfWidth,\r\n colSpan: 6,\r\n order: 1,\r\n disabled: this.readonly() || !!this.delegationForEdit()?.id,\r\n }),\r\n new TextareaFieldConfig({\r\n key: 'description',\r\n label: this.transloco.translate('delegations.description'),\r\n placeholder: this.transloco.translate('delegations.description'),\r\n cssClass: this.fullWidth,\r\n colSpan: 12,\r\n order: 2,\r\n disabled: this.readonly(),\r\n }),\r\n new DateFieldConfig({\r\n key: 'startDateUtc',\r\n label: this.transloco.translate('delegations.delegation-date-from'),\r\n placeholder: this.transloco.translate(\r\n 'delegations.delegation-date-from',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n showTime: true,\r\n cssClass: this.halfWidth,\r\n colSpan: 6,\r\n order: 3,\r\n disabled: this.readonly(),\r\n }),\r\n new DateFieldConfig({\r\n key: 'endDateUtc',\r\n label: this.transloco.translate('delegations.delegation-date-to'),\r\n placeholder: this.transloco.translate(\r\n 'delegations.delegation-date-to',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n showTime: true,\r\n cssClass: this.halfWidth,\r\n colSpan: 6,\r\n order: 4,\r\n disabled: this.readonly(),\r\n }),\r\n new RadioButtonFieldConfig({\r\n key: 'dayRulesType',\r\n label: this.transloco.translate(\r\n 'delegations.delegation-days-apply',\r\n ),\r\n options: [\r\n {\r\n label: this.transloco.translate('delegations.full-range'),\r\n value: 'FullRange',\r\n },\r\n {\r\n label: this.transloco.translate('delegations.specific-days'),\r\n value: 'SpecificDays',\r\n },\r\n ],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n validators: [ValidatorConfig.required()],\r\n cssClass: this.fullWidth,\r\n colSpan: 12,\r\n order: 5,\r\n disabled: this.readonly(),\r\n }),\r\n new MultiSelectFieldConfig({\r\n key: 'specificDays',\r\n label: this.transloco.translate('delegations.specific-days'),\r\n options: this.specificDaysOptions(),\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n maxSelectedLabels: 7,\r\n relations: [\r\n { key: 'dayRulesType', value: 'SpecificDays', action: 'show' },\r\n ],\r\n cssClass: this.fullWidth,\r\n colSpan: 12,\r\n order: 6,\r\n disabled: this.readonly(),\r\n }),\r\n new ToggleFieldConfig({\r\n key: 'requiresApproval',\r\n label: this.transloco.translate('delegations.requires-approval'),\r\n cssClass: `${this.fullWidth} mt-2`,\r\n order: 7,\r\n disabled: this.readonly(),\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n const id = this.delegationForEdit()?.id;\r\n const d = this.selected();\r\n if (id && d) {\r\n this.delegationFormControl.patchValue({\r\n delegatedUser: d.delegatedUser,\r\n description: d.description,\r\n startDateUtc: d.startDateUtc,\r\n endDateUtc: d.endDateUtc,\r\n dayRulesType: d.dayRules?.type ?? 'FullRange',\r\n specificDays: d.dayRules?.specificDays ?? [],\r\n requiresApproval: d.requiresApproval ?? true,\r\n });\r\n // Snapshot existing scope so we round-trip it on save until the picker ships.\r\n if (d.scope) {\r\n this.scope.set({\r\n mode: 'Explicit',\r\n readPolicy: d.scope.readPolicy,\r\n accessibilityGroupIds: d.scope.accessibilities.map(\r\n (a) => a.accessibilityGroupId,\r\n ),\r\n targets: d.scope.targets.map((t) => ({\r\n targetType: t.targetType,\r\n targetId: t.targetId,\r\n levelId: t.levelId,\r\n levelModuleId: t.levelModuleId,\r\n domainModuleId: t.domainModuleId,\r\n moduleKey: t.moduleKey,\r\n permissionModuleType: t.permissionModuleType,\r\n permissionTargetId: t.permissionTargetId,\r\n operations: t.operations.map((op) => ({\r\n operationKey: op.operationKey,\r\n permissionCommand: op.permissionCommand,\r\n })),\r\n })),\r\n });\r\n }\r\n } else if (!id) {\r\n this.delegationFormControl.reset({\r\n dayRulesType: 'FullRange',\r\n requiresApproval: true,\r\n });\r\n this.scope.set(EMPTY_SCOPE);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const id = this.delegationForEdit()?.id;\r\n if (id) {\r\n this.facade.getOne(id, true);\r\n }\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.readonly() || !this.delegationFormControl.valid) return;\r\n const v = this.delegationFormControl.value;\r\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\r\n const editing = this.delegationForEdit();\r\n\r\n const base = {\r\n description: v?.description,\r\n startDateUtc: v?.startDateUtc,\r\n endDateUtc: v?.endDateUtc,\r\n timeZoneId: tz,\r\n dayRules: {\r\n type: (v?.dayRulesType ?? 'FullRange') as 'FullRange' | 'SpecificDays',\r\n specificDays:\r\n v?.dayRulesType === 'SpecificDays' ? (v?.specificDays ?? []) : [],\r\n },\r\n scope: this.scope(),\r\n };\r\n\r\n if (editing?.id) {\r\n const req: UpdateDelegationRequest = {\r\n ...base,\r\n rowVersion: editing.rowVersion,\r\n requiresApproval: v?.requiresApproval,\r\n };\r\n this.facade.update(editing.id, req).subscribe({\r\n next: () => this.ref.close(true),\r\n });\r\n } else {\r\n const req: CreateDelegationRequest = {\r\n ...base,\r\n delegatedUserId: v?.delegatedUser?.id ?? v?.delegatedUser,\r\n requiresApproval: !!v?.requiresApproval,\r\n };\r\n this.facade.create(req).subscribe({\r\n next: () => this.ref.close(true),\r\n });\r\n }\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'delegations'\">\r\n <div\r\n [class]=\"\r\n 'delegation-form-content flex min-w-0 flex-col gap-3 overflow-x-hidden p-4 max-[640px]:p-3 ' +\r\n modal.contentClass\r\n \"\r\n >\r\n <mt-dynamic-form\r\n [formConfig]=\"delegationFormConfig()\"\r\n [formControl]=\"delegationFormControl\"\r\n />\r\n\r\n <div class=\"mt-2 border-t border-gray-200 pt-3 flex flex-col gap-2\">\r\n <h3 class=\"text-sm font-semibold text-gray-800\">\r\n {{ t(\"scope\") }}\r\n </h3>\r\n <mt-scope-picker\r\n [(scope)]=\"scope\"\r\n [readonly]=\"readonly()\"\r\n ></mt-scope-picker>\r\n </div>\r\n </div>\r\n\r\n <div\r\n [class]=\"\r\n 'delegation-form-footer ' +\r\n modal.footerClass +\r\n ' flex-col gap-2 sm:flex-row sm:items-center sm:justify-end'\r\n \"\r\n >\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n (click)=\"ref.close()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n />\r\n @if (!readonly()) {\r\n <mt-button\r\n [label]=\"delegationForEdit() ? t('update') : t('create')\"\r\n [loading]=\"isSaving()\"\r\n [disabled]=\"!delegationFormControl.valid || isDelegatingToSelf()\"\r\n (click)=\"onSubmit()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n />\r\n }\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\r\nimport {\r\n DelegationDetail,\r\n DelegationStatusHistoryEntry,\r\n} from '../../../store/delegations/delegations.model';\r\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\r\n\r\ntype DetailTab = 'overview' | 'scope' | 'history';\r\n\r\n/**\r\n * Read-only drawer that shows the full server DTO of a delegation, including\r\n * its status history. Triggered from the row's \"View details\" action.\r\n */\r\n@Component({\r\n selector: 'mt-delegation-detail-drawer',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Avatar,\r\n Button,\r\n Icon,\r\n SkeletonModule,\r\n TranslocoDirective,\r\n DelegationStatusChip,\r\n ],\r\n templateUrl: './delegation-detail-drawer.html',\r\n styleUrls: ['./delegation-detail-drawer.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class DelegationDetailDrawer implements OnInit {\r\n /** Delegation id passed in via the modal's inputValues. */\r\n readonly delegationId = input.required<number>();\r\n\r\n private readonly facade = inject(DelegationsFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly ref: ModalRef = inject(ModalRef);\r\n\r\n protected readonly tabs: { key: DetailTab; i18n: string }[] = [\r\n { key: 'overview', i18n: 'delegations.view-details' },\r\n { key: 'scope', i18n: 'delegations.scope' },\r\n { key: 'history', i18n: 'delegations.status-history' },\r\n ];\r\n protected readonly activeTab = signal<DetailTab>('overview');\r\n\r\n protected readonly isLoading = this.facade.isLoadingDetail;\r\n protected readonly detail = this.facade.selected;\r\n\r\n protected readonly statusHistory = computed<DelegationStatusHistoryEntry[]>(\r\n () => (this.detail() as DelegationDetail | null)?.statusHistory ?? [],\r\n );\r\n\r\n ngOnInit(): void {\r\n this.facade.getOne(this.delegationId(), true);\r\n }\r\n\r\n protected setTab(tab: DetailTab): void {\r\n this.activeTab.set(tab);\r\n }\r\n\r\n protected approvalLabel(): string {\r\n const s = this.detail()?.approval?.status ?? 'NotRequired';\r\n return this.transloco.translate(\r\n `delegations.approval-${s.toLowerCase()}`,\r\n );\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"flex flex-col h-full\">\r\n <!-- Tabs -->\r\n <div class=\"flex border-b border-gray-200 px-4\">\r\n @for (tab of tabs; track tab.key) {\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\r\n [class.border-primary]=\"activeTab() === tab.key\"\r\n [class.text-primary]=\"activeTab() === tab.key\"\r\n [class.border-transparent]=\"activeTab() !== tab.key\"\r\n [class.text-gray-500]=\"activeTab() !== tab.key\"\r\n (click)=\"setTab(tab.key)\"\r\n >\r\n {{ t(tab.i18n) }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n @if (isLoading() && !detail()) {\r\n <p-skeleton height=\"2rem\" class=\"mb-3\"></p-skeleton>\r\n <p-skeleton height=\"6rem\" class=\"mb-3\"></p-skeleton>\r\n <p-skeleton height=\"6rem\"></p-skeleton>\r\n } @else if (detail(); as d) {\r\n @switch (activeTab()) {\r\n @case ('overview') {\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"flex items-center justify-between gap-3\">\r\n <div class=\"flex items-center gap-3 min-w-0\">\r\n <mt-avatar\r\n [image]=\"d.delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-12! h-12! text-lg!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <div class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.delegator-name\") }}\r\n </div>\r\n <div class=\"text-base font-medium text-gray-900 truncate\">\r\n {{ d.delegator.displayName }}\r\n </div>\r\n @if (d.delegator.email) {\r\n <div class=\"text-xs text-gray-500 truncate\">\r\n {{ d.delegator.email }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <mt-delegation-status-chip\r\n [status]=\"d.status\"\r\n ></mt-delegation-status-chip>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.delegated-to\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ d.delegatedUser.displayName }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.approval\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ approvalLabel() }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.start-date\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ d.startDateUtc | date: \"medium\" }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.end-date\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ d.endDateUtc | date: \"medium\" }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.time-zone\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ d.timeZoneId }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.days\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n @if (d.dayRules.type === \"FullRange\") {\r\n {{ t(\"delegations.all-days\") }}\r\n } @else if (d.dayRules.specificDayLabels?.length) {\r\n {{ d.dayRules.specificDayLabels?.join(\", \") }}\r\n } @else {\r\n {{ d.dayRules.specificDays.join(\", \") }}\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (d.description) {\r\n <div class=\"flex flex-col gap-1\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.description\") }}\r\n </span>\r\n <p class=\"text-sm text-gray-900 whitespace-pre-line\">\r\n {{ d.description }}\r\n </p>\r\n </div>\r\n }\r\n\r\n @if (d.approval.rejectionReason) {\r\n <div\r\n class=\"rounded-md border border-red-200 bg-red-50 p-3 text-sm text-red-800\"\r\n >\r\n <div class=\"font-medium\">\r\n {{ t(\"delegations.rejection-reason\") }}\r\n </div>\r\n <div>{{ d.approval.rejectionReason }}</div>\r\n </div>\r\n }\r\n\r\n @if (d.cancellation.cancellationReason) {\r\n <div\r\n class=\"rounded-md border border-gray-200 bg-surface-50 p-3 text-sm text-gray-800\"\r\n >\r\n <div class=\"font-medium\">\r\n {{ t(\"delegations.cancel-reason\") }}\r\n </div>\r\n <div>{{ d.cancellation.cancellationReason }}</div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('scope') {\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"text-sm text-gray-900\">\r\n {{ d.scope.summary || t(\"delegations.scope-summary\") }}\r\n </div>\r\n\r\n @if (d.scope.accessibilities.length > 0) {\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.delegated-to\") }}\r\n </div>\r\n <div class=\"flex flex-wrap gap-1.5\">\r\n @for (a of d.scope.accessibilities; track a.accessibilityGroupId) {\r\n <span\r\n class=\"text-xs px-2 py-0.5 rounded-md bg-surface-100 text-gray-700\"\r\n >\r\n {{ a.moduleName }} / {{ a.groupName }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"flex flex-col gap-2\">\r\n @for (target of d.scope.targets; track target.displayName) {\r\n <div\r\n class=\"border border-gray-200 rounded-md px-3 py-2 flex flex-col gap-1\"\r\n >\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <span class=\"text-sm font-medium text-gray-900\">\r\n {{ target.displayName }}\r\n </span>\r\n <span class=\"text-xs text-gray-500\">\r\n {{ target.targetType }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-wrap gap-1.5\">\r\n @for (op of target.operations; track op.permissionCommand) {\r\n <span\r\n class=\"text-xs px-2 py-0.5 rounded-md bg-primary-50 text-primary\"\r\n >\r\n {{ op.displayName }}\r\n @if (op.isHighRisk) {\r\n <mt-icon\r\n icon=\"alert.alert-triangle\"\r\n styleClass=\"text-xs text-amber-500\"\r\n ></mt-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (d.scope.targets.length === 0) {\r\n <p class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.no-targets-selected\") }}\r\n </p>\r\n }\r\n </div>\r\n\r\n @if (d.scope.warnings.length > 0) {\r\n <ul class=\"text-xs text-amber-700 list-disc list-inside\">\r\n @for (w of d.scope.warnings; track w.code) {\r\n <li>{{ w.message }}</li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('history') {\r\n <ol class=\"flex flex-col gap-2\">\r\n @for (entry of statusHistory(); track entry.id) {\r\n <li\r\n class=\"border border-gray-200 rounded-md px-3 py-2 flex flex-col gap-1\"\r\n >\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <span class=\"text-sm font-medium text-gray-900\">\r\n {{ entry.action }}\r\n </span>\r\n <span class=\"text-xs text-gray-500\">\r\n {{ entry.createdAtUtc | date: \"short\" }}\r\n </span>\r\n </div>\r\n <div class=\"flex items-center gap-2 text-xs text-gray-600\">\r\n @if (entry.fromStatus) {\r\n <span>{{ entry.fromStatus }}</span>\r\n <mt-icon\r\n icon=\"arrow.arrow-right\"\r\n styleClass=\"text-xs text-gray-400\"\r\n ></mt-icon>\r\n }\r\n <span>{{ entry.toStatus }}</span>\r\n </div>\r\n <div class=\"text-xs text-gray-700\">\r\n {{ t(\"delegations.delegator-name\") }}:\r\n {{ entry.actor.displayName }}\r\n </div>\r\n @if (entry.reason) {\r\n <div class=\"text-xs text-gray-600\">\r\n {{ t(\"delegations.reason\") }}: {{ entry.reason }}\r\n </div>\r\n }\r\n </li>\r\n }\r\n @if (statusHistory().length === 0) {\r\n <li class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.status-history\") }} —\r\n {{ t(\"delegations.no-operations-selected\") }}\r\n </li>\r\n }\r\n </ol>\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n class=\"border-t border-gray-200 px-4 py-3 flex items-center justify-end\"\r\n >\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n (click)=\"ref.close()\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n linkedSignal,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { finalize } from 'rxjs';\r\nimport {\r\n Delegation,\r\n DelegationAllowedAction,\r\n DelegationListQuery,\r\n} from '../../../store/delegations/delegations.model';\r\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\r\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\r\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\r\nimport DelegationForm from '../delegation-form/delegation-form';\r\nimport DelegationDetailDrawer from '../delegation-detail-drawer/delegation-detail-drawer';\r\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\r\n\r\ntype DelegationTab = 'my' | 'assigned';\r\n\r\n/**\r\n * DelegationsPage — replaces the legacy single-list CRUD view with the target\r\n * two-list portal contract: \"My Delegations\" (I am delegator) and \"Delegated To Me\".\r\n *\r\n * - Rows render the BE-returned `allowedActions` only (never inferred).\r\n * - Lifecycle actions (Approve/Reject/Cancel/Edit/StartSession) dispatch through\r\n * the facade and the row is replaced in place from the response.\r\n * - Scope/detail drawer and full scope-picker form are still incremental work;\r\n * the form drawer here covers Edit/Create with the core fields.\r\n */\r\n@Component({\r\n selector: 'mt-delegations-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Avatar,\r\n Breadcrumb,\r\n Table,\r\n TranslocoDirective,\r\n DelegationStatusChip,\r\n ],\r\n templateUrl: './delegations-list.html',\r\n styleUrl: './delegations-list.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class DelegationsList implements OnInit {\r\n private readonly facade = inject(DelegationsFacade);\r\n private readonly session = inject(DelegationSessionFacade);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n // ---- Page header (unchanged from legacy admin breadcrumbs) ----\r\n protected readonly breadcrumbItems = linkedSignal(() => [\r\n {\r\n label: '',\r\n icon: 'general.home-line',\r\n routerLink: '/control-panel/workspaces',\r\n },\r\n {\r\n label: this.transloco.translate('product-settings.product-settings'),\r\n routerLink: '/control-panel/product-settings',\r\n },\r\n {\r\n label: this.transloco.translate('delegations.delegations'),\r\n },\r\n ]);\r\n\r\n // ---- Tabs ----\r\n protected readonly activeTab = signal<DelegationTab>('my');\r\n protected readonly tabs = signal([\r\n {\r\n value: 'my' as DelegationTab,\r\n label: this.transloco.translate('delegations.my-delegations'),\r\n },\r\n {\r\n value: 'assigned' as DelegationTab,\r\n label: this.transloco.translate('delegations.delegated-to-me'),\r\n },\r\n ]);\r\n\r\n // ---- Loading / data ----\r\n protected readonly isLoading = computed(() =>\r\n this.activeTab() === 'my'\r\n ? this.facade.isLoadingMy()\r\n : this.facade.isLoadingAssigned(),\r\n );\r\n protected readonly rows = computed(() =>\r\n this.activeTab() === 'my'\r\n ? this.facade.myItems()\r\n : this.facade.assignedItems(),\r\n );\r\n\r\n // ---- Column templates ----\r\n statusCol = viewChild.required<TemplateRef<unknown>>('statusCol');\r\n userCol = viewChild.required<TemplateRef<unknown>>('userCol');\r\n scopeCol = viewChild.required<TemplateRef<unknown>>('scopeCol');\r\n daysCol = viewChild.required<TemplateRef<unknown>>('daysCol');\r\n\r\n // ---- Table actions (header) ----\r\n protected readonly tableActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.plus',\r\n label: this.transloco.translate('delegations.add-delegation'),\r\n color: 'primary',\r\n action: () => this.openForm(null),\r\n },\r\n ]);\r\n\r\n // ---- Per-row action: read ONLY allowedActions from BE ----\r\n protected readonly rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.eye',\r\n tooltip: this.transloco.translate('delegations.view-details'),\r\n color: 'primary',\r\n variant: 'outlined',\r\n action: (row: Delegation) => this.viewDetails(row),\r\n hidden: (row: Delegation) => !this.has(row, 'View'),\r\n },\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.transloco.translate('edit'),\r\n color: 'primary',\r\n action: (row: Delegation) => this.openForm(row),\r\n hidden: (row: Delegation) => !this.has(row, 'Edit'),\r\n },\r\n {\r\n icon: 'general.check',\r\n tooltip: this.transloco.translate('delegations.approve'),\r\n color: 'primary',\r\n action: (row: Delegation) => this.approve(row),\r\n hidden: (row: Delegation) => !this.has(row, 'Approve'),\r\n loading: (row: Delegation) =>\r\n this.busyIds().includes(`approve:${row.id}`),\r\n confirmation: { type: 'popup' },\r\n },\r\n {\r\n icon: 'general.x-close',\r\n tooltip: this.transloco.translate('delegations.reject'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: Delegation) => this.reject(row),\r\n hidden: (row: Delegation) => !this.has(row, 'Reject'),\r\n loading: (row: Delegation) => this.busyIds().includes(`reject:${row.id}`),\r\n confirmation: { type: 'popup' },\r\n },\r\n {\r\n icon: 'general.x-close',\r\n tooltip: this.transloco.translate('delegations.cancel-delegation'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: Delegation) => this.cancel(row),\r\n hidden: (row: Delegation) =>\r\n !this.has(row, 'Cancel') ||\r\n // If row also has Approve/Reject, the cancel for a delegate is \"withdraw\";\r\n // the assertion stays — both can render and BE decides outcome.\r\n false,\r\n loading: (row: Delegation) => this.busyIds().includes(`cancel:${row.id}`),\r\n confirmation: { type: 'popup' },\r\n },\r\n {\r\n icon: 'arrow.arrow-right',\r\n tooltip: this.transloco.translate('delegations.start-session'),\r\n color: 'primary',\r\n action: (row: Delegation) => this.startSession(row),\r\n hidden: (row: Delegation) => !this.has(row, 'StartSession'),\r\n },\r\n ]);\r\n\r\n protected readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'status',\r\n label: this.transloco.translate('delegations.status'),\r\n type: 'custom',\r\n customCellTpl: this.statusCol(),\r\n },\r\n {\r\n key: this.activeTab() === 'my' ? 'delegatedUser' : 'delegator',\r\n label: this.transloco.translate(\r\n this.activeTab() === 'my'\r\n ? 'delegations.delegated-to'\r\n : 'delegations.delegator-name',\r\n ),\r\n type: 'custom',\r\n customCellTpl: this.userCol(),\r\n },\r\n {\r\n key: 'scope',\r\n label: this.transloco.translate('delegations.scope'),\r\n type: 'custom',\r\n customCellTpl: this.scopeCol(),\r\n },\r\n {\r\n key: 'startDateUtc',\r\n label: this.transloco.translate('delegations.start-date'),\r\n type: 'dateTime',\r\n },\r\n {\r\n key: 'endDateUtc',\r\n label: this.transloco.translate('delegations.end-date'),\r\n type: 'dateTime',\r\n },\r\n {\r\n key: 'dayRules',\r\n label: this.transloco.translate('delegations.days'),\r\n type: 'custom',\r\n customCellTpl: this.daysCol(),\r\n },\r\n ]);\r\n\r\n // ---- per-row \"busy\" tracking (no row-version conflict UX yet — toast suffices) ----\r\n private readonly busyIds = signal<string[]>([]);\r\n\r\n private readonly weekdayKeys = [\r\n 'sunday',\r\n 'monday',\r\n 'tuesday',\r\n 'wednesday',\r\n 'thursday',\r\n 'friday',\r\n 'saturday',\r\n ] as const;\r\n\r\n // ---------------------------------------------------------------------------\r\n // Init / tab change\r\n // ---------------------------------------------------------------------------\r\n ngOnInit(): void {\r\n this.loadCurrentTab();\r\n }\r\n\r\n protected switchTab(tab: DelegationTab): void {\r\n this.activeTab.set(tab);\r\n this.loadCurrentTab();\r\n }\r\n\r\n private loadCurrentTab(\r\n query: DelegationListQuery = { page: 1, pageSize: 20 },\r\n ): void {\r\n if (this.activeTab() === 'my') {\r\n this.facade.getMy(query);\r\n } else {\r\n this.facade.getAssigned(query);\r\n }\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Helpers\r\n // ---------------------------------------------------------------------------\r\n protected has(row: Delegation, action: DelegationAllowedAction): boolean {\r\n return row.allowedActions?.includes(action) ?? false;\r\n }\r\n\r\n protected formatDays(row: Delegation): string {\r\n if (\r\n row.dayRules?.type === 'SpecificDays' &&\r\n row.dayRules.specificDays?.length\r\n ) {\r\n return row.dayRules.specificDays\r\n .filter((d) => d >= 0 && d < this.weekdayKeys.length)\r\n .map((d) =>\r\n this.transloco.translate(`delegations.${this.weekdayKeys[d]}`),\r\n )\r\n .join(', ');\r\n }\r\n return this.transloco.translate('delegations.all-days');\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Lifecycle actions\r\n // ---------------------------------------------------------------------------\r\n private viewDetails(row: Delegation): void {\r\n this.modal.openModal(DelegationDetailDrawer, 'drawer', {\r\n header: this.transloco.translate('delegations.view-details'),\r\n styleClass:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: { delegationId: row.id },\r\n });\r\n }\r\n\r\n private openForm(row: Delegation | null, readonly = false): void {\r\n const isDrawer: 'drawer' | 'dialog' = row ? 'drawer' : 'dialog';\r\n this.modal.openModal(DelegationForm, isDrawer, {\r\n header: this.transloco.translate(\r\n row ? 'delegations.edit-delegation' : 'delegations.create-delegation',\r\n ),\r\n styleClass:\r\n isDrawer === 'drawer'\r\n ? '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]'\r\n : '!w-[min(96vw,50rem)] !max-w-[96vw] !h-[min(90vh,40rem)] !max-h-[90vh]',\r\n position: isDrawer === 'drawer' ? 'end' : '',\r\n appendTo: isDrawer === 'drawer' ? 'page-content' : 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n delegationForEdit: row,\r\n readonly,\r\n },\r\n });\r\n }\r\n\r\n private approve(row: Delegation): void {\r\n this.mark(`approve:${row.id}`, true);\r\n this.facade\r\n .approve(row.id, { rowVersion: row.rowVersion })\r\n .pipe(finalize(() => this.mark(`approve:${row.id}`, false)))\r\n .subscribe();\r\n }\r\n\r\n private reject(row: Delegation): void {\r\n this.mark(`reject:${row.id}`, true);\r\n this.facade\r\n .reject(row.id, {\r\n rowVersion: row.rowVersion,\r\n reason: this.transloco.translate('delegations.reject'),\r\n })\r\n .pipe(finalize(() => this.mark(`reject:${row.id}`, false)))\r\n .subscribe();\r\n }\r\n\r\n private cancel(row: Delegation): void {\r\n this.mark(`cancel:${row.id}`, true);\r\n this.facade\r\n .cancel(row.id, {\r\n rowVersion: row.rowVersion,\r\n reason: this.transloco.translate('delegations.cancel-delegation'),\r\n })\r\n .pipe(finalize(() => this.mark(`cancel:${row.id}`, false)))\r\n .subscribe();\r\n }\r\n\r\n private startSession(row: Delegation): void {\r\n this.modal.openModal(StartSessionDialog, 'dialog', {\r\n header: this.transloco.translate('delegations.start-session'),\r\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n candidate: {\r\n id: row.id,\r\n delegator: row.delegator,\r\n delegatedUser: row.delegatedUser,\r\n status: row.status,\r\n allowedActions: row.allowedActions,\r\n startDateUtc: row.startDateUtc,\r\n endDateUtc: row.endDateUtc,\r\n scopeSummary: row.scope?.summary,\r\n },\r\n intent: 'start',\r\n },\r\n });\r\n }\r\n\r\n private mark(key: string, on: boolean): void {\r\n this.busyIds.update((ids) =>\r\n on ? [...ids, key] : ids.filter((id) => id !== key),\r\n );\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"flex flex-col h-full gap-2 p-4\">\r\n <mt-breadcrumb [items]=\"breadcrumbItems()\"></mt-breadcrumb>\r\n\r\n <div class=\"flex items-center gap-2 border-b border-gray-200\">\r\n @for (tab of tabs(); track tab.value) {\r\n <button\r\n type=\"button\"\r\n class=\"px-4 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\r\n [class.border-primary]=\"activeTab() === tab.value\"\r\n [class.text-primary]=\"activeTab() === tab.value\"\r\n [class.border-transparent]=\"activeTab() !== tab.value\"\r\n [class.text-gray-500]=\"activeTab() !== tab.value\"\r\n (click)=\"switchTab(tab.value)\"\r\n >\r\n {{ tab.label }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <mt-table\r\n [data]=\"rows()\"\r\n [columns]=\"tableColumns()\"\r\n [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\"\r\n [loading]=\"isLoading()\"\r\n >\r\n <ng-template #statusCol let-row>\r\n <mt-delegation-status-chip\r\n [status]=\"row.status\"\r\n ></mt-delegation-status-chip>\r\n </ng-template>\r\n\r\n <ng-template #userCol let-row>\r\n @let user = activeTab() === \"my\" ? row.delegatedUser : row.delegator;\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar\r\n [image]=\"user?.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-8! h-8!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span class=\"text-sm text-gray-900 truncate\">\r\n {{ user?.displayName }}\r\n </span>\r\n @if (user?.email) {\r\n <span class=\"text-xs text-gray-500 truncate\">\r\n {{ user.email }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #scopeCol let-row>\r\n <span class=\"text-sm text-gray-700\" [title]=\"row.scope?.summary\">\r\n {{ row.scope?.summary || \"—\" }}\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #daysCol let-row>\r\n <span class=\"text-sm text-gray-700\">{{ formatDays(row) }}</span>\r\n </ng-template>\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n","import { HttpInterceptorFn } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { DelegationSessionFacade } from '../store/session/delegation-session.facade';\r\n\r\n/**\r\n * Pattern for endpoints that should NEVER receive the `app-delegation` header.\r\n * Token issuance, refresh, end-session and session-read calls use only `Authorization`\r\n * (architecture doc §9.1).\r\n */\r\nconst EXCLUDE =\r\n /\\bidentity\\/delegations\\/(?:[^/]+\\/)?(?:token|session)(?:\\/|$)/i;\r\n\r\n/**\r\n * Adds `app-delegation: Bearer <token>` to outgoing requests when a delegation\r\n * session is active. Token-management endpoints are excluded.\r\n *\r\n * Register AFTER the gateway-auth interceptor (so `Authorization` is set first)\r\n * and BEFORE the message interceptor (so 403s still flow through toast handling).\r\n */\r\nexport const appDelegationInterceptor: HttpInterceptorFn = (req, next) => {\r\n if (EXCLUDE.test(req.url)) {\r\n return next(req);\r\n }\r\n\r\n const token = inject(DelegationSessionFacade).accessToken();\r\n if (!token) {\r\n return next(req);\r\n }\r\n\r\n return next(\r\n req.clone({\r\n setHeaders: { 'app-delegation': `Bearer ${token}` },\r\n }),\r\n );\r\n};\r\n","// store/index.ts\r\nexport * from './delegations';\r\nexport * from './session';\r\n","// Runtime UI surfaces — projected into host topbars + opened via ModalService.\r\nexport { TopbarDelegationMenu } from './lib/delegations/topbar-delegation-menu/topbar-delegation-menu';\r\nexport { DelegationStatusChip } from './lib/delegations/delegation-status-chip/delegation-status-chip';\r\nexport { default as StartSessionDialog } from './lib/delegations/start-session-dialog/start-session-dialog';\r\n\r\n// Management UI — portal page (My Delegations / Delegated To Me) + form + detail drawer.\r\nexport { default as Delegations } from './lib/delegations/delegations';\r\nexport { default as DelegationsList } from './lib/delegations/delegations-list/delegations-list';\r\nexport { default as DelegationForm } from './lib/delegations/delegation-form/delegation-form';\r\nexport { default as DelegationDetailDrawer } from './lib/delegations/delegation-detail-drawer/delegation-detail-drawer';\r\nexport { ScopePicker } from './lib/delegations/delegation-form/scope-picker/scope-picker';\r\n\r\n// HTTP\r\nexport { appDelegationInterceptor } from './interceptors/app-delegation.interceptor';\r\n\r\n// Store (models, actions, state, facades — both delegations and session)\r\nexport * from './store';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BASE","__decorate","EMPTY_SCOPE","i1","i2"],"mappings":"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"}
|