@masterteam/delegations 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
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';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Chip } from '@masterteam/components/chip';\nimport { DelegationEffectiveStatus } from '../../../store/delegations/delegations.model';\n\ninterface StatusVisual {\n i18nKey: string;\n styleClass: string;\n}\n\nconst STATUS_VISUAL: Record<DelegationEffectiveStatus, StatusVisual> = {\n Active: {\n i18nKey: 'delegations.status.active',\n styleClass: 'mt-status-chip mt-status-chip--active',\n },\n Scheduled: {\n i18nKey: 'delegations.status.scheduled',\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\n },\n PendingApproval: {\n i18nKey: 'delegations.status.pendingApproval',\n styleClass: 'mt-status-chip mt-status-chip--pending',\n },\n InactiveToday: {\n i18nKey: 'delegations.status.inactiveToday',\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\n },\n Expired: {\n i18nKey: 'delegations.status.expired',\n styleClass: 'mt-status-chip mt-status-chip--expired',\n },\n Rejected: {\n i18nKey: 'delegations.status.rejected',\n styleClass: 'mt-status-chip mt-status-chip--rejected',\n },\n Cancelled: {\n i18nKey: 'delegations.status.cancelled',\n styleClass: 'mt-status-chip mt-status-chip--cancelled',\n },\n};\n\n@Component({\n selector: 'mt-delegation-status-chip',\n standalone: true,\n imports: [Chip, TranslocoDirective],\n template: `\n <ng-container *transloco=\"let t\">\n @let v = visual();\n <mt-chip [label]=\"t(v.i18nKey)\" [styleClass]=\"v.styleClass\"></mt-chip>\n </ng-container>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n :host ::ng-deep .mt-status-chip {\n font-weight: 500;\n font-size: 0.75rem;\n border-radius: 9999px;\n padding-inline: 0.625rem;\n padding-block: 0.125rem;\n }\n :host ::ng-deep .mt-status-chip--active {\n background-color: rgb(220 252 231);\n color: rgb(22 101 52);\n }\n :host ::ng-deep .mt-status-chip--scheduled {\n background-color: rgb(219 234 254);\n color: rgb(30 64 175);\n }\n :host ::ng-deep .mt-status-chip--pending {\n background-color: rgb(254 249 195);\n color: rgb(133 77 14);\n }\n :host ::ng-deep .mt-status-chip--expired {\n background-color: rgb(243 244 246);\n color: rgb(75 85 99);\n }\n :host ::ng-deep .mt-status-chip--rejected {\n background-color: rgb(254 226 226);\n color: rgb(153 27 27);\n }\n :host ::ng-deep .mt-status-chip--cancelled {\n background-color: rgb(229 231 235);\n color: rgb(55 65 81);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--active {\n background-color: rgba(34, 197, 94, 0.2);\n color: rgb(134 239 172);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--scheduled {\n background-color: rgba(59, 130, 246, 0.2);\n color: rgb(147 197 253);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--pending {\n background-color: rgba(234, 179, 8, 0.2);\n color: rgb(253 224 71);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--expired {\n background-color: rgba(148, 163, 184, 0.2);\n color: rgb(203 213 225);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--rejected {\n background-color: rgba(239, 68, 68, 0.2);\n color: rgb(252 165 165);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--cancelled {\n background-color: rgba(148, 163, 184, 0.15);\n color: rgb(203 213 225);\n }\n `,\n ],\n})\nexport class DelegationStatusChip {\n readonly status = input.required<DelegationEffectiveStatus>();\n\n protected readonly visual = computed<StatusVisual>(\n () => STATUS_VISUAL[this.status()] ?? STATUS_VISUAL.Scheduled,\n );\n}\n","import { DelegationRow } from '../delegations/delegations.model';\nimport { DelegationSessionInvalidationReason } from './delegation-session.model';\n\n/** Fetch the active delegations the current user may start (user/activedelegations). */\nexport class LoadDelegationCandidates {\n static readonly type = '[DelegationSession] Load Candidates';\n}\n\n/** Start a delegated session for the given assignment row. */\nexport class StartDelegationSession {\n static readonly type = '[DelegationSession] Start';\n constructor(public delegation: DelegationRow) {}\n}\n\n/** End the current delegated session. Client-local only (doc 05). */\nexport class EndDelegationSession {\n static readonly type = '[DelegationSession] End';\n constructor(public reason: DelegationSessionInvalidationReason = 'Manual') {}\n}\n\n/** Switch directly from the current session to another delegation. */\nexport class SwitchDelegationSession {\n static readonly type = '[DelegationSession] Switch';\n constructor(public delegation: DelegationRow) {}\n}\n","import { LoadingStateShape } from '../utils/state-helpers';\nimport { DelegationRow } from '../delegations/delegations.model';\n\n/**\n * Active delegated session. Memory-only by design (doc 05):\n * the delegation token is never persisted to long-lived storage.\n *\n * `delegation.delegatedUser` is the executed-by (actual logged-in) user and\n * `delegation.delegator` is the on-behalf-of user — both already present on the\n * row from the active-delegations endpoint.\n */\nexport interface ActiveDelegationSession {\n token: string;\n delegation: DelegationRow;\n}\n\nexport type DelegationSessionInvalidationReason =\n | 'TokenInvalid'\n | 'SessionMismatch'\n | 'ScopeChanged'\n | 'Forbidden'\n | 'Logout'\n | 'UserSwitch'\n | 'Manual';\n\nexport enum DelegationSessionActionKey {\n LoadCandidates = 'loadCandidates',\n StartSession = 'startSession',\n}\n\nexport interface DelegationSessionStateModel extends LoadingStateShape<DelegationSessionActionKey> {\n active: ActiveDelegationSession | null;\n candidates: DelegationRow[];\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport {\n Action,\n Actions,\n ofActionDispatched,\n ofActionSuccessful,\n Selector,\n State,\n StateContext,\n Store,\n} from '@ngxs/store';\nimport { handleApiRequest } from '@masterteam/components';\nimport { EMPTY, switchMap } from 'rxjs';\nimport { Response } from '../delegations/api.model';\nimport {\n DelegationPage,\n DelegationRow,\n} from '../delegations/delegations.model';\nimport {\n EndDelegationSession,\n LoadDelegationCandidates,\n StartDelegationSession,\n SwitchDelegationSession,\n} from './delegation-session.actions';\nimport {\n ActiveDelegationSession,\n DelegationSessionActionKey,\n DelegationSessionStateModel,\n} from './delegation-session.model';\n\nconst BASE = 'identity/delegations';\n\n// Action shells matching gateway-auth type strings — loose coupling, matched by\n// `type` only so this package does not depend on @masterteam/gateway-auth.\nclass GatewayLoginSuccessShell {\n static readonly type = '[Auth] Login Success';\n}\nclass GatewayLogoutShell {\n static readonly type = '[Auth] Logout';\n}\n\nfunction canStart(row: DelegationRow): boolean {\n return (\n row.effectiveStatus === 'Active' &&\n row.allowedActions?.includes('StartSession')\n );\n}\n\n@State<DelegationSessionStateModel>({\n name: 'delegationSession',\n defaults: {\n active: null,\n candidates: [],\n loadingActive: [],\n errors: {},\n },\n})\n@Injectable()\nexport class DelegationSessionState {\n private http = inject(HttpClient);\n private actions$ = inject(Actions);\n private store = inject(Store);\n\n constructor() {\n this.actions$\n .pipe(ofActionSuccessful(GatewayLoginSuccessShell))\n .subscribe(() => this.store.dispatch(new LoadDelegationCandidates()));\n\n this.actions$\n .pipe(ofActionDispatched(GatewayLogoutShell))\n .subscribe(() => this.store.dispatch(new EndDelegationSession('Logout')));\n }\n\n // ---------------------------------------------------------------------------\n // Selectors\n // ---------------------------------------------------------------------------\n\n @Selector()\n static getActive(\n state: DelegationSessionStateModel,\n ): ActiveDelegationSession | null {\n return state.active;\n }\n\n @Selector()\n static getCandidates(state: DelegationSessionStateModel): DelegationRow[] {\n return state.candidates;\n }\n\n @Selector()\n static isDelegated(state: DelegationSessionStateModel): boolean {\n return !!state.active;\n }\n\n @Selector()\n static getLoadingActive(state: DelegationSessionStateModel): string[] {\n return state.loadingActive;\n }\n\n @Selector()\n static getErrors(\n state: DelegationSessionStateModel,\n ): Record<string, string | null | undefined> {\n return state.errors;\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n @Action(LoadDelegationCandidates)\n loadCandidates(ctx: StateContext<DelegationSessionStateModel>) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/user/activedelegations`,\n );\n return handleApiRequest({\n ctx,\n key: DelegationSessionActionKey.LoadCandidates,\n request$: req$,\n onSuccess: (response) => ({\n candidates: (response.data?.items ?? []).filter(canStart),\n }),\n });\n }\n\n @Action(StartDelegationSession)\n start(\n ctx: StateContext<DelegationSessionStateModel>,\n { delegation }: StartDelegationSession,\n ) {\n const req$ = this.http.post<Response<string>>(\n `${BASE}/delegationToken/${delegation.delegationId}`,\n {},\n );\n return handleApiRequest({\n ctx,\n key: DelegationSessionActionKey.StartSession,\n request$: req$,\n onSuccess: (response) => ({\n active: { token: response.data, delegation } as ActiveDelegationSession,\n }),\n });\n }\n\n @Action(EndDelegationSession)\n end(ctx: StateContext<DelegationSessionStateModel>) {\n // Client-local only — there is no server end-session endpoint (doc 05).\n ctx.patchState({ active: null });\n return EMPTY;\n }\n\n @Action(SwitchDelegationSession)\n switch(\n ctx: StateContext<DelegationSessionStateModel>,\n { delegation }: SwitchDelegationSession,\n ) {\n return this.store\n .dispatch(new EndDelegationSession('Manual'))\n .pipe(\n switchMap(() =>\n this.store.dispatch(new StartDelegationSession(delegation)),\n ),\n );\n }\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { select, Store } from '@ngxs/store';\nimport {\n EndDelegationSession,\n LoadDelegationCandidates,\n StartDelegationSession,\n SwitchDelegationSession,\n} from './delegation-session.actions';\nimport {\n DelegationSessionActionKey,\n DelegationSessionInvalidationReason,\n} from './delegation-session.model';\nimport { DelegationSessionState } from './delegation-session.state';\nimport { DelegationRow } from '../delegations/delegations.model';\n\n@Injectable({ providedIn: 'root' })\nexport class DelegationSessionFacade {\n private readonly store = inject(Store);\n\n // ---------------------------------------------------------------------------\n // Data slices\n // ---------------------------------------------------------------------------\n readonly active = select(DelegationSessionState.getActive);\n readonly candidates = select(DelegationSessionState.getCandidates);\n readonly isDelegated = select(DelegationSessionState.isDelegated);\n\n private readonly loadingActive = select(\n DelegationSessionState.getLoadingActive,\n );\n\n // ---------------------------------------------------------------------------\n // Derived (interceptor + topbar)\n // ---------------------------------------------------------------------------\n /** Raw delegation token for the `app-delegation` header. */\n readonly token = computed(() => this.active()?.token ?? null);\n /** On-behalf-of (delegator). */\n readonly onBehalfOf = computed(\n () => this.active()?.delegation.delegator ?? null,\n );\n /** Executed-by (actual logged-in / delegated user). */\n readonly executedBy = computed(\n () => this.active()?.delegation.delegatedUser ?? null,\n );\n readonly hasCandidates = computed(() => this.candidates().length > 0);\n\n readonly isStarting = computed(() =>\n this.loadingActive().includes(DelegationSessionActionKey.StartSession),\n );\n readonly isLoadingCandidates = computed(() =>\n this.loadingActive().includes(DelegationSessionActionKey.LoadCandidates),\n );\n\n // ---------------------------------------------------------------------------\n // Dispatchers\n // ---------------------------------------------------------------------------\n loadCandidates() {\n return this.store.dispatch(new LoadDelegationCandidates());\n }\n startSession(delegation: DelegationRow) {\n return this.store.dispatch(new StartDelegationSession(delegation));\n }\n switchSession(delegation: DelegationRow) {\n return this.store.dispatch(new SwitchDelegationSession(delegation));\n }\n endSession(reason: DelegationSessionInvalidationReason = 'Manual') {\n return this.store.dispatch(new EndDelegationSession(reason));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\n\n/**\n * Confirmation dialog before starting (or switching to) a delegated session.\n * Calls the facade, which POSTs to `delegationToken/{id}` and stores the raw\n * token in memory only.\n */\n@Component({\n selector: 'mt-start-session-dialog',\n standalone: true,\n imports: [CommonModule, Avatar, Button, TranslocoDirective],\n templateUrl: './start-session-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class StartSessionDialog {\n readonly delegation = input.required<DelegationRow>();\n readonly intent = input<'start' | 'switch'>('start');\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly facade = inject(DelegationSessionFacade);\n\n protected readonly isBusy = this.facade.isStarting;\n\n protected readonly bodyKey = computed(() =>\n this.intent() === 'switch'\n ? 'delegations.session.switchConfirmBody'\n : 'delegations.session.startConfirmBody',\n );\n\n confirm(): void {\n const row = this.delegation();\n const op$ =\n this.intent() === 'switch'\n ? this.facade.switchSession(row)\n : this.facade.startSession(row);\n op$.subscribe({\n next: () => this.ref.close(true),\n error: () => {\n /* error surfaced via shared toast pipeline; keep dialog open */\n },\n });\n }\n\n cancel(): void {\n this.ref.close(false);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <div class=\"flex items-start gap-3\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-12! h-12! text-lg! bg-surface-200!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <div class=\"text-base font-medium text-gray-900 truncate\">\n {{ delegation().delegator.displayName }}\n </div>\n @if (delegation().delegator.email) {\n <div class=\"text-xs text-gray-500 truncate\">\n {{ delegation().delegator.email }}\n </div>\n }\n @if (delegation().scopeSummary) {\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ delegation().scopeSummary }}\n </div>\n }\n </div>\n </div>\n\n <p class=\"text-sm text-gray-600 leading-relaxed\">\n {{ t(bodyKey()) }}\n </p>\n\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.cancel')\"\n [disabled]=\"isBusy()\"\n (click)=\"cancel()\"\n ></mt-button>\n <mt-button\n color=\"primary\"\n icon=\"user.users-check\"\n [label]=\"t('delegations.action.startSession')\"\n [loading]=\"isBusy()\"\n (click)=\"confirm()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { ModalService } from '@masterteam/components/modal';\nimport { Icon } from '@masterteam/icons';\nimport { Popover } from 'primeng/popover';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\n\n/**\n * Topbar surface for the delegation runtime (doc 05, 09).\n *\n * State A — no candidates, no active session: renders nothing.\n * State B — candidates exist, no active session: lets the user start a session.\n * State C — active delegated session: shows \"Acting on behalf of {delegator}\" +\n * \"Executed by {actual user}\", plus Back / Switch.\n */\n@Component({\n selector: 'mt-topbar-delegation-menu',\n standalone: true,\n imports: [\n CommonModule,\n Avatar,\n Button,\n Icon,\n Popover,\n RouterLink,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './topbar-delegation-menu.html',\n styleUrls: ['./topbar-delegation-menu.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TopbarDelegationMenu {\n /** Path to the management page, e.g. `/control-panel/delegations` or `/delegations`. */\n readonly managePath = input<string>('/delegations');\n readonly compact = input<boolean>(false);\n\n private readonly facade = inject(DelegationSessionFacade);\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly popover = viewChild.required<Popover>('popover');\n\n protected readonly active = this.facade.active;\n protected readonly candidates = this.facade.candidates;\n protected readonly hasCandidates = this.facade.hasCandidates;\n protected readonly onBehalfOf = this.facade.onBehalfOf;\n protected readonly executedBy = this.facade.executedBy;\n\n protected readonly mode = computed<'hidden' | 'candidates' | 'active'>(() => {\n if (this.active()) return 'active';\n if (this.hasCandidates()) return 'candidates';\n return 'hidden';\n });\n\n togglePopover(event: Event): void {\n this.popover().toggle(event);\n }\n\n start(row: DelegationRow, event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.openConfirm(row, 'start');\n }\n\n switchTo(row: DelegationRow, event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.openConfirm(row, 'switch');\n }\n\n endSession(event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.facade.endSession('Manual').subscribe();\n }\n\n private openConfirm(row: DelegationRow, intent: 'start' | 'switch'): void {\n this.modal.openModal(StartSessionDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.startSession'),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent },\n });\n }\n}\n","<ng-container *transloco=\"let t\">\n @if (mode() !== \"hidden\") {\n <div class=\"mt-delegation-trigger flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"mt-delegation-trigger__button flex items-center gap-2 px-2 py-1 rounded-full cursor-pointer hover:bg-surface-100\"\n [attr.aria-label]=\"t('delegations.title')\"\n (click)=\"togglePopover($event)\"\n >\n @if (mode() === \"active\") {\n <mt-icon\n icon=\"user.users-check\"\n styleClass=\"text-lg text-primary\"\n ></mt-icon>\n @if (!compact()) {\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\n {{\n t(\"delegations.session.banner\", {\n delegatorName: onBehalfOf()?.displayName,\n })\n }}\n </span>\n }\n <mt-delegation-status-chip\n status=\"Active\"\n ></mt-delegation-status-chip>\n } @else {\n <mt-icon\n icon=\"user.users-plus\"\n styleClass=\"text-lg text-primary\"\n ></mt-icon>\n @if (!compact()) {\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\n {{ t(\"delegations.session.availableTitle\") }}\n </span>\n }\n }\n </button>\n </div>\n\n <p-popover #popover [pt]=\"{ content: { class: 'p-0!' } }\">\n <div class=\"flex flex-col min-w-80 max-w-96 p-0\">\n @if (mode() === \"active\" && active(); as session) {\n <!-- STATE C — active session -->\n <div\n class=\"flex items-start gap-3 border-b border-gray-200 px-4 py-4\"\n >\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-11! h-11! text-xl! text-gray-600! bg-surface-300!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0 flex-1\">\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.session.actingOnBehalfOf\") }}\n </div>\n <div class=\"text-sm font-medium text-gray-900 truncate\">\n {{ onBehalfOf()?.displayName }}\n </div>\n <div class=\"text-xs text-gray-500 mt-1\">\n {{\n t(\"delegations.session.executedBy\", {\n actualUserName: executedBy()?.displayName,\n })\n }}\n </div>\n @if (session.delegation.scopeSummary) {\n <div\n class=\"text-xs text-gray-500 mt-1 truncate\"\n [title]=\"session.delegation.scopeSummary\"\n >\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ session.delegation.scopeSummary }}\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1 px-2 py-2\">\n <mt-button\n variant=\"text\"\n icon=\"arrow.arrow-left\"\n [label]=\"t('delegations.action.endSession')\"\n styleClass=\"w-full justify-start\"\n (click)=\"endSession($event)\"\n ></mt-button>\n </div>\n\n @if (candidates().length > 1) {\n <div class=\"border-t border-gray-200 pt-2 px-2 pb-2\">\n <div class=\"text-xs text-gray-500 px-2 pb-1\">\n {{ t(\"delegations.session.switchToAnother\") }}\n </div>\n @for (cand of candidates(); track cand.delegationId) {\n @if (cand.delegationId !== session.delegation.delegationId) {\n <button\n type=\"button\"\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer\"\n (click)=\"switchTo(cand, $event)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-7! h-7! text-sm! bg-surface-200!\"\n ></mt-avatar>\n <span class=\"text-sm text-gray-900 truncate\">\n {{ cand.delegator.displayName }}\n </span>\n </div>\n <mt-icon\n icon=\"arrow.switch-horizontal-01\"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n </button>\n }\n }\n </div>\n }\n } @else if (mode() === \"candidates\") {\n <!-- STATE B — candidates available -->\n <div class=\"border-b border-gray-200 px-4 py-3\">\n <div class=\"text-sm font-medium text-gray-900\">\n {{ t(\"delegations.session.youCanActAs\") }}\n </div>\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.session.chooseDelegatorHint\") }}\n </div>\n </div>\n <div class=\"flex flex-col gap-1 px-2 py-2 max-h-72 overflow-y-auto\">\n @for (cand of candidates(); track cand.delegationId) {\n <button\n type=\"button\"\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\"\n (click)=\"start(cand, $event)\"\n >\n <div class=\"flex items-center gap-2 min-w-0 flex-1\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-9! h-9! text-base! bg-surface-200!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm font-medium text-gray-900 truncate\">\n {{ cand.delegator.displayName }}\n </span>\n @if (cand.scopeSummary) {\n <span\n class=\"text-xs text-gray-500 truncate\"\n [title]=\"cand.scopeSummary\"\n >\n {{ cand.scopeSummary }}\n </span>\n }\n </div>\n </div>\n <mt-icon\n icon=\"arrow.arrow-right\"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n </button>\n }\n </div>\n }\n\n <!-- Footer -->\n <div class=\"border-t border-gray-200 px-2 py-2\">\n <a\n [routerLink]=\"managePath()\"\n (click)=\"popover().hide()\"\n class=\"flex items-center gap-2 px-3 py-2 rounded-md text-gray-700 hover:bg-surface-100 text-sm cursor-pointer\"\n >\n <mt-icon\n icon=\"general.settings-02\"\n styleClass=\"text-base\"\n ></mt-icon>\n <span>{{ t(\"delegations.session.manage\") }}</span>\n </a>\n </div>\n </div>\n </p-popover>\n }\n</ng-container>\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.title')\"\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 {\n ApproveDelegationRequest,\n CreateDelegationLegacyRequest,\n CreateDelegationV2Request,\n DelegationListQuery,\n DelegationScopeSelection,\n RejectDelegationRequest,\n UpdateDelegationLegacyRequest,\n UpdateDelegationV2Request,\n} from './delegations.model';\n\n// ---------------------------------------------------------------------------\n// Lists / detail\n// ---------------------------------------------------------------------------\n\nexport class GetMyDelegations {\n static readonly type = '[Delegations] Get My Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetAssignedDelegations {\n static readonly type = '[Delegations] Get Assigned Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetActiveAssignedDelegations {\n static readonly type = '[Delegations] Get Active Assigned Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetDelegationDetail {\n static readonly type = '[Delegations] Get Delegation Detail';\n constructor(public id: number) {}\n}\n\nexport class ClearDelegationDetail {\n static readonly type = '[Delegations] Clear Delegation Detail';\n}\n\n// ---------------------------------------------------------------------------\n// Scope\n// ---------------------------------------------------------------------------\n\nexport class GetScopeOptions {\n static readonly type = '[Delegations] Get Scope Options';\n constructor(public delegatorUserId?: string) {}\n}\n\nexport class PreviewScope {\n static readonly type = '[Delegations] Preview Scope';\n constructor(public scope: DelegationScopeSelection) {}\n}\n\nexport class ClearScopePreview {\n static readonly type = '[Delegations] Clear Scope Preview';\n}\n\n// ---------------------------------------------------------------------------\n// Create / edit (legacy + v2)\n// ---------------------------------------------------------------------------\n\nexport class CreateDelegationLegacy {\n static readonly type = '[Delegations] Create Delegation (legacy)';\n constructor(public request: CreateDelegationLegacyRequest) {}\n}\n\nexport class CreateDelegationV2 {\n static readonly type = '[Delegations] Create Delegation (v2)';\n constructor(public request: CreateDelegationV2Request) {}\n}\n\nexport class UpdateDelegationLegacy {\n static readonly type = '[Delegations] Update Delegation (legacy)';\n constructor(\n public id: number,\n public request: UpdateDelegationLegacyRequest,\n ) {}\n}\n\nexport class UpdateDelegationV2 {\n static readonly type = '[Delegations] Update Delegation (v2)';\n constructor(\n public id: number,\n public request: UpdateDelegationV2Request,\n ) {}\n}\n\n// ---------------------------------------------------------------------------\n// Decisions\n// ---------------------------------------------------------------------------\n\nexport class ApproveDelegation {\n static readonly type = '[Delegations] Approve Delegation';\n constructor(\n public id: number,\n public request: ApproveDelegationRequest,\n ) {}\n}\n\nexport class RejectDelegation {\n static readonly type = '[Delegations] Reject Delegation';\n constructor(\n public id: number,\n public request: RejectDelegationRequest,\n ) {}\n}\n\nexport class CancelDelegation {\n static readonly type = '[Delegations] Cancel Delegation';\n constructor(\n public id: number,\n public rowVersion: string,\n public asAdmin: boolean = false,\n ) {}\n}\n","import { LoadingStateShape } from '../utils/state-helpers';\n\n// ============================================================================\n// Status / approval / actions (doc 01, 16)\n// ============================================================================\n\nexport type DelegationEffectiveStatus =\n | 'PendingApproval'\n | 'Scheduled'\n | 'Active'\n | 'InactiveToday'\n | 'Expired'\n | 'Rejected'\n | 'Cancelled';\n\nexport type DelegationApprovalStatus =\n | 'NotRequired'\n | 'Pending'\n | 'Approved'\n | 'Rejected';\n\nexport type DelegationAllowedAction =\n | 'View'\n | 'Edit'\n | 'Approve'\n | 'Reject'\n | 'Cancel'\n | 'StartSession'\n | 'EndSession';\n\nexport type DelegationDayRuleMode = 'FullRange' | 'SpecificDays';\n\n// ============================================================================\n// Parties + row (doc 02)\n// ============================================================================\n\nexport interface DelegationParty {\n userId: string;\n displayName: string;\n email?: string | null;\n}\n\nexport interface DelegationApprovalInfo {\n requiresApproval: boolean;\n approvalStatus: DelegationApprovalStatus;\n}\n\nexport interface DelegationCancellationInfo {\n cancelledBy?: DelegationParty | null;\n cancelledAtUtc?: string | null;\n cancellationReason?: string | null;\n}\n\nexport interface DelegationRow {\n delegationId: number;\n delegator: DelegationParty;\n delegatedUser: DelegationParty;\n startsAtUtc: string;\n endsAtUtc: string;\n timeZoneId: string;\n dayRuleMode: DelegationDayRuleMode;\n specificDays: number[];\n effectiveStatus: DelegationEffectiveStatus;\n statusReasonCode: string;\n createdBy: DelegationParty;\n createdAtUtc: string;\n approval: DelegationApprovalInfo;\n cancellation: DelegationCancellationInfo;\n allowedActions: DelegationAllowedAction[];\n scopeSummary: string;\n rowVersion: string;\n}\n\nexport interface DelegationPage<T> {\n items: T[];\n page: number;\n pageSize: number;\n totalCount: number;\n}\n\n// ============================================================================\n// Scope — grants based (doc 03, 04)\n// ============================================================================\n\nexport interface DelegationScopeTarget {\n applicationKey: string;\n targetType: string;\n targetKey: string;\n legacyModuleId?: number | null;\n targetId?: number | null;\n levelId?: number | null;\n levelModuleId?: number | null;\n domainModuleId?: number | null;\n moduleKey?: string | null;\n permissionModuleType?: string | null;\n permissionTargetId?: number | null;\n displayName?: string | null;\n}\n\nexport interface DelegationScopeAction {\n applicationKey: string;\n operationKey: string;\n operationKind: string;\n permissionCommand?: string | null;\n businessActionCode?: string | null;\n isHighRisk?: boolean;\n isDelegableSnapshot?: boolean;\n}\n\nexport interface DelegationGrant {\n applicationKey: string;\n target: DelegationScopeTarget;\n action: DelegationScopeAction;\n accessibilities: unknown[];\n dataFilters: unknown[];\n constraints: unknown[];\n}\n\nexport interface DelegationScopeSelection {\n grants: DelegationGrant[];\n metadata: Record<string, unknown>;\n}\n\n/** `scope/options` returns the grantable set in the same grants shape. */\nexport type DelegationScopeOptions = DelegationScopeSelection;\n\nexport interface DelegationScopeWarning {\n code?: string;\n message: string;\n}\n\nexport interface DelegationScopeDeniedItem {\n applicationKey: string;\n targetType: string;\n targetKey: string;\n operationKey: string;\n permissionCommand?: string;\n reasonCode: string;\n}\n\nexport interface DelegationScopePreview {\n isValid: boolean;\n normalizedScope: DelegationScopeSelection;\n scopeHash: string;\n summary: string;\n warnings: DelegationScopeWarning[];\n deniedItems: DelegationScopeDeniedItem[];\n}\n\n// ============================================================================\n// Detail (doc 02)\n// ============================================================================\n\nexport interface DelegationStatusInfo {\n effectiveStatus: DelegationEffectiveStatus;\n reasonCode: string;\n calculatedAtUtc: string;\n}\n\nexport interface DelegationDetail {\n row: DelegationRow;\n scope: DelegationScopeSelection;\n status: DelegationStatusInfo;\n}\n\n// ============================================================================\n// Legacy create/edit DTO returned by create/edit (doc 02)\n// ============================================================================\n\nexport interface DelegationDto {\n id: number;\n fromUserId: string;\n toUserId: string;\n description?: string;\n isActive?: boolean;\n delegationDaysType: DelegationDayRuleMode;\n specificDays: number[];\n applicationId?: number;\n requiresApproval?: boolean;\n effectiveStatus: DelegationEffectiveStatus;\n statusReasonCode: string;\n allowedActions: DelegationAllowedAction[];\n rowVersion: string;\n [extra: string]: unknown;\n}\n\n// ============================================================================\n// List query (doc 02)\n// ============================================================================\n\nexport type DelegationSortDirection =\n | 'asc'\n | 'ascending'\n | 'desc'\n | 'descending';\n\nexport interface DelegationListQuery {\n activeOnly?: boolean;\n status?: DelegationEffectiveStatus;\n search?: string;\n fromUtc?: string;\n toUtc?: string;\n sortBy?: string;\n sortDirection?: DelegationSortDirection;\n page?: number;\n pageSize?: number;\n // admin only\n delegatorUserId?: string;\n delegatedUserId?: string;\n}\n\n// ============================================================================\n// Create / edit / decision requests (doc 04)\n// ============================================================================\n\nexport interface CreateDelegationLegacyRequest {\n delegateFrom?: string | null;\n delegateTo: string;\n description?: string;\n delegateFromDateTime: string;\n delegateToDateTime: string;\n accessibilityIds?: number[];\n moduleIds?: number[];\n delegationDaysType: DelegationDayRuleMode;\n specificDays?: number[];\n isActive?: boolean;\n requiresApproval?: boolean;\n}\n\nexport interface CreateDelegationV2Request {\n delegateFrom?: string | null;\n delegateTo: string;\n description?: string;\n delegateFromDateTime: string;\n delegateToDateTime: string;\n delegationDaysType: DelegationDayRuleMode;\n specificDays?: number[];\n requiresApproval: boolean;\n scope: DelegationScopeSelection;\n}\n\nexport type UpdateDelegationLegacyRequest = CreateDelegationLegacyRequest & {\n rowVersion: string;\n};\n\nexport type UpdateDelegationV2Request = CreateDelegationV2Request & {\n rowVersion: string;\n};\n\nexport interface ApproveDelegationRequest {\n rowVersion: string;\n reason?: string;\n}\n\nexport interface RejectDelegationRequest {\n rowVersion: string;\n reason: string;\n}\n\n// ============================================================================\n// NGXS state shape + action keys\n// ============================================================================\n\nexport enum DelegationsActionKey {\n GetMy = 'getMy',\n GetAssigned = 'getAssigned',\n GetActive = 'getActive',\n GetDetail = 'getDetail',\n GetScopeOptions = 'getScopeOptions',\n PreviewScope = 'previewScope',\n Create = 'create',\n Update = 'update',\n Approve = 'approve',\n Reject = 'reject',\n Cancel = 'cancel',\n}\n\nexport interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {\n my: DelegationPage<DelegationRow> | null;\n assigned: DelegationPage<DelegationRow> | null;\n active: DelegationPage<DelegationRow> | null;\n detail: DelegationDetail | null;\n scopeOptions: DelegationScopeOptions | null;\n scopePreview: DelegationScopePreview | null;\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { handleApiRequest } from '@masterteam/components';\nimport { Response } from './api.model';\nimport {\n ApproveDelegation,\n CancelDelegation,\n ClearDelegationDetail,\n ClearScopePreview,\n CreateDelegationLegacy,\n CreateDelegationV2,\n GetActiveAssignedDelegations,\n GetAssignedDelegations,\n GetDelegationDetail,\n GetMyDelegations,\n GetScopeOptions,\n PreviewScope,\n RejectDelegation,\n UpdateDelegationLegacy,\n UpdateDelegationV2,\n} from './delegations.actions';\nimport {\n DelegationDetail,\n DelegationDto,\n DelegationListQuery,\n DelegationPage,\n DelegationRow,\n DelegationScopeOptions,\n DelegationScopePreview,\n DelegationsActionKey,\n DelegationsStateModel,\n} from './delegations.model';\n\nconst BASE = 'identity/delegations';\n\nfunction buildListParams(query: DelegationListQuery): HttpParams {\n let params = new HttpParams();\n if (query.activeOnly != null)\n params = params.set('activeOnly', query.activeOnly);\n if (query.status) params = params.set('status', query.status);\n if (query.search) params = params.set('search', query.search);\n if (query.fromUtc) params = params.set('fromUtc', query.fromUtc);\n if (query.toUtc) params = params.set('toUtc', query.toUtc);\n if (query.sortBy) params = params.set('sortBy', query.sortBy);\n if (query.sortDirection)\n params = params.set('sortDirection', query.sortDirection);\n params = params.set('page', query.page ?? 1);\n params = params.set('pageSize', query.pageSize ?? 25);\n if (query.delegatorUserId)\n params = params.set('delegatorUserId', query.delegatorUserId);\n if (query.delegatedUserId)\n params = params.set('delegatedUserId', query.delegatedUserId);\n return params;\n}\n\n@State<DelegationsStateModel>({\n name: 'delegations',\n defaults: {\n my: null,\n assigned: null,\n active: null,\n detail: null,\n scopeOptions: null,\n scopePreview: null,\n loadingActive: [],\n errors: {},\n },\n})\n@Injectable()\nexport class DelegationsState {\n private http = inject(HttpClient);\n\n // ============================================================================\n // Selectors\n // ============================================================================\n\n @Selector()\n static getMy(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.my;\n }\n\n @Selector()\n static getAssigned(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.assigned;\n }\n\n @Selector()\n static getActive(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.active;\n }\n\n @Selector()\n static getDetail(state: DelegationsStateModel): DelegationDetail | null {\n return state.detail;\n }\n\n @Selector()\n static getScopeOptions(\n state: DelegationsStateModel,\n ): DelegationScopeOptions | null {\n return state.scopeOptions;\n }\n\n @Selector()\n static getScopePreview(\n state: DelegationsStateModel,\n ): DelegationScopePreview | null {\n return state.scopePreview;\n }\n\n @Selector()\n static getLoadingActive(state: DelegationsStateModel): string[] {\n return state.loadingActive;\n }\n\n @Selector()\n static getErrors(\n state: DelegationsStateModel,\n ): Record<string, string | null | undefined> {\n return state.errors;\n }\n\n // ============================================================================\n // Lists\n // ============================================================================\n\n @Action(GetMyDelegations)\n getMy(ctx: StateContext<DelegationsStateModel>, { query }: GetMyDelegations) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(BASE, {\n params: buildListParams(query),\n });\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetMy,\n request$: req$,\n onSuccess: (response) => ({ my: response.data }),\n });\n }\n\n @Action(GetAssignedDelegations)\n getAssigned(\n ctx: StateContext<DelegationsStateModel>,\n { query }: GetAssignedDelegations,\n ) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/assigned`,\n { params: buildListParams(query) },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetAssigned,\n request$: req$,\n onSuccess: (response) => ({ assigned: response.data }),\n });\n }\n\n @Action(GetActiveAssignedDelegations)\n getActive(\n ctx: StateContext<DelegationsStateModel>,\n { query }: GetActiveAssignedDelegations,\n ) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/user/activedelegations`,\n { params: buildListParams(query) },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetActive,\n request$: req$,\n onSuccess: (response) => ({ active: response.data }),\n });\n }\n\n @Action(GetDelegationDetail)\n getDetail(\n ctx: StateContext<DelegationsStateModel>,\n { id }: GetDelegationDetail,\n ) {\n const req$ = this.http.get<Response<DelegationDetail>>(`${BASE}/${id}`);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetDetail,\n request$: req$,\n onSuccess: (response) => ({ detail: response.data ?? null }),\n });\n }\n\n @Action(ClearDelegationDetail)\n clearDetail(ctx: StateContext<DelegationsStateModel>) {\n ctx.patchState({ detail: null });\n }\n\n // ============================================================================\n // Scope\n // ============================================================================\n\n @Action(GetScopeOptions)\n getScopeOptions(\n ctx: StateContext<DelegationsStateModel>,\n { delegatorUserId }: GetScopeOptions,\n ) {\n let params = new HttpParams();\n if (delegatorUserId)\n params = params.set('delegatorUserId', delegatorUserId);\n const req$ = this.http.get<Response<DelegationScopeOptions>>(\n `${BASE}/scope/options`,\n { params },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetScopeOptions,\n request$: req$,\n onSuccess: (response) => ({ scopeOptions: response.data ?? null }),\n });\n }\n\n @Action(PreviewScope)\n previewScope(\n ctx: StateContext<DelegationsStateModel>,\n { scope }: PreviewScope,\n ) {\n const req$ = this.http.post<Response<DelegationScopePreview>>(\n `${BASE}/scope/preview`,\n { scope },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.PreviewScope,\n request$: req$,\n onSuccess: (response) => ({ scopePreview: response.data ?? null }),\n });\n }\n\n @Action(ClearScopePreview)\n clearScopePreview(ctx: StateContext<DelegationsStateModel>) {\n ctx.patchState({ scopePreview: null });\n }\n\n // ============================================================================\n // Create / edit (response is legacy DelegationDto — clients reload list/detail)\n // ============================================================================\n\n @Action(CreateDelegationLegacy)\n createLegacy(\n ctx: StateContext<DelegationsStateModel>,\n { request }: CreateDelegationLegacy,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(BASE, request);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Create,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(CreateDelegationV2)\n createV2(\n ctx: StateContext<DelegationsStateModel>,\n { request }: CreateDelegationV2,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(`${BASE}/v2`, request);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Create,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(UpdateDelegationLegacy)\n updateLegacy(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: UpdateDelegationLegacy,\n ) {\n const req$ = this.http.put<Response<DelegationDto>>(\n `${BASE}/${id}`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Update,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(UpdateDelegationV2)\n updateV2(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: UpdateDelegationV2,\n ) {\n const req$ = this.http.put<Response<DelegationDto>>(\n `${BASE}/v2/${id}`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Update,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n // ============================================================================\n // Decisions\n // ============================================================================\n\n @Action(ApproveDelegation)\n approve(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: ApproveDelegation,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(\n `${BASE}/${id}/approve`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Approve,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(RejectDelegation)\n reject(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: RejectDelegation,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(\n `${BASE}/${id}/reject`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Reject,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(CancelDelegation)\n cancel(\n ctx: StateContext<DelegationsStateModel>,\n { id, rowVersion, asAdmin }: CancelDelegation,\n ) {\n const path = asAdmin ? `${BASE}/Admin/${id}` : `${BASE}/${id}`;\n const req$ = this.http.delete<Response<boolean>>(path, {\n params: new HttpParams().set('rowVersion', rowVersion),\n });\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Cancel,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { select, Store } from '@ngxs/store';\nimport {\n ApproveDelegation,\n CancelDelegation,\n ClearDelegationDetail,\n ClearScopePreview,\n CreateDelegationLegacy,\n CreateDelegationV2,\n GetActiveAssignedDelegations,\n GetAssignedDelegations,\n GetDelegationDetail,\n GetMyDelegations,\n GetScopeOptions,\n PreviewScope,\n RejectDelegation,\n UpdateDelegationLegacy,\n UpdateDelegationV2,\n} from './delegations.actions';\nimport {\n ApproveDelegationRequest,\n CreateDelegationLegacyRequest,\n CreateDelegationV2Request,\n DelegationListQuery,\n DelegationScopeSelection,\n DelegationsActionKey,\n RejectDelegationRequest,\n UpdateDelegationLegacyRequest,\n UpdateDelegationV2Request,\n} from './delegations.model';\nimport { DelegationsState } from './delegations.state';\n\n@Injectable({ providedIn: 'root' })\nexport class DelegationsFacade {\n private readonly store = inject(Store);\n\n // ---------------------------------------------------------------------------\n // Data slices\n // ---------------------------------------------------------------------------\n readonly myPage = select(DelegationsState.getMy);\n readonly assignedPage = select(DelegationsState.getAssigned);\n readonly activePage = select(DelegationsState.getActive);\n readonly detail = select(DelegationsState.getDetail);\n readonly scopeOptions = select(DelegationsState.getScopeOptions);\n readonly scopePreview = select(DelegationsState.getScopePreview);\n\n private readonly loadingActive = select(DelegationsState.getLoadingActive);\n private readonly errors = select(DelegationsState.getErrors);\n\n // ---------------------------------------------------------------------------\n // Derived\n // ---------------------------------------------------------------------------\n readonly myItems = computed(() => this.myPage()?.items ?? []);\n readonly assignedItems = computed(() => this.assignedPage()?.items ?? []);\n readonly activeItems = computed(() => this.activePage()?.items ?? []);\n\n // ---------------------------------------------------------------------------\n // Loading\n // ---------------------------------------------------------------------------\n readonly isLoadingMy = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetMy),\n );\n readonly isLoadingAssigned = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetAssigned),\n );\n readonly isLoadingActive = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetActive),\n );\n readonly isLoadingDetail = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetDetail),\n );\n readonly isLoadingScopeOptions = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetScopeOptions),\n );\n readonly isPreviewingScope = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.PreviewScope),\n );\n readonly isSaving = computed(\n () =>\n this.loadingActive().includes(DelegationsActionKey.Create) ||\n this.loadingActive().includes(DelegationsActionKey.Update),\n );\n readonly isApproving = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Approve),\n );\n readonly isRejecting = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Reject),\n );\n readonly isCancelling = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Cancel),\n );\n\n // ---------------------------------------------------------------------------\n // Errors\n // ---------------------------------------------------------------------------\n readonly errorMy = computed(\n () => this.errors()[DelegationsActionKey.GetMy] ?? null,\n );\n readonly errorAssigned = computed(\n () => this.errors()[DelegationsActionKey.GetAssigned] ?? null,\n );\n readonly errorDetail = computed(\n () => this.errors()[DelegationsActionKey.GetDetail] ?? null,\n );\n readonly errorSave = computed(\n () =>\n this.errors()[DelegationsActionKey.Create] ??\n this.errors()[DelegationsActionKey.Update] ??\n null,\n );\n\n // ---------------------------------------------------------------------------\n // Dispatchers\n // ---------------------------------------------------------------------------\n getMy(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetMyDelegations(query));\n }\n getAssigned(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetAssignedDelegations(query));\n }\n getActive(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetActiveAssignedDelegations(query));\n }\n getDetail(id: number) {\n return this.store.dispatch(new GetDelegationDetail(id));\n }\n clearDetail() {\n return this.store.dispatch(new ClearDelegationDetail());\n }\n loadScopeOptions(delegatorUserId?: string) {\n return this.store.dispatch(new GetScopeOptions(delegatorUserId));\n }\n previewScope(scope: DelegationScopeSelection) {\n return this.store.dispatch(new PreviewScope(scope));\n }\n clearScopePreview() {\n return this.store.dispatch(new ClearScopePreview());\n }\n createLegacy(request: CreateDelegationLegacyRequest) {\n return this.store.dispatch(new CreateDelegationLegacy(request));\n }\n createV2(request: CreateDelegationV2Request) {\n return this.store.dispatch(new CreateDelegationV2(request));\n }\n updateLegacy(id: number, request: UpdateDelegationLegacyRequest) {\n return this.store.dispatch(new UpdateDelegationLegacy(id, request));\n }\n updateV2(id: number, request: UpdateDelegationV2Request) {\n return this.store.dispatch(new UpdateDelegationV2(id, request));\n }\n approve(id: number, request: ApproveDelegationRequest) {\n return this.store.dispatch(new ApproveDelegation(id, request));\n }\n reject(id: number, request: RejectDelegationRequest) {\n return this.store.dispatch(new RejectDelegation(id, request));\n }\n cancel(id: number, rowVersion: string, asAdmin = false) {\n return this.store.dispatch(new CancelDelegation(id, rowVersion, asAdmin));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n OnInit,\n signal,\n untracked,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Icon } from '@masterteam/icons';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DelegationsFacade } from '../../../../store/delegations/delegations.facade';\nimport {\n DelegationGrant,\n DelegationScopeSelection,\n DelegationScopeTarget,\n} from '../../../../store/delegations/delegations.model';\n\ninterface TargetGroup {\n key: string;\n target: DelegationScopeTarget;\n grants: DelegationGrant[];\n}\n\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\n\nfunction targetKey(t: DelegationScopeTarget): string {\n return `${t.applicationKey}::${t.targetType}::${t.targetKey}`;\n}\n\nfunction grantKey(g: DelegationGrant): string {\n return `${targetKey(g.target)}::${g.action.operationKey}`;\n}\n\nfunction normalizeGrant(g: DelegationGrant): DelegationGrant {\n return {\n ...g,\n accessibilities: g.accessibilities ?? [],\n dataFilters: g.dataFilters ?? [],\n constraints: g.constraints ?? [],\n };\n}\n\n/**\n * Grants-based scope picker (doc 03). Driven entirely by `scope/options`:\n * - lists grantable target/action pairs returned by the backend,\n * - lets the user toggle each grant,\n * - calls `scope/preview` (debounced) and surfaces summary / warnings / denied.\n *\n * `[(scope)]` two-way binds a `DelegationScopeSelection`. The component never\n * invents permission metadata — it only echoes grants returned by options.\n */\n@Component({\n selector: 'mt-scope-picker',\n standalone: true,\n imports: [\n CommonModule,\n Icon,\n SkeletonModule,\n TooltipModule,\n TranslocoDirective,\n ],\n templateUrl: './scope-picker.html',\n styleUrls: ['./scope-picker.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScopePicker implements OnInit {\n readonly scope = model<DelegationScopeSelection>(EMPTY_SCOPE);\n readonly readonly = input<boolean>(false);\n readonly delegatorUserId = input<string | undefined>(undefined);\n\n private readonly facade = inject(DelegationsFacade);\n\n protected readonly options = this.facade.scopeOptions;\n protected readonly preview = this.facade.scopePreview;\n protected readonly isLoadingOptions = this.facade.isLoadingScopeOptions;\n protected readonly isPreviewing = this.facade.isPreviewingScope;\n\n /** Grantable options grouped by target. */\n protected readonly groups = computed<TargetGroup[]>(() => {\n const grants = this.options()?.grants ?? [];\n const map = new Map<string, TargetGroup>();\n for (const g of grants) {\n const key = targetKey(g.target);\n const existing = map.get(key);\n if (existing) {\n existing.grants.push(g);\n } else {\n map.set(key, { key, target: g.target, grants: [g] });\n }\n }\n return Array.from(map.values());\n });\n\n /** Selected grant keys for O(1) checkbox state. */\n protected readonly selectedKeys = computed(\n () => new Set(this.scope().grants.map(grantKey)),\n );\n\n private readonly expanded = signal<Set<string>>(new Set());\n\n ngOnInit(): void {\n this.facade.loadScopeOptions(this.delegatorUserId());\n }\n\n constructor() {\n let timer: ReturnType<typeof setTimeout> | null = null;\n effect(() => {\n const s = this.scope();\n untracked(() => {\n if (!s.grants.length) {\n this.facade.clearScopePreview();\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => this.facade.previewScope(s), 300);\n });\n });\n }\n\n protected isExpanded(group: TargetGroup): boolean {\n return this.expanded().has(group.key);\n }\n\n protected toggleAccordion(group: TargetGroup): void {\n const next = new Set(this.expanded());\n if (next.has(group.key)) next.delete(group.key);\n else next.add(group.key);\n this.expanded.set(next);\n }\n\n protected isSelected(grant: DelegationGrant): boolean {\n return this.selectedKeys().has(grantKey(grant));\n }\n\n protected toggleGrant(grant: DelegationGrant): void {\n if (this.readonly()) return;\n const key = grantKey(grant);\n this.scope.update((s) => {\n const exists = s.grants.some((g) => grantKey(g) === key);\n const grants = exists\n ? s.grants.filter((g) => grantKey(g) !== key)\n : [...s.grants, normalizeGrant(grant)];\n return { ...s, grants };\n });\n }\n\n protected selectedCount(group: TargetGroup): number {\n const keys = this.selectedKeys();\n return group.grants.filter((g) => keys.has(grantKey(g))).length;\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"mt-scope-picker flex flex-col gap-4\">\n @if (isLoadingOptions() && !options()) {\n <p-skeleton height=\"2rem\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n } @else if (options()) {\n <!-- Targets + actions -->\n <section class=\"flex flex-col gap-2\">\n <h4 class=\"text-sm font-medium text-gray-800\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </h4>\n\n @if (groups().length === 0) {\n <p class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noGrantableOptions\") }}\n </p>\n }\n\n @for (group of groups(); track group.key) {\n <div class=\"border border-gray-200 rounded-md overflow-hidden\">\n <button\n type=\"button\"\n class=\"flex items-center justify-between w-full px-3 py-2 hover:bg-surface-50 cursor-pointer\"\n (click)=\"toggleAccordion(group)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <mt-icon\n [icon]=\"\n isExpanded(group)\n ? 'arrow.chevron-down'\n : 'arrow.chevron-right'\n \"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n <span class=\"text-sm text-gray-900 truncate\">\n {{ group.target.displayName || group.target.targetKey }}\n </span>\n <span class=\"text-xs text-gray-400\">\n {{ group.target.targetType }}\n </span>\n </div>\n @if (selectedCount(group); as count) {\n @if (count > 0) {\n <span\n class=\"text-xs text-primary font-medium px-2 py-0.5 rounded-full bg-primary-50\"\n >\n {{ count }}\n </span>\n }\n }\n </button>\n\n @if (isExpanded(group)) {\n <div class=\"flex flex-col gap-1 px-3 py-2 bg-surface-50/40\">\n @for (grant of group.grants; track grant.action.operationKey) {\n <label\n class=\"flex items-center gap-2 px-2 py-1.5 rounded-md cursor-pointer hover:bg-surface-100\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(grant)\"\n [disabled]=\"readonly()\"\n (change)=\"toggleGrant(grant)\"\n />\n <span class=\"text-sm\">\n {{ grant.action.operationKey }}\n </span>\n @if (grant.action.isHighRisk) {\n <mt-icon\n icon=\"alert.alert-triangle\"\n styleClass=\"text-sm text-amber-500\"\n [pTooltip]=\"t('delegations.scope.highRisk')\"\n tooltipPosition=\"top\"\n ></mt-icon>\n }\n </label>\n }\n </div>\n }\n </div>\n }\n </section>\n\n <!-- Preview -->\n <section\n class=\"flex flex-col gap-1 px-3 py-2 rounded-md border border-dashed border-gray-300 bg-surface-50\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <div class=\"text-xs font-medium text-gray-700\">\n {{ t(\"delegations.scope.previewTitle\") }}\n </div>\n @if (isPreviewing()) {\n <p-skeleton width=\"6rem\" height=\"0.75rem\"></p-skeleton>\n }\n </div>\n @if (preview(); as p) {\n @if (p.isValid) {\n <div class=\"text-sm text-gray-900\">\n {{ p.summary || t(\"delegations.column.scopeSummary\") }}\n </div>\n } @else {\n <div class=\"text-sm text-red-700\">\n {{ t(\"delegations.scope.previewInvalid\") }}\n </div>\n }\n @if (p.warnings.length > 0) {\n <ul class=\"text-xs text-amber-700 list-disc list-inside\">\n @for (w of p.warnings; track w.message) {\n <li>{{ w.message }}</li>\n }\n </ul>\n }\n @if (p.deniedItems.length > 0) {\n <ul class=\"text-xs text-red-700 list-disc list-inside\">\n @for (d of p.deniedItems; track d.operationKey) {\n <li>\n {{ d.targetKey }} / {{ d.operationKey }} —\n {{ d.reasonCode }}\n </li>\n }\n </ul>\n }\n } @else {\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noSelection\") }}\n </div>\n }\n </section>\n }\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { HttpContext } from '@angular/common/http';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport {\n DateFieldConfig,\n DynamicFormConfig,\n MultiSelectFieldConfig,\n RadioButtonFieldConfig,\n REQUEST_CONTEXT,\n TextareaFieldConfig,\n ToggleFieldConfig,\n UserSearchFieldConfig,\n ValidatorConfig,\n} from '@masterteam/components';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { ModalService } from '@masterteam/components/modal';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { ScopePicker } from './scope-picker/scope-picker';\nimport {\n CreateDelegationV2Request,\n DelegationRow,\n DelegationScopeSelection,\n UpdateDelegationV2Request,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\n\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\n\n/**\n * Delegation create/edit form (doc 04). Uses the v2 explicit-scope endpoints so\n * the persisted `DelegationScopeSelection` matches what scope/preview validated.\n *\n * - Delegator is server-derived; only the delegated user is collected.\n * - On edit, scope grants + rowVersion come from the loaded detail.\n * - Times are sent in UTC ISO; wrappers set timeZoneId = UTC.\n */\n@Component({\n selector: 'mt-delegation-form',\n standalone: true,\n imports: [\n CommonModule,\n Button,\n DynamicForm,\n ReactiveFormsModule,\n ScopePicker,\n TranslocoDirective,\n ],\n templateUrl: './delegation-form.html',\n styleUrls: ['./delegation-form.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationForm implements OnInit {\n readonly delegationForEdit = input<DelegationRow | null>(null);\n readonly readonly = input<boolean>(false);\n\n private readonly halfWidth = 'flex flex-col gap-1 lg:col-span-6';\n private readonly fullWidth = 'flex flex-col gap-1 lg:col-span-12';\n\n modal = inject(ModalService);\n ref: ModalRef = inject(ModalRef);\n private readonly transloco = inject(TranslocoService);\n private readonly facade = inject(DelegationsFacade);\n\n delegationFormControl = new FormControl();\n formValue = toSignal(this.delegationFormControl.valueChanges);\n\n detail = this.facade.detail;\n isDetailLoading = this.facade.isLoadingDetail;\n isSaving = this.facade.isSaving;\n\n context = new HttpContext().set(REQUEST_CONTEXT, { useBaseUrl: false });\n\n protected readonly scope = signal<DelegationScopeSelection>(EMPTY_SCOPE);\n\n protected readonly specificDaysOptions = signal([\n { label: this.transloco.translate('delegations.days.sunday'), value: 0 },\n { label: this.transloco.translate('delegations.days.monday'), value: 1 },\n { label: this.transloco.translate('delegations.days.tuesday'), value: 2 },\n { label: this.transloco.translate('delegations.days.wednesday'), value: 3 },\n { label: this.transloco.translate('delegations.days.thursday'), value: 4 },\n { label: this.transloco.translate('delegations.days.friday'), value: 5 },\n { label: this.transloco.translate('delegations.days.saturday'), value: 6 },\n ]);\n\n protected readonly formConfig = computed<DynamicFormConfig>(() => ({\n sections: [\n {\n key: 'delegationForm',\n type: 'header',\n bodyClass: 'grid grid-cols-1 gap-4 items-start lg:grid-cols-12',\n order: 1,\n fields: [\n new UserSearchFieldConfig({\n key: 'delegateTo',\n label: this.transloco.translate('delegations.column.delegatedTo'),\n apiUrl: 'Identity/users',\n context: this.context,\n validators: [ValidatorConfig.required()],\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 1,\n disabled: this.readonly() || !!this.delegationForEdit(),\n }),\n new TextareaFieldConfig({\n key: 'description',\n label: this.transloco.translate('delegations.form.description'),\n placeholder: this.transloco.translate(\n 'delegations.form.description',\n ),\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 2,\n disabled: this.readonly(),\n }),\n new DateFieldConfig({\n key: 'delegateFromDateTime',\n label: this.transloco.translate('delegations.column.startDate'),\n placeholder: this.transloco.translate(\n 'delegations.column.startDate',\n ),\n validators: [ValidatorConfig.required()],\n showTime: true,\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 3,\n disabled: this.readonly(),\n }),\n new DateFieldConfig({\n key: 'delegateToDateTime',\n label: this.transloco.translate('delegations.column.endDate'),\n placeholder: this.transloco.translate('delegations.column.endDate'),\n validators: [ValidatorConfig.required()],\n showTime: true,\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 4,\n disabled: this.readonly(),\n }),\n new RadioButtonFieldConfig({\n key: 'delegationDaysType',\n label: this.transloco.translate('delegations.form.daysApply'),\n options: [\n {\n label: this.transloco.translate('delegations.form.fullRange'),\n value: 'FullRange',\n },\n {\n label: this.transloco.translate(\n 'delegations.form.specificDays',\n ),\n value: 'SpecificDays',\n },\n ],\n optionLabel: 'label',\n optionValue: 'value',\n validators: [ValidatorConfig.required()],\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 5,\n disabled: this.readonly(),\n }),\n new MultiSelectFieldConfig({\n key: 'specificDays',\n label: this.transloco.translate('delegations.form.specificDays'),\n options: this.specificDaysOptions(),\n optionLabel: 'label',\n optionValue: 'value',\n maxSelectedLabels: 7,\n relations: [\n {\n key: 'delegationDaysType',\n value: 'SpecificDays',\n action: 'show',\n },\n ],\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 6,\n disabled: this.readonly(),\n }),\n new ToggleFieldConfig({\n key: 'requiresApproval',\n label: this.transloco.translate(\n 'delegations.form.requiresApproval',\n ),\n cssClass: `${this.fullWidth} mt-2`,\n order: 7,\n disabled: this.readonly(),\n }),\n ],\n },\n ],\n }));\n\n constructor() {\n effect(() => {\n const editing = this.delegationForEdit();\n const d = this.detail();\n if (editing && d && d.row.delegationId === editing.delegationId) {\n this.delegationFormControl.patchValue({\n delegateTo: d.row.delegatedUser,\n description: '',\n delegateFromDateTime: d.row.startsAtUtc,\n delegateToDateTime: d.row.endsAtUtc,\n delegationDaysType: d.row.dayRuleMode,\n specificDays: d.row.specificDays ?? [],\n requiresApproval: d.row.approval?.requiresApproval ?? false,\n });\n this.scope.set({\n grants: d.scope?.grants ?? [],\n metadata: d.scope?.metadata ?? {},\n });\n } else if (!editing) {\n this.delegationFormControl.reset({\n delegationDaysType: 'FullRange',\n requiresApproval: true,\n });\n this.scope.set(EMPTY_SCOPE);\n }\n });\n }\n\n ngOnInit(): void {\n const editing = this.delegationForEdit();\n if (editing) {\n this.facade.getDetail(editing.delegationId);\n }\n }\n\n protected readonly canSubmit = computed(\n () => !this.readonly() && this.scope().grants.length > 0,\n );\n\n onSubmit(): void {\n if (this.readonly() || !this.delegationFormControl.valid) return;\n if (this.scope().grants.length === 0) return;\n\n const v = this.delegationFormControl.value;\n const base = {\n delegateTo: v?.delegateTo?.userId ?? v?.delegateTo?.id ?? v?.delegateTo,\n description: v?.description,\n delegateFromDateTime: v?.delegateFromDateTime,\n delegateToDateTime: v?.delegateToDateTime,\n delegationDaysType: (v?.delegationDaysType ?? 'FullRange') as\n | 'FullRange'\n | 'SpecificDays',\n specificDays:\n v?.delegationDaysType === 'SpecificDays' ? (v?.specificDays ?? []) : [],\n requiresApproval: !!v?.requiresApproval,\n scope: this.scope(),\n };\n\n const editing = this.delegationForEdit();\n if (editing) {\n const req: UpdateDelegationV2Request = {\n ...base,\n rowVersion: editing.rowVersion,\n };\n this.facade.updateV2(editing.delegationId, req).subscribe({\n next: () => this.ref.close(true),\n });\n } else {\n const req: CreateDelegationV2Request = base;\n this.facade.createV2(req).subscribe({\n next: () => this.ref.close(true),\n });\n }\n }\n}\n","<ng-container *transloco=\"let t\">\n <div\n [class]=\"\n 'delegation-form-content flex min-w-0 flex-col gap-3 overflow-x-hidden p-4 max-[640px]:p-3 ' +\n modal.contentClass\n \"\n >\n <mt-dynamic-form\n [formConfig]=\"formConfig()\"\n [formControl]=\"delegationFormControl\"\n />\n\n <div class=\"mt-2 border-t border-gray-200 pt-3 flex flex-col gap-2\">\n <h3 class=\"text-sm font-semibold text-gray-800\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </h3>\n <mt-scope-picker\n [(scope)]=\"scope\"\n [readonly]=\"readonly()\"\n ></mt-scope-picker>\n </div>\n </div>\n\n <div\n [class]=\"\n 'delegation-form-footer ' +\n modal.footerClass +\n ' flex-col gap-2 sm:flex-row sm:items-center sm:justify-end'\n \"\n >\n <mt-button\n [label]=\"t('delegations.common.cancel')\"\n variant=\"outlined\"\n (click)=\"ref.close()\"\n styleClass=\"w-full sm:w-auto\"\n />\n @if (!readonly()) {\n <mt-button\n [label]=\"\n delegationForEdit()\n ? t('delegations.common.update')\n : t('delegations.common.create')\n \"\n [loading]=\"isSaving()\"\n [disabled]=\"!delegationFormControl.valid || !canSubmit()\"\n (click)=\"onSubmit()\"\n styleClass=\"w-full sm:w-auto\"\n />\n }\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\n\ntype DetailTab = 'overview' | 'scope';\n\n/**\n * Read-only drawer that shows the full `DelegationDetail` ({ row, scope, status }).\n */\n@Component({\n selector: 'mt-delegation-detail-drawer',\n standalone: true,\n imports: [\n CommonModule,\n Avatar,\n Button,\n SkeletonModule,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './delegation-detail-drawer.html',\n styleUrls: ['./delegation-detail-drawer.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationDetailDrawer implements OnInit {\n readonly delegationId = input.required<number>();\n\n private readonly facade = inject(DelegationsFacade);\n private readonly transloco = inject(TranslocoService);\n protected readonly ref: ModalRef = inject(ModalRef);\n\n protected readonly tabs: { key: DetailTab; i18n: string }[] = [\n { key: 'overview', i18n: 'delegations.action.view' },\n { key: 'scope', i18n: 'delegations.column.scopeSummary' },\n ];\n protected readonly activeTab = signal<DetailTab>('overview');\n\n protected readonly isLoading = this.facade.isLoadingDetail;\n protected readonly detail = this.facade.detail;\n protected readonly row = computed(() => this.detail()?.row ?? null);\n\n ngOnInit(): void {\n this.facade.getDetail(this.delegationId());\n }\n\n protected setTab(tab: DetailTab): void {\n this.activeTab.set(tab);\n }\n\n protected approvalLabel(): string {\n const s = this.row()?.approval?.approvalStatus ?? 'NotRequired';\n return this.transloco.translate(`delegations.approvalStatus.${s}`);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col h-full\">\n <!-- Tabs -->\n <div class=\"flex border-b border-gray-200 px-4\">\n @for (tab of tabs; track tab.key) {\n <button\n type=\"button\"\n class=\"px-3 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\n [class.border-primary]=\"activeTab() === tab.key\"\n [class.text-primary]=\"activeTab() === tab.key\"\n [class.border-transparent]=\"activeTab() !== tab.key\"\n [class.text-gray-500]=\"activeTab() !== tab.key\"\n (click)=\"setTab(tab.key)\"\n >\n {{ t(tab.i18n) }}\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto p-4\">\n @if (isLoading() && !detail()) {\n <p-skeleton height=\"2rem\" class=\"mb-3\"></p-skeleton>\n <p-skeleton height=\"6rem\" class=\"mb-3\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n } @else if (detail(); as d) {\n @if (activeTab() === \"overview\") {\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-3 min-w-0\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-12! h-12! text-lg!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.delegatorName\") }}\n </div>\n <div class=\"text-base font-medium text-gray-900 truncate\">\n {{ d.row.delegator.displayName }}\n </div>\n @if (d.row.delegator.email) {\n <div class=\"text-xs text-gray-500 truncate\">\n {{ d.row.delegator.email }}\n </div>\n }\n </div>\n </div>\n <mt-delegation-status-chip\n [status]=\"d.status.effectiveStatus\"\n ></mt-delegation-status-chip>\n </div>\n\n <div class=\"grid grid-cols-2 gap-4\">\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.delegatedTo\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.delegatedUser.displayName }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.approval\") }}\n </span>\n <span class=\"text-sm text-gray-900\">{{ approvalLabel() }}</span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.startDate\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.startsAtUtc | date: \"medium\" }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.endDate\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.endsAtUtc | date: \"medium\" }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.form.timeZone\") }}\n </span>\n <span class=\"text-sm text-gray-900\">{{\n d.row.timeZoneId\n }}</span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.days\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n @if (d.row.dayRuleMode === \"FullRange\") {\n {{ t(\"delegations.form.fullRange\") }}\n } @else {\n {{ d.row.specificDays.join(\", \") }}\n }\n </span>\n </div>\n </div>\n\n @if (d.row.cancellation?.cancellationReason) {\n <div\n class=\"rounded-md border border-gray-200 bg-surface-50 p-3 text-sm text-gray-800\"\n >\n <div class=\"font-medium\">\n {{ t(\"delegations.form.cancellationReason\") }}\n </div>\n <div>{{ d.row.cancellation.cancellationReason }}</div>\n </div>\n }\n </div>\n } @else {\n <!-- Scope tab -->\n <div class=\"flex flex-col gap-3\">\n <div class=\"text-sm text-gray-900\">\n {{ d.row.scopeSummary || t(\"delegations.column.scopeSummary\") }}\n </div>\n <div class=\"flex flex-col gap-2\">\n @for (grant of d.scope.grants; track $index) {\n <div\n class=\"border border-gray-200 rounded-md px-3 py-2 flex flex-col gap-1\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-sm font-medium text-gray-900\">\n {{ grant.target.displayName || grant.target.targetKey }}\n </span>\n <span class=\"text-xs text-gray-500\">\n {{ grant.target.targetType }}\n </span>\n </div>\n <span\n class=\"text-xs px-2 py-0.5 rounded-md bg-primary-50 text-primary w-fit\"\n >\n {{ grant.action.operationKey }}\n </span>\n </div>\n }\n @if (d.scope.grants.length === 0) {\n <p class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noSelection\") }}\n </p>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <div\n class=\"border-t border-gray-200 px-4 py-3 flex items-center justify-end\"\n >\n <mt-button\n [label]=\"t('delegations.common.cancel')\"\n variant=\"outlined\"\n (click)=\"ref.close()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n linkedSignal,\n OnInit,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\nimport { ModalService } from '@masterteam/components/modal';\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\nimport { finalize } from 'rxjs';\nimport {\n DelegationAllowedAction,\n DelegationListQuery,\n DelegationRow,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\nimport DelegationForm from '../delegation-form/delegation-form';\nimport DelegationDetailDrawer from '../delegation-detail-drawer/delegation-detail-drawer';\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\n\ntype DelegationTab = 'my' | 'assigned';\n\n/**\n * Delegations portal page (doc 02, 09): two lists — My Delegations (current user\n * is delegator) and Delegated To Me (current user is delegate). Rows render only\n * the BE-returned `allowedActions`; status comes from `effectiveStatus`.\n */\n@Component({\n selector: 'mt-delegations-list',\n standalone: true,\n imports: [\n CommonModule,\n Avatar,\n Breadcrumb,\n Table,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './delegations-list.html',\n styleUrl: './delegations-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationsList implements OnInit {\n /**\n * Admin/control-panel breadcrumb. Hidden on the client self-service surface\n * (its links point at /control-panel/*). Bound from route data via\n * `withComponentInputBinding()` — admin leaves it default; client passes\n * `data: { showBreadcrumb: false }`.\n */\n readonly showBreadcrumb = input<boolean>(true);\n\n private readonly facade = inject(DelegationsFacade);\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly breadcrumbItems = linkedSignal(() => [\n {\n label: '',\n icon: 'general.home-line',\n routerLink: '/control-panel/workspaces',\n },\n {\n label: this.transloco.translate('product-settings.product-settings'),\n routerLink: '/control-panel/product-settings',\n },\n {\n label: this.transloco.translate('delegations.title'),\n },\n ]);\n\n protected readonly activeTab = signal<DelegationTab>('my');\n protected readonly tabs = signal([\n {\n value: 'my' as DelegationTab,\n label: this.transloco.translate('delegations.myDelegations'),\n },\n {\n value: 'assigned' as DelegationTab,\n label: this.transloco.translate('delegations.delegatedToMe'),\n },\n ]);\n\n protected readonly isLoading = computed(() =>\n this.activeTab() === 'my'\n ? this.facade.isLoadingMy()\n : this.facade.isLoadingAssigned(),\n );\n protected readonly rows = computed(() =>\n this.activeTab() === 'my'\n ? this.facade.myItems()\n : this.facade.assignedItems(),\n );\n\n statusCol = viewChild.required<TemplateRef<unknown>>('statusCol');\n userCol = viewChild.required<TemplateRef<unknown>>('userCol');\n scopeCol = viewChild.required<TemplateRef<unknown>>('scopeCol');\n daysCol = viewChild.required<TemplateRef<unknown>>('daysCol');\n\n protected readonly tableActions = signal<TableAction[]>([\n {\n icon: 'general.plus',\n label: this.transloco.translate('delegations.action.create'),\n color: 'primary',\n action: () => this.openForm(null),\n },\n ]);\n\n protected readonly rowActions = signal<TableAction[]>([\n {\n icon: 'general.eye',\n tooltip: this.transloco.translate('delegations.action.view'),\n color: 'primary',\n variant: 'outlined',\n action: (row: DelegationRow) => this.viewDetails(row),\n hidden: (row: DelegationRow) => !this.has(row, 'View'),\n },\n {\n icon: 'custom.pencil',\n tooltip: this.transloco.translate('delegations.action.edit'),\n color: 'primary',\n action: (row: DelegationRow) => this.openForm(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Edit'),\n },\n {\n icon: 'general.check',\n tooltip: this.transloco.translate('delegations.action.approve'),\n color: 'primary',\n action: (row: DelegationRow) => this.approve(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Approve'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`approve:${row.delegationId}`),\n confirmation: { type: 'popup' },\n },\n {\n icon: 'general.x-close',\n tooltip: this.transloco.translate('delegations.action.reject'),\n color: 'danger',\n variant: 'outlined',\n action: (row: DelegationRow) => this.reject(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Reject'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`reject:${row.delegationId}`),\n confirmation: { type: 'popup' },\n },\n {\n icon: 'general.trash-01',\n tooltip: this.transloco.translate('delegations.action.cancel'),\n color: 'danger',\n variant: 'outlined',\n action: (row: DelegationRow) => this.cancel(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Cancel'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`cancel:${row.delegationId}`),\n confirmation: { type: 'popup', confirmationType: 'delete' },\n },\n {\n icon: 'arrow.arrow-right',\n tooltip: this.transloco.translate('delegations.action.startSession'),\n color: 'primary',\n action: (row: DelegationRow) => this.startSession(row),\n hidden: (row: DelegationRow) => !this.has(row, 'StartSession'),\n },\n ]);\n\n protected readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\n {\n key: 'effectiveStatus',\n label: this.transloco.translate('delegations.column.status'),\n type: 'custom',\n customCellTpl: this.statusCol(),\n },\n {\n key: this.activeTab() === 'my' ? 'delegatedUser' : 'delegator',\n label: this.transloco.translate(\n this.activeTab() === 'my'\n ? 'delegations.column.delegatedTo'\n : 'delegations.column.delegatorName',\n ),\n type: 'custom',\n customCellTpl: this.userCol(),\n },\n {\n key: 'scopeSummary',\n label: this.transloco.translate('delegations.column.scopeSummary'),\n type: 'custom',\n customCellTpl: this.scopeCol(),\n },\n {\n key: 'startsAtUtc',\n label: this.transloco.translate('delegations.column.startDate'),\n type: 'dateTime',\n },\n {\n key: 'endsAtUtc',\n label: this.transloco.translate('delegations.column.endDate'),\n type: 'dateTime',\n },\n {\n key: 'createdAtUtc',\n label: this.transloco.translate('delegations.column.createdDate'),\n type: 'dateTime',\n },\n {\n key: 'dayRuleMode',\n label: this.transloco.translate('delegations.column.days'),\n type: 'custom',\n customCellTpl: this.daysCol(),\n },\n ]);\n\n private readonly busyIds = signal<string[]>([]);\n\n private readonly weekdayKeys = [\n 'sunday',\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n ] as const;\n\n ngOnInit(): void {\n this.loadCurrentTab();\n }\n\n protected switchTab(tab: DelegationTab): void {\n this.activeTab.set(tab);\n this.loadCurrentTab();\n }\n\n private loadCurrentTab(\n query: DelegationListQuery = { page: 1, pageSize: 25 },\n ): void {\n if (this.activeTab() === 'my') {\n this.facade.getMy(query);\n } else {\n this.facade.getAssigned(query);\n }\n }\n\n private reloadCurrentTab(): void {\n this.loadCurrentTab();\n }\n\n protected has(row: DelegationRow, action: DelegationAllowedAction): boolean {\n return row.allowedActions?.includes(action) ?? false;\n }\n\n protected formatDays(row: DelegationRow): string {\n if (row.dayRuleMode === 'SpecificDays' && row.specificDays?.length) {\n return row.specificDays\n .filter((d) => d >= 0 && d < this.weekdayKeys.length)\n .map((d) =>\n this.transloco.translate(`delegations.days.${this.weekdayKeys[d]}`),\n )\n .join(', ');\n }\n return this.transloco.translate('delegations.form.fullRange');\n }\n\n private viewDetails(row: DelegationRow): void {\n this.modal.openModal(DelegationDetailDrawer, 'drawer', {\n header: this.transloco.translate('delegations.action.view'),\n styleClass:\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]',\n position: 'end',\n appendTo: 'page-content',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegationId: row.delegationId },\n });\n }\n\n private openForm(row: DelegationRow | null): void {\n const ref = this.modal.openModal(\n DelegationForm,\n row ? 'drawer' : 'dialog',\n {\n header: this.transloco.translate(\n row ? 'delegations.action.edit' : 'delegations.action.create',\n ),\n styleClass: row\n ? '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]'\n : '!w-[min(96vw,50rem)] !max-w-[96vw] !h-[min(90vh,40rem)] !max-h-[90vh]',\n position: row ? 'end' : '',\n appendTo: row ? 'page-content' : 'body',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegationForEdit: row, readonly: false },\n },\n );\n ref.onClose.subscribe((saved: boolean) => {\n if (saved) this.reloadCurrentTab();\n });\n }\n\n private approve(row: DelegationRow): void {\n this.mark(`approve:${row.delegationId}`, true);\n this.facade\n .approve(row.delegationId, { rowVersion: row.rowVersion })\n .pipe(finalize(() => this.mark(`approve:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private reject(row: DelegationRow): void {\n this.mark(`reject:${row.delegationId}`, true);\n this.facade\n .reject(row.delegationId, {\n rowVersion: row.rowVersion,\n reason: this.transloco.translate('delegations.action.reject'),\n })\n .pipe(finalize(() => this.mark(`reject:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private cancel(row: DelegationRow): void {\n this.mark(`cancel:${row.delegationId}`, true);\n this.facade\n .cancel(row.delegationId, row.rowVersion)\n .pipe(finalize(() => this.mark(`cancel:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private startSession(row: DelegationRow): void {\n this.modal.openModal(StartSessionDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.startSession'),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent: 'start' },\n });\n }\n\n private mark(key: string, on: boolean): void {\n this.busyIds.update((ids) =>\n on ? [...ids, key] : ids.filter((id) => id !== key),\n );\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col h-full gap-2 p-4\">\n @if (showBreadcrumb()) {\n <mt-breadcrumb [items]=\"breadcrumbItems()\"></mt-breadcrumb>\n }\n\n <div class=\"flex items-center gap-2 border-b border-gray-200\">\n @for (tab of tabs(); track tab.value) {\n <button\n type=\"button\"\n class=\"px-4 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\n [class.border-primary]=\"activeTab() === tab.value\"\n [class.text-primary]=\"activeTab() === tab.value\"\n [class.border-transparent]=\"activeTab() !== tab.value\"\n [class.text-gray-500]=\"activeTab() !== tab.value\"\n (click)=\"switchTab(tab.value)\"\n >\n {{ tab.label }}\n </button>\n }\n </div>\n\n <mt-table\n [data]=\"rows()\"\n [columns]=\"tableColumns()\"\n [actions]=\"tableActions()\"\n [rowActions]=\"rowActions()\"\n [loading]=\"isLoading()\"\n >\n <ng-template #statusCol let-row>\n <mt-delegation-status-chip\n [status]=\"row.effectiveStatus\"\n ></mt-delegation-status-chip>\n </ng-template>\n\n <ng-template #userCol let-row>\n @let party = activeTab() === \"my\" ? row.delegatedUser : row.delegator;\n <div class=\"flex items-center gap-2\">\n <mt-avatar icon=\"user.user-01\" styleClass=\"w-8! h-8!\"></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm text-gray-900 truncate\">\n {{ party?.displayName }}\n </span>\n @if (party?.email) {\n <span class=\"text-xs text-gray-500 truncate\">\n {{ party.email }}\n </span>\n }\n </div>\n </div>\n </ng-template>\n\n <ng-template #scopeCol let-row>\n <span class=\"text-sm text-gray-700\" [title]=\"row.scopeSummary\">\n {{ row.scopeSummary || \"—\" }}\n </span>\n </ng-template>\n\n <ng-template #daysCol let-row>\n <span class=\"text-sm text-gray-700\">{{ formatDays(row) }}</span>\n </ng-template>\n </mt-table>\n </div>\n</ng-container>\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { DelegationSessionFacade } from '../store/session/delegation-session.facade';\n\n/**\n * Endpoints that must NEVER carry the `app-delegation` header.\n * Starting a delegated session uses only the normal `Authorization` token\n * (doc 05). All other `identity/delegations` management calls are normal\n * (non-delegated) actions too, so the whole namespace is excluded.\n */\nconst EXCLUDE = /\\bidentity\\/delegations\\b/i;\n\n/**\n * Adds `app-delegation: Bearer <token>` to outgoing requests while a delegated\n * session is active. Register AFTER the gateway-auth interceptor (so the normal\n * `Authorization` header is set first) and BEFORE the message interceptor.\n */\nexport const appDelegationInterceptor: HttpInterceptorFn = (req, next) => {\n if (EXCLUDE.test(req.url)) {\n return next(req);\n }\n\n const token = inject(DelegationSessionFacade).token();\n if (!token) {\n return next(req);\n }\n\n return next(\n req.clone({ setHeaders: { 'app-delegation': `Bearer ${token}` } }),\n );\n};\n","// store/index.ts\nexport * from './delegations';\nexport * from './session';\n","// Runtime UI surfaces — projected into host topbars + opened via ModalService.\nexport { TopbarDelegationMenu } from './lib/delegations/topbar-delegation-menu/topbar-delegation-menu';\nexport { DelegationStatusChip } from './lib/delegations/delegation-status-chip/delegation-status-chip';\nexport { default as StartSessionDialog } from './lib/delegations/start-session-dialog/start-session-dialog';\n\n// Management UI — portal page (My Delegations / Delegated To Me) + form + detail drawer.\nexport { default as Delegations } from './lib/delegations/delegations';\nexport { default as DelegationsList } from './lib/delegations/delegations-list/delegations-list';\nexport { default as DelegationForm } from './lib/delegations/delegation-form/delegation-form';\nexport { default as DelegationDetailDrawer } from './lib/delegations/delegation-detail-drawer/delegation-detail-drawer';\nexport { ScopePicker } from './lib/delegations/delegation-form/scope-picker/scope-picker';\n\n// HTTP\nexport { appDelegationInterceptor } from './interceptors/app-delegation.interceptor';\n\n// Store (models, actions, state, facades — both delegations and session)\nexport * from './store';\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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"}
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/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/reject-delegation-dialog/reject-delegation-dialog.ts","../../../../packages/masterteam/delegations/src/lib/delegations/reject-delegation-dialog/reject-delegation-dialog.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.html","../../../../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';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Chip } from '@masterteam/components/chip';\nimport { DelegationEffectiveStatus } from '../../../store/delegations/delegations.model';\n\ninterface StatusVisual {\n i18nKey: string;\n styleClass: string;\n}\n\nconst STATUS_VISUAL: Record<DelegationEffectiveStatus, StatusVisual> = {\n Active: {\n i18nKey: 'delegations.status.active',\n styleClass: 'mt-status-chip mt-status-chip--active',\n },\n Scheduled: {\n i18nKey: 'delegations.status.scheduled',\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\n },\n PendingApproval: {\n i18nKey: 'delegations.status.pendingApproval',\n styleClass: 'mt-status-chip mt-status-chip--pending',\n },\n InactiveToday: {\n i18nKey: 'delegations.status.inactiveToday',\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\n },\n Expired: {\n i18nKey: 'delegations.status.expired',\n styleClass: 'mt-status-chip mt-status-chip--expired',\n },\n Rejected: {\n i18nKey: 'delegations.status.rejected',\n styleClass: 'mt-status-chip mt-status-chip--rejected',\n },\n Cancelled: {\n i18nKey: 'delegations.status.cancelled',\n styleClass: 'mt-status-chip mt-status-chip--cancelled',\n },\n};\n\n@Component({\n selector: 'mt-delegation-status-chip',\n standalone: true,\n imports: [Chip, TranslocoDirective],\n template: `\n <ng-container *transloco=\"let t\">\n @let v = visual();\n <mt-chip [label]=\"t(v.i18nKey)\" [styleClass]=\"v.styleClass\"></mt-chip>\n </ng-container>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n :host ::ng-deep .mt-status-chip {\n font-weight: 500;\n font-size: 0.75rem;\n border-radius: 9999px;\n padding-inline: 0.625rem;\n padding-block: 0.125rem;\n }\n :host ::ng-deep .mt-status-chip--active {\n background-color: rgb(220 252 231);\n color: rgb(22 101 52);\n }\n :host ::ng-deep .mt-status-chip--scheduled {\n background-color: rgb(219 234 254);\n color: rgb(30 64 175);\n }\n :host ::ng-deep .mt-status-chip--pending {\n background-color: rgb(254 249 195);\n color: rgb(133 77 14);\n }\n :host ::ng-deep .mt-status-chip--expired {\n background-color: rgb(243 244 246);\n color: rgb(75 85 99);\n }\n :host ::ng-deep .mt-status-chip--rejected {\n background-color: rgb(254 226 226);\n color: rgb(153 27 27);\n }\n :host ::ng-deep .mt-status-chip--cancelled {\n background-color: rgb(229 231 235);\n color: rgb(55 65 81);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--active {\n background-color: rgba(34, 197, 94, 0.2);\n color: rgb(134 239 172);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--scheduled {\n background-color: rgba(59, 130, 246, 0.2);\n color: rgb(147 197 253);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--pending {\n background-color: rgba(234, 179, 8, 0.2);\n color: rgb(253 224 71);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--expired {\n background-color: rgba(148, 163, 184, 0.2);\n color: rgb(203 213 225);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--rejected {\n background-color: rgba(239, 68, 68, 0.2);\n color: rgb(252 165 165);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--cancelled {\n background-color: rgba(148, 163, 184, 0.15);\n color: rgb(203 213 225);\n }\n `,\n ],\n})\nexport class DelegationStatusChip {\n readonly status = input.required<DelegationEffectiveStatus>();\n\n protected readonly visual = computed<StatusVisual>(\n () => STATUS_VISUAL[this.status()] ?? STATUS_VISUAL.Scheduled,\n );\n}\n","import { DelegationRow } from '../delegations/delegations.model';\nimport { DelegationSessionInvalidationReason } from './delegation-session.model';\n\n/** Fetch the active delegations the current user may start (user/activedelegations). */\nexport class LoadDelegationCandidates {\n static readonly type = '[DelegationSession] Load Candidates';\n}\n\n/** Start a delegated session for the given assignment row. */\nexport class StartDelegationSession {\n static readonly type = '[DelegationSession] Start';\n constructor(public delegation: DelegationRow) {}\n}\n\n/** End the current delegated session. Client-local only (doc 05). */\nexport class EndDelegationSession {\n static readonly type = '[DelegationSession] End';\n constructor(public reason: DelegationSessionInvalidationReason = 'Manual') {}\n}\n\n/** Switch directly from the current session to another delegation. */\nexport class SwitchDelegationSession {\n static readonly type = '[DelegationSession] Switch';\n constructor(public delegation: DelegationRow) {}\n}\n","import { LoadingStateShape } from '../utils/state-helpers';\nimport { DelegationRow } from '../delegations/delegations.model';\n\n/**\n * Active delegated session. Memory-only by design (doc 05):\n * the delegation token is never persisted to long-lived storage.\n *\n * `delegation.delegatedUser` is the executed-by (actual logged-in) user and\n * `delegation.delegator` is the on-behalf-of user — both already present on the\n * row from the active-delegations endpoint.\n */\nexport interface ActiveDelegationSession {\n token: string;\n delegation: DelegationRow;\n}\n\nexport type DelegationSessionInvalidationReason =\n | 'TokenInvalid'\n | 'SessionMismatch'\n | 'ScopeChanged'\n | 'Forbidden'\n | 'Logout'\n | 'UserSwitch'\n | 'Manual';\n\nexport enum DelegationSessionActionKey {\n LoadCandidates = 'loadCandidates',\n StartSession = 'startSession',\n}\n\nexport interface DelegationSessionStateModel extends LoadingStateShape<DelegationSessionActionKey> {\n active: ActiveDelegationSession | null;\n candidates: DelegationRow[];\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport {\n Action,\n Actions,\n ofActionDispatched,\n ofActionSuccessful,\n Selector,\n State,\n StateContext,\n Store,\n} from '@ngxs/store';\nimport { handleApiRequest } from '@masterteam/components';\nimport { EMPTY, switchMap } from 'rxjs';\nimport { Response } from '../delegations/api.model';\nimport {\n DelegationPage,\n DelegationRow,\n} from '../delegations/delegations.model';\nimport {\n EndDelegationSession,\n LoadDelegationCandidates,\n StartDelegationSession,\n SwitchDelegationSession,\n} from './delegation-session.actions';\nimport {\n ActiveDelegationSession,\n DelegationSessionActionKey,\n DelegationSessionStateModel,\n} from './delegation-session.model';\n\nconst BASE = 'identity/delegations';\n\n// Action shells matching gateway-auth type strings — loose coupling, matched by\n// `type` only so this package does not depend on @masterteam/gateway-auth.\nclass GatewayLoginSuccessShell {\n static readonly type = '[Auth] Login Success';\n}\nclass GatewayLogoutShell {\n static readonly type = '[Auth] Logout';\n}\n\nfunction canStart(row: DelegationRow): boolean {\n return (\n row.effectiveStatus === 'Active' &&\n row.allowedActions?.includes('StartSession')\n );\n}\n\n@State<DelegationSessionStateModel>({\n name: 'delegationSession',\n defaults: {\n active: null,\n candidates: [],\n loadingActive: [],\n errors: {},\n },\n})\n@Injectable()\nexport class DelegationSessionState {\n private http = inject(HttpClient);\n private actions$ = inject(Actions);\n private store = inject(Store);\n\n constructor() {\n this.actions$\n .pipe(ofActionSuccessful(GatewayLoginSuccessShell))\n .subscribe(() => this.store.dispatch(new LoadDelegationCandidates()));\n\n this.actions$\n .pipe(ofActionDispatched(GatewayLogoutShell))\n .subscribe(() => this.store.dispatch(new EndDelegationSession('Logout')));\n }\n\n // ---------------------------------------------------------------------------\n // Selectors\n // ---------------------------------------------------------------------------\n\n @Selector()\n static getActive(\n state: DelegationSessionStateModel,\n ): ActiveDelegationSession | null {\n return state.active;\n }\n\n @Selector()\n static getCandidates(state: DelegationSessionStateModel): DelegationRow[] {\n return state.candidates;\n }\n\n @Selector()\n static isDelegated(state: DelegationSessionStateModel): boolean {\n return !!state.active;\n }\n\n @Selector()\n static getLoadingActive(state: DelegationSessionStateModel): string[] {\n return state.loadingActive;\n }\n\n @Selector()\n static getErrors(\n state: DelegationSessionStateModel,\n ): Record<string, string | null | undefined> {\n return state.errors;\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n @Action(LoadDelegationCandidates)\n loadCandidates(ctx: StateContext<DelegationSessionStateModel>) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/user/activedelegations`,\n );\n return handleApiRequest({\n ctx,\n key: DelegationSessionActionKey.LoadCandidates,\n request$: req$,\n onSuccess: (response) => ({\n candidates: (response.data?.items ?? []).filter(canStart),\n }),\n });\n }\n\n @Action(StartDelegationSession)\n start(\n ctx: StateContext<DelegationSessionStateModel>,\n { delegation }: StartDelegationSession,\n ) {\n const req$ = this.http.post<Response<string>>(\n `${BASE}/delegationToken/${delegation.delegationId}`,\n {},\n );\n return handleApiRequest({\n ctx,\n key: DelegationSessionActionKey.StartSession,\n request$: req$,\n onSuccess: (response) => ({\n active: { token: response.data, delegation } as ActiveDelegationSession,\n }),\n });\n }\n\n @Action(EndDelegationSession)\n end(ctx: StateContext<DelegationSessionStateModel>) {\n // Client-local only — there is no server end-session endpoint (doc 05).\n ctx.patchState({ active: null });\n return EMPTY;\n }\n\n @Action(SwitchDelegationSession)\n switch(\n ctx: StateContext<DelegationSessionStateModel>,\n { delegation }: SwitchDelegationSession,\n ) {\n return this.store\n .dispatch(new EndDelegationSession('Manual'))\n .pipe(\n switchMap(() =>\n this.store.dispatch(new StartDelegationSession(delegation)),\n ),\n );\n }\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { select, Store } from '@ngxs/store';\nimport {\n EndDelegationSession,\n LoadDelegationCandidates,\n StartDelegationSession,\n SwitchDelegationSession,\n} from './delegation-session.actions';\nimport {\n DelegationSessionActionKey,\n DelegationSessionInvalidationReason,\n} from './delegation-session.model';\nimport { DelegationSessionState } from './delegation-session.state';\nimport { DelegationRow } from '../delegations/delegations.model';\n\n@Injectable({ providedIn: 'root' })\nexport class DelegationSessionFacade {\n private readonly store = inject(Store);\n\n // ---------------------------------------------------------------------------\n // Data slices\n // ---------------------------------------------------------------------------\n readonly active = select(DelegationSessionState.getActive);\n readonly candidates = select(DelegationSessionState.getCandidates);\n readonly isDelegated = select(DelegationSessionState.isDelegated);\n\n private readonly loadingActive = select(\n DelegationSessionState.getLoadingActive,\n );\n\n // ---------------------------------------------------------------------------\n // Derived (interceptor + topbar)\n // ---------------------------------------------------------------------------\n /** Raw delegation token for the `app-delegation` header. */\n readonly token = computed(() => this.active()?.token ?? null);\n /** On-behalf-of (delegator). */\n readonly onBehalfOf = computed(\n () => this.active()?.delegation.delegator ?? null,\n );\n /** Executed-by (actual logged-in / delegated user). */\n readonly executedBy = computed(\n () => this.active()?.delegation.delegatedUser ?? null,\n );\n readonly hasCandidates = computed(() => this.candidates().length > 0);\n\n readonly isStarting = computed(() =>\n this.loadingActive().includes(DelegationSessionActionKey.StartSession),\n );\n readonly isLoadingCandidates = computed(() =>\n this.loadingActive().includes(DelegationSessionActionKey.LoadCandidates),\n );\n\n // ---------------------------------------------------------------------------\n // Dispatchers\n // ---------------------------------------------------------------------------\n loadCandidates() {\n return this.store.dispatch(new LoadDelegationCandidates());\n }\n startSession(delegation: DelegationRow) {\n return this.store.dispatch(new StartDelegationSession(delegation));\n }\n switchSession(delegation: DelegationRow) {\n return this.store.dispatch(new SwitchDelegationSession(delegation));\n }\n endSession(reason: DelegationSessionInvalidationReason = 'Manual') {\n return this.store.dispatch(new EndDelegationSession(reason));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\n\n/**\n * Confirmation dialog before starting (or switching to) a delegated session.\n * Calls the facade, which POSTs to `delegationToken/{id}` and stores the raw\n * token in memory only.\n */\n@Component({\n selector: 'mt-start-session-dialog',\n standalone: true,\n imports: [CommonModule, Avatar, Button, TranslocoDirective],\n templateUrl: './start-session-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class StartSessionDialog {\n readonly delegation = input.required<DelegationRow>();\n readonly intent = input<'start' | 'switch'>('start');\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly facade = inject(DelegationSessionFacade);\n\n protected readonly isBusy = this.facade.isStarting;\n\n protected readonly bodyKey = computed(() =>\n this.intent() === 'switch'\n ? 'delegations.session.switchConfirmBody'\n : 'delegations.session.startConfirmBody',\n );\n\n confirm(): void {\n const row = this.delegation();\n const op$ =\n this.intent() === 'switch'\n ? this.facade.switchSession(row)\n : this.facade.startSession(row);\n op$.subscribe({\n next: () => this.ref.close(true),\n error: () => {\n /* error surfaced via shared toast pipeline; keep dialog open */\n },\n });\n }\n\n cancel(): void {\n this.ref.close(false);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <div class=\"flex items-start gap-3\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-12! h-12! text-lg! bg-surface-200!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <div class=\"text-base font-medium text-gray-900 truncate\">\n {{ delegation().delegator.displayName }}\n </div>\n @if (delegation().delegator.email) {\n <div class=\"text-xs text-gray-500 truncate\">\n {{ delegation().delegator.email }}\n </div>\n }\n @if (delegation().scopeSummary) {\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ delegation().scopeSummary }}\n </div>\n }\n </div>\n </div>\n\n <p class=\"text-sm text-gray-600 leading-relaxed\">\n {{ t(bodyKey()) }}\n </p>\n\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.cancel')\"\n [disabled]=\"isBusy()\"\n (click)=\"cancel()\"\n ></mt-button>\n <mt-button\n color=\"primary\"\n icon=\"user.users-check\"\n [label]=\"t('delegations.action.startSession')\"\n [loading]=\"isBusy()\"\n (click)=\"confirm()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { ModalService } from '@masterteam/components/modal';\nimport { Icon } from '@masterteam/icons';\nimport { Popover } from 'primeng/popover';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\n\n/**\n * Topbar surface for the delegation runtime (doc 05, 09).\n *\n * State A — no candidates, no active session: renders nothing.\n * State B — candidates exist, no active session: lets the user start a session.\n * State C — active delegated session: shows \"Acting on behalf of {delegator}\" +\n * \"Executed by {actual user}\", plus Back / Switch.\n */\n@Component({\n selector: 'mt-topbar-delegation-menu',\n standalone: true,\n imports: [\n CommonModule,\n Avatar,\n Button,\n Icon,\n Popover,\n RouterLink,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './topbar-delegation-menu.html',\n styleUrls: ['./topbar-delegation-menu.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TopbarDelegationMenu {\n /** Path to the management page, e.g. `/control-panel/delegations` or `/delegations`. */\n readonly managePath = input<string>('/delegations');\n readonly compact = input<boolean>(false);\n\n private readonly facade = inject(DelegationSessionFacade);\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly popover = viewChild.required<Popover>('popover');\n\n protected readonly active = this.facade.active;\n protected readonly candidates = this.facade.candidates;\n protected readonly hasCandidates = this.facade.hasCandidates;\n protected readonly onBehalfOf = this.facade.onBehalfOf;\n protected readonly executedBy = this.facade.executedBy;\n\n protected readonly mode = computed<'hidden' | 'candidates' | 'active'>(() => {\n if (this.active()) return 'active';\n if (this.hasCandidates()) return 'candidates';\n return 'hidden';\n });\n\n togglePopover(event: Event): void {\n this.popover().toggle(event);\n }\n\n start(row: DelegationRow, event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.openConfirm(row, 'start');\n }\n\n switchTo(row: DelegationRow, event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.openConfirm(row, 'switch');\n }\n\n endSession(event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.facade.endSession('Manual').subscribe();\n }\n\n private openConfirm(row: DelegationRow, intent: 'start' | 'switch'): void {\n this.modal.openModal(StartSessionDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.startSession'),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent },\n });\n }\n}\n","<ng-container *transloco=\"let t\">\n @if (mode() !== \"hidden\") {\n <div class=\"mt-delegation-trigger flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"mt-delegation-trigger__button flex items-center gap-2 px-2 py-1 rounded-full cursor-pointer hover:bg-surface-100\"\n [attr.aria-label]=\"t('delegations.title')\"\n (click)=\"togglePopover($event)\"\n >\n @if (mode() === \"active\") {\n <mt-icon\n icon=\"user.users-check\"\n styleClass=\"text-lg text-primary\"\n ></mt-icon>\n @if (!compact()) {\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\n {{\n t(\"delegations.session.banner\", {\n delegatorName: onBehalfOf()?.displayName,\n })\n }}\n </span>\n }\n <mt-delegation-status-chip\n status=\"Active\"\n ></mt-delegation-status-chip>\n } @else {\n <mt-icon\n icon=\"user.users-plus\"\n styleClass=\"text-lg text-primary\"\n ></mt-icon>\n @if (!compact()) {\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\n {{ t(\"delegations.session.availableTitle\") }}\n </span>\n }\n }\n </button>\n </div>\n\n <p-popover #popover [pt]=\"{ content: { class: 'p-0!' } }\">\n <div class=\"flex flex-col min-w-80 max-w-96 p-0\">\n @if (mode() === \"active\" && active(); as session) {\n <!-- STATE C — active session -->\n <div\n class=\"flex items-start gap-3 border-b border-gray-200 px-4 py-4\"\n >\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-11! h-11! text-xl! text-gray-600! bg-surface-300!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0 flex-1\">\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.session.actingOnBehalfOf\") }}\n </div>\n <div class=\"text-sm font-medium text-gray-900 truncate\">\n {{ onBehalfOf()?.displayName }}\n </div>\n <div class=\"text-xs text-gray-500 mt-1\">\n {{\n t(\"delegations.session.executedBy\", {\n actualUserName: executedBy()?.displayName,\n })\n }}\n </div>\n @if (session.delegation.scopeSummary) {\n <div\n class=\"text-xs text-gray-500 mt-1 truncate\"\n [title]=\"session.delegation.scopeSummary\"\n >\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ session.delegation.scopeSummary }}\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1 px-2 py-2\">\n <mt-button\n variant=\"text\"\n icon=\"arrow.arrow-left\"\n [label]=\"t('delegations.action.endSession')\"\n styleClass=\"w-full justify-start\"\n (click)=\"endSession($event)\"\n ></mt-button>\n </div>\n\n @if (candidates().length > 1) {\n <div class=\"border-t border-gray-200 pt-2 px-2 pb-2\">\n <div class=\"text-xs text-gray-500 px-2 pb-1\">\n {{ t(\"delegations.session.switchToAnother\") }}\n </div>\n @for (cand of candidates(); track cand.delegationId) {\n @if (cand.delegationId !== session.delegation.delegationId) {\n <button\n type=\"button\"\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer\"\n (click)=\"switchTo(cand, $event)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-7! h-7! text-sm! bg-surface-200!\"\n ></mt-avatar>\n <span class=\"text-sm text-gray-900 truncate\">\n {{ cand.delegator.displayName }}\n </span>\n </div>\n <mt-icon\n icon=\"arrow.switch-horizontal-01\"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n </button>\n }\n }\n </div>\n }\n } @else if (mode() === \"candidates\") {\n <!-- STATE B — candidates available -->\n <div class=\"border-b border-gray-200 px-4 py-3\">\n <div class=\"text-sm font-medium text-gray-900\">\n {{ t(\"delegations.session.youCanActAs\") }}\n </div>\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.session.chooseDelegatorHint\") }}\n </div>\n </div>\n <div class=\"flex flex-col gap-1 px-2 py-2 max-h-72 overflow-y-auto\">\n @for (cand of candidates(); track cand.delegationId) {\n <button\n type=\"button\"\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\"\n (click)=\"start(cand, $event)\"\n >\n <div class=\"flex items-center gap-2 min-w-0 flex-1\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-9! h-9! text-base! bg-surface-200!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm font-medium text-gray-900 truncate\">\n {{ cand.delegator.displayName }}\n </span>\n @if (cand.scopeSummary) {\n <span\n class=\"text-xs text-gray-500 truncate\"\n [title]=\"cand.scopeSummary\"\n >\n {{ cand.scopeSummary }}\n </span>\n }\n </div>\n </div>\n <mt-icon\n icon=\"arrow.arrow-right\"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n </button>\n }\n </div>\n }\n\n <!-- Footer -->\n <div class=\"border-t border-gray-200 px-2 py-2\">\n <a\n [routerLink]=\"managePath()\"\n (click)=\"popover().hide()\"\n class=\"flex items-center gap-2 px-3 py-2 rounded-md text-gray-700 hover:bg-surface-100 text-sm cursor-pointer\"\n >\n <mt-icon\n icon=\"general.settings-02\"\n styleClass=\"text-base\"\n ></mt-icon>\n <span>{{ t(\"delegations.session.manage\") }}</span>\n </a>\n </div>\n </div>\n </p-popover>\n }\n</ng-container>\n","import {\n ApproveDelegationRequest,\n CreateDelegationLegacyRequest,\n CreateDelegationV2Request,\n DelegationListQuery,\n DelegationScopeSelection,\n RejectDelegationRequest,\n UpdateDelegationLegacyRequest,\n UpdateDelegationV2Request,\n} from './delegations.model';\n\n// ---------------------------------------------------------------------------\n// Lists / detail\n// ---------------------------------------------------------------------------\n\nexport class GetMyDelegations {\n static readonly type = '[Delegations] Get My Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetAssignedDelegations {\n static readonly type = '[Delegations] Get Assigned Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetActiveAssignedDelegations {\n static readonly type = '[Delegations] Get Active Assigned Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetDelegationDetail {\n static readonly type = '[Delegations] Get Delegation Detail';\n constructor(public id: number) {}\n}\n\nexport class ClearDelegationDetail {\n static readonly type = '[Delegations] Clear Delegation Detail';\n}\n\n// ---------------------------------------------------------------------------\n// Scope\n// ---------------------------------------------------------------------------\n\nexport class GetScopeOptions {\n static readonly type = '[Delegations] Get Scope Options';\n constructor(public delegatorUserId?: string) {}\n}\n\nexport class PreviewScope {\n static readonly type = '[Delegations] Preview Scope';\n constructor(public scope: DelegationScopeSelection) {}\n}\n\nexport class ClearScopePreview {\n static readonly type = '[Delegations] Clear Scope Preview';\n}\n\n// ---------------------------------------------------------------------------\n// Create / edit (legacy + v2)\n// ---------------------------------------------------------------------------\n\nexport class CreateDelegationLegacy {\n static readonly type = '[Delegations] Create Delegation (legacy)';\n constructor(public request: CreateDelegationLegacyRequest) {}\n}\n\nexport class CreateDelegationV2 {\n static readonly type = '[Delegations] Create Delegation (v2)';\n constructor(public request: CreateDelegationV2Request) {}\n}\n\nexport class UpdateDelegationLegacy {\n static readonly type = '[Delegations] Update Delegation (legacy)';\n constructor(\n public id: number,\n public request: UpdateDelegationLegacyRequest,\n ) {}\n}\n\nexport class UpdateDelegationV2 {\n static readonly type = '[Delegations] Update Delegation (v2)';\n constructor(\n public id: number,\n public request: UpdateDelegationV2Request,\n ) {}\n}\n\n// ---------------------------------------------------------------------------\n// Decisions\n// ---------------------------------------------------------------------------\n\nexport class ApproveDelegation {\n static readonly type = '[Delegations] Approve Delegation';\n constructor(\n public id: number,\n public request: ApproveDelegationRequest,\n ) {}\n}\n\nexport class RejectDelegation {\n static readonly type = '[Delegations] Reject Delegation';\n constructor(\n public id: number,\n public request: RejectDelegationRequest,\n ) {}\n}\n\nexport class CancelDelegation {\n static readonly type = '[Delegations] Cancel Delegation';\n constructor(\n public id: number,\n public rowVersion: string,\n public asAdmin: boolean = false,\n ) {}\n}\n","import { LoadingStateShape } from '../utils/state-helpers';\n\n// ============================================================================\n// Status / approval / actions (doc 01, 16)\n// ============================================================================\n\nexport type DelegationEffectiveStatus =\n | 'PendingApproval'\n | 'Scheduled'\n | 'Active'\n | 'InactiveToday'\n | 'Expired'\n | 'Rejected'\n | 'Cancelled';\n\nexport type DelegationApprovalStatus =\n | 'NotRequired'\n | 'Pending'\n | 'Approved'\n | 'Rejected';\n\nexport type DelegationAllowedAction =\n | 'View'\n | 'Edit'\n | 'Approve'\n | 'Reject'\n | 'Cancel'\n | 'StartSession'\n | 'EndSession';\n\nexport type DelegationDayRuleMode = 'FullRange' | 'SpecificDays';\n\n// ============================================================================\n// Parties + row (doc 02)\n// ============================================================================\n\nexport interface DelegationParty {\n userId: string;\n displayName: string;\n email?: string | null;\n}\n\nexport interface DelegationApprovalInfo {\n requiresApproval: boolean;\n approvalStatus: DelegationApprovalStatus;\n}\n\nexport interface DelegationCancellationInfo {\n cancelledBy?: DelegationParty | null;\n cancelledAtUtc?: string | null;\n cancellationReason?: string | null;\n}\n\nexport interface DelegationRow {\n delegationId: number;\n delegator: DelegationParty;\n delegatedUser: DelegationParty;\n startsAtUtc: string;\n endsAtUtc: string;\n timeZoneId: string;\n dayRuleMode: DelegationDayRuleMode;\n specificDays: number[];\n effectiveStatus: DelegationEffectiveStatus;\n statusReasonCode: string;\n createdBy: DelegationParty;\n createdAtUtc: string;\n approval: DelegationApprovalInfo;\n cancellation: DelegationCancellationInfo;\n allowedActions: DelegationAllowedAction[];\n scopeSummary: string;\n rowVersion: string;\n}\n\nexport interface DelegationPage<T> {\n items: T[];\n page: number;\n pageSize: number;\n totalCount: number;\n}\n\n// ============================================================================\n// Scope — grants based (doc 03, 04)\n// ============================================================================\n\nexport interface DelegationScopeTarget {\n applicationKey: string;\n targetType: string;\n targetKey: string;\n legacyModuleId?: number | null;\n targetId?: number | null;\n levelId?: number | null;\n levelModuleId?: number | null;\n domainModuleId?: number | null;\n moduleKey?: string | null;\n permissionModuleType?: string | null;\n permissionTargetId?: number | null;\n displayName?: string | null;\n}\n\nexport interface DelegationScopeAction {\n applicationKey: string;\n operationKey: string;\n operationKind: string;\n permissionCommand?: string | null;\n businessActionCode?: string | null;\n isHighRisk?: boolean;\n isDelegableSnapshot?: boolean;\n}\n\nexport interface DelegationGrant {\n /** Optional backend-provided stable grant identity; preferred for de-dup when present. */\n key?: string;\n applicationKey: string;\n target: DelegationScopeTarget;\n action: DelegationScopeAction;\n accessibilities: unknown[];\n dataFilters: unknown[];\n constraints: unknown[];\n}\n\nexport interface DelegationScopeSelection {\n grants: DelegationGrant[];\n metadata: Record<string, unknown>;\n}\n\n/** `scope/options` returns the grantable set in the same grants shape. */\nexport type DelegationScopeOptions = DelegationScopeSelection;\n\nexport interface DelegationScopeWarning {\n code?: string;\n message: string;\n}\n\nexport interface DelegationScopeDeniedItem {\n applicationKey: string;\n targetType: string;\n targetKey: string;\n operationKey: string;\n permissionCommand?: string;\n reasonCode: string;\n}\n\nexport interface DelegationScopePreview {\n isValid: boolean;\n normalizedScope: DelegationScopeSelection;\n scopeHash: string;\n summary: string;\n warnings: DelegationScopeWarning[];\n deniedItems: DelegationScopeDeniedItem[];\n}\n\n// ============================================================================\n// Detail (doc 02)\n// ============================================================================\n\nexport interface DelegationStatusInfo {\n effectiveStatus: DelegationEffectiveStatus;\n reasonCode: string;\n calculatedAtUtc: string;\n}\n\nexport interface DelegationDetail {\n row: DelegationRow;\n scope: DelegationScopeSelection;\n status: DelegationStatusInfo;\n}\n\n// ============================================================================\n// Legacy create/edit DTO returned by create/edit (doc 02)\n// ============================================================================\n\nexport interface DelegationDto {\n id: number;\n fromUserId: string;\n toUserId: string;\n description?: string;\n isActive?: boolean;\n delegationDaysType: DelegationDayRuleMode;\n specificDays: number[];\n applicationId?: number;\n requiresApproval?: boolean;\n effectiveStatus: DelegationEffectiveStatus;\n statusReasonCode: string;\n allowedActions: DelegationAllowedAction[];\n rowVersion: string;\n [extra: string]: unknown;\n}\n\n// ============================================================================\n// List query (doc 02)\n// ============================================================================\n\nexport type DelegationSortDirection =\n | 'asc'\n | 'ascending'\n | 'desc'\n | 'descending';\n\nexport interface DelegationListQuery {\n activeOnly?: boolean;\n status?: DelegationEffectiveStatus;\n search?: string;\n fromUtc?: string;\n toUtc?: string;\n sortBy?: string;\n sortDirection?: DelegationSortDirection;\n page?: number;\n pageSize?: number;\n // admin only\n delegatorUserId?: string;\n delegatedUserId?: string;\n}\n\n// ============================================================================\n// Create / edit / decision requests (doc 04)\n// ============================================================================\n\nexport interface CreateDelegationLegacyRequest {\n delegateFrom?: string | null;\n delegateTo: string;\n description?: string;\n delegateFromDateTime: string;\n delegateToDateTime: string;\n accessibilityIds?: number[];\n moduleIds?: number[];\n delegationDaysType: DelegationDayRuleMode;\n specificDays?: number[];\n isActive?: boolean;\n requiresApproval?: boolean;\n}\n\nexport interface CreateDelegationV2Request {\n delegateFrom?: string | null;\n delegateTo: string;\n description?: string;\n delegateFromDateTime: string;\n delegateToDateTime: string;\n delegationDaysType: DelegationDayRuleMode;\n specificDays?: number[];\n requiresApproval: boolean;\n scope: DelegationScopeSelection;\n}\n\nexport type UpdateDelegationLegacyRequest = CreateDelegationLegacyRequest & {\n rowVersion: string;\n};\n\nexport type UpdateDelegationV2Request = CreateDelegationV2Request & {\n rowVersion: string;\n};\n\nexport interface ApproveDelegationRequest {\n rowVersion: string;\n reason?: string;\n}\n\nexport interface RejectDelegationRequest {\n rowVersion: string;\n reason: string;\n}\n\n// ============================================================================\n// NGXS state shape + action keys\n// ============================================================================\n\nexport enum DelegationsActionKey {\n GetMy = 'getMy',\n GetAssigned = 'getAssigned',\n GetActive = 'getActive',\n GetDetail = 'getDetail',\n GetScopeOptions = 'getScopeOptions',\n PreviewScope = 'previewScope',\n Create = 'create',\n Update = 'update',\n Approve = 'approve',\n Reject = 'reject',\n Cancel = 'cancel',\n}\n\nexport interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {\n my: DelegationPage<DelegationRow> | null;\n assigned: DelegationPage<DelegationRow> | null;\n active: DelegationPage<DelegationRow> | null;\n detail: DelegationDetail | null;\n scopeOptions: DelegationScopeOptions | null;\n scopePreview: DelegationScopePreview | null;\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { handleApiRequest } from '@masterteam/components';\nimport { Response } from './api.model';\nimport {\n ApproveDelegation,\n CancelDelegation,\n ClearDelegationDetail,\n ClearScopePreview,\n CreateDelegationLegacy,\n CreateDelegationV2,\n GetActiveAssignedDelegations,\n GetAssignedDelegations,\n GetDelegationDetail,\n GetMyDelegations,\n GetScopeOptions,\n PreviewScope,\n RejectDelegation,\n UpdateDelegationLegacy,\n UpdateDelegationV2,\n} from './delegations.actions';\nimport {\n DelegationDetail,\n DelegationDto,\n DelegationListQuery,\n DelegationPage,\n DelegationRow,\n DelegationScopeOptions,\n DelegationScopePreview,\n DelegationsActionKey,\n DelegationsStateModel,\n} from './delegations.model';\n\nconst BASE = 'identity/delegations';\n\nfunction buildListParams(query: DelegationListQuery): HttpParams {\n let params = new HttpParams();\n if (query.activeOnly != null)\n params = params.set('activeOnly', query.activeOnly);\n if (query.status) params = params.set('status', query.status);\n if (query.search) params = params.set('search', query.search);\n if (query.fromUtc) params = params.set('fromUtc', query.fromUtc);\n if (query.toUtc) params = params.set('toUtc', query.toUtc);\n if (query.sortBy) params = params.set('sortBy', query.sortBy);\n if (query.sortDirection)\n params = params.set('sortDirection', query.sortDirection);\n params = params.set('page', query.page ?? 1);\n params = params.set('pageSize', query.pageSize ?? 25);\n if (query.delegatorUserId)\n params = params.set('delegatorUserId', query.delegatorUserId);\n if (query.delegatedUserId)\n params = params.set('delegatedUserId', query.delegatedUserId);\n return params;\n}\n\n@State<DelegationsStateModel>({\n name: 'delegations',\n defaults: {\n my: null,\n assigned: null,\n active: null,\n detail: null,\n scopeOptions: null,\n scopePreview: null,\n loadingActive: [],\n errors: {},\n },\n})\n@Injectable()\nexport class DelegationsState {\n private http = inject(HttpClient);\n\n // ============================================================================\n // Selectors\n // ============================================================================\n\n @Selector()\n static getMy(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.my;\n }\n\n @Selector()\n static getAssigned(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.assigned;\n }\n\n @Selector()\n static getActive(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.active;\n }\n\n @Selector()\n static getDetail(state: DelegationsStateModel): DelegationDetail | null {\n return state.detail;\n }\n\n @Selector()\n static getScopeOptions(\n state: DelegationsStateModel,\n ): DelegationScopeOptions | null {\n return state.scopeOptions;\n }\n\n @Selector()\n static getScopePreview(\n state: DelegationsStateModel,\n ): DelegationScopePreview | null {\n return state.scopePreview;\n }\n\n @Selector()\n static getLoadingActive(state: DelegationsStateModel): string[] {\n return state.loadingActive;\n }\n\n @Selector()\n static getErrors(\n state: DelegationsStateModel,\n ): Record<string, string | null | undefined> {\n return state.errors;\n }\n\n // ============================================================================\n // Lists\n // ============================================================================\n\n @Action(GetMyDelegations)\n getMy(ctx: StateContext<DelegationsStateModel>, { query }: GetMyDelegations) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(BASE, {\n params: buildListParams(query),\n });\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetMy,\n request$: req$,\n onSuccess: (response) => ({ my: response.data }),\n });\n }\n\n @Action(GetAssignedDelegations)\n getAssigned(\n ctx: StateContext<DelegationsStateModel>,\n { query }: GetAssignedDelegations,\n ) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/assigned`,\n { params: buildListParams(query) },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetAssigned,\n request$: req$,\n onSuccess: (response) => ({ assigned: response.data }),\n });\n }\n\n @Action(GetActiveAssignedDelegations)\n getActive(\n ctx: StateContext<DelegationsStateModel>,\n { query }: GetActiveAssignedDelegations,\n ) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/user/activedelegations`,\n { params: buildListParams(query) },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetActive,\n request$: req$,\n onSuccess: (response) => ({ active: response.data }),\n });\n }\n\n @Action(GetDelegationDetail)\n getDetail(\n ctx: StateContext<DelegationsStateModel>,\n { id }: GetDelegationDetail,\n ) {\n const req$ = this.http.get<Response<DelegationDetail>>(`${BASE}/${id}`);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetDetail,\n request$: req$,\n onSuccess: (response) => ({ detail: response.data ?? null }),\n });\n }\n\n @Action(ClearDelegationDetail)\n clearDetail(ctx: StateContext<DelegationsStateModel>) {\n ctx.patchState({ detail: null });\n }\n\n // ============================================================================\n // Scope\n // ============================================================================\n\n @Action(GetScopeOptions)\n getScopeOptions(\n ctx: StateContext<DelegationsStateModel>,\n { delegatorUserId }: GetScopeOptions,\n ) {\n let params = new HttpParams();\n if (delegatorUserId)\n params = params.set('delegatorUserId', delegatorUserId);\n const req$ = this.http.get<Response<DelegationScopeOptions>>(\n `${BASE}/scope/options`,\n { params },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetScopeOptions,\n request$: req$,\n onSuccess: (response) => ({ scopeOptions: response.data ?? null }),\n });\n }\n\n @Action(PreviewScope)\n previewScope(\n ctx: StateContext<DelegationsStateModel>,\n { scope }: PreviewScope,\n ) {\n const req$ = this.http.post<Response<DelegationScopePreview>>(\n `${BASE}/scope/preview`,\n { scope },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.PreviewScope,\n request$: req$,\n onSuccess: (response) => ({ scopePreview: response.data ?? null }),\n });\n }\n\n @Action(ClearScopePreview)\n clearScopePreview(ctx: StateContext<DelegationsStateModel>) {\n ctx.patchState({ scopePreview: null });\n }\n\n // ============================================================================\n // Create / edit (response is legacy DelegationDto — clients reload list/detail)\n // ============================================================================\n\n @Action(CreateDelegationLegacy)\n createLegacy(\n ctx: StateContext<DelegationsStateModel>,\n { request }: CreateDelegationLegacy,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(BASE, request);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Create,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(CreateDelegationV2)\n createV2(\n ctx: StateContext<DelegationsStateModel>,\n { request }: CreateDelegationV2,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(`${BASE}/v2`, request);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Create,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(UpdateDelegationLegacy)\n updateLegacy(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: UpdateDelegationLegacy,\n ) {\n const req$ = this.http.put<Response<DelegationDto>>(\n `${BASE}/${id}`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Update,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(UpdateDelegationV2)\n updateV2(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: UpdateDelegationV2,\n ) {\n const req$ = this.http.put<Response<DelegationDto>>(\n `${BASE}/v2/${id}`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Update,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n // ============================================================================\n // Decisions\n // ============================================================================\n\n @Action(ApproveDelegation)\n approve(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: ApproveDelegation,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(\n `${BASE}/${id}/approve`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Approve,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(RejectDelegation)\n reject(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: RejectDelegation,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(\n `${BASE}/${id}/reject`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Reject,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(CancelDelegation)\n cancel(\n ctx: StateContext<DelegationsStateModel>,\n { id, rowVersion, asAdmin }: CancelDelegation,\n ) {\n const path = asAdmin ? `${BASE}/Admin/${id}` : `${BASE}/${id}`;\n const req$ = this.http.delete<Response<boolean>>(path, {\n params: new HttpParams().set('rowVersion', rowVersion),\n });\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Cancel,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { select, Store } from '@ngxs/store';\nimport {\n ApproveDelegation,\n CancelDelegation,\n ClearDelegationDetail,\n ClearScopePreview,\n CreateDelegationLegacy,\n CreateDelegationV2,\n GetActiveAssignedDelegations,\n GetAssignedDelegations,\n GetDelegationDetail,\n GetMyDelegations,\n GetScopeOptions,\n PreviewScope,\n RejectDelegation,\n UpdateDelegationLegacy,\n UpdateDelegationV2,\n} from './delegations.actions';\nimport {\n ApproveDelegationRequest,\n CreateDelegationLegacyRequest,\n CreateDelegationV2Request,\n DelegationListQuery,\n DelegationScopeSelection,\n DelegationsActionKey,\n RejectDelegationRequest,\n UpdateDelegationLegacyRequest,\n UpdateDelegationV2Request,\n} from './delegations.model';\nimport { DelegationsState } from './delegations.state';\n\n@Injectable({ providedIn: 'root' })\nexport class DelegationsFacade {\n private readonly store = inject(Store);\n\n // ---------------------------------------------------------------------------\n // Data slices\n // ---------------------------------------------------------------------------\n readonly myPage = select(DelegationsState.getMy);\n readonly assignedPage = select(DelegationsState.getAssigned);\n readonly activePage = select(DelegationsState.getActive);\n readonly detail = select(DelegationsState.getDetail);\n readonly scopeOptions = select(DelegationsState.getScopeOptions);\n readonly scopePreview = select(DelegationsState.getScopePreview);\n\n private readonly loadingActive = select(DelegationsState.getLoadingActive);\n private readonly errors = select(DelegationsState.getErrors);\n\n // ---------------------------------------------------------------------------\n // Derived\n // ---------------------------------------------------------------------------\n readonly myItems = computed(() => this.myPage()?.items ?? []);\n readonly assignedItems = computed(() => this.assignedPage()?.items ?? []);\n readonly activeItems = computed(() => this.activePage()?.items ?? []);\n\n // ---------------------------------------------------------------------------\n // Loading\n // ---------------------------------------------------------------------------\n readonly isLoadingMy = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetMy),\n );\n readonly isLoadingAssigned = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetAssigned),\n );\n readonly isLoadingActive = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetActive),\n );\n readonly isLoadingDetail = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetDetail),\n );\n readonly isLoadingScopeOptions = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetScopeOptions),\n );\n readonly isPreviewingScope = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.PreviewScope),\n );\n readonly isSaving = computed(\n () =>\n this.loadingActive().includes(DelegationsActionKey.Create) ||\n this.loadingActive().includes(DelegationsActionKey.Update),\n );\n readonly isApproving = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Approve),\n );\n readonly isRejecting = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Reject),\n );\n readonly isCancelling = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Cancel),\n );\n\n // ---------------------------------------------------------------------------\n // Errors\n // ---------------------------------------------------------------------------\n readonly errorMy = computed(\n () => this.errors()[DelegationsActionKey.GetMy] ?? null,\n );\n readonly errorAssigned = computed(\n () => this.errors()[DelegationsActionKey.GetAssigned] ?? null,\n );\n readonly errorDetail = computed(\n () => this.errors()[DelegationsActionKey.GetDetail] ?? null,\n );\n readonly errorSave = computed(\n () =>\n this.errors()[DelegationsActionKey.Create] ??\n this.errors()[DelegationsActionKey.Update] ??\n null,\n );\n\n // ---------------------------------------------------------------------------\n // Dispatchers\n // ---------------------------------------------------------------------------\n getMy(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetMyDelegations(query));\n }\n getAssigned(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetAssignedDelegations(query));\n }\n getActive(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetActiveAssignedDelegations(query));\n }\n getDetail(id: number) {\n return this.store.dispatch(new GetDelegationDetail(id));\n }\n clearDetail() {\n return this.store.dispatch(new ClearDelegationDetail());\n }\n loadScopeOptions(delegatorUserId?: string) {\n return this.store.dispatch(new GetScopeOptions(delegatorUserId));\n }\n previewScope(scope: DelegationScopeSelection) {\n return this.store.dispatch(new PreviewScope(scope));\n }\n clearScopePreview() {\n return this.store.dispatch(new ClearScopePreview());\n }\n createLegacy(request: CreateDelegationLegacyRequest) {\n return this.store.dispatch(new CreateDelegationLegacy(request));\n }\n createV2(request: CreateDelegationV2Request) {\n return this.store.dispatch(new CreateDelegationV2(request));\n }\n updateLegacy(id: number, request: UpdateDelegationLegacyRequest) {\n return this.store.dispatch(new UpdateDelegationLegacy(id, request));\n }\n updateV2(id: number, request: UpdateDelegationV2Request) {\n return this.store.dispatch(new UpdateDelegationV2(id, request));\n }\n approve(id: number, request: ApproveDelegationRequest) {\n return this.store.dispatch(new ApproveDelegation(id, request));\n }\n reject(id: number, request: RejectDelegationRequest) {\n return this.store.dispatch(new RejectDelegation(id, request));\n }\n cancel(id: number, rowVersion: string, asAdmin = false) {\n return this.store.dispatch(new CancelDelegation(id, rowVersion, asAdmin));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\n\n/**\n * Collects a required rejection reason before calling\n * POST identity/delegations/{id}/reject (doc 04 — reject requires a non-empty\n * reason for audit/governance). Closes with `true` on success so the caller\n * can reload the row.\n */\n@Component({\n selector: 'mt-reject-delegation-dialog',\n standalone: true,\n imports: [CommonModule, Button, TranslocoDirective],\n templateUrl: './reject-delegation-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class RejectDelegationDialog {\n readonly delegation = input.required<DelegationRow>();\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly facade = inject(DelegationsFacade);\n\n protected readonly reason = signal('');\n protected readonly submitted = signal(false);\n protected readonly isBusy = this.facade.isRejecting;\n\n protected readonly isValid = computed(() => this.reason().trim().length > 0);\n\n protected onReasonInput(event: Event): void {\n this.reason.set((event.target as HTMLTextAreaElement).value);\n }\n\n confirm(): void {\n this.submitted.set(true);\n if (!this.isValid()) return;\n const row = this.delegation();\n this.facade\n .reject(row.delegationId, {\n rowVersion: row.rowVersion,\n reason: this.reason().trim(),\n })\n .subscribe({\n next: () => this.ref.close(true),\n error: () => {\n /* error surfaced via shared toast pipeline; keep dialog open */\n },\n });\n }\n\n cancel(): void {\n this.ref.close(false);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <div class=\"flex flex-col gap-1\">\n <div class=\"text-sm text-gray-700\">\n {{ t(\"delegations.confirm.reject\") }}\n </div>\n <div class=\"text-xs text-gray-500\">\n {{ delegation().delegator.displayName }}\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1\">\n <label class=\"text-sm font-medium text-gray-800\" for=\"mt-reject-reason\">\n {{ t(\"delegations.form.rejectionReason\") }}\n <span class=\"text-red-600\">*</span>\n </label>\n <textarea\n id=\"mt-reject-reason\"\n rows=\"3\"\n class=\"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-primary focus:outline-none\"\n [class.border-red-400]=\"submitted() && !isValid()\"\n [value]=\"reason()\"\n (input)=\"onReasonInput($event)\"\n [attr.aria-invalid]=\"submitted() && !isValid()\"\n [placeholder]=\"t('delegations.form.rejectionReason')\"\n ></textarea>\n @if (submitted() && !isValid()) {\n <span class=\"text-xs text-red-600\">\n {{ t(\"delegations.form.rejectReasonRequired\") }}\n </span>\n }\n </div>\n\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.cancel')\"\n [disabled]=\"isBusy()\"\n (click)=\"cancel()\"\n ></mt-button>\n <mt-button\n color=\"danger\"\n icon=\"general.x-close\"\n [label]=\"t('delegations.action.reject')\"\n [loading]=\"isBusy()\"\n [disabled]=\"!isValid()\"\n (click)=\"confirm()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\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.title')\"\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 { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n OnInit,\n signal,\n untracked,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Icon } from '@masterteam/icons';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DelegationsFacade } from '../../../../store/delegations/delegations.facade';\nimport {\n DelegationGrant,\n DelegationScopeSelection,\n DelegationScopeTarget,\n} from '../../../../store/delegations/delegations.model';\n\ninterface TargetGroup {\n key: string;\n target: DelegationScopeTarget;\n grants: DelegationGrant[];\n}\n\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\n\nfunction targetKey(t: DelegationScopeTarget): string {\n return `${t.applicationKey}::${t.targetType}::${t.targetKey}`;\n}\n\n/**\n * Full grant identity. Two grants with the same target/action but different\n * accessibilities, data filters, or constraints are DIFFERENT grants and must\n * not collapse (backend scope contract). Prefer a backend-provided stable\n * `key`; otherwise hash the complete grant shape.\n */\nfunction grantKey(g: DelegationGrant): string {\n if (g.key) return g.key;\n return JSON.stringify({\n app: g.applicationKey,\n target: [\n g.target.applicationKey,\n g.target.targetType,\n g.target.targetKey,\n g.target.permissionModuleType ?? null,\n g.target.permissionTargetId ?? null,\n g.target.legacyModuleId ?? null,\n g.target.levelId ?? null,\n g.target.levelModuleId ?? null,\n g.target.domainModuleId ?? null,\n g.target.moduleKey ?? null,\n ],\n action: [\n g.action.applicationKey,\n g.action.operationKey,\n g.action.operationKind,\n g.action.permissionCommand ?? null,\n g.action.businessActionCode ?? null,\n ],\n accessibilities: g.accessibilities ?? [],\n dataFilters: g.dataFilters ?? [],\n constraints: g.constraints ?? [],\n });\n}\n\nfunction normalizeGrant(g: DelegationGrant): DelegationGrant {\n return {\n ...g,\n accessibilities: g.accessibilities ?? [],\n dataFilters: g.dataFilters ?? [],\n constraints: g.constraints ?? [],\n };\n}\n\n/**\n * Grants-based scope picker (doc 03). Driven entirely by `scope/options`:\n * - lists grantable target/action pairs returned by the backend,\n * - lets the user toggle each grant,\n * - calls `scope/preview` (debounced) and surfaces summary / warnings / denied.\n *\n * `[(scope)]` two-way binds a `DelegationScopeSelection`. The component never\n * invents permission metadata — it only echoes grants returned by options.\n */\n@Component({\n selector: 'mt-scope-picker',\n standalone: true,\n imports: [\n CommonModule,\n Icon,\n SkeletonModule,\n TooltipModule,\n TranslocoDirective,\n ],\n templateUrl: './scope-picker.html',\n styleUrls: ['./scope-picker.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScopePicker implements OnInit {\n readonly scope = model<DelegationScopeSelection>(EMPTY_SCOPE);\n readonly readonly = input<boolean>(false);\n readonly delegatorUserId = input<string | undefined>(undefined);\n\n private readonly facade = inject(DelegationsFacade);\n\n protected readonly options = this.facade.scopeOptions;\n protected readonly preview = this.facade.scopePreview;\n protected readonly isLoadingOptions = this.facade.isLoadingScopeOptions;\n protected readonly isPreviewing = this.facade.isPreviewingScope;\n\n /** Grantable options grouped by target. */\n protected readonly groups = computed<TargetGroup[]>(() => {\n const grants = this.options()?.grants ?? [];\n const map = new Map<string, TargetGroup>();\n for (const g of grants) {\n const key = targetKey(g.target);\n const existing = map.get(key);\n if (existing) {\n existing.grants.push(g);\n } else {\n map.set(key, { key, target: g.target, grants: [g] });\n }\n }\n return Array.from(map.values());\n });\n\n /** Selected grant keys for O(1) checkbox state. */\n protected readonly selectedKeys = computed(\n () => new Set(this.scope().grants.map(grantKey)),\n );\n\n private readonly expanded = signal<Set<string>>(new Set());\n\n ngOnInit(): void {\n this.facade.loadScopeOptions(this.delegatorUserId());\n }\n\n constructor() {\n let timer: ReturnType<typeof setTimeout> | null = null;\n effect(() => {\n const s = this.scope();\n untracked(() => {\n if (!s.grants.length) {\n this.facade.clearScopePreview();\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => this.facade.previewScope(s), 300);\n });\n });\n }\n\n protected isExpanded(group: TargetGroup): boolean {\n return this.expanded().has(group.key);\n }\n\n protected toggleAccordion(group: TargetGroup): void {\n const next = new Set(this.expanded());\n if (next.has(group.key)) next.delete(group.key);\n else next.add(group.key);\n this.expanded.set(next);\n }\n\n protected isSelected(grant: DelegationGrant): boolean {\n return this.selectedKeys().has(grantKey(grant));\n }\n\n protected toggleGrant(grant: DelegationGrant): void {\n if (this.readonly()) return;\n const key = grantKey(grant);\n this.scope.update((s) => {\n const exists = s.grants.some((g) => grantKey(g) === key);\n const grants = exists\n ? s.grants.filter((g) => grantKey(g) !== key)\n : [...s.grants, normalizeGrant(grant)];\n return { ...s, grants };\n });\n }\n\n protected selectedCount(group: TargetGroup): number {\n const keys = this.selectedKeys();\n return group.grants.filter((g) => keys.has(grantKey(g))).length;\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"mt-scope-picker flex flex-col gap-4\">\n @if (isLoadingOptions() && !options()) {\n <p-skeleton height=\"2rem\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n } @else if (options()) {\n <!-- Targets + actions -->\n <section class=\"flex flex-col gap-2\">\n <h4 class=\"text-sm font-medium text-gray-800\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </h4>\n\n @if (groups().length === 0) {\n <p class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noGrantableOptions\") }}\n </p>\n }\n\n @for (group of groups(); track group.key) {\n <div class=\"border border-gray-200 rounded-md overflow-hidden\">\n <button\n type=\"button\"\n class=\"flex items-center justify-between w-full px-3 py-2 hover:bg-surface-50 cursor-pointer\"\n (click)=\"toggleAccordion(group)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <mt-icon\n [icon]=\"\n isExpanded(group)\n ? 'arrow.chevron-down'\n : 'arrow.chevron-right'\n \"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n <span class=\"text-sm text-gray-900 truncate\">\n {{ group.target.displayName || group.target.targetKey }}\n </span>\n <span class=\"text-xs text-gray-400\">\n {{ group.target.targetType }}\n </span>\n </div>\n @if (selectedCount(group); as count) {\n @if (count > 0) {\n <span\n class=\"text-xs text-primary font-medium px-2 py-0.5 rounded-full bg-primary-50\"\n >\n {{ count }}\n </span>\n }\n }\n </button>\n\n @if (isExpanded(group)) {\n <div class=\"flex flex-col gap-1 px-3 py-2 bg-surface-50/40\">\n @for (grant of group.grants; track $index) {\n <label\n class=\"flex items-center gap-2 px-2 py-1.5 rounded-md cursor-pointer hover:bg-surface-100\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(grant)\"\n [disabled]=\"readonly()\"\n (change)=\"toggleGrant(grant)\"\n />\n <span class=\"text-sm\">\n {{ grant.action.operationKey }}\n </span>\n @if (grant.action.isHighRisk) {\n <mt-icon\n icon=\"alert.alert-triangle\"\n styleClass=\"text-sm text-amber-500\"\n [pTooltip]=\"t('delegations.scope.highRisk')\"\n tooltipPosition=\"top\"\n ></mt-icon>\n }\n </label>\n }\n </div>\n }\n </div>\n }\n </section>\n\n <!-- Preview -->\n <section\n class=\"flex flex-col gap-1 px-3 py-2 rounded-md border border-dashed border-gray-300 bg-surface-50\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <div class=\"text-xs font-medium text-gray-700\">\n {{ t(\"delegations.scope.previewTitle\") }}\n </div>\n @if (isPreviewing()) {\n <p-skeleton width=\"6rem\" height=\"0.75rem\"></p-skeleton>\n }\n </div>\n @if (preview(); as p) {\n @if (p.isValid) {\n <div class=\"text-sm text-gray-900\">\n {{ p.summary || t(\"delegations.column.scopeSummary\") }}\n </div>\n } @else {\n <div class=\"text-sm text-red-700\">\n {{ t(\"delegations.scope.previewInvalid\") }}\n </div>\n }\n @if (p.warnings.length > 0) {\n <ul class=\"text-xs text-amber-700 list-disc list-inside\">\n @for (w of p.warnings; track w.message) {\n <li>{{ w.message }}</li>\n }\n </ul>\n }\n @if (p.deniedItems.length > 0) {\n <ul class=\"text-xs text-red-700 list-disc list-inside\">\n @for (d of p.deniedItems; track d.operationKey) {\n <li>\n {{ d.targetKey }} / {{ d.operationKey }} —\n {{ d.reasonCode }}\n </li>\n }\n </ul>\n }\n } @else {\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noSelection\") }}\n </div>\n }\n </section>\n }\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { HttpContext } from '@angular/common/http';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport {\n DateFieldConfig,\n DynamicFormConfig,\n MultiSelectFieldConfig,\n RadioButtonFieldConfig,\n REQUEST_CONTEXT,\n TextareaFieldConfig,\n ToggleFieldConfig,\n UserSearchFieldConfig,\n ValidatorConfig,\n} from '@masterteam/components';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { ModalService } from '@masterteam/components/modal';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { ScopePicker } from './scope-picker/scope-picker';\nimport {\n CreateDelegationV2Request,\n DelegationRow,\n DelegationScopeSelection,\n UpdateDelegationV2Request,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\n\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\n\n/**\n * Delegation create/edit form (doc 04). Uses the v2 explicit-scope endpoints so\n * the persisted `DelegationScopeSelection` matches what scope/preview validated.\n *\n * - Delegator is server-derived; only the delegated user is collected.\n * - On edit, scope grants + rowVersion come from the loaded detail.\n * - Times are sent in UTC ISO; wrappers set timeZoneId = UTC.\n */\n@Component({\n selector: 'mt-delegation-form',\n standalone: true,\n imports: [\n CommonModule,\n Button,\n DynamicForm,\n ReactiveFormsModule,\n ScopePicker,\n TranslocoDirective,\n ],\n templateUrl: './delegation-form.html',\n styleUrls: ['./delegation-form.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationForm implements OnInit {\n readonly delegationForEdit = input<DelegationRow | null>(null);\n readonly readonly = input<boolean>(false);\n\n private readonly halfWidth = 'flex flex-col gap-1 lg:col-span-6';\n private readonly fullWidth = 'flex flex-col gap-1 lg:col-span-12';\n\n modal = inject(ModalService);\n ref: ModalRef = inject(ModalRef);\n private readonly transloco = inject(TranslocoService);\n private readonly facade = inject(DelegationsFacade);\n\n delegationFormControl = new FormControl();\n formValue = toSignal(this.delegationFormControl.valueChanges);\n\n detail = this.facade.detail;\n isDetailLoading = this.facade.isLoadingDetail;\n isSaving = this.facade.isSaving;\n\n context = new HttpContext().set(REQUEST_CONTEXT, { useBaseUrl: false });\n\n protected readonly scope = signal<DelegationScopeSelection>(EMPTY_SCOPE);\n\n protected readonly specificDaysOptions = signal([\n { label: this.transloco.translate('delegations.days.sunday'), value: 0 },\n { label: this.transloco.translate('delegations.days.monday'), value: 1 },\n { label: this.transloco.translate('delegations.days.tuesday'), value: 2 },\n { label: this.transloco.translate('delegations.days.wednesday'), value: 3 },\n { label: this.transloco.translate('delegations.days.thursday'), value: 4 },\n { label: this.transloco.translate('delegations.days.friday'), value: 5 },\n { label: this.transloco.translate('delegations.days.saturday'), value: 6 },\n ]);\n\n protected readonly formConfig = computed<DynamicFormConfig>(() => ({\n sections: [\n {\n key: 'delegationForm',\n type: 'header',\n bodyClass: 'grid grid-cols-1 gap-4 items-start lg:grid-cols-12',\n order: 1,\n fields: [\n new UserSearchFieldConfig({\n key: 'delegateTo',\n label: this.transloco.translate('delegations.column.delegatedTo'),\n apiUrl: 'Identity/users',\n context: this.context,\n validators: [ValidatorConfig.required()],\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 1,\n disabled: this.readonly() || !!this.delegationForEdit(),\n }),\n new TextareaFieldConfig({\n key: 'description',\n label: this.transloco.translate('delegations.form.description'),\n placeholder: this.transloco.translate(\n 'delegations.form.description',\n ),\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 2,\n disabled: this.readonly(),\n }),\n new DateFieldConfig({\n key: 'delegateFromDateTime',\n label: this.transloco.translate('delegations.column.startDate'),\n placeholder: this.transloco.translate(\n 'delegations.column.startDate',\n ),\n validators: [ValidatorConfig.required()],\n showTime: true,\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 3,\n disabled: this.readonly(),\n }),\n new DateFieldConfig({\n key: 'delegateToDateTime',\n label: this.transloco.translate('delegations.column.endDate'),\n placeholder: this.transloco.translate('delegations.column.endDate'),\n validators: [ValidatorConfig.required()],\n showTime: true,\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 4,\n disabled: this.readonly(),\n }),\n new RadioButtonFieldConfig({\n key: 'delegationDaysType',\n label: this.transloco.translate('delegations.form.daysApply'),\n options: [\n {\n label: this.transloco.translate('delegations.form.fullRange'),\n value: 'FullRange',\n },\n {\n label: this.transloco.translate(\n 'delegations.form.specificDays',\n ),\n value: 'SpecificDays',\n },\n ],\n optionLabel: 'label',\n optionValue: 'value',\n validators: [ValidatorConfig.required()],\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 5,\n disabled: this.readonly(),\n }),\n new MultiSelectFieldConfig({\n key: 'specificDays',\n label: this.transloco.translate('delegations.form.specificDays'),\n options: this.specificDaysOptions(),\n optionLabel: 'label',\n optionValue: 'value',\n maxSelectedLabels: 7,\n relations: [\n {\n key: 'delegationDaysType',\n value: 'SpecificDays',\n action: 'show',\n },\n ],\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 6,\n disabled: this.readonly(),\n }),\n new ToggleFieldConfig({\n key: 'requiresApproval',\n label: this.transloco.translate(\n 'delegations.form.requiresApproval',\n ),\n cssClass: `${this.fullWidth} mt-2`,\n order: 7,\n disabled: this.readonly(),\n }),\n ],\n },\n ],\n }));\n\n constructor() {\n effect(() => {\n const editing = this.delegationForEdit();\n const d = this.detail();\n if (editing && d && d.row.delegationId === editing.delegationId) {\n this.delegationFormControl.patchValue({\n delegateTo: d.row.delegatedUser,\n description: '',\n delegateFromDateTime: d.row.startsAtUtc,\n delegateToDateTime: d.row.endsAtUtc,\n delegationDaysType: d.row.dayRuleMode,\n specificDays: d.row.specificDays ?? [],\n requiresApproval: d.row.approval?.requiresApproval ?? false,\n });\n this.scope.set({\n grants: d.scope?.grants ?? [],\n metadata: d.scope?.metadata ?? {},\n });\n } else if (!editing) {\n this.delegationFormControl.reset({\n delegationDaysType: 'FullRange',\n requiresApproval: true,\n });\n this.scope.set(EMPTY_SCOPE);\n }\n });\n }\n\n ngOnInit(): void {\n const editing = this.delegationForEdit();\n if (editing) {\n this.facade.getDetail(editing.delegationId);\n }\n }\n\n protected readonly canSubmit = computed(\n () => !this.readonly() && this.scope().grants.length > 0,\n );\n\n onSubmit(): void {\n if (this.readonly() || !this.delegationFormControl.valid) return;\n if (this.scope().grants.length === 0) return;\n\n const v = this.delegationFormControl.value;\n const base = {\n delegateTo: v?.delegateTo?.userId ?? v?.delegateTo?.id ?? v?.delegateTo,\n description: v?.description,\n delegateFromDateTime: v?.delegateFromDateTime,\n delegateToDateTime: v?.delegateToDateTime,\n delegationDaysType: (v?.delegationDaysType ?? 'FullRange') as\n | 'FullRange'\n | 'SpecificDays',\n specificDays:\n v?.delegationDaysType === 'SpecificDays' ? (v?.specificDays ?? []) : [],\n requiresApproval: !!v?.requiresApproval,\n scope: this.scope(),\n };\n\n const editing = this.delegationForEdit();\n if (editing) {\n // Prefer the freshest rowVersion from the loaded detail (the form loads\n // detail on open); fall back to the list row only if detail is absent.\n const latestRowVersion =\n this.detail()?.row?.rowVersion ?? editing.rowVersion;\n const req: UpdateDelegationV2Request = {\n ...base,\n rowVersion: latestRowVersion,\n };\n this.facade.updateV2(editing.delegationId, req).subscribe({\n next: () => this.ref.close(true),\n });\n } else {\n const req: CreateDelegationV2Request = base;\n this.facade.createV2(req).subscribe({\n next: () => this.ref.close(true),\n });\n }\n }\n}\n","<ng-container *transloco=\"let t\">\n <div\n [class]=\"\n 'delegation-form-content flex min-w-0 flex-col gap-3 overflow-x-hidden p-4 max-[640px]:p-3 ' +\n modal.contentClass\n \"\n >\n <mt-dynamic-form\n [formConfig]=\"formConfig()\"\n [formControl]=\"delegationFormControl\"\n />\n\n <div class=\"mt-2 border-t border-gray-200 pt-3 flex flex-col gap-2\">\n <h3 class=\"text-sm font-semibold text-gray-800\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </h3>\n <mt-scope-picker\n [(scope)]=\"scope\"\n [readonly]=\"readonly()\"\n ></mt-scope-picker>\n </div>\n </div>\n\n <div\n [class]=\"\n 'delegation-form-footer ' +\n modal.footerClass +\n ' flex-col gap-2 sm:flex-row sm:items-center sm:justify-end'\n \"\n >\n <mt-button\n [label]=\"t('delegations.common.cancel')\"\n variant=\"outlined\"\n (click)=\"ref.close()\"\n styleClass=\"w-full sm:w-auto\"\n />\n @if (!readonly()) {\n <mt-button\n [label]=\"\n delegationForEdit()\n ? t('delegations.common.update')\n : t('delegations.common.create')\n \"\n [loading]=\"isSaving()\"\n [disabled]=\"!delegationFormControl.valid || !canSubmit()\"\n (click)=\"onSubmit()\"\n styleClass=\"w-full sm:w-auto\"\n />\n }\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\n\ntype DetailTab = 'overview' | 'scope';\n\n/**\n * Read-only drawer that shows the full `DelegationDetail` ({ row, scope, status }).\n */\n@Component({\n selector: 'mt-delegation-detail-drawer',\n standalone: true,\n imports: [\n CommonModule,\n Avatar,\n Button,\n SkeletonModule,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './delegation-detail-drawer.html',\n styleUrls: ['./delegation-detail-drawer.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationDetailDrawer implements OnInit {\n readonly delegationId = input.required<number>();\n\n private readonly facade = inject(DelegationsFacade);\n private readonly transloco = inject(TranslocoService);\n protected readonly ref: ModalRef = inject(ModalRef);\n\n protected readonly tabs: { key: DetailTab; i18n: string }[] = [\n { key: 'overview', i18n: 'delegations.action.view' },\n { key: 'scope', i18n: 'delegations.column.scopeSummary' },\n ];\n protected readonly activeTab = signal<DetailTab>('overview');\n\n protected readonly isLoading = this.facade.isLoadingDetail;\n protected readonly detail = this.facade.detail;\n protected readonly row = computed(() => this.detail()?.row ?? null);\n\n ngOnInit(): void {\n this.facade.getDetail(this.delegationId());\n }\n\n protected setTab(tab: DetailTab): void {\n this.activeTab.set(tab);\n }\n\n protected approvalLabel(): string {\n const s = this.row()?.approval?.approvalStatus ?? 'NotRequired';\n return this.transloco.translate(`delegations.approvalStatus.${s}`);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col h-full\">\n <!-- Tabs -->\n <div class=\"flex border-b border-gray-200 px-4\">\n @for (tab of tabs; track tab.key) {\n <button\n type=\"button\"\n class=\"px-3 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\n [class.border-primary]=\"activeTab() === tab.key\"\n [class.text-primary]=\"activeTab() === tab.key\"\n [class.border-transparent]=\"activeTab() !== tab.key\"\n [class.text-gray-500]=\"activeTab() !== tab.key\"\n (click)=\"setTab(tab.key)\"\n >\n {{ t(tab.i18n) }}\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto p-4\">\n @if (isLoading() && !detail()) {\n <p-skeleton height=\"2rem\" class=\"mb-3\"></p-skeleton>\n <p-skeleton height=\"6rem\" class=\"mb-3\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n } @else if (detail(); as d) {\n @if (activeTab() === \"overview\") {\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-3 min-w-0\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-12! h-12! text-lg!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.delegatorName\") }}\n </div>\n <div class=\"text-base font-medium text-gray-900 truncate\">\n {{ d.row.delegator.displayName }}\n </div>\n @if (d.row.delegator.email) {\n <div class=\"text-xs text-gray-500 truncate\">\n {{ d.row.delegator.email }}\n </div>\n }\n </div>\n </div>\n <mt-delegation-status-chip\n [status]=\"d.status.effectiveStatus\"\n ></mt-delegation-status-chip>\n </div>\n\n <div class=\"grid grid-cols-2 gap-4\">\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.delegatedTo\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.delegatedUser.displayName }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.approval\") }}\n </span>\n <span class=\"text-sm text-gray-900\">{{ approvalLabel() }}</span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.startDate\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.startsAtUtc | date: \"medium\" }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.endDate\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.endsAtUtc | date: \"medium\" }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.form.timeZone\") }}\n </span>\n <span class=\"text-sm text-gray-900\">{{\n d.row.timeZoneId\n }}</span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.days\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n @if (d.row.dayRuleMode === \"FullRange\") {\n {{ t(\"delegations.form.fullRange\") }}\n } @else {\n {{ d.row.specificDays.join(\", \") }}\n }\n </span>\n </div>\n </div>\n\n @if (d.row.cancellation?.cancellationReason) {\n <div\n class=\"rounded-md border border-gray-200 bg-surface-50 p-3 text-sm text-gray-800\"\n >\n <div class=\"font-medium\">\n {{ t(\"delegations.form.cancellationReason\") }}\n </div>\n <div>{{ d.row.cancellation.cancellationReason }}</div>\n </div>\n }\n </div>\n } @else {\n <!-- Scope tab -->\n <div class=\"flex flex-col gap-3\">\n <div class=\"text-sm text-gray-900\">\n {{ d.row.scopeSummary || t(\"delegations.column.scopeSummary\") }}\n </div>\n <div class=\"flex flex-col gap-2\">\n @for (grant of d.scope.grants; track $index) {\n <div\n class=\"border border-gray-200 rounded-md px-3 py-2 flex flex-col gap-1\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-sm font-medium text-gray-900\">\n {{ grant.target.displayName || grant.target.targetKey }}\n </span>\n <span class=\"text-xs text-gray-500\">\n {{ grant.target.targetType }}\n </span>\n </div>\n <span\n class=\"text-xs px-2 py-0.5 rounded-md bg-primary-50 text-primary w-fit\"\n >\n {{ grant.action.operationKey }}\n </span>\n </div>\n }\n @if (d.scope.grants.length === 0) {\n <p class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noSelection\") }}\n </p>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <div\n class=\"border-t border-gray-200 px-4 py-3 flex items-center justify-end\"\n >\n <mt-button\n [label]=\"t('delegations.common.cancel')\"\n variant=\"outlined\"\n (click)=\"ref.close()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n linkedSignal,\n OnInit,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\nimport { ModalService } from '@masterteam/components/modal';\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\nimport { finalize } from 'rxjs';\nimport {\n DelegationAllowedAction,\n DelegationListQuery,\n DelegationRow,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\nimport DelegationForm from '../delegation-form/delegation-form';\nimport DelegationDetailDrawer from '../delegation-detail-drawer/delegation-detail-drawer';\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\nimport RejectDelegationDialog from '../reject-delegation-dialog/reject-delegation-dialog';\n\ntype DelegationTab = 'my' | 'assigned';\n\n/**\n * Delegations portal page (doc 02, 09): two lists — My Delegations (current user\n * is delegator) and Delegated To Me (current user is delegate). Rows render only\n * the BE-returned `allowedActions`; status comes from `effectiveStatus`.\n */\n@Component({\n selector: 'mt-delegations-list',\n standalone: true,\n imports: [\n CommonModule,\n Avatar,\n Breadcrumb,\n Table,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './delegations-list.html',\n styleUrl: './delegations-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationsList implements OnInit {\n /**\n * Admin/control-panel breadcrumb. Hidden on the client self-service surface\n * (its links point at /control-panel/*). Bound from route data via\n * `withComponentInputBinding()` — admin leaves it default; client passes\n * `data: { showBreadcrumb: false }`.\n */\n readonly showBreadcrumb = input<boolean>(true);\n\n private readonly facade = inject(DelegationsFacade);\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly breadcrumbItems = linkedSignal(() => [\n {\n label: '',\n icon: 'general.home-line',\n routerLink: '/control-panel/workspaces',\n },\n {\n label: this.transloco.translate('product-settings.product-settings'),\n routerLink: '/control-panel/product-settings',\n },\n {\n label: this.transloco.translate('delegations.title'),\n },\n ]);\n\n protected readonly activeTab = signal<DelegationTab>('my');\n protected readonly tabs = signal([\n {\n value: 'my' as DelegationTab,\n label: this.transloco.translate('delegations.myDelegations'),\n },\n {\n value: 'assigned' as DelegationTab,\n label: this.transloco.translate('delegations.delegatedToMe'),\n },\n ]);\n\n protected readonly isLoading = computed(() =>\n this.activeTab() === 'my'\n ? this.facade.isLoadingMy()\n : this.facade.isLoadingAssigned(),\n );\n protected readonly rows = computed(() =>\n this.activeTab() === 'my'\n ? this.facade.myItems()\n : this.facade.assignedItems(),\n );\n\n statusCol = viewChild.required<TemplateRef<unknown>>('statusCol');\n userCol = viewChild.required<TemplateRef<unknown>>('userCol');\n scopeCol = viewChild.required<TemplateRef<unknown>>('scopeCol');\n daysCol = viewChild.required<TemplateRef<unknown>>('daysCol');\n\n protected readonly tableActions = signal<TableAction[]>([\n {\n icon: 'general.plus',\n label: this.transloco.translate('delegations.action.create'),\n color: 'primary',\n action: () => this.openForm(null),\n },\n ]);\n\n protected readonly rowActions = signal<TableAction[]>([\n {\n icon: 'general.eye',\n tooltip: this.transloco.translate('delegations.action.view'),\n color: 'primary',\n variant: 'outlined',\n action: (row: DelegationRow) => this.viewDetails(row),\n hidden: (row: DelegationRow) => !this.has(row, 'View'),\n },\n {\n icon: 'custom.pencil',\n tooltip: this.transloco.translate('delegations.action.edit'),\n color: 'primary',\n action: (row: DelegationRow) => this.openForm(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Edit'),\n },\n {\n icon: 'general.check',\n tooltip: this.transloco.translate('delegations.action.approve'),\n color: 'primary',\n action: (row: DelegationRow) => this.approve(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Approve'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`approve:${row.delegationId}`),\n confirmation: { type: 'popup' },\n },\n {\n icon: 'general.x-close',\n tooltip: this.transloco.translate('delegations.action.reject'),\n color: 'danger',\n variant: 'outlined',\n // Opens a dialog that collects a required reason (no inline popup confirm).\n action: (row: DelegationRow) => this.reject(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Reject'),\n },\n {\n icon: 'general.trash-01',\n tooltip: this.transloco.translate('delegations.action.cancel'),\n color: 'danger',\n variant: 'outlined',\n action: (row: DelegationRow) => this.cancel(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Cancel'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`cancel:${row.delegationId}`),\n confirmation: { type: 'popup', confirmationType: 'delete' },\n },\n {\n icon: 'arrow.arrow-right',\n tooltip: this.transloco.translate('delegations.action.startSession'),\n color: 'primary',\n action: (row: DelegationRow) => this.startSession(row),\n hidden: (row: DelegationRow) => !this.has(row, 'StartSession'),\n },\n ]);\n\n protected readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\n {\n key: 'effectiveStatus',\n label: this.transloco.translate('delegations.column.status'),\n type: 'custom',\n customCellTpl: this.statusCol(),\n },\n {\n key: this.activeTab() === 'my' ? 'delegatedUser' : 'delegator',\n label: this.transloco.translate(\n this.activeTab() === 'my'\n ? 'delegations.column.delegatedTo'\n : 'delegations.column.delegatorName',\n ),\n type: 'custom',\n customCellTpl: this.userCol(),\n },\n {\n key: 'scopeSummary',\n label: this.transloco.translate('delegations.column.scopeSummary'),\n type: 'custom',\n customCellTpl: this.scopeCol(),\n },\n {\n key: 'startsAtUtc',\n label: this.transloco.translate('delegations.column.startDate'),\n type: 'dateTime',\n },\n {\n key: 'endsAtUtc',\n label: this.transloco.translate('delegations.column.endDate'),\n type: 'dateTime',\n },\n {\n key: 'createdAtUtc',\n label: this.transloco.translate('delegations.column.createdDate'),\n type: 'dateTime',\n },\n {\n key: 'dayRuleMode',\n label: this.transloco.translate('delegations.column.days'),\n type: 'custom',\n customCellTpl: this.daysCol(),\n },\n ]);\n\n private readonly busyIds = signal<string[]>([]);\n\n private readonly weekdayKeys = [\n 'sunday',\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n ] as const;\n\n ngOnInit(): void {\n this.loadCurrentTab();\n }\n\n protected switchTab(tab: DelegationTab): void {\n this.activeTab.set(tab);\n this.loadCurrentTab();\n }\n\n private loadCurrentTab(\n query: DelegationListQuery = { page: 1, pageSize: 25 },\n ): void {\n if (this.activeTab() === 'my') {\n this.facade.getMy(query);\n } else {\n this.facade.getAssigned(query);\n }\n }\n\n private reloadCurrentTab(): void {\n this.loadCurrentTab();\n }\n\n protected has(row: DelegationRow, action: DelegationAllowedAction): boolean {\n return row.allowedActions?.includes(action) ?? false;\n }\n\n protected formatDays(row: DelegationRow): string {\n if (row.dayRuleMode === 'SpecificDays' && row.specificDays?.length) {\n return row.specificDays\n .filter((d) => d >= 0 && d < this.weekdayKeys.length)\n .map((d) =>\n this.transloco.translate(`delegations.days.${this.weekdayKeys[d]}`),\n )\n .join(', ');\n }\n return this.transloco.translate('delegations.form.fullRange');\n }\n\n private viewDetails(row: DelegationRow): void {\n this.modal.openModal(DelegationDetailDrawer, 'drawer', {\n header: this.transloco.translate('delegations.action.view'),\n styleClass:\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]',\n position: 'end',\n appendTo: 'page-content',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegationId: row.delegationId },\n });\n }\n\n private openForm(row: DelegationRow | null): void {\n const ref = this.modal.openModal(\n DelegationForm,\n row ? 'drawer' : 'dialog',\n {\n header: this.transloco.translate(\n row ? 'delegations.action.edit' : 'delegations.action.create',\n ),\n styleClass: row\n ? '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]'\n : '!w-[min(96vw,50rem)] !max-w-[96vw] !h-[min(90vh,40rem)] !max-h-[90vh]',\n position: row ? 'end' : '',\n appendTo: row ? 'page-content' : 'body',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegationForEdit: row, readonly: false },\n },\n );\n ref.onClose.subscribe((saved: boolean) => {\n if (saved) this.reloadCurrentTab();\n });\n }\n\n private approve(row: DelegationRow): void {\n this.mark(`approve:${row.delegationId}`, true);\n this.facade\n .approve(row.delegationId, { rowVersion: row.rowVersion })\n .pipe(finalize(() => this.mark(`approve:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private reject(row: DelegationRow): void {\n const ref = this.modal.openModal(RejectDelegationDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.reject'),\n styleClass: '!w-[min(96vw,30rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row },\n });\n ref.onClose.subscribe((rejected: boolean) => {\n if (rejected) this.reloadCurrentTab();\n });\n }\n\n private cancel(row: DelegationRow): void {\n this.mark(`cancel:${row.delegationId}`, true);\n this.facade\n .cancel(row.delegationId, row.rowVersion)\n .pipe(finalize(() => this.mark(`cancel:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private startSession(row: DelegationRow): void {\n this.modal.openModal(StartSessionDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.startSession'),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent: 'start' },\n });\n }\n\n private mark(key: string, on: boolean): void {\n this.busyIds.update((ids) =>\n on ? [...ids, key] : ids.filter((id) => id !== key),\n );\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col h-full gap-2 p-4\">\n @if (showBreadcrumb()) {\n <mt-breadcrumb [items]=\"breadcrumbItems()\"></mt-breadcrumb>\n }\n\n <div class=\"flex items-center gap-2 border-b border-gray-200\">\n @for (tab of tabs(); track tab.value) {\n <button\n type=\"button\"\n class=\"px-4 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\n [class.border-primary]=\"activeTab() === tab.value\"\n [class.text-primary]=\"activeTab() === tab.value\"\n [class.border-transparent]=\"activeTab() !== tab.value\"\n [class.text-gray-500]=\"activeTab() !== tab.value\"\n (click)=\"switchTab(tab.value)\"\n >\n {{ tab.label }}\n </button>\n }\n </div>\n\n <mt-table\n [data]=\"rows()\"\n [columns]=\"tableColumns()\"\n [actions]=\"tableActions()\"\n [rowActions]=\"rowActions()\"\n [loading]=\"isLoading()\"\n >\n <ng-template #statusCol let-row>\n <mt-delegation-status-chip\n [status]=\"row.effectiveStatus\"\n ></mt-delegation-status-chip>\n </ng-template>\n\n <ng-template #userCol let-row>\n @let party = activeTab() === \"my\" ? row.delegatedUser : row.delegator;\n <div class=\"flex items-center gap-2\">\n <mt-avatar icon=\"user.user-01\" styleClass=\"w-8! h-8!\"></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm text-gray-900 truncate\">\n {{ party?.displayName }}\n </span>\n @if (party?.email) {\n <span class=\"text-xs text-gray-500 truncate\">\n {{ party.email }}\n </span>\n }\n </div>\n </div>\n </ng-template>\n\n <ng-template #scopeCol let-row>\n <span class=\"text-sm text-gray-700\" [title]=\"row.scopeSummary\">\n {{ row.scopeSummary || \"—\" }}\n </span>\n </ng-template>\n\n <ng-template #daysCol let-row>\n <span class=\"text-sm text-gray-700\">{{ formatDays(row) }}</span>\n </ng-template>\n </mt-table>\n </div>\n</ng-container>\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { DelegationSessionFacade } from '../store/session/delegation-session.facade';\n\n/**\n * Endpoints that must NEVER carry the `app-delegation` header.\n * Starting a delegated session uses only the normal `Authorization` token\n * (doc 05). All other `identity/delegations` management calls are normal\n * (non-delegated) actions too, so the whole namespace is excluded.\n */\nconst EXCLUDE = /\\bidentity\\/delegations\\b/i;\n\n/**\n * Adds `app-delegation: Bearer <token>` to outgoing requests while a delegated\n * session is active. Register AFTER the gateway-auth interceptor (so the normal\n * `Authorization` header is set first) and BEFORE the message interceptor.\n */\nexport const appDelegationInterceptor: HttpInterceptorFn = (req, next) => {\n if (EXCLUDE.test(req.url)) {\n return next(req);\n }\n\n const token = inject(DelegationSessionFacade).token();\n if (!token) {\n return next(req);\n }\n\n return next(\n req.clone({ setHeaders: { 'app-delegation': `Bearer ${token}` } }),\n );\n};\n","// store/index.ts\nexport * from './delegations';\nexport * from './session';\n","// Runtime UI surfaces — projected into host topbars + opened via ModalService.\nexport { TopbarDelegationMenu } from './lib/delegations/topbar-delegation-menu/topbar-delegation-menu';\nexport { DelegationStatusChip } from './lib/delegations/delegation-status-chip/delegation-status-chip';\nexport { default as StartSessionDialog } from './lib/delegations/start-session-dialog/start-session-dialog';\nexport { default as RejectDelegationDialog } from './lib/delegations/reject-delegation-dialog/reject-delegation-dialog';\n\n// Management UI — portal page (My Delegations / Delegated To Me) + form + detail drawer.\nexport { default as Delegations } from './lib/delegations/delegations';\nexport { default as DelegationsList } from './lib/delegations/delegations-list/delegations-list';\nexport { default as DelegationForm } from './lib/delegations/delegation-form/delegation-form';\nexport { default as DelegationDetailDrawer } from './lib/delegations/delegation-detail-drawer/delegation-detail-drawer';\nexport { ScopePicker } from './lib/delegations/delegation-form/scope-picker/scope-picker';\n\n// HTTP\nexport { appDelegationInterceptor } from './interceptors/app-delegation.interceptor';\n\n// Store (models, actions, state, facades — both delegations and session)\nexport * from './store';\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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"}