@masterteam/work-center 0.0.63 → 0.0.65

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-work-center.mjs","sources":["../../../../packages/masterteam/work-center/src/lib/work-center-client-form-modal/work-center-client-form-modal.ts","../../../../packages/masterteam/work-center/src/lib/work-center-client-form-modal/work-center-client-form-modal.html","../../../../packages/masterteam/work-center/src/store/work-center/work-center.actions.ts","../../../../packages/masterteam/work-center/src/store/work-center/work-center.model.ts","../../../../packages/masterteam/work-center/src/store/work-center/work-center.state.helpers.ts","../../../../packages/masterteam/work-center/src/store/work-center/work-center.state.ts","../../../../packages/masterteam/work-center/src/store/work-center/work-center.facade.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-types.helpers.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-escalation-instance-type/work-center-escalation-instance-type.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-escalation-instance-type/work-center-escalation-instance-type.html","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-module-type/work-center-module-type.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-module-type/work-center-module-type.html","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal/work-center-process-preview/work-center-process-preview.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal/work-center-process-preview/work-center-process-preview.html","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-process-request-type/work-center-process-request-type.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-process-request-type/work-center-process-request-type.html","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-process-step-type/work-center-process-step-type.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-process-step-type/work-center-process-step-type.html","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal/work-center-item-modal.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal/work-center-item-modal.html","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-item-modal-footer-actions/work-center-item-modal-footer-actions.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-item-modal-footer-actions/work-center-item-modal-footer-actions.html","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-route-context-key.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-item-modal-route.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-item-modal-route.html","../../../../packages/masterteam/work-center/src/lib/work-center-page/work-center-page.ts","../../../../packages/masterteam/work-center/src/lib/work-center-page/work-center-page.html","../../../../packages/masterteam/work-center/src/store/app.state.ts","../../../../packages/masterteam/work-center/src/masterteam-work-center.ts"],"sourcesContent":["import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { DrawerController } from '@masterteam/components/dynamic-drawer';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport {\r\n ClientForm,\r\n ClientLookup,\r\n ProcessFormSubmitResponse,\r\n} from '@masterteam/forms/client-form';\r\n\r\nimport { WorkCenterClientFormModalData } from '../../store/work-center/work-center.model';\r\n\r\n@Component({\r\n selector: 'mt-work-center-client-form-modal',\r\n standalone: true,\r\n imports: [Button, TranslocoDirective, ClientForm],\r\n templateUrl: './work-center-client-form-modal.html',\r\n})\r\nexport class WorkCenterClientFormModal {\r\n readonly modal = inject(ModalService);\r\n readonly ref = inject(ModalRef);\r\n readonly drawerController = inject(DrawerController, { optional: true });\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly processForm = viewChild.required(ClientForm);\r\n readonly data = input.required<WorkCenterClientFormModalData>();\r\n readonly operationKey = input<string>('Create');\r\n readonly closeOnPendingApproval = input(false);\r\n readonly lookups = input<ClientLookup[]>([]);\r\n\r\n readonly moduleKey = computed(() => this.data().moduleKey);\r\n readonly moduleId = computed(() => this.toNumber(this.data().moduleId));\r\n readonly levelId = computed(() => this.toNumber(this.data().levelId));\r\n readonly levelDataId = computed(() => this.toNumber(this.data().levelDataId));\r\n readonly moduleDataId = computed(() =>\r\n this.toNumber(this.data().moduleDataId),\r\n );\r\n readonly formMode = computed<'create' | 'edit'>(() =>\r\n this.moduleDataId() != null ||\r\n this.operationKey().trim().toLowerCase() === 'update'\r\n ? 'edit'\r\n : 'create',\r\n );\r\n\r\n readonly validationMessage = signal<string | null>(null);\r\n readonly submitError = signal<string | null>(null);\r\n readonly submitStatus = signal<'pending' | 'executed' | null>(null);\r\n /**\r\n * Mirrors the client form's own submit state instead of tracking it locally.\r\n * A blocking `process-submit/validate` failure ends the submit without\r\n * emitting `submitted` or `errored`, so a local flag would stay stuck at\r\n * `true` and permanently disable Submit / keep the \"Submitting…\" hint up.\r\n */\r\n readonly isSubmitting = computed(() => this.processForm().submitting());\r\n\r\n onSubmit(): void {\r\n this.validationMessage.set(null);\r\n this.submitError.set(null);\r\n this.submitStatus.set(null);\r\n\r\n if (!this.processForm().isValid()) {\r\n this.validationMessage.set(\r\n this.transloco.translate<string>(\r\n 'workCenter.validation.fillRequiredFields',\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n this.processForm().submit();\r\n }\r\n\r\n onSubmitted(response: ProcessFormSubmitResponse): void {\r\n this.submitError.set(null);\r\n\r\n const status =\r\n response.status === 'PendingApproval' ? 'pending' : 'executed';\r\n this.submitStatus.set(status);\r\n\r\n if (status === 'executed' || this.closeOnPendingApproval()) {\r\n this.ref.close(true);\r\n }\r\n }\r\n\r\n onErrored(error: string): void {\r\n this.submitError.set(\r\n error ??\r\n this.transloco.translate<string>('workCenter.error.failedSubmit'),\r\n );\r\n }\r\n\r\n private toNumber(value: unknown): number | undefined {\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Number(value);\r\n if (Number.isFinite(parsed)) {\r\n return parsed;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workCenter'\">\r\n <div [class]=\"modal.contentClass + ' p-5 flex flex-col gap-4'\">\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [moduleId]=\"moduleId()\"\r\n [operationKey]=\"operationKey()\"\r\n [levelId]=\"levelId()\"\r\n [levelDataId]=\"levelDataId()\"\r\n [moduleDataId]=\"moduleDataId()\"\r\n [formMode]=\"formMode()\"\r\n [autoLoad]=\"true\"\r\n [lookups]=\"lookups()\"\r\n (submitted)=\"onSubmitted($event)\"\r\n (errored)=\"onErrored($event)\"\r\n />\r\n\r\n @if (isSubmitting()) {\r\n <div class=\"text-sm text-muted-color\">{{ t(\"modal.submitting\") }}</div>\r\n }\r\n\r\n @if (validationMessage()) {\r\n <div\r\n class=\"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3 text-sm text-amber-700\"\r\n role=\"alert\"\r\n >\r\n {{ validationMessage() }}\r\n </div>\r\n }\r\n\r\n @if (submitError()) {\r\n <div\r\n class=\"mt-2 rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n role=\"alert\"\r\n >\r\n {{ submitError() }}\r\n </div>\r\n }\r\n\r\n @if (submitStatus(); as status) {\r\n <div\r\n class=\"mt-2 rounded-lg border p-3 text-sm\"\r\n [class]=\"\r\n status === 'pending'\r\n ? 'border-amber-200 bg-amber-50 text-amber-700'\r\n : 'border-emerald-200 bg-emerald-50 text-emerald-700'\r\n \"\r\n >\r\n @if (status === \"pending\") {\r\n {{ t(\"modal.requestSubmitted\") }}\r\n } @else {\r\n {{ t(\"modal.operationExecuted\") }}\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('modal.cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"isSubmitting()\"\r\n (onClick)=\"ref.close(false)\"\r\n />\r\n <mt-button\r\n [label]=\"t('modal.submit')\"\r\n icon=\"general.check\"\r\n [disabled]=\"\r\n isSubmitting() || processForm().hasBlockingGovernanceFailure()\r\n \"\r\n (onClick)=\"onSubmit()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import {\r\n WorkCenterArea,\r\n WorkCenterBootstrapInputs,\r\n WorkCenterFilterRule,\r\n WorkCenterHydratePatch,\r\n WorkCenterLoadReason,\r\n WorkCenterLookups,\r\n} from './work-center.model';\r\n\r\nexport class EnterArea {\r\n static readonly type = '[WorkCenter] Enter Area';\r\n\r\n constructor(public area: WorkCenterArea) {}\r\n}\r\n\r\nexport class HydrateFromContext {\r\n static readonly type = '[WorkCenter] Hydrate From Context';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public patch: WorkCenterHydratePatch,\r\n ) {}\r\n}\r\n\r\nexport class SetParams {\r\n static readonly type = '[WorkCenter] Set Params';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public inputs: WorkCenterBootstrapInputs,\r\n ) {}\r\n}\r\n\r\nexport class SetLookups {\r\n static readonly type = '[WorkCenter] Set Lookups';\r\n\r\n constructor(public lookups: WorkCenterLookups) {}\r\n}\r\n\r\nexport class LoadRuntime {\r\n static readonly type = '[WorkCenter] Load Runtime';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public reason: WorkCenterLoadReason = 'manual',\r\n ) {}\r\n}\r\n\r\n/**\r\n * Replaces the header filter slice (rules from\r\n * `mt-property-filter-builder`). Resets `page` to 1 and triggers a\r\n * BE reload with the merged `headerFilters` + `columnFilters` payload.\r\n */\r\nexport class ApplyHeaderFilters {\r\n static readonly type = '[WorkCenter] Apply Header Filters';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public filters: WorkCenterFilterRule[],\r\n ) {}\r\n}\r\n\r\n/**\r\n * Replaces the in-table column filter slice (rules translated from the\r\n * `mt-table` filters map). Resets `page` to 1 and triggers a BE reload\r\n * with the merged `headerFilters` + `columnFilters` payload.\r\n */\r\nexport class ApplyColumnFilters {\r\n static readonly type = '[WorkCenter] Apply Column Filters';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public filters: WorkCenterFilterRule[],\r\n ) {}\r\n}\r\n\r\n/**\r\n * Sets the grouped column. Grouping is expressed to the backend as a single\r\n * sort on the same field, so this also rewrites `context.sort` and resets\r\n * `page` to 1 before reloading. `groupBy: null` clears both.\r\n */\r\nexport class SetGroupBy {\r\n static readonly type = '[WorkCenter] Set Group By';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public groupBy: string | null,\r\n public dir: 'asc' | 'desc' = 'asc',\r\n ) {}\r\n}\r\n\r\n/**\r\n * Clears both the header filter slice and the column filter slice in one\r\n * state update, triggering a single BE reload.\r\n */\r\nexport class ClearAllFilters {\r\n static readonly type = '[WorkCenter] Clear All Filters';\r\n\r\n constructor(public area: WorkCenterArea) {}\r\n}\r\n","import type { LoadingStateShape } from '@masterteam/components';\r\nimport { ClientPageMenuItem } from '@masterteam/components/client-page-menu';\r\nimport type { ClientLookup } from '@masterteam/forms/client-form';\r\nimport { StatisticCardData } from '@masterteam/components/statistic-card';\r\nimport { ColumnDef } from '@masterteam/components/table';\r\nimport { Type } from '@angular/core';\r\n\r\nexport type WorkCenterArea = 'MyInbox' | 'TasksCenter' | 'Workspace';\r\nexport type WorkCenterItemContextKey = string;\r\nexport type WorkCenterLookups = ClientLookup[];\r\n\r\nexport enum WorkCenterActionKey {\r\n LoadRuntime = 'loadRuntime',\r\n}\r\n\r\nexport const WORK_CENTER_QUERY_VERSION = 1;\r\nexport const WORK_CENTER_MAX_PAGE_SIZE = 100;\r\nexport const WORK_CENTER_MAX_FILTERS = 20;\r\nexport const WORK_CENTER_MAX_SORT = 5;\r\n\r\n/**\r\n * Backend column key carrying the row's LevelData display label\r\n * (`extra.levelDataName`). Grouping by it maps to a single backend sort on the\r\n * same key — see `WORK_CENTER_LEVEL_GROUP_FIELD` for the grouping identity.\r\n */\r\nexport const WORK_CENTER_LEVEL_NAME_KEY = 'levelDataName';\r\n\r\n/**\r\n * Synthetic per-row field holding the *identity* behind the Level Name column.\r\n * The visible label is ambiguous (two LevelData records may share a name), so\r\n * rows are bucketed by `context.levelDataId` instead — except rows with no\r\n * visible label, which get an empty identity so they all collapse into the one\r\n * shared \"—\" group the backend contract requires.\r\n */\r\nexport const WORK_CENTER_LEVEL_GROUP_FIELD = '__mtLevelGroup';\r\n\r\n/** Rendered in place of a missing / restricted LevelData label. */\r\nexport const WORK_CENTER_EMPTY_LABEL = '—';\r\n\r\n/**\r\n * Bootstrap `group` value meaning \"the user turned grouping off\". Needed\r\n * because an absent `group` means \"not chosen yet\" and falls back to the\r\n * default grouping — without a distinct value, clearing the group would be\r\n * undone by the next navigation.\r\n */\r\nexport const WORK_CENTER_GROUP_NONE = 'none';\r\n\r\nexport interface ApiEnvelope<T> {\r\n endpoint: string | null;\r\n status: number;\r\n code: 1 | 2;\r\n locale: string | null;\r\n message: string | null;\r\n errors: unknown;\r\n data: T;\r\n cacheSession: string | null;\r\n}\r\n\r\nexport interface TranslatableDto {\r\n display: string;\r\n en: string;\r\n ar: string;\r\n}\r\n\r\nexport interface WorkCenterSortRule {\r\n field: string;\r\n dir: 'asc' | 'desc';\r\n}\r\n\r\nexport type WorkCenterFilterOperator =\r\n | 'Eq'\r\n | 'Neq'\r\n | 'In'\r\n | 'Contains'\r\n | 'StartsWith'\r\n | 'Gt'\r\n | 'Gte'\r\n | 'Lt'\r\n | 'Lte'\r\n | 'Between'\r\n | 'IsNull'\r\n | 'IsNotNull';\r\n\r\nexport interface WorkCenterFilterRule {\r\n field: string;\r\n op: WorkCenterFilterOperator;\r\n value?: unknown;\r\n values?: unknown[];\r\n from?: unknown;\r\n to?: unknown;\r\n}\r\n\r\nexport interface WorkCenterRuntimeProperty {\r\n id?: number;\r\n key: string;\r\n normalizedKey?: string;\r\n name?: TranslatableDto;\r\n description?: TranslatableDto;\r\n viewType?: string;\r\n}\r\n\r\nexport interface WorkCenterRuntimeOperatorOption {\r\n value: WorkCenterFilterOperator;\r\n display?: TranslatableDto;\r\n}\r\n\r\nexport interface WorkCenterRuntimeFilterSchema {\r\n properties?: WorkCenterRuntimeProperty[];\r\n allowedFields?: string[];\r\n allowedOperators: Array<\r\n WorkCenterFilterOperator | WorkCenterRuntimeOperatorOption\r\n >;\r\n}\r\n\r\nexport interface WorkCenterColumnsConfig {\r\n columns?: string[];\r\n properties?: WorkCenterRuntimeProperty[];\r\n}\r\n\r\nexport interface WorkCenterRuntimeRequest {\r\n area: WorkCenterArea;\r\n templateId?: number | null;\r\n levelDataId?: number | null;\r\n selectedCardKey?: string | null;\r\n page: number;\r\n pageSize: number;\r\n sort: WorkCenterSortRule[];\r\n runtimeFilters: WorkCenterFilterRule[];\r\n includeStats: boolean;\r\n}\r\n\r\nexport interface WorkCenterRuntimeCard {\r\n key: string;\r\n name: TranslatableDto;\r\n icon: string | null;\r\n urlTemplate?: string | null;\r\n runtimeFilterSchema?: WorkCenterRuntimeFilterSchema | null;\r\n columnsConfig?: WorkCenterColumnsConfig | null;\r\n count: number;\r\n isAvailable: boolean;\r\n}\r\n\r\nexport interface WorkCenterRuntimeStatsItem {\r\n key: string;\r\n label: TranslatableDto;\r\n count: number;\r\n /**\r\n * Backend-owned accent color for the KPI card (typically a `#hex` status\r\n * color). `null` means \"no color configured\" — the card falls back to the\r\n * neutral theme accent. Never derive a color from `key`/`label`.\r\n */\r\n color?: string | null;\r\n}\r\n\r\nexport interface WorkCenterRuntimePagination {\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n}\r\n\r\nexport interface WorkCenterRuntimeSelectedCard {\r\n key: string;\r\n pagination: WorkCenterRuntimePagination;\r\n stats: WorkCenterRuntimeStatsItem[];\r\n items: Record<string, unknown>[];\r\n runtimeFilterSchema?: WorkCenterRuntimeFilterSchema | null;\r\n columnsConfig?: WorkCenterColumnsConfig | null;\r\n}\r\n\r\nexport interface WorkCenterRuntimeWarningDto {\r\n code: string;\r\n message: string;\r\n cardKey: string | null;\r\n source: string | null;\r\n}\r\n\r\nexport interface WorkCenterRuntimeResponseData {\r\n area: WorkCenterArea;\r\n cards: WorkCenterRuntimeCard[];\r\n selectedCard: WorkCenterRuntimeSelectedCard | null;\r\n warnings: WorkCenterRuntimeWarningDto[];\r\n}\r\n\r\nexport interface WorkCenterItemBasicInfoData {\r\n cardKey: string | null;\r\n sourceType: string | null;\r\n type: string | null;\r\n item: Record<string, unknown> | null;\r\n warnings: WorkCenterRuntimeWarningDto[];\r\n}\r\n\r\nexport interface WorkCenterRuntimeItemAction {\r\n actionKey: string;\r\n actionName?: TranslatableDto | null;\r\n httpMethod?: string | null;\r\n url?: string | null;\r\n isAvailable?: boolean;\r\n afterSuccess?: WorkCenterItemActionAfterSuccess | null;\r\n stepIds?: Array<number | string>;\r\n needConfirmation?: boolean;\r\n payloadKeys?: string[];\r\n requiredPayloadKeys?: string[];\r\n payloadTemplate?: Record<string, unknown> | null;\r\n formId?: string | number | null;\r\n}\r\n\r\nexport type WorkCenterItemActionAfterSuccess = 'refresh' | 'close';\r\n\r\nexport interface WorkCenterItemActionExecutionResult {\r\n actionKey: string;\r\n afterSuccess: WorkCenterItemActionAfterSuccess;\r\n}\r\n\r\nexport interface WorkCenterPreviewLevelTarget {\r\n levelId: number | string;\r\n levelDataId: number | string;\r\n /**\r\n * Module the previewed item belongs to, when the item resolves to one. The\r\n * host uses it to land on that module's workspace tab instead of the\r\n * workspace default tab.\r\n */\r\n moduleId?: number | string | null;\r\n /**\r\n * Display name of that module, when the item resolves to one. Used to label\r\n * the preview button as \"Preview {module name}\" instead of the generic\r\n * \"Preview Level\".\r\n */\r\n moduleName?: string | null;\r\n}\r\n\r\nexport interface WorkCenterItemActionsData {\r\n cardKey: string | null;\r\n sourceType: string | null;\r\n type: string | null;\r\n context: Record<string, unknown> | null;\r\n actions: WorkCenterRuntimeItemAction[];\r\n warnings: WorkCenterRuntimeWarningDto[];\r\n}\r\n\r\nexport interface WorkCenterContext {\r\n area: WorkCenterArea;\r\n templateId: number | null;\r\n levelDataId: number | null;\r\n selectedCardKey: string | null;\r\n page: number;\r\n pageSize: number;\r\n sort: WorkCenterSortRule[];\r\n runtimeFilters: WorkCenterFilterRule[];\r\n includeStats: boolean;\r\n}\r\n\r\nexport interface WorkCenterAreaState {\r\n context: WorkCenterContext;\r\n /**\r\n * Rules from the page-header property-filter-builder. Combined with\r\n * `columnFilters` to produce `context.runtimeFilters` sent to the BE.\r\n */\r\n headerFilters: WorkCenterFilterRule[];\r\n /**\r\n * Rules translated from the in-table column filters. Combined with\r\n * `headerFilters` to produce `context.runtimeFilters` sent to the BE.\r\n * Same `(field, op)` pair from this slice overrides a header rule.\r\n */\r\n columnFilters: WorkCenterFilterRule[];\r\n /**\r\n * Column key the table groups rows by. UI-only — never part of the runtime\r\n * request; grouping is expressed to the backend as `context.sort`.\r\n */\r\n groupBy: string | null;\r\n menuItems: ClientPageMenuItem[];\r\n rows: Record<string, unknown>[];\r\n columns: ColumnDef[];\r\n kpis: StatisticCardData[];\r\n runtimeFilterSchema: WorkCenterRuntimeFilterSchema | null;\r\n totalCount: number;\r\n warnings: WorkCenterRuntimeWarningDto[];\r\n lastLoadedAt: string | null;\r\n}\r\n\r\nexport interface WorkCenterStateModel extends LoadingStateShape<WorkCenterActionKey> {\r\n activeArea: WorkCenterArea;\r\n byArea: Record<WorkCenterArea, WorkCenterAreaState>;\r\n lookups: WorkCenterLookups;\r\n}\r\n\r\nexport interface WorkCenterHydratePatch {\r\n selectedCardKey?: string | null;\r\n page?: number;\r\n pageSize?: number;\r\n templateId?: number | null;\r\n levelDataId?: number | null;\r\n sort?: WorkCenterSortRule[];\r\n runtimeFilters?: WorkCenterFilterRule[];\r\n}\r\n\r\nexport interface WorkCenterBootstrapInputs {\r\n card?: unknown;\r\n page?: unknown;\r\n pageSize?: unknown;\r\n templateId?: unknown;\r\n levelDataId?: unknown;\r\n sort?: unknown;\r\n filters?: unknown;\r\n /** Grouped column key, so a grouped view survives reload / deep-link. */\r\n group?: unknown;\r\n}\r\n\r\nexport interface WorkCenterItemModalComponentInput {\r\n contextKey: WorkCenterItemContextKey;\r\n}\r\n\r\nexport interface WorkCenterItemModalOptions {\r\n component?: Type<unknown> | null;\r\n header?: string;\r\n styleClass?: string;\r\n appendTo?: string | HTMLElement | null;\r\n position?: 'start' | 'end' | 'left' | 'right';\r\n}\r\n\r\nexport interface WorkCenterClientFormModalData {\r\n moduleKey: string;\r\n moduleId?: number | string;\r\n levelId?: number | string;\r\n levelDataId?: number | string;\r\n moduleDataId?: number | string;\r\n}\r\n\r\nexport interface WorkCenterClientFormModalOptions {\r\n data?: Partial<WorkCenterClientFormModalData>;\r\n operationKey?: string;\r\n header?: string;\r\n styleClass?: string;\r\n closeOnPendingApproval?: boolean;\r\n buttonLabel?: string;\r\n buttonIcon?: string;\r\n lookups?: ClientLookup[];\r\n}\r\n\r\nexport type WorkCenterLoadReason =\r\n | 'route-enter'\r\n | 'menu-change'\r\n | 'filters-change'\r\n | 'group-change'\r\n | 'table-lazy'\r\n | 'refresh'\r\n | 'manual';\r\n","import { ClientPageMenuItem } from '@masterteam/components/client-page-menu';\r\nimport { StatisticCardData } from '@masterteam/components/statistic-card';\r\nimport { ColumnDef } from '@masterteam/components/table';\r\n\r\nimport {\r\n WorkCenterArea,\r\n WorkCenterAreaState,\r\n WorkCenterBootstrapInputs,\r\n WorkCenterColumnsConfig,\r\n WorkCenterContext,\r\n WorkCenterFilterOperator,\r\n WorkCenterFilterRule,\r\n WorkCenterRuntimeProperty,\r\n WorkCenterRuntimeCard,\r\n WorkCenterRuntimeResponseData,\r\n WorkCenterRuntimeStatsItem,\r\n WorkCenterSortRule,\r\n WorkCenterStateModel,\r\n WORK_CENTER_EMPTY_LABEL,\r\n WORK_CENTER_GROUP_NONE,\r\n WORK_CENTER_LEVEL_GROUP_FIELD,\r\n WORK_CENTER_LEVEL_NAME_KEY,\r\n WORK_CENTER_MAX_FILTERS,\r\n WORK_CENTER_MAX_PAGE_SIZE,\r\n WORK_CENTER_MAX_SORT,\r\n} from './work-center.model';\r\n\r\nconst AREA_COLORS = ['violet', 'blue', 'emerald', 'amber', 'teal'];\r\n/** Fallback accent rotation used only when the backend sends no stat color. */\r\nconst KPI_COLORS = ['violet', 'blue', 'emerald', 'amber', 'teal'];\r\n/**\r\n * Default page size when bootstrapping a work-center area. Matches the table\r\n * paginator default so the first BE request asks for exactly one rendered\r\n * page.\r\n */\r\nconst WORK_CENTER_DEFAULT_PAGE_SIZE = 20;\r\nconst WORK_CENTER_LOCAL_FETCH_SIZE = WORK_CENTER_DEFAULT_PAGE_SIZE;\r\n\r\ntype WorkCenterTableColumn = WorkCenterRuntimeProperty &\r\n ColumnDef & {\r\n key: string;\r\n label: string;\r\n type: 'entity';\r\n };\r\n\r\nconst FILTER_OPERATORS: Set<WorkCenterFilterOperator> = new Set([\r\n 'Eq',\r\n 'Neq',\r\n 'In',\r\n 'Contains',\r\n 'StartsWith',\r\n 'Gt',\r\n 'Gte',\r\n 'Lt',\r\n 'Lte',\r\n 'Between',\r\n 'IsNull',\r\n 'IsNotNull',\r\n]);\r\n\r\nfunction clampPage(value: number | undefined, fallback = 1): number {\r\n if (!Number.isFinite(value)) return fallback;\r\n return Math.max(1, Math.floor(value as number));\r\n}\r\n\r\nfunction clampPageSize(\r\n value: number | undefined,\r\n fallback = WORK_CENTER_LOCAL_FETCH_SIZE,\r\n): number {\r\n if (!Number.isFinite(value)) return fallback;\r\n const parsed = Math.floor(value as number);\r\n return Math.min(WORK_CENTER_MAX_PAGE_SIZE, Math.max(1, parsed));\r\n}\r\n\r\nfunction sanitizeSort(\r\n rules: WorkCenterSortRule[] | undefined,\r\n): WorkCenterSortRule[] {\r\n if (!Array.isArray(rules)) return [];\r\n return rules\r\n .filter(\r\n (rule): rule is WorkCenterSortRule =>\r\n typeof rule?.field === 'string' &&\r\n rule.field.length > 0 &&\r\n (rule.dir === 'asc' || rule.dir === 'desc'),\r\n )\r\n .slice(0, WORK_CENTER_MAX_SORT);\r\n}\r\n\r\nfunction sanitizeFilters(\r\n filters: WorkCenterFilterRule[] | undefined,\r\n): WorkCenterFilterRule[] {\r\n if (!Array.isArray(filters)) return [];\r\n\r\n return filters\r\n .filter(\r\n (filter): filter is WorkCenterFilterRule =>\r\n typeof filter?.field === 'string' &&\r\n filter.field.length > 0 &&\r\n typeof filter?.op === 'string' &&\r\n FILTER_OPERATORS.has(filter.op),\r\n )\r\n .slice(0, WORK_CENTER_MAX_FILTERS);\r\n}\r\n\r\nfunction parseJson(value: unknown): unknown {\r\n if (typeof value !== 'string') return value;\r\n if (!value.trim()) return null;\r\n\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction toOptionalInt(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') return null;\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? Math.floor(parsed) : null;\r\n}\r\n\r\nfunction toSelectedCardKey(value: unknown): string | null {\r\n if (typeof value !== 'string') return null;\r\n const parsed = value.trim();\r\n return parsed.length ? parsed : null;\r\n}\r\n\r\nfunction parseSortInput(value: unknown): WorkCenterSortRule[] {\r\n const parsed = parseJson(value);\r\n return Array.isArray(parsed)\r\n ? sanitizeSort(parsed as WorkCenterSortRule[])\r\n : [];\r\n}\r\n\r\n/**\r\n * Resolves the grouped column key from bootstrap inputs.\r\n *\r\n * A missing `group` means \"not chosen yet\" and keeps whatever state already\r\n * has — which starts at the area default, so a first visit lands grouped.\r\n * `WORK_CENTER_GROUP_NONE` is the only way to express \"the user turned it\r\n * off\"; a bare `null` can't, because it is also what a host passes for an\r\n * absent query param.\r\n */\r\nexport function resolveGroupByFromInputs(\r\n current: string | null,\r\n group: unknown,\r\n): string | null {\r\n if (!hasParamValue(group) || typeof group !== 'string') {\r\n return current;\r\n }\r\n\r\n const parsed = group.trim();\r\n if (!parsed || parsed === WORK_CENTER_GROUP_NONE) {\r\n return null;\r\n }\r\n\r\n return parsed;\r\n}\r\n\r\nfunction parseFiltersInput(value: unknown): WorkCenterFilterRule[] {\r\n const parsed = parseJson(value);\r\n return Array.isArray(parsed)\r\n ? sanitizeFilters(parsed as WorkCenterFilterRule[])\r\n : [];\r\n}\r\n\r\nfunction hasParamValue(value: unknown): boolean {\r\n return value !== null && value !== undefined && value !== '';\r\n}\r\n\r\nfunction toLabel(value: string): string {\r\n const segment = value.split('.').pop() ?? value;\r\n return segment\r\n .replace(/[_-]/g, ' ')\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .replace(/\\s+/g, ' ')\r\n .trim()\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n}\r\n\r\nfunction toViewType(viewType: string | undefined, key: string): string {\r\n if (viewType?.trim()) {\r\n return viewType;\r\n }\r\n\r\n return key.toLowerCase().includes('date') ? 'Date' : 'Text';\r\n}\r\n\r\nfunction normalizeColumnKey(key: string): string {\r\n return key\r\n .trim()\r\n .toLowerCase()\r\n .replace(/[\\s._-]+/g, '');\r\n}\r\n\r\nfunction resolveColumnWeight(key: string): number {\r\n const normalizedKey = normalizeColumnKey(key);\r\n\r\n if (normalizedKey.includes('title')) return 26;\r\n if (\r\n normalizedKey.includes('subtitle') ||\r\n normalizedKey.includes('description')\r\n ) {\r\n return 20;\r\n }\r\n if (normalizedKey.includes('status')) return 14;\r\n if (normalizedKey.includes('progress')) return 17;\r\n if (\r\n normalizedKey.includes('createdby') ||\r\n normalizedKey.includes('assignedto') ||\r\n normalizedKey.includes('owner') ||\r\n normalizedKey.includes('user')\r\n ) {\r\n return 20;\r\n }\r\n if (\r\n normalizedKey.includes('duedate') ||\r\n normalizedKey.includes('createdat') ||\r\n normalizedKey.includes('updatedat') ||\r\n normalizedKey.endsWith('date')\r\n ) {\r\n return 15;\r\n }\r\n if (normalizedKey.includes('priority')) return 12;\r\n\r\n return 16;\r\n}\r\n\r\nfunction applySmartColumnWidths(\r\n columns: WorkCenterTableColumn[],\r\n): WorkCenterTableColumn[] {\r\n const dynamicWeightTotal = columns.reduce((total, column) => {\r\n return column.width?.trim()\r\n ? total\r\n : total + resolveColumnWeight(column.key);\r\n }, 0);\r\n\r\n if (!dynamicWeightTotal) {\r\n return columns;\r\n }\r\n\r\n return columns.map((column) => {\r\n if (column.width?.trim()) {\r\n return column;\r\n }\r\n\r\n const width = (\r\n (resolveColumnWeight(column.key) / dynamicWeightTotal) *\r\n 100\r\n ).toFixed(2);\r\n\r\n return {\r\n ...column,\r\n width: `${width}%`,\r\n };\r\n });\r\n}\r\n\r\nfunction getValue(record: Record<string, unknown>, key: string): unknown {\r\n return key.split('.').reduce<unknown>((current, part) => {\r\n if (!current || typeof current !== 'object') {\r\n return undefined;\r\n }\r\n\r\n return (current as Record<string, unknown>)[part];\r\n }, record);\r\n}\r\n\r\nfunction flattenRuntimeRow(\r\n row: Record<string, unknown>,\r\n): Record<string, unknown> {\r\n const extra = row['extra'];\r\n\r\n if (!extra || typeof extra !== 'object' || Array.isArray(extra)) {\r\n return row;\r\n }\r\n\r\n return {\r\n ...(extra as Record<string, unknown>),\r\n ...row,\r\n };\r\n}\r\n\r\nfunction toDisplayValue(\r\n value: unknown,\r\n column: WorkCenterTableColumn,\r\n): unknown {\r\n if (column.viewType !== 'Text') {\r\n return value;\r\n }\r\n\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n const display = (value as Record<string, unknown>)['display'];\r\n return typeof display === 'string' ? display : value;\r\n}\r\n\r\nfunction buildColumnsFromProperties(\r\n properties: WorkCenterRuntimeProperty[],\r\n): WorkCenterTableColumn[] {\r\n return properties\r\n .filter(\r\n (property) =>\r\n typeof property?.key === 'string' && property.key.length > 0,\r\n )\r\n .map((property) => ({\r\n ...property,\r\n key: property.key,\r\n label:\r\n property.name?.display ||\r\n property.name?.en ||\r\n property.name?.ar ||\r\n toLabel(property.key),\r\n type: 'entity' as const,\r\n viewType: toViewType(property.viewType, property.key),\r\n ...withLevelNameGrouping(property.key),\r\n }));\r\n}\r\n\r\n/**\r\n * Level Name is a free-text column, so the table's cardinality heuristic would\r\n * never offer it in the group picker. The backend orders the whole result set\r\n * by that label before paging, which makes its groups contiguous and therefore\r\n * groupable — so opt it in explicitly and point the table at the identity\r\n * field instead of the ambiguous label.\r\n */\r\nfunction withLevelNameGrouping(\r\n key: string,\r\n): Pick<ColumnDef, 'groupable' | 'groupKey' | 'showGroupColumnLabel'> {\r\n return key === WORK_CENTER_LEVEL_NAME_KEY\r\n ? {\r\n groupable: true,\r\n groupKey: WORK_CENTER_LEVEL_GROUP_FIELD,\r\n // A level name names itself — \"Level Name · Project Gamma\" would just\r\n // repeat the column header down every group.\r\n showGroupColumnLabel: false,\r\n }\r\n : {};\r\n}\r\n\r\nfunction buildColumns(\r\n columnsConfig: WorkCenterColumnsConfig | null | undefined,\r\n): WorkCenterTableColumn[] {\r\n const propertyColumns = buildColumnsFromProperties(\r\n columnsConfig?.properties ?? [],\r\n );\r\n if (propertyColumns.length) {\r\n return applySmartColumnWidths(propertyColumns);\r\n }\r\n\r\n const keys = columnsConfig?.columns?.length ? columnsConfig.columns : [];\r\n return applySmartColumnWidths(\r\n keys.map((key) => ({\r\n key,\r\n label: toLabel(key),\r\n type: 'entity' as const,\r\n viewType: toViewType(undefined, key),\r\n ...withLevelNameGrouping(key),\r\n })),\r\n );\r\n}\r\n\r\nfunction toDisplayRows(\r\n rows: Record<string, unknown>[],\r\n columns: WorkCenterTableColumn[],\r\n): Record<string, unknown>[] {\r\n const hasLevelName = columns.some(\r\n (column) => column.key === WORK_CENTER_LEVEL_NAME_KEY,\r\n );\r\n\r\n return rows.map((row) => {\r\n const sourceRow = flattenRuntimeRow(row);\r\n const displayRow = { ...sourceRow };\r\n\r\n for (const column of columns) {\r\n const value = getValue(sourceRow, column.key);\r\n displayRow[column.key] = {\r\n ...column,\r\n value: toDisplayValue(value, column),\r\n };\r\n }\r\n\r\n if (hasLevelName) {\r\n applyLevelNameGrouping(displayRow, sourceRow);\r\n }\r\n\r\n return displayRow;\r\n });\r\n}\r\n\r\n/**\r\n * Adds the Level Name grouping identity to a display row and normalizes a\r\n * missing / restricted label to `—`.\r\n *\r\n * The backend omits `extra.levelDataName` when the record is missing, deleted,\r\n * or the user can't see it — those rows must share one group and must never\r\n * expose the numeric id as a label. Rows that do have a label are keyed by\r\n * `context.levelDataId` so two records with the same name stay separate.\r\n */\r\nfunction applyLevelNameGrouping(\r\n displayRow: Record<string, unknown>,\r\n sourceRow: Record<string, unknown>,\r\n): void {\r\n const cell = displayRow[WORK_CENTER_LEVEL_NAME_KEY] as\r\n | { value?: unknown }\r\n | undefined;\r\n const label = typeof cell?.value === 'string' ? cell.value.trim() : '';\r\n\r\n if (!label) {\r\n displayRow[WORK_CENTER_LEVEL_NAME_KEY] = {\r\n ...cell,\r\n value: WORK_CENTER_EMPTY_LABEL,\r\n };\r\n displayRow[WORK_CENTER_LEVEL_GROUP_FIELD] = '';\r\n return;\r\n }\r\n\r\n const levelDataId = getValue(sourceRow, 'context.levelDataId');\r\n const hasId =\r\n levelDataId !== null && levelDataId !== undefined && levelDataId !== '';\r\n\r\n displayRow[WORK_CENTER_LEVEL_GROUP_FIELD] = hasId\r\n ? `id:${String(levelDataId)}`\r\n : `name:${label}`;\r\n}\r\n\r\nfunction buildMenuItems(cards: WorkCenterRuntimeCard[]): ClientPageMenuItem[] {\r\n const mapped = cards.map((card, index) => ({\r\n key: card.key,\r\n title:\r\n card.name?.display || card.name?.en || card.name?.ar || toLabel(card.key),\r\n subtitle: undefined,\r\n count: card.count ?? 0,\r\n color: AREA_COLORS[index % AREA_COLORS.length],\r\n icon: card.icon ?? 'custom.task',\r\n isAvailable: card.isAvailable !== false,\r\n }));\r\n\r\n const available = mapped.filter((card) => card.isAvailable);\r\n const source = available.length ? available : mapped;\r\n\r\n return source.map((card) => ({\r\n key: card.key,\r\n title: card.title,\r\n subtitle: undefined,\r\n count: card.count ?? 0,\r\n color: card.color,\r\n icon: card.icon ?? 'custom.task',\r\n }));\r\n}\r\n\r\n/**\r\n * KPI accent colors are owned by the backend (`stats[].color`) and used\r\n * verbatim. Only when the backend sends no color do we fall back to the\r\n * previous `KPI_COLORS` rotation by card position — never map a color from\r\n * the stat key or label.\r\n */\r\nfunction buildKpis(\r\n stats: WorkCenterRuntimeStatsItem[],\r\n fallbackIcon: string | null,\r\n): StatisticCardData[] {\r\n return stats.map((stat, index) => ({\r\n title: String(stat.count ?? 0),\r\n subTitle: stat.label.display,\r\n icon: (fallbackIcon ?? 'custom.task') as any,\r\n color: stat.color?.trim() || KPI_COLORS[index % KPI_COLORS.length],\r\n }));\r\n}\r\n\r\n/**\r\n * Level Name grouping is the default view of the personal work areas — those\r\n * rows come from all over the hierarchy, so \"which project is this?\" is the\r\n * first question a user has. Workspace is already scoped to one record, so\r\n * grouping it by that record would produce a single group.\r\n */\r\nfunction defaultGroupBy(area: WorkCenterArea): string | null {\r\n return area === 'Workspace' ? null : WORK_CENTER_LEVEL_NAME_KEY;\r\n}\r\n\r\n/** The backend sort that renders a grouped column as contiguous rows. */\r\nfunction sortForGroup(groupBy: string | null): WorkCenterSortRule[] {\r\n return groupBy ? [{ field: groupBy, dir: 'asc' }] : [];\r\n}\r\n\r\nfunction createDefaultContext(area: WorkCenterArea): WorkCenterContext {\r\n return {\r\n area,\r\n templateId: null,\r\n levelDataId: null,\r\n selectedCardKey: null,\r\n page: 1,\r\n pageSize: WORK_CENTER_LOCAL_FETCH_SIZE,\r\n sort: sortForGroup(defaultGroupBy(area)),\r\n runtimeFilters: [],\r\n includeStats: true,\r\n };\r\n}\r\n\r\nfunction createDefaultAreaState(area: WorkCenterArea): WorkCenterAreaState {\r\n return {\r\n context: createDefaultContext(area),\r\n headerFilters: [],\r\n columnFilters: [],\r\n groupBy: defaultGroupBy(area),\r\n menuItems: [],\r\n rows: [],\r\n columns: [],\r\n kpis: [],\r\n runtimeFilterSchema: null,\r\n totalCount: 0,\r\n warnings: [],\r\n lastLoadedAt: null,\r\n };\r\n}\r\n\r\n/**\r\n * Combines header (property-filter-builder) and column (in-table) rules into\r\n * the single `runtimeFilters` payload the BE expects. Header rules come\r\n * first; a column rule with the same `(field, op)` pair replaces the matching\r\n * header rule.\r\n */\r\nexport function mergeRuntimeFilters(\r\n headerFilters: WorkCenterFilterRule[] | undefined,\r\n columnFilters: WorkCenterFilterRule[] | undefined,\r\n): WorkCenterFilterRule[] {\r\n const seen = new Map<string, WorkCenterFilterRule>();\r\n const ordered: string[] = [];\r\n const push = (rule: WorkCenterFilterRule) => {\r\n const key = `${rule.field}::${rule.op}`;\r\n if (!seen.has(key)) ordered.push(key);\r\n seen.set(key, rule);\r\n };\r\n\r\n (headerFilters ?? []).forEach(push);\r\n (columnFilters ?? []).forEach(push);\r\n\r\n return sanitizeFilters(ordered.map((key) => seen.get(key)!));\r\n}\r\n\r\nexport const WORK_CENTER_DEFAULT_STATE: WorkCenterStateModel = {\r\n activeArea: 'MyInbox',\r\n byArea: {\r\n MyInbox: createDefaultAreaState('MyInbox'),\r\n TasksCenter: createDefaultAreaState('TasksCenter'),\r\n Workspace: createDefaultAreaState('Workspace'),\r\n },\r\n lookups: [],\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\nexport function normalizeContext(\r\n context: WorkCenterContext,\r\n): WorkCenterContext {\r\n return {\r\n ...context,\r\n page: clampPage(context.page, 1),\r\n pageSize: clampPageSize(context.pageSize, WORK_CENTER_LOCAL_FETCH_SIZE),\r\n sort: sanitizeSort(context.sort),\r\n runtimeFilters: sanitizeFilters(context.runtimeFilters),\r\n };\r\n}\r\n\r\nexport function buildContextFromInputs(\r\n currentContext: WorkCenterContext,\r\n area: WorkCenterArea,\r\n inputs: WorkCenterBootstrapInputs = {},\r\n /**\r\n * Already-resolved grouped column. Grouping is executed as a backend sort,\r\n * so when the host supplies no explicit `sort` the grouped column defines\r\n * it — that is what makes the default grouping reach the very first request\r\n * instead of costing a second round trip.\r\n */\r\n groupBy: string | null = null,\r\n): WorkCenterContext {\r\n const parsedCardKey = toSelectedCardKey(inputs.card);\r\n const parsedTemplateId = toOptionalInt(inputs.templateId);\r\n const parsedLevelDataId = toOptionalInt(inputs.levelDataId);\r\n const hasPageInput = hasParamValue(inputs.page);\r\n const parsedPage = hasPageInput ? toOptionalInt(inputs.page) : null;\r\n const parsedPageSize = toOptionalInt(inputs.pageSize);\r\n\r\n return normalizeContext({\r\n ...currentContext,\r\n area,\r\n selectedCardKey: parsedCardKey ?? currentContext.selectedCardKey,\r\n page: hasPageInput ? (parsedPage ?? 1) : 1,\r\n pageSize: parsedPageSize ?? currentContext.pageSize,\r\n templateId: parsedTemplateId ?? currentContext.templateId,\r\n levelDataId: parsedLevelDataId ?? currentContext.levelDataId,\r\n sort: hasParamValue(inputs.sort)\r\n ? parseSortInput(inputs.sort)\r\n : groupBy\r\n ? sortForGroup(groupBy)\r\n : inputs.sort === null\r\n ? []\r\n : currentContext.sort,\r\n runtimeFilters: hasParamValue(inputs.filters)\r\n ? parseFiltersInput(inputs.filters)\r\n : inputs.filters === null\r\n ? []\r\n : currentContext.runtimeFilters,\r\n });\r\n}\r\n\r\nexport function isSameContext(\r\n left: WorkCenterContext,\r\n right: WorkCenterContext,\r\n): boolean {\r\n return (\r\n left.area === right.area &&\r\n left.templateId === right.templateId &&\r\n left.levelDataId === right.levelDataId &&\r\n left.selectedCardKey === right.selectedCardKey &&\r\n left.page === right.page &&\r\n left.pageSize === right.pageSize &&\r\n left.includeStats === right.includeStats &&\r\n JSON.stringify(left.sort) === JSON.stringify(right.sort) &&\r\n JSON.stringify(left.runtimeFilters) === JSON.stringify(right.runtimeFilters)\r\n );\r\n}\r\n\r\nexport function mapRuntimeResponse(\r\n current: WorkCenterAreaState,\r\n response: WorkCenterRuntimeResponseData,\r\n): WorkCenterAreaState {\r\n const selectedCard = response.selectedCard;\r\n const menuItems = buildMenuItems(response.cards);\r\n const requestedCardKey =\r\n selectedCard?.key ?? current.context.selectedCardKey ?? null;\r\n const selectedCardKey =\r\n requestedCardKey &&\r\n response.cards.some((card) => card.key === requestedCardKey)\r\n ? requestedCardKey\r\n : (menuItems[0]?.key ?? response.cards[0]?.key ?? null);\r\n const selectedCardFromList = selectedCardKey\r\n ? (response.cards.find((card) => card.key === selectedCardKey) ?? null)\r\n : null;\r\n const selectedMenuItem = menuItems.find(\r\n (item) => item.key === selectedCardKey,\r\n );\r\n const columns = buildColumns(\r\n selectedCard?.columnsConfig ?? selectedCardFromList?.columnsConfig,\r\n );\r\n const rows = toDisplayRows(selectedCard?.items ?? [], columns);\r\n const kpis = buildKpis(\r\n selectedCard?.stats ?? [],\r\n selectedMenuItem?.icon ?? null,\r\n );\r\n\r\n // A card that doesn't advertise the grouped column can't be grouped by it —\r\n // drop it here rather than letting the table discover the stale column and\r\n // bounce a second request. The sort goes with it when it was the one the\r\n // grouping asked for.\r\n const groupBy =\r\n current.groupBy && columns.some((column) => column.key === current.groupBy)\r\n ? current.groupBy\r\n : null;\r\n const droppedGroup = !groupBy && current.groupBy;\r\n const sort =\r\n droppedGroup && isSortForGroup(current.context.sort, current.groupBy)\r\n ? []\r\n : current.context.sort;\r\n\r\n return {\r\n ...current,\r\n groupBy,\r\n menuItems,\r\n rows,\r\n columns,\r\n kpis,\r\n runtimeFilterSchema:\r\n selectedCard?.runtimeFilterSchema ??\r\n selectedCardFromList?.runtimeFilterSchema ??\r\n null,\r\n totalCount: selectedCard?.pagination.totalCount ?? 0,\r\n warnings: response.warnings ?? [],\r\n lastLoadedAt: new Date().toISOString(),\r\n context: {\r\n ...current.context,\r\n selectedCardKey,\r\n sort,\r\n page: selectedCard?.pagination.page ?? current.context.page,\r\n pageSize: selectedCard?.pagination.pageSize ?? current.context.pageSize,\r\n },\r\n };\r\n}\r\n\r\n/** True when `sort` is exactly the single rule a grouping would produce. */\r\nfunction isSortForGroup(\r\n sort: WorkCenterSortRule[],\r\n groupBy: string | null,\r\n): boolean {\r\n return !!groupBy && sort.length === 1 && sort[0].field === groupBy;\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { handleApiRequest } from '@masterteam/components';\r\nimport { EMPTY, catchError, map } from 'rxjs';\r\n\r\nimport {\r\n EnterArea,\r\n HydrateFromContext,\r\n LoadRuntime,\r\n SetParams,\r\n SetLookups,\r\n ApplyHeaderFilters,\r\n ApplyColumnFilters,\r\n ClearAllFilters,\r\n SetGroupBy,\r\n} from './work-center.actions';\r\nimport {\r\n ApiEnvelope,\r\n WorkCenterActionKey,\r\n WorkCenterArea,\r\n WorkCenterAreaState,\r\n WorkCenterFilterRule,\r\n WorkCenterRuntimeFilterSchema,\r\n WorkCenterRuntimeRequest,\r\n WorkCenterRuntimeResponseData,\r\n WorkCenterSortRule,\r\n WorkCenterStateModel,\r\n} from './work-center.model';\r\nimport {\r\n buildContextFromInputs,\r\n isSameContext,\r\n mapRuntimeResponse,\r\n mergeRuntimeFilters,\r\n normalizeContext,\r\n resolveGroupByFromInputs,\r\n WORK_CENTER_DEFAULT_STATE,\r\n} from './work-center.state.helpers';\r\n\r\n@State<WorkCenterStateModel>({\r\n name: 'workCenter',\r\n defaults: WORK_CENTER_DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class WorkCenterState {\r\n private readonly http = inject(HttpClient);\r\n\r\n @Selector()\r\n static getState(state: WorkCenterStateModel): WorkCenterStateModel {\r\n return state;\r\n }\r\n\r\n @Selector()\r\n static activeArea(state: WorkCenterStateModel): WorkCenterArea {\r\n return state.activeArea;\r\n }\r\n\r\n @Selector([WorkCenterState.activeArea, WorkCenterState.getState])\r\n static activeSnapshot(\r\n activeArea: WorkCenterArea,\r\n state: WorkCenterStateModel,\r\n ): WorkCenterAreaState {\r\n return state.byArea[activeArea];\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static context(snapshot: WorkCenterAreaState) {\r\n return snapshot.context;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static menuItems(snapshot: WorkCenterAreaState) {\r\n return snapshot.menuItems;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static rows(snapshot: WorkCenterAreaState) {\r\n return snapshot.rows;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static columns(snapshot: WorkCenterAreaState) {\r\n return snapshot.columns;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static kpis(snapshot: WorkCenterAreaState) {\r\n return snapshot.kpis;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static runtimeFilterSchema(\r\n snapshot: WorkCenterAreaState,\r\n ): WorkCenterRuntimeFilterSchema | null {\r\n return snapshot.runtimeFilterSchema;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static headerFilters(snapshot: WorkCenterAreaState): WorkCenterFilterRule[] {\r\n return snapshot.headerFilters;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static columnFilters(snapshot: WorkCenterAreaState): WorkCenterFilterRule[] {\r\n return snapshot.columnFilters;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static groupBy(snapshot: WorkCenterAreaState): string | null {\r\n return snapshot.groupBy;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static totalCount(snapshot: WorkCenterAreaState): number {\r\n return snapshot.totalCount;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static warnings(snapshot: WorkCenterAreaState) {\r\n return snapshot.warnings;\r\n }\r\n\r\n @Selector()\r\n static lookups(state: WorkCenterStateModel) {\r\n return state.lookups;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: WorkCenterStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(state: WorkCenterStateModel): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n @Action(EnterArea)\r\n enterArea(ctx: StateContext<WorkCenterStateModel>, action: EnterArea): void {\r\n if (ctx.getState().activeArea === action.area) return;\r\n ctx.patchState({ activeArea: action.area });\r\n }\r\n\r\n @Action(HydrateFromContext)\r\n hydrateFromContext(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: HydrateFromContext,\r\n ): void {\r\n const state = ctx.getState();\r\n const current = state.byArea[action.area];\r\n const nextContext = normalizeContext({\r\n ...current.context,\r\n ...action.patch,\r\n area: action.area,\r\n });\r\n\r\n if (\r\n state.activeArea === action.area &&\r\n isSameContext(current.context, nextContext)\r\n ) {\r\n return;\r\n }\r\n\r\n // External `runtimeFilters` writes are treated as header-slice writes so\r\n // the in-table column filter slice doesn't get stranded out of sync.\r\n const filtersChanged = action.patch.runtimeFilters !== undefined;\r\n const nextHeaderFilters = filtersChanged\r\n ? nextContext.runtimeFilters\r\n : current.headerFilters;\r\n const nextColumnFilters = filtersChanged ? [] : current.columnFilters;\r\n\r\n ctx.patchState({\r\n activeArea: action.area,\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: {\r\n ...current,\r\n headerFilters: nextHeaderFilters,\r\n columnFilters: nextColumnFilters,\r\n context: nextContext,\r\n },\r\n },\r\n });\r\n }\r\n\r\n @Action(SetParams)\r\n setParams(ctx: StateContext<WorkCenterStateModel>, action: SetParams) {\r\n const state = ctx.getState();\r\n const current = state.byArea[action.area];\r\n // Resolve grouping first: with no explicit `sort` input it is what defines\r\n // the backend sort, so the default grouping reaches the first request.\r\n const nextGroupBy = resolveGroupByFromInputs(\r\n current.groupBy,\r\n action.inputs?.group,\r\n );\r\n const nextContext = buildContextFromInputs(\r\n current.context,\r\n action.area,\r\n action.inputs,\r\n nextGroupBy,\r\n );\r\n\r\n const areaChanged = state.activeArea !== action.area;\r\n const contextChanged = !isSameContext(current.context, nextContext);\r\n const groupChanged = nextGroupBy !== current.groupBy;\r\n const runtimeLoading = state.loadingActive.includes(\r\n WorkCenterActionKey.LoadRuntime,\r\n );\r\n const shouldLoad = areaChanged || contextChanged || !runtimeLoading;\r\n\r\n if (areaChanged || contextChanged || groupChanged) {\r\n // URL-derived filters land on the header slice. Anything previously\r\n // applied via the in-table column filters is dropped so the BE payload\r\n // matches what the user sees on the page header.\r\n const filtersFromInputs = action.inputs?.filters !== undefined;\r\n const nextHeaderFilters = filtersFromInputs\r\n ? nextContext.runtimeFilters\r\n : current.headerFilters;\r\n const nextColumnFilters = filtersFromInputs ? [] : current.columnFilters;\r\n\r\n ctx.patchState({\r\n activeArea: action.area,\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: {\r\n ...current,\r\n headerFilters: nextHeaderFilters,\r\n columnFilters: nextColumnFilters,\r\n groupBy: nextGroupBy,\r\n context: nextContext,\r\n },\r\n },\r\n });\r\n }\r\n\r\n if (!shouldLoad) return;\r\n return ctx.dispatch(new LoadRuntime(action.area, 'route-enter'));\r\n }\r\n\r\n @Action(SetLookups)\r\n setLookups(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: SetLookups,\r\n ): void {\r\n if (ctx.getState().lookups === action.lookups) {\r\n return;\r\n }\r\n\r\n ctx.patchState({\r\n lookups: Array.isArray(action.lookups) ? action.lookups : [],\r\n });\r\n }\r\n\r\n @Action(ApplyHeaderFilters)\r\n applyHeaderFilters(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: ApplyHeaderFilters,\r\n ) {\r\n return this.applyFilterSlice(ctx, action.area, {\r\n headerFilters: action.filters,\r\n });\r\n }\r\n\r\n @Action(ApplyColumnFilters)\r\n applyColumnFilters(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: ApplyColumnFilters,\r\n ) {\r\n return this.applyFilterSlice(ctx, action.area, {\r\n columnFilters: action.filters,\r\n });\r\n }\r\n\r\n /**\r\n * Grouping is a backend concern: the table only renders contiguous rows, so\r\n * the grouped column is pushed down as the single `context.sort` entry and\r\n * pagination restarts at page 1. Clearing the group sends `sort: []`.\r\n */\r\n @Action(SetGroupBy)\r\n setGroupBy(ctx: StateContext<WorkCenterStateModel>, action: SetGroupBy) {\r\n const state = ctx.getState();\r\n const current = state.byArea[action.area];\r\n const nextGroupBy = action.groupBy?.trim() ? action.groupBy : null;\r\n const nextSort: WorkCenterSortRule[] = nextGroupBy\r\n ? [{ field: nextGroupBy, dir: action.dir }]\r\n : [];\r\n\r\n const sameGroup = current.groupBy === nextGroupBy;\r\n const sameSort =\r\n JSON.stringify(current.context.sort) === JSON.stringify(nextSort);\r\n\r\n if (sameGroup && sameSort) return;\r\n\r\n ctx.patchState({\r\n activeArea: action.area,\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: {\r\n ...current,\r\n groupBy: nextGroupBy,\r\n context: sameSort\r\n ? current.context\r\n : { ...current.context, sort: nextSort, page: 1 },\r\n },\r\n },\r\n });\r\n\r\n // A group change that doesn't move the backend order (already sorted by\r\n // that field) is a pure render concern — no refetch.\r\n if (sameSort) return;\r\n\r\n return ctx.dispatch(new LoadRuntime(action.area, 'group-change'));\r\n }\r\n\r\n @Action(ClearAllFilters)\r\n clearAllFilters(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: ClearAllFilters,\r\n ) {\r\n return this.applyFilterSlice(ctx, action.area, {\r\n headerFilters: [],\r\n columnFilters: [],\r\n });\r\n }\r\n\r\n private applyFilterSlice(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n area: WorkCenterArea,\r\n patch: {\r\n headerFilters?: WorkCenterFilterRule[];\r\n columnFilters?: WorkCenterFilterRule[];\r\n },\r\n ) {\r\n const state = ctx.getState();\r\n const current = state.byArea[area];\r\n\r\n const headerFilters = patch.headerFilters ?? current.headerFilters;\r\n const columnFilters = patch.columnFilters ?? current.columnFilters;\r\n const runtimeFilters = mergeRuntimeFilters(headerFilters, columnFilters);\r\n\r\n const sameHeader =\r\n JSON.stringify(headerFilters) === JSON.stringify(current.headerFilters);\r\n const sameColumn =\r\n JSON.stringify(columnFilters) === JSON.stringify(current.columnFilters);\r\n const sameMerged =\r\n JSON.stringify(runtimeFilters) ===\r\n JSON.stringify(current.context.runtimeFilters);\r\n\r\n if (sameHeader && sameColumn && sameMerged) {\r\n return;\r\n }\r\n\r\n ctx.patchState({\r\n activeArea: area,\r\n byArea: {\r\n ...state.byArea,\r\n [area]: {\r\n ...current,\r\n headerFilters,\r\n columnFilters,\r\n context: {\r\n ...current.context,\r\n runtimeFilters,\r\n page: 1,\r\n },\r\n },\r\n },\r\n });\r\n\r\n return ctx.dispatch(new LoadRuntime(area, 'filters-change'));\r\n }\r\n\r\n @Action(LoadRuntime)\r\n loadRuntime(ctx: StateContext<WorkCenterStateModel>, action: LoadRuntime) {\r\n const state = ctx.getState();\r\n const areaState = state.byArea[action.area];\r\n const request = normalizeContext(areaState.context);\r\n const nextAreaState = {\r\n ...areaState,\r\n rows: [],\r\n kpis: [],\r\n totalCount: 0,\r\n };\r\n\r\n ctx.patchState({\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: nextAreaState,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkCenterActionKey.LoadRuntime,\r\n request$: this.getRuntime(request),\r\n onSuccess: (response, latestState) => {\r\n const current = latestState.byArea[action.area];\r\n return {\r\n byArea: {\r\n ...latestState.byArea,\r\n [action.area]: mapRuntimeResponse(current, response),\r\n },\r\n };\r\n },\r\n errorMessage: 'Failed to load Work Center runtime.',\r\n }).pipe(catchError(() => EMPTY));\r\n }\r\n\r\n private getRuntime(request: WorkCenterRuntimeRequest) {\r\n return this.http\r\n .post<\r\n ApiEnvelope<WorkCenterRuntimeResponseData>\r\n >('workcenter/runtime', request)\r\n .pipe(\r\n map((response) => {\r\n if (response.code === 1) return response.data;\r\n\r\n const fallbackError = 'Failed to load Work Center runtime.';\r\n const message =\r\n (response.errors as { message?: string } | null)?.message ??\r\n response.message ??\r\n fallbackError;\r\n\r\n throw new Error(message);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\n\r\nimport {\r\n EnterArea,\r\n HydrateFromContext,\r\n LoadRuntime,\r\n SetParams,\r\n SetLookups,\r\n ApplyHeaderFilters,\r\n ApplyColumnFilters,\r\n ClearAllFilters,\r\n SetGroupBy,\r\n} from './work-center.actions';\r\nimport {\r\n WorkCenterActionKey,\r\n WorkCenterArea,\r\n WorkCenterBootstrapInputs,\r\n WorkCenterContext,\r\n WorkCenterFilterRule,\r\n WorkCenterHydratePatch,\r\n WorkCenterLookups,\r\n WorkCenterLoadReason,\r\n WorkCenterSortRule,\r\n WORK_CENTER_MAX_PAGE_SIZE,\r\n} from './work-center.model';\r\nimport { WorkCenterState } from './work-center.state';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class WorkCenterFacade {\r\n private readonly store = inject(Store);\r\n\r\n readonly activeArea = select(WorkCenterState.activeArea);\r\n readonly context = select(WorkCenterState.context);\r\n readonly menuItems = select(WorkCenterState.menuItems);\r\n readonly rows = select(WorkCenterState.rows);\r\n readonly columns = select(WorkCenterState.columns);\r\n readonly kpis = select(WorkCenterState.kpis);\r\n readonly lookups = select(WorkCenterState.lookups);\r\n readonly runtimeFilterSchema = select(WorkCenterState.runtimeFilterSchema);\r\n readonly headerFilters = select(WorkCenterState.headerFilters);\r\n readonly columnFilters = select(WorkCenterState.columnFilters);\r\n readonly groupBy = select(WorkCenterState.groupBy);\r\n readonly totalCount = select(WorkCenterState.totalCount);\r\n readonly warnings = select(WorkCenterState.warnings);\r\n\r\n private readonly loadingActive = select(WorkCenterState.getLoadingActive);\r\n private readonly errors = select(WorkCenterState.getErrors);\r\n\r\n readonly loading = computed(() =>\r\n this.loadingActive().includes(WorkCenterActionKey.LoadRuntime),\r\n );\r\n readonly error = computed(\r\n () => this.errors()[WorkCenterActionKey.LoadRuntime] ?? null,\r\n );\r\n\r\n /**\r\n * Snapshot reads for callers that must observe state *immediately* after a\r\n * dispatch — e.g. an output handler mirroring the runtime query into the URL.\r\n * The `select()` signals above are the right choice everywhere else.\r\n */\r\n snapshotContext(): WorkCenterContext {\r\n return this.store.selectSnapshot(WorkCenterState.context);\r\n }\r\n\r\n snapshotGroupBy(): string | null {\r\n return this.store.selectSnapshot(WorkCenterState.groupBy);\r\n }\r\n\r\n enterArea(area: WorkCenterArea) {\r\n return this.store.dispatch(new EnterArea(area));\r\n }\r\n\r\n hydrateContext(area: WorkCenterArea, patch: WorkCenterHydratePatch) {\r\n return this.store.dispatch(new HydrateFromContext(area, patch));\r\n }\r\n\r\n setParams(area: WorkCenterArea, inputs: WorkCenterBootstrapInputs) {\r\n return this.store.dispatch(new SetParams(area, inputs));\r\n }\r\n\r\n setLookups(lookups: WorkCenterLookups) {\r\n return this.store.dispatch(new SetLookups(lookups));\r\n }\r\n\r\n selectCardAndLoad(area: WorkCenterArea, selectedCardKey: string) {\r\n return this.store.dispatch([\r\n new HydrateFromContext(area, { selectedCardKey, page: 1 }),\r\n new LoadRuntime(area, 'menu-change'),\r\n ]);\r\n }\r\n\r\n applyTableLazyLoadAndLoad(area: WorkCenterArea, event: any) {\r\n const context = this.store.selectSnapshot(WorkCenterState.context);\r\n const patch: WorkCenterHydratePatch = {};\r\n let changed = false;\r\n\r\n const page = this.toPositiveInt(event?.currentPage);\r\n if (page !== null && page !== context.page) {\r\n patch.page = page;\r\n changed = true;\r\n }\r\n\r\n const pageSize = this.toPositiveInt(event?.pageSize);\r\n if (pageSize !== null) {\r\n const normalizedPageSize = Math.min(\r\n WORK_CENTER_MAX_PAGE_SIZE,\r\n Math.max(1, pageSize),\r\n );\r\n if (normalizedPageSize !== context.pageSize) {\r\n patch.pageSize = normalizedPageSize;\r\n changed = true;\r\n }\r\n }\r\n\r\n const sort = this.toSortFromLazyEvent(event);\r\n if (sort && !this.isSameSort(sort, context.sort)) {\r\n patch.sort = sort;\r\n changed = true;\r\n }\r\n\r\n if (!changed) {\r\n return;\r\n }\r\n\r\n return this.store.dispatch([\r\n new HydrateFromContext(area, patch),\r\n new LoadRuntime(area, 'table-lazy'),\r\n ]);\r\n }\r\n\r\n applyRuntimeFiltersAndLoad(\r\n area: WorkCenterArea,\r\n runtimeFilters: WorkCenterFilterRule[],\r\n ) {\r\n // Back-compat: any caller that previously set the entire `runtimeFilters`\r\n // array now lands on the header slice. The in-table column filter slice is\r\n // cleared so the merged payload matches what callers expect.\r\n return this.store.dispatch(new ApplyHeaderFilters(area, runtimeFilters));\r\n }\r\n\r\n /**\r\n * Replaces the property-filter-builder slice. Resets pagination to page 1\r\n * and reloads with merged `headerFilters` + `columnFilters`.\r\n */\r\n applyHeaderFiltersAndLoad(\r\n area: WorkCenterArea,\r\n runtimeFilters: WorkCenterFilterRule[],\r\n ) {\r\n return this.store.dispatch(new ApplyHeaderFilters(area, runtimeFilters));\r\n }\r\n\r\n /**\r\n * Replaces the in-table column filter slice. Resets pagination to page 1\r\n * and reloads with merged `headerFilters` + `columnFilters`.\r\n */\r\n applyColumnFiltersAndLoad(\r\n area: WorkCenterArea,\r\n runtimeFilters: WorkCenterFilterRule[],\r\n ) {\r\n return this.store.dispatch(new ApplyColumnFilters(area, runtimeFilters));\r\n }\r\n\r\n /**\r\n * Groups the table by `groupBy` (or clears grouping with `null`). Pushes the\r\n * grouped column down as the single backend sort, resets to page 1 and\r\n * reloads. Safe to call from the table's `groupByChange` — the lazy event\r\n * that follows carries the same sort and is absorbed as a no-op.\r\n */\r\n setGroupByAndLoad(\r\n area: WorkCenterArea,\r\n groupBy: string | null,\r\n dir: 'asc' | 'desc' = 'asc',\r\n ) {\r\n return this.store.dispatch(new SetGroupBy(area, groupBy, dir));\r\n }\r\n\r\n /**\r\n * Clears both header and column filter slices in one state update,\r\n * triggering a single BE reload.\r\n */\r\n clearAllFiltersAndLoad(area: WorkCenterArea) {\r\n return this.store.dispatch(new ClearAllFilters(area));\r\n }\r\n\r\n loadRuntime(area: WorkCenterArea, reason: WorkCenterLoadReason = 'manual') {\r\n return this.store.dispatch(new LoadRuntime(area, reason));\r\n }\r\n\r\n private toPositiveInt(value: unknown): number | null {\r\n const parsed = Number(value);\r\n if (!Number.isFinite(parsed)) {\r\n return null;\r\n }\r\n return Math.max(1, Math.floor(parsed));\r\n }\r\n\r\n /**\r\n * `mt-table` always reports its sort on a lazy event, so a `null` field is an\r\n * explicit \"no sort\" and must clear `context.sort` (the BE contract asks for\r\n * `sort: []`). Only an event with no `sortField` key at all — nothing the\r\n * current table emits — leaves the existing sort alone.\r\n */\r\n private toSortFromLazyEvent(event: any): WorkCenterSortRule[] | null {\r\n if (!event || !('sortField' in event)) {\r\n return null;\r\n }\r\n\r\n const sortField = event.sortField;\r\n if (typeof sortField !== 'string' || !sortField.length) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n field: sortField,\r\n dir: event.sortOrder === -1 ? 'desc' : 'asc',\r\n },\r\n ];\r\n }\r\n\r\n private isSameSort(\r\n left: WorkCenterSortRule[] | undefined,\r\n right: WorkCenterSortRule[] | undefined,\r\n ): boolean {\r\n const leftValue = left ?? [];\r\n const rightValue = right ?? [];\r\n\r\n if (leftValue.length !== rightValue.length) {\r\n return false;\r\n }\r\n\r\n return leftValue.every(\r\n (rule, index) =>\r\n rule.field === rightValue[index]?.field &&\r\n rule.dir === rightValue[index]?.dir,\r\n );\r\n }\r\n}\r\n","import { WorkCenterItemBasicInfoData } from '../../store/work-center/work-center.model';\r\n\r\nexport function readItemContext(\r\n details: WorkCenterItemBasicInfoData,\r\n): Record<string, unknown> | null {\r\n const item = details.item;\r\n if (!item || typeof item !== 'object') {\r\n return null;\r\n }\r\n\r\n const context = item['context'];\r\n return context && typeof context === 'object'\r\n ? (context as Record<string, unknown>)\r\n : null;\r\n}\r\n\r\nexport function readNumber(\r\n source: Record<string, unknown> | null,\r\n key: string,\r\n): number | undefined {\r\n const value = source?.[key];\r\n if (typeof value === 'number') {\r\n return Number.isFinite(value) ? value : undefined;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim().length) {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function readString(\r\n source: Record<string, unknown> | null,\r\n key: string,\r\n): string | undefined {\r\n const value = source?.[key];\r\n return typeof value === 'string' && value.trim().length ? value : undefined;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n ClientInstancePreview,\r\n ClientInstancePreviewConfig,\r\n} from '@masterteam/client-components/client-instance-preview';\r\nimport {\r\n EntityAttachmentValue,\r\n EntitiesPreview,\r\n EntityData,\r\n EntityUserValue,\r\n} from '@masterteam/components/entities';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { DiscussionThread } from '@masterteam/discussion';\r\nimport {\r\n Connection,\r\n Node,\r\n StructureBuilder,\r\n} from '@masterteam/structure-builder';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { WorkCenterItemBasicInfoData } from '../../../store/work-center/work-center.model';\r\nimport { readItemContext, readNumber } from '../work-center-types.helpers';\r\n\r\ninterface EscalationPreviewResponse {\r\n message?: string | null;\r\n data?: EscalationPreviewData;\r\n}\r\n\r\ninterface TranslatableValue {\r\n display?: string;\r\n en?: string;\r\n ar?: string;\r\n}\r\n\r\ninterface EscalationSchemaStep {\r\n id: number | string;\r\n name?: TranslatableValue;\r\n isInitial?: boolean;\r\n isFinal?: boolean;\r\n}\r\n\r\ninterface EscalationSchemaConnection {\r\n id?: number | string;\r\n source: number | string;\r\n target: number | string;\r\n}\r\n\r\n// The schema-step id the running instance currently sits on. Tagged in the\r\n// diagram via the structure-builder `current` node field.\r\ninterface EscalationCurrentStep {\r\n escalationStepSchemaId?: number | string;\r\n}\r\n\r\ninterface EscalationRuntimeStep {\r\n escalationStepSchemaId?: number | string;\r\n statusKey?: string;\r\n status?: { key?: string };\r\n}\r\n\r\ninterface EscalationPreviewData {\r\n initiatedBy?: Record<string, unknown>;\r\n startedAt?: Record<string, unknown>;\r\n reason?: string;\r\n attachments?: string[];\r\n levelId?: number | string;\r\n moduleId?: number | string;\r\n moduleDataId?: number | string;\r\n steps?: EscalationRuntimeStep[];\r\n schema?: {\r\n stepsSchema?: EscalationSchemaStep[];\r\n connections?: EscalationSchemaConnection[];\r\n };\r\n schemaSteps?: EscalationSchemaStep[];\r\n currentStep?: EscalationCurrentStep | null;\r\n currentSteps?: EscalationCurrentStep[] | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-work-center-escalation-instance-type',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Tabs,\r\n DiscussionThread,\r\n EntitiesPreview,\r\n ClientInstancePreview,\r\n StructureBuilder,\r\n ],\r\n templateUrl: './work-center-escalation-instance-type.html',\r\n})\r\nexport class WorkCenterEscalationInstanceType implements OnDestroy {\r\n private readonly http = inject(HttpClient);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private loadSub?: Subscription;\r\n\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly readOnly = input(false);\r\n\r\n protected readonly activeTab = signal('escalationDetails');\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n protected readonly tabOptions = computed(() => {\r\n this.activeLang();\r\n return [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.escalationDetails',\r\n ),\r\n value: 'escalationDetails',\r\n icon: 'alert.notification-message',\r\n },\r\n ...(this.moduleDetailsConfig()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.moduleDetails',\r\n ),\r\n value: 'moduleDetails',\r\n icon: 'file.folder',\r\n },\r\n ]\r\n : []),\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.schema'),\r\n value: 'schema',\r\n icon: 'custom.flow-chart',\r\n },\r\n ...(!this.readOnly()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.discussion',\r\n ),\r\n value: 'discussion',\r\n icon: 'custom.discussion-area',\r\n },\r\n ]\r\n : []),\r\n ];\r\n });\r\n protected readonly loading = signal(false);\r\n protected readonly error = signal<string | null>(null);\r\n protected readonly preview = signal<EscalationPreviewData | null>(null);\r\n protected readonly detailEntities = computed<EntityData[]>(() => {\r\n this.activeLang();\r\n const preview = this.preview();\r\n if (!preview) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n key: 'initiatedBy',\r\n name: this.transloco.translate<string>('workCenter.entity.initiatedBy'),\r\n value: mapUserValue(preview.initiatedBy),\r\n viewType: 'User',\r\n order: 1,\r\n configuration: { size: 12 },\r\n },\r\n {\r\n key: 'startedAt',\r\n name: this.transloco.translate<string>('workCenter.entity.startedAt'),\r\n value: resolveDisplayValue(preview.startedAt),\r\n rawValue: resolveRawValue(preview.startedAt),\r\n viewType: 'DateTime',\r\n order: 2,\r\n configuration: { size: 12 },\r\n },\r\n {\r\n key: 'reason',\r\n name: this.transloco.translate<string>('workCenter.entity.reason'),\r\n value: preview.reason ?? '',\r\n viewType: 'LongText',\r\n order: 3,\r\n configuration: { size: 24 },\r\n },\r\n {\r\n key: 'attachments',\r\n name: this.transloco.translate<string>('workCenter.entity.attachments'),\r\n value: mapAttachments(preview.attachments),\r\n viewType: 'Attachment',\r\n order: 4,\r\n configuration: { size: 24 },\r\n },\r\n ];\r\n });\r\n // Schema-step ids the running instance is currently sitting on. Union of the\r\n // single `currentStep` and the parallel `currentSteps`, keyed by their\r\n // `escalationStepSchemaId` so they line up with the diagram node ids.\r\n protected readonly currentSchemaStepIds = computed<Set<string>>(() => {\r\n const preview = this.preview();\r\n const ids = new Set<string>();\r\n\r\n const single = preview?.currentStep?.escalationStepSchemaId;\r\n if (single != null) {\r\n ids.add(String(single));\r\n }\r\n for (const step of preview?.currentSteps ?? []) {\r\n if (step?.escalationStepSchemaId != null) {\r\n ids.add(String(step.escalationStepSchemaId));\r\n }\r\n }\r\n\r\n return ids;\r\n });\r\n protected readonly schemaNodes = computed<Node[]>(() => {\r\n this.activeLang();\r\n const currentIds = this.currentSchemaStepIds();\r\n const preview = this.preview();\r\n const closedStepIds = new Set(\r\n (preview?.steps ?? [])\r\n .filter((step) => isClosedStep(step))\r\n .map((step) => step.escalationStepSchemaId)\r\n .filter((schemaId) => schemaId != null)\r\n .map(String),\r\n );\r\n\r\n return resolveSchemaSteps(preview).map((step) => {\r\n const isInitial = step.isInitial === true;\r\n const isFinal = step.isFinal === true;\r\n const isClosed = closedStepIds.has(String(step.id));\r\n\r\n return {\r\n id: String(step.id),\r\n name:\r\n resolveTranslatable(step.name) ||\r\n `${this.transloco.translate<string>('workCenter.entity.step')} ${step.id}`,\r\n color: isClosed\r\n ? '#dc2626'\r\n : isFinal\r\n ? '#059669'\r\n : isInitial\r\n ? '#2563eb'\r\n : '#0369A1',\r\n icon: isInitial || isFinal ? 'map.flag-04' : 'file.clipboard-check',\r\n badge: isClosed\r\n ? 'Closed'\r\n : isInitial\r\n ? this.transloco.translate<string>('workCenter.preview.initial')\r\n : isFinal\r\n ? this.transloco.translate<string>('workCenter.preview.final')\r\n : null,\r\n style: 'detail',\r\n current: currentIds.has(String(step.id)),\r\n };\r\n });\r\n });\r\n protected readonly previewNodeFields = {\r\n id: 'id',\r\n name: 'name',\r\n icon: 'icon',\r\n color: 'color',\r\n subtitle: 'subtitle',\r\n badge: 'badge',\r\n status: 'status',\r\n style: 'style',\r\n current: 'current',\r\n };\r\n protected readonly schemaConnections = computed<Connection[]>(() =>\r\n (this.preview()?.schema?.connections ?? []).map((connection, index) => ({\r\n id: String(\r\n connection.id ?? `${connection.source}-${connection.target}-${index}`,\r\n ),\r\n from: String(connection.source),\r\n to: String(connection.target),\r\n })),\r\n );\r\n protected readonly hasSchema = computed(() => this.schemaNodes().length > 0);\r\n\r\n protected readonly itemContext = computed(() =>\r\n readItemContext(this.details()),\r\n );\r\n // Preview of the escalated module record. The fetch contextKey needs the\r\n // numeric `levelId` + `moduleId` pair; the record id is the escalated\r\n // module-data `recordId` (NOT `instanceId`, which is the escalation\r\n // instance id). The escalation preview payload backfills any id the item\r\n // context does not carry.\r\n protected readonly moduleDetailsConfig =\r\n computed<ClientInstancePreviewConfig | null>(() => {\r\n const context = this.itemContext();\r\n const preview = this.preview();\r\n const levelId =\r\n readNumber(context, 'levelId') ?? asNumber(preview?.levelId);\r\n const moduleId =\r\n readNumber(context, 'moduleId') ?? asNumber(preview?.moduleId);\r\n const moduleDataId =\r\n readNumber(context, 'recordId') ?? asNumber(preview?.moduleDataId);\r\n\r\n if (levelId == null || moduleId == null || moduleDataId == null) {\r\n return null;\r\n }\r\n\r\n return {\r\n contextKey: `level:${levelId}/module:${moduleId}`,\r\n instanceId: moduleDataId,\r\n displayAreas: ['preview'],\r\n };\r\n });\r\n protected readonly instanceId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'escalationInstanceId') ??\r\n readNumber(this.itemContext(), 'instanceId'),\r\n );\r\n protected readonly resolvedInstanceId = computed(\r\n () => this.instanceId() ?? 0,\r\n );\r\n protected readonly canRenderDetails = computed(\r\n () => this.resolvedInstanceId() > 0,\r\n );\r\n protected readonly canRenderDiscussion = computed(\r\n () => this.resolvedInstanceId() > 0,\r\n );\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n const instanceId = this.resolvedInstanceId();\r\n\r\n if (instanceId > 0) {\r\n untracked(() => this.loadPreview(instanceId));\r\n return;\r\n }\r\n\r\n this.preview.set(null);\r\n this.error.set(null);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n }\r\n\r\n private loadPreview(instanceId: number): void {\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n this.loadSub = this.http\r\n .get<\r\n EscalationPreviewData | EscalationPreviewResponse\r\n >(`escalations/${instanceId}/preview`)\r\n .subscribe({\r\n next: (response) => {\r\n this.loading.set(false);\r\n this.preview.set(extractPreviewData(response));\r\n },\r\n error: (error) => {\r\n this.loading.set(false);\r\n this.preview.set(null);\r\n this.error.set(\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'workCenter.error.failedLoadEscalation',\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n}\r\n\r\n// The endpoint returns the escalation payload directly, but tolerate the\r\n// shared `{ data: ... }` envelope used by the other escalation endpoints.\r\nfunction extractPreviewData(\r\n response: EscalationPreviewData | EscalationPreviewResponse | null,\r\n): EscalationPreviewData | null {\r\n if (!response || typeof response !== 'object') {\r\n return null;\r\n }\r\n\r\n const envelope = response as EscalationPreviewResponse;\r\n if (envelope.data && typeof envelope.data === 'object') {\r\n return envelope.data;\r\n }\r\n\r\n return response as EscalationPreviewData;\r\n}\r\n\r\nfunction mapUserValue(value: unknown): EntityUserValue {\r\n if (!value || typeof value !== 'object') {\r\n return {\r\n displayName: '',\r\n userName: '',\r\n };\r\n }\r\n\r\n return {\r\n id: readString(value, 'id'),\r\n userName: readString(value, 'userName'),\r\n displayName:\r\n readString(value, 'displayName') ??\r\n readString(value, 'fullName') ??\r\n readString(value, 'userName') ??\r\n '',\r\n photoUrl: readString(value, 'photoUrl'),\r\n phoneNumber:\r\n readString(value, 'phoneNumber') ?? readString(value, 'mobileNumber'),\r\n email: readString(value, 'email') ?? readString(value, 'emailAddress'),\r\n };\r\n}\r\n\r\nfunction mapAttachments(value: string[] | undefined): EntityAttachmentValue {\r\n return (value ?? []) as EntityAttachmentValue;\r\n}\r\n\r\nfunction resolveSchemaSteps(\r\n preview: EscalationPreviewData | null,\r\n): EscalationSchemaStep[] {\r\n return preview?.schema?.stepsSchema ?? preview?.schemaSteps ?? [];\r\n}\r\n\r\nfunction isClosedStep(step: EscalationRuntimeStep): boolean {\r\n return (step.statusKey ?? step.status?.key ?? '').toLowerCase() === 'closed';\r\n}\r\n\r\nfunction resolveTranslatable(value: TranslatableValue | undefined): string {\r\n if (!value || typeof value !== 'object') {\r\n return '';\r\n }\r\n\r\n return value.display ?? value.en ?? value.ar ?? '';\r\n}\r\n\r\nfunction resolveDisplayValue(value: unknown): string {\r\n if (!value || typeof value !== 'object') {\r\n return typeof value === 'string' ? value : '';\r\n }\r\n\r\n return (\r\n readString(value, 'displayValue') ??\r\n readString(value, 'display') ??\r\n readString(value, 'actualValue') ??\r\n ''\r\n );\r\n}\r\n\r\nfunction resolveRawValue(value: unknown): string | undefined {\r\n if (!value || typeof value !== 'object') {\r\n return typeof value === 'string' ? value : undefined;\r\n }\r\n\r\n return (\r\n readString(value, 'actualValue') ??\r\n readString(value, 'displayValue') ??\r\n undefined\r\n );\r\n}\r\n\r\nfunction asNumber(value: number | string | undefined): number | undefined {\r\n if (typeof value === 'number') {\r\n return Number.isFinite(value) ? value : undefined;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim().length) {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction readString(value: unknown, key: string): string | undefined {\r\n if (!value || typeof value !== 'object') {\r\n return undefined;\r\n }\r\n\r\n const result = (value as Record<string, unknown>)[key];\r\n return typeof result === 'string' && result.length ? result : undefined;\r\n}\r\n","<div\r\n class=\"mt-modal-content flex h-full min-h-0 flex-col gap-4 p-4 lg:overflow-hidden\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <div\r\n class=\"flex flex-1 min-h-0 flex-col gap-4 lg:grid lg:grid-cols-[13rem_minmax(0,1fr)] lg:gap-6\"\r\n >\r\n @if (tabOptions().length > 1) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabOptions()\"\r\n mode=\"vertical\"\r\n size=\"small\"\r\n />\r\n }\r\n\r\n <div class=\"min-w-0 flex-1 min-h-0 lg:overflow-hidden\">\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'escalationDetails'\"\r\n >\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n @if (canRenderDetails()) {\r\n @if (loading()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"loading.escalationDetails\") }}\r\n </p>\r\n </div>\r\n } @else if (error(); as error) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-red-300 bg-red-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-red-600\">\r\n {{ error }}\r\n </p>\r\n </div>\r\n } @else if (preview()) {\r\n <mt-entities-preview [entities]=\"detailEntities()\" />\r\n }\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.escalationDetailsUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'moduleDetails'\"\r\n >\r\n @if (moduleDetailsConfig(); as moduleDetailsConfig) {\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n <mt-client-instance-preview [config]=\"moduleDetailsConfig\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'schema'\"\r\n >\r\n @if (canRenderDetails()) {\r\n @if (loading()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"loading.escalationSchema\") }}\r\n </p>\r\n </div>\r\n } @else if (error(); as error) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-red-300 bg-red-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-red-600\">\r\n {{ error }}\r\n </p>\r\n </div>\r\n } @else if (hasSchema()) {\r\n <!--\r\n Only mount the flow once the schema tab is actually active. The\r\n structure-builder fits the diagram to the host size on load\r\n (fLoaded -> fitToScreen) and never re-fits, so mounting it inside\r\n the [hidden] (display:none, zero-size) container produces a blank\r\n canvas that doesn't recover when the tab is shown.\r\n -->\r\n @if (activeTab() === \"schema\") {\r\n <!--\r\n Use a concrete height (not lg:h-full). The diagram has no\r\n intrinsic height, and the tab's ancestor chain is block (not\r\n flex) on lg, so `h-full` collapses to 0 and the canvas renders\r\n blank. Mirrors the process preview's `h-[70vh]`.\r\n -->\r\n <div class=\"h-[70vh] min-h-[22rem] overflow-hidden rounded-lg\">\r\n <mt-structure-builder\r\n class=\"h-full\"\r\n [layoutDirection]=\"'LR'\"\r\n [readonly]=\"true\"\r\n [structureMode]=\"'workflow'\"\r\n [nodeFields]=\"previewNodeFields\"\r\n [nodes]=\"schemaNodes()\"\r\n [connections]=\"schemaConnections()\"\r\n />\r\n </div>\r\n }\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.escalationSchemaUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.escalationSchemaContextUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!readOnly()) {\r\n <div\r\n class=\"h-full min-h-0 overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'discussion'\"\r\n >\r\n @if (canRenderDiscussion()) {\r\n <div\r\n class=\"h-[32rem] min-h-[22rem] overflow-hidden rounded-lg border border-surface-200 bg-surface-50 lg:h-full lg:min-h-0\"\r\n >\r\n <mt-discussion-thread\r\n [moduleType]=\"'EscalationInstance'\"\r\n [recordId]=\"resolvedInstanceId()\"\r\n [mentionSearchEndpoint]=\"'Identity/users'\"\r\n [mentionSearchParam]=\"'query'\"\r\n [mentionSearchDataPath]=\"'data'\"\r\n [uploadEndpoint]=\"'uploader'\"\r\n [attachmentDownloadEndpoint]=\"'uploader'\"\r\n [showParticipants]=\"true\"\r\n [autoMarkRead]=\"true\"\r\n [refreshIntervalMs]=\"0\"\r\n [styleClass]=\"'h-full'\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.escalationDiscussionUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { DiscussionThread } from '@masterteam/discussion';\r\nimport { ClientForm } from '@masterteam/forms/client-form';\r\n\r\nimport { RuntimeActionContextStore } from '@masterteam/components/runtime-action';\r\n\r\nimport { WorkCenterFacade } from '../../../store/work-center/work-center.facade';\r\nimport {\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterLookups,\r\n} from '../../../store/work-center/work-center.model';\r\nimport {\r\n readItemContext,\r\n readNumber,\r\n readString,\r\n} from '../work-center-types.helpers';\r\n\r\n@Component({\r\n selector: 'mt-work-center-module-type',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Tabs,\r\n ClientForm,\r\n DiscussionThread,\r\n ],\r\n templateUrl: './work-center-module-type.html',\r\n})\r\nexport class WorkCenterModuleType implements OnDestroy {\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly actionContext = inject(RuntimeActionContextStore, {\r\n optional: true,\r\n });\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly lookups = input<WorkCenterLookups | null>(null);\r\n readonly readOnly = input(false);\r\n private readonly clientForm = viewChild(ClientForm);\r\n protected readonly formLookups = computed(\r\n () => this.lookups() ?? this.facade.lookups(),\r\n );\r\n\r\n protected readonly activeTab = signal('details');\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n protected readonly tabOptions = computed(() => {\r\n this.activeLang();\r\n return [\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.details'),\r\n value: 'details',\r\n icon: 'file.folder',\r\n },\r\n ...(!this.readOnly()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.discussion',\r\n ),\r\n value: 'discussion',\r\n icon: 'custom.discussion-area',\r\n },\r\n ]\r\n : []),\r\n ];\r\n });\r\n protected readonly itemContext = computed(() =>\r\n readItemContext(this.details()),\r\n );\r\n protected readonly instanceId = computed(() =>\r\n readNumber(this.itemContext(), 'instanceId'),\r\n );\r\n protected readonly moduleId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleId'),\r\n );\r\n protected readonly levelId = computed(() =>\r\n readNumber(this.itemContext(), 'levelId'),\r\n );\r\n protected readonly levelDataId = computed(() =>\r\n readNumber(this.itemContext(), 'levelDataId'),\r\n );\r\n protected readonly moduleDataId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleDataId'),\r\n );\r\n protected readonly isGeneralTask = computed(\r\n () => this.details().type === 'GeneralTask',\r\n );\r\n protected readonly moduleKey = computed(() =>\r\n this.isGeneralTask() ? 'GeneralTask' : 'ModuleData',\r\n );\r\n protected readonly operationKey = computed(() => 'Update');\r\n protected readonly formModuleId = computed(() =>\r\n this.isGeneralTask() ? undefined : this.moduleId(),\r\n );\r\n protected readonly formLevelId = computed(() =>\r\n this.isGeneralTask() ? undefined : this.levelId(),\r\n );\r\n protected readonly formLevelDataId = computed(() =>\r\n this.isGeneralTask() ? undefined : this.levelDataId(),\r\n );\r\n protected readonly resolvedInstanceId = computed(\r\n () => this.instanceId() ?? 0,\r\n );\r\n protected readonly canRenderForm = computed(\r\n () => !!this.moduleKey() && !!this.operationKey(),\r\n );\r\n protected readonly discussionModuleType = computed(\r\n () =>\r\n (this.isGeneralTask()\r\n ? 'GeneralTask'\r\n : readString(this.itemContext(), 'moduleKey')) ??\r\n this.details().sourceType ??\r\n this.details().type ??\r\n '',\r\n );\r\n protected readonly canRenderDiscussion = computed(\r\n () =>\r\n this.resolvedInstanceId() > 0 &&\r\n this.discussionModuleType().trim().length > 0,\r\n );\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n this.actionContext?.setFormSource(\r\n this.readOnly() ? null : (this.clientForm() ?? null),\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.actionContext?.setFormSource(null);\r\n }\r\n}\r\n","<div\r\n class=\"mt-modal-content flex h-full min-h-0 flex-col gap-4 p-4 lg:overflow-hidden\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <div\r\n class=\"flex flex-1 min-h-0 flex-col gap-4 lg:grid lg:grid-cols-[13rem_minmax(0,1fr)] lg:gap-6\"\r\n >\r\n @if (tabOptions().length > 1) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabOptions()\"\r\n mode=\"vertical\"\r\n size=\"small\"\r\n />\r\n }\r\n\r\n <div class=\"min-w-0 flex-1 min-h-0 lg:overflow-hidden\">\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'details'\"\r\n >\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n @if (canRenderForm()) {\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [operationKey]=\"operationKey()\"\r\n [moduleId]=\"formModuleId()\"\r\n [levelId]=\"formLevelId()\"\r\n [levelDataId]=\"formLevelDataId()\"\r\n [moduleDataId]=\"moduleDataId()\"\r\n [readonly]=\"true\"\r\n [lookups]=\"formLookups()\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.moduleFormUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (!readOnly()) {\r\n <div\r\n class=\"h-full min-h-0 overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'discussion'\"\r\n >\r\n @if (canRenderDiscussion()) {\r\n <div\r\n class=\"h-[32rem] min-h-[22rem] overflow-hidden rounded-lg border border-surface-200 bg-surface-50 lg:h-full lg:min-h-0\"\r\n >\r\n <mt-discussion-thread\r\n [moduleType]=\"discussionModuleType()\"\r\n [recordId]=\"resolvedInstanceId()\"\r\n [mentionSearchEndpoint]=\"'Identity/users'\"\r\n [mentionSearchParam]=\"'query'\"\r\n [mentionSearchDataPath]=\"'data'\"\r\n [uploadEndpoint]=\"'uploader'\"\r\n [attachmentDownloadEndpoint]=\"'uploader'\"\r\n [showParticipants]=\"true\"\r\n [autoMarkRead]=\"true\"\r\n [refreshIntervalMs]=\"0\"\r\n [styleClass]=\"'h-full'\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.moduleDiscussionUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { EntityData } from '@masterteam/components/entities';\r\nimport { Table } from '@masterteam/components/table';\r\nimport {\r\n Connection,\r\n Node,\r\n StructureBuilder,\r\n} from '@masterteam/structure-builder';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { ApiEnvelope } from '../../../store/work-center/work-center.model';\r\n\r\ninterface ProcessPreviewStepTarget {\r\n type?: 'Unknown' | 'User' | 'Group' | 'Role' | 'Level' | string;\r\n groupKey?: string | null;\r\n displayName?: unknown;\r\n group?: { id?: number | string; name?: unknown } | null;\r\n}\r\n\r\ninterface ProcessPreviewStep {\r\n stepId?: number | string;\r\n stepSchemaId?: number | string;\r\n stepName?: unknown;\r\n status?: unknown;\r\n targetUser?: Record<string, unknown> | null;\r\n actionUserInfo?: Record<string, unknown> | null;\r\n createdAt?: string | null;\r\n actionDate?: string | null;\r\n target?: ProcessPreviewStepTarget | null;\r\n}\r\n\r\ninterface ProcessPreviewSchemaStep {\r\n id: number | string;\r\n name?: unknown;\r\n type?: 'UserInput' | 'AppAction' | 'ApprovalCommit' | string;\r\n isInitial?: boolean;\r\n isFinal?: boolean;\r\n isSystem?: boolean;\r\n isLocked?: boolean;\r\n systemKind?: string;\r\n status?: string;\r\n}\r\n\r\ninterface ProcessPreviewSchemaConnection {\r\n id?: number | string;\r\n source: number | string;\r\n target: number | string;\r\n state?: 'idle' | 'active' | 'success' | 'error';\r\n}\r\n\r\ninterface ProcessPreviewData {\r\n steps?: ProcessPreviewStep[];\r\n schema?: {\r\n stepsSchema?: ProcessPreviewSchemaStep[];\r\n connections?: ProcessPreviewSchemaConnection[];\r\n } | null;\r\n /** Schema-step ids the process is currently sitting on (active steps). */\r\n currentStepSchemaIds?: Array<number | string> | null;\r\n currentStepIds?: Array<number | string> | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-work-center-process-preview',\r\n standalone: true,\r\n imports: [CommonModule, Table, StructureBuilder],\r\n templateUrl: './work-center-process-preview.html',\r\n styles: [\r\n `\r\n :host ::ng-deep .wc-process-preview-schema .wf-detail-row {\r\n align-items: center;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class WorkCenterProcessPreview implements OnDestroy {\r\n private readonly http = inject(HttpClient);\r\n private readonly transloco = inject(TranslocoService);\r\n private loadSub?: Subscription;\r\n\r\n readonly requestId = input<number | null | undefined>(null);\r\n readonly view = input<'approvals' | 'schema'>('approvals');\r\n\r\n protected readonly approvalColumns = computed(() => [\r\n {\r\n key: 'stepName',\r\n label: this.transloco.translate('workCenter.preview.name'),\r\n },\r\n {\r\n key: 'status',\r\n label: this.transloco.translate('workCenter.preview.status'),\r\n type: 'entity' as const,\r\n },\r\n {\r\n key: 'user',\r\n label: this.transloco.translate('workCenter.preview.userOrGroup'),\r\n type: 'entity' as const,\r\n },\r\n {\r\n key: 'createdAt',\r\n label: this.transloco.translate('workCenter.preview.initiationDate'),\r\n type: 'entity' as const,\r\n },\r\n {\r\n key: 'actionDate',\r\n label: this.transloco.translate('workCenter.preview.actionDate'),\r\n type: 'entity' as const,\r\n },\r\n ]);\r\n protected readonly loading = signal(false);\r\n protected readonly error = signal<string | null>(null);\r\n protected readonly preview = signal<ProcessPreviewData | null>(null);\r\n protected readonly canRenderPreview = computed(\r\n () => (this.requestId() ?? 0) > 0,\r\n );\r\n protected readonly approvalRows = computed(() => {\r\n const steps = this.preview()?.steps ?? [];\r\n const rows: Array<{\r\n stepName: string;\r\n status: EntityData;\r\n user: EntityData;\r\n createdAt: EntityData;\r\n actionDate: EntityData;\r\n }> = [];\r\n const seenGroupKeys = new Set<string>();\r\n\r\n for (const step of steps) {\r\n const groupName = this.resolveGroupName(step.target);\r\n\r\n if (groupName) {\r\n const dedupKey = `${step.stepSchemaId ?? ''}|${step.target?.groupKey ?? ''}`;\r\n if (seenGroupKeys.has(dedupKey)) continue;\r\n seenGroupKeys.add(dedupKey);\r\n\r\n // Prefer a sibling that has been actioned so we can surface real\r\n // action date/status; otherwise fall back to the current step.\r\n const siblings = steps.filter(\r\n (s) =>\r\n (s.stepSchemaId ?? '') === (step.stepSchemaId ?? '') &&\r\n (s.target?.groupKey ?? '') === (step.target?.groupKey ?? ''),\r\n );\r\n const repr = siblings.find((s) => s.actionUserInfo) ?? step;\r\n\r\n rows.push({\r\n stepName:\r\n this.resolveDisplayName(repr.stepName) ||\r\n String(repr.stepId ?? '--'),\r\n status: buildEntity('Status', 'Status', repr.status),\r\n user: buildEntity('User', 'Text', groupName),\r\n createdAt: buildEntity(\r\n 'Initiation Date',\r\n 'DateTime',\r\n repr.createdAt ?? '',\r\n ),\r\n actionDate: buildEntity(\r\n 'Action Date',\r\n 'DateTime',\r\n repr.actionDate ?? '',\r\n ),\r\n });\r\n } else {\r\n rows.push({\r\n stepName:\r\n this.resolveDisplayName(step.stepName) ||\r\n String(step.stepId ?? '--'),\r\n status: buildEntity('Status', 'Status', step.status),\r\n user: buildEntity(\r\n 'User',\r\n 'User',\r\n (step.actionUserInfo ?? step.targetUser ?? null) as any,\r\n ),\r\n createdAt: buildEntity(\r\n 'Initiation Date',\r\n 'DateTime',\r\n step.createdAt ?? '',\r\n ),\r\n actionDate: buildEntity(\r\n 'Action Date',\r\n 'DateTime',\r\n step.actionDate ?? '',\r\n ),\r\n });\r\n }\r\n }\r\n\r\n return rows;\r\n });\r\n protected readonly hasApprovals = computed(\r\n () => this.approvalRows().length > 0,\r\n );\r\n protected readonly schemaNodes = computed<Node[]>(() => {\r\n const steps = this.preview()?.schema?.stepsSchema ?? [];\r\n const connections = this.preview()?.schema?.connections ?? [];\r\n const sourceIds = new Set(connections.map((c) => String(c.source)));\r\n const currentStepIds = new Set(\r\n (this.preview()?.currentStepSchemaIds ?? []).map(String),\r\n );\r\n return steps.map((step) => {\r\n const isAppAction = step.type === 'AppAction';\r\n const isApprovalCommit =\r\n step.type === 'ApprovalCommit' || step.systemKind === 'ApprovalCommit';\r\n // Treat a step as final if explicitly flagged or if it has no outgoing\r\n // connection — the latter catches schemas where `isFinal` isn't set.\r\n const isFinal =\r\n !isApprovalCommit &&\r\n (step.isFinal === true || !sourceIds.has(String(step.id)));\r\n const color = isApprovalCommit\r\n ? '#059669'\r\n : isFinal\r\n ? '#059669'\r\n : step.isInitial\r\n ? '#2563eb'\r\n : isAppAction\r\n ? '#B45309'\r\n : '#0369A1';\r\n return {\r\n id: String(step.id),\r\n name: isFinal\r\n ? this.transloco.translate('workCenter.preview.end')\r\n : this.resolveDisplayName(step.name) || String(step.id),\r\n color,\r\n icon: isApprovalCommit\r\n ? 'general.check-verified-01'\r\n : isAppAction\r\n ? 'general.zap'\r\n : isFinal\r\n ? 'map.flag-04'\r\n : step.isInitial\r\n ? 'map.flag-04'\r\n : 'file.clipboard-check',\r\n subtitle: isApprovalCommit\r\n ? this.transloco.translate(\r\n 'workCenter.preview.approvalCommitSubtitle',\r\n )\r\n : step.isInitial\r\n ? this.transloco.translate('workCenter.preview.start')\r\n : isFinal\r\n ? this.transloco.translate('workCenter.preview.end')\r\n : isAppAction\r\n ? this.transloco.translate('workCenter.preview.appAction')\r\n : this.transloco.translate('workCenter.preview.formStep'),\r\n badge: isApprovalCommit\r\n ? null\r\n : step.isInitial\r\n ? this.transloco.translate('workCenter.preview.initial')\r\n : isFinal\r\n ? this.transloco.translate('workCenter.preview.final')\r\n : null,\r\n status: step.status ?? null,\r\n style: isAppAction || isApprovalCommit ? 'icon' : 'detail',\r\n current: currentStepIds.has(String(step.id)),\r\n };\r\n });\r\n });\r\n protected readonly schemaConnections = computed<Connection[]>(() =>\r\n (this.preview()?.schema?.connections ?? []).map((connection, index) => ({\r\n id: String(\r\n connection.id ?? `${connection.source}-${connection.target}-${index}`,\r\n ),\r\n from: String(connection.source),\r\n to: String(connection.target),\r\n state: connection.state,\r\n })),\r\n );\r\n protected readonly hasSchema = computed(() => this.schemaNodes().length > 0);\r\n protected readonly previewNodeFields = {\r\n id: 'id',\r\n name: 'name',\r\n icon: 'icon',\r\n color: 'color',\r\n subtitle: 'subtitle',\r\n badge: 'badge',\r\n status: 'status',\r\n style: 'style',\r\n current: 'current',\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const requestId = this.requestId() ?? 0;\r\n\r\n if (requestId > 0) {\r\n untracked(() => this.loadPreview(requestId));\r\n return;\r\n }\r\n\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(false);\r\n this.error.set(null);\r\n this.preview.set(null);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n }\r\n\r\n private resolveGroupName(\r\n target: ProcessPreviewStepTarget | null | undefined,\r\n ): string {\r\n if (!target || target.type !== 'Group' || !target.group) {\r\n return '';\r\n }\r\n return (\r\n this.resolveDisplayName(target.displayName) ||\r\n this.resolveDisplayName(target.group.name)\r\n );\r\n }\r\n\r\n private resolveDisplayName(name: unknown): string {\r\n if (typeof name === 'string') {\r\n return name;\r\n }\r\n\r\n if (typeof name === 'number' || typeof name === 'boolean') {\r\n return String(name);\r\n }\r\n\r\n if (!name || typeof name !== 'object') {\r\n return '';\r\n }\r\n\r\n const map = name as Record<string, unknown>;\r\n const locale = this.transloco.getActiveLang();\r\n const candidates = [map['display'], map[locale], map['en'], map['ar']];\r\n for (const candidate of candidates) {\r\n if (typeof candidate === 'string' && candidate) {\r\n return candidate;\r\n }\r\n if (typeof candidate === 'number' || typeof candidate === 'boolean') {\r\n return String(candidate);\r\n }\r\n }\r\n\r\n const fallback = Object.values(map).find(\r\n (value) => typeof value === 'string' && value,\r\n );\r\n return typeof fallback === 'string' ? fallback : '';\r\n }\r\n\r\n private loadPreview(requestId: number): void {\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n this.loadSub = this.http\r\n .get<ApiEnvelope<ProcessPreviewData>>(`processes/${requestId}/preview`)\r\n .subscribe({\r\n next: (response) => {\r\n this.loading.set(false);\r\n this.preview.set(response.data ?? null);\r\n },\r\n error: (error) => {\r\n this.loading.set(false);\r\n this.preview.set(null);\r\n this.error.set(\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate('workCenter.preview.loadFailed'),\r\n );\r\n },\r\n });\r\n }\r\n}\r\n\r\nfunction buildEntity(\r\n name: string,\r\n viewType: 'User' | 'DateTime' | 'Text' | 'Status',\r\n value: unknown,\r\n): EntityData {\r\n return {\r\n name,\r\n viewType,\r\n value: (value as any) ?? '',\r\n configuration: {\r\n hideName: true,\r\n },\r\n };\r\n}\r\n","@if (!canRenderPreview()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n Process preview is not available for this item yet.\r\n </p>\r\n </div>\r\n} @else if (loading()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"text-sm text-surface-500\">Loading process preview...</p>\r\n </div>\r\n} @else if (error()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-red-300 bg-red-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-red-600\">{{ error() }}</p>\r\n </div>\r\n} @else {\r\n @if (view() === \"schema\") {\r\n @if (hasSchema()) {\r\n <div class=\"wc-process-preview-schema h-[70vh] overflow-hidden\">\r\n <mt-structure-builder\r\n class=\"h-full\"\r\n [layoutDirection]=\"'LR'\"\r\n [readonly]=\"true\"\r\n [structureMode]=\"'workflow'\"\r\n [nodeFields]=\"previewNodeFields\"\r\n [nodes]=\"schemaNodes()\"\r\n [connections]=\"schemaConnections()\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n Process steps are not available for this item yet.\r\n </p>\r\n </div>\r\n }\r\n } @else if (hasApprovals()) {\r\n <div class=\"max-h-[70vh] overflow-y-auto\">\r\n <mt-table\r\n noCard\r\n [data]=\"approvalRows()\"\r\n [columns]=\"approvalColumns()\"\r\n storageKey=\"work-center-process-preview-table\"\r\n [showFilters]=\"false\"\r\n [generalSearch]=\"false\"\r\n [clickableRows]=\"false\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n Process approvals data is not available for this item yet.\r\n </p>\r\n </div>\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { DiscussionThread } from '@masterteam/discussion';\r\nimport { ClientForm } from '@masterteam/forms/client-form';\r\n\r\nimport { RuntimeActionContextStore } from '@masterteam/components/runtime-action';\r\n\r\nimport { WorkCenterFacade } from '../../../store/work-center/work-center.facade';\r\nimport {\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterLookups,\r\n} from '../../../store/work-center/work-center.model';\r\nimport { WorkCenterProcessPreview } from '../../work-center-item-modal/work-center-process-preview/work-center-process-preview';\r\nimport {\r\n readItemContext,\r\n readNumber,\r\n readString,\r\n} from '../work-center-types.helpers';\r\n\r\n@Component({\r\n selector: 'mt-work-center-process-request-type',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Tabs,\r\n ClientForm,\r\n DiscussionThread,\r\n WorkCenterProcessPreview,\r\n ],\r\n templateUrl: './work-center-process-request-type.html',\r\n})\r\nexport class WorkCenterProcessRequestType implements OnDestroy {\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly actionContext = inject(RuntimeActionContextStore, {\r\n optional: true,\r\n });\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly lookups = input<WorkCenterLookups | null>(null);\r\n readonly readOnly = input(false);\r\n private readonly clientForm = viewChild(ClientForm);\r\n protected readonly formLookups = computed(\r\n () => this.lookups() ?? this.facade.lookups(),\r\n );\r\n\r\n protected readonly activeTab = signal('requestDetails');\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n protected readonly tabOptions = computed(() => {\r\n this.activeLang();\r\n return [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.requestDetails',\r\n ),\r\n value: 'requestDetails',\r\n icon: 'file.file-03',\r\n },\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.approvals'),\r\n value: 'approvals',\r\n icon: 'custom.document-approval',\r\n },\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.steps'),\r\n value: 'schema',\r\n icon: 'custom.flow-chart',\r\n },\r\n ...(!this.readOnly()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.discussion',\r\n ),\r\n value: 'discussion',\r\n icon: 'custom.discussion-area',\r\n },\r\n ]\r\n : []),\r\n ];\r\n });\r\n protected readonly itemContext = computed(() =>\r\n readItemContext(this.details()),\r\n );\r\n protected readonly requestId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'requestId') ??\r\n readNumber(this.itemContext(), 'draftProcessId'),\r\n );\r\n protected readonly moduleKey = computed(\r\n () => readString(this.itemContext(), 'moduleKey') ?? '',\r\n );\r\n protected readonly operationKey = computed(\r\n () => readString(this.itemContext(), 'operationKey') ?? '',\r\n );\r\n protected readonly moduleId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleId'),\r\n );\r\n protected readonly levelId = computed(() =>\r\n readNumber(this.itemContext(), 'levelId'),\r\n );\r\n protected readonly levelDataId = computed(() =>\r\n readNumber(this.itemContext(), 'levelDataId'),\r\n );\r\n protected readonly moduleDataId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleDataId'),\r\n );\r\n protected readonly requestSchemaId = computed(() =>\r\n readNumber(this.itemContext(), 'requestSchemaId'),\r\n );\r\n protected readonly draftProcessId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'draftProcessId') ??\r\n readNumber(this.itemContext(), 'requestId'),\r\n );\r\n protected readonly discussionRecordId = computed(() => this.requestId() ?? 0);\r\n protected readonly isReadonly = computed(() => {\r\n if (this.readOnly()) {\r\n return true;\r\n }\r\n\r\n const item = this.details().item;\r\n const status = item?.['status'] as { key?: unknown } | undefined;\r\n return status?.key !== 'Returned';\r\n });\r\n protected readonly canRenderForm = computed(\r\n () => !!this.moduleKey() && !!this.operationKey(),\r\n );\r\n protected readonly canRenderDiscussion = computed(\r\n () => this.discussionRecordId() > 0,\r\n );\r\n protected readonly canRenderPreview = computed(\r\n () => (this.requestId() ?? 0) > 0,\r\n );\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n this.actionContext?.setFormSource(\r\n this.readOnly() ? null : (this.clientForm() ?? null),\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.actionContext?.setFormSource(null);\r\n }\r\n}\r\n","<div\r\n class=\"mt-modal-content flex h-full min-h-0 flex-col gap-4 p-4 lg:overflow-hidden\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <div\r\n class=\"flex flex-1 min-h-0 flex-col gap-4 lg:grid lg:grid-cols-[13rem_minmax(0,1fr)] lg:gap-6\"\r\n >\r\n @if (tabOptions().length > 1) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabOptions()\"\r\n mode=\"vertical\"\r\n size=\"small\"\r\n />\r\n }\r\n\r\n <div class=\"min-w-0 flex-1 min-h-0 lg:overflow-hidden\">\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'requestDetails'\"\r\n >\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n @if (canRenderForm()) {\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [operationKey]=\"operationKey()\"\r\n [moduleId]=\"moduleId()\"\r\n [levelId]=\"levelId()\"\r\n [levelDataId]=\"levelDataId()\"\r\n [moduleDataId]=\"moduleDataId()\"\r\n [requestSchemaId]=\"requestSchemaId()\"\r\n [draftProcessId]=\"draftProcessId()\"\r\n [readonly]=\"isReadonly()\"\r\n [lookups]=\"formLookups()\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.requestFormUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'approvals'\"\r\n >\r\n @if (canRenderPreview()) {\r\n <mt-work-center-process-preview\r\n [requestId]=\"requestId()\"\r\n [view]=\"'approvals'\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.requestPreviewUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'schema'\"\r\n >\r\n @if (canRenderPreview()) {\r\n <mt-work-center-process-preview\r\n [requestId]=\"requestId()\"\r\n [view]=\"'schema'\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.requestPreviewUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!readOnly()) {\r\n <div\r\n class=\"h-full min-h-0 overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'discussion'\"\r\n >\r\n @if (canRenderDiscussion()) {\r\n <div\r\n class=\"h-[32rem] min-h-[22rem] overflow-hidden rounded-lg border border-surface-200 bg-surface-50 lg:h-full lg:min-h-0\"\r\n >\r\n <mt-discussion-thread\r\n [moduleType]=\"'ProcessRequest'\"\r\n [recordId]=\"discussionRecordId()\"\r\n [mentionSearchEndpoint]=\"'Identity/users'\"\r\n [mentionSearchParam]=\"'query'\"\r\n [mentionSearchDataPath]=\"'data'\"\r\n [uploadEndpoint]=\"'uploader'\"\r\n [attachmentDownloadEndpoint]=\"'uploader'\"\r\n [showParticipants]=\"true\"\r\n [autoMarkRead]=\"true\"\r\n [refreshIntervalMs]=\"0\"\r\n [styleClass]=\"'h-full'\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.requestDiscussionUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n ClientInstancePreview,\r\n ClientInstancePreviewConfig,\r\n} from '@masterteam/client-components/client-instance-preview';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { DiscussionThread } from '@masterteam/discussion';\r\nimport { ClientForm } from '@masterteam/forms/client-form';\r\n\r\nimport { RuntimeActionContextStore } from '@masterteam/components/runtime-action';\r\n\r\nimport { WorkCenterFacade } from '../../../store/work-center/work-center.facade';\r\nimport {\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterLookups,\r\n} from '../../../store/work-center/work-center.model';\r\nimport { WorkCenterProcessPreview } from '../../work-center-item-modal/work-center-process-preview/work-center-process-preview';\r\nimport {\r\n readItemContext,\r\n readNumber,\r\n readString,\r\n} from '../work-center-types.helpers';\r\n\r\n@Component({\r\n selector: 'mt-work-center-process-step-type',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Tabs,\r\n ClientForm,\r\n ClientInstancePreview,\r\n DiscussionThread,\r\n WorkCenterProcessPreview,\r\n ],\r\n templateUrl: './work-center-process-step-type.html',\r\n})\r\nexport class WorkCenterProcessStepType implements OnDestroy {\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly actionContext = inject(RuntimeActionContextStore, {\r\n optional: true,\r\n });\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly lookups = input<WorkCenterLookups | null>(null);\r\n readonly readOnly = input(false);\r\n private readonly clientForm = viewChild(ClientForm);\r\n protected readonly formLookups = computed(\r\n () => this.lookups() ?? this.facade.lookups(),\r\n );\r\n\r\n protected readonly activeTab = signal('form');\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n protected readonly tabOptions = computed(() => {\r\n this.activeLang();\r\n return [\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.form'),\r\n value: 'form',\r\n icon: 'file.file-03',\r\n },\r\n ...(this.levelDetailsConfig()\r\n ? [\r\n {\r\n label: this.levelDetailsLabel(),\r\n value: 'levelDetails',\r\n icon: 'file.folder',\r\n },\r\n ]\r\n : []),\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.approvals'),\r\n value: 'approvals',\r\n icon: 'custom.document-approval',\r\n },\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.steps'),\r\n value: 'schema',\r\n icon: 'custom.flow-chart',\r\n },\r\n ...(!this.readOnly()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.discussion',\r\n ),\r\n value: 'discussion',\r\n icon: 'custom.discussion-area',\r\n },\r\n ]\r\n : []),\r\n ];\r\n });\r\n protected readonly itemContext = computed(() =>\r\n readItemContext(this.details()),\r\n );\r\n protected readonly requestId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'requestId') ??\r\n readNumber(this.itemContext(), 'draftProcessId'),\r\n );\r\n protected readonly moduleKey = computed(\r\n () => readString(this.itemContext(), 'moduleKey') ?? '',\r\n );\r\n protected readonly operationKey = computed(\r\n () => readString(this.itemContext(), 'operationKey') ?? '',\r\n );\r\n protected readonly moduleId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleId'),\r\n );\r\n protected readonly levelId = computed(() =>\r\n readNumber(this.itemContext(), 'levelId'),\r\n );\r\n protected readonly levelDataId = computed(() =>\r\n readNumber(this.itemContext(), 'levelDataId'),\r\n );\r\n protected readonly moduleDataId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleDataId'),\r\n );\r\n protected readonly requestSchemaId = computed(() =>\r\n readNumber(this.itemContext(), 'requestSchemaId'),\r\n );\r\n protected readonly draftProcessId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'draftProcessId') ??\r\n readNumber(this.itemContext(), 'requestId'),\r\n );\r\n protected readonly discussionRecordId = computed(() => this.requestId() ?? 0);\r\n protected readonly canRenderForm = computed(\r\n () => !!this.moduleKey() && !!this.operationKey(),\r\n );\r\n protected readonly canRenderDiscussion = computed(\r\n () => this.discussionRecordId() > 0,\r\n );\r\n protected readonly canRenderPreview = computed(\r\n () => (this.requestId() ?? 0) > 0,\r\n );\r\n // Level record preview for the process step's owning level. The fetch\r\n // contextKey pairs the numeric `levelId` (schema/context) with the\r\n // `levelDataId` record id — same shape as the level-preview dialog.\r\n protected readonly levelDetailsConfig =\r\n computed<ClientInstancePreviewConfig | null>(() => {\r\n const levelId = this.levelId();\r\n const levelDataId = this.levelDataId();\r\n\r\n if (levelId == null || levelDataId == null) {\r\n return null;\r\n }\r\n\r\n return {\r\n contextKey: `level:${levelId}`,\r\n instanceId: levelDataId,\r\n displayAreas: ['preview'],\r\n };\r\n });\r\n // The preview response carries the level name in its schema, so the tab is\r\n // titled \"{Level Name} Details\" once it resolves and falls back to the\r\n // generic \"Level Details\" until then.\r\n private readonly levelPreview = viewChild(ClientInstancePreview);\r\n private readonly levelDetailsLabel = computed(() => {\r\n this.activeLang();\r\n const levelName = this.levelPreview()?.schemaName();\r\n\r\n return levelName\r\n ? this.transloco.translate<string>('workCenter.tabs.levelDetailsNamed', {\r\n name: levelName,\r\n })\r\n : this.transloco.translate<string>('workCenter.tabs.levelDetails');\r\n });\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n this.actionContext?.setFormSource(\r\n this.readOnly() ? null : (this.clientForm() ?? null),\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.actionContext?.setFormSource(null);\r\n }\r\n}\r\n","<div\r\n class=\"mt-modal-content flex h-full min-h-0 flex-col gap-4 p-4 lg:overflow-hidden\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <div\r\n class=\"flex flex-1 min-h-0 flex-col gap-4 lg:grid lg:grid-cols-[13rem_minmax(0,1fr)] lg:gap-6\"\r\n >\r\n @if (tabOptions().length > 1) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabOptions()\"\r\n mode=\"vertical\"\r\n size=\"small\"\r\n />\r\n }\r\n\r\n <div class=\"min-w-0 flex-1 min-h-0 lg:overflow-hidden\">\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'form'\"\r\n >\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n @if (canRenderForm()) {\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [operationKey]=\"operationKey()\"\r\n [moduleId]=\"moduleId()\"\r\n [levelId]=\"levelId()\"\r\n [levelDataId]=\"levelDataId()\"\r\n [moduleDataId]=\"moduleDataId()\"\r\n [requestSchemaId]=\"requestSchemaId()\"\r\n [draftProcessId]=\"draftProcessId()\"\r\n [readonly]=\"readOnly()\"\r\n [lookups]=\"formLookups()\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.processFormUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'levelDetails'\"\r\n >\r\n @if (levelDetailsConfig(); as levelDetailsConfig) {\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n <mt-client-instance-preview [config]=\"levelDetailsConfig\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'approvals'\"\r\n >\r\n @if (canRenderPreview()) {\r\n <mt-work-center-process-preview\r\n [requestId]=\"requestId()\"\r\n [view]=\"'approvals'\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.processPreviewUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'schema'\"\r\n >\r\n @if (canRenderPreview()) {\r\n <mt-work-center-process-preview\r\n [requestId]=\"requestId()\"\r\n [view]=\"'schema'\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.processPreviewUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!readOnly()) {\r\n <div\r\n class=\"h-full min-h-0 overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'discussion'\"\r\n >\r\n @if (canRenderDiscussion()) {\r\n <div\r\n class=\"h-[32rem] min-h-[22rem] overflow-hidden rounded-lg border border-surface-200 bg-surface-50 lg:h-full lg:min-h-0\"\r\n >\r\n <mt-discussion-thread\r\n [moduleType]=\"'ProcessRequest'\"\r\n [recordId]=\"discussionRecordId()\"\r\n [mentionSearchEndpoint]=\"'Identity/users'\"\r\n [mentionSearchParam]=\"'query'\"\r\n [mentionSearchDataPath]=\"'data'\"\r\n [uploadEndpoint]=\"'uploader'\"\r\n [attachmentDownloadEndpoint]=\"'uploader'\"\r\n [showParticipants]=\"true\"\r\n [autoMarkRead]=\"true\"\r\n [refreshIntervalMs]=\"0\"\r\n [styleClass]=\"'h-full'\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.processDiscussionUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input } from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\n\r\nimport {\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterLookups,\r\n} from '../../store/work-center/work-center.model';\r\nimport { WorkCenterEscalationInstanceType } from '../work-center-types/work-center-escalation-instance-type/work-center-escalation-instance-type';\r\nimport { WorkCenterModuleType } from '../work-center-types/work-center-module-type/work-center-module-type';\r\nimport { WorkCenterProcessRequestType } from '../work-center-types/work-center-process-request-type/work-center-process-request-type';\r\nimport { WorkCenterProcessStepType } from '../work-center-types/work-center-process-step-type/work-center-process-step-type';\r\n\r\n@Component({\r\n selector: 'mt-work-center-item-modal',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n WorkCenterProcessStepType,\r\n WorkCenterProcessRequestType,\r\n WorkCenterEscalationInstanceType,\r\n WorkCenterModuleType,\r\n ],\r\n templateUrl: './work-center-item-modal.html',\r\n host: {\r\n class: 'block h-full min-h-0',\r\n },\r\n})\r\nexport class WorkCenterItemModal {\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly lookups = input<WorkCenterLookups | null>(null);\r\n readonly readOnly = input(false);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workCenter'\">\r\n @if (details().type === \"ProcessStep\") {\r\n <mt-work-center-process-step-type\r\n [details]=\"details()\"\r\n [lookups]=\"lookups()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n } @else if (details().type === \"ProcessRequest\") {\r\n <mt-work-center-process-request-type\r\n [details]=\"details()\"\r\n [lookups]=\"lookups()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n } @else if (details().type === \"EscalationInstance\") {\r\n <mt-work-center-escalation-instance-type\r\n [details]=\"details()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n } @else if (details().type === \"Module\" || details().type === \"GeneralTask\") {\r\n <mt-work-center-module-type\r\n [details]=\"details()\"\r\n [lookups]=\"lookups()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n } @else {\r\n <div class=\"mt-modal-content flex h-full items-center justify-center p-4\">\r\n <p class=\"text-sm text-surface-500\">{{ t(\"modal.unsupportedType\") }}</p>\r\n </div>\r\n }\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport {\r\n RuntimeActionContextStore,\r\n RuntimeActionRunner,\r\n resolveActionLabel,\r\n} from '@masterteam/components/runtime-action';\r\nimport { Subscription, map, take } from 'rxjs';\r\n\r\nimport {\r\n ApiEnvelope,\r\n WorkCenterItemActionAfterSuccess,\r\n WorkCenterItemActionExecutionResult,\r\n WorkCenterItemActionsData,\r\n WorkCenterItemContextKey,\r\n WorkCenterClientFormModalData,\r\n WorkCenterPreviewLevelTarget,\r\n WorkCenterRuntimeItemAction,\r\n} from '../../../store/work-center/work-center.model';\r\nimport { WorkCenterFacade } from '../../../store/work-center/work-center.facade';\r\nimport { WorkCenterClientFormModal } from '../../work-center-client-form-modal/work-center-client-form-modal';\r\n\r\ntype FooterActionSeverity = 'primary' | 'secondary' | 'success' | 'danger';\r\ntype FooterActionVariant = 'outlined' | undefined;\r\n\r\ninterface ModalFooterAction extends WorkCenterRuntimeItemAction {\r\n label: string;\r\n severity: FooterActionSeverity;\r\n variant: FooterActionVariant;\r\n}\r\n\r\nconst DEFAULT_GENERAL_TASK_MODAL_STYLE_CLASS = '!w-[70vw] !h-[90vh]';\r\n\r\n@Component({\r\n selector: 'mt-work-center-item-modal-footer-actions',\r\n standalone: true,\r\n imports: [CommonModule, TranslocoDirective, Button],\r\n templateUrl: './work-center-item-modal-footer-actions.html',\r\n host: {\r\n class: 'flex w-full flex-1 flex-wrap items-center justify-end gap-2',\r\n },\r\n})\r\nexport class WorkCenterItemModalFooterActions implements OnDestroy {\r\n private readonly http = inject(HttpClient);\r\n private readonly runner = inject(RuntimeActionRunner);\r\n private readonly actionContext = inject(RuntimeActionContextStore);\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n private loadSub?: Subscription;\r\n private lastContextKey: WorkCenterItemContextKey | null = null;\r\n private currentExecution: { actionKey: string; cancelled: boolean } | null =\r\n null;\r\n\r\n readonly contextKey = input<WorkCenterItemContextKey | null>(null);\r\n readonly previewLevelTarget = input<WorkCenterPreviewLevelTarget | null>(\r\n null,\r\n );\r\n readonly actionExecuted = output<WorkCenterItemActionExecutionResult>();\r\n readonly previewLevelSelected = output<WorkCenterPreviewLevelTarget>();\r\n readonly visibilityChange = output<boolean>();\r\n\r\n private readonly reloadTick = signal(0);\r\n private readonly hasResolvedLoad = signal(false);\r\n protected readonly loading = signal(false);\r\n protected readonly error = signal<string | null>(null);\r\n private readonly actionData = signal<WorkCenterItemActionsData | null>(null);\r\n protected readonly actions = signal<WorkCenterRuntimeItemAction[]>([]);\r\n protected readonly pendingActionKey = signal<string | null>(null);\r\n protected readonly displayActions = computed<ModalFooterAction[]>(() =>\r\n this.actions()\r\n .filter(\r\n (action) =>\r\n action.isAvailable !== false &&\r\n !!action.url &&\r\n !!normalizeMethod(action.httpMethod),\r\n )\r\n .map((action, index) => ({\r\n ...action,\r\n label: resolveActionLabel(action),\r\n severity: resolveActionSeverity(action.actionKey, index),\r\n variant: resolveActionVariant(action.actionKey, index),\r\n })),\r\n );\r\n protected readonly shouldRender = computed(\r\n () =>\r\n !!this.contextKey() &&\r\n (!this.hasResolvedLoad() ||\r\n this.loading() ||\r\n !!this.error() ||\r\n !!this.previewLevelTarget() ||\r\n this.displayActions().length > 0 ||\r\n !!this.pendingActionKey()),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const contextKey = this.contextKey();\r\n this.reloadTick();\r\n this.error.set(null);\r\n\r\n if (!contextKey) {\r\n this.lastContextKey = null;\r\n this.actionData.set(null);\r\n this.actions.set([]);\r\n this.loading.set(false);\r\n this.hasResolvedLoad.set(false);\r\n return;\r\n }\r\n\r\n if (contextKey !== this.lastContextKey) {\r\n this.actionData.set(null);\r\n this.actions.set([]);\r\n this.lastContextKey = contextKey;\r\n }\r\n\r\n untracked(() => this.loadActions(contextKey));\r\n });\r\n\r\n effect(() => {\r\n this.visibilityChange.emit(this.shouldRender());\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n if (this.currentExecution) {\r\n this.currentExecution.cancelled = true;\r\n }\r\n }\r\n\r\n protected previewLevelLabel(\r\n target: WorkCenterPreviewLevelTarget,\r\n t: (key: string, params?: Record<string, unknown>) => string,\r\n ): string {\r\n const moduleName = target.moduleName?.trim();\r\n const navigatesToModule =\r\n target.moduleId !== null && target.moduleId !== undefined && !!moduleName;\r\n\r\n return navigatesToModule\r\n ? t('modal.previewModule', { module: moduleName })\r\n : t('modal.previewLevel');\r\n }\r\n\r\n protected async executeAction(action: ModalFooterAction): Promise<void> {\r\n if (this.pendingActionKey()) {\r\n return;\r\n }\r\n\r\n if (this.isGeneralTaskUpdateAction(action)) {\r\n this.executeGeneralTaskUpdateAction(action);\r\n return;\r\n }\r\n\r\n this.error.set(null);\r\n this.pendingActionKey.set(action.actionKey);\r\n const execution = { actionKey: action.actionKey, cancelled: false };\r\n this.currentExecution = execution;\r\n\r\n const result = await this.runner.execute(action, {\r\n defaultAfterSuccess: resolveDefaultAfterSuccess(action.actionKey),\r\n silent: true,\r\n externalPayloadResolvers: {\r\n values: () => this.actionContext.resolveFormValues(),\r\n },\r\n });\r\n\r\n if (execution.cancelled) {\r\n return;\r\n }\r\n\r\n this.pendingActionKey.set(null);\r\n this.currentExecution = null;\r\n\r\n if (result.status === 'cancelled') {\r\n return;\r\n }\r\n\r\n if (result.status === 'error') {\r\n const message =\r\n result.error instanceof Error\r\n ? result.error.message\r\n : `Failed to execute ${action.label}.`;\r\n this.error.set(message);\r\n return;\r\n }\r\n\r\n const afterSuccess = result.afterSuccess ?? 'refresh';\r\n\r\n if (afterSuccess === 'refresh') {\r\n this.reloadTick.update((value) => value + 1);\r\n }\r\n\r\n this.actionExecuted.emit({\r\n actionKey: result.actionKey,\r\n afterSuccess,\r\n });\r\n }\r\n\r\n private loadActions(contextKey: WorkCenterItemContextKey): void {\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(true);\r\n this.hasResolvedLoad.set(false);\r\n\r\n this.loadSub = this.http\r\n .get<ApiEnvelope<WorkCenterItemActionsData>>(\r\n 'workcenter/runtime/item-actions',\r\n {\r\n params: { contextKey },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.code === 1) {\r\n return response.data;\r\n }\r\n\r\n throw new Error(\r\n resolveEnvelopeErrorMessage(\r\n response,\r\n this.transloco.translate('workCenter.actions.loadActionsFailed'),\r\n ),\r\n );\r\n }),\r\n )\r\n .subscribe({\r\n next: (data) => {\r\n this.actionData.set(data);\r\n this.actions.set(data.actions ?? []);\r\n this.loading.set(false);\r\n this.hasResolvedLoad.set(true);\r\n },\r\n error: (error: unknown) => {\r\n this.actionData.set(null);\r\n this.actions.set([]);\r\n this.loading.set(false);\r\n this.hasResolvedLoad.set(true);\r\n this.error.set(\r\n resolveHttpErrorMessage(\r\n error,\r\n this.transloco.translate('workCenter.actions.loadActionsFailed'),\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n\r\n private executeGeneralTaskUpdateAction(action: ModalFooterAction): void {\r\n this.error.set(null);\r\n\r\n const modalData = this.buildGeneralTaskUpdateModalData(action);\r\n if (!modalData.moduleDataId) {\r\n this.error.set(\r\n this.transloco.translate('workCenter.error.missingModuleDataId'),\r\n );\r\n return;\r\n }\r\n\r\n this.pendingActionKey.set(action.actionKey);\r\n const execution = { actionKey: action.actionKey, cancelled: false };\r\n this.currentExecution = execution;\r\n\r\n const ref = this.modal.openModal(WorkCenterClientFormModal, 'dialog', {\r\n header: resolveActionLabel(action),\r\n styleClass: DEFAULT_GENERAL_TASK_MODAL_STYLE_CLASS,\r\n position: 'end',\r\n dismissableMask: true,\r\n inputValues: {\r\n data: modalData,\r\n operationKey: resolvePayloadString(action, 'operationKey') ?? 'Update',\r\n closeOnPendingApproval: true,\r\n lookups: this.facade.lookups(),\r\n },\r\n });\r\n\r\n ref.onClose.pipe(take(1)).subscribe((result: unknown) => {\r\n if (execution.cancelled) {\r\n return;\r\n }\r\n\r\n this.pendingActionKey.set(null);\r\n this.currentExecution = null;\r\n\r\n if (!result) {\r\n return;\r\n }\r\n\r\n this.reloadTick.update((value) => value + 1);\r\n this.actionExecuted.emit({\r\n actionKey: action.actionKey,\r\n afterSuccess: 'refresh',\r\n });\r\n });\r\n }\r\n\r\n private isGeneralTaskUpdateAction(\r\n action: WorkCenterRuntimeItemAction,\r\n ): boolean {\r\n const data = this.actionData();\r\n return (\r\n normalizeKey(data?.type) === 'generaltask' &&\r\n normalizeKey(action.actionKey) === 'update'\r\n );\r\n }\r\n\r\n private buildGeneralTaskUpdateModalData(\r\n action: WorkCenterRuntimeItemAction,\r\n ): WorkCenterClientFormModalData {\r\n const data = this.actionData();\r\n const context = data?.context ?? {};\r\n\r\n return {\r\n moduleKey:\r\n resolvePayloadString(action, 'moduleKey') ??\r\n readRecordString(context, 'moduleKey') ??\r\n 'GeneralTask',\r\n moduleId:\r\n resolvePayloadId(action, 'moduleId') ??\r\n readRecordId(context, 'moduleId'),\r\n levelId:\r\n resolvePayloadId(action, 'levelId') ?? readRecordId(context, 'levelId'),\r\n levelDataId:\r\n resolvePayloadId(action, 'levelDataId') ??\r\n readRecordId(context, 'levelDataId'),\r\n moduleDataId:\r\n resolvePayloadId(action, 'moduleDataId') ??\r\n readRecordId(context, 'moduleDataId') ??\r\n resolvePayloadId(action, 'recordId') ??\r\n readRecordId(context, 'instanceId'),\r\n };\r\n }\r\n}\r\n\r\nfunction normalizeMethod(value: string | null | undefined): string | null {\r\n if (!value || typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const method = value.trim().toUpperCase();\r\n return method.length ? method : null;\r\n}\r\n\r\nfunction normalizeKey(value: string | null | undefined): string {\r\n if (!value || typeof value !== 'string') {\r\n return '';\r\n }\r\n\r\n return value\r\n .trim()\r\n .replace(/[\\s_-]/g, '')\r\n .toLowerCase();\r\n}\r\n\r\nfunction resolvePayloadString(\r\n action: WorkCenterRuntimeItemAction,\r\n key: string,\r\n): string | undefined {\r\n return readRecordString(action.payloadTemplate, key);\r\n}\r\n\r\nfunction resolvePayloadId(\r\n action: WorkCenterRuntimeItemAction,\r\n key: string,\r\n): number | string | undefined {\r\n return readRecordId(action.payloadTemplate, key);\r\n}\r\n\r\nfunction readRecordString(\r\n record: Record<string, unknown> | null | undefined,\r\n key: string,\r\n): string | undefined {\r\n const value = record?.[key];\r\n return typeof value === 'string' && value.trim().length\r\n ? value.trim()\r\n : undefined;\r\n}\r\n\r\nfunction readRecordId(\r\n record: Record<string, unknown> | null | undefined,\r\n key: string,\r\n): number | string | undefined {\r\n const value = record?.[key];\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const normalized = value.trim();\r\n return normalized.length ? normalized : undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n// Terminal actions leave nothing to show — after a delete the item no longer\r\n// resolves, so refreshing would leave the drawer open on an empty body. The\r\n// backend can still override this by sending an explicit `afterSuccess` on the\r\n// action; this only sets the fallback default.\r\nconst CLOSE_AFTER_SUCCESS_ACTION_KEYS = new Set(['close', 'delete']);\r\n\r\nfunction resolveDefaultAfterSuccess(\r\n actionKey: string,\r\n): WorkCenterItemActionAfterSuccess {\r\n return CLOSE_AFTER_SUCCESS_ACTION_KEYS.has(normalizeKey(actionKey))\r\n ? 'close'\r\n : 'refresh';\r\n}\r\n\r\nfunction resolveActionSeverity(\r\n actionKey: string,\r\n index: number,\r\n): FooterActionSeverity {\r\n const normalized = actionKey.trim().toLowerCase();\r\n if (normalized === 'approve') {\r\n return 'success';\r\n }\r\n\r\n if (\r\n normalized === 'close' ||\r\n normalized === 'delete' ||\r\n normalized === 'reject' ||\r\n normalized === 'cancel'\r\n ) {\r\n return 'danger';\r\n }\r\n\r\n return index === 0 ? 'primary' : 'secondary';\r\n}\r\n\r\nfunction resolveActionVariant(\r\n actionKey: string,\r\n index: number,\r\n): FooterActionVariant {\r\n const severity = resolveActionSeverity(actionKey, index);\r\n return severity === 'primary' || severity === 'success'\r\n ? undefined\r\n : 'outlined';\r\n}\r\n\r\nfunction resolveEnvelopeErrorMessage(\r\n response: { message?: string | null; errors?: unknown } | null | undefined,\r\n fallback: string,\r\n): string {\r\n return (\r\n (response?.errors as { message?: string } | null)?.message ??\r\n response?.message ??\r\n fallback\r\n );\r\n}\r\n\r\nfunction resolveHttpErrorMessage(error: unknown, fallback: string): string {\r\n if (!error || typeof error !== 'object') {\r\n return fallback;\r\n }\r\n\r\n const httpError = error as {\r\n message?: string;\r\n error?: { message?: string | null } | null;\r\n };\r\n\r\n return httpError.error?.message ?? httpError.message ?? fallback;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workCenter'\">\r\n @if (shouldRender()) {\r\n @if (error(); as error) {\r\n <span class=\"me-auto max-w-md text-sm text-red-600\">\r\n {{ error }}\r\n </span>\r\n } @else if (loading() && !displayActions().length) {\r\n <span class=\"me-auto text-sm text-surface-500\">{{\r\n t(\"modal.loadingActions\")\r\n }}</span>\r\n }\r\n\r\n @if (previewLevelTarget(); as previewLevelTarget) {\r\n <mt-button\r\n [label]=\"previewLevelLabel(previewLevelTarget, t)\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"loading() || !!pendingActionKey()\"\r\n (onClick)=\"previewLevelSelected.emit(previewLevelTarget)\"\r\n />\r\n }\r\n\r\n @for (action of displayActions(); track action.actionKey + action.url) {\r\n <mt-button\r\n [label]=\"action.label\"\r\n [severity]=\"action.severity\"\r\n [variant]=\"action.variant\"\r\n [disabled]=\"loading() || !!pendingActionKey()\"\r\n [loading]=\"pendingActionKey() === action.actionKey\"\r\n (onClick)=\"executeAction(action)\"\r\n />\r\n }\r\n }\r\n</ng-container>\r\n","import type { WorkCenterItemContextKey } from '../../store/work-center/work-center.model';\r\n\r\n// Context keys contain `/`; keep them in one route segment without `%2F`/`%25`.\r\nconst ROUTE_CONTEXT_KEY_PREFIX = 'wc1.';\r\nconst HEX_PAIR_PATTERN = /^[\\da-f]{2}$/i;\r\n\r\nexport function encodeWorkCenterRouteContextKey(\r\n contextKey: WorkCenterItemContextKey,\r\n): string {\r\n const encoded = encodeURIComponent(contextKey);\r\n let hex = '';\r\n\r\n for (let index = 0; index < encoded.length; index += 1) {\r\n if (encoded[index] === '%') {\r\n hex += encoded.slice(index + 1, index + 3).toLowerCase();\r\n index += 2;\r\n continue;\r\n }\r\n\r\n hex += encoded.charCodeAt(index).toString(16).padStart(2, '0');\r\n }\r\n\r\n return `${ROUTE_CONTEXT_KEY_PREFIX}${hex}`;\r\n}\r\n\r\nexport function decodeWorkCenterRouteContextKey(\r\n value: WorkCenterItemContextKey | null,\r\n): WorkCenterItemContextKey | null {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n if (value.startsWith(ROUTE_CONTEXT_KEY_PREFIX)) {\r\n return decodeRouteSafeContextKey(\r\n value.slice(ROUTE_CONTEXT_KEY_PREFIX.length),\r\n );\r\n }\r\n\r\n try {\r\n return decodeURIComponent(value);\r\n } catch {\r\n return value;\r\n }\r\n}\r\n\r\nfunction decodeRouteSafeContextKey(\r\n hex: string,\r\n): WorkCenterItemContextKey | null {\r\n if (hex.length % 2 !== 0) {\r\n return null;\r\n }\r\n\r\n const parts = hex.match(/.{2}/g) ?? [];\r\n if (parts.some((part) => !HEX_PAIR_PATTERN.test(part))) {\r\n return null;\r\n }\r\n\r\n try {\r\n return decodeURIComponent(\r\n parts.map((part) => `%${part.toUpperCase()}`).join(''),\r\n );\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Drawer } from '@masterteam/components/drawer';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { RuntimeActionContextStore } from '@masterteam/components/runtime-action';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { map } from 'rxjs';\r\n\r\nimport {\r\n ApiEnvelope,\r\n WorkCenterItemActionExecutionResult,\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterItemContextKey,\r\n WorkCenterPreviewLevelTarget,\r\n} from '../../store/work-center/work-center.model';\r\nimport { WorkCenterFacade } from '../../store/work-center/work-center.facade';\r\nimport { WorkCenterItemModal } from '../work-center-item-modal/work-center-item-modal';\r\nimport { WorkCenterItemModalFooterActions } from './work-center-item-modal-footer-actions/work-center-item-modal-footer-actions';\r\nimport { decodeWorkCenterRouteContextKey } from './work-center-route-context-key';\r\n\r\nconst DEFAULT_DRAWER_STYLE_CLASS =\r\n 'mt-work-center-item-drawer !absolute !w-[96vw] md:!w-[90vw] xl:!w-[82vw]';\r\n\r\n// This component is used both as a plain child (work-center-page) and as a\r\n// routed component behind `withComponentInputBinding()`. The router's input\r\n// binder writes *every* declared input on each route emission — inputs with no\r\n// matching query param / route param / data key are written as `undefined`,\r\n// which silently wipes the declared default. Coalescing here keeps the defaults\r\n// intact for the routed usage while still honouring explicit bindings.\r\nfunction withDefault<T>(fallback: T) {\r\n return (value: T | null | undefined): T => value ?? fallback;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-work-center-item-modal-route',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Drawer,\r\n SkeletonModule,\r\n WorkCenterItemModal,\r\n WorkCenterItemModalFooterActions,\r\n ],\r\n providers: [RuntimeActionContextStore],\r\n templateUrl: './work-center-item-modal-route.html',\r\n})\r\nexport class WorkCenterItemModalRoute {\r\n private readonly http = inject(HttpClient);\r\n private readonly router = inject(Router);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly facade = inject(WorkCenterFacade);\r\n readonly modal = inject(ModalService);\r\n protected readonly lookups = this.facade.lookups;\r\n\r\n readonly contextKey = input<\r\n WorkCenterItemContextKey | null,\r\n WorkCenterItemContextKey | null | undefined\r\n >(null, { transform: withDefault<WorkCenterItemContextKey | null>(null) });\r\n readonly manageRouteOutlet = input<boolean, boolean | null | undefined>(\r\n true,\r\n {\r\n transform: withDefault(true),\r\n },\r\n );\r\n readonly showPreviewLevelAction = input<boolean, boolean | null | undefined>(\r\n true,\r\n { transform: withDefault(true) },\r\n );\r\n readonly readOnly = input<boolean, boolean | null | undefined>(false, {\r\n transform: withDefault(false),\r\n });\r\n readonly appendTo = input<\r\n string | HTMLElement,\r\n string | HTMLElement | null | undefined\r\n >('self', { transform: withDefault<string | HTMLElement>('self') });\r\n readonly drawerStyleClass = input<string, string | null | undefined>(\r\n DEFAULT_DRAWER_STYLE_CLASS,\r\n { transform: withDefault(DEFAULT_DRAWER_STYLE_CLASS) },\r\n );\r\n readonly previewLevel = output<WorkCenterPreviewLevelTarget>();\r\n readonly closed = output<void>();\r\n protected readonly drawerVisible = signal(true);\r\n protected readonly loading = signal(false);\r\n protected readonly error = signal<string | null>(null);\r\n protected readonly details = signal<WorkCenterItemBasicInfoData | null>(null);\r\n protected readonly detailsReloadTick = signal(0);\r\n protected readonly footerActionsMounted = signal(false);\r\n protected readonly resolvedContextKey = computed(() =>\r\n decodeWorkCenterRouteContextKey(this.contextKey()),\r\n );\r\n protected readonly drawerTitle = computed(\r\n () =>\r\n this.readDisplayField(this.details()?.item, 'title') ||\r\n this.transloco.translate<string>('workCenter.page.itemDetails'),\r\n );\r\n protected readonly drawerSubtitle = computed(\r\n () => this.readDisplayField(this.details()?.item, 'subtitle') ?? '',\r\n );\r\n protected readonly previewLevelTarget =\r\n computed<WorkCenterPreviewLevelTarget | null>(() =>\r\n this.resolvePreviewLevelTarget(this.details()),\r\n );\r\n protected readonly displayedPreviewLevelTarget = computed(() =>\r\n this.showPreviewLevelAction() ? this.previewLevelTarget() : null,\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n this.footerActionsMounted.set(!!this.resolvedContextKey());\r\n });\r\n\r\n effect((onCleanup) => {\r\n const contextKey = this.resolvedContextKey();\r\n this.detailsReloadTick();\r\n\r\n this.error.set(null);\r\n this.details.set(null);\r\n\r\n if (!contextKey) {\r\n this.loading.set(false);\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n\r\n const subscription = this.http\r\n .get<ApiEnvelope<WorkCenterItemBasicInfoData>>(\r\n 'workcenter/runtime/item-basic-info',\r\n {\r\n params: { contextKey },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.code === 1) {\r\n return response.data;\r\n }\r\n\r\n throw new Error(this.resolveErrorMessage(response));\r\n }),\r\n )\r\n .subscribe({\r\n next: (details) => {\r\n this.details.set(details);\r\n this.loading.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.error.set(\r\n error instanceof Error\r\n ? error.message\r\n : this.transloco.translate<string>(\r\n 'workCenter.error.failedLoadDetails',\r\n ),\r\n );\r\n this.loading.set(false);\r\n },\r\n });\r\n\r\n onCleanup(() => subscription.unsubscribe());\r\n });\r\n }\r\n\r\n protected onActionExecuted(\r\n result: WorkCenterItemActionExecutionResult,\r\n ): void {\r\n // The action mutated server state, so the underlying page list and the\r\n // menu/KPI counters are stale regardless of whether the dialog closes.\r\n this.facade.loadRuntime(this.facade.activeArea(), 'refresh');\r\n\r\n if (result.afterSuccess === 'close') {\r\n void this.close();\r\n return;\r\n }\r\n\r\n this.detailsReloadTick.update((value) => value + 1);\r\n }\r\n\r\n protected onPreviewLevelSelected(target: WorkCenterPreviewLevelTarget): void {\r\n this.previewLevel.emit(target);\r\n }\r\n\r\n protected onFooterVisibilityChange(visible: boolean): void {\r\n this.footerActionsMounted.set(visible);\r\n }\r\n\r\n async onVisibleChange(visible: boolean): Promise<void> {\r\n this.drawerVisible.set(visible);\r\n\r\n if (visible) {\r\n return;\r\n }\r\n\r\n await this.close();\r\n }\r\n\r\n private close(): Promise<boolean> {\r\n if (!this.manageRouteOutlet()) {\r\n this.closed.emit();\r\n return Promise.resolve(true);\r\n }\r\n\r\n return this.closeRouteOutlet();\r\n }\r\n\r\n private closeRouteOutlet(): Promise<boolean> {\r\n return this.router.navigate(\r\n [{ outlets: { [this.route.outlet || 'sidebar']: null } }],\r\n {\r\n relativeTo: this.route.parent,\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n },\r\n );\r\n }\r\n\r\n private resolveErrorMessage(\r\n response: ApiEnvelope<WorkCenterItemBasicInfoData>,\r\n ): string {\r\n const fallbackError = 'Failed to load item details.';\r\n return (\r\n (response.errors as { message?: string } | null)?.message ??\r\n response.message ??\r\n fallbackError\r\n );\r\n }\r\n\r\n private readDisplayField(\r\n item: Record<string, unknown> | null | undefined,\r\n key: string,\r\n ): string | null {\r\n const field = item?.[key];\r\n if (typeof field === 'string' && field.trim().length) {\r\n return field;\r\n }\r\n\r\n if (!field || typeof field !== 'object') {\r\n return null;\r\n }\r\n\r\n const display = (field as { display?: unknown }).display;\r\n return typeof display === 'string' && display.trim().length\r\n ? display\r\n : null;\r\n }\r\n\r\n private resolvePreviewLevelTarget(\r\n details: WorkCenterItemBasicInfoData | null,\r\n ): WorkCenterPreviewLevelTarget | null {\r\n const context = details?.item?.['context'];\r\n if (!context || typeof context !== 'object') {\r\n return null;\r\n }\r\n\r\n const record = context as Record<string, unknown>;\r\n const levelId = normalizeRouteId(record['levelId']);\r\n const levelDataId = normalizeRouteId(record['levelDataId']);\r\n\r\n if (levelId === null || levelDataId === null) {\r\n return null;\r\n }\r\n\r\n return {\r\n levelId,\r\n levelDataId,\r\n moduleId: normalizeRouteId(record['moduleId']),\r\n // `moduleName` is a localized `{ display, en, ar }` translatable; fall\r\n // back to the raw `moduleKey` (e.g. \"Risk\") if BE omits it.\r\n moduleName:\r\n normalizeDisplayName(record['moduleName']) ??\r\n normalizeDisplayName(record['moduleKey']),\r\n };\r\n }\r\n}\r\n\r\n// Accepts either a plain string (e.g. `moduleKey`) or a localized\r\n// `{ display, en, ar }` translatable, returning the display string.\r\nfunction normalizeDisplayName(value: unknown): string | null {\r\n if (typeof value === 'string') {\r\n return value.trim().length ? value.trim() : null;\r\n }\r\n\r\n if (value && typeof value === 'object') {\r\n const record = value as {\r\n display?: unknown;\r\n en?: unknown;\r\n ar?: unknown;\r\n };\r\n\r\n for (const candidate of [record.display, record.en, record.ar]) {\r\n if (typeof candidate === 'string' && candidate.trim().length) {\r\n return candidate.trim();\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction normalizeRouteId(value: unknown): number | string | null {\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const normalized = value.trim();\r\n return normalized.length ? normalized : null;\r\n }\r\n\r\n return null;\r\n}\r\n","<mt-drawer\r\n [visible]=\"drawerVisible()\"\r\n [loadingHeader]=\"loading()\"\r\n [title]=\"drawerTitle()\"\r\n [styleClass]=\"drawerStyleClass()\"\r\n [appendTo]=\"appendTo()\"\r\n position=\"right\"\r\n [modal]=\"true\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <ng-container content>\r\n @if (loading()) {\r\n <div class=\"p-4\" [class]=\"modal.contentClass\">\r\n <div class=\"flex min-h-[22rem] flex-col gap-5\">\r\n <div class=\"flex items-center gap-3\">\r\n <p-skeleton shape=\"circle\" size=\"3rem\" />\r\n <div class=\"flex flex-1 flex-col gap-2\">\r\n <p-skeleton width=\"12rem\" height=\"1rem\" />\r\n <p-skeleton width=\"8rem\" height=\"0.875rem\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid gap-3 md:grid-cols-2\">\r\n @for (_ of [1, 2, 3, 4]; track $index) {\r\n <p-skeleton height=\"5rem\" class=\"rounded-lg\" />\r\n }\r\n </div>\r\n\r\n <p-skeleton height=\"16rem\" class=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n } @else if (error(); as errorMessage) {\r\n <div class=\"p-4\" [class]=\"modal.contentClass\">\r\n <div class=\"flex min-h-[22rem] items-center justify-center\">\r\n <p class=\"max-w-xl text-sm font-medium text-red-600\">\r\n {{ errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n } @else if (details(); as details) {\r\n <div [class]=\"modal.contentClass + ' h-full min-h-0'\">\r\n <mt-work-center-item-modal\r\n [details]=\"details\"\r\n [lookups]=\"lookups()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n </div>\r\n } @else {\r\n <div class=\"p-4\" [class]=\"modal.contentClass\">\r\n <div class=\"flex min-h-[22rem] items-center justify-center\">\r\n <p class=\"text-sm font-medium text-surface-500\">\r\n {{ t(\"modal.noItemSelected\") }}\r\n </p>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n @if (!readOnly() && footerActionsMounted()) {\r\n <div footer [class]=\"modal.footerClass\">\r\n <mt-work-center-item-modal-footer-actions\r\n [contextKey]=\"resolvedContextKey()\"\r\n [previewLevelTarget]=\"displayedPreviewLevelTarget()\"\r\n (actionExecuted)=\"onActionExecuted($event)\"\r\n (previewLevelSelected)=\"onPreviewLevelSelected($event)\"\r\n (visibilityChange)=\"onFooterVisibilityChange($event)\"\r\n />\r\n </div>\r\n }\r\n</mt-drawer>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ClientPage } from '@masterteam/components/client-page';\r\nimport { ClientPageMenuItem } from '@masterteam/components/client-page-menu';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport {\r\n PropertyFilterBuilder,\r\n PropertyFilterBuilderRule,\r\n PropertyFilterBuilderSchema,\r\n} from '@masterteam/components/property-filter-builder';\r\nimport { StatisticCard } from '@masterteam/components/statistic-card';\r\nimport {\r\n ColumnDef,\r\n Table,\r\n TableFilters,\r\n TablePersistStateKey,\r\n} from '@masterteam/components/table';\r\nimport { ClientLookup } from '@masterteam/forms/client-form';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { take } from 'rxjs';\r\n\r\nimport { WorkCenterClientFormModal } from '../work-center-client-form-modal/work-center-client-form-modal';\r\nimport { WorkCenterItemModalRoute } from '../work-center-item-modal-route/work-center-item-modal-route';\r\nimport { WorkCenterFacade } from '../../store/work-center/work-center.facade';\r\nimport {\r\n WorkCenterArea,\r\n WorkCenterBootstrapInputs,\r\n WorkCenterClientFormModalOptions,\r\n WorkCenterFilterRule,\r\n WorkCenterItemModalOptions,\r\n WorkCenterItemContextKey,\r\n WorkCenterItemModalComponentInput,\r\n WorkCenterRuntimeFilterSchema,\r\n WorkCenterSortRule,\r\n WORK_CENTER_LEVEL_NAME_KEY,\r\n} from '../../store/work-center/work-center.model';\r\n\r\nconst OPERATOR_LABELS: Record<string, string> = {\r\n Eq: 'Equals',\r\n Neq: 'Not equal',\r\n In: 'In',\r\n Contains: 'Contains',\r\n StartsWith: 'Starts with',\r\n Gt: 'Greater than',\r\n Gte: 'Greater than or equal',\r\n Lt: 'Less than',\r\n Lte: 'Less than or equal',\r\n Between: 'Between',\r\n IsNull: 'Is empty',\r\n IsNotNull: 'Is not empty',\r\n};\r\n\r\nconst OPERATOR_VALUE_MODE: Record<\r\n string,\r\n 'single' | 'multi' | 'range' | 'none'\r\n> = {\r\n In: 'multi',\r\n Between: 'range',\r\n IsNull: 'none',\r\n IsNotNull: 'none',\r\n};\r\nconst GENERAL_TASK_CARD_KEYS = new Set([\r\n 'mygeneraltasks',\r\n 'generaltask',\r\n 'generaltasks',\r\n]);\r\n\r\n/**\r\n * Grouped columns the backend has no aggregate for. Their group headers must\r\n * count only the rows on the current page, so the KPI totals map is withheld —\r\n * otherwise a group whose label happens to match a stat (\"Total\", \"Overdue\")\r\n * would show an unrelated number.\r\n */\r\nconst PAGE_LOCAL_GROUP_KEYS = new Set<string>([WORK_CENTER_LEVEL_NAME_KEY]);\r\n\r\nfunction toLabel(value: string): string {\r\n const normalized = value.split('.').pop() ?? value;\r\n return normalized\r\n .replace(/[_-]/g, ' ')\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .trim()\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n}\r\n\r\nfunction columnTypeToViewType(type: string | undefined): string | undefined {\r\n if (type === 'date') return 'Date';\r\n return undefined;\r\n}\r\n\r\nfunction normalizeCardKey(value: string | null | undefined): string {\r\n if (typeof value !== 'string') {\r\n return '';\r\n }\r\n\r\n return value\r\n .trim()\r\n .replace(/[\\s_-]/g, '')\r\n .toLowerCase();\r\n}\r\n\r\n/**\r\n * Strips the user envelope used by `mt-table` user filters down to the\r\n * scalar id that the BE rule payload accepts. Falls back to the original\r\n * value for non-user shapes (e.g. simple string in a select filter).\r\n */\r\nfunction extractIdScalar(value: unknown): unknown {\r\n if (\r\n value !== null &&\r\n typeof value === 'object' &&\r\n 'id' in (value as Record<string, unknown>)\r\n ) {\r\n return (value as Record<string, unknown>)['id'];\r\n }\r\n return value;\r\n}\r\n\r\nfunction toIsoDate(value: unknown): unknown {\r\n if (value instanceof Date) return value.toISOString();\r\n return value;\r\n}\r\n\r\n/**\r\n * Translates one in-table column filter value into a `WorkCenterFilterRule`.\r\n *\r\n * The shape of `raw` depends on the column's filter type — see\r\n * `mt-table` `table-filter-field` outputs:\r\n * - text → string → `Contains`\r\n * - select → scalar | scalar[] → `Eq` | `In`\r\n * - boolean → boolean → `Eq`\r\n * - date → `{ from?, to?, value? }` (Date|null)→ `Between`/`Gte`/`Lte`/`Eq`\r\n * - user → `{ id, ... }` | `{ id, ... }[]` → `Eq` (id) | `In` (ids)\r\n *\r\n * Returns `null` when the value is empty / nothing to send.\r\n */\r\nfunction toRuntimeFilterRule(\r\n field: string,\r\n raw: unknown,\r\n column: ColumnDef | undefined,\r\n): WorkCenterFilterRule | null {\r\n if (raw === null || raw === undefined || raw === '') return null;\r\n\r\n if (typeof raw === 'boolean') {\r\n return { field, op: 'Eq', value: raw };\r\n }\r\n\r\n if (typeof raw === 'number') {\r\n return { field, op: 'Eq', value: raw };\r\n }\r\n\r\n if (typeof raw === 'string') {\r\n if (!raw.trim().length) return null;\r\n return { field, op: 'Contains', value: raw };\r\n }\r\n\r\n if (Array.isArray(raw)) {\r\n const values = raw\r\n .map(extractIdScalar)\r\n .filter((v) => v !== null && v !== undefined && v !== '');\r\n if (!values.length) return null;\r\n return { field, op: 'In', values };\r\n }\r\n\r\n if (typeof raw === 'object') {\r\n const obj = raw as {\r\n from?: unknown;\r\n to?: unknown;\r\n value?: unknown;\r\n id?: unknown;\r\n };\r\n\r\n // User filter envelope -> single-id Eq.\r\n if (obj.id !== undefined && obj.id !== null && obj.id !== '') {\r\n return { field, op: 'Eq', value: obj.id };\r\n }\r\n\r\n const hasFrom = obj.from !== undefined && obj.from !== null;\r\n const hasTo = obj.to !== undefined && obj.to !== null;\r\n if (hasFrom && hasTo) {\r\n return {\r\n field,\r\n op: 'Between',\r\n from: toIsoDate(obj.from),\r\n to: toIsoDate(obj.to),\r\n };\r\n }\r\n if (hasFrom) {\r\n return { field, op: 'Gte', value: toIsoDate(obj.from) };\r\n }\r\n if (hasTo) {\r\n return { field, op: 'Lte', value: toIsoDate(obj.to) };\r\n }\r\n\r\n if (obj.value !== undefined && obj.value !== null && obj.value !== '') {\r\n const treatAsContains =\r\n column?.type === 'text' ||\r\n (column?.filterConfig?.type === 'text' &&\r\n typeof obj.value === 'string');\r\n if (treatAsContains) {\r\n return { field, op: 'Contains', value: obj.value };\r\n }\r\n return { field, op: 'Eq', value: extractIdScalar(obj.value) };\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Walks `mt-table`'s filter map and produces the `WorkCenterFilterRule[]`\r\n * sent on the BE column-filter slice. The synthetic `generalSearch` key is\r\n * skipped because the page keeps general search local-only.\r\n */\r\nfunction buildColumnRuntimeFilters(\r\n filters: TableFilters | null | undefined,\r\n columns: ColumnDef[],\r\n allowedFields: string[] | undefined,\r\n): WorkCenterFilterRule[] {\r\n if (!filters) return [];\r\n\r\n const allowed =\r\n allowedFields && allowedFields.length ? new Set(allowedFields) : null;\r\n const columnByKey = new Map(columns.map((col) => [col.key, col]));\r\n const rules: WorkCenterFilterRule[] = [];\r\n\r\n for (const [key, raw] of Object.entries(filters)) {\r\n if (key === 'generalSearch') continue;\r\n if (allowed && !allowed.has(key)) continue;\r\n\r\n const rule = toRuntimeFilterRule(key, raw, columnByKey.get(key));\r\n if (rule) rules.push(rule);\r\n }\r\n\r\n return rules;\r\n}\r\n\r\nfunction areFilterRulesEqual(\r\n left: WorkCenterFilterRule[],\r\n right: WorkCenterFilterRule[],\r\n): boolean {\r\n return JSON.stringify(left) === JSON.stringify(right);\r\n}\r\n\r\nfunction mapAllowedFields(schema: WorkCenterRuntimeFilterSchema) {\r\n const properties = schema.properties ?? [];\r\n const fromProperties = properties\r\n .filter(\r\n (property) =>\r\n typeof property?.key === 'string' && property.key.length > 0,\r\n )\r\n .map((property) => ({\r\n key: property.key,\r\n label:\r\n property.name?.display ||\r\n property.name?.en ||\r\n property.name?.ar ||\r\n toLabel(property.key),\r\n viewType: property.viewType,\r\n }));\r\n\r\n if (fromProperties.length) {\r\n return fromProperties;\r\n }\r\n\r\n return (schema.allowedFields ?? []).map((field) => ({\r\n key: field,\r\n label: toLabel(field),\r\n }));\r\n}\r\n\r\nfunction mapAllowedOperators(\r\n schema: WorkCenterRuntimeFilterSchema,\r\n getLabel: (key: string) => string,\r\n) {\r\n const options: Array<{\r\n key: string;\r\n label: string;\r\n valueMode: 'single' | 'multi' | 'range' | 'none';\r\n }> = [];\r\n\r\n for (const operator of schema.allowedOperators ?? []) {\r\n if (typeof operator === 'string') {\r\n options.push({\r\n key: operator,\r\n label: getLabel(operator),\r\n valueMode: OPERATOR_VALUE_MODE[operator] ?? 'single',\r\n });\r\n continue;\r\n }\r\n\r\n const key = operator?.value;\r\n if (!key) {\r\n continue;\r\n }\r\n\r\n options.push({\r\n key,\r\n label:\r\n operator.display?.display ||\r\n operator.display?.en ||\r\n operator.display?.ar ||\r\n getLabel(key),\r\n valueMode: OPERATOR_VALUE_MODE[key] ?? 'single',\r\n });\r\n }\r\n\r\n return options;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-work-center-page',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n ClientPage,\r\n PropertyFilterBuilder,\r\n StatisticCard,\r\n Table,\r\n WorkCenterItemModalRoute,\r\n SkeletonModule,\r\n ],\r\n templateUrl: './work-center-page.html',\r\n})\r\nexport class WorkCenterPage {\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n\r\n readonly area = input<WorkCenterArea>('MyInbox');\r\n readonly pageTitle = input<string>('');\r\n readonly menuIcon = input<string>('communication.inbox-01');\r\n readonly lookups = input<ClientLookup[]>([]);\r\n readonly showSidebar = input(true);\r\n readonly bootstrapInputs = input<WorkCenterBootstrapInputs | null>(null);\r\n readonly openItemDrawer = input(false);\r\n readonly itemReadOnly = input(false);\r\n readonly openItemsInModal = input(true);\r\n readonly itemModal = input<WorkCenterItemModalOptions | null>(null);\r\n readonly generalTaskModal = input<WorkCenterClientFormModalOptions | null>(\r\n null,\r\n );\r\n\r\n readonly runtimeFiltersChanged = output<WorkCenterFilterRule[]>();\r\n readonly itemClicked = output<WorkCenterItemContextKey>();\r\n readonly cardSelected = output<string>();\r\n /**\r\n * Emitted whenever the backend sort changes (including grouping, which is\r\n * sent as a sort). Hosts should persist it — the runtime query is rebuilt\r\n * from `bootstrapInputs`, so a sort that isn't round-tripped is dropped on\r\n * the next navigation.\r\n */\r\n readonly sortChanged = output<WorkCenterSortRule[]>();\r\n /** Emitted when the grouped column changes; `null` when grouping is cleared. */\r\n readonly groupChanged = output<string | null>();\r\n\r\n protected readonly context = this.facade.context;\r\n protected readonly headerFilters = this.facade.headerFilters;\r\n protected readonly tableFilters = signal<TableFilters>({});\r\n protected readonly selectedItemContextKey =\r\n signal<WorkCenterItemContextKey | null>(null);\r\n private readonly _menuItems = this.facade.menuItems;\r\n protected readonly menuItems = computed(() => {\r\n this.activeLang();\r\n\r\n return this._menuItems().map((item) => ({\r\n ...item,\r\n subtitle: `${item.count} ${item.title}`,\r\n }));\r\n });\r\n protected readonly rows = this.facade.rows;\r\n protected readonly columns = this.facade.columns;\r\n protected readonly kpis = this.facade.kpis;\r\n protected readonly runtimeFilterSchema = this.facade.runtimeFilterSchema;\r\n protected readonly totalCount = this.facade.totalCount;\r\n protected readonly columnFilters = this.facade.columnFilters;\r\n protected readonly loading = this.facade.loading;\r\n protected readonly groupBy = this.facade.groupBy;\r\n /**\r\n * Sort and grouping live in the runtime query (and the host's URL), not in\r\n * table storage — persisting them locally would let a restored table claim a\r\n * grouping the backend query no longer has. Stable reference: a fresh array\r\n * per change detection would re-run the table's persistence effect.\r\n */\r\n protected readonly persistStateExclude: TablePersistStateKey[] = [\r\n 'pagePosition',\r\n 'sort',\r\n 'groupBy',\r\n ];\r\n protected readonly tableColumns = computed(() =>\r\n this.columns().map((column) => ({\r\n ...column,\r\n sortable: true,\r\n })),\r\n );\r\n\r\n /**\r\n * Grouping is executed by the backend as a single sort, so the table's own\r\n * sort state is driven from the query we actually sent instead of the\r\n * table's internal memory of it.\r\n */\r\n protected readonly sortField = computed(\r\n () => this.context().sort[0]?.field ?? null,\r\n );\r\n protected readonly sortDirection = computed<'asc' | 'desc' | null>(\r\n () => this.context().sort[0]?.dir ?? null,\r\n );\r\n\r\n /**\r\n * Maps each status/group display label to its total count from the KPI\r\n * summary cards so the group header shows the real backend total rather than\r\n * the current-page row count. Withheld for groups the backend doesn't\r\n * aggregate — see `PAGE_LOCAL_GROUP_KEYS`.\r\n */\r\n protected readonly groupCountMap = computed<Map<string, number> | null>(\r\n () => {\r\n const activeGroup = this.groupBy();\r\n if (!activeGroup || PAGE_LOCAL_GROUP_KEYS.has(activeGroup)) {\r\n return null;\r\n }\r\n\r\n const map = new Map<string, number>();\r\n for (const kpi of this.kpis()) {\r\n const label = kpi.subTitle;\r\n const count = Number(kpi.title);\r\n if (label && !isNaN(count)) {\r\n map.set(label, count);\r\n }\r\n }\r\n return map;\r\n },\r\n );\r\n\r\n protected readonly propertyFilterSchema =\r\n computed<PropertyFilterBuilderSchema | null>(() => {\r\n this.activeLang();\r\n const schema = this.runtimeFilterSchema();\r\n if (schema) {\r\n const allowedFields = mapAllowedFields(schema);\r\n const allowedOperators = mapAllowedOperators(schema, (key) =>\r\n this.getOpLabel(key),\r\n );\r\n if (allowedFields.length && allowedOperators.length) {\r\n return { allowedFields, allowedOperators };\r\n }\r\n }\r\n\r\n const fallbackFields = this.columns()\r\n .filter(\r\n (column) => typeof column?.key === 'string' && column.key.length > 0,\r\n )\r\n .map((column) => ({\r\n key: column.key,\r\n label: column.label || toLabel(column.key),\r\n viewType: columnTypeToViewType(column.type),\r\n }));\r\n\r\n if (!fallbackFields.length) {\r\n return null;\r\n }\r\n\r\n const fallbackOperators = Object.keys(OPERATOR_LABELS).map((key) => ({\r\n key,\r\n label: this.getOpLabel(key),\r\n valueMode: OPERATOR_VALUE_MODE[key] ?? 'single',\r\n }));\r\n\r\n return {\r\n allowedFields: fallbackFields,\r\n allowedOperators: fallbackOperators,\r\n };\r\n });\r\n protected readonly showGeneralTaskCreateButton = computed(() =>\r\n GENERAL_TASK_CARD_KEYS.has(\r\n normalizeCardKey(this.context().selectedCardKey),\r\n ),\r\n );\r\n protected readonly generalTaskButtonLabel = computed(() => {\r\n this.activeLang();\r\n return (\r\n this.generalTaskModal()?.buttonLabel?.trim() ||\r\n this.transloco.translate<string>('workCenter.page.new')\r\n );\r\n });\r\n protected readonly resolvedPageTitle = computed(() => {\r\n this.activeLang();\r\n return (\r\n this.pageTitle() ||\r\n this.transloco.translate<string>('workCenter.page.title')\r\n );\r\n });\r\n protected readonly generalTaskButtonIcon = computed(\r\n () => this.generalTaskModal()?.buttonIcon?.trim() || 'general.plus',\r\n );\r\n private readonly defaultModalStyleClass =\r\n '!w-[96vw] md:!w-[84vw] xl:!w-[70vw] !shadow-none';\r\n private readonly defaultGeneralTaskModalStyleClass = '!w-[70vw] !h-[90vh]';\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n this.facade.setLookups(this.lookups());\r\n });\r\n\r\n effect(() => {\r\n const inputs = this.bootstrapInputs();\r\n if (inputs) {\r\n this.facade.setParams(this.area(), inputs);\r\n }\r\n });\r\n }\r\n\r\n onMenuItemClick(item: ClientPageMenuItem): void {\r\n if (item.key === this.context().selectedCardKey) {\r\n return;\r\n }\r\n\r\n this.facade.selectCardAndLoad(this.area(), item.key);\r\n this.cardSelected.emit(item.key);\r\n }\r\n\r\n onRuntimeFiltersApplied(filters: PropertyFilterBuilderRule[]): void {\r\n const mappedFilters = filters.map((filter) => ({\r\n field: filter.field,\r\n op: filter.op as WorkCenterFilterRule['op'],\r\n value: filter.value,\r\n values: filter.values,\r\n from: filter.from,\r\n to: filter.to,\r\n }));\r\n\r\n this.facade.applyHeaderFiltersAndLoad(this.area(), mappedFilters);\r\n this.runtimeFiltersChanged.emit(mappedFilters);\r\n }\r\n\r\n onRuntimeFiltersCleared(): void {\r\n this.facade.clearAllFiltersAndLoad(this.area());\r\n this.tableFilters.set({});\r\n this.runtimeFiltersChanged.emit([]);\r\n }\r\n\r\n /**\r\n * Single entry point for `mt-table` (`lazy=true`) — handles both column\r\n * filters and pagination/sort. Filter changes always reset the page to 1\r\n * (handled by `applyColumnFiltersAndLoad`); when only paging/sort changed\r\n * we fall through to `applyTableLazyLoadAndLoad`.\r\n */\r\n /**\r\n * The table asks to group; the backend does the ordering. `setGroupByAndLoad`\r\n * rewrites `context.sort` and resets paging, so the lazy event the table\r\n * fires straight after carries the same sort and lands as a no-op.\r\n */\r\n onTableGroupByChange(key: string | null): void {\r\n const nextGroup = key?.trim() ? key : null;\r\n if (nextGroup === this.groupBy()) {\r\n return;\r\n }\r\n\r\n const previousSort = this.facade.snapshotContext().sort;\r\n // Re-grouping the column we're already sorted by keeps its direction.\r\n const dir =\r\n nextGroup && this.sortField() === nextGroup\r\n ? (this.sortDirection() ?? 'asc')\r\n : 'asc';\r\n\r\n this.facade.setGroupByAndLoad(this.area(), nextGroup, dir);\r\n this.groupChanged.emit(nextGroup);\r\n this.emitSortIfChanged(previousSort);\r\n }\r\n\r\n onTableLazyLoad(event: any): void {\r\n const schema = this.runtimeFilterSchema();\r\n const propertyKeys = (schema?.properties ?? [])\r\n .map((p) => p?.key)\r\n .filter((k): k is string => typeof k === 'string' && k.length > 0);\r\n const allowedKeys = schema?.allowedFields ?? [];\r\n const allowedFields = propertyKeys.length ? propertyKeys : allowedKeys;\r\n\r\n const nextColumnFilters = buildColumnRuntimeFilters(\r\n event?.filters as TableFilters | undefined,\r\n this.columns(),\r\n allowedFields.length ? allowedFields : undefined,\r\n );\r\n\r\n if (!areFilterRulesEqual(nextColumnFilters, this.columnFilters())) {\r\n this.facade.applyColumnFiltersAndLoad(this.area(), nextColumnFilters);\r\n return;\r\n }\r\n\r\n const previousSort = this.facade.snapshotContext().sort;\r\n this.facade.applyTableLazyLoadAndLoad(this.area(), event);\r\n this.emitSortIfChanged(previousSort);\r\n }\r\n\r\n /**\r\n * Announces the backend sort to the host only when it actually moved, so a\r\n * host that mirrors it into the URL doesn't churn history on every page hit.\r\n * Reads the snapshot, not the signal — this runs in the same tick as the\r\n * dispatch that changed it.\r\n */\r\n private emitSortIfChanged(previousSort: WorkCenterSortRule[]): void {\r\n const nextSort = this.facade.snapshotContext().sort;\r\n if (JSON.stringify(previousSort) !== JSON.stringify(nextSort)) {\r\n this.sortChanged.emit(nextSort);\r\n }\r\n }\r\n\r\n onGeneralTaskCreateClick(): void {\r\n const modalOptions = this.generalTaskModal();\r\n const modalData = {\r\n moduleKey: 'GeneralTask',\r\n ...(modalOptions?.data ?? {}),\r\n };\r\n const modalHeader =\r\n modalOptions?.header ??\r\n this.transloco.translate<string>('workCenter.page.createGeneralTask');\r\n const modalStyleClass =\r\n modalOptions?.styleClass ?? this.defaultGeneralTaskModalStyleClass;\r\n const operationKey = modalOptions?.operationKey ?? 'Create';\r\n const closeOnPendingApproval = modalOptions?.closeOnPendingApproval ?? true;\r\n const lookups = modalOptions?.lookups ?? this.lookups();\r\n\r\n const ref = this.modal.openModal(WorkCenterClientFormModal, 'dialog', {\r\n header: modalHeader,\r\n styleClass: modalStyleClass,\r\n position: 'end',\r\n dismissableMask: true,\r\n inputValues: {\r\n data: modalData,\r\n operationKey,\r\n closeOnPendingApproval,\r\n lookups,\r\n },\r\n });\r\n\r\n ref.onClose.pipe(take(1)).subscribe((result: unknown) => {\r\n if (result) {\r\n this.facade.loadRuntime(this.area(), 'refresh');\r\n }\r\n });\r\n }\r\n\r\n onRowClick(row: Record<string, unknown>): void {\r\n const contextKey = this.resolveRowContextKey(row);\r\n console.log('[work-center-debug] page row click', {\r\n contextKey,\r\n row,\r\n openItemsInModal: this.openItemsInModal(),\r\n hasModalComponent: !!this.itemModal()?.component,\r\n });\r\n\r\n if (!contextKey) {\r\n return;\r\n }\r\n\r\n this.itemClicked.emit(contextKey);\r\n\r\n if (this.openItemDrawer()) {\r\n this.selectedItemContextKey.set(contextKey);\r\n return;\r\n }\r\n\r\n if (!this.openItemsInModal()) {\r\n return;\r\n }\r\n\r\n const modalOptions = this.itemModal();\r\n if (!modalOptions?.component) {\r\n return;\r\n }\r\n\r\n const ref = this.modal.openModal(modalOptions.component, 'drawer', {\r\n header:\r\n modalOptions?.header ??\r\n this.transloco.translate<string>('workCenter.page.itemDetails'),\r\n styleClass: modalOptions?.styleClass ?? this.defaultModalStyleClass,\r\n position: modalOptions?.position ?? 'end',\r\n dismissible: true,\r\n modal: true,\r\n ...(modalOptions?.appendTo ? { appendTo: modalOptions.appendTo } : {}),\r\n inputValues: { contextKey } satisfies WorkCenterItemModalComponentInput,\r\n });\r\n\r\n ref.onClose.pipe(take(1)).subscribe(() => {\r\n this.facade.loadRuntime(this.area(), 'refresh');\r\n });\r\n }\r\n\r\n protected readonly rowsClickable = computed(\r\n () => this.openItemDrawer() || this.openItemsInModal(),\r\n );\r\n\r\n private getOpLabel(key: string): string {\r\n return (\r\n this.transloco.translate<string>('workCenter.operator.' + key) ||\r\n OPERATOR_LABELS[key] ||\r\n toLabel(key)\r\n );\r\n }\r\n\r\n private resolveRowContextKey(\r\n row: Record<string, unknown>,\r\n ): WorkCenterItemContextKey | null {\r\n const value = row['contextKey'];\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const normalized = value.trim();\r\n return normalized.length ? normalized : null;\r\n }\r\n}\r\n","<ng-template #headerActions>\r\n <div class=\"flex flex-wrap items-center justify-end gap-2\">\r\n <mt-property-filter-builder\r\n [schema]=\"propertyFilterSchema()\"\r\n [filters]=\"headerFilters()\"\r\n (applied)=\"onRuntimeFiltersApplied($event)\"\r\n (cleared)=\"onRuntimeFiltersCleared()\"\r\n />\r\n\r\n @if (showGeneralTaskCreateButton()) {\r\n <mt-button\r\n [label]=\"generalTaskButtonLabel()\"\r\n [icon]=\"generalTaskButtonIcon()\"\r\n size=\"small\"\r\n (onClick)=\"onGeneralTaskCreateClick()\"\r\n />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #pageContent>\r\n <div class=\"flex flex-col gap-8\">\r\n @if (loading()) {\r\n <div\r\n class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-5 gap-3\"\r\n >\r\n @for (_ of [1, 2, 3, 4, 5]; track $index) {\r\n <p-skeleton height=\"6.5rem\" class=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else if (kpis().length) {\r\n <div class=\"gap-3 flex flex-wrap\">\r\n @for (kpi of kpis(); track $index) {\r\n <mt-statistic-card [data]=\"kpi\" class=\"min-w-[200px]\" />\r\n }\r\n </div>\r\n }\r\n\r\n <mt-table\r\n noCard\r\n [data]=\"rows()\"\r\n [columns]=\"tableColumns()\"\r\n tableLayout=\"auto\"\r\n [clickableRows]=\"rowsClickable()\"\r\n [loading]=\"loading()\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [cellClickFilter]=\"true\"\r\n [generalSearch]=\"true\"\r\n [exportable]=\"true\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [freezeActions]=\"true\"\r\n [lazy]=\"true\"\r\n [lazyLocalSearch]=\"true\"\r\n [lazyTotalRecords]=\"totalCount()\"\r\n [pageSize]=\"context().pageSize\"\r\n [currentPage]=\"context().page - 1\"\r\n [first]=\"(context().page - 1) * context().pageSize\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n [groupCountMap]=\"groupCountMap()\"\r\n [groupBy]=\"groupBy()\"\r\n [sortField]=\"sortField()\"\r\n [sortDirection]=\"sortDirection()\"\r\n storageKey=\"work-center-page-table\"\r\n [persistStateExclude]=\"persistStateExclude\"\r\n [filters]=\"tableFilters()\"\r\n (filtersChange)=\"tableFilters.set($event)\"\r\n (groupByChange)=\"onTableGroupByChange($event)\"\r\n (lazyLoad)=\"onTableLazyLoad($event)\"\r\n (rowClick)=\"onRowClick($event)\"\r\n />\r\n </div>\r\n</ng-template>\r\n\r\n@if (showSidebar()) {\r\n <mt-client-page\r\n [menuIcon]=\"menuIcon()\"\r\n [menuTitle]=\"resolvedPageTitle()\"\r\n [menuItems]=\"menuItems()\"\r\n [menuItemsLoading]=\"loading() && !menuItems().length\"\r\n [activeItem]=\"context().selectedCardKey ?? undefined\"\r\n storageKey=\"work-center-client-page\"\r\n (menuItemClick)=\"onMenuItemClick($event)\"\r\n >\r\n <ng-template #headerClientPageEnd>\r\n <ng-container [ngTemplateOutlet]=\"headerActions\" />\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"pageContent\" />\r\n </mt-client-page>\r\n} @else {\r\n <div class=\"flex h-full min-h-0 flex-col bg-surface-0\">\r\n <div\r\n class=\"flex shrink-0 items-center justify-end border-b border-surface px-7 py-4\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"headerActions\" />\r\n </div>\r\n <div class=\"min-h-0 flex-1 overflow-y-auto px-7 py-5\">\r\n <ng-container [ngTemplateOutlet]=\"pageContent\" />\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (selectedItemContextKey(); as contextKey) {\r\n <mt-work-center-item-modal-route\r\n [contextKey]=\"contextKey\"\r\n [manageRouteOutlet]=\"false\"\r\n [showPreviewLevelAction]=\"false\"\r\n [readOnly]=\"itemReadOnly()\"\r\n appendTo=\"body\"\r\n drawerStyleClass=\"mt-work-center-item-drawer !w-[90vw]\"\r\n (closed)=\"selectedItemContextKey.set(null)\"\r\n />\r\n}\r\n","import { WorkCenterState } from './work-center';\r\n\r\nexport const APP_STATES = [WorkCenterState];\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["toLabel","readString","i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-work-center.mjs","sources":["../../../../packages/masterteam/work-center/src/lib/work-center-client-form-modal/work-center-client-form-modal.ts","../../../../packages/masterteam/work-center/src/lib/work-center-client-form-modal/work-center-client-form-modal.html","../../../../packages/masterteam/work-center/src/store/work-center/work-center.actions.ts","../../../../packages/masterteam/work-center/src/store/work-center/work-center.model.ts","../../../../packages/masterteam/work-center/src/store/work-center/work-center.state.helpers.ts","../../../../packages/masterteam/work-center/src/store/work-center/work-center.state.ts","../../../../packages/masterteam/work-center/src/store/work-center/work-center.facade.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-types.helpers.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-escalation-instance-type/work-center-escalation-instance-type.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-escalation-instance-type/work-center-escalation-instance-type.html","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-module-type/work-center-module-type.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-module-type/work-center-module-type.html","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal/work-center-process-preview/work-center-process-preview.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal/work-center-process-preview/work-center-process-preview.html","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-process-request-type/work-center-process-request-type.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-process-request-type/work-center-process-request-type.html","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-process-step-type/work-center-process-step-type.ts","../../../../packages/masterteam/work-center/src/lib/work-center-types/work-center-process-step-type/work-center-process-step-type.html","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal/work-center-item-modal.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal/work-center-item-modal.html","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-item-modal-footer-actions/work-center-item-modal-footer-actions.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-item-modal-footer-actions/work-center-item-modal-footer-actions.html","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-route-context-key.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-item-modal-route.ts","../../../../packages/masterteam/work-center/src/lib/work-center-item-modal-route/work-center-item-modal-route.html","../../../../packages/masterteam/work-center/src/lib/work-center-page/work-center-page.ts","../../../../packages/masterteam/work-center/src/lib/work-center-page/work-center-page.html","../../../../packages/masterteam/work-center/src/store/app.state.ts","../../../../packages/masterteam/work-center/src/masterteam-work-center.ts"],"sourcesContent":["import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { DrawerController } from '@masterteam/components/dynamic-drawer';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport {\r\n ClientForm,\r\n ClientLookup,\r\n ProcessFormSubmitResponse,\r\n} from '@masterteam/forms/client-form';\r\n\r\nimport { WorkCenterClientFormModalData } from '../../store/work-center/work-center.model';\r\n\r\n@Component({\r\n selector: 'mt-work-center-client-form-modal',\r\n standalone: true,\r\n imports: [Button, TranslocoDirective, ClientForm],\r\n templateUrl: './work-center-client-form-modal.html',\r\n})\r\nexport class WorkCenterClientFormModal {\r\n readonly modal = inject(ModalService);\r\n readonly ref = inject(ModalRef);\r\n readonly drawerController = inject(DrawerController, { optional: true });\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly processForm = viewChild.required(ClientForm);\r\n readonly data = input.required<WorkCenterClientFormModalData>();\r\n readonly operationKey = input<string>('Create');\r\n readonly closeOnPendingApproval = input(false);\r\n readonly lookups = input<ClientLookup[]>([]);\r\n\r\n readonly moduleKey = computed(() => this.data().moduleKey);\r\n readonly moduleId = computed(() => this.toNumber(this.data().moduleId));\r\n readonly levelId = computed(() => this.toNumber(this.data().levelId));\r\n readonly levelDataId = computed(() => this.toNumber(this.data().levelDataId));\r\n readonly moduleDataId = computed(() =>\r\n this.toNumber(this.data().moduleDataId),\r\n );\r\n readonly formMode = computed<'create' | 'edit'>(() =>\r\n this.moduleDataId() != null ||\r\n this.operationKey().trim().toLowerCase() === 'update'\r\n ? 'edit'\r\n : 'create',\r\n );\r\n\r\n readonly validationMessage = signal<string | null>(null);\r\n readonly submitError = signal<string | null>(null);\r\n readonly submitStatus = signal<'pending' | 'executed' | null>(null);\r\n /**\r\n * Mirrors the client form's own submit state instead of tracking it locally.\r\n * A blocking `process-submit/validate` failure ends the submit without\r\n * emitting `submitted` or `errored`, so a local flag would stay stuck at\r\n * `true` and permanently disable Submit / keep the \"Submitting…\" hint up.\r\n */\r\n readonly isSubmitting = computed(() => this.processForm().submitting());\r\n\r\n onSubmit(): void {\r\n this.validationMessage.set(null);\r\n this.submitError.set(null);\r\n this.submitStatus.set(null);\r\n\r\n if (!this.processForm().isValid()) {\r\n this.validationMessage.set(\r\n this.transloco.translate<string>(\r\n 'workCenter.validation.fillRequiredFields',\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n this.processForm().submit();\r\n }\r\n\r\n onSubmitted(response: ProcessFormSubmitResponse): void {\r\n this.submitError.set(null);\r\n\r\n const status =\r\n response.status === 'PendingApproval' ? 'pending' : 'executed';\r\n this.submitStatus.set(status);\r\n\r\n if (status === 'executed' || this.closeOnPendingApproval()) {\r\n this.ref.close(true);\r\n }\r\n }\r\n\r\n onErrored(error: string): void {\r\n this.submitError.set(\r\n error ??\r\n this.transloco.translate<string>('workCenter.error.failedSubmit'),\r\n );\r\n }\r\n\r\n private toNumber(value: unknown): number | undefined {\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Number(value);\r\n if (Number.isFinite(parsed)) {\r\n return parsed;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workCenter'\">\r\n <div [class]=\"modal.contentClass + ' p-5 flex flex-col gap-4'\">\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [moduleId]=\"moduleId()\"\r\n [operationKey]=\"operationKey()\"\r\n [levelId]=\"levelId()\"\r\n [levelDataId]=\"levelDataId()\"\r\n [moduleDataId]=\"moduleDataId()\"\r\n [formMode]=\"formMode()\"\r\n [autoLoad]=\"true\"\r\n [lookups]=\"lookups()\"\r\n (submitted)=\"onSubmitted($event)\"\r\n (errored)=\"onErrored($event)\"\r\n />\r\n\r\n @if (isSubmitting()) {\r\n <div class=\"text-sm text-muted-color\">{{ t(\"modal.submitting\") }}</div>\r\n }\r\n\r\n @if (validationMessage()) {\r\n <div\r\n class=\"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3 text-sm text-amber-700\"\r\n role=\"alert\"\r\n >\r\n {{ validationMessage() }}\r\n </div>\r\n }\r\n\r\n @if (submitError()) {\r\n <div\r\n class=\"mt-2 rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n role=\"alert\"\r\n >\r\n {{ submitError() }}\r\n </div>\r\n }\r\n\r\n @if (submitStatus(); as status) {\r\n <div\r\n class=\"mt-2 rounded-lg border p-3 text-sm\"\r\n [class]=\"\r\n status === 'pending'\r\n ? 'border-amber-200 bg-amber-50 text-amber-700'\r\n : 'border-emerald-200 bg-emerald-50 text-emerald-700'\r\n \"\r\n >\r\n @if (status === \"pending\") {\r\n {{ t(\"modal.requestSubmitted\") }}\r\n } @else {\r\n {{ t(\"modal.operationExecuted\") }}\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('modal.cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"isSubmitting()\"\r\n (onClick)=\"ref.close(false)\"\r\n />\r\n <mt-button\r\n [label]=\"t('modal.submit')\"\r\n icon=\"general.check\"\r\n [disabled]=\"\r\n isSubmitting() || processForm().hasBlockingGovernanceFailure()\r\n \"\r\n (onClick)=\"onSubmit()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import {\r\n WorkCenterArea,\r\n WorkCenterBootstrapInputs,\r\n WorkCenterFilterRule,\r\n WorkCenterHydratePatch,\r\n WorkCenterLoadReason,\r\n WorkCenterLookups,\r\n} from './work-center.model';\r\n\r\nexport class EnterArea {\r\n static readonly type = '[WorkCenter] Enter Area';\r\n\r\n constructor(public area: WorkCenterArea) {}\r\n}\r\n\r\nexport class HydrateFromContext {\r\n static readonly type = '[WorkCenter] Hydrate From Context';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public patch: WorkCenterHydratePatch,\r\n ) {}\r\n}\r\n\r\nexport class SetParams {\r\n static readonly type = '[WorkCenter] Set Params';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public inputs: WorkCenterBootstrapInputs,\r\n ) {}\r\n}\r\n\r\nexport class SetLookups {\r\n static readonly type = '[WorkCenter] Set Lookups';\r\n\r\n constructor(public lookups: WorkCenterLookups) {}\r\n}\r\n\r\nexport class LoadRuntime {\r\n static readonly type = '[WorkCenter] Load Runtime';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public reason: WorkCenterLoadReason = 'manual',\r\n ) {}\r\n}\r\n\r\n/**\r\n * Replaces the header filter slice (rules from\r\n * `mt-property-filter-builder`). Resets `page` to 1 and triggers a\r\n * BE reload with the merged `headerFilters` + `columnFilters` payload.\r\n */\r\nexport class ApplyHeaderFilters {\r\n static readonly type = '[WorkCenter] Apply Header Filters';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public filters: WorkCenterFilterRule[],\r\n ) {}\r\n}\r\n\r\n/**\r\n * Replaces the in-table column filter slice (rules translated from the\r\n * `mt-table` filters map). Resets `page` to 1 and triggers a BE reload\r\n * with the merged `headerFilters` + `columnFilters` payload.\r\n */\r\nexport class ApplyColumnFilters {\r\n static readonly type = '[WorkCenter] Apply Column Filters';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public filters: WorkCenterFilterRule[],\r\n ) {}\r\n}\r\n\r\n/**\r\n * Switches the selected card and drops everything that was scoped to the\r\n * previous one: advanced filters, in-table column filters, grouping and the\r\n * sort that grouping implied. Each card brings its own columns and filter\r\n * schema, so carrying those over would filter on fields the new card doesn't\r\n * have and group by a column it doesn't show.\r\n */\r\nexport class SelectCard {\r\n static readonly type = '[WorkCenter] Select Card';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public selectedCardKey: string,\r\n ) {}\r\n}\r\n\r\n/**\r\n * Sets the grouped column. Grouping is expressed to the backend as a single\r\n * sort on the same field, so this also rewrites `context.sort` and resets\r\n * `page` to 1 before reloading. `groupBy: null` clears both.\r\n */\r\nexport class SetGroupBy {\r\n static readonly type = '[WorkCenter] Set Group By';\r\n\r\n constructor(\r\n public area: WorkCenterArea,\r\n public groupBy: string | null,\r\n public dir: 'asc' | 'desc' = 'asc',\r\n ) {}\r\n}\r\n\r\n/**\r\n * Clears both the header filter slice and the column filter slice in one\r\n * state update, triggering a single BE reload.\r\n */\r\nexport class ClearAllFilters {\r\n static readonly type = '[WorkCenter] Clear All Filters';\r\n\r\n constructor(public area: WorkCenterArea) {}\r\n}\r\n","import type { LoadingStateShape } from '@masterteam/components';\r\nimport { ClientPageMenuItem } from '@masterteam/components/client-page-menu';\r\nimport type { ClientLookup } from '@masterteam/forms/client-form';\r\nimport { StatisticCardData } from '@masterteam/components/statistic-card';\r\nimport { ColumnDef } from '@masterteam/components/table';\r\nimport { Type } from '@angular/core';\r\n\r\nexport type WorkCenterArea = 'MyInbox' | 'TasksCenter' | 'Workspace';\r\nexport type WorkCenterItemContextKey = string;\r\nexport type WorkCenterLookups = ClientLookup[];\r\n\r\nexport enum WorkCenterActionKey {\r\n LoadRuntime = 'loadRuntime',\r\n}\r\n\r\nexport const WORK_CENTER_QUERY_VERSION = 1;\r\nexport const WORK_CENTER_MAX_PAGE_SIZE = 100;\r\nexport const WORK_CENTER_MAX_FILTERS = 20;\r\nexport const WORK_CENTER_MAX_SORT = 5;\r\n\r\n/**\r\n * Backend column key carrying the row's LevelData display label\r\n * (`extra.levelDataName`). Grouping by it maps to a single backend sort on the\r\n * same key — see `WORK_CENTER_LEVEL_GROUP_FIELD` for the grouping identity.\r\n */\r\nexport const WORK_CENTER_LEVEL_NAME_KEY = 'levelDataName';\r\n\r\n/**\r\n * Synthetic per-row field holding the *identity* behind the Level Name column.\r\n * The visible label is ambiguous (two LevelData records may share a name), so\r\n * rows are bucketed by `context.levelDataId` instead — except rows with no\r\n * visible label, which get an empty identity so they all collapse into the one\r\n * shared \"—\" group the backend contract requires.\r\n */\r\nexport const WORK_CENTER_LEVEL_GROUP_FIELD = '__mtLevelGroup';\r\n\r\n/** Rendered in place of a missing / restricted LevelData label. */\r\nexport const WORK_CENTER_EMPTY_LABEL = '—';\r\n\r\n/**\r\n * Bootstrap `group` value meaning \"the user turned grouping off\". Needed\r\n * because an absent `group` means \"not chosen yet\" and falls back to the\r\n * default grouping — without a distinct value, clearing the group would be\r\n * undone by the next navigation.\r\n */\r\nexport const WORK_CENTER_GROUP_NONE = 'none';\r\n\r\nexport interface ApiEnvelope<T> {\r\n endpoint: string | null;\r\n status: number;\r\n code: 1 | 2;\r\n locale: string | null;\r\n message: string | null;\r\n errors: unknown;\r\n data: T;\r\n cacheSession: string | null;\r\n}\r\n\r\nexport interface TranslatableDto {\r\n display: string;\r\n en: string;\r\n ar: string;\r\n}\r\n\r\nexport interface WorkCenterSortRule {\r\n field: string;\r\n dir: 'asc' | 'desc';\r\n}\r\n\r\nexport type WorkCenterFilterOperator =\r\n | 'Eq'\r\n | 'Neq'\r\n | 'In'\r\n | 'Contains'\r\n | 'StartsWith'\r\n | 'Gt'\r\n | 'Gte'\r\n | 'Lt'\r\n | 'Lte'\r\n | 'Between'\r\n | 'IsNull'\r\n | 'IsNotNull';\r\n\r\nexport interface WorkCenterFilterRule {\r\n field: string;\r\n op: WorkCenterFilterOperator;\r\n value?: unknown;\r\n values?: unknown[];\r\n from?: unknown;\r\n to?: unknown;\r\n}\r\n\r\nexport interface WorkCenterRuntimeProperty {\r\n id?: number;\r\n key: string;\r\n normalizedKey?: string;\r\n name?: TranslatableDto;\r\n description?: TranslatableDto;\r\n viewType?: string;\r\n}\r\n\r\nexport interface WorkCenterRuntimeOperatorOption {\r\n value: WorkCenterFilterOperator;\r\n display?: TranslatableDto;\r\n}\r\n\r\nexport interface WorkCenterRuntimeFilterSchema {\r\n properties?: WorkCenterRuntimeProperty[];\r\n allowedFields?: string[];\r\n allowedOperators: Array<\r\n WorkCenterFilterOperator | WorkCenterRuntimeOperatorOption\r\n >;\r\n}\r\n\r\nexport interface WorkCenterColumnsConfig {\r\n columns?: string[];\r\n properties?: WorkCenterRuntimeProperty[];\r\n}\r\n\r\nexport interface WorkCenterRuntimeRequest {\r\n area: WorkCenterArea;\r\n templateId?: number | null;\r\n levelDataId?: number | null;\r\n selectedCardKey?: string | null;\r\n page: number;\r\n pageSize: number;\r\n sort: WorkCenterSortRule[];\r\n runtimeFilters: WorkCenterFilterRule[];\r\n includeStats: boolean;\r\n}\r\n\r\nexport interface WorkCenterRuntimeCard {\r\n key: string;\r\n name: TranslatableDto;\r\n icon: string | null;\r\n urlTemplate?: string | null;\r\n runtimeFilterSchema?: WorkCenterRuntimeFilterSchema | null;\r\n columnsConfig?: WorkCenterColumnsConfig | null;\r\n count: number;\r\n isAvailable: boolean;\r\n}\r\n\r\nexport interface WorkCenterRuntimeStatsItem {\r\n key: string;\r\n label: TranslatableDto;\r\n count: number;\r\n /**\r\n * Backend-owned accent color for the KPI card (typically a `#hex` status\r\n * color). `null` means \"no color configured\" — the card falls back to the\r\n * neutral theme accent. Never derive a color from `key`/`label`.\r\n */\r\n color?: string | null;\r\n}\r\n\r\nexport interface WorkCenterRuntimePagination {\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n}\r\n\r\nexport interface WorkCenterRuntimeSelectedCard {\r\n key: string;\r\n pagination: WorkCenterRuntimePagination;\r\n stats: WorkCenterRuntimeStatsItem[];\r\n items: Record<string, unknown>[];\r\n runtimeFilterSchema?: WorkCenterRuntimeFilterSchema | null;\r\n columnsConfig?: WorkCenterColumnsConfig | null;\r\n}\r\n\r\nexport interface WorkCenterRuntimeWarningDto {\r\n code: string;\r\n message: string;\r\n cardKey: string | null;\r\n source: string | null;\r\n}\r\n\r\nexport interface WorkCenterRuntimeResponseData {\r\n area: WorkCenterArea;\r\n cards: WorkCenterRuntimeCard[];\r\n selectedCard: WorkCenterRuntimeSelectedCard | null;\r\n warnings: WorkCenterRuntimeWarningDto[];\r\n}\r\n\r\nexport interface WorkCenterItemBasicInfoData {\r\n cardKey: string | null;\r\n sourceType: string | null;\r\n type: string | null;\r\n item: Record<string, unknown> | null;\r\n warnings: WorkCenterRuntimeWarningDto[];\r\n}\r\n\r\nexport interface WorkCenterRuntimeItemAction {\r\n actionKey: string;\r\n actionName?: TranslatableDto | null;\r\n httpMethod?: string | null;\r\n url?: string | null;\r\n isAvailable?: boolean;\r\n afterSuccess?: WorkCenterItemActionAfterSuccess | null;\r\n stepIds?: Array<number | string>;\r\n needConfirmation?: boolean;\r\n payloadKeys?: string[];\r\n requiredPayloadKeys?: string[];\r\n payloadTemplate?: Record<string, unknown> | null;\r\n formId?: string | number | null;\r\n}\r\n\r\nexport type WorkCenterItemActionAfterSuccess = 'refresh' | 'close';\r\n\r\nexport interface WorkCenterItemActionExecutionResult {\r\n actionKey: string;\r\n afterSuccess: WorkCenterItemActionAfterSuccess;\r\n}\r\n\r\nexport interface WorkCenterPreviewLevelTarget {\r\n levelId: number | string;\r\n levelDataId: number | string;\r\n /**\r\n * Module the previewed item belongs to, when the item resolves to one. The\r\n * host uses it to land on that module's workspace tab instead of the\r\n * workspace default tab.\r\n */\r\n moduleId?: number | string | null;\r\n /**\r\n * Display name of that module, when the item resolves to one. Used to label\r\n * the preview button as \"Preview {module name}\" instead of the generic\r\n * \"Preview Level\".\r\n */\r\n moduleName?: string | null;\r\n}\r\n\r\nexport interface WorkCenterItemActionsData {\r\n cardKey: string | null;\r\n sourceType: string | null;\r\n type: string | null;\r\n context: Record<string, unknown> | null;\r\n actions: WorkCenterRuntimeItemAction[];\r\n warnings: WorkCenterRuntimeWarningDto[];\r\n}\r\n\r\nexport interface WorkCenterContext {\r\n area: WorkCenterArea;\r\n templateId: number | null;\r\n levelDataId: number | null;\r\n selectedCardKey: string | null;\r\n page: number;\r\n pageSize: number;\r\n sort: WorkCenterSortRule[];\r\n runtimeFilters: WorkCenterFilterRule[];\r\n includeStats: boolean;\r\n}\r\n\r\nexport interface WorkCenterAreaState {\r\n context: WorkCenterContext;\r\n /**\r\n * Rules from the page-header property-filter-builder. Combined with\r\n * `columnFilters` to produce `context.runtimeFilters` sent to the BE.\r\n */\r\n headerFilters: WorkCenterFilterRule[];\r\n /**\r\n * Rules translated from the in-table column filters. Combined with\r\n * `headerFilters` to produce `context.runtimeFilters` sent to the BE.\r\n * Same `(field, op)` pair from this slice overrides a header rule.\r\n */\r\n columnFilters: WorkCenterFilterRule[];\r\n /**\r\n * Column key the table groups rows by. UI-only — never part of the runtime\r\n * request; grouping is expressed to the backend as `context.sort`.\r\n */\r\n groupBy: string | null;\r\n menuItems: ClientPageMenuItem[];\r\n rows: Record<string, unknown>[];\r\n columns: ColumnDef[];\r\n kpis: StatisticCardData[];\r\n runtimeFilterSchema: WorkCenterRuntimeFilterSchema | null;\r\n totalCount: number;\r\n warnings: WorkCenterRuntimeWarningDto[];\r\n lastLoadedAt: string | null;\r\n}\r\n\r\nexport interface WorkCenterStateModel extends LoadingStateShape<WorkCenterActionKey> {\r\n activeArea: WorkCenterArea;\r\n byArea: Record<WorkCenterArea, WorkCenterAreaState>;\r\n lookups: WorkCenterLookups;\r\n}\r\n\r\nexport interface WorkCenterHydratePatch {\r\n selectedCardKey?: string | null;\r\n page?: number;\r\n pageSize?: number;\r\n templateId?: number | null;\r\n levelDataId?: number | null;\r\n sort?: WorkCenterSortRule[];\r\n runtimeFilters?: WorkCenterFilterRule[];\r\n}\r\n\r\nexport interface WorkCenterBootstrapInputs {\r\n card?: unknown;\r\n page?: unknown;\r\n pageSize?: unknown;\r\n templateId?: unknown;\r\n levelDataId?: unknown;\r\n sort?: unknown;\r\n filters?: unknown;\r\n /** Grouped column key, so a grouped view survives reload / deep-link. */\r\n group?: unknown;\r\n}\r\n\r\nexport interface WorkCenterItemModalComponentInput {\r\n contextKey: WorkCenterItemContextKey;\r\n}\r\n\r\nexport interface WorkCenterItemModalOptions {\r\n component?: Type<unknown> | null;\r\n header?: string;\r\n styleClass?: string;\r\n appendTo?: string | HTMLElement | null;\r\n position?: 'start' | 'end' | 'left' | 'right';\r\n}\r\n\r\nexport interface WorkCenterClientFormModalData {\r\n moduleKey: string;\r\n moduleId?: number | string;\r\n levelId?: number | string;\r\n levelDataId?: number | string;\r\n moduleDataId?: number | string;\r\n}\r\n\r\nexport interface WorkCenterClientFormModalOptions {\r\n data?: Partial<WorkCenterClientFormModalData>;\r\n operationKey?: string;\r\n header?: string;\r\n styleClass?: string;\r\n closeOnPendingApproval?: boolean;\r\n buttonLabel?: string;\r\n buttonIcon?: string;\r\n lookups?: ClientLookup[];\r\n}\r\n\r\nexport type WorkCenterLoadReason =\r\n | 'route-enter'\r\n | 'menu-change'\r\n | 'filters-change'\r\n | 'group-change'\r\n | 'table-lazy'\r\n | 'refresh'\r\n | 'manual';\r\n","import { ClientPageMenuItem } from '@masterteam/components/client-page-menu';\r\nimport { StatisticCardData } from '@masterteam/components/statistic-card';\r\nimport { ColumnDef } from '@masterteam/components/table';\r\n\r\nimport {\r\n WorkCenterArea,\r\n WorkCenterAreaState,\r\n WorkCenterBootstrapInputs,\r\n WorkCenterColumnsConfig,\r\n WorkCenterContext,\r\n WorkCenterFilterOperator,\r\n WorkCenterFilterRule,\r\n WorkCenterRuntimeProperty,\r\n WorkCenterRuntimeCard,\r\n WorkCenterRuntimeResponseData,\r\n WorkCenterRuntimeStatsItem,\r\n WorkCenterSortRule,\r\n WorkCenterStateModel,\r\n WORK_CENTER_EMPTY_LABEL,\r\n WORK_CENTER_GROUP_NONE,\r\n WORK_CENTER_LEVEL_GROUP_FIELD,\r\n WORK_CENTER_LEVEL_NAME_KEY,\r\n WORK_CENTER_MAX_FILTERS,\r\n WORK_CENTER_MAX_PAGE_SIZE,\r\n WORK_CENTER_MAX_SORT,\r\n} from './work-center.model';\r\n\r\nconst AREA_COLORS = ['violet', 'blue', 'emerald', 'amber', 'teal'];\r\n/** Fallback accent rotation used only when the backend sends no stat color. */\r\nconst KPI_COLORS = ['violet', 'blue', 'emerald', 'amber', 'teal'];\r\n/**\r\n * Default page size when bootstrapping a work-center area. Matches the table\r\n * paginator default so the first BE request asks for exactly one rendered\r\n * page.\r\n */\r\nconst WORK_CENTER_DEFAULT_PAGE_SIZE = 20;\r\nconst WORK_CENTER_LOCAL_FETCH_SIZE = WORK_CENTER_DEFAULT_PAGE_SIZE;\r\n\r\ntype WorkCenterTableColumn = WorkCenterRuntimeProperty &\r\n ColumnDef & {\r\n key: string;\r\n label: string;\r\n type: 'entity';\r\n };\r\n\r\nconst FILTER_OPERATORS: Set<WorkCenterFilterOperator> = new Set([\r\n 'Eq',\r\n 'Neq',\r\n 'In',\r\n 'Contains',\r\n 'StartsWith',\r\n 'Gt',\r\n 'Gte',\r\n 'Lt',\r\n 'Lte',\r\n 'Between',\r\n 'IsNull',\r\n 'IsNotNull',\r\n]);\r\n\r\nfunction clampPage(value: number | undefined, fallback = 1): number {\r\n if (!Number.isFinite(value)) return fallback;\r\n return Math.max(1, Math.floor(value as number));\r\n}\r\n\r\nfunction clampPageSize(\r\n value: number | undefined,\r\n fallback = WORK_CENTER_LOCAL_FETCH_SIZE,\r\n): number {\r\n if (!Number.isFinite(value)) return fallback;\r\n const parsed = Math.floor(value as number);\r\n return Math.min(WORK_CENTER_MAX_PAGE_SIZE, Math.max(1, parsed));\r\n}\r\n\r\nfunction sanitizeSort(\r\n rules: WorkCenterSortRule[] | undefined,\r\n): WorkCenterSortRule[] {\r\n if (!Array.isArray(rules)) return [];\r\n return rules\r\n .filter(\r\n (rule): rule is WorkCenterSortRule =>\r\n typeof rule?.field === 'string' &&\r\n rule.field.length > 0 &&\r\n (rule.dir === 'asc' || rule.dir === 'desc'),\r\n )\r\n .slice(0, WORK_CENTER_MAX_SORT);\r\n}\r\n\r\nfunction sanitizeFilters(\r\n filters: WorkCenterFilterRule[] | undefined,\r\n): WorkCenterFilterRule[] {\r\n if (!Array.isArray(filters)) return [];\r\n\r\n return filters\r\n .filter(\r\n (filter): filter is WorkCenterFilterRule =>\r\n typeof filter?.field === 'string' &&\r\n filter.field.length > 0 &&\r\n typeof filter?.op === 'string' &&\r\n FILTER_OPERATORS.has(filter.op),\r\n )\r\n .slice(0, WORK_CENTER_MAX_FILTERS);\r\n}\r\n\r\nfunction parseJson(value: unknown): unknown {\r\n if (typeof value !== 'string') return value;\r\n if (!value.trim()) return null;\r\n\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction toOptionalInt(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') return null;\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? Math.floor(parsed) : null;\r\n}\r\n\r\nfunction toSelectedCardKey(value: unknown): string | null {\r\n if (typeof value !== 'string') return null;\r\n const parsed = value.trim();\r\n return parsed.length ? parsed : null;\r\n}\r\n\r\nfunction parseSortInput(value: unknown): WorkCenterSortRule[] {\r\n const parsed = parseJson(value);\r\n return Array.isArray(parsed)\r\n ? sanitizeSort(parsed as WorkCenterSortRule[])\r\n : [];\r\n}\r\n\r\n/**\r\n * Resolves the grouped column key from bootstrap inputs.\r\n *\r\n * A missing `group` keeps whatever state already has, so an unrelated\r\n * navigation doesn't drop the user's grouping. `WORK_CENTER_GROUP_NONE` is the\r\n * only way to express \"turn it off\" — a bare `null` can't, because it is also\r\n * what a host passes for an absent query param.\r\n */\r\nexport function resolveGroupByFromInputs(\r\n current: string | null,\r\n group: unknown,\r\n): string | null {\r\n if (!hasParamValue(group) || typeof group !== 'string') {\r\n return current;\r\n }\r\n\r\n const parsed = group.trim();\r\n if (!parsed || parsed === WORK_CENTER_GROUP_NONE) {\r\n return null;\r\n }\r\n\r\n return parsed;\r\n}\r\n\r\n/**\r\n * The card these inputs resolve to — the same rule `buildContextFromInputs`\r\n * applies, exposed so callers can detect a card switch before building the\r\n * context (what survives the switch depends on it).\r\n */\r\nexport function resolveSelectedCardKeyFromInputs(\r\n currentContext: WorkCenterContext,\r\n inputs: WorkCenterBootstrapInputs = {},\r\n): string | null {\r\n return toSelectedCardKey(inputs.card) ?? currentContext.selectedCardKey;\r\n}\r\n\r\nfunction parseFiltersInput(value: unknown): WorkCenterFilterRule[] {\r\n const parsed = parseJson(value);\r\n return Array.isArray(parsed)\r\n ? sanitizeFilters(parsed as WorkCenterFilterRule[])\r\n : [];\r\n}\r\n\r\nfunction hasParamValue(value: unknown): boolean {\r\n return value !== null && value !== undefined && value !== '';\r\n}\r\n\r\nfunction toLabel(value: string): string {\r\n const segment = value.split('.').pop() ?? value;\r\n return segment\r\n .replace(/[_-]/g, ' ')\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .replace(/\\s+/g, ' ')\r\n .trim()\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n}\r\n\r\nfunction toViewType(viewType: string | undefined, key: string): string {\r\n if (viewType?.trim()) {\r\n return viewType;\r\n }\r\n\r\n return key.toLowerCase().includes('date') ? 'Date' : 'Text';\r\n}\r\n\r\nfunction normalizeColumnKey(key: string): string {\r\n return key\r\n .trim()\r\n .toLowerCase()\r\n .replace(/[\\s._-]+/g, '');\r\n}\r\n\r\nfunction resolveColumnWeight(key: string): number {\r\n const normalizedKey = normalizeColumnKey(key);\r\n\r\n if (normalizedKey.includes('title')) return 26;\r\n if (\r\n normalizedKey.includes('subtitle') ||\r\n normalizedKey.includes('description')\r\n ) {\r\n return 20;\r\n }\r\n if (normalizedKey.includes('status')) return 14;\r\n if (normalizedKey.includes('progress')) return 17;\r\n if (\r\n normalizedKey.includes('createdby') ||\r\n normalizedKey.includes('assignedto') ||\r\n normalizedKey.includes('owner') ||\r\n normalizedKey.includes('user')\r\n ) {\r\n return 20;\r\n }\r\n if (\r\n normalizedKey.includes('duedate') ||\r\n normalizedKey.includes('createdat') ||\r\n normalizedKey.includes('updatedat') ||\r\n normalizedKey.endsWith('date')\r\n ) {\r\n return 15;\r\n }\r\n if (normalizedKey.includes('priority')) return 12;\r\n\r\n return 16;\r\n}\r\n\r\nfunction applySmartColumnWidths(\r\n columns: WorkCenterTableColumn[],\r\n): WorkCenterTableColumn[] {\r\n const dynamicWeightTotal = columns.reduce((total, column) => {\r\n return column.width?.trim()\r\n ? total\r\n : total + resolveColumnWeight(column.key);\r\n }, 0);\r\n\r\n if (!dynamicWeightTotal) {\r\n return columns;\r\n }\r\n\r\n return columns.map((column) => {\r\n if (column.width?.trim()) {\r\n return column;\r\n }\r\n\r\n const width = (\r\n (resolveColumnWeight(column.key) / dynamicWeightTotal) *\r\n 100\r\n ).toFixed(2);\r\n\r\n return {\r\n ...column,\r\n width: `${width}%`,\r\n };\r\n });\r\n}\r\n\r\nfunction getValue(record: Record<string, unknown>, key: string): unknown {\r\n return key.split('.').reduce<unknown>((current, part) => {\r\n if (!current || typeof current !== 'object') {\r\n return undefined;\r\n }\r\n\r\n return (current as Record<string, unknown>)[part];\r\n }, record);\r\n}\r\n\r\nfunction flattenRuntimeRow(\r\n row: Record<string, unknown>,\r\n): Record<string, unknown> {\r\n const extra = row['extra'];\r\n\r\n if (!extra || typeof extra !== 'object' || Array.isArray(extra)) {\r\n return row;\r\n }\r\n\r\n return {\r\n ...(extra as Record<string, unknown>),\r\n ...row,\r\n };\r\n}\r\n\r\nfunction toDisplayValue(\r\n value: unknown,\r\n column: WorkCenterTableColumn,\r\n): unknown {\r\n if (column.viewType !== 'Text') {\r\n return value;\r\n }\r\n\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n const display = (value as Record<string, unknown>)['display'];\r\n return typeof display === 'string' ? display : value;\r\n}\r\n\r\nfunction buildColumnsFromProperties(\r\n properties: WorkCenterRuntimeProperty[],\r\n): WorkCenterTableColumn[] {\r\n return properties\r\n .filter(\r\n (property) =>\r\n typeof property?.key === 'string' && property.key.length > 0,\r\n )\r\n .map((property) => ({\r\n ...property,\r\n key: property.key,\r\n label:\r\n property.name?.display ||\r\n property.name?.en ||\r\n property.name?.ar ||\r\n toLabel(property.key),\r\n type: 'entity' as const,\r\n viewType: toViewType(property.viewType, property.key),\r\n ...withLevelNameGrouping(property.key),\r\n }));\r\n}\r\n\r\n/**\r\n * Level Name is a free-text column, so the table's cardinality heuristic would\r\n * never offer it in the group picker. The backend orders the whole result set\r\n * by that label before paging, which makes its groups contiguous and therefore\r\n * groupable — so opt it in explicitly and point the table at the identity\r\n * field instead of the ambiguous label.\r\n */\r\nfunction withLevelNameGrouping(\r\n key: string,\r\n): Pick<ColumnDef, 'groupable' | 'groupKey'> {\r\n return key === WORK_CENTER_LEVEL_NAME_KEY\r\n ? { groupable: true, groupKey: WORK_CENTER_LEVEL_GROUP_FIELD }\r\n : {};\r\n}\r\n\r\nfunction buildColumns(\r\n columnsConfig: WorkCenterColumnsConfig | null | undefined,\r\n): WorkCenterTableColumn[] {\r\n const propertyColumns = buildColumnsFromProperties(\r\n columnsConfig?.properties ?? [],\r\n );\r\n if (propertyColumns.length) {\r\n return applySmartColumnWidths(propertyColumns);\r\n }\r\n\r\n const keys = columnsConfig?.columns?.length ? columnsConfig.columns : [];\r\n return applySmartColumnWidths(\r\n keys.map((key) => ({\r\n key,\r\n label: toLabel(key),\r\n type: 'entity' as const,\r\n viewType: toViewType(undefined, key),\r\n ...withLevelNameGrouping(key),\r\n })),\r\n );\r\n}\r\n\r\nfunction toDisplayRows(\r\n rows: Record<string, unknown>[],\r\n columns: WorkCenterTableColumn[],\r\n): Record<string, unknown>[] {\r\n const hasLevelName = columns.some(\r\n (column) => column.key === WORK_CENTER_LEVEL_NAME_KEY,\r\n );\r\n\r\n return rows.map((row) => {\r\n const sourceRow = flattenRuntimeRow(row);\r\n const displayRow = { ...sourceRow };\r\n\r\n for (const column of columns) {\r\n const value = getValue(sourceRow, column.key);\r\n displayRow[column.key] = {\r\n ...column,\r\n value: toDisplayValue(value, column),\r\n };\r\n }\r\n\r\n if (hasLevelName) {\r\n applyLevelNameGrouping(displayRow, sourceRow);\r\n }\r\n\r\n return displayRow;\r\n });\r\n}\r\n\r\n/**\r\n * Adds the Level Name grouping identity to a display row and normalizes a\r\n * missing / restricted label to `—`.\r\n *\r\n * The backend omits `extra.levelDataName` when the record is missing, deleted,\r\n * or the user can't see it — those rows must share one group and must never\r\n * expose the numeric id as a label. Rows that do have a label are keyed by\r\n * `context.levelDataId` so two records with the same name stay separate.\r\n */\r\nfunction applyLevelNameGrouping(\r\n displayRow: Record<string, unknown>,\r\n sourceRow: Record<string, unknown>,\r\n): void {\r\n const cell = displayRow[WORK_CENTER_LEVEL_NAME_KEY] as\r\n | { value?: unknown }\r\n | undefined;\r\n const label = typeof cell?.value === 'string' ? cell.value.trim() : '';\r\n\r\n if (!label) {\r\n displayRow[WORK_CENTER_LEVEL_NAME_KEY] = {\r\n ...cell,\r\n value: WORK_CENTER_EMPTY_LABEL,\r\n };\r\n displayRow[WORK_CENTER_LEVEL_GROUP_FIELD] = '';\r\n return;\r\n }\r\n\r\n const levelDataId = getValue(sourceRow, 'context.levelDataId');\r\n const hasId =\r\n levelDataId !== null && levelDataId !== undefined && levelDataId !== '';\r\n\r\n displayRow[WORK_CENTER_LEVEL_GROUP_FIELD] = hasId\r\n ? `id:${String(levelDataId)}`\r\n : `name:${label}`;\r\n}\r\n\r\nfunction buildMenuItems(cards: WorkCenterRuntimeCard[]): ClientPageMenuItem[] {\r\n const mapped = cards.map((card, index) => ({\r\n key: card.key,\r\n title:\r\n card.name?.display || card.name?.en || card.name?.ar || toLabel(card.key),\r\n subtitle: undefined,\r\n count: card.count ?? 0,\r\n color: AREA_COLORS[index % AREA_COLORS.length],\r\n icon: card.icon ?? 'custom.task',\r\n isAvailable: card.isAvailable !== false,\r\n }));\r\n\r\n const available = mapped.filter((card) => card.isAvailable);\r\n const source = available.length ? available : mapped;\r\n\r\n return source.map((card) => ({\r\n key: card.key,\r\n title: card.title,\r\n subtitle: undefined,\r\n count: card.count ?? 0,\r\n color: card.color,\r\n icon: card.icon ?? 'custom.task',\r\n }));\r\n}\r\n\r\n/**\r\n * KPI accent colors are owned by the backend (`stats[].color`) and used\r\n * verbatim. Only when the backend sends no color do we fall back to the\r\n * previous `KPI_COLORS` rotation by card position — never map a color from\r\n * the stat key or label.\r\n */\r\nfunction buildKpis(\r\n stats: WorkCenterRuntimeStatsItem[],\r\n fallbackIcon: string | null,\r\n): StatisticCardData[] {\r\n return stats.map((stat, index) => ({\r\n title: String(stat.count ?? 0),\r\n subTitle: stat.label.display,\r\n icon: (fallbackIcon ?? 'custom.task') as any,\r\n color: stat.color?.trim() || KPI_COLORS[index % KPI_COLORS.length],\r\n }));\r\n}\r\n\r\n/** The backend sort that renders a grouped column as contiguous rows. */\r\nfunction sortForGroup(groupBy: string | null): WorkCenterSortRule[] {\r\n return groupBy ? [{ field: groupBy, dir: 'asc' }] : [];\r\n}\r\n\r\nfunction createDefaultContext(area: WorkCenterArea): WorkCenterContext {\r\n return {\r\n area,\r\n templateId: null,\r\n levelDataId: null,\r\n selectedCardKey: null,\r\n page: 1,\r\n pageSize: WORK_CENTER_LOCAL_FETCH_SIZE,\r\n sort: [],\r\n runtimeFilters: [],\r\n includeStats: true,\r\n };\r\n}\r\n\r\nfunction createDefaultAreaState(area: WorkCenterArea): WorkCenterAreaState {\r\n return {\r\n context: createDefaultContext(area),\r\n headerFilters: [],\r\n columnFilters: [],\r\n groupBy: null,\r\n menuItems: [],\r\n rows: [],\r\n columns: [],\r\n kpis: [],\r\n runtimeFilterSchema: null,\r\n totalCount: 0,\r\n warnings: [],\r\n lastLoadedAt: null,\r\n };\r\n}\r\n\r\n/**\r\n * Combines header (property-filter-builder) and column (in-table) rules into\r\n * the single `runtimeFilters` payload the BE expects. Header rules come\r\n * first; a column rule with the same `(field, op)` pair replaces the matching\r\n * header rule.\r\n */\r\nexport function mergeRuntimeFilters(\r\n headerFilters: WorkCenterFilterRule[] | undefined,\r\n columnFilters: WorkCenterFilterRule[] | undefined,\r\n): WorkCenterFilterRule[] {\r\n const seen = new Map<string, WorkCenterFilterRule>();\r\n const ordered: string[] = [];\r\n const push = (rule: WorkCenterFilterRule) => {\r\n const key = `${rule.field}::${rule.op}`;\r\n if (!seen.has(key)) ordered.push(key);\r\n seen.set(key, rule);\r\n };\r\n\r\n (headerFilters ?? []).forEach(push);\r\n (columnFilters ?? []).forEach(push);\r\n\r\n return sanitizeFilters(ordered.map((key) => seen.get(key)!));\r\n}\r\n\r\nexport const WORK_CENTER_DEFAULT_STATE: WorkCenterStateModel = {\r\n activeArea: 'MyInbox',\r\n byArea: {\r\n MyInbox: createDefaultAreaState('MyInbox'),\r\n TasksCenter: createDefaultAreaState('TasksCenter'),\r\n Workspace: createDefaultAreaState('Workspace'),\r\n },\r\n lookups: [],\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\nexport function normalizeContext(\r\n context: WorkCenterContext,\r\n): WorkCenterContext {\r\n return {\r\n ...context,\r\n page: clampPage(context.page, 1),\r\n pageSize: clampPageSize(context.pageSize, WORK_CENTER_LOCAL_FETCH_SIZE),\r\n sort: sanitizeSort(context.sort),\r\n runtimeFilters: sanitizeFilters(context.runtimeFilters),\r\n };\r\n}\r\n\r\nexport function buildContextFromInputs(\r\n currentContext: WorkCenterContext,\r\n area: WorkCenterArea,\r\n inputs: WorkCenterBootstrapInputs = {},\r\n /**\r\n * Already-resolved grouped column. Grouping is executed as a backend sort,\r\n * so when the host supplies no explicit `sort` the grouped column defines\r\n * it — that is what makes the default grouping reach the very first request\r\n * instead of costing a second round trip.\r\n */\r\n groupBy: string | null = null,\r\n): WorkCenterContext {\r\n const parsedCardKey = toSelectedCardKey(inputs.card);\r\n const parsedTemplateId = toOptionalInt(inputs.templateId);\r\n const parsedLevelDataId = toOptionalInt(inputs.levelDataId);\r\n const hasPageInput = hasParamValue(inputs.page);\r\n const parsedPage = hasPageInput ? toOptionalInt(inputs.page) : null;\r\n const parsedPageSize = toOptionalInt(inputs.pageSize);\r\n\r\n return normalizeContext({\r\n ...currentContext,\r\n area,\r\n selectedCardKey: parsedCardKey ?? currentContext.selectedCardKey,\r\n page: hasPageInput ? (parsedPage ?? 1) : 1,\r\n pageSize: parsedPageSize ?? currentContext.pageSize,\r\n templateId: parsedTemplateId ?? currentContext.templateId,\r\n levelDataId: parsedLevelDataId ?? currentContext.levelDataId,\r\n sort: hasParamValue(inputs.sort)\r\n ? parseSortInput(inputs.sort)\r\n : groupBy\r\n ? sortForGroup(groupBy)\r\n : inputs.sort === null\r\n ? []\r\n : currentContext.sort,\r\n runtimeFilters: hasParamValue(inputs.filters)\r\n ? parseFiltersInput(inputs.filters)\r\n : inputs.filters === null\r\n ? []\r\n : currentContext.runtimeFilters,\r\n });\r\n}\r\n\r\nexport function isSameContext(\r\n left: WorkCenterContext,\r\n right: WorkCenterContext,\r\n): boolean {\r\n return (\r\n left.area === right.area &&\r\n left.templateId === right.templateId &&\r\n left.levelDataId === right.levelDataId &&\r\n left.selectedCardKey === right.selectedCardKey &&\r\n left.page === right.page &&\r\n left.pageSize === right.pageSize &&\r\n left.includeStats === right.includeStats &&\r\n JSON.stringify(left.sort) === JSON.stringify(right.sort) &&\r\n JSON.stringify(left.runtimeFilters) === JSON.stringify(right.runtimeFilters)\r\n );\r\n}\r\n\r\nexport function mapRuntimeResponse(\r\n current: WorkCenterAreaState,\r\n response: WorkCenterRuntimeResponseData,\r\n): WorkCenterAreaState {\r\n const selectedCard = response.selectedCard;\r\n const menuItems = buildMenuItems(response.cards);\r\n const requestedCardKey =\r\n selectedCard?.key ?? current.context.selectedCardKey ?? null;\r\n const selectedCardKey =\r\n requestedCardKey &&\r\n response.cards.some((card) => card.key === requestedCardKey)\r\n ? requestedCardKey\r\n : (menuItems[0]?.key ?? response.cards[0]?.key ?? null);\r\n const selectedCardFromList = selectedCardKey\r\n ? (response.cards.find((card) => card.key === selectedCardKey) ?? null)\r\n : null;\r\n const selectedMenuItem = menuItems.find(\r\n (item) => item.key === selectedCardKey,\r\n );\r\n const columns = buildColumns(\r\n selectedCard?.columnsConfig ?? selectedCardFromList?.columnsConfig,\r\n );\r\n const rows = toDisplayRows(selectedCard?.items ?? [], columns);\r\n const kpis = buildKpis(\r\n selectedCard?.stats ?? [],\r\n selectedMenuItem?.icon ?? null,\r\n );\r\n\r\n // A card that doesn't advertise the grouped column can't be grouped by it —\r\n // drop it here rather than letting the table discover the stale column and\r\n // bounce a second request. The sort goes with it when it was the one the\r\n // grouping asked for.\r\n const groupBy =\r\n current.groupBy && columns.some((column) => column.key === current.groupBy)\r\n ? current.groupBy\r\n : null;\r\n const droppedGroup = !groupBy && current.groupBy;\r\n const sort =\r\n droppedGroup && isSortForGroup(current.context.sort, current.groupBy)\r\n ? []\r\n : current.context.sort;\r\n\r\n return {\r\n ...current,\r\n groupBy,\r\n menuItems,\r\n rows,\r\n columns,\r\n kpis,\r\n runtimeFilterSchema:\r\n selectedCard?.runtimeFilterSchema ??\r\n selectedCardFromList?.runtimeFilterSchema ??\r\n null,\r\n totalCount: selectedCard?.pagination.totalCount ?? 0,\r\n warnings: response.warnings ?? [],\r\n lastLoadedAt: new Date().toISOString(),\r\n context: {\r\n ...current.context,\r\n selectedCardKey,\r\n sort,\r\n page: selectedCard?.pagination.page ?? current.context.page,\r\n pageSize: selectedCard?.pagination.pageSize ?? current.context.pageSize,\r\n },\r\n };\r\n}\r\n\r\n/** True when `sort` is exactly the single rule a grouping would produce. */\r\nfunction isSortForGroup(\r\n sort: WorkCenterSortRule[],\r\n groupBy: string | null,\r\n): boolean {\r\n return !!groupBy && sort.length === 1 && sort[0].field === groupBy;\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { handleApiRequest } from '@masterteam/components';\r\nimport { EMPTY, catchError, map } from 'rxjs';\r\n\r\nimport {\r\n EnterArea,\r\n HydrateFromContext,\r\n LoadRuntime,\r\n SetParams,\r\n SetLookups,\r\n ApplyHeaderFilters,\r\n ApplyColumnFilters,\r\n ClearAllFilters,\r\n SelectCard,\r\n SetGroupBy,\r\n} from './work-center.actions';\r\nimport {\r\n ApiEnvelope,\r\n WorkCenterActionKey,\r\n WorkCenterArea,\r\n WorkCenterAreaState,\r\n WorkCenterFilterRule,\r\n WorkCenterRuntimeFilterSchema,\r\n WorkCenterRuntimeRequest,\r\n WorkCenterRuntimeResponseData,\r\n WorkCenterSortRule,\r\n WorkCenterStateModel,\r\n} from './work-center.model';\r\nimport {\r\n buildContextFromInputs,\r\n isSameContext,\r\n mapRuntimeResponse,\r\n mergeRuntimeFilters,\r\n normalizeContext,\r\n resolveGroupByFromInputs,\r\n resolveSelectedCardKeyFromInputs,\r\n WORK_CENTER_DEFAULT_STATE,\r\n} from './work-center.state.helpers';\r\n\r\n@State<WorkCenterStateModel>({\r\n name: 'workCenter',\r\n defaults: WORK_CENTER_DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class WorkCenterState {\r\n private readonly http = inject(HttpClient);\r\n\r\n @Selector()\r\n static getState(state: WorkCenterStateModel): WorkCenterStateModel {\r\n return state;\r\n }\r\n\r\n @Selector()\r\n static activeArea(state: WorkCenterStateModel): WorkCenterArea {\r\n return state.activeArea;\r\n }\r\n\r\n @Selector([WorkCenterState.activeArea, WorkCenterState.getState])\r\n static activeSnapshot(\r\n activeArea: WorkCenterArea,\r\n state: WorkCenterStateModel,\r\n ): WorkCenterAreaState {\r\n return state.byArea[activeArea];\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static context(snapshot: WorkCenterAreaState) {\r\n return snapshot.context;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static menuItems(snapshot: WorkCenterAreaState) {\r\n return snapshot.menuItems;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static rows(snapshot: WorkCenterAreaState) {\r\n return snapshot.rows;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static columns(snapshot: WorkCenterAreaState) {\r\n return snapshot.columns;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static kpis(snapshot: WorkCenterAreaState) {\r\n return snapshot.kpis;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static runtimeFilterSchema(\r\n snapshot: WorkCenterAreaState,\r\n ): WorkCenterRuntimeFilterSchema | null {\r\n return snapshot.runtimeFilterSchema;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static headerFilters(snapshot: WorkCenterAreaState): WorkCenterFilterRule[] {\r\n return snapshot.headerFilters;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static columnFilters(snapshot: WorkCenterAreaState): WorkCenterFilterRule[] {\r\n return snapshot.columnFilters;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static groupBy(snapshot: WorkCenterAreaState): string | null {\r\n return snapshot.groupBy;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static totalCount(snapshot: WorkCenterAreaState): number {\r\n return snapshot.totalCount;\r\n }\r\n\r\n @Selector([WorkCenterState.activeSnapshot])\r\n static warnings(snapshot: WorkCenterAreaState) {\r\n return snapshot.warnings;\r\n }\r\n\r\n @Selector()\r\n static lookups(state: WorkCenterStateModel) {\r\n return state.lookups;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: WorkCenterStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(state: WorkCenterStateModel): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n @Action(EnterArea)\r\n enterArea(ctx: StateContext<WorkCenterStateModel>, action: EnterArea): void {\r\n if (ctx.getState().activeArea === action.area) return;\r\n ctx.patchState({ activeArea: action.area });\r\n }\r\n\r\n @Action(HydrateFromContext)\r\n hydrateFromContext(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: HydrateFromContext,\r\n ): void {\r\n const state = ctx.getState();\r\n const current = state.byArea[action.area];\r\n const nextContext = normalizeContext({\r\n ...current.context,\r\n ...action.patch,\r\n area: action.area,\r\n });\r\n\r\n if (\r\n state.activeArea === action.area &&\r\n isSameContext(current.context, nextContext)\r\n ) {\r\n return;\r\n }\r\n\r\n // External `runtimeFilters` writes are treated as header-slice writes so\r\n // the in-table column filter slice doesn't get stranded out of sync.\r\n const filtersChanged = action.patch.runtimeFilters !== undefined;\r\n const nextHeaderFilters = filtersChanged\r\n ? nextContext.runtimeFilters\r\n : current.headerFilters;\r\n const nextColumnFilters = filtersChanged ? [] : current.columnFilters;\r\n\r\n ctx.patchState({\r\n activeArea: action.area,\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: {\r\n ...current,\r\n headerFilters: nextHeaderFilters,\r\n columnFilters: nextColumnFilters,\r\n context: nextContext,\r\n },\r\n },\r\n });\r\n }\r\n\r\n @Action(SetParams)\r\n setParams(ctx: StateContext<WorkCenterStateModel>, action: SetParams) {\r\n const state = ctx.getState();\r\n const current = state.byArea[action.area];\r\n\r\n // A card switch invalidates everything scoped to the previous card. The\r\n // host usually drops those query params too, but a stale URL must not be\r\n // able to re-apply a filter on a field the new card doesn't have.\r\n const cardChanged =\r\n resolveSelectedCardKeyFromInputs(current.context, action.inputs) !==\r\n current.context.selectedCardKey;\r\n\r\n // Resolve grouping first: with no explicit `sort` input it is what defines\r\n // the backend sort.\r\n const nextGroupBy = resolveGroupByFromInputs(\r\n cardChanged ? null : current.groupBy,\r\n action.inputs?.group,\r\n );\r\n const builtContext = buildContextFromInputs(\r\n current.context,\r\n action.area,\r\n action.inputs,\r\n nextGroupBy,\r\n );\r\n const filtersFromInputs = action.inputs?.filters !== undefined;\r\n const nextContext =\r\n cardChanged && !filtersFromInputs\r\n ? { ...builtContext, runtimeFilters: [] }\r\n : builtContext;\r\n\r\n const areaChanged = state.activeArea !== action.area;\r\n const contextChanged = !isSameContext(current.context, nextContext);\r\n const groupChanged = nextGroupBy !== current.groupBy;\r\n const runtimeLoading = state.loadingActive.includes(\r\n WorkCenterActionKey.LoadRuntime,\r\n );\r\n const shouldLoad = areaChanged || contextChanged || !runtimeLoading;\r\n\r\n if (areaChanged || contextChanged || groupChanged) {\r\n // URL-derived filters land on the header slice. Anything previously\r\n // applied via the in-table column filters is dropped so the BE payload\r\n // matches what the user sees on the page header.\r\n const nextHeaderFilters = filtersFromInputs\r\n ? nextContext.runtimeFilters\r\n : cardChanged\r\n ? []\r\n : current.headerFilters;\r\n const nextColumnFilters =\r\n filtersFromInputs || cardChanged ? [] : current.columnFilters;\r\n\r\n ctx.patchState({\r\n activeArea: action.area,\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: {\r\n ...current,\r\n headerFilters: nextHeaderFilters,\r\n columnFilters: nextColumnFilters,\r\n groupBy: nextGroupBy,\r\n context: nextContext,\r\n },\r\n },\r\n });\r\n }\r\n\r\n if (!shouldLoad) return;\r\n return ctx.dispatch(new LoadRuntime(action.area, 'route-enter'));\r\n }\r\n\r\n @Action(SetLookups)\r\n setLookups(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: SetLookups,\r\n ): void {\r\n if (ctx.getState().lookups === action.lookups) {\r\n return;\r\n }\r\n\r\n ctx.patchState({\r\n lookups: Array.isArray(action.lookups) ? action.lookups : [],\r\n });\r\n }\r\n\r\n @Action(ApplyHeaderFilters)\r\n applyHeaderFilters(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: ApplyHeaderFilters,\r\n ) {\r\n return this.applyFilterSlice(ctx, action.area, {\r\n headerFilters: action.filters,\r\n });\r\n }\r\n\r\n @Action(ApplyColumnFilters)\r\n applyColumnFilters(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: ApplyColumnFilters,\r\n ) {\r\n return this.applyFilterSlice(ctx, action.area, {\r\n columnFilters: action.filters,\r\n });\r\n }\r\n\r\n @Action(SelectCard)\r\n selectCard(ctx: StateContext<WorkCenterStateModel>, action: SelectCard) {\r\n const state = ctx.getState();\r\n const current = state.byArea[action.area];\r\n\r\n if (current.context.selectedCardKey === action.selectedCardKey) {\r\n return;\r\n }\r\n\r\n ctx.patchState({\r\n activeArea: action.area,\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: {\r\n ...current,\r\n headerFilters: [],\r\n columnFilters: [],\r\n groupBy: null,\r\n context: {\r\n ...current.context,\r\n selectedCardKey: action.selectedCardKey,\r\n runtimeFilters: [],\r\n sort: [],\r\n page: 1,\r\n },\r\n },\r\n },\r\n });\r\n\r\n return ctx.dispatch(new LoadRuntime(action.area, 'menu-change'));\r\n }\r\n\r\n /**\r\n * Grouping is a backend concern: the table only renders contiguous rows, so\r\n * the grouped column is pushed down as the single `context.sort` entry and\r\n * pagination restarts at page 1. Clearing the group sends `sort: []`.\r\n */\r\n @Action(SetGroupBy)\r\n setGroupBy(ctx: StateContext<WorkCenterStateModel>, action: SetGroupBy) {\r\n const state = ctx.getState();\r\n const current = state.byArea[action.area];\r\n const nextGroupBy = action.groupBy?.trim() ? action.groupBy : null;\r\n const nextSort: WorkCenterSortRule[] = nextGroupBy\r\n ? [{ field: nextGroupBy, dir: action.dir }]\r\n : [];\r\n\r\n const sameGroup = current.groupBy === nextGroupBy;\r\n const sameSort =\r\n JSON.stringify(current.context.sort) === JSON.stringify(nextSort);\r\n\r\n if (sameGroup && sameSort) return;\r\n\r\n ctx.patchState({\r\n activeArea: action.area,\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: {\r\n ...current,\r\n groupBy: nextGroupBy,\r\n context: sameSort\r\n ? current.context\r\n : { ...current.context, sort: nextSort, page: 1 },\r\n },\r\n },\r\n });\r\n\r\n // A group change that doesn't move the backend order (already sorted by\r\n // that field) is a pure render concern — no refetch.\r\n if (sameSort) return;\r\n\r\n return ctx.dispatch(new LoadRuntime(action.area, 'group-change'));\r\n }\r\n\r\n @Action(ClearAllFilters)\r\n clearAllFilters(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n action: ClearAllFilters,\r\n ) {\r\n return this.applyFilterSlice(ctx, action.area, {\r\n headerFilters: [],\r\n columnFilters: [],\r\n });\r\n }\r\n\r\n private applyFilterSlice(\r\n ctx: StateContext<WorkCenterStateModel>,\r\n area: WorkCenterArea,\r\n patch: {\r\n headerFilters?: WorkCenterFilterRule[];\r\n columnFilters?: WorkCenterFilterRule[];\r\n },\r\n ) {\r\n const state = ctx.getState();\r\n const current = state.byArea[area];\r\n\r\n const headerFilters = patch.headerFilters ?? current.headerFilters;\r\n const columnFilters = patch.columnFilters ?? current.columnFilters;\r\n const runtimeFilters = mergeRuntimeFilters(headerFilters, columnFilters);\r\n\r\n const sameHeader =\r\n JSON.stringify(headerFilters) === JSON.stringify(current.headerFilters);\r\n const sameColumn =\r\n JSON.stringify(columnFilters) === JSON.stringify(current.columnFilters);\r\n const sameMerged =\r\n JSON.stringify(runtimeFilters) ===\r\n JSON.stringify(current.context.runtimeFilters);\r\n\r\n if (sameHeader && sameColumn && sameMerged) {\r\n return;\r\n }\r\n\r\n ctx.patchState({\r\n activeArea: area,\r\n byArea: {\r\n ...state.byArea,\r\n [area]: {\r\n ...current,\r\n headerFilters,\r\n columnFilters,\r\n context: {\r\n ...current.context,\r\n runtimeFilters,\r\n page: 1,\r\n },\r\n },\r\n },\r\n });\r\n\r\n return ctx.dispatch(new LoadRuntime(area, 'filters-change'));\r\n }\r\n\r\n @Action(LoadRuntime)\r\n loadRuntime(ctx: StateContext<WorkCenterStateModel>, action: LoadRuntime) {\r\n const state = ctx.getState();\r\n const areaState = state.byArea[action.area];\r\n const request = normalizeContext(areaState.context);\r\n const nextAreaState = {\r\n ...areaState,\r\n rows: [],\r\n kpis: [],\r\n totalCount: 0,\r\n };\r\n\r\n ctx.patchState({\r\n byArea: {\r\n ...state.byArea,\r\n [action.area]: nextAreaState,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkCenterActionKey.LoadRuntime,\r\n request$: this.getRuntime(request),\r\n onSuccess: (response, latestState) => {\r\n const current = latestState.byArea[action.area];\r\n return {\r\n byArea: {\r\n ...latestState.byArea,\r\n [action.area]: mapRuntimeResponse(current, response),\r\n },\r\n };\r\n },\r\n errorMessage: 'Failed to load Work Center runtime.',\r\n }).pipe(catchError(() => EMPTY));\r\n }\r\n\r\n private getRuntime(request: WorkCenterRuntimeRequest) {\r\n return this.http\r\n .post<\r\n ApiEnvelope<WorkCenterRuntimeResponseData>\r\n >('workcenter/runtime', request)\r\n .pipe(\r\n map((response) => {\r\n if (response.code === 1) return response.data;\r\n\r\n const fallbackError = 'Failed to load Work Center runtime.';\r\n const message =\r\n (response.errors as { message?: string } | null)?.message ??\r\n response.message ??\r\n fallbackError;\r\n\r\n throw new Error(message);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\n\r\nimport {\r\n EnterArea,\r\n HydrateFromContext,\r\n LoadRuntime,\r\n SetParams,\r\n SetLookups,\r\n ApplyHeaderFilters,\r\n ApplyColumnFilters,\r\n ClearAllFilters,\r\n SelectCard,\r\n SetGroupBy,\r\n} from './work-center.actions';\r\nimport {\r\n WorkCenterActionKey,\r\n WorkCenterArea,\r\n WorkCenterBootstrapInputs,\r\n WorkCenterContext,\r\n WorkCenterFilterRule,\r\n WorkCenterHydratePatch,\r\n WorkCenterLookups,\r\n WorkCenterLoadReason,\r\n WorkCenterSortRule,\r\n WORK_CENTER_MAX_PAGE_SIZE,\r\n} from './work-center.model';\r\nimport { WorkCenterState } from './work-center.state';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class WorkCenterFacade {\r\n private readonly store = inject(Store);\r\n\r\n readonly activeArea = select(WorkCenterState.activeArea);\r\n readonly context = select(WorkCenterState.context);\r\n readonly menuItems = select(WorkCenterState.menuItems);\r\n readonly rows = select(WorkCenterState.rows);\r\n readonly columns = select(WorkCenterState.columns);\r\n readonly kpis = select(WorkCenterState.kpis);\r\n readonly lookups = select(WorkCenterState.lookups);\r\n readonly runtimeFilterSchema = select(WorkCenterState.runtimeFilterSchema);\r\n readonly headerFilters = select(WorkCenterState.headerFilters);\r\n readonly columnFilters = select(WorkCenterState.columnFilters);\r\n readonly groupBy = select(WorkCenterState.groupBy);\r\n readonly totalCount = select(WorkCenterState.totalCount);\r\n readonly warnings = select(WorkCenterState.warnings);\r\n\r\n private readonly loadingActive = select(WorkCenterState.getLoadingActive);\r\n private readonly errors = select(WorkCenterState.getErrors);\r\n\r\n readonly loading = computed(() =>\r\n this.loadingActive().includes(WorkCenterActionKey.LoadRuntime),\r\n );\r\n readonly error = computed(\r\n () => this.errors()[WorkCenterActionKey.LoadRuntime] ?? null,\r\n );\r\n\r\n /**\r\n * Snapshot reads for callers that must observe state *immediately* after a\r\n * dispatch — e.g. an output handler mirroring the runtime query into the URL.\r\n * The `select()` signals above are the right choice everywhere else.\r\n */\r\n snapshotContext(): WorkCenterContext {\r\n return this.store.selectSnapshot(WorkCenterState.context);\r\n }\r\n\r\n snapshotGroupBy(): string | null {\r\n return this.store.selectSnapshot(WorkCenterState.groupBy);\r\n }\r\n\r\n enterArea(area: WorkCenterArea) {\r\n return this.store.dispatch(new EnterArea(area));\r\n }\r\n\r\n hydrateContext(area: WorkCenterArea, patch: WorkCenterHydratePatch) {\r\n return this.store.dispatch(new HydrateFromContext(area, patch));\r\n }\r\n\r\n setParams(area: WorkCenterArea, inputs: WorkCenterBootstrapInputs) {\r\n return this.store.dispatch(new SetParams(area, inputs));\r\n }\r\n\r\n setLookups(lookups: WorkCenterLookups) {\r\n return this.store.dispatch(new SetLookups(lookups));\r\n }\r\n\r\n /**\r\n * Switches card and drops the previous card's filters, grouping and sort —\r\n * each card has its own columns and filter schema.\r\n */\r\n selectCardAndLoad(area: WorkCenterArea, selectedCardKey: string) {\r\n return this.store.dispatch(new SelectCard(area, selectedCardKey));\r\n }\r\n\r\n applyTableLazyLoadAndLoad(area: WorkCenterArea, event: any) {\r\n const context = this.store.selectSnapshot(WorkCenterState.context);\r\n const patch: WorkCenterHydratePatch = {};\r\n let changed = false;\r\n\r\n const page = this.toPositiveInt(event?.currentPage);\r\n if (page !== null && page !== context.page) {\r\n patch.page = page;\r\n changed = true;\r\n }\r\n\r\n const pageSize = this.toPositiveInt(event?.pageSize);\r\n if (pageSize !== null) {\r\n const normalizedPageSize = Math.min(\r\n WORK_CENTER_MAX_PAGE_SIZE,\r\n Math.max(1, pageSize),\r\n );\r\n if (normalizedPageSize !== context.pageSize) {\r\n patch.pageSize = normalizedPageSize;\r\n changed = true;\r\n }\r\n }\r\n\r\n const sort = this.toSortFromLazyEvent(event);\r\n if (sort && !this.isSameSort(sort, context.sort)) {\r\n patch.sort = sort;\r\n changed = true;\r\n }\r\n\r\n if (!changed) {\r\n return;\r\n }\r\n\r\n return this.store.dispatch([\r\n new HydrateFromContext(area, patch),\r\n new LoadRuntime(area, 'table-lazy'),\r\n ]);\r\n }\r\n\r\n applyRuntimeFiltersAndLoad(\r\n area: WorkCenterArea,\r\n runtimeFilters: WorkCenterFilterRule[],\r\n ) {\r\n // Back-compat: any caller that previously set the entire `runtimeFilters`\r\n // array now lands on the header slice. The in-table column filter slice is\r\n // cleared so the merged payload matches what callers expect.\r\n return this.store.dispatch(new ApplyHeaderFilters(area, runtimeFilters));\r\n }\r\n\r\n /**\r\n * Replaces the property-filter-builder slice. Resets pagination to page 1\r\n * and reloads with merged `headerFilters` + `columnFilters`.\r\n */\r\n applyHeaderFiltersAndLoad(\r\n area: WorkCenterArea,\r\n runtimeFilters: WorkCenterFilterRule[],\r\n ) {\r\n return this.store.dispatch(new ApplyHeaderFilters(area, runtimeFilters));\r\n }\r\n\r\n /**\r\n * Replaces the in-table column filter slice. Resets pagination to page 1\r\n * and reloads with merged `headerFilters` + `columnFilters`.\r\n */\r\n applyColumnFiltersAndLoad(\r\n area: WorkCenterArea,\r\n runtimeFilters: WorkCenterFilterRule[],\r\n ) {\r\n return this.store.dispatch(new ApplyColumnFilters(area, runtimeFilters));\r\n }\r\n\r\n /**\r\n * Groups the table by `groupBy` (or clears grouping with `null`). Pushes the\r\n * grouped column down as the single backend sort, resets to page 1 and\r\n * reloads. Safe to call from the table's `groupByChange` — the lazy event\r\n * that follows carries the same sort and is absorbed as a no-op.\r\n */\r\n setGroupByAndLoad(\r\n area: WorkCenterArea,\r\n groupBy: string | null,\r\n dir: 'asc' | 'desc' = 'asc',\r\n ) {\r\n return this.store.dispatch(new SetGroupBy(area, groupBy, dir));\r\n }\r\n\r\n /**\r\n * Clears both header and column filter slices in one state update,\r\n * triggering a single BE reload.\r\n */\r\n clearAllFiltersAndLoad(area: WorkCenterArea) {\r\n return this.store.dispatch(new ClearAllFilters(area));\r\n }\r\n\r\n loadRuntime(area: WorkCenterArea, reason: WorkCenterLoadReason = 'manual') {\r\n return this.store.dispatch(new LoadRuntime(area, reason));\r\n }\r\n\r\n private toPositiveInt(value: unknown): number | null {\r\n const parsed = Number(value);\r\n if (!Number.isFinite(parsed)) {\r\n return null;\r\n }\r\n return Math.max(1, Math.floor(parsed));\r\n }\r\n\r\n /**\r\n * `mt-table` always reports its sort on a lazy event, so a `null` field is an\r\n * explicit \"no sort\" and must clear `context.sort` (the BE contract asks for\r\n * `sort: []`). Only an event with no `sortField` key at all — nothing the\r\n * current table emits — leaves the existing sort alone.\r\n */\r\n private toSortFromLazyEvent(event: any): WorkCenterSortRule[] | null {\r\n if (!event || !('sortField' in event)) {\r\n return null;\r\n }\r\n\r\n const sortField = event.sortField;\r\n if (typeof sortField !== 'string' || !sortField.length) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n field: sortField,\r\n dir: event.sortOrder === -1 ? 'desc' : 'asc',\r\n },\r\n ];\r\n }\r\n\r\n private isSameSort(\r\n left: WorkCenterSortRule[] | undefined,\r\n right: WorkCenterSortRule[] | undefined,\r\n ): boolean {\r\n const leftValue = left ?? [];\r\n const rightValue = right ?? [];\r\n\r\n if (leftValue.length !== rightValue.length) {\r\n return false;\r\n }\r\n\r\n return leftValue.every(\r\n (rule, index) =>\r\n rule.field === rightValue[index]?.field &&\r\n rule.dir === rightValue[index]?.dir,\r\n );\r\n }\r\n}\r\n","import { WorkCenterItemBasicInfoData } from '../../store/work-center/work-center.model';\r\n\r\nexport function readItemContext(\r\n details: WorkCenterItemBasicInfoData,\r\n): Record<string, unknown> | null {\r\n const item = details.item;\r\n if (!item || typeof item !== 'object') {\r\n return null;\r\n }\r\n\r\n const context = item['context'];\r\n return context && typeof context === 'object'\r\n ? (context as Record<string, unknown>)\r\n : null;\r\n}\r\n\r\nexport function readNumber(\r\n source: Record<string, unknown> | null,\r\n key: string,\r\n): number | undefined {\r\n const value = source?.[key];\r\n if (typeof value === 'number') {\r\n return Number.isFinite(value) ? value : undefined;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim().length) {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function readString(\r\n source: Record<string, unknown> | null,\r\n key: string,\r\n): string | undefined {\r\n const value = source?.[key];\r\n return typeof value === 'string' && value.trim().length ? value : undefined;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n ClientInstancePreview,\r\n ClientInstancePreviewConfig,\r\n} from '@masterteam/client-components/client-instance-preview';\r\nimport {\r\n EntityAttachmentValue,\r\n EntitiesPreview,\r\n EntityData,\r\n EntityUserValue,\r\n} from '@masterteam/components/entities';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { DiscussionThread } from '@masterteam/discussion';\r\nimport {\r\n Connection,\r\n Node,\r\n StructureBuilder,\r\n} from '@masterteam/structure-builder';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { WorkCenterItemBasicInfoData } from '../../../store/work-center/work-center.model';\r\nimport { readItemContext, readNumber } from '../work-center-types.helpers';\r\n\r\ninterface EscalationPreviewResponse {\r\n message?: string | null;\r\n data?: EscalationPreviewData;\r\n}\r\n\r\ninterface TranslatableValue {\r\n display?: string;\r\n en?: string;\r\n ar?: string;\r\n}\r\n\r\ninterface EscalationSchemaStep {\r\n id: number | string;\r\n name?: TranslatableValue;\r\n isInitial?: boolean;\r\n isFinal?: boolean;\r\n}\r\n\r\ninterface EscalationSchemaConnection {\r\n id?: number | string;\r\n source: number | string;\r\n target: number | string;\r\n}\r\n\r\n// The schema-step id the running instance currently sits on. Tagged in the\r\n// diagram via the structure-builder `current` node field.\r\ninterface EscalationCurrentStep {\r\n escalationStepSchemaId?: number | string;\r\n}\r\n\r\ninterface EscalationRuntimeStep {\r\n escalationStepSchemaId?: number | string;\r\n statusKey?: string;\r\n status?: { key?: string };\r\n}\r\n\r\ninterface EscalationPreviewData {\r\n initiatedBy?: Record<string, unknown>;\r\n startedAt?: Record<string, unknown>;\r\n reason?: string;\r\n attachments?: string[];\r\n levelId?: number | string;\r\n moduleId?: number | string;\r\n moduleDataId?: number | string;\r\n steps?: EscalationRuntimeStep[];\r\n schema?: {\r\n stepsSchema?: EscalationSchemaStep[];\r\n connections?: EscalationSchemaConnection[];\r\n };\r\n schemaSteps?: EscalationSchemaStep[];\r\n currentStep?: EscalationCurrentStep | null;\r\n currentSteps?: EscalationCurrentStep[] | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-work-center-escalation-instance-type',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Tabs,\r\n DiscussionThread,\r\n EntitiesPreview,\r\n ClientInstancePreview,\r\n StructureBuilder,\r\n ],\r\n templateUrl: './work-center-escalation-instance-type.html',\r\n})\r\nexport class WorkCenterEscalationInstanceType implements OnDestroy {\r\n private readonly http = inject(HttpClient);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private loadSub?: Subscription;\r\n\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly readOnly = input(false);\r\n\r\n protected readonly activeTab = signal('escalationDetails');\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n protected readonly tabOptions = computed(() => {\r\n this.activeLang();\r\n return [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.escalationDetails',\r\n ),\r\n value: 'escalationDetails',\r\n icon: 'alert.notification-message',\r\n },\r\n ...(this.moduleDetailsConfig()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.moduleDetails',\r\n ),\r\n value: 'moduleDetails',\r\n icon: 'file.folder',\r\n },\r\n ]\r\n : []),\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.schema'),\r\n value: 'schema',\r\n icon: 'custom.flow-chart',\r\n },\r\n ...(!this.readOnly()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.discussion',\r\n ),\r\n value: 'discussion',\r\n icon: 'custom.discussion-area',\r\n },\r\n ]\r\n : []),\r\n ];\r\n });\r\n protected readonly loading = signal(false);\r\n protected readonly error = signal<string | null>(null);\r\n protected readonly preview = signal<EscalationPreviewData | null>(null);\r\n protected readonly detailEntities = computed<EntityData[]>(() => {\r\n this.activeLang();\r\n const preview = this.preview();\r\n if (!preview) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n key: 'initiatedBy',\r\n name: this.transloco.translate<string>('workCenter.entity.initiatedBy'),\r\n value: mapUserValue(preview.initiatedBy),\r\n viewType: 'User',\r\n order: 1,\r\n configuration: { size: 12 },\r\n },\r\n {\r\n key: 'startedAt',\r\n name: this.transloco.translate<string>('workCenter.entity.startedAt'),\r\n value: resolveDisplayValue(preview.startedAt),\r\n rawValue: resolveRawValue(preview.startedAt),\r\n viewType: 'DateTime',\r\n order: 2,\r\n configuration: { size: 12 },\r\n },\r\n {\r\n key: 'reason',\r\n name: this.transloco.translate<string>('workCenter.entity.reason'),\r\n value: preview.reason ?? '',\r\n viewType: 'LongText',\r\n order: 3,\r\n configuration: { size: 24 },\r\n },\r\n {\r\n key: 'attachments',\r\n name: this.transloco.translate<string>('workCenter.entity.attachments'),\r\n value: mapAttachments(preview.attachments),\r\n viewType: 'Attachment',\r\n order: 4,\r\n configuration: { size: 24 },\r\n },\r\n ];\r\n });\r\n // Schema-step ids the running instance is currently sitting on. Union of the\r\n // single `currentStep` and the parallel `currentSteps`, keyed by their\r\n // `escalationStepSchemaId` so they line up with the diagram node ids.\r\n protected readonly currentSchemaStepIds = computed<Set<string>>(() => {\r\n const preview = this.preview();\r\n const ids = new Set<string>();\r\n\r\n const single = preview?.currentStep?.escalationStepSchemaId;\r\n if (single != null) {\r\n ids.add(String(single));\r\n }\r\n for (const step of preview?.currentSteps ?? []) {\r\n if (step?.escalationStepSchemaId != null) {\r\n ids.add(String(step.escalationStepSchemaId));\r\n }\r\n }\r\n\r\n return ids;\r\n });\r\n protected readonly schemaNodes = computed<Node[]>(() => {\r\n this.activeLang();\r\n const currentIds = this.currentSchemaStepIds();\r\n const preview = this.preview();\r\n const closedStepIds = new Set(\r\n (preview?.steps ?? [])\r\n .filter((step) => isClosedStep(step))\r\n .map((step) => step.escalationStepSchemaId)\r\n .filter((schemaId) => schemaId != null)\r\n .map(String),\r\n );\r\n\r\n return resolveSchemaSteps(preview).map((step) => {\r\n const isInitial = step.isInitial === true;\r\n const isFinal = step.isFinal === true;\r\n const isClosed = closedStepIds.has(String(step.id));\r\n\r\n return {\r\n id: String(step.id),\r\n name:\r\n resolveTranslatable(step.name) ||\r\n `${this.transloco.translate<string>('workCenter.entity.step')} ${step.id}`,\r\n color: isClosed\r\n ? '#dc2626'\r\n : isFinal\r\n ? '#059669'\r\n : isInitial\r\n ? '#2563eb'\r\n : '#0369A1',\r\n icon: isInitial || isFinal ? 'map.flag-04' : 'file.clipboard-check',\r\n badge: isClosed\r\n ? 'Closed'\r\n : isInitial\r\n ? this.transloco.translate<string>('workCenter.preview.initial')\r\n : isFinal\r\n ? this.transloco.translate<string>('workCenter.preview.final')\r\n : null,\r\n // Semantic color for the badge — every step state renders with the\r\n // same pill and is told apart by color alone.\r\n badgeTone: isClosed\r\n ? 'closed'\r\n : isInitial\r\n ? 'initial'\r\n : isFinal\r\n ? 'final'\r\n : 'accent',\r\n style: 'detail',\r\n current: currentIds.has(String(step.id)),\r\n };\r\n });\r\n });\r\n protected readonly previewNodeFields = {\r\n id: 'id',\r\n name: 'name',\r\n icon: 'icon',\r\n color: 'color',\r\n subtitle: 'subtitle',\r\n badge: 'badge',\r\n badgeTone: 'badgeTone',\r\n status: 'status',\r\n style: 'style',\r\n current: 'current',\r\n };\r\n protected readonly schemaConnections = computed<Connection[]>(() =>\r\n (this.preview()?.schema?.connections ?? []).map((connection, index) => ({\r\n id: String(\r\n connection.id ?? `${connection.source}-${connection.target}-${index}`,\r\n ),\r\n from: String(connection.source),\r\n to: String(connection.target),\r\n })),\r\n );\r\n protected readonly hasSchema = computed(() => this.schemaNodes().length > 0);\r\n\r\n protected readonly itemContext = computed(() =>\r\n readItemContext(this.details()),\r\n );\r\n // Preview of the escalated module record. The fetch contextKey needs the\r\n // numeric `levelId` + `moduleId` pair; the record id is the escalated\r\n // module-data `recordId` (NOT `instanceId`, which is the escalation\r\n // instance id). The escalation preview payload backfills any id the item\r\n // context does not carry.\r\n protected readonly moduleDetailsConfig =\r\n computed<ClientInstancePreviewConfig | null>(() => {\r\n const context = this.itemContext();\r\n const preview = this.preview();\r\n const levelId =\r\n readNumber(context, 'levelId') ?? asNumber(preview?.levelId);\r\n const moduleId =\r\n readNumber(context, 'moduleId') ?? asNumber(preview?.moduleId);\r\n const moduleDataId =\r\n readNumber(context, 'recordId') ?? asNumber(preview?.moduleDataId);\r\n\r\n if (levelId == null || moduleId == null || moduleDataId == null) {\r\n return null;\r\n }\r\n\r\n return {\r\n contextKey: `level:${levelId}/module:${moduleId}`,\r\n instanceId: moduleDataId,\r\n displayAreas: ['preview'],\r\n };\r\n });\r\n protected readonly instanceId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'escalationInstanceId') ??\r\n readNumber(this.itemContext(), 'instanceId'),\r\n );\r\n protected readonly resolvedInstanceId = computed(\r\n () => this.instanceId() ?? 0,\r\n );\r\n protected readonly canRenderDetails = computed(\r\n () => this.resolvedInstanceId() > 0,\r\n );\r\n protected readonly canRenderDiscussion = computed(\r\n () => this.resolvedInstanceId() > 0,\r\n );\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n const instanceId = this.resolvedInstanceId();\r\n\r\n if (instanceId > 0) {\r\n untracked(() => this.loadPreview(instanceId));\r\n return;\r\n }\r\n\r\n this.preview.set(null);\r\n this.error.set(null);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n }\r\n\r\n private loadPreview(instanceId: number): void {\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n this.loadSub = this.http\r\n .get<\r\n EscalationPreviewData | EscalationPreviewResponse\r\n >(`escalations/${instanceId}/preview`)\r\n .subscribe({\r\n next: (response) => {\r\n this.loading.set(false);\r\n this.preview.set(extractPreviewData(response));\r\n },\r\n error: (error) => {\r\n this.loading.set(false);\r\n this.preview.set(null);\r\n this.error.set(\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'workCenter.error.failedLoadEscalation',\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n}\r\n\r\n// The endpoint returns the escalation payload directly, but tolerate the\r\n// shared `{ data: ... }` envelope used by the other escalation endpoints.\r\nfunction extractPreviewData(\r\n response: EscalationPreviewData | EscalationPreviewResponse | null,\r\n): EscalationPreviewData | null {\r\n if (!response || typeof response !== 'object') {\r\n return null;\r\n }\r\n\r\n const envelope = response as EscalationPreviewResponse;\r\n if (envelope.data && typeof envelope.data === 'object') {\r\n return envelope.data;\r\n }\r\n\r\n return response as EscalationPreviewData;\r\n}\r\n\r\nfunction mapUserValue(value: unknown): EntityUserValue {\r\n if (!value || typeof value !== 'object') {\r\n return {\r\n displayName: '',\r\n userName: '',\r\n };\r\n }\r\n\r\n return {\r\n id: readString(value, 'id'),\r\n userName: readString(value, 'userName'),\r\n displayName:\r\n readString(value, 'displayName') ??\r\n readString(value, 'fullName') ??\r\n readString(value, 'userName') ??\r\n '',\r\n photoUrl: readString(value, 'photoUrl'),\r\n phoneNumber:\r\n readString(value, 'phoneNumber') ?? readString(value, 'mobileNumber'),\r\n email: readString(value, 'email') ?? readString(value, 'emailAddress'),\r\n };\r\n}\r\n\r\nfunction mapAttachments(value: string[] | undefined): EntityAttachmentValue {\r\n return (value ?? []) as EntityAttachmentValue;\r\n}\r\n\r\nfunction resolveSchemaSteps(\r\n preview: EscalationPreviewData | null,\r\n): EscalationSchemaStep[] {\r\n return preview?.schema?.stepsSchema ?? preview?.schemaSteps ?? [];\r\n}\r\n\r\nfunction isClosedStep(step: EscalationRuntimeStep): boolean {\r\n return (step.statusKey ?? step.status?.key ?? '').toLowerCase() === 'closed';\r\n}\r\n\r\nfunction resolveTranslatable(value: TranslatableValue | undefined): string {\r\n if (!value || typeof value !== 'object') {\r\n return '';\r\n }\r\n\r\n return value.display ?? value.en ?? value.ar ?? '';\r\n}\r\n\r\nfunction resolveDisplayValue(value: unknown): string {\r\n if (!value || typeof value !== 'object') {\r\n return typeof value === 'string' ? value : '';\r\n }\r\n\r\n return (\r\n readString(value, 'displayValue') ??\r\n readString(value, 'display') ??\r\n readString(value, 'actualValue') ??\r\n ''\r\n );\r\n}\r\n\r\nfunction resolveRawValue(value: unknown): string | undefined {\r\n if (!value || typeof value !== 'object') {\r\n return typeof value === 'string' ? value : undefined;\r\n }\r\n\r\n return (\r\n readString(value, 'actualValue') ??\r\n readString(value, 'displayValue') ??\r\n undefined\r\n );\r\n}\r\n\r\nfunction asNumber(value: number | string | undefined): number | undefined {\r\n if (typeof value === 'number') {\r\n return Number.isFinite(value) ? value : undefined;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim().length) {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction readString(value: unknown, key: string): string | undefined {\r\n if (!value || typeof value !== 'object') {\r\n return undefined;\r\n }\r\n\r\n const result = (value as Record<string, unknown>)[key];\r\n return typeof result === 'string' && result.length ? result : undefined;\r\n}\r\n","<div\r\n class=\"mt-modal-content flex h-full min-h-0 flex-col gap-4 p-4 lg:overflow-hidden\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <div\r\n class=\"flex flex-1 min-h-0 flex-col gap-4 lg:grid lg:grid-cols-[13rem_minmax(0,1fr)] lg:gap-6\"\r\n >\r\n @if (tabOptions().length > 1) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabOptions()\"\r\n mode=\"vertical\"\r\n size=\"small\"\r\n />\r\n }\r\n\r\n <div class=\"min-w-0 flex-1 min-h-0 lg:overflow-hidden\">\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'escalationDetails'\"\r\n >\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n @if (canRenderDetails()) {\r\n @if (loading()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"loading.escalationDetails\") }}\r\n </p>\r\n </div>\r\n } @else if (error(); as error) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-red-300 bg-red-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-red-600\">\r\n {{ error }}\r\n </p>\r\n </div>\r\n } @else if (preview()) {\r\n <mt-entities-preview [entities]=\"detailEntities()\" />\r\n }\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.escalationDetailsUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'moduleDetails'\"\r\n >\r\n @if (moduleDetailsConfig(); as moduleDetailsConfig) {\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n <mt-client-instance-preview [config]=\"moduleDetailsConfig\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'schema'\"\r\n >\r\n @if (canRenderDetails()) {\r\n @if (loading()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"loading.escalationSchema\") }}\r\n </p>\r\n </div>\r\n } @else if (error(); as error) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-red-300 bg-red-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-red-600\">\r\n {{ error }}\r\n </p>\r\n </div>\r\n } @else if (hasSchema()) {\r\n <!--\r\n Only mount the flow once the schema tab is actually active. The\r\n structure-builder fits the diagram to the host size on load\r\n (fLoaded -> fitToScreen) and never re-fits, so mounting it inside\r\n the [hidden] (display:none, zero-size) container produces a blank\r\n canvas that doesn't recover when the tab is shown.\r\n -->\r\n @if (activeTab() === \"schema\") {\r\n <!--\r\n Use a concrete height (not lg:h-full). The diagram has no\r\n intrinsic height, and the tab's ancestor chain is block (not\r\n flex) on lg, so `h-full` collapses to 0 and the canvas renders\r\n blank. Mirrors the process preview's `h-[70vh]`.\r\n -->\r\n <div class=\"h-[70vh] min-h-[22rem] overflow-hidden rounded-lg\">\r\n <mt-structure-builder\r\n class=\"h-full\"\r\n [layoutDirection]=\"'LR'\"\r\n [readonly]=\"true\"\r\n [structureMode]=\"'workflow'\"\r\n [nodeFields]=\"previewNodeFields\"\r\n [nodes]=\"schemaNodes()\"\r\n [connections]=\"schemaConnections()\"\r\n />\r\n </div>\r\n }\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.escalationSchemaUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.escalationSchemaContextUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!readOnly()) {\r\n <div\r\n class=\"h-full min-h-0 overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'discussion'\"\r\n >\r\n @if (canRenderDiscussion()) {\r\n <div\r\n class=\"h-[32rem] min-h-[22rem] overflow-hidden rounded-lg border border-surface-200 bg-surface-50 lg:h-full lg:min-h-0\"\r\n >\r\n <mt-discussion-thread\r\n [moduleType]=\"'EscalationInstance'\"\r\n [recordId]=\"resolvedInstanceId()\"\r\n [mentionSearchEndpoint]=\"'Identity/users'\"\r\n [mentionSearchParam]=\"'query'\"\r\n [mentionSearchDataPath]=\"'data'\"\r\n [uploadEndpoint]=\"'uploader'\"\r\n [attachmentDownloadEndpoint]=\"'uploader'\"\r\n [showParticipants]=\"true\"\r\n [autoMarkRead]=\"true\"\r\n [refreshIntervalMs]=\"0\"\r\n [styleClass]=\"'h-full'\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.escalationDiscussionUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { DiscussionThread } from '@masterteam/discussion';\r\nimport { ClientForm } from '@masterteam/forms/client-form';\r\n\r\nimport { RuntimeActionContextStore } from '@masterteam/components/runtime-action';\r\n\r\nimport { WorkCenterFacade } from '../../../store/work-center/work-center.facade';\r\nimport {\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterLookups,\r\n} from '../../../store/work-center/work-center.model';\r\nimport {\r\n readItemContext,\r\n readNumber,\r\n readString,\r\n} from '../work-center-types.helpers';\r\n\r\n@Component({\r\n selector: 'mt-work-center-module-type',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Tabs,\r\n ClientForm,\r\n DiscussionThread,\r\n ],\r\n templateUrl: './work-center-module-type.html',\r\n})\r\nexport class WorkCenterModuleType implements OnDestroy {\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly actionContext = inject(RuntimeActionContextStore, {\r\n optional: true,\r\n });\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly lookups = input<WorkCenterLookups | null>(null);\r\n readonly readOnly = input(false);\r\n private readonly clientForm = viewChild(ClientForm);\r\n protected readonly formLookups = computed(\r\n () => this.lookups() ?? this.facade.lookups(),\r\n );\r\n\r\n protected readonly activeTab = signal('details');\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n protected readonly tabOptions = computed(() => {\r\n this.activeLang();\r\n return [\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.details'),\r\n value: 'details',\r\n icon: 'file.folder',\r\n },\r\n ...(!this.readOnly()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.discussion',\r\n ),\r\n value: 'discussion',\r\n icon: 'custom.discussion-area',\r\n },\r\n ]\r\n : []),\r\n ];\r\n });\r\n protected readonly itemContext = computed(() =>\r\n readItemContext(this.details()),\r\n );\r\n protected readonly instanceId = computed(() =>\r\n readNumber(this.itemContext(), 'instanceId'),\r\n );\r\n protected readonly moduleId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleId'),\r\n );\r\n protected readonly levelId = computed(() =>\r\n readNumber(this.itemContext(), 'levelId'),\r\n );\r\n protected readonly levelDataId = computed(() =>\r\n readNumber(this.itemContext(), 'levelDataId'),\r\n );\r\n protected readonly moduleDataId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleDataId'),\r\n );\r\n protected readonly isGeneralTask = computed(\r\n () => this.details().type === 'GeneralTask',\r\n );\r\n protected readonly moduleKey = computed(() =>\r\n this.isGeneralTask() ? 'GeneralTask' : 'ModuleData',\r\n );\r\n protected readonly operationKey = computed(() => 'Update');\r\n protected readonly formModuleId = computed(() =>\r\n this.isGeneralTask() ? undefined : this.moduleId(),\r\n );\r\n protected readonly formLevelId = computed(() =>\r\n this.isGeneralTask() ? undefined : this.levelId(),\r\n );\r\n protected readonly formLevelDataId = computed(() =>\r\n this.isGeneralTask() ? undefined : this.levelDataId(),\r\n );\r\n protected readonly resolvedInstanceId = computed(\r\n () => this.instanceId() ?? 0,\r\n );\r\n protected readonly canRenderForm = computed(\r\n () => !!this.moduleKey() && !!this.operationKey(),\r\n );\r\n protected readonly discussionModuleType = computed(\r\n () =>\r\n (this.isGeneralTask()\r\n ? 'GeneralTask'\r\n : readString(this.itemContext(), 'moduleKey')) ??\r\n this.details().sourceType ??\r\n this.details().type ??\r\n '',\r\n );\r\n protected readonly canRenderDiscussion = computed(\r\n () =>\r\n this.resolvedInstanceId() > 0 &&\r\n this.discussionModuleType().trim().length > 0,\r\n );\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n this.actionContext?.setFormSource(\r\n this.readOnly() ? null : (this.clientForm() ?? null),\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.actionContext?.setFormSource(null);\r\n }\r\n}\r\n","<div\r\n class=\"mt-modal-content flex h-full min-h-0 flex-col gap-4 p-4 lg:overflow-hidden\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <div\r\n class=\"flex flex-1 min-h-0 flex-col gap-4 lg:grid lg:grid-cols-[13rem_minmax(0,1fr)] lg:gap-6\"\r\n >\r\n @if (tabOptions().length > 1) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabOptions()\"\r\n mode=\"vertical\"\r\n size=\"small\"\r\n />\r\n }\r\n\r\n <div class=\"min-w-0 flex-1 min-h-0 lg:overflow-hidden\">\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'details'\"\r\n >\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n @if (canRenderForm()) {\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [operationKey]=\"operationKey()\"\r\n [moduleId]=\"formModuleId()\"\r\n [levelId]=\"formLevelId()\"\r\n [levelDataId]=\"formLevelDataId()\"\r\n [moduleDataId]=\"moduleDataId()\"\r\n [readonly]=\"true\"\r\n [lookups]=\"formLookups()\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.moduleFormUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (!readOnly()) {\r\n <div\r\n class=\"h-full min-h-0 overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'discussion'\"\r\n >\r\n @if (canRenderDiscussion()) {\r\n <div\r\n class=\"h-[32rem] min-h-[22rem] overflow-hidden rounded-lg border border-surface-200 bg-surface-50 lg:h-full lg:min-h-0\"\r\n >\r\n <mt-discussion-thread\r\n [moduleType]=\"discussionModuleType()\"\r\n [recordId]=\"resolvedInstanceId()\"\r\n [mentionSearchEndpoint]=\"'Identity/users'\"\r\n [mentionSearchParam]=\"'query'\"\r\n [mentionSearchDataPath]=\"'data'\"\r\n [uploadEndpoint]=\"'uploader'\"\r\n [attachmentDownloadEndpoint]=\"'uploader'\"\r\n [showParticipants]=\"true\"\r\n [autoMarkRead]=\"true\"\r\n [refreshIntervalMs]=\"0\"\r\n [styleClass]=\"'h-full'\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.moduleDiscussionUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { EntityData } from '@masterteam/components/entities';\r\nimport { Table } from '@masterteam/components/table';\r\nimport {\r\n Connection,\r\n Node,\r\n StructureBuilder,\r\n} from '@masterteam/structure-builder';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { ApiEnvelope } from '../../../store/work-center/work-center.model';\r\n\r\ninterface ProcessPreviewStepTarget {\r\n type?: 'Unknown' | 'User' | 'Group' | 'Role' | 'Level' | string;\r\n groupKey?: string | null;\r\n displayName?: unknown;\r\n group?: { id?: number | string; name?: unknown } | null;\r\n}\r\n\r\ninterface ProcessPreviewStep {\r\n stepId?: number | string;\r\n stepSchemaId?: number | string;\r\n stepName?: unknown;\r\n status?: unknown;\r\n targetUser?: Record<string, unknown> | null;\r\n actionUserInfo?: Record<string, unknown> | null;\r\n createdAt?: string | null;\r\n actionDate?: string | null;\r\n target?: ProcessPreviewStepTarget | null;\r\n}\r\n\r\ninterface ProcessPreviewSchemaStep {\r\n id: number | string;\r\n name?: unknown;\r\n type?: 'UserInput' | 'AppAction' | 'ApprovalCommit' | string;\r\n isInitial?: boolean;\r\n isFinal?: boolean;\r\n isSystem?: boolean;\r\n isLocked?: boolean;\r\n systemKind?: string;\r\n status?: string;\r\n}\r\n\r\ninterface ProcessPreviewSchemaConnection {\r\n id?: number | string;\r\n source: number | string;\r\n target: number | string;\r\n state?: 'idle' | 'active' | 'success' | 'error';\r\n}\r\n\r\ninterface ProcessPreviewData {\r\n steps?: ProcessPreviewStep[];\r\n schema?: {\r\n stepsSchema?: ProcessPreviewSchemaStep[];\r\n connections?: ProcessPreviewSchemaConnection[];\r\n } | null;\r\n /** Schema-step ids the process is currently sitting on (active steps). */\r\n currentStepSchemaIds?: Array<number | string> | null;\r\n currentStepIds?: Array<number | string> | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-work-center-process-preview',\r\n standalone: true,\r\n imports: [CommonModule, Table, StructureBuilder],\r\n templateUrl: './work-center-process-preview.html',\r\n styles: [\r\n `\r\n :host ::ng-deep .wc-process-preview-schema .wf-detail-row {\r\n align-items: center;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class WorkCenterProcessPreview implements OnDestroy {\r\n private readonly http = inject(HttpClient);\r\n private readonly transloco = inject(TranslocoService);\r\n private loadSub?: Subscription;\r\n\r\n readonly requestId = input<number | null | undefined>(null);\r\n readonly view = input<'approvals' | 'schema'>('approvals');\r\n\r\n protected readonly approvalColumns = computed(() => [\r\n {\r\n key: 'stepName',\r\n label: this.transloco.translate('workCenter.preview.name'),\r\n },\r\n {\r\n key: 'status',\r\n label: this.transloco.translate('workCenter.preview.status'),\r\n type: 'entity' as const,\r\n },\r\n {\r\n key: 'user',\r\n label: this.transloco.translate('workCenter.preview.userOrGroup'),\r\n type: 'entity' as const,\r\n },\r\n {\r\n key: 'createdAt',\r\n label: this.transloco.translate('workCenter.preview.initiationDate'),\r\n type: 'entity' as const,\r\n },\r\n {\r\n key: 'actionDate',\r\n label: this.transloco.translate('workCenter.preview.actionDate'),\r\n type: 'entity' as const,\r\n },\r\n ]);\r\n protected readonly loading = signal(false);\r\n protected readonly error = signal<string | null>(null);\r\n protected readonly preview = signal<ProcessPreviewData | null>(null);\r\n protected readonly canRenderPreview = computed(\r\n () => (this.requestId() ?? 0) > 0,\r\n );\r\n protected readonly approvalRows = computed(() => {\r\n const steps = this.preview()?.steps ?? [];\r\n const rows: Array<{\r\n stepName: string;\r\n status: EntityData;\r\n user: EntityData;\r\n createdAt: EntityData;\r\n actionDate: EntityData;\r\n }> = [];\r\n const seenGroupKeys = new Set<string>();\r\n\r\n for (const step of steps) {\r\n const groupName = this.resolveGroupName(step.target);\r\n\r\n if (groupName) {\r\n const dedupKey = `${step.stepSchemaId ?? ''}|${step.target?.groupKey ?? ''}`;\r\n if (seenGroupKeys.has(dedupKey)) continue;\r\n seenGroupKeys.add(dedupKey);\r\n\r\n // Prefer a sibling that has been actioned so we can surface real\r\n // action date/status; otherwise fall back to the current step.\r\n const siblings = steps.filter(\r\n (s) =>\r\n (s.stepSchemaId ?? '') === (step.stepSchemaId ?? '') &&\r\n (s.target?.groupKey ?? '') === (step.target?.groupKey ?? ''),\r\n );\r\n const repr = siblings.find((s) => s.actionUserInfo) ?? step;\r\n\r\n rows.push({\r\n stepName:\r\n this.resolveDisplayName(repr.stepName) ||\r\n String(repr.stepId ?? '--'),\r\n status: buildEntity('Status', 'Status', repr.status),\r\n user: buildEntity('User', 'Text', groupName),\r\n createdAt: buildEntity(\r\n 'Initiation Date',\r\n 'DateTime',\r\n repr.createdAt ?? '',\r\n ),\r\n actionDate: buildEntity(\r\n 'Action Date',\r\n 'DateTime',\r\n repr.actionDate ?? '',\r\n ),\r\n });\r\n } else {\r\n rows.push({\r\n stepName:\r\n this.resolveDisplayName(step.stepName) ||\r\n String(step.stepId ?? '--'),\r\n status: buildEntity('Status', 'Status', step.status),\r\n user: buildEntity(\r\n 'User',\r\n 'User',\r\n (step.actionUserInfo ?? step.targetUser ?? null) as any,\r\n ),\r\n createdAt: buildEntity(\r\n 'Initiation Date',\r\n 'DateTime',\r\n step.createdAt ?? '',\r\n ),\r\n actionDate: buildEntity(\r\n 'Action Date',\r\n 'DateTime',\r\n step.actionDate ?? '',\r\n ),\r\n });\r\n }\r\n }\r\n\r\n return rows;\r\n });\r\n protected readonly hasApprovals = computed(\r\n () => this.approvalRows().length > 0,\r\n );\r\n protected readonly schemaNodes = computed<Node[]>(() => {\r\n const steps = this.preview()?.schema?.stepsSchema ?? [];\r\n const connections = this.preview()?.schema?.connections ?? [];\r\n const sourceIds = new Set(connections.map((c) => String(c.source)));\r\n const currentStepIds = new Set(\r\n (this.preview()?.currentStepSchemaIds ?? []).map(String),\r\n );\r\n return steps.map((step) => {\r\n const isAppAction = step.type === 'AppAction';\r\n const isApprovalCommit =\r\n step.type === 'ApprovalCommit' || step.systemKind === 'ApprovalCommit';\r\n // Treat a step as final if explicitly flagged or if it has no outgoing\r\n // connection — the latter catches schemas where `isFinal` isn't set.\r\n const isFinal =\r\n !isApprovalCommit &&\r\n (step.isFinal === true || !sourceIds.has(String(step.id)));\r\n const color = isApprovalCommit\r\n ? '#059669'\r\n : isFinal\r\n ? '#059669'\r\n : step.isInitial\r\n ? '#2563eb'\r\n : isAppAction\r\n ? '#B45309'\r\n : '#0369A1';\r\n return {\r\n id: String(step.id),\r\n name: isFinal\r\n ? this.transloco.translate('workCenter.preview.end')\r\n : this.resolveDisplayName(step.name) || String(step.id),\r\n color,\r\n icon: isApprovalCommit\r\n ? 'general.check-verified-01'\r\n : isAppAction\r\n ? 'general.zap'\r\n : isFinal\r\n ? 'map.flag-04'\r\n : step.isInitial\r\n ? 'map.flag-04'\r\n : 'file.clipboard-check',\r\n subtitle: isApprovalCommit\r\n ? this.transloco.translate(\r\n 'workCenter.preview.approvalCommitSubtitle',\r\n )\r\n : step.isInitial\r\n ? this.transloco.translate('workCenter.preview.start')\r\n : isFinal\r\n ? this.transloco.translate('workCenter.preview.end')\r\n : isAppAction\r\n ? this.transloco.translate('workCenter.preview.appAction')\r\n : this.transloco.translate('workCenter.preview.formStep'),\r\n badge: isApprovalCommit\r\n ? null\r\n : step.isInitial\r\n ? this.transloco.translate('workCenter.preview.initial')\r\n : isFinal\r\n ? this.transloco.translate('workCenter.preview.final')\r\n : null,\r\n // Semantic color for the badge — every step state renders with the\r\n // same pill and is told apart by color alone.\r\n badgeTone: step.isInitial ? 'initial' : isFinal ? 'final' : 'accent',\r\n status: step.status ?? null,\r\n style: isAppAction || isApprovalCommit ? 'icon' : 'detail',\r\n current: currentStepIds.has(String(step.id)),\r\n };\r\n });\r\n });\r\n protected readonly schemaConnections = computed<Connection[]>(() =>\r\n (this.preview()?.schema?.connections ?? []).map((connection, index) => ({\r\n id: String(\r\n connection.id ?? `${connection.source}-${connection.target}-${index}`,\r\n ),\r\n from: String(connection.source),\r\n to: String(connection.target),\r\n state: connection.state,\r\n })),\r\n );\r\n protected readonly hasSchema = computed(() => this.schemaNodes().length > 0);\r\n protected readonly previewNodeFields = {\r\n id: 'id',\r\n name: 'name',\r\n icon: 'icon',\r\n color: 'color',\r\n subtitle: 'subtitle',\r\n badge: 'badge',\r\n badgeTone: 'badgeTone',\r\n status: 'status',\r\n style: 'style',\r\n current: 'current',\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const requestId = this.requestId() ?? 0;\r\n\r\n if (requestId > 0) {\r\n untracked(() => this.loadPreview(requestId));\r\n return;\r\n }\r\n\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(false);\r\n this.error.set(null);\r\n this.preview.set(null);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n }\r\n\r\n private resolveGroupName(\r\n target: ProcessPreviewStepTarget | null | undefined,\r\n ): string {\r\n if (!target || target.type !== 'Group' || !target.group) {\r\n return '';\r\n }\r\n return (\r\n this.resolveDisplayName(target.displayName) ||\r\n this.resolveDisplayName(target.group.name)\r\n );\r\n }\r\n\r\n private resolveDisplayName(name: unknown): string {\r\n if (typeof name === 'string') {\r\n return name;\r\n }\r\n\r\n if (typeof name === 'number' || typeof name === 'boolean') {\r\n return String(name);\r\n }\r\n\r\n if (!name || typeof name !== 'object') {\r\n return '';\r\n }\r\n\r\n const map = name as Record<string, unknown>;\r\n const locale = this.transloco.getActiveLang();\r\n const candidates = [map['display'], map[locale], map['en'], map['ar']];\r\n for (const candidate of candidates) {\r\n if (typeof candidate === 'string' && candidate) {\r\n return candidate;\r\n }\r\n if (typeof candidate === 'number' || typeof candidate === 'boolean') {\r\n return String(candidate);\r\n }\r\n }\r\n\r\n const fallback = Object.values(map).find(\r\n (value) => typeof value === 'string' && value,\r\n );\r\n return typeof fallback === 'string' ? fallback : '';\r\n }\r\n\r\n private loadPreview(requestId: number): void {\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n this.loadSub = this.http\r\n .get<ApiEnvelope<ProcessPreviewData>>(`processes/${requestId}/preview`)\r\n .subscribe({\r\n next: (response) => {\r\n this.loading.set(false);\r\n this.preview.set(response.data ?? null);\r\n },\r\n error: (error) => {\r\n this.loading.set(false);\r\n this.preview.set(null);\r\n this.error.set(\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate('workCenter.preview.loadFailed'),\r\n );\r\n },\r\n });\r\n }\r\n}\r\n\r\nfunction buildEntity(\r\n name: string,\r\n viewType: 'User' | 'DateTime' | 'Text' | 'Status',\r\n value: unknown,\r\n): EntityData {\r\n return {\r\n name,\r\n viewType,\r\n value: (value as any) ?? '',\r\n configuration: {\r\n hideName: true,\r\n },\r\n };\r\n}\r\n","@if (!canRenderPreview()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n Process preview is not available for this item yet.\r\n </p>\r\n </div>\r\n} @else if (loading()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"text-sm text-surface-500\">Loading process preview...</p>\r\n </div>\r\n} @else if (error()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-red-300 bg-red-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-red-600\">{{ error() }}</p>\r\n </div>\r\n} @else {\r\n @if (view() === \"schema\") {\r\n @if (hasSchema()) {\r\n <div class=\"wc-process-preview-schema h-[70vh] overflow-hidden\">\r\n <mt-structure-builder\r\n class=\"h-full\"\r\n [layoutDirection]=\"'LR'\"\r\n [readonly]=\"true\"\r\n [structureMode]=\"'workflow'\"\r\n [nodeFields]=\"previewNodeFields\"\r\n [nodes]=\"schemaNodes()\"\r\n [connections]=\"schemaConnections()\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n Process steps are not available for this item yet.\r\n </p>\r\n </div>\r\n }\r\n } @else if (hasApprovals()) {\r\n <div class=\"max-h-[70vh] overflow-y-auto\">\r\n <mt-table\r\n noCard\r\n [data]=\"approvalRows()\"\r\n [columns]=\"approvalColumns()\"\r\n storageKey=\"work-center-process-preview-table\"\r\n [showFilters]=\"false\"\r\n [generalSearch]=\"false\"\r\n [clickableRows]=\"false\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n Process approvals data is not available for this item yet.\r\n </p>\r\n </div>\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { DiscussionThread } from '@masterteam/discussion';\r\nimport { ClientForm } from '@masterteam/forms/client-form';\r\n\r\nimport { RuntimeActionContextStore } from '@masterteam/components/runtime-action';\r\n\r\nimport { WorkCenterFacade } from '../../../store/work-center/work-center.facade';\r\nimport {\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterLookups,\r\n} from '../../../store/work-center/work-center.model';\r\nimport { WorkCenterProcessPreview } from '../../work-center-item-modal/work-center-process-preview/work-center-process-preview';\r\nimport {\r\n readItemContext,\r\n readNumber,\r\n readString,\r\n} from '../work-center-types.helpers';\r\n\r\n@Component({\r\n selector: 'mt-work-center-process-request-type',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Tabs,\r\n ClientForm,\r\n DiscussionThread,\r\n WorkCenterProcessPreview,\r\n ],\r\n templateUrl: './work-center-process-request-type.html',\r\n})\r\nexport class WorkCenterProcessRequestType implements OnDestroy {\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly actionContext = inject(RuntimeActionContextStore, {\r\n optional: true,\r\n });\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly lookups = input<WorkCenterLookups | null>(null);\r\n readonly readOnly = input(false);\r\n private readonly clientForm = viewChild(ClientForm);\r\n protected readonly formLookups = computed(\r\n () => this.lookups() ?? this.facade.lookups(),\r\n );\r\n\r\n protected readonly activeTab = signal('requestDetails');\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n protected readonly tabOptions = computed(() => {\r\n this.activeLang();\r\n return [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.requestDetails',\r\n ),\r\n value: 'requestDetails',\r\n icon: 'file.file-03',\r\n },\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.approvals'),\r\n value: 'approvals',\r\n icon: 'custom.document-approval',\r\n },\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.steps'),\r\n value: 'schema',\r\n icon: 'custom.flow-chart',\r\n },\r\n ...(!this.readOnly()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.discussion',\r\n ),\r\n value: 'discussion',\r\n icon: 'custom.discussion-area',\r\n },\r\n ]\r\n : []),\r\n ];\r\n });\r\n protected readonly itemContext = computed(() =>\r\n readItemContext(this.details()),\r\n );\r\n protected readonly requestId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'requestId') ??\r\n readNumber(this.itemContext(), 'draftProcessId'),\r\n );\r\n protected readonly moduleKey = computed(\r\n () => readString(this.itemContext(), 'moduleKey') ?? '',\r\n );\r\n protected readonly operationKey = computed(\r\n () => readString(this.itemContext(), 'operationKey') ?? '',\r\n );\r\n protected readonly moduleId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleId'),\r\n );\r\n protected readonly levelId = computed(() =>\r\n readNumber(this.itemContext(), 'levelId'),\r\n );\r\n protected readonly levelDataId = computed(() =>\r\n readNumber(this.itemContext(), 'levelDataId'),\r\n );\r\n protected readonly moduleDataId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleDataId'),\r\n );\r\n protected readonly requestSchemaId = computed(() =>\r\n readNumber(this.itemContext(), 'requestSchemaId'),\r\n );\r\n protected readonly draftProcessId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'draftProcessId') ??\r\n readNumber(this.itemContext(), 'requestId'),\r\n );\r\n protected readonly discussionRecordId = computed(() => this.requestId() ?? 0);\r\n protected readonly isReadonly = computed(() => {\r\n if (this.readOnly()) {\r\n return true;\r\n }\r\n\r\n const item = this.details().item;\r\n const status = item?.['status'] as { key?: unknown } | undefined;\r\n return status?.key !== 'Returned';\r\n });\r\n protected readonly canRenderForm = computed(\r\n () => !!this.moduleKey() && !!this.operationKey(),\r\n );\r\n protected readonly canRenderDiscussion = computed(\r\n () => this.discussionRecordId() > 0,\r\n );\r\n protected readonly canRenderPreview = computed(\r\n () => (this.requestId() ?? 0) > 0,\r\n );\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n this.actionContext?.setFormSource(\r\n this.readOnly() ? null : (this.clientForm() ?? null),\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.actionContext?.setFormSource(null);\r\n }\r\n}\r\n","<div\r\n class=\"mt-modal-content flex h-full min-h-0 flex-col gap-4 p-4 lg:overflow-hidden\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <div\r\n class=\"flex flex-1 min-h-0 flex-col gap-4 lg:grid lg:grid-cols-[13rem_minmax(0,1fr)] lg:gap-6\"\r\n >\r\n @if (tabOptions().length > 1) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabOptions()\"\r\n mode=\"vertical\"\r\n size=\"small\"\r\n />\r\n }\r\n\r\n <div class=\"min-w-0 flex-1 min-h-0 lg:overflow-hidden\">\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'requestDetails'\"\r\n >\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n @if (canRenderForm()) {\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [operationKey]=\"operationKey()\"\r\n [moduleId]=\"moduleId()\"\r\n [levelId]=\"levelId()\"\r\n [levelDataId]=\"levelDataId()\"\r\n [moduleDataId]=\"moduleDataId()\"\r\n [requestSchemaId]=\"requestSchemaId()\"\r\n [draftProcessId]=\"draftProcessId()\"\r\n [readonly]=\"isReadonly()\"\r\n [lookups]=\"formLookups()\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.requestFormUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'approvals'\"\r\n >\r\n @if (canRenderPreview()) {\r\n <mt-work-center-process-preview\r\n [requestId]=\"requestId()\"\r\n [view]=\"'approvals'\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.requestPreviewUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'schema'\"\r\n >\r\n @if (canRenderPreview()) {\r\n <mt-work-center-process-preview\r\n [requestId]=\"requestId()\"\r\n [view]=\"'schema'\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.requestPreviewUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!readOnly()) {\r\n <div\r\n class=\"h-full min-h-0 overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'discussion'\"\r\n >\r\n @if (canRenderDiscussion()) {\r\n <div\r\n class=\"h-[32rem] min-h-[22rem] overflow-hidden rounded-lg border border-surface-200 bg-surface-50 lg:h-full lg:min-h-0\"\r\n >\r\n <mt-discussion-thread\r\n [moduleType]=\"'ProcessRequest'\"\r\n [recordId]=\"discussionRecordId()\"\r\n [mentionSearchEndpoint]=\"'Identity/users'\"\r\n [mentionSearchParam]=\"'query'\"\r\n [mentionSearchDataPath]=\"'data'\"\r\n [uploadEndpoint]=\"'uploader'\"\r\n [attachmentDownloadEndpoint]=\"'uploader'\"\r\n [showParticipants]=\"true\"\r\n [autoMarkRead]=\"true\"\r\n [refreshIntervalMs]=\"0\"\r\n [styleClass]=\"'h-full'\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.requestDiscussionUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n ClientInstancePreview,\r\n ClientInstancePreviewConfig,\r\n} from '@masterteam/client-components/client-instance-preview';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { DiscussionThread } from '@masterteam/discussion';\r\nimport { ClientForm } from '@masterteam/forms/client-form';\r\n\r\nimport { RuntimeActionContextStore } from '@masterteam/components/runtime-action';\r\n\r\nimport { WorkCenterFacade } from '../../../store/work-center/work-center.facade';\r\nimport {\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterLookups,\r\n} from '../../../store/work-center/work-center.model';\r\nimport { WorkCenterProcessPreview } from '../../work-center-item-modal/work-center-process-preview/work-center-process-preview';\r\nimport {\r\n readItemContext,\r\n readNumber,\r\n readString,\r\n} from '../work-center-types.helpers';\r\n\r\n@Component({\r\n selector: 'mt-work-center-process-step-type',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Tabs,\r\n ClientForm,\r\n ClientInstancePreview,\r\n DiscussionThread,\r\n WorkCenterProcessPreview,\r\n ],\r\n templateUrl: './work-center-process-step-type.html',\r\n})\r\nexport class WorkCenterProcessStepType implements OnDestroy {\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly actionContext = inject(RuntimeActionContextStore, {\r\n optional: true,\r\n });\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly lookups = input<WorkCenterLookups | null>(null);\r\n readonly readOnly = input(false);\r\n private readonly clientForm = viewChild(ClientForm);\r\n protected readonly formLookups = computed(\r\n () => this.lookups() ?? this.facade.lookups(),\r\n );\r\n\r\n protected readonly activeTab = signal('form');\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n protected readonly tabOptions = computed(() => {\r\n this.activeLang();\r\n return [\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.form'),\r\n value: 'form',\r\n icon: 'file.file-03',\r\n },\r\n ...(this.levelDetailsConfig()\r\n ? [\r\n {\r\n label: this.levelDetailsLabel(),\r\n value: 'levelDetails',\r\n icon: 'file.folder',\r\n },\r\n ]\r\n : []),\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.approvals'),\r\n value: 'approvals',\r\n icon: 'custom.document-approval',\r\n },\r\n {\r\n label: this.transloco.translate<string>('workCenter.tabs.steps'),\r\n value: 'schema',\r\n icon: 'custom.flow-chart',\r\n },\r\n ...(!this.readOnly()\r\n ? [\r\n {\r\n label: this.transloco.translate<string>(\r\n 'workCenter.tabs.discussion',\r\n ),\r\n value: 'discussion',\r\n icon: 'custom.discussion-area',\r\n },\r\n ]\r\n : []),\r\n ];\r\n });\r\n protected readonly itemContext = computed(() =>\r\n readItemContext(this.details()),\r\n );\r\n protected readonly requestId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'requestId') ??\r\n readNumber(this.itemContext(), 'draftProcessId'),\r\n );\r\n protected readonly moduleKey = computed(\r\n () => readString(this.itemContext(), 'moduleKey') ?? '',\r\n );\r\n protected readonly operationKey = computed(\r\n () => readString(this.itemContext(), 'operationKey') ?? '',\r\n );\r\n protected readonly moduleId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleId'),\r\n );\r\n protected readonly levelId = computed(() =>\r\n readNumber(this.itemContext(), 'levelId'),\r\n );\r\n protected readonly levelDataId = computed(() =>\r\n readNumber(this.itemContext(), 'levelDataId'),\r\n );\r\n protected readonly moduleDataId = computed(() =>\r\n readNumber(this.itemContext(), 'moduleDataId'),\r\n );\r\n protected readonly requestSchemaId = computed(() =>\r\n readNumber(this.itemContext(), 'requestSchemaId'),\r\n );\r\n protected readonly draftProcessId = computed(\r\n () =>\r\n readNumber(this.itemContext(), 'draftProcessId') ??\r\n readNumber(this.itemContext(), 'requestId'),\r\n );\r\n protected readonly discussionRecordId = computed(() => this.requestId() ?? 0);\r\n protected readonly canRenderForm = computed(\r\n () => !!this.moduleKey() && !!this.operationKey(),\r\n );\r\n protected readonly canRenderDiscussion = computed(\r\n () => this.discussionRecordId() > 0,\r\n );\r\n protected readonly canRenderPreview = computed(\r\n () => (this.requestId() ?? 0) > 0,\r\n );\r\n // Level record preview for the process step's owning level. The fetch\r\n // contextKey pairs the numeric `levelId` (schema/context) with the\r\n // `levelDataId` record id — same shape as the level-preview dialog.\r\n protected readonly levelDetailsConfig =\r\n computed<ClientInstancePreviewConfig | null>(() => {\r\n const levelId = this.levelId();\r\n const levelDataId = this.levelDataId();\r\n\r\n if (levelId == null || levelDataId == null) {\r\n return null;\r\n }\r\n\r\n return {\r\n contextKey: `level:${levelId}`,\r\n instanceId: levelDataId,\r\n displayAreas: ['preview'],\r\n };\r\n });\r\n // The preview response carries the level name in its schema, so the tab is\r\n // titled \"{Level Name} Details\" once it resolves and falls back to the\r\n // generic \"Level Details\" until then.\r\n private readonly levelPreview = viewChild(ClientInstancePreview);\r\n private readonly levelDetailsLabel = computed(() => {\r\n this.activeLang();\r\n const levelName = this.levelPreview()?.schemaName();\r\n\r\n return levelName\r\n ? this.transloco.translate<string>('workCenter.tabs.levelDetailsNamed', {\r\n name: levelName,\r\n })\r\n : this.transloco.translate<string>('workCenter.tabs.levelDetails');\r\n });\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n this.actionContext?.setFormSource(\r\n this.readOnly() ? null : (this.clientForm() ?? null),\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.actionContext?.setFormSource(null);\r\n }\r\n}\r\n","<div\r\n class=\"mt-modal-content flex h-full min-h-0 flex-col gap-4 p-4 lg:overflow-hidden\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <div\r\n class=\"flex flex-1 min-h-0 flex-col gap-4 lg:grid lg:grid-cols-[13rem_minmax(0,1fr)] lg:gap-6\"\r\n >\r\n @if (tabOptions().length > 1) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabOptions()\"\r\n mode=\"vertical\"\r\n size=\"small\"\r\n />\r\n }\r\n\r\n <div class=\"min-w-0 flex-1 min-h-0 lg:overflow-hidden\">\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'form'\"\r\n >\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n @if (canRenderForm()) {\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [operationKey]=\"operationKey()\"\r\n [moduleId]=\"moduleId()\"\r\n [levelId]=\"levelId()\"\r\n [levelDataId]=\"levelDataId()\"\r\n [moduleDataId]=\"moduleDataId()\"\r\n [requestSchemaId]=\"requestSchemaId()\"\r\n [draftProcessId]=\"draftProcessId()\"\r\n [readonly]=\"readOnly()\"\r\n [lookups]=\"formLookups()\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.processFormUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"h-full min-h-0 lg:overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'levelDetails'\"\r\n >\r\n @if (levelDetailsConfig(); as levelDetailsConfig) {\r\n <div\r\n class=\"min-w-0 h-full min-h-0 lg:overflow-y-auto lg:overscroll-contain lg:pr-2\"\r\n >\r\n <mt-client-instance-preview [config]=\"levelDetailsConfig\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'approvals'\"\r\n >\r\n @if (canRenderPreview()) {\r\n <mt-work-center-process-preview\r\n [requestId]=\"requestId()\"\r\n [view]=\"'approvals'\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.processPreviewUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex-1 min-h-0 overflow-auto\"\r\n [hidden]=\"activeTab() !== 'schema'\"\r\n >\r\n @if (canRenderPreview()) {\r\n <mt-work-center-process-preview\r\n [requestId]=\"requestId()\"\r\n [view]=\"'schema'\"\r\n />\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.processPreviewUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!readOnly()) {\r\n <div\r\n class=\"h-full min-h-0 overflow-hidden\"\r\n [hidden]=\"activeTab() !== 'discussion'\"\r\n >\r\n @if (canRenderDiscussion()) {\r\n <div\r\n class=\"h-[32rem] min-h-[22rem] overflow-hidden rounded-lg border border-surface-200 bg-surface-50 lg:h-full lg:min-h-0\"\r\n >\r\n <mt-discussion-thread\r\n [moduleType]=\"'ProcessRequest'\"\r\n [recordId]=\"discussionRecordId()\"\r\n [mentionSearchEndpoint]=\"'Identity/users'\"\r\n [mentionSearchParam]=\"'query'\"\r\n [mentionSearchDataPath]=\"'data'\"\r\n [uploadEndpoint]=\"'uploader'\"\r\n [attachmentDownloadEndpoint]=\"'uploader'\"\r\n [showParticipants]=\"true\"\r\n [autoMarkRead]=\"true\"\r\n [refreshIntervalMs]=\"0\"\r\n [styleClass]=\"'h-full'\"\r\n />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-lg border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ t(\"context.processDiscussionUnavailable\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input } from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\n\r\nimport {\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterLookups,\r\n} from '../../store/work-center/work-center.model';\r\nimport { WorkCenterEscalationInstanceType } from '../work-center-types/work-center-escalation-instance-type/work-center-escalation-instance-type';\r\nimport { WorkCenterModuleType } from '../work-center-types/work-center-module-type/work-center-module-type';\r\nimport { WorkCenterProcessRequestType } from '../work-center-types/work-center-process-request-type/work-center-process-request-type';\r\nimport { WorkCenterProcessStepType } from '../work-center-types/work-center-process-step-type/work-center-process-step-type';\r\n\r\n@Component({\r\n selector: 'mt-work-center-item-modal',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n WorkCenterProcessStepType,\r\n WorkCenterProcessRequestType,\r\n WorkCenterEscalationInstanceType,\r\n WorkCenterModuleType,\r\n ],\r\n templateUrl: './work-center-item-modal.html',\r\n host: {\r\n class: 'block h-full min-h-0',\r\n },\r\n})\r\nexport class WorkCenterItemModal {\r\n readonly details = input.required<WorkCenterItemBasicInfoData>();\r\n readonly lookups = input<WorkCenterLookups | null>(null);\r\n readonly readOnly = input(false);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workCenter'\">\r\n @if (details().type === \"ProcessStep\") {\r\n <mt-work-center-process-step-type\r\n [details]=\"details()\"\r\n [lookups]=\"lookups()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n } @else if (details().type === \"ProcessRequest\") {\r\n <mt-work-center-process-request-type\r\n [details]=\"details()\"\r\n [lookups]=\"lookups()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n } @else if (details().type === \"EscalationInstance\") {\r\n <mt-work-center-escalation-instance-type\r\n [details]=\"details()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n } @else if (details().type === \"Module\" || details().type === \"GeneralTask\") {\r\n <mt-work-center-module-type\r\n [details]=\"details()\"\r\n [lookups]=\"lookups()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n } @else {\r\n <div class=\"mt-modal-content flex h-full items-center justify-center p-4\">\r\n <p class=\"text-sm text-surface-500\">{{ t(\"modal.unsupportedType\") }}</p>\r\n </div>\r\n }\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport {\r\n RuntimeActionContextStore,\r\n RuntimeActionRunner,\r\n resolveActionLabel,\r\n} from '@masterteam/components/runtime-action';\r\nimport { Subscription, map, take } from 'rxjs';\r\n\r\nimport {\r\n ApiEnvelope,\r\n WorkCenterItemActionAfterSuccess,\r\n WorkCenterItemActionExecutionResult,\r\n WorkCenterItemActionsData,\r\n WorkCenterItemContextKey,\r\n WorkCenterClientFormModalData,\r\n WorkCenterPreviewLevelTarget,\r\n WorkCenterRuntimeItemAction,\r\n} from '../../../store/work-center/work-center.model';\r\nimport { WorkCenterFacade } from '../../../store/work-center/work-center.facade';\r\nimport { WorkCenterClientFormModal } from '../../work-center-client-form-modal/work-center-client-form-modal';\r\n\r\ntype FooterActionSeverity = 'primary' | 'secondary' | 'success' | 'danger';\r\ntype FooterActionVariant = 'outlined' | undefined;\r\n\r\ninterface ModalFooterAction extends WorkCenterRuntimeItemAction {\r\n label: string;\r\n severity: FooterActionSeverity;\r\n variant: FooterActionVariant;\r\n}\r\n\r\nconst DEFAULT_GENERAL_TASK_MODAL_STYLE_CLASS = '!w-[70vw] !h-[90vh]';\r\n\r\n@Component({\r\n selector: 'mt-work-center-item-modal-footer-actions',\r\n standalone: true,\r\n imports: [CommonModule, TranslocoDirective, Button],\r\n templateUrl: './work-center-item-modal-footer-actions.html',\r\n host: {\r\n class: 'flex w-full flex-1 flex-wrap items-center justify-end gap-2',\r\n },\r\n})\r\nexport class WorkCenterItemModalFooterActions implements OnDestroy {\r\n private readonly http = inject(HttpClient);\r\n private readonly runner = inject(RuntimeActionRunner);\r\n private readonly actionContext = inject(RuntimeActionContextStore);\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n private loadSub?: Subscription;\r\n private lastContextKey: WorkCenterItemContextKey | null = null;\r\n private currentExecution: { actionKey: string; cancelled: boolean } | null =\r\n null;\r\n\r\n readonly contextKey = input<WorkCenterItemContextKey | null>(null);\r\n readonly previewLevelTarget = input<WorkCenterPreviewLevelTarget | null>(\r\n null,\r\n );\r\n readonly actionExecuted = output<WorkCenterItemActionExecutionResult>();\r\n readonly previewLevelSelected = output<WorkCenterPreviewLevelTarget>();\r\n readonly visibilityChange = output<boolean>();\r\n\r\n private readonly reloadTick = signal(0);\r\n private readonly hasResolvedLoad = signal(false);\r\n protected readonly loading = signal(false);\r\n protected readonly error = signal<string | null>(null);\r\n private readonly actionData = signal<WorkCenterItemActionsData | null>(null);\r\n protected readonly actions = signal<WorkCenterRuntimeItemAction[]>([]);\r\n protected readonly pendingActionKey = signal<string | null>(null);\r\n protected readonly displayActions = computed<ModalFooterAction[]>(() =>\r\n this.actions()\r\n .filter(\r\n (action) =>\r\n action.isAvailable !== false &&\r\n !!action.url &&\r\n !!normalizeMethod(action.httpMethod),\r\n )\r\n .map((action, index) => ({\r\n ...action,\r\n label: resolveActionLabel(action),\r\n severity: resolveActionSeverity(action.actionKey, index),\r\n variant: resolveActionVariant(action.actionKey, index),\r\n })),\r\n );\r\n protected readonly shouldRender = computed(\r\n () =>\r\n !!this.contextKey() &&\r\n (!this.hasResolvedLoad() ||\r\n this.loading() ||\r\n !!this.error() ||\r\n !!this.previewLevelTarget() ||\r\n this.displayActions().length > 0 ||\r\n !!this.pendingActionKey()),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const contextKey = this.contextKey();\r\n this.reloadTick();\r\n this.error.set(null);\r\n\r\n if (!contextKey) {\r\n this.lastContextKey = null;\r\n this.actionData.set(null);\r\n this.actions.set([]);\r\n this.loading.set(false);\r\n this.hasResolvedLoad.set(false);\r\n return;\r\n }\r\n\r\n if (contextKey !== this.lastContextKey) {\r\n this.actionData.set(null);\r\n this.actions.set([]);\r\n this.lastContextKey = contextKey;\r\n }\r\n\r\n untracked(() => this.loadActions(contextKey));\r\n });\r\n\r\n effect(() => {\r\n this.visibilityChange.emit(this.shouldRender());\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n if (this.currentExecution) {\r\n this.currentExecution.cancelled = true;\r\n }\r\n }\r\n\r\n protected previewLevelLabel(\r\n target: WorkCenterPreviewLevelTarget,\r\n t: (key: string, params?: Record<string, unknown>) => string,\r\n ): string {\r\n const moduleName = target.moduleName?.trim();\r\n const navigatesToModule =\r\n target.moduleId !== null && target.moduleId !== undefined && !!moduleName;\r\n\r\n return navigatesToModule\r\n ? t('modal.previewModule', { module: moduleName })\r\n : t('modal.previewLevel');\r\n }\r\n\r\n protected async executeAction(action: ModalFooterAction): Promise<void> {\r\n if (this.pendingActionKey()) {\r\n return;\r\n }\r\n\r\n if (this.isGeneralTaskUpdateAction(action)) {\r\n this.executeGeneralTaskUpdateAction(action);\r\n return;\r\n }\r\n\r\n this.error.set(null);\r\n this.pendingActionKey.set(action.actionKey);\r\n const execution = { actionKey: action.actionKey, cancelled: false };\r\n this.currentExecution = execution;\r\n\r\n const result = await this.runner.execute(action, {\r\n defaultAfterSuccess: resolveDefaultAfterSuccess(action.actionKey),\r\n silent: true,\r\n externalPayloadResolvers: {\r\n values: () => this.actionContext.resolveFormValues(),\r\n },\r\n });\r\n\r\n if (execution.cancelled) {\r\n return;\r\n }\r\n\r\n this.pendingActionKey.set(null);\r\n this.currentExecution = null;\r\n\r\n if (result.status === 'cancelled') {\r\n return;\r\n }\r\n\r\n if (result.status === 'error') {\r\n const message =\r\n result.error instanceof Error\r\n ? result.error.message\r\n : `Failed to execute ${action.label}.`;\r\n this.error.set(message);\r\n return;\r\n }\r\n\r\n const afterSuccess = result.afterSuccess ?? 'refresh';\r\n\r\n if (afterSuccess === 'refresh') {\r\n this.reloadTick.update((value) => value + 1);\r\n }\r\n\r\n this.actionExecuted.emit({\r\n actionKey: result.actionKey,\r\n afterSuccess,\r\n });\r\n }\r\n\r\n private loadActions(contextKey: WorkCenterItemContextKey): void {\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(true);\r\n this.hasResolvedLoad.set(false);\r\n\r\n this.loadSub = this.http\r\n .get<ApiEnvelope<WorkCenterItemActionsData>>(\r\n 'workcenter/runtime/item-actions',\r\n {\r\n params: { contextKey },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.code === 1) {\r\n return response.data;\r\n }\r\n\r\n throw new Error(\r\n resolveEnvelopeErrorMessage(\r\n response,\r\n this.transloco.translate('workCenter.actions.loadActionsFailed'),\r\n ),\r\n );\r\n }),\r\n )\r\n .subscribe({\r\n next: (data) => {\r\n this.actionData.set(data);\r\n this.actions.set(data.actions ?? []);\r\n this.loading.set(false);\r\n this.hasResolvedLoad.set(true);\r\n },\r\n error: (error: unknown) => {\r\n this.actionData.set(null);\r\n this.actions.set([]);\r\n this.loading.set(false);\r\n this.hasResolvedLoad.set(true);\r\n this.error.set(\r\n resolveHttpErrorMessage(\r\n error,\r\n this.transloco.translate('workCenter.actions.loadActionsFailed'),\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n\r\n private executeGeneralTaskUpdateAction(action: ModalFooterAction): void {\r\n this.error.set(null);\r\n\r\n const modalData = this.buildGeneralTaskUpdateModalData(action);\r\n if (!modalData.moduleDataId) {\r\n this.error.set(\r\n this.transloco.translate('workCenter.error.missingModuleDataId'),\r\n );\r\n return;\r\n }\r\n\r\n this.pendingActionKey.set(action.actionKey);\r\n const execution = { actionKey: action.actionKey, cancelled: false };\r\n this.currentExecution = execution;\r\n\r\n const ref = this.modal.openModal(WorkCenterClientFormModal, 'dialog', {\r\n header: resolveActionLabel(action),\r\n styleClass: DEFAULT_GENERAL_TASK_MODAL_STYLE_CLASS,\r\n position: 'end',\r\n dismissableMask: true,\r\n inputValues: {\r\n data: modalData,\r\n operationKey: resolvePayloadString(action, 'operationKey') ?? 'Update',\r\n closeOnPendingApproval: true,\r\n lookups: this.facade.lookups(),\r\n },\r\n });\r\n\r\n ref.onClose.pipe(take(1)).subscribe((result: unknown) => {\r\n if (execution.cancelled) {\r\n return;\r\n }\r\n\r\n this.pendingActionKey.set(null);\r\n this.currentExecution = null;\r\n\r\n if (!result) {\r\n return;\r\n }\r\n\r\n this.reloadTick.update((value) => value + 1);\r\n this.actionExecuted.emit({\r\n actionKey: action.actionKey,\r\n afterSuccess: 'refresh',\r\n });\r\n });\r\n }\r\n\r\n private isGeneralTaskUpdateAction(\r\n action: WorkCenterRuntimeItemAction,\r\n ): boolean {\r\n const data = this.actionData();\r\n return (\r\n normalizeKey(data?.type) === 'generaltask' &&\r\n normalizeKey(action.actionKey) === 'update'\r\n );\r\n }\r\n\r\n private buildGeneralTaskUpdateModalData(\r\n action: WorkCenterRuntimeItemAction,\r\n ): WorkCenterClientFormModalData {\r\n const data = this.actionData();\r\n const context = data?.context ?? {};\r\n\r\n return {\r\n moduleKey:\r\n resolvePayloadString(action, 'moduleKey') ??\r\n readRecordString(context, 'moduleKey') ??\r\n 'GeneralTask',\r\n moduleId:\r\n resolvePayloadId(action, 'moduleId') ??\r\n readRecordId(context, 'moduleId'),\r\n levelId:\r\n resolvePayloadId(action, 'levelId') ?? readRecordId(context, 'levelId'),\r\n levelDataId:\r\n resolvePayloadId(action, 'levelDataId') ??\r\n readRecordId(context, 'levelDataId'),\r\n moduleDataId:\r\n resolvePayloadId(action, 'moduleDataId') ??\r\n readRecordId(context, 'moduleDataId') ??\r\n resolvePayloadId(action, 'recordId') ??\r\n readRecordId(context, 'instanceId'),\r\n };\r\n }\r\n}\r\n\r\nfunction normalizeMethod(value: string | null | undefined): string | null {\r\n if (!value || typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const method = value.trim().toUpperCase();\r\n return method.length ? method : null;\r\n}\r\n\r\nfunction normalizeKey(value: string | null | undefined): string {\r\n if (!value || typeof value !== 'string') {\r\n return '';\r\n }\r\n\r\n return value\r\n .trim()\r\n .replace(/[\\s_-]/g, '')\r\n .toLowerCase();\r\n}\r\n\r\nfunction resolvePayloadString(\r\n action: WorkCenterRuntimeItemAction,\r\n key: string,\r\n): string | undefined {\r\n return readRecordString(action.payloadTemplate, key);\r\n}\r\n\r\nfunction resolvePayloadId(\r\n action: WorkCenterRuntimeItemAction,\r\n key: string,\r\n): number | string | undefined {\r\n return readRecordId(action.payloadTemplate, key);\r\n}\r\n\r\nfunction readRecordString(\r\n record: Record<string, unknown> | null | undefined,\r\n key: string,\r\n): string | undefined {\r\n const value = record?.[key];\r\n return typeof value === 'string' && value.trim().length\r\n ? value.trim()\r\n : undefined;\r\n}\r\n\r\nfunction readRecordId(\r\n record: Record<string, unknown> | null | undefined,\r\n key: string,\r\n): number | string | undefined {\r\n const value = record?.[key];\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const normalized = value.trim();\r\n return normalized.length ? normalized : undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n// Terminal actions leave nothing to show — after a delete the item no longer\r\n// resolves, so refreshing would leave the drawer open on an empty body. The\r\n// backend can still override this by sending an explicit `afterSuccess` on the\r\n// action; this only sets the fallback default.\r\nconst CLOSE_AFTER_SUCCESS_ACTION_KEYS = new Set(['close', 'delete']);\r\n\r\nfunction resolveDefaultAfterSuccess(\r\n actionKey: string,\r\n): WorkCenterItemActionAfterSuccess {\r\n return CLOSE_AFTER_SUCCESS_ACTION_KEYS.has(normalizeKey(actionKey))\r\n ? 'close'\r\n : 'refresh';\r\n}\r\n\r\nfunction resolveActionSeverity(\r\n actionKey: string,\r\n index: number,\r\n): FooterActionSeverity {\r\n const normalized = actionKey.trim().toLowerCase();\r\n if (normalized === 'approve') {\r\n return 'success';\r\n }\r\n\r\n if (\r\n normalized === 'close' ||\r\n normalized === 'delete' ||\r\n normalized === 'reject' ||\r\n normalized === 'cancel'\r\n ) {\r\n return 'danger';\r\n }\r\n\r\n return index === 0 ? 'primary' : 'secondary';\r\n}\r\n\r\nfunction resolveActionVariant(\r\n actionKey: string,\r\n index: number,\r\n): FooterActionVariant {\r\n const severity = resolveActionSeverity(actionKey, index);\r\n return severity === 'primary' || severity === 'success'\r\n ? undefined\r\n : 'outlined';\r\n}\r\n\r\nfunction resolveEnvelopeErrorMessage(\r\n response: { message?: string | null; errors?: unknown } | null | undefined,\r\n fallback: string,\r\n): string {\r\n return (\r\n (response?.errors as { message?: string } | null)?.message ??\r\n response?.message ??\r\n fallback\r\n );\r\n}\r\n\r\nfunction resolveHttpErrorMessage(error: unknown, fallback: string): string {\r\n if (!error || typeof error !== 'object') {\r\n return fallback;\r\n }\r\n\r\n const httpError = error as {\r\n message?: string;\r\n error?: { message?: string | null } | null;\r\n };\r\n\r\n return httpError.error?.message ?? httpError.message ?? fallback;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workCenter'\">\r\n @if (shouldRender()) {\r\n @if (error(); as error) {\r\n <span class=\"me-auto max-w-md text-sm text-red-600\">\r\n {{ error }}\r\n </span>\r\n } @else if (loading() && !displayActions().length) {\r\n <span class=\"me-auto text-sm text-surface-500\">{{\r\n t(\"modal.loadingActions\")\r\n }}</span>\r\n }\r\n\r\n @if (previewLevelTarget(); as previewLevelTarget) {\r\n <mt-button\r\n [label]=\"previewLevelLabel(previewLevelTarget, t)\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"loading() || !!pendingActionKey()\"\r\n (onClick)=\"previewLevelSelected.emit(previewLevelTarget)\"\r\n />\r\n }\r\n\r\n @for (action of displayActions(); track action.actionKey + action.url) {\r\n <mt-button\r\n [label]=\"action.label\"\r\n [severity]=\"action.severity\"\r\n [variant]=\"action.variant\"\r\n [disabled]=\"loading() || !!pendingActionKey()\"\r\n [loading]=\"pendingActionKey() === action.actionKey\"\r\n (onClick)=\"executeAction(action)\"\r\n />\r\n }\r\n }\r\n</ng-container>\r\n","import type { WorkCenterItemContextKey } from '../../store/work-center/work-center.model';\r\n\r\n// Context keys contain `/`; keep them in one route segment without `%2F`/`%25`.\r\nconst ROUTE_CONTEXT_KEY_PREFIX = 'wc1.';\r\nconst HEX_PAIR_PATTERN = /^[\\da-f]{2}$/i;\r\n\r\nexport function encodeWorkCenterRouteContextKey(\r\n contextKey: WorkCenterItemContextKey,\r\n): string {\r\n const encoded = encodeURIComponent(contextKey);\r\n let hex = '';\r\n\r\n for (let index = 0; index < encoded.length; index += 1) {\r\n if (encoded[index] === '%') {\r\n hex += encoded.slice(index + 1, index + 3).toLowerCase();\r\n index += 2;\r\n continue;\r\n }\r\n\r\n hex += encoded.charCodeAt(index).toString(16).padStart(2, '0');\r\n }\r\n\r\n return `${ROUTE_CONTEXT_KEY_PREFIX}${hex}`;\r\n}\r\n\r\nexport function decodeWorkCenterRouteContextKey(\r\n value: WorkCenterItemContextKey | null,\r\n): WorkCenterItemContextKey | null {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n if (value.startsWith(ROUTE_CONTEXT_KEY_PREFIX)) {\r\n return decodeRouteSafeContextKey(\r\n value.slice(ROUTE_CONTEXT_KEY_PREFIX.length),\r\n );\r\n }\r\n\r\n try {\r\n return decodeURIComponent(value);\r\n } catch {\r\n return value;\r\n }\r\n}\r\n\r\nfunction decodeRouteSafeContextKey(\r\n hex: string,\r\n): WorkCenterItemContextKey | null {\r\n if (hex.length % 2 !== 0) {\r\n return null;\r\n }\r\n\r\n const parts = hex.match(/.{2}/g) ?? [];\r\n if (parts.some((part) => !HEX_PAIR_PATTERN.test(part))) {\r\n return null;\r\n }\r\n\r\n try {\r\n return decodeURIComponent(\r\n parts.map((part) => `%${part.toUpperCase()}`).join(''),\r\n );\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Drawer } from '@masterteam/components/drawer';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { RuntimeActionContextStore } from '@masterteam/components/runtime-action';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { map } from 'rxjs';\r\n\r\nimport {\r\n ApiEnvelope,\r\n WorkCenterItemActionExecutionResult,\r\n WorkCenterItemBasicInfoData,\r\n WorkCenterItemContextKey,\r\n WorkCenterPreviewLevelTarget,\r\n} from '../../store/work-center/work-center.model';\r\nimport { WorkCenterFacade } from '../../store/work-center/work-center.facade';\r\nimport { WorkCenterItemModal } from '../work-center-item-modal/work-center-item-modal';\r\nimport { WorkCenterItemModalFooterActions } from './work-center-item-modal-footer-actions/work-center-item-modal-footer-actions';\r\nimport { decodeWorkCenterRouteContextKey } from './work-center-route-context-key';\r\n\r\nconst DEFAULT_DRAWER_STYLE_CLASS =\r\n 'mt-work-center-item-drawer !absolute !w-[96vw] md:!w-[90vw] xl:!w-[82vw]';\r\n\r\n// This component is used both as a plain child (work-center-page) and as a\r\n// routed component behind `withComponentInputBinding()`. The router's input\r\n// binder writes *every* declared input on each route emission — inputs with no\r\n// matching query param / route param / data key are written as `undefined`,\r\n// which silently wipes the declared default. Coalescing here keeps the defaults\r\n// intact for the routed usage while still honouring explicit bindings.\r\nfunction withDefault<T>(fallback: T) {\r\n return (value: T | null | undefined): T => value ?? fallback;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-work-center-item-modal-route',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n Drawer,\r\n SkeletonModule,\r\n WorkCenterItemModal,\r\n WorkCenterItemModalFooterActions,\r\n ],\r\n providers: [RuntimeActionContextStore],\r\n templateUrl: './work-center-item-modal-route.html',\r\n})\r\nexport class WorkCenterItemModalRoute {\r\n private readonly http = inject(HttpClient);\r\n private readonly router = inject(Router);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly facade = inject(WorkCenterFacade);\r\n readonly modal = inject(ModalService);\r\n protected readonly lookups = this.facade.lookups;\r\n\r\n readonly contextKey = input<\r\n WorkCenterItemContextKey | null,\r\n WorkCenterItemContextKey | null | undefined\r\n >(null, { transform: withDefault<WorkCenterItemContextKey | null>(null) });\r\n readonly manageRouteOutlet = input<boolean, boolean | null | undefined>(\r\n true,\r\n {\r\n transform: withDefault(true),\r\n },\r\n );\r\n readonly showPreviewLevelAction = input<boolean, boolean | null | undefined>(\r\n true,\r\n { transform: withDefault(true) },\r\n );\r\n readonly readOnly = input<boolean, boolean | null | undefined>(false, {\r\n transform: withDefault(false),\r\n });\r\n readonly appendTo = input<\r\n string | HTMLElement,\r\n string | HTMLElement | null | undefined\r\n >('self', { transform: withDefault<string | HTMLElement>('self') });\r\n readonly drawerStyleClass = input<string, string | null | undefined>(\r\n DEFAULT_DRAWER_STYLE_CLASS,\r\n { transform: withDefault(DEFAULT_DRAWER_STYLE_CLASS) },\r\n );\r\n readonly previewLevel = output<WorkCenterPreviewLevelTarget>();\r\n readonly closed = output<void>();\r\n protected readonly drawerVisible = signal(true);\r\n protected readonly loading = signal(false);\r\n protected readonly error = signal<string | null>(null);\r\n protected readonly details = signal<WorkCenterItemBasicInfoData | null>(null);\r\n protected readonly detailsReloadTick = signal(0);\r\n protected readonly footerActionsMounted = signal(false);\r\n protected readonly resolvedContextKey = computed(() =>\r\n decodeWorkCenterRouteContextKey(this.contextKey()),\r\n );\r\n protected readonly drawerTitle = computed(\r\n () =>\r\n this.readDisplayField(this.details()?.item, 'title') ||\r\n this.transloco.translate<string>('workCenter.page.itemDetails'),\r\n );\r\n protected readonly drawerSubtitle = computed(\r\n () => this.readDisplayField(this.details()?.item, 'subtitle') ?? '',\r\n );\r\n protected readonly previewLevelTarget =\r\n computed<WorkCenterPreviewLevelTarget | null>(() =>\r\n this.resolvePreviewLevelTarget(this.details()),\r\n );\r\n protected readonly displayedPreviewLevelTarget = computed(() =>\r\n this.showPreviewLevelAction() ? this.previewLevelTarget() : null,\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n this.footerActionsMounted.set(!!this.resolvedContextKey());\r\n });\r\n\r\n effect((onCleanup) => {\r\n const contextKey = this.resolvedContextKey();\r\n this.detailsReloadTick();\r\n\r\n this.error.set(null);\r\n this.details.set(null);\r\n\r\n if (!contextKey) {\r\n this.loading.set(false);\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n\r\n const subscription = this.http\r\n .get<ApiEnvelope<WorkCenterItemBasicInfoData>>(\r\n 'workcenter/runtime/item-basic-info',\r\n {\r\n params: { contextKey },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.code === 1) {\r\n return response.data;\r\n }\r\n\r\n throw new Error(this.resolveErrorMessage(response));\r\n }),\r\n )\r\n .subscribe({\r\n next: (details) => {\r\n this.details.set(details);\r\n this.loading.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.error.set(\r\n error instanceof Error\r\n ? error.message\r\n : this.transloco.translate<string>(\r\n 'workCenter.error.failedLoadDetails',\r\n ),\r\n );\r\n this.loading.set(false);\r\n },\r\n });\r\n\r\n onCleanup(() => subscription.unsubscribe());\r\n });\r\n }\r\n\r\n protected onActionExecuted(\r\n result: WorkCenterItemActionExecutionResult,\r\n ): void {\r\n // The action mutated server state, so the underlying page list and the\r\n // menu/KPI counters are stale regardless of whether the dialog closes.\r\n this.facade.loadRuntime(this.facade.activeArea(), 'refresh');\r\n\r\n if (result.afterSuccess === 'close') {\r\n void this.close();\r\n return;\r\n }\r\n\r\n this.detailsReloadTick.update((value) => value + 1);\r\n }\r\n\r\n protected onPreviewLevelSelected(target: WorkCenterPreviewLevelTarget): void {\r\n this.previewLevel.emit(target);\r\n }\r\n\r\n protected onFooterVisibilityChange(visible: boolean): void {\r\n this.footerActionsMounted.set(visible);\r\n }\r\n\r\n async onVisibleChange(visible: boolean): Promise<void> {\r\n this.drawerVisible.set(visible);\r\n\r\n if (visible) {\r\n return;\r\n }\r\n\r\n await this.close();\r\n }\r\n\r\n private close(): Promise<boolean> {\r\n if (!this.manageRouteOutlet()) {\r\n this.closed.emit();\r\n return Promise.resolve(true);\r\n }\r\n\r\n return this.closeRouteOutlet();\r\n }\r\n\r\n private closeRouteOutlet(): Promise<boolean> {\r\n return this.router.navigate(\r\n [{ outlets: { [this.route.outlet || 'sidebar']: null } }],\r\n {\r\n relativeTo: this.route.parent,\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n },\r\n );\r\n }\r\n\r\n private resolveErrorMessage(\r\n response: ApiEnvelope<WorkCenterItemBasicInfoData>,\r\n ): string {\r\n const fallbackError = 'Failed to load item details.';\r\n return (\r\n (response.errors as { message?: string } | null)?.message ??\r\n response.message ??\r\n fallbackError\r\n );\r\n }\r\n\r\n private readDisplayField(\r\n item: Record<string, unknown> | null | undefined,\r\n key: string,\r\n ): string | null {\r\n const field = item?.[key];\r\n if (typeof field === 'string' && field.trim().length) {\r\n return field;\r\n }\r\n\r\n if (!field || typeof field !== 'object') {\r\n return null;\r\n }\r\n\r\n const display = (field as { display?: unknown }).display;\r\n return typeof display === 'string' && display.trim().length\r\n ? display\r\n : null;\r\n }\r\n\r\n private resolvePreviewLevelTarget(\r\n details: WorkCenterItemBasicInfoData | null,\r\n ): WorkCenterPreviewLevelTarget | null {\r\n const context = details?.item?.['context'];\r\n if (!context || typeof context !== 'object') {\r\n return null;\r\n }\r\n\r\n const record = context as Record<string, unknown>;\r\n const levelId = normalizeRouteId(record['levelId']);\r\n const levelDataId = normalizeRouteId(record['levelDataId']);\r\n\r\n if (levelId === null || levelDataId === null) {\r\n return null;\r\n }\r\n\r\n return {\r\n levelId,\r\n levelDataId,\r\n moduleId: normalizeRouteId(record['moduleId']),\r\n // `moduleName` is a localized `{ display, en, ar }` translatable; fall\r\n // back to the raw `moduleKey` (e.g. \"Risk\") if BE omits it.\r\n moduleName:\r\n normalizeDisplayName(record['moduleName']) ??\r\n normalizeDisplayName(record['moduleKey']),\r\n };\r\n }\r\n}\r\n\r\n// Accepts either a plain string (e.g. `moduleKey`) or a localized\r\n// `{ display, en, ar }` translatable, returning the display string.\r\nfunction normalizeDisplayName(value: unknown): string | null {\r\n if (typeof value === 'string') {\r\n return value.trim().length ? value.trim() : null;\r\n }\r\n\r\n if (value && typeof value === 'object') {\r\n const record = value as {\r\n display?: unknown;\r\n en?: unknown;\r\n ar?: unknown;\r\n };\r\n\r\n for (const candidate of [record.display, record.en, record.ar]) {\r\n if (typeof candidate === 'string' && candidate.trim().length) {\r\n return candidate.trim();\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction normalizeRouteId(value: unknown): number | string | null {\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const normalized = value.trim();\r\n return normalized.length ? normalized : null;\r\n }\r\n\r\n return null;\r\n}\r\n","<mt-drawer\r\n [visible]=\"drawerVisible()\"\r\n [loadingHeader]=\"loading()\"\r\n [title]=\"drawerTitle()\"\r\n [styleClass]=\"drawerStyleClass()\"\r\n [appendTo]=\"appendTo()\"\r\n position=\"right\"\r\n [modal]=\"true\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n *transloco=\"let t; prefix: 'workCenter'\"\r\n>\r\n <ng-container content>\r\n @if (loading()) {\r\n <div class=\"p-4\" [class]=\"modal.contentClass\">\r\n <div class=\"flex min-h-[22rem] flex-col gap-5\">\r\n <div class=\"flex items-center gap-3\">\r\n <p-skeleton shape=\"circle\" size=\"3rem\" />\r\n <div class=\"flex flex-1 flex-col gap-2\">\r\n <p-skeleton width=\"12rem\" height=\"1rem\" />\r\n <p-skeleton width=\"8rem\" height=\"0.875rem\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid gap-3 md:grid-cols-2\">\r\n @for (_ of [1, 2, 3, 4]; track $index) {\r\n <p-skeleton height=\"5rem\" class=\"rounded-lg\" />\r\n }\r\n </div>\r\n\r\n <p-skeleton height=\"16rem\" class=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n } @else if (error(); as errorMessage) {\r\n <div class=\"p-4\" [class]=\"modal.contentClass\">\r\n <div class=\"flex min-h-[22rem] items-center justify-center\">\r\n <p class=\"max-w-xl text-sm font-medium text-red-600\">\r\n {{ errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n } @else if (details(); as details) {\r\n <div [class]=\"modal.contentClass + ' h-full min-h-0'\">\r\n <mt-work-center-item-modal\r\n [details]=\"details\"\r\n [lookups]=\"lookups()\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n </div>\r\n } @else {\r\n <div class=\"p-4\" [class]=\"modal.contentClass\">\r\n <div class=\"flex min-h-[22rem] items-center justify-center\">\r\n <p class=\"text-sm font-medium text-surface-500\">\r\n {{ t(\"modal.noItemSelected\") }}\r\n </p>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n @if (!readOnly() && footerActionsMounted()) {\r\n <div footer [class]=\"modal.footerClass\">\r\n <mt-work-center-item-modal-footer-actions\r\n [contextKey]=\"resolvedContextKey()\"\r\n [previewLevelTarget]=\"displayedPreviewLevelTarget()\"\r\n (actionExecuted)=\"onActionExecuted($event)\"\r\n (previewLevelSelected)=\"onPreviewLevelSelected($event)\"\r\n (visibilityChange)=\"onFooterVisibilityChange($event)\"\r\n />\r\n </div>\r\n }\r\n</mt-drawer>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ClientPage } from '@masterteam/components/client-page';\r\nimport { ClientPageMenuItem } from '@masterteam/components/client-page-menu';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport {\r\n PropertyFilterBuilder,\r\n PropertyFilterBuilderRule,\r\n PropertyFilterBuilderSchema,\r\n} from '@masterteam/components/property-filter-builder';\r\nimport { StatisticCard } from '@masterteam/components/statistic-card';\r\nimport {\r\n ColumnDef,\r\n Table,\r\n TableFilters,\r\n TablePersistStateKey,\r\n} from '@masterteam/components/table';\r\nimport { ClientLookup } from '@masterteam/forms/client-form';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { take } from 'rxjs';\r\n\r\nimport { WorkCenterClientFormModal } from '../work-center-client-form-modal/work-center-client-form-modal';\r\nimport { WorkCenterItemModalRoute } from '../work-center-item-modal-route/work-center-item-modal-route';\r\nimport { WorkCenterFacade } from '../../store/work-center/work-center.facade';\r\nimport {\r\n WorkCenterArea,\r\n WorkCenterBootstrapInputs,\r\n WorkCenterClientFormModalOptions,\r\n WorkCenterFilterRule,\r\n WorkCenterItemModalOptions,\r\n WorkCenterItemContextKey,\r\n WorkCenterItemModalComponentInput,\r\n WorkCenterRuntimeFilterSchema,\r\n WorkCenterSortRule,\r\n WORK_CENTER_LEVEL_NAME_KEY,\r\n} from '../../store/work-center/work-center.model';\r\n\r\nconst OPERATOR_LABELS: Record<string, string> = {\r\n Eq: 'Equals',\r\n Neq: 'Not equal',\r\n In: 'In',\r\n Contains: 'Contains',\r\n StartsWith: 'Starts with',\r\n Gt: 'Greater than',\r\n Gte: 'Greater than or equal',\r\n Lt: 'Less than',\r\n Lte: 'Less than or equal',\r\n Between: 'Between',\r\n IsNull: 'Is empty',\r\n IsNotNull: 'Is not empty',\r\n};\r\n\r\nconst OPERATOR_VALUE_MODE: Record<\r\n string,\r\n 'single' | 'multi' | 'range' | 'none'\r\n> = {\r\n In: 'multi',\r\n Between: 'range',\r\n IsNull: 'none',\r\n IsNotNull: 'none',\r\n};\r\nconst GENERAL_TASK_CARD_KEYS = new Set([\r\n 'mygeneraltasks',\r\n 'generaltask',\r\n 'generaltasks',\r\n]);\r\n\r\n/**\r\n * Grouped columns the backend has no aggregate for. Their group headers must\r\n * count only the rows on the current page, so the KPI totals map is withheld —\r\n * otherwise a group whose label happens to match a stat (\"Total\", \"Overdue\")\r\n * would show an unrelated number.\r\n */\r\nconst PAGE_LOCAL_GROUP_KEYS = new Set<string>([WORK_CENTER_LEVEL_NAME_KEY]);\r\n\r\nfunction toLabel(value: string): string {\r\n const normalized = value.split('.').pop() ?? value;\r\n return normalized\r\n .replace(/[_-]/g, ' ')\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .trim()\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n}\r\n\r\nfunction columnTypeToViewType(type: string | undefined): string | undefined {\r\n if (type === 'date') return 'Date';\r\n return undefined;\r\n}\r\n\r\nfunction normalizeCardKey(value: string | null | undefined): string {\r\n if (typeof value !== 'string') {\r\n return '';\r\n }\r\n\r\n return value\r\n .trim()\r\n .replace(/[\\s_-]/g, '')\r\n .toLowerCase();\r\n}\r\n\r\n/**\r\n * Strips the user envelope used by `mt-table` user filters down to the\r\n * scalar id that the BE rule payload accepts. Falls back to the original\r\n * value for non-user shapes (e.g. simple string in a select filter).\r\n */\r\nfunction extractIdScalar(value: unknown): unknown {\r\n if (\r\n value !== null &&\r\n typeof value === 'object' &&\r\n 'id' in (value as Record<string, unknown>)\r\n ) {\r\n return (value as Record<string, unknown>)['id'];\r\n }\r\n return value;\r\n}\r\n\r\nfunction toIsoDate(value: unknown): unknown {\r\n if (value instanceof Date) return value.toISOString();\r\n return value;\r\n}\r\n\r\n/**\r\n * Translates one in-table column filter value into a `WorkCenterFilterRule`.\r\n *\r\n * The shape of `raw` depends on the column's filter type — see\r\n * `mt-table` `table-filter-field` outputs:\r\n * - text → string → `Contains`\r\n * - select → scalar | scalar[] → `Eq` | `In`\r\n * - boolean → boolean → `Eq`\r\n * - date → `{ from?, to?, value? }` (Date|null)→ `Between`/`Gte`/`Lte`/`Eq`\r\n * - user → `{ id, ... }` | `{ id, ... }[]` → `Eq` (id) | `In` (ids)\r\n *\r\n * Returns `null` when the value is empty / nothing to send.\r\n */\r\nfunction toRuntimeFilterRule(\r\n field: string,\r\n raw: unknown,\r\n column: ColumnDef | undefined,\r\n): WorkCenterFilterRule | null {\r\n if (raw === null || raw === undefined || raw === '') return null;\r\n\r\n if (typeof raw === 'boolean') {\r\n return { field, op: 'Eq', value: raw };\r\n }\r\n\r\n if (typeof raw === 'number') {\r\n return { field, op: 'Eq', value: raw };\r\n }\r\n\r\n if (typeof raw === 'string') {\r\n if (!raw.trim().length) return null;\r\n return { field, op: 'Contains', value: raw };\r\n }\r\n\r\n if (Array.isArray(raw)) {\r\n const values = raw\r\n .map(extractIdScalar)\r\n .filter((v) => v !== null && v !== undefined && v !== '');\r\n if (!values.length) return null;\r\n return { field, op: 'In', values };\r\n }\r\n\r\n if (typeof raw === 'object') {\r\n const obj = raw as {\r\n from?: unknown;\r\n to?: unknown;\r\n value?: unknown;\r\n id?: unknown;\r\n };\r\n\r\n // User filter envelope -> single-id Eq.\r\n if (obj.id !== undefined && obj.id !== null && obj.id !== '') {\r\n return { field, op: 'Eq', value: obj.id };\r\n }\r\n\r\n const hasFrom = obj.from !== undefined && obj.from !== null;\r\n const hasTo = obj.to !== undefined && obj.to !== null;\r\n if (hasFrom && hasTo) {\r\n return {\r\n field,\r\n op: 'Between',\r\n from: toIsoDate(obj.from),\r\n to: toIsoDate(obj.to),\r\n };\r\n }\r\n if (hasFrom) {\r\n return { field, op: 'Gte', value: toIsoDate(obj.from) };\r\n }\r\n if (hasTo) {\r\n return { field, op: 'Lte', value: toIsoDate(obj.to) };\r\n }\r\n\r\n if (obj.value !== undefined && obj.value !== null && obj.value !== '') {\r\n const treatAsContains =\r\n column?.type === 'text' ||\r\n (column?.filterConfig?.type === 'text' &&\r\n typeof obj.value === 'string');\r\n if (treatAsContains) {\r\n return { field, op: 'Contains', value: obj.value };\r\n }\r\n return { field, op: 'Eq', value: extractIdScalar(obj.value) };\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Walks `mt-table`'s filter map and produces the `WorkCenterFilterRule[]`\r\n * sent on the BE column-filter slice. The synthetic `generalSearch` key is\r\n * skipped because the page keeps general search local-only.\r\n */\r\nfunction buildColumnRuntimeFilters(\r\n filters: TableFilters | null | undefined,\r\n columns: ColumnDef[],\r\n allowedFields: string[] | undefined,\r\n): WorkCenterFilterRule[] {\r\n if (!filters) return [];\r\n\r\n const allowed =\r\n allowedFields && allowedFields.length ? new Set(allowedFields) : null;\r\n const columnByKey = new Map(columns.map((col) => [col.key, col]));\r\n const rules: WorkCenterFilterRule[] = [];\r\n\r\n for (const [key, raw] of Object.entries(filters)) {\r\n if (key === 'generalSearch') continue;\r\n if (allowed && !allowed.has(key)) continue;\r\n\r\n const rule = toRuntimeFilterRule(key, raw, columnByKey.get(key));\r\n if (rule) rules.push(rule);\r\n }\r\n\r\n return rules;\r\n}\r\n\r\nfunction areFilterRulesEqual(\r\n left: WorkCenterFilterRule[],\r\n right: WorkCenterFilterRule[],\r\n): boolean {\r\n return JSON.stringify(left) === JSON.stringify(right);\r\n}\r\n\r\nfunction mapAllowedFields(schema: WorkCenterRuntimeFilterSchema) {\r\n const properties = schema.properties ?? [];\r\n const fromProperties = properties\r\n .filter(\r\n (property) =>\r\n typeof property?.key === 'string' && property.key.length > 0,\r\n )\r\n .map((property) => ({\r\n key: property.key,\r\n label:\r\n property.name?.display ||\r\n property.name?.en ||\r\n property.name?.ar ||\r\n toLabel(property.key),\r\n viewType: property.viewType,\r\n }));\r\n\r\n if (fromProperties.length) {\r\n return fromProperties;\r\n }\r\n\r\n return (schema.allowedFields ?? []).map((field) => ({\r\n key: field,\r\n label: toLabel(field),\r\n }));\r\n}\r\n\r\nfunction mapAllowedOperators(\r\n schema: WorkCenterRuntimeFilterSchema,\r\n getLabel: (key: string) => string,\r\n) {\r\n const options: Array<{\r\n key: string;\r\n label: string;\r\n valueMode: 'single' | 'multi' | 'range' | 'none';\r\n }> = [];\r\n\r\n for (const operator of schema.allowedOperators ?? []) {\r\n if (typeof operator === 'string') {\r\n options.push({\r\n key: operator,\r\n label: getLabel(operator),\r\n valueMode: OPERATOR_VALUE_MODE[operator] ?? 'single',\r\n });\r\n continue;\r\n }\r\n\r\n const key = operator?.value;\r\n if (!key) {\r\n continue;\r\n }\r\n\r\n options.push({\r\n key,\r\n label:\r\n operator.display?.display ||\r\n operator.display?.en ||\r\n operator.display?.ar ||\r\n getLabel(key),\r\n valueMode: OPERATOR_VALUE_MODE[key] ?? 'single',\r\n });\r\n }\r\n\r\n return options;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-work-center-page',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n ClientPage,\r\n PropertyFilterBuilder,\r\n StatisticCard,\r\n Table,\r\n WorkCenterItemModalRoute,\r\n SkeletonModule,\r\n ],\r\n templateUrl: './work-center-page.html',\r\n})\r\nexport class WorkCenterPage {\r\n private readonly facade = inject(WorkCenterFacade);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly activeLang = signal(this.transloco.getActiveLang());\r\n\r\n readonly area = input<WorkCenterArea>('MyInbox');\r\n readonly pageTitle = input<string>('');\r\n readonly menuIcon = input<string>('communication.inbox-01');\r\n readonly lookups = input<ClientLookup[]>([]);\r\n readonly showSidebar = input(true);\r\n readonly bootstrapInputs = input<WorkCenterBootstrapInputs | null>(null);\r\n readonly openItemDrawer = input(false);\r\n readonly itemReadOnly = input(false);\r\n readonly openItemsInModal = input(true);\r\n readonly itemModal = input<WorkCenterItemModalOptions | null>(null);\r\n readonly generalTaskModal = input<WorkCenterClientFormModalOptions | null>(\r\n null,\r\n );\r\n\r\n readonly runtimeFiltersChanged = output<WorkCenterFilterRule[]>();\r\n readonly itemClicked = output<WorkCenterItemContextKey>();\r\n readonly cardSelected = output<string>();\r\n /**\r\n * Emitted whenever the backend sort changes (including grouping, which is\r\n * sent as a sort). Hosts should persist it — the runtime query is rebuilt\r\n * from `bootstrapInputs`, so a sort that isn't round-tripped is dropped on\r\n * the next navigation.\r\n */\r\n readonly sortChanged = output<WorkCenterSortRule[]>();\r\n /** Emitted when the grouped column changes; `null` when grouping is cleared. */\r\n readonly groupChanged = output<string | null>();\r\n\r\n protected readonly context = this.facade.context;\r\n protected readonly headerFilters = this.facade.headerFilters;\r\n protected readonly tableFilters = signal<TableFilters>({});\r\n protected readonly selectedItemContextKey =\r\n signal<WorkCenterItemContextKey | null>(null);\r\n private readonly _menuItems = this.facade.menuItems;\r\n protected readonly menuItems = computed(() => {\r\n this.activeLang();\r\n\r\n return this._menuItems().map((item) => ({\r\n ...item,\r\n subtitle: `${item.count} ${item.title}`,\r\n }));\r\n });\r\n protected readonly rows = this.facade.rows;\r\n protected readonly columns = this.facade.columns;\r\n protected readonly kpis = this.facade.kpis;\r\n protected readonly runtimeFilterSchema = this.facade.runtimeFilterSchema;\r\n protected readonly totalCount = this.facade.totalCount;\r\n protected readonly columnFilters = this.facade.columnFilters;\r\n protected readonly loading = this.facade.loading;\r\n protected readonly groupBy = this.facade.groupBy;\r\n /**\r\n * Sort and grouping live in the runtime query (and the host's URL), not in\r\n * table storage — persisting them locally would let a restored table claim a\r\n * grouping the backend query no longer has. Stable reference: a fresh array\r\n * per change detection would re-run the table's persistence effect.\r\n */\r\n protected readonly persistStateExclude: TablePersistStateKey[] = [\r\n 'pagePosition',\r\n 'sort',\r\n 'groupBy',\r\n ];\r\n protected readonly tableColumns = computed(() =>\r\n this.columns().map((column) => ({\r\n ...column,\r\n sortable: true,\r\n })),\r\n );\r\n\r\n /**\r\n * Grouping is executed by the backend as a single sort, so the table's own\r\n * sort state is driven from the query we actually sent instead of the\r\n * table's internal memory of it.\r\n */\r\n protected readonly sortField = computed(\r\n () => this.context().sort[0]?.field ?? null,\r\n );\r\n protected readonly sortDirection = computed<'asc' | 'desc' | null>(\r\n () => this.context().sort[0]?.dir ?? null,\r\n );\r\n\r\n /**\r\n * Maps each status/group display label to its total count from the KPI\r\n * summary cards so the group header shows the real backend total rather than\r\n * the current-page row count. Withheld for groups the backend doesn't\r\n * aggregate — see `PAGE_LOCAL_GROUP_KEYS`.\r\n */\r\n protected readonly groupCountMap = computed<Map<string, number> | null>(\r\n () => {\r\n const activeGroup = this.groupBy();\r\n if (!activeGroup || PAGE_LOCAL_GROUP_KEYS.has(activeGroup)) {\r\n return null;\r\n }\r\n\r\n const map = new Map<string, number>();\r\n for (const kpi of this.kpis()) {\r\n const label = kpi.subTitle;\r\n const count = Number(kpi.title);\r\n if (label && !isNaN(count)) {\r\n map.set(label, count);\r\n }\r\n }\r\n return map;\r\n },\r\n );\r\n\r\n protected readonly propertyFilterSchema =\r\n computed<PropertyFilterBuilderSchema | null>(() => {\r\n this.activeLang();\r\n const schema = this.runtimeFilterSchema();\r\n if (schema) {\r\n const allowedFields = mapAllowedFields(schema);\r\n const allowedOperators = mapAllowedOperators(schema, (key) =>\r\n this.getOpLabel(key),\r\n );\r\n if (allowedFields.length && allowedOperators.length) {\r\n return { allowedFields, allowedOperators };\r\n }\r\n }\r\n\r\n const fallbackFields = this.columns()\r\n .filter(\r\n (column) => typeof column?.key === 'string' && column.key.length > 0,\r\n )\r\n .map((column) => ({\r\n key: column.key,\r\n label: column.label || toLabel(column.key),\r\n viewType: columnTypeToViewType(column.type),\r\n }));\r\n\r\n if (!fallbackFields.length) {\r\n return null;\r\n }\r\n\r\n const fallbackOperators = Object.keys(OPERATOR_LABELS).map((key) => ({\r\n key,\r\n label: this.getOpLabel(key),\r\n valueMode: OPERATOR_VALUE_MODE[key] ?? 'single',\r\n }));\r\n\r\n return {\r\n allowedFields: fallbackFields,\r\n allowedOperators: fallbackOperators,\r\n };\r\n });\r\n protected readonly showGeneralTaskCreateButton = computed(() =>\r\n GENERAL_TASK_CARD_KEYS.has(\r\n normalizeCardKey(this.context().selectedCardKey),\r\n ),\r\n );\r\n protected readonly generalTaskButtonLabel = computed(() => {\r\n this.activeLang();\r\n return (\r\n this.generalTaskModal()?.buttonLabel?.trim() ||\r\n this.transloco.translate<string>('workCenter.page.new')\r\n );\r\n });\r\n protected readonly resolvedPageTitle = computed(() => {\r\n this.activeLang();\r\n return (\r\n this.pageTitle() ||\r\n this.transloco.translate<string>('workCenter.page.title')\r\n );\r\n });\r\n protected readonly generalTaskButtonIcon = computed(\r\n () => this.generalTaskModal()?.buttonIcon?.trim() || 'general.plus',\r\n );\r\n private readonly defaultModalStyleClass =\r\n '!w-[96vw] md:!w-[84vw] xl:!w-[70vw] !shadow-none';\r\n private readonly defaultGeneralTaskModalStyleClass = '!w-[70vw] !h-[90vh]';\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => this.activeLang.set(lang));\r\n\r\n effect(() => {\r\n this.facade.setLookups(this.lookups());\r\n });\r\n\r\n effect(() => {\r\n const inputs = this.bootstrapInputs();\r\n if (inputs) {\r\n this.facade.setParams(this.area(), inputs);\r\n }\r\n });\r\n }\r\n\r\n onMenuItemClick(item: ClientPageMenuItem): void {\r\n if (item.key === this.context().selectedCardKey) {\r\n return;\r\n }\r\n\r\n // The store drops the previous card's filters and grouping; the table's\r\n // own filter chips live here, so they have to be cleared alongside.\r\n this.tableFilters.set({});\r\n this.facade.selectCardAndLoad(this.area(), item.key);\r\n this.cardSelected.emit(item.key);\r\n this.groupChanged.emit(null);\r\n this.sortChanged.emit([]);\r\n }\r\n\r\n onRuntimeFiltersApplied(filters: PropertyFilterBuilderRule[]): void {\r\n const mappedFilters = filters.map((filter) => ({\r\n field: filter.field,\r\n op: filter.op as WorkCenterFilterRule['op'],\r\n value: filter.value,\r\n values: filter.values,\r\n from: filter.from,\r\n to: filter.to,\r\n }));\r\n\r\n this.facade.applyHeaderFiltersAndLoad(this.area(), mappedFilters);\r\n this.runtimeFiltersChanged.emit(mappedFilters);\r\n }\r\n\r\n onRuntimeFiltersCleared(): void {\r\n this.facade.clearAllFiltersAndLoad(this.area());\r\n this.tableFilters.set({});\r\n this.runtimeFiltersChanged.emit([]);\r\n }\r\n\r\n /**\r\n * Single entry point for `mt-table` (`lazy=true`) — handles both column\r\n * filters and pagination/sort. Filter changes always reset the page to 1\r\n * (handled by `applyColumnFiltersAndLoad`); when only paging/sort changed\r\n * we fall through to `applyTableLazyLoadAndLoad`.\r\n */\r\n /**\r\n * The table asks to group; the backend does the ordering. `setGroupByAndLoad`\r\n * rewrites `context.sort` and resets paging, so the lazy event the table\r\n * fires straight after carries the same sort and lands as a no-op.\r\n */\r\n onTableGroupByChange(key: string | null): void {\r\n const nextGroup = key?.trim() ? key : null;\r\n if (nextGroup === this.groupBy()) {\r\n return;\r\n }\r\n\r\n const previousSort = this.facade.snapshotContext().sort;\r\n // Re-grouping the column we're already sorted by keeps its direction.\r\n const dir =\r\n nextGroup && this.sortField() === nextGroup\r\n ? (this.sortDirection() ?? 'asc')\r\n : 'asc';\r\n\r\n this.facade.setGroupByAndLoad(this.area(), nextGroup, dir);\r\n this.groupChanged.emit(nextGroup);\r\n this.emitSortIfChanged(previousSort);\r\n }\r\n\r\n onTableLazyLoad(event: any): void {\r\n const schema = this.runtimeFilterSchema();\r\n const propertyKeys = (schema?.properties ?? [])\r\n .map((p) => p?.key)\r\n .filter((k): k is string => typeof k === 'string' && k.length > 0);\r\n const allowedKeys = schema?.allowedFields ?? [];\r\n const allowedFields = propertyKeys.length ? propertyKeys : allowedKeys;\r\n\r\n const nextColumnFilters = buildColumnRuntimeFilters(\r\n event?.filters as TableFilters | undefined,\r\n this.columns(),\r\n allowedFields.length ? allowedFields : undefined,\r\n );\r\n\r\n if (!areFilterRulesEqual(nextColumnFilters, this.columnFilters())) {\r\n this.facade.applyColumnFiltersAndLoad(this.area(), nextColumnFilters);\r\n return;\r\n }\r\n\r\n const previousSort = this.facade.snapshotContext().sort;\r\n this.facade.applyTableLazyLoadAndLoad(this.area(), event);\r\n this.emitSortIfChanged(previousSort);\r\n }\r\n\r\n /**\r\n * Announces the backend sort to the host only when it actually moved, so a\r\n * host that mirrors it into the URL doesn't churn history on every page hit.\r\n * Reads the snapshot, not the signal — this runs in the same tick as the\r\n * dispatch that changed it.\r\n */\r\n private emitSortIfChanged(previousSort: WorkCenterSortRule[]): void {\r\n const nextSort = this.facade.snapshotContext().sort;\r\n if (JSON.stringify(previousSort) !== JSON.stringify(nextSort)) {\r\n this.sortChanged.emit(nextSort);\r\n }\r\n }\r\n\r\n onGeneralTaskCreateClick(): void {\r\n const modalOptions = this.generalTaskModal();\r\n const modalData = {\r\n moduleKey: 'GeneralTask',\r\n ...(modalOptions?.data ?? {}),\r\n };\r\n const modalHeader =\r\n modalOptions?.header ??\r\n this.transloco.translate<string>('workCenter.page.createGeneralTask');\r\n const modalStyleClass =\r\n modalOptions?.styleClass ?? this.defaultGeneralTaskModalStyleClass;\r\n const operationKey = modalOptions?.operationKey ?? 'Create';\r\n const closeOnPendingApproval = modalOptions?.closeOnPendingApproval ?? true;\r\n const lookups = modalOptions?.lookups ?? this.lookups();\r\n\r\n const ref = this.modal.openModal(WorkCenterClientFormModal, 'dialog', {\r\n header: modalHeader,\r\n styleClass: modalStyleClass,\r\n position: 'end',\r\n dismissableMask: true,\r\n inputValues: {\r\n data: modalData,\r\n operationKey,\r\n closeOnPendingApproval,\r\n lookups,\r\n },\r\n });\r\n\r\n ref.onClose.pipe(take(1)).subscribe((result: unknown) => {\r\n if (result) {\r\n this.facade.loadRuntime(this.area(), 'refresh');\r\n }\r\n });\r\n }\r\n\r\n onRowClick(row: Record<string, unknown>): void {\r\n const contextKey = this.resolveRowContextKey(row);\r\n console.log('[work-center-debug] page row click', {\r\n contextKey,\r\n row,\r\n openItemsInModal: this.openItemsInModal(),\r\n hasModalComponent: !!this.itemModal()?.component,\r\n });\r\n\r\n if (!contextKey) {\r\n return;\r\n }\r\n\r\n this.itemClicked.emit(contextKey);\r\n\r\n if (this.openItemDrawer()) {\r\n this.selectedItemContextKey.set(contextKey);\r\n return;\r\n }\r\n\r\n if (!this.openItemsInModal()) {\r\n return;\r\n }\r\n\r\n const modalOptions = this.itemModal();\r\n if (!modalOptions?.component) {\r\n return;\r\n }\r\n\r\n const ref = this.modal.openModal(modalOptions.component, 'drawer', {\r\n header:\r\n modalOptions?.header ??\r\n this.transloco.translate<string>('workCenter.page.itemDetails'),\r\n styleClass: modalOptions?.styleClass ?? this.defaultModalStyleClass,\r\n position: modalOptions?.position ?? 'end',\r\n dismissible: true,\r\n modal: true,\r\n ...(modalOptions?.appendTo ? { appendTo: modalOptions.appendTo } : {}),\r\n inputValues: { contextKey } satisfies WorkCenterItemModalComponentInput,\r\n });\r\n\r\n ref.onClose.pipe(take(1)).subscribe(() => {\r\n this.facade.loadRuntime(this.area(), 'refresh');\r\n });\r\n }\r\n\r\n protected readonly rowsClickable = computed(\r\n () => this.openItemDrawer() || this.openItemsInModal(),\r\n );\r\n\r\n private getOpLabel(key: string): string {\r\n return (\r\n this.transloco.translate<string>('workCenter.operator.' + key) ||\r\n OPERATOR_LABELS[key] ||\r\n toLabel(key)\r\n );\r\n }\r\n\r\n private resolveRowContextKey(\r\n row: Record<string, unknown>,\r\n ): WorkCenterItemContextKey | null {\r\n const value = row['contextKey'];\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const normalized = value.trim();\r\n return normalized.length ? normalized : null;\r\n }\r\n}\r\n","<ng-template #headerActions>\r\n <div class=\"flex flex-wrap items-center justify-end gap-2\">\r\n <mt-property-filter-builder\r\n [schema]=\"propertyFilterSchema()\"\r\n [filters]=\"headerFilters()\"\r\n (applied)=\"onRuntimeFiltersApplied($event)\"\r\n (cleared)=\"onRuntimeFiltersCleared()\"\r\n />\r\n\r\n @if (showGeneralTaskCreateButton()) {\r\n <mt-button\r\n [label]=\"generalTaskButtonLabel()\"\r\n [icon]=\"generalTaskButtonIcon()\"\r\n size=\"small\"\r\n (onClick)=\"onGeneralTaskCreateClick()\"\r\n />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #pageContent>\r\n <div class=\"flex flex-col gap-8\">\r\n @if (loading()) {\r\n <div\r\n class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-5 gap-3\"\r\n >\r\n @for (_ of [1, 2, 3, 4, 5]; track $index) {\r\n <p-skeleton height=\"6.5rem\" class=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else if (kpis().length) {\r\n <div class=\"gap-3 flex flex-wrap\">\r\n @for (kpi of kpis(); track $index) {\r\n <mt-statistic-card [data]=\"kpi\" class=\"min-w-[200px]\" />\r\n }\r\n </div>\r\n }\r\n\r\n <mt-table\r\n noCard\r\n [data]=\"rows()\"\r\n [columns]=\"tableColumns()\"\r\n tableLayout=\"auto\"\r\n [clickableRows]=\"rowsClickable()\"\r\n [loading]=\"loading()\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [cellClickFilter]=\"true\"\r\n [generalSearch]=\"true\"\r\n [exportable]=\"true\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [freezeActions]=\"true\"\r\n [lazy]=\"true\"\r\n [lazyLocalSearch]=\"true\"\r\n [lazyTotalRecords]=\"totalCount()\"\r\n [pageSize]=\"context().pageSize\"\r\n [currentPage]=\"context().page - 1\"\r\n [first]=\"(context().page - 1) * context().pageSize\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n [groupCountMap]=\"groupCountMap()\"\r\n [groupBy]=\"groupBy()\"\r\n [sortField]=\"sortField()\"\r\n [sortDirection]=\"sortDirection()\"\r\n storageKey=\"work-center-page-table\"\r\n [persistStateExclude]=\"persistStateExclude\"\r\n [filters]=\"tableFilters()\"\r\n (filtersChange)=\"tableFilters.set($event)\"\r\n (groupByChange)=\"onTableGroupByChange($event)\"\r\n (lazyLoad)=\"onTableLazyLoad($event)\"\r\n (rowClick)=\"onRowClick($event)\"\r\n />\r\n </div>\r\n</ng-template>\r\n\r\n@if (showSidebar()) {\r\n <mt-client-page\r\n [menuIcon]=\"menuIcon()\"\r\n [menuTitle]=\"resolvedPageTitle()\"\r\n [menuItems]=\"menuItems()\"\r\n [menuItemsLoading]=\"loading() && !menuItems().length\"\r\n [activeItem]=\"context().selectedCardKey ?? undefined\"\r\n storageKey=\"work-center-client-page\"\r\n (menuItemClick)=\"onMenuItemClick($event)\"\r\n >\r\n <ng-template #headerClientPageEnd>\r\n <ng-container [ngTemplateOutlet]=\"headerActions\" />\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"pageContent\" />\r\n </mt-client-page>\r\n} @else {\r\n <div class=\"flex h-full min-h-0 flex-col bg-surface-0\">\r\n <div\r\n class=\"flex shrink-0 items-center justify-end border-b border-surface px-7 py-4\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"headerActions\" />\r\n </div>\r\n <div class=\"min-h-0 flex-1 overflow-y-auto px-7 py-5\">\r\n <ng-container [ngTemplateOutlet]=\"pageContent\" />\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (selectedItemContextKey(); as contextKey) {\r\n <mt-work-center-item-modal-route\r\n [contextKey]=\"contextKey\"\r\n [manageRouteOutlet]=\"false\"\r\n [showPreviewLevelAction]=\"false\"\r\n [readOnly]=\"itemReadOnly()\"\r\n appendTo=\"body\"\r\n drawerStyleClass=\"mt-work-center-item-drawer !w-[90vw]\"\r\n (closed)=\"selectedItemContextKey.set(null)\"\r\n />\r\n}\r\n","import { WorkCenterState } from './work-center';\r\n\r\nexport const APP_STATES = [WorkCenterState];\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["toLabel","readString","i1","i2"],"mappings":"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"}