@masterteam/audit-logs 0.0.3 → 0.0.4

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-audit-logs.mjs","sources":["../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-logs.ts","../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-logs.html","../../../../packages/masterteam/audit-logs/src/store/audit-logs/audit-logs.model.ts","../../../../packages/masterteam/audit-logs/src/store/audit-logs/audit-logs.actions.ts","../../../../packages/masterteam/audit-logs/src/store/audit-logs/audit-logs.state.ts","../../../../packages/masterteam/audit-logs/src/store/audit-logs/audit-logs.facade.ts","../../../../packages/masterteam/audit-logs/src/lib/utils/date-normalizer.util.ts","../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-logs-list/audit-logs-list.ts","../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-logs-list/audit-logs-list.html","../../../../packages/masterteam/audit-logs/src/store/index.ts","../../../../packages/masterteam/audit-logs/src/masterteam-audit-logs.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\r\nimport { Router, RouterOutlet } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { Page } from '@masterteam/components/page';\r\n\r\n@Component({\r\n selector: 'mt-audit-logs',\r\n imports: [Page, RouterOutlet, TranslocoDirective, Breadcrumb],\r\n templateUrl: './audit-logs.html',\r\n styleUrl: './audit-logs.scss',\r\n})\r\nexport default class AuditLogs {\r\n private readonly router = inject(Router);\r\n private readonly translocoService = inject(TranslocoService);\r\n\r\n breadcrumbItems: { label?: string; routerLink?: string; icon?: string }[] = [\r\n {\r\n label: '',\r\n icon: 'general.home-line',\r\n routerLink: '/control-panel/workspaces',\r\n },\r\n {\r\n label: this.translocoService.translate(\r\n 'product-settings.product-settings',\r\n ),\r\n routerLink: '/control-panel/product-settings',\r\n },\r\n { label: this.translocoService.translate('audit-logs.audit-logs') },\r\n ];\r\n goBack() {\r\n this.router.navigate(['control-panel/product-settings']);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <mt-page\r\n [title]=\"t('audit-logs.audit-logs')\"\r\n [avatarIcon]=\"'time.clock-fast-forward'\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-lime-50)',\r\n '--p-avatar-color': 'var(--p-lime-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <h3 class=\"font-bold text-xl\">{{ t(\"audit-logs.audit-logs\") }}</h3>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems\"\r\n [styleClass]=\"'flex justify-start mx-1 mb-4'\"\r\n ></mt-breadcrumb>\r\n <router-outlet />\r\n </mt-page>\r\n</ng-container>\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport interface AuditLog {\r\n event?: string;\r\n module?: string;\r\n originalUserId?: {\r\n id?: string;\r\n userId?: string;\r\n displayName?: string;\r\n mobile?: string;\r\n userName?: string;\r\n email?: string;\r\n photo?: string;\r\n };\r\n date?: {\r\n displayValue?: string;\r\n actualValue?: string;\r\n };\r\n description?: string;\r\n title?: string;\r\n userIpAddress?: string;\r\n}\r\n\r\nexport enum AuditLogsActionKey {\r\n GetAuditLogs = 'getAuditLogs',\r\n}\r\n\r\nexport interface AuditLogsStateModel extends LoadingStateShape<AuditLogsActionKey> {\r\n auditLogs: {\r\n items: AuditLog[];\r\n page?: number;\r\n pageSize?: number;\r\n totalCount?: number;\r\n };\r\n page: number;\r\n pageSize: number;\r\n}\r\n","export class GetAuditLogs {\r\n static readonly type = '[AuditLogs] Get Audit Logs';\r\n constructor(\r\n public page: number,\r\n public pageSize: number,\r\n public filters?: Record<string, any>,\r\n ) {}\r\n}\r\n","import { State, Action, StateContext, Selector } from '@ngxs/store';\r\nimport { GetAuditLogs } from './audit-logs.actions';\r\nimport {\r\n AuditLog,\r\n AuditLogsActionKey,\r\n AuditLogsStateModel,\r\n} from './audit-logs.model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Response } from './api.model';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\n\r\n@State<AuditLogsStateModel>({\r\n name: 'auditLogs',\r\n defaults: {\r\n auditLogs: { items: [] },\r\n page: 1,\r\n pageSize: 10,\r\n loadingActive: [],\r\n errors: {},\r\n },\r\n})\r\n@Injectable()\r\nexport class AuditLogsState extends CrudStateBase<\r\n AuditLog,\r\n AuditLogsStateModel,\r\n AuditLogsActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n\r\n // ============================================================================\r\n // Selectors - Individual data selectors for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getAuditLogs(state: AuditLogsStateModel) {\r\n return state.auditLogs;\r\n }\r\n\r\n @Selector()\r\n static getPage(state: AuditLogsStateModel): number {\r\n return state.page;\r\n }\r\n\r\n @Selector()\r\n static getPageSize(state: AuditLogsStateModel): number {\r\n return state.pageSize;\r\n }\r\n\r\n // ============================================================================\r\n // Loading/Error Slice Selectors - REQUIRED for optimal performance\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getLoadingActive(state: AuditLogsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(state: AuditLogsStateModel): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // Actions\r\n // ============================================================================\r\n\r\n @Action(GetAuditLogs)\r\n getAuditLogs(\r\n ctx: StateContext<AuditLogsStateModel>,\r\n { page, pageSize, filters }: GetAuditLogs,\r\n ) {\r\n const params = {\r\n page: page.toString(),\r\n pageSize: pageSize.toString(),\r\n ...filters,\r\n };\r\n const req$ = this.http.get<Response<AuditLog[]>>(`app/audittrail`, {\r\n params: params,\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: AuditLogsActionKey.GetAuditLogs,\r\n request$: req$,\r\n onSuccess: (response: any) => ({\r\n auditLogs: response.data ?? [],\r\n page,\r\n pageSize,\r\n }),\r\n });\r\n }\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport { GetAuditLogs } from './audit-logs.actions';\r\nimport { AuditLogsActionKey } from './audit-logs.model';\r\nimport { AuditLogsState } from './audit-logs.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuditLogsFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly auditLogs = select(AuditLogsState.getAuditLogs);\r\n readonly page = select(AuditLogsState.getPage);\r\n readonly pageSize = select(AuditLogsState.getPageSize);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(AuditLogsState.getLoadingActive);\r\n private readonly errors = select(AuditLogsState.getErrors);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingAuditLogs = computed(() =>\r\n this.loadingActive().includes(AuditLogsActionKey.GetAuditLogs),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly getAuditLogsError = computed(\r\n () => this.errors()[AuditLogsActionKey.GetAuditLogs] ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n getAuditLogs(\r\n page: number = 1,\r\n pageSize: number = 10,\r\n filters?: Record<string, any>,\r\n ) {\r\n return this.store.dispatch(new GetAuditLogs(page, pageSize, filters));\r\n }\r\n}\r\n","/**\r\n * Recursively normalizes Date objects to YYYY-MM-DDTHH:mm:ss format.\r\n * Prevents UTC timezone leaks by converting dates to local datetime strings.\r\n */\r\nexport function normalizeDates(value: any): any {\r\n if (value instanceof Date) {\r\n const y = value.getFullYear();\r\n const m = String(value.getMonth() + 1).padStart(2, '0');\r\n const d = String(value.getDate()).padStart(2, '0');\r\n const h = String(value.getHours()).padStart(2, '0');\r\n const min = String(value.getMinutes()).padStart(2, '0');\r\n const s = String(value.getSeconds()).padStart(2, '0');\r\n return `${y}-${m}-${d}T${h}:${min}:${s}`;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.map((v) => normalizeDates(v));\r\n }\r\n\r\n // Skip special objects that shouldn't be normalized (FormData, File, Blob, etc.)\r\n if (value !== null && typeof value === 'object') {\r\n // Check if it's a plain object (not FormData, File, Blob, or other special objects)\r\n if (value.constructor !== Object) {\r\n return value;\r\n }\r\n\r\n return Object.keys(value).reduce((acc, key) => {\r\n acc[key] = normalizeDates(value[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n\r\n return value;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n linkedSignal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ColumnDef, Table } from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { AuditLogsFacade } from '../../../store/audit-logs';\r\nimport { normalizeDates } from '../../utils/date-normalizer.util';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\n\r\n@Component({\r\n selector: 'mt-audit-logs-list',\r\n styleUrl: './audit-logs-list.css',\r\n templateUrl: './audit-logs-list.html',\r\n standalone: true,\r\n imports: [CommonModule, SkeletonModule, Table, Avatar, TranslocoDirective],\r\n})\r\nexport default class AuditLogsList {\r\n userCol = viewChild.required<TemplateRef<any>>('userCol');\r\n\r\n private readonly facade = inject(AuditLogsFacade);\r\n private readonly translocoService = inject(TranslocoService);\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: true,\r\n });\r\n auditLogs = computed(() => this.facade.auditLogs()?.items);\r\n fullDataAuditLogs = computed(() => this.facade.auditLogs());\r\n\r\n tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'name',\r\n label: this.translocoService.translate('audit-logs.title'),\r\n },\r\n {\r\n key: 'module',\r\n label: this.translocoService.translate('audit-logs.module'),\r\n },\r\n {\r\n key: 'originalUserId.userName',\r\n label: this.translocoService.translate('audit-logs.user'),\r\n type: 'custom',\r\n customCellTpl: this.userCol(),\r\n filterConfig: {\r\n type: 'user',\r\n label: this.translocoService.translate('audit-logs.user'),\r\n context: this.context,\r\n apiUrl: 'Identity/users',\r\n },\r\n },\r\n {\r\n key: 'description',\r\n label: this.translocoService.translate('audit-logs.activity'),\r\n },\r\n {\r\n key: 'userIpAddress',\r\n label: this.translocoService.translate('audit-logs.ip-address'),\r\n },\r\n {\r\n key: 'date.displayValue',\r\n label: this.translocoService.translate('audit-logs.date'),\r\n filterConfig: {\r\n type: 'date',\r\n label: this.translocoService.translate('audit-logs.start-date'),\r\n },\r\n },\r\n ]);\r\n\r\n loading = this.facade.isLoadingAuditLogs;\r\n\r\n onLazyLoad(event: any) {\r\n // Transform filters to API format\r\n const apiFilters: Record<string, any> = {};\r\n\r\n if (event.filters) {\r\n // Handle date filter transformation\r\n if (event.filters['date.displayValue']) {\r\n const dateFilter = event.filters['date.displayValue'];\r\n if (dateFilter.from) {\r\n apiFilters['startDate'] = normalizeDates(dateFilter.from);\r\n }\r\n if (dateFilter.to) {\r\n apiFilters['endDate'] = normalizeDates(dateFilter.to);\r\n }\r\n }\r\n if (event.filters['generalSearch']) {\r\n apiFilters['searchTerm'] = event.filters['generalSearch'];\r\n }\r\n if (event.filters['originalUserId.userName']) {\r\n const userFilter = event.filters['originalUserId.userName'];\r\n apiFilters['userId'] = userFilter?.userId;\r\n }\r\n }\r\n\r\n this.facade.getAuditLogs(event.currentPage, event.pageSize, apiFilters);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <mt-table\r\n [data]=\"auditLogs()\"\r\n [columns]=\"tableColumns()\"\r\n [loading]=\"loading()\"\r\n [lazy]=\"true\"\r\n [showFilters]=\"true\"\r\n [exportable]=\"true\"\r\n [generalSearch]=\"true\"\r\n [lazyTotalRecords]=\"fullDataAuditLogs().totalCount\"\r\n (lazyLoad)=\"onLazyLoad($event)\"\r\n >\r\n </mt-table>\r\n\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar>\r\n {{ row.originalUserId?.displayName }}\r\n </div>\r\n </ng-template>\r\n</ng-container>\r\n","// store/index.ts\r\nexport * from './audit-logs';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAYc,MAAO,SAAS,CAAA;AACX,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5D,IAAA,eAAe,GAA6D;AAC1E,QAAA;AACE,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,UAAU,EAAE,2BAA2B;AACxC,SAAA;AACD,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CACpC,mCAAmC,CACpC;AACD,YAAA,UAAU,EAAE,iCAAiC;AAC9C,SAAA;QACD,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE;KACpE;IACD,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CAAC;IAC1D;uGApBmB,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ9B,0nBAmBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDXY,IAAI,gPAAE,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIzC,SAAS,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;+BACE,eAAe,EAAA,OAAA,EAChB,CAAC,IAAI,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,CAAC,EAAA,QAAA,EAAA,0nBAAA,EAAA;;;IEenD;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC/B,CAAC,EAFW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;MCvBjB,YAAY,CAAA;AAGd,IAAA,IAAA;AACA,IAAA,QAAA;AACA,IAAA,OAAA;AAJT,IAAA,OAAgB,IAAI,GAAG,4BAA4B;AACnD,IAAA,WAAA,CACS,IAAY,EACZ,QAAgB,EAChB,OAA6B,EAAA;QAF7B,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;;;;;;;;ACiBE,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,aAInC,CAAA;AACS,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;;;;AAO1B,IAAP,OAAO,YAAY,CAAC,KAA0B,EAAA;QAC5C,OAAO,KAAK,CAAC,SAAS;IACxB;AAGO,IAAP,OAAO,OAAO,CAAC,KAA0B,EAAA;QACvC,OAAO,KAAK,CAAC,IAAI;IACnB;AAGO,IAAP,OAAO,WAAW,CAAC,KAA0B,EAAA;QAC3C,OAAO,KAAK,CAAC,QAAQ;IACvB;;;;AAOO,IAAP,OAAO,gBAAgB,CAAC,KAA0B,EAAA;QAChD,OAAO,KAAK,CAAC,aAAa;IAC5B;AAGO,IAAP,OAAO,SAAS,CAAC,KAA0B,EAAA;QACzC,OAAO,KAAK,CAAC,MAAM;IACrB;;;;IAOA,YAAY,CACV,GAAsC,EACtC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAgB,EAAA;AAEzC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;AAC7B,YAAA,GAAG,OAAO;SACX;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuB,CAAA,cAAA,CAAgB,EAAE;AACjE,YAAA,MAAM,EAAE,MAAM;AACf,SAAA,CAAC;AAEF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,kBAAkB,CAAC,YAAY;AACpC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAa,MAAM;AAC7B,gBAAA,SAAS,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;gBAC9B,IAAI;gBACJ,QAAQ;aACT,CAAC;AACH,SAAA,CAAC;IACJ;uGApEW,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAd,cAAc,EAAA,CAAA;;AA6CzB,UAAA,CAAA;IADC,MAAM,CAAC,YAAY;AAwBnB,CAAA,EAAA,cAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AAxDM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,cAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,cAAA,EAAA,SAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,cAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAOM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,cAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAtCU,cAAc,GAAA,UAAA,CAAA;AAX1B,IAAA,KAAK,CAAsB;AAC1B,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,QAAQ,EAAE;AACR,YAAA,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AACxB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,MAAM,EAAE,EAAE;AACX,SAAA;KACF;AAEY,CAAA,EAAA,cAAc,CAqE1B;2FArEY,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;MCfY,eAAe,CAAA;AACT,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;;;;AAK7B,IAAA,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC;AAC/C,IAAA,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;AACrC,IAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;;;;AAKrC,IAAA,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC;AACvD,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;;;;AAKjD,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,8DAC/D;;;;AAKQ,IAAA,iBAAiB,GAAG,QAAQ,CACnC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,IAAI,6DAC7D;;;;AAKD,IAAA,YAAY,CACV,IAAA,GAAe,CAAC,EAChB,QAAA,GAAmB,EAAE,EACrB,OAA6B,EAAA;AAE7B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvE;uGAvCW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACNlC;;;AAGG;AACG,SAAU,cAAc,CAAC,KAAU,EAAA;AACvC,IAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE;AAC7B,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAClD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnD,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACrD,QAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,CAAC,EAAE;IAC1C;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC;IAC5C;;IAGA,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;AAE/C,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE;AAChC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;YAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAS,CAAC;IACf;AAEA,IAAA,OAAO,KAAK;AACd;;ACRc,MAAO,aAAa,CAAA;AAChC,IAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAmB,SAAS,CAAC;AAExC,IAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AAChC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC5D,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE;AAC/C,QAAA,UAAU,EAAE,IAAI;AACjB,KAAA,CAAC;AACF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,qDAAC;AAC1D,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,6DAAC;AAE3D,IAAA,YAAY,GAAG,YAAY,CAAc,MAAM;AAC7C,QAAA;AACE,YAAA,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,kBAAkB,CAAC;AAC3D,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAC5D,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,yBAAyB;YAC9B,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,iBAAiB,CAAC;AACzD,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE;AAC7B,YAAA,YAAY,EAAE;AACZ,gBAAA,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,iBAAiB,CAAC;gBACzD,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,MAAM,EAAE,gBAAgB;AACzB,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,qBAAqB,CAAC;AAC9D,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,uBAAuB,CAAC;AAChE,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,mBAAmB;YACxB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,iBAAiB,CAAC;AACzD,YAAA,YAAY,EAAE;AACZ,gBAAA,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,uBAAuB,CAAC;AAChE,aAAA;AACF,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEF,IAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB;AAExC,IAAA,UAAU,CAAC,KAAU,EAAA;;QAEnB,MAAM,UAAU,GAAwB,EAAE;AAE1C,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;;AAEjB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;gBACtC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACrD,gBAAA,IAAI,UAAU,CAAC,IAAI,EAAE;oBACnB,UAAU,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC3D;AACA,gBAAA,IAAI,UAAU,CAAC,EAAE,EAAE;oBACjB,UAAU,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvD;YACF;AACA,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBAClC,UAAU,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;YAC3D;AACA,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE;gBAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC;AAC3D,gBAAA,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,EAAE,MAAM;YAC3C;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC;IACzE;uGA7EmB,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBlC,koBAqBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEtD,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,UAAA,EAGlB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,koBAAA,EAAA;qEAG3B,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE1B1D;;ACAA;;AAEG;;;;"}
1
+ {"version":3,"file":"masterteam-audit-logs.mjs","sources":["../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-logs.ts","../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-logs.html","../../../../packages/masterteam/audit-logs/src/store/audit-logs/audit-logs.model.ts","../../../../packages/masterteam/audit-logs/src/store/audit-logs/audit-logs.actions.ts","../../../../packages/masterteam/audit-logs/src/store/audit-logs/audit-logs.state.ts","../../../../packages/masterteam/audit-logs/src/store/audit-logs/audit-logs.facade.ts","../../../../packages/masterteam/audit-logs/src/lib/utils/audit-status.utils.ts","../../../../packages/masterteam/audit-logs/src/lib/utils/date-normalizer.util.ts","../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-log-detail-drawer/audit-log-detail-drawer.ts","../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-log-detail-drawer/audit-log-detail-drawer.html","../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-logs-list/audit-logs-list.ts","../../../../packages/masterteam/audit-logs/src/lib/audit-logs/audit-logs-list/audit-logs-list.html","../../../../packages/masterteam/audit-logs/src/store/index.ts","../../../../packages/masterteam/audit-logs/src/masterteam-audit-logs.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\nimport { Page } from '@masterteam/components/page';\n\n@Component({\n selector: 'mt-audit-logs',\n imports: [Page, RouterOutlet, TranslocoDirective, Breadcrumb],\n templateUrl: './audit-logs.html',\n styleUrl: './audit-logs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class AuditLogs {\n private readonly router = inject(Router);\n private readonly translocoService = inject(TranslocoService);\n private readonly activeLang = toSignal(this.translocoService.langChanges$, {\n initialValue: this.translocoService.getActiveLang(),\n });\n\n protected get breadcrumbItems() {\n this.activeLang();\n\n return [\n {\n label: '',\n icon: 'general.home-line',\n routerLink: '/control-panel/workspaces',\n },\n {\n label: this.translocoService.translate(\n 'product-settings.product-settings',\n ),\n routerLink: '/control-panel/product-settings',\n },\n { label: this.translocoService.translate('audit-logs.audit-logs') },\n ];\n }\n\n goBack() {\n this.router.navigate(['control-panel/product-settings']);\n }\n}\n","<ng-container *transloco=\"let t\">\n <mt-page\n [title]=\"t('audit-logs.audit-logs')\"\n [contentClass]=\"'max-[1025px]:p-4 max-[640px]:p-3'\"\n [avatarIcon]=\"'time.clock-fast-forward'\"\n [avatarStyle]=\"{\n '--p-avatar-background': 'var(--p-lime-50)',\n '--p-avatar-color': 'var(--p-lime-700)',\n }\"\n (backButtonClick)=\"goBack()\"\n backButton\n >\n <div class=\"flex min-h-0 flex-col gap-4\">\n <mt-breadcrumb\n [items]=\"breadcrumbItems\"\n [styleClass]=\"'mx-1 flex justify-start'\"\n />\n\n <router-outlet />\n </div>\n </mt-page>\n</ng-container>\n","import type { EntityUserValue } from '@masterteam/components/entities';\nimport { LoadingStateShape } from '../utils/state-helpers';\n\nexport interface AuditTrailCodeLabel {\n code: string;\n label: string;\n}\n\nexport interface AuditTrailListItem {\n eventId: string;\n summary: string;\n category: AuditTrailCodeLabel;\n operation: AuditTrailCodeLabel;\n importance: AuditTrailCodeLabel;\n surface: AuditTrailCodeLabel;\n occurredAtUtc: string;\n actorUserId?: string | null;\n primarySubjectType?: string | null;\n primarySubjectId?: string | null;\n levelId?: number | null;\n levelDataId?: number | null;\n moduleDataId?: number | null;\n moduleKey?: string | null;\n}\n\nexport interface AuditTrailSearchResponse {\n totalCount: number;\n page: number;\n pageSize: number;\n items: AuditTrailListItem[];\n}\n\nexport interface AuditTrailRequestContext {\n eventName: string;\n aggregateType: string;\n aggregateId: string;\n action: string;\n correlationId?: string | null;\n actorUserId?: string | null;\n actorUser?: EntityUserValue | null;\n occurredAtUtc: string;\n}\n\nexport interface AuditTrailSubject {\n subjectType: string;\n subjectId: string;\n relation: string;\n label: string;\n levelId?: number | null;\n levelDataId?: number | null;\n moduleDataId?: number | null;\n moduleKey?: string | null;\n}\n\nexport type AuditTrailValueKind =\n | 'Empty'\n | 'Text'\n | 'Number'\n | 'Boolean'\n | 'DateTime'\n | 'Json'\n | string;\n\nexport interface AuditTrailChange {\n fieldKey: string;\n fieldLabel: string;\n oldValue?: string | null;\n newValue?: string | null;\n valueKind: AuditTrailValueKind;\n changeSource?: string | null;\n}\n\nexport interface AuditTrailChangeGroup {\n key: string;\n label: string;\n changes: AuditTrailChange[];\n}\n\nexport interface AuditTrailEvidence {\n type: string;\n contentJson: string;\n}\n\nexport interface AuditTrailEventDetail {\n eventId: string;\n summary: string;\n category: AuditTrailCodeLabel;\n operation: AuditTrailCodeLabel;\n importance: AuditTrailCodeLabel;\n surface: AuditTrailCodeLabel;\n requestContext: AuditTrailRequestContext;\n subjects: AuditTrailSubject[];\n changeGroups: AuditTrailChangeGroup[];\n evidence: AuditTrailEvidence[];\n}\n\nexport interface AuditTrailSearchFilters {\n search?: string;\n category?: string;\n operation?: string;\n importance?: string;\n surface?: string;\n actorUserId?: string;\n subjectType?: string;\n subjectId?: string;\n fromUtc?: string;\n toUtc?: string;\n language?: string;\n}\n\nexport interface AuditTrailOption {\n label: string;\n value: string;\n}\n\nexport enum AuditLogsActionKey {\n GetAuditLogs = 'getAuditLogs',\n GetAuditLogDetail = 'getAuditLogDetail',\n}\n\nexport interface AuditLogsStateModel extends LoadingStateShape<AuditLogsActionKey> {\n auditLogs: AuditTrailSearchResponse;\n filters: AuditTrailSearchFilters;\n selectedEventId: string | null;\n selectedEventDetail: AuditTrailEventDetail | null;\n}\n","import { AuditTrailSearchFilters } from './audit-logs.model';\n\nexport class GetAuditLogs {\n static readonly type = '[AuditLogs] Get Audit Trail Search';\n\n constructor(\n public page: number = 1,\n public pageSize: number = 20,\n public filters: AuditTrailSearchFilters = {},\n ) {}\n}\n\nexport class GetAuditLogDetail {\n static readonly type = '[AuditLogs] Get Audit Trail Detail';\n\n constructor(\n public eventId: string,\n public language?: string,\n ) {}\n}\n\nexport class ClearAuditLogDetail {\n static readonly type = '[AuditLogs] Clear Audit Trail Detail';\n}\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { REQUEST_CONTEXT } from '@masterteam/components';\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { Response } from './api.model';\nimport {\n ClearAuditLogDetail,\n GetAuditLogDetail,\n GetAuditLogs,\n} from './audit-logs.actions';\nimport {\n AuditLogsActionKey,\n AuditLogsStateModel,\n AuditTrailEventDetail,\n AuditTrailListItem,\n AuditTrailSearchFilters,\n AuditTrailSearchResponse,\n} from './audit-logs.model';\n\nconst DEFAULT_SEARCH_RESPONSE: AuditTrailSearchResponse = {\n totalCount: 0,\n page: 1,\n pageSize: 20,\n items: [],\n};\n\n@State<AuditLogsStateModel>({\n name: 'auditLogs',\n defaults: {\n auditLogs: DEFAULT_SEARCH_RESPONSE,\n filters: {},\n selectedEventId: null,\n selectedEventDetail: null,\n loadingActive: [],\n errors: {},\n },\n})\n@Injectable()\nexport class AuditLogsState extends CrudStateBase<\n AuditTrailListItem,\n AuditLogsStateModel,\n AuditLogsActionKey\n> {\n private readonly http = inject(HttpClient);\n private readonly context = new HttpContext().set(REQUEST_CONTEXT, {\n useBaseUrl: false,\n });\n private readonly baseUrl = 'control-panel/audit-trail';\n\n @Selector()\n static getAuditLogs(state: AuditLogsStateModel): AuditTrailSearchResponse {\n return state.auditLogs;\n }\n\n @Selector()\n static getFilters(state: AuditLogsStateModel): AuditTrailSearchFilters {\n return state.filters;\n }\n\n @Selector()\n static getSelectedEventId(state: AuditLogsStateModel): string | null {\n return state.selectedEventId;\n }\n\n @Selector()\n static getSelectedEventDetail(\n state: AuditLogsStateModel,\n ): AuditTrailEventDetail | null {\n return state.selectedEventDetail;\n }\n\n @Selector()\n static getLoadingActive(state: AuditLogsStateModel): string[] {\n return state.loadingActive;\n }\n\n @Selector()\n static getErrors(state: AuditLogsStateModel): Record<string, string | null> {\n return state.errors;\n }\n\n @Action(GetAuditLogs)\n getAuditLogs(\n ctx: StateContext<AuditLogsStateModel>,\n { page, pageSize, filters }: GetAuditLogs,\n ) {\n const query = this.buildQueryParams({\n ...filters,\n page: String(page),\n pageSize: String(pageSize),\n });\n\n return handleApiRequest({\n ctx,\n key: AuditLogsActionKey.GetAuditLogs,\n request$: this.http.get<Response<AuditTrailSearchResponse>>(\n `${this.baseUrl}/search`,\n {\n params: query,\n context: this.context,\n },\n ),\n onSuccess: (response) => ({\n auditLogs: response.data\n ? {\n ...DEFAULT_SEARCH_RESPONSE,\n ...response.data,\n items: response.data.items ?? [],\n }\n : {\n ...DEFAULT_SEARCH_RESPONSE,\n page,\n pageSize,\n },\n filters: this.sanitizeFilters(filters),\n }),\n onError: () => ({\n filters: this.sanitizeFilters(filters),\n }),\n });\n }\n\n @Action(GetAuditLogDetail)\n getAuditLogDetail(\n ctx: StateContext<AuditLogsStateModel>,\n { eventId, language }: GetAuditLogDetail,\n ) {\n ctx.patchState({\n selectedEventId: eventId,\n selectedEventDetail: null,\n });\n\n return handleApiRequest({\n ctx,\n key: AuditLogsActionKey.GetAuditLogDetail,\n request$: this.http.get<Response<AuditTrailEventDetail>>(\n `${this.baseUrl}/events/${encodeURIComponent(eventId)}`,\n {\n params: this.buildQueryParams(language ? { language } : undefined),\n context: this.context,\n },\n ),\n onSuccess: (response, state) =>\n state.selectedEventId === eventId\n ? {\n selectedEventDetail: response.data ?? null,\n }\n : {},\n onError: (_error, state) =>\n state.selectedEventId === eventId\n ? {\n selectedEventDetail: null,\n }\n : {},\n });\n }\n\n @Action(ClearAuditLogDetail)\n clearAuditLogDetail(ctx: StateContext<AuditLogsStateModel>) {\n ctx.patchState({\n selectedEventId: null,\n selectedEventDetail: null,\n });\n }\n\n private buildQueryParams(\n query?: Record<string, string | undefined>,\n ): Record<string, string> {\n return Object.entries(query ?? {}).reduce<Record<string, string>>(\n (params, [key, value]) => {\n if (value === null || value === undefined || value.trim() === '') {\n return params;\n }\n\n params[key] = value;\n return params;\n },\n {},\n );\n }\n\n private sanitizeFilters(\n filters: AuditTrailSearchFilters,\n ): AuditTrailSearchFilters {\n const { language: _language, ...rest } = filters;\n return rest;\n }\n}\n","import { Injectable, computed, inject } from '@angular/core';\nimport { Store, select } from '@ngxs/store';\nimport {\n ClearAuditLogDetail,\n GetAuditLogDetail,\n GetAuditLogs,\n} from './audit-logs.actions';\nimport {\n AuditLogsActionKey,\n AuditTrailSearchFilters,\n} from './audit-logs.model';\nimport { AuditLogsState } from './audit-logs.state';\n\n@Injectable({ providedIn: 'root' })\nexport class AuditLogsFacade {\n private readonly store = inject(Store);\n\n readonly auditLogs = select(AuditLogsState.getAuditLogs);\n readonly filters = select(AuditLogsState.getFilters);\n readonly selectedEventId = select(AuditLogsState.getSelectedEventId);\n readonly selectedEventDetail = select(AuditLogsState.getSelectedEventDetail);\n\n private readonly loadingActive = select(AuditLogsState.getLoadingActive);\n private readonly errors = select(AuditLogsState.getErrors);\n\n readonly isLoadingAuditLogs = computed(() =>\n this.loadingActive().includes(AuditLogsActionKey.GetAuditLogs),\n );\n readonly isLoadingAuditLogDetail = computed(() =>\n this.loadingActive().includes(AuditLogsActionKey.GetAuditLogDetail),\n );\n\n readonly getAuditLogsError = computed(\n () => this.errors()[AuditLogsActionKey.GetAuditLogs] ?? null,\n );\n readonly getAuditLogDetailError = computed(\n () => this.errors()[AuditLogsActionKey.GetAuditLogDetail] ?? null,\n );\n\n readonly activeFilterCount = computed(\n () =>\n Object.values(this.filters()).filter(\n (value) => value !== null && value !== undefined && value !== '',\n ).length,\n );\n\n getAuditLogs(\n page: number = 1,\n pageSize: number = 20,\n filters: AuditTrailSearchFilters = {},\n ) {\n return this.store.dispatch(new GetAuditLogs(page, pageSize, filters));\n }\n\n getAuditLogDetail(eventId: string, language?: string) {\n return this.store.dispatch(new GetAuditLogDetail(eventId, language));\n }\n\n clearAuditLogDetail() {\n return this.store.dispatch(new ClearAuditLogDetail());\n }\n}\n","import { EntityData } from '@masterteam/components/entities';\nimport { ColumnDef } from '@masterteam/components/table';\nimport { AuditTrailCodeLabel } from '../../store/audit-logs';\n\nexport type AuditStatusKind =\n | 'category'\n | 'operation'\n | 'importance'\n | 'surface';\n\ntype AuditStatusMap = NonNullable<ColumnDef['statusMap']>;\n\nconst FALLBACK_STATUS_COLOR = '#475569';\n\nconst STATUS_COLOR_MAPS: Record<AuditStatusKind, Record<string, string>> = {\n category: {\n Runtime: '#047857',\n ControlPanel: '#0369a1',\n Discussion: '#7c3aed',\n Process: '#0f766e',\n Escalation: '#c2410c',\n PhaseGate: '#0e7490',\n Governance: '#b45309',\n System: '#475569',\n },\n operation: {\n Create: '#047857',\n Update: '#0369a1',\n Delete: '#be123c',\n Close: '#475569',\n Move: '#b45309',\n Progress: '#0e7490',\n Configure: '#4338ca',\n Comment: '#7c3aed',\n BulkUpdate: '#1d4ed8',\n Change: '#0369a1',\n Unknown: '#475569',\n },\n importance: {\n Low: '#475569',\n Medium: '#0369a1',\n High: '#b45309',\n Critical: '#be123c',\n },\n surface: {\n Runtime: '#047857',\n ControlPanel: '#4338ca',\n Background: '#b45309',\n System: '#475569',\n },\n};\n\nconst STATUS_LABELS: Record<AuditStatusKind, string> = {\n category: 'Category',\n operation: 'Operation',\n importance: 'Importance',\n surface: 'Surface',\n};\n\nexport function getAuditStatusMap(kind: AuditStatusKind): AuditStatusMap {\n return Object.fromEntries(\n Object.entries(STATUS_COLOR_MAPS[kind]).map(([key, color]) => [\n key,\n { color },\n ]),\n );\n}\n\nexport function getAuditStatusColor(\n kind: AuditStatusKind,\n code?: string | null,\n): string {\n if (!code) {\n return FALLBACK_STATUS_COLOR;\n }\n\n return STATUS_COLOR_MAPS[kind][code] ?? FALLBACK_STATUS_COLOR;\n}\n\nexport function getAuditStatusEntity(\n kind: AuditStatusKind,\n item?: AuditTrailCodeLabel | null,\n): EntityData | null {\n const display = item?.label || item?.code;\n const code = item?.code || display;\n\n if (!display || !code) {\n return null;\n }\n\n return {\n name: STATUS_LABELS[kind],\n viewType: 'Status',\n value: {\n key: code,\n display,\n color: getAuditStatusColor(kind, code),\n },\n configuration: {\n hideName: true,\n },\n };\n}\n","/**\r\n * Recursively normalizes Date objects to YYYY-MM-DDTHH:mm:ss format.\r\n * Prevents UTC timezone leaks by converting dates to local datetime strings.\r\n */\r\nexport function normalizeDates(value: any): any {\r\n if (value instanceof Date) {\r\n const y = value.getFullYear();\r\n const m = String(value.getMonth() + 1).padStart(2, '0');\r\n const d = String(value.getDate()).padStart(2, '0');\r\n const h = String(value.getHours()).padStart(2, '0');\r\n const min = String(value.getMinutes()).padStart(2, '0');\r\n const s = String(value.getSeconds()).padStart(2, '0');\r\n return `${y}-${m}-${d}T${h}:${min}:${s}`;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.map((v) => normalizeDates(v));\r\n }\r\n\r\n // Skip special objects that shouldn't be normalized (FormData, File, Blob, etc.)\r\n if (value !== null && typeof value === 'object') {\r\n // Check if it's a plain object (not FormData, File, Blob, or other special objects)\r\n if (value.constructor !== Object) {\r\n return value;\r\n }\r\n\r\n return Object.keys(value).reduce((acc, key) => {\r\n acc[key] = normalizeDates(value[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n\r\n return value;\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { Card } from '@masterteam/components/card';\nimport { Drawer } from '@masterteam/components/drawer';\nimport {\n EntityData,\n EntityStatus,\n EntityUser,\n EntityUserValue,\n} from '@masterteam/components/entities';\nimport { ModalService } from '@masterteam/components/modal';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport {\n AuditTrailChange,\n AuditTrailCodeLabel,\n AuditTrailEventDetail,\n AuditTrailSubject,\n} from '../../../store/audit-logs';\nimport {\n AuditStatusKind,\n getAuditStatusEntity,\n} from '../../utils/audit-status.utils';\n\n@Component({\n selector: 'mt-audit-log-detail-drawer',\n imports: [\n CommonModule,\n TranslocoDirective,\n Drawer,\n Button,\n Card,\n EntityStatus,\n EntityUser,\n SkeletonModule,\n ],\n templateUrl: './audit-log-detail-drawer.html',\n styleUrl: './audit-log-detail-drawer.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-full',\n },\n})\nexport class AuditLogDetailDrawer {\n readonly modal = inject(ModalService);\n\n readonly visible = input(false);\n readonly detail = input<AuditTrailEventDetail | null>(null);\n readonly loading = input(false);\n readonly error = input<string | null>(null);\n\n readonly visibleChange = output<boolean>();\n\n private readonly expandedEvidence = signal<Record<string, boolean>>({});\n\n protected readonly drawerTitle = computed(() => this.detail()?.summary ?? '');\n\n constructor() {\n effect(() => {\n this.detail()?.eventId;\n this.expandedEvidence.set({});\n });\n }\n\n protected onDrawerVisibleChange(visible: boolean): void {\n this.visibleChange.emit(visible);\n }\n\n protected getStatusEntity(\n kind: AuditStatusKind,\n item?: AuditTrailCodeLabel | null,\n ): EntityData | null {\n return getAuditStatusEntity(kind, item);\n }\n\n protected isEmptyValue(value?: string | null): boolean {\n return value === null || value === undefined || value === '';\n }\n\n protected formatValue(\n value?: string | null,\n valueKind?: string | null,\n ): string {\n if (this.isEmptyValue(value)) {\n return '';\n }\n\n if (this.isJsonValue(valueKind, value)) {\n return this.formatJson(value);\n }\n\n if (valueKind === 'Boolean') {\n if (value === 'true') {\n return 'True';\n }\n\n if (value === 'false') {\n return 'False';\n }\n }\n\n return value ?? '';\n }\n\n protected isJsonValue(\n valueKind?: string | null,\n value?: string | null,\n ): boolean {\n if (valueKind === 'Json') {\n return true;\n }\n\n const trimmed = value?.trim();\n return !!trimmed && (trimmed.startsWith('{') || trimmed.startsWith('['));\n }\n\n protected formatJson(value?: string | null): string {\n if (!value) {\n return '';\n }\n\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n\n protected getFieldLabel(change: AuditTrailChange): string {\n return change.fieldLabel || this.humanizeKey(change.fieldKey);\n }\n\n protected getChangeSource(change: AuditTrailChange): string | null {\n return change.changeSource ? this.humanizeKey(change.changeSource) : null;\n }\n\n protected getSubjectLabel(subject: AuditTrailSubject): string {\n return (\n subject.label ||\n `${this.humanizeKey(subject.subjectType)} ${subject.subjectId}`.trim()\n );\n }\n\n protected getActorUserEntity(value?: EntityUserValue | null): EntityData | null {\n if (!value) {\n return null;\n }\n\n return {\n viewType: 'User',\n value,\n };\n }\n\n protected isEvidenceExpanded(index: number): boolean {\n return !!this.expandedEvidence()[String(index)];\n }\n\n protected toggleEvidence(index: number): void {\n const key = String(index);\n\n this.expandedEvidence.update((state) => ({\n ...state,\n [key]: !state[key],\n }));\n }\n\n protected humanizeKey(value?: string | null): string {\n if (!value) {\n return '';\n }\n\n return value\n .replace(/[_-]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n","<mt-drawer\n [visible]=\"visible()\"\n [title]=\"drawerTitle()\"\n [loadingHeader]=\"loading()\"\n styleClass=\"mt-audit-log-drawer !absolute !w-[90%] xl:!w-[68rem]\"\n appendTo=\"page-content\"\n position=\"right\"\n (visibleChange)=\"onDrawerVisibleChange($event)\"\n *transloco=\"let t; prefix: 'audit-logs'\"\n>\n <ng-container content>\n @if (loading()) {\n <div [class]=\"modal.contentClass + ' h-full overflow-y-auto p-5'\">\n <div class=\"flex flex-col gap-5\">\n <div class=\"flex flex-wrap gap-3\">\n @for (_ of [1, 2, 3, 4]; track $index) {\n <p-skeleton width=\"7rem\" height=\"2rem\" borderRadius=\"0.5rem\" />\n }\n </div>\n\n <div class=\"grid gap-5 xl:grid-cols-[minmax(0,1.35fr)_minmax(18rem,0.85fr)]\">\n <div class=\"flex flex-col gap-5\">\n <mt-card [title]=\"t('drawer.change-groups')\">\n <div class=\"flex flex-col gap-4\">\n <p-skeleton height=\"12rem\" borderRadius=\"1rem\" />\n <p-skeleton height=\"14rem\" borderRadius=\"1rem\" />\n </div>\n </mt-card>\n\n <mt-card [title]=\"t('drawer.evidence')\">\n <div class=\"flex flex-col gap-4\">\n <p-skeleton height=\"9rem\" borderRadius=\"1rem\" />\n </div>\n </mt-card>\n </div>\n\n <div class=\"flex flex-col gap-5\">\n <mt-card [title]=\"t('drawer.request-context')\">\n <div class=\"flex flex-col gap-4\">\n <p-skeleton height=\"1rem\" borderRadius=\"0.5rem\" />\n <p-skeleton height=\"1rem\" borderRadius=\"0.5rem\" />\n <p-skeleton height=\"1rem\" borderRadius=\"0.5rem\" />\n <p-skeleton height=\"1rem\" borderRadius=\"0.5rem\" />\n <p-skeleton height=\"3rem\" borderRadius=\"0.75rem\" />\n </div>\n </mt-card>\n\n <mt-card [title]=\"t('drawer.subjects')\">\n <div class=\"flex flex-col gap-4\">\n <p-skeleton height=\"8rem\" borderRadius=\"1rem\" />\n </div>\n </mt-card>\n </div>\n </div>\n </div>\n </div>\n } @else if (error(); as errorMessage) {\n <div [class]=\"modal.contentClass + ' h-full overflow-y-auto p-5'\">\n <mt-card class=\"min-h-[28rem]\">\n <div\n class=\"flex min-h-[28rem] items-center justify-center p-6 text-center\"\n >\n <p class=\"max-w-2xl text-sm font-medium text-rose-700\">\n {{ errorMessage }}\n </p>\n </div>\n </mt-card>\n </div>\n } @else if (detail(); as event) {\n <div [class]=\"modal.contentClass + ' h-full overflow-y-auto p-5'\">\n <div class=\"flex flex-col gap-5\">\n <div\n class=\"grid gap-5 xl:grid-cols-[minmax(0,1.35fr)_minmax(18rem,0.85fr)]\"\n >\n <div class=\"flex min-w-0 flex-col gap-5\">\n <mt-card [title]=\"t('drawer.change-groups')\">\n @if (event.changeGroups.length > 0) {\n @let hasMultipleChangeGroups = event.changeGroups.length > 1;\n <div class=\"flex flex-col gap-5\">\n @for (group of event.changeGroups; track group.key) {\n @if (hasMultipleChangeGroups) {\n <div\n class=\"overflow-hidden rounded-xl border border-surface-200\"\n >\n <div class=\"border-b border-surface-200 px-4 py-3\">\n <h5 class=\"font-semibold text-surface-900\">\n {{ group.label || humanizeKey(group.key) }}\n </h5>\n </div>\n\n <div class=\"divide-y divide-surface-100\">\n @for (\n change of group.changes;\n track change.fieldKey + \"-\" + $index\n ) {\n <div class=\"flex flex-col gap-3 px-4 py-4\">\n <div\n class=\"flex flex-wrap items-start justify-between gap-2\"\n >\n <div class=\"flex flex-col gap-1\">\n <span class=\"font-medium text-surface-900\">\n {{ getFieldLabel(change) }}\n </span>\n\n <div\n class=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-surface-500\"\n >\n @if (\n getChangeSource(change);\n as changeSource\n ) {\n <span>\n {{ t(\"drawer.change-source\") }}:\n {{ changeSource }}\n </span>\n }\n\n <span>\n {{ t(\"drawer.value-kind\") }}:\n {{ change.valueKind }}\n </span>\n </div>\n </div>\n </div>\n\n <div\n class=\"grid gap-3 lg:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)]\"\n >\n <div\n class=\"rounded-xl border border-surface-200 bg-surface-50 p-4\"\n >\n <p\n class=\"mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-surface-500\"\n >\n {{ t(\"drawer.from\") }}\n </p>\n\n @if (isEmptyValue(change.oldValue)) {\n <span class=\"text-sm text-surface-400\">\n {{ t(\"drawer.empty-value\") }}\n </span>\n } @else if (\n isJsonValue(\n change.valueKind,\n change.oldValue\n )\n ) {\n <pre class=\"audit-json-value\">{{\n formatValue(\n change.oldValue,\n change.valueKind\n )\n }}</pre>\n } @else {\n <span class=\"text-sm text-surface-700\">\n {{\n formatValue(\n change.oldValue,\n change.valueKind\n )\n }}\n </span>\n }\n </div>\n\n <div\n class=\"flex items-center justify-center text-xl text-surface-300\"\n >\n -&gt;\n </div>\n\n <div\n class=\"rounded-xl border border-surface-200 bg-surface-0 p-4\"\n >\n <p\n class=\"mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-surface-500\"\n >\n {{ t(\"drawer.to\") }}\n </p>\n\n @if (isEmptyValue(change.newValue)) {\n <span class=\"text-sm text-surface-500\">\n {{ t(\"drawer.empty-value\") }}\n </span>\n } @else if (\n isJsonValue(\n change.valueKind,\n change.newValue\n )\n ) {\n <pre class=\"audit-json-value\">{{\n formatValue(\n change.newValue,\n change.valueKind\n )\n }}</pre>\n } @else {\n <span class=\"text-sm text-surface-700\">\n {{\n formatValue(\n change.newValue,\n change.valueKind\n )\n }}\n </span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @if (group.label || group.key) {\n <h5 class=\"font-semibold text-surface-900\">\n {{ group.label || humanizeKey(group.key) }}\n </h5>\n }\n\n <div class=\"flex flex-col gap-5\">\n @for (\n change of group.changes;\n track change.fieldKey + \"-\" + $index\n ) {\n <div class=\"flex flex-col gap-3\">\n <div\n class=\"flex flex-wrap items-start justify-between gap-2\"\n >\n <div class=\"flex flex-col gap-1\">\n <span class=\"font-medium text-surface-900\">\n {{ getFieldLabel(change) }}\n </span>\n\n <div\n class=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-surface-500\"\n >\n @if (\n getChangeSource(change);\n as changeSource\n ) {\n <span>\n {{ t(\"drawer.change-source\") }}:\n {{ changeSource }}\n </span>\n }\n\n <span>\n {{ t(\"drawer.value-kind\") }}:\n {{ change.valueKind }}\n </span>\n </div>\n </div>\n </div>\n\n <div\n class=\"grid gap-3 lg:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)]\"\n >\n <div\n class=\"rounded-xl border border-surface-200 bg-surface-50 p-4\"\n >\n <p\n class=\"mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-surface-500\"\n >\n {{ t(\"drawer.from\") }}\n </p>\n\n @if (isEmptyValue(change.oldValue)) {\n <span class=\"text-sm text-surface-400\">\n {{ t(\"drawer.empty-value\") }}\n </span>\n } @else if (\n isJsonValue(\n change.valueKind,\n change.oldValue\n )\n ) {\n <pre class=\"audit-json-value\">{{\n formatValue(\n change.oldValue,\n change.valueKind\n )\n }}</pre>\n } @else {\n <span class=\"text-sm text-surface-700\">\n {{\n formatValue(\n change.oldValue,\n change.valueKind\n )\n }}\n </span>\n }\n </div>\n\n <div\n class=\"flex items-center justify-center text-xl text-surface-300\"\n >\n -&gt;\n </div>\n\n <div\n class=\"rounded-xl border border-surface-200 bg-surface-0 p-4\"\n >\n <p\n class=\"mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-surface-500\"\n >\n {{ t(\"drawer.to\") }}\n </p>\n\n @if (isEmptyValue(change.newValue)) {\n <span class=\"text-sm text-surface-500\">\n {{ t(\"drawer.empty-value\") }}\n </span>\n } @else if (\n isJsonValue(\n change.valueKind,\n change.newValue\n )\n ) {\n <pre class=\"audit-json-value\">{{\n formatValue(\n change.newValue,\n change.valueKind\n )\n }}</pre>\n } @else {\n <span class=\"text-sm text-surface-700\">\n {{\n formatValue(\n change.newValue,\n change.valueKind\n )\n }}\n </span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n } @else {\n <div class=\"text-sm text-surface-500\">\n {{ t(\"drawer.no-changes\") }}\n </div>\n }\n </mt-card>\n </div>\n\n <div class=\"flex min-w-0 flex-col gap-5\">\n <mt-card [title]=\"t('drawer.request-context')\">\n <dl class=\"grid gap-4\">\n <div class=\"grid gap-1\">\n <dt class=\"text-xs font-semibold uppercase text-surface-500\">\n {{ t(\"drawer.actor\") }}\n </dt>\n <dd class=\"text-sm text-surface-800\">\n @if (\n getActorUserEntity(event.requestContext.actorUser);\n as actorUserEntity\n ) {\n <mt-entity-user [data]=\"actorUserEntity\" />\n } @else {\n <span class=\"break-all\">\n {{ event.requestContext.actorUserId || \"system\" }}\n </span>\n }\n </dd>\n </div>\n\n <div class=\"grid gap-1\">\n <dt class=\"text-xs font-semibold uppercase text-surface-500\">\n {{ t(\"drawer.occurred-at\") }}\n </dt>\n <dd class=\"text-sm text-surface-800\">\n {{ event.requestContext.occurredAtUtc | date: \"medium\" }}\n </dd>\n </div>\n\n <div class=\"grid gap-1\">\n <dt class=\"text-xs font-semibold uppercase text-surface-500\">\n {{ t(\"category\") }}\n </dt>\n <dd>\n @if (getStatusEntity('category', event.category); as status) {\n <mt-entity-status [data]=\"status\" />\n }\n </dd>\n </div>\n\n <div class=\"grid gap-1\">\n <dt class=\"text-xs font-semibold uppercase text-surface-500\">\n {{ t(\"operation\") }}\n </dt>\n <dd>\n @if (\n getStatusEntity('operation', event.operation);\n as status\n ) {\n <mt-entity-status [data]=\"status\" />\n }\n </dd>\n </div>\n\n <div class=\"grid gap-1\">\n <dt class=\"text-xs font-semibold uppercase text-surface-500\">\n {{ t(\"importance\") }}\n </dt>\n <dd>\n @if (\n getStatusEntity('importance', event.importance);\n as status\n ) {\n <mt-entity-status [data]=\"status\" />\n }\n </dd>\n </div>\n\n <div class=\"grid gap-1\">\n <dt class=\"text-xs font-semibold uppercase text-surface-500\">\n {{ t(\"surface\") }}\n </dt>\n <dd>\n @if (getStatusEntity('surface', event.surface); as status) {\n <mt-entity-status [data]=\"status\" />\n }\n </dd>\n </div>\n </dl>\n </mt-card>\n\n <mt-card [title]=\"t('drawer.subjects')\">\n @if (event.subjects.length > 0) {\n <div\n class=\"overflow-hidden rounded-xl border border-surface-200\"\n >\n <div class=\"divide-y divide-surface-100\">\n @for (\n subject of event.subjects;\n track subject.subjectType + \"-\" + subject.subjectId\n ) {\n <div class=\"flex flex-col gap-3 px-4 py-4\">\n <div\n class=\"flex flex-wrap items-start justify-between gap-3\"\n >\n <div class=\"flex flex-col gap-1\">\n <span class=\"font-medium text-surface-900\">\n {{ getSubjectLabel(subject) }}\n </span>\n <span class=\"text-xs text-surface-500\">\n {{ humanizeKey(subject.subjectType) }}\n </span>\n </div>\n\n <span\n class=\"rounded-full bg-surface-100 px-3 py-1 text-xs font-medium text-surface-700\"\n >\n {{ humanizeKey(subject.relation) }}\n </span>\n </div>\n\n <div\n class=\"flex flex-wrap gap-2 text-xs text-surface-500\"\n >\n <span class=\"rounded-full bg-surface-100 px-3 py-1\">\n {{ t(\"drawer.scope\") }}: {{ subject.subjectId }}\n </span>\n @if (\n subject.levelId !== null &&\n subject.levelId !== undefined\n ) {\n <span class=\"rounded-full bg-surface-100 px-3 py-1\">\n {{ t(\"drawer.level-id\") }}:\n {{ subject.levelId }}\n </span>\n }\n @if (\n subject.levelDataId !== null &&\n subject.levelDataId !== undefined\n ) {\n <span class=\"rounded-full bg-surface-100 px-3 py-1\">\n {{ t(\"drawer.level-data-id\") }}:\n {{ subject.levelDataId }}\n </span>\n }\n @if (\n subject.moduleDataId !== null &&\n subject.moduleDataId !== undefined\n ) {\n <span class=\"rounded-full bg-surface-100 px-3 py-1\">\n {{ t(\"drawer.module-data-id\") }}:\n {{ subject.moduleDataId }}\n </span>\n }\n @if (subject.moduleKey) {\n <span class=\"rounded-full bg-surface-100 px-3 py-1\">\n {{ t(\"drawer.module-key\") }}:\n {{ subject.moduleKey }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"text-sm text-surface-500\">\n {{ t(\"drawer.no-subjects\") }}\n </div>\n }\n </mt-card>\n </div>\n </div>\n\n <mt-card [title]=\"t('drawer.evidence')\">\n <p class=\"mb-4 text-sm text-surface-500\">\n {{ t(\"drawer.advanced-description\") }}\n </p>\n\n @if (event.evidence.length > 0) {\n <div class=\"overflow-hidden rounded-xl border border-surface-200\">\n <div class=\"divide-y divide-surface-100\">\n @for (\n evidence of event.evidence;\n track evidence.type + \"-\" + $index\n ) {\n <section>\n <div\n class=\"flex flex-wrap items-center justify-between gap-3 px-4 py-3\"\n >\n <span class=\"font-medium text-surface-900\">\n {{ evidence.type || t(\"drawer.technical-evidence\") }}\n </span>\n\n <mt-button\n [label]=\"t('drawer.view-json')\"\n severity=\"secondary\"\n variant=\"text\"\n size=\"small\"\n (onClick)=\"toggleEvidence($index)\"\n />\n </div>\n\n @if (isEvidenceExpanded($index)) {\n <pre class=\"audit-json-panel\">{{\n formatJson(evidence.contentJson)\n }}</pre>\n }\n </section>\n }\n </div>\n </div>\n } @else {\n <div class=\"text-sm text-surface-500\">\n {{ t(\"drawer.no-evidence\") }}\n </div>\n }\n </mt-card>\n </div>\n </div>\n } @else {\n <div [class]=\"modal.contentClass + ' h-full overflow-y-auto p-5'\">\n <mt-card class=\"min-h-[28rem]\">\n <div\n class=\"flex min-h-[28rem] items-center justify-center p-6 text-center\"\n >\n <p class=\"max-w-2xl text-sm text-surface-500\">\n {{ t(\"drawer.no-event-selected\") }}\n </p>\n </div>\n </mt-card>\n </div>\n }\n </ng-container>\n</mt-drawer>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n computed,\n inject,\n linkedSignal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { Chip } from '@masterteam/components/chip';\nimport {\n StatisticCard,\n StatisticCardData,\n} from '@masterteam/components/statistic-card';\nimport { ColumnDef, Table, TableFilters } from '@masterteam/components/table';\nimport {\n AuditLogsFacade,\n AuditTrailListItem,\n AuditTrailOption,\n AuditTrailSearchFilters,\n} from '../../../store/audit-logs';\nimport { getAuditStatusMap } from '../../utils/audit-status.utils';\nimport { normalizeDates } from '../../utils/date-normalizer.util';\nimport { AuditLogDetailDrawer } from '../audit-log-detail-drawer/audit-log-detail-drawer';\n\nconst CATEGORY_OPTIONS: AuditTrailOption[] = [\n 'Runtime',\n 'ControlPanel',\n 'Discussion',\n 'Process',\n 'Escalation',\n 'PhaseGate',\n 'Governance',\n 'System',\n].map((value) => ({\n label: value,\n value,\n}));\n\nconst OPERATION_OPTIONS: AuditTrailOption[] = [\n 'Create',\n 'Update',\n 'Delete',\n 'Close',\n 'Move',\n 'Progress',\n 'Configure',\n 'Comment',\n 'BulkUpdate',\n 'Change',\n 'Unknown',\n].map((value) => ({\n label: value,\n value,\n}));\n\nconst IMPORTANCE_OPTIONS: AuditTrailOption[] = [\n 'Low',\n 'Medium',\n 'High',\n 'Critical',\n].map((value) => ({\n label: value,\n value,\n}));\n\n@Component({\n selector: 'mt-audit-logs-list',\n templateUrl: './audit-logs-list.html',\n styleUrl: './audit-logs-list.css',\n imports: [\n CommonModule,\n Table,\n Chip,\n Button,\n StatisticCard,\n TranslocoDirective,\n AuditLogDetailDrawer,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-full',\n },\n})\nexport default class AuditLogsList {\n readonly summaryCol = viewChild.required<TemplateRef<any>>('summaryCol');\n readonly actorCol = viewChild.required<TemplateRef<any>>('actorCol');\n\n private readonly facade = inject(AuditLogsFacade);\n private readonly translocoService = inject(TranslocoService);\n private readonly activeLang = toSignal(this.translocoService.langChanges$, {\n initialValue: this.translocoService.getActiveLang(),\n });\n\n readonly auditLogs = this.facade.auditLogs;\n readonly appliedFilters = this.facade.filters;\n readonly loading = this.facade.isLoadingAuditLogs;\n readonly error = this.facade.getAuditLogsError;\n readonly detail = this.facade.selectedEventDetail;\n readonly detailError = this.facade.getAuditLogDetailError;\n readonly loadingDetail = this.facade.isLoadingAuditLogDetail;\n\n readonly drawerVisible = signal(false);\n readonly tableFilters = signal<TableFilters>({});\n\n readonly summaryCards = computed<StatisticCardData[]>(() => {\n this.activeLang();\n\n const response = this.auditLogs();\n const items = response.items ?? [];\n const elevatedCount = items.filter((item) =>\n ['High', 'Critical'].includes(item.importance?.code ?? ''),\n ).length;\n const uniqueActors = new Set(\n items\n .map((item) => item.actorUserId?.trim())\n .filter((value): value is string => !!value),\n ).size;\n\n return [\n {\n title: String(response.totalCount ?? 0),\n subTitle: this.translate('total-events'),\n icon: 'file.file-05',\n color: 'blue',\n },\n {\n title: String(items.length),\n subTitle: this.translate('visible-results'),\n icon: 'general.building-02',\n color: 'emerald',\n },\n {\n title: String(elevatedCount),\n subTitle: this.translate('high-impact'),\n icon: 'alert.bell-02',\n color: 'amber',\n },\n {\n title: String(uniqueActors),\n subTitle: this.translate('unique-actors'),\n icon: 'custom.user-pp',\n color: 'violet',\n },\n ];\n });\n\n readonly activeFilterBadges = computed(() => {\n this.activeLang();\n\n const filters = this.appliedFilters();\n const badges: string[] = [];\n\n this.pushFilterBadge(badges, this.translate('search'), filters.search);\n this.pushFilterBadge(badges, this.translate('category'), filters.category);\n this.pushFilterBadge(\n badges,\n this.translate('operation'),\n filters.operation,\n );\n this.pushFilterBadge(\n badges,\n this.translate('importance'),\n filters.importance,\n );\n this.pushFilterBadge(badges, this.translate('surface'), filters.surface);\n this.pushFilterBadge(badges, this.translate('actor'), filters.actorUserId);\n\n if (filters.fromUtc) {\n badges.push(\n `${this.translate('from')}: ${this.formatFilterDate(filters.fromUtc)}`,\n );\n }\n\n if (filters.toUtc) {\n badges.push(\n `${this.translate('to')}: ${this.formatFilterDate(filters.toUtc)}`,\n );\n }\n\n return badges;\n });\n\n readonly tableColumns = linkedSignal<ColumnDef[]>(() => {\n this.activeLang();\n\n return [\n {\n key: 'summary',\n label: this.translate('summary'),\n type: 'custom',\n customCellTpl: this.summaryCol(),\n width: '27rem',\n },\n {\n key: 'category.code',\n label: this.translate('category'),\n type: 'status',\n statusMap: getAuditStatusMap('category'),\n filterConfig: {\n type: 'select',\n label: this.translate('category'),\n options: CATEGORY_OPTIONS,\n },\n width: '10rem',\n },\n {\n key: 'operation.code',\n label: this.translate('operation'),\n type: 'status',\n statusMap: getAuditStatusMap('operation'),\n filterConfig: {\n type: 'select',\n label: this.translate('operation'),\n options: OPERATION_OPTIONS,\n },\n width: '10rem',\n },\n {\n key: 'importance.code',\n label: this.translate('importance'),\n type: 'status',\n statusMap: getAuditStatusMap('importance'),\n filterConfig: {\n type: 'select',\n label: this.translate('importance'),\n options: IMPORTANCE_OPTIONS,\n },\n width: '10rem',\n },\n {\n key: 'actorUser',\n label: this.translate('actor'),\n type: 'user',\n filterConfig: {\n type: 'user',\n label: this.translate('actor'),\n },\n width: '14rem',\n },\n {\n key: 'occurredAtUtc',\n label: this.translate('occurred-at'),\n type: 'date',\n filterConfig: {\n type: 'date',\n label: this.translate('occurred-at'),\n },\n width: '12rem',\n },\n ];\n });\n\n onLazyLoad(event: {\n currentPage?: number;\n pageSize?: number;\n filters?: TableFilters;\n }): void {\n const filters = event.filters ?? {};\n const apiFilters: AuditTrailSearchFilters = {\n language: this.currentLanguage(),\n };\n\n const generalSearch = this.readFilterValue(filters['generalSearch']);\n if (generalSearch) {\n apiFilters.search = generalSearch;\n }\n\n const category = this.readFilterValue(filters['category.code']);\n if (category) {\n apiFilters.category = category;\n }\n\n const operation = this.readFilterValue(filters['operation.code']);\n if (operation) {\n apiFilters.operation = operation;\n }\n\n const importance = this.readFilterValue(filters['importance.code']);\n if (importance) {\n apiFilters.importance = importance;\n }\n\n const surface = this.readFilterValue(filters['surface.code']);\n if (surface) {\n apiFilters.surface = surface;\n }\n\n const actorUserId = this.readFilterValue(filters['actorUserId']);\n if (actorUserId) {\n apiFilters.actorUserId = actorUserId;\n }\n\n const occurredAtRange = filters['occurredAtUtc'] as\n | {\n from?: Date | null;\n to?: Date | null;\n }\n | undefined;\n\n if (occurredAtRange?.from) {\n apiFilters.fromUtc = this.normalizeDateBoundary(\n occurredAtRange.from,\n 'start',\n );\n }\n\n if (occurredAtRange?.to) {\n apiFilters.toUtc = this.normalizeDateBoundary(occurredAtRange.to, 'end');\n }\n\n this.facade.getAuditLogs(\n event.currentPage ?? 1,\n event.pageSize ?? this.auditLogs().pageSize ?? 20,\n apiFilters,\n );\n }\n\n openEventDetail(row: AuditTrailListItem): void {\n this.drawerVisible.set(true);\n this.facade.getAuditLogDetail(row.eventId, this.currentLanguage());\n }\n\n onDrawerVisibleChange(visible: boolean): void {\n this.drawerVisible.set(visible);\n\n if (!visible) {\n this.facade.clearAuditLogDetail();\n }\n }\n\n retry(): void {\n const response = this.auditLogs();\n\n this.facade.getAuditLogs(response.page || 1, response.pageSize || 20, {\n ...this.appliedFilters(),\n language: this.currentLanguage(),\n });\n }\n\n protected formatSubjectType(row: AuditTrailListItem): string {\n return row.primarySubjectType || this.translate('subject-type-unknown');\n }\n\n private currentLanguage(): string {\n return this.activeLang() === 'ar' ? 'ar' : 'en';\n }\n\n private translate(key: string): string {\n this.activeLang();\n return this.translocoService.translate(`audit-logs.${key}`);\n }\n\n private pushFilterBadge(\n badges: string[],\n label: string,\n value?: string | null,\n ): void {\n if (!value) {\n return;\n }\n\n badges.push(`${label}: ${value}`);\n }\n\n private formatFilterDate(value: string): string {\n const date = new Date(value);\n\n if (Number.isNaN(date.getTime())) {\n return value;\n }\n\n return new Intl.DateTimeFormat(\n this.currentLanguage() === 'ar' ? 'ar' : undefined,\n {\n dateStyle: 'medium',\n },\n ).format(date);\n }\n\n private readFilterValue(value: unknown): string | undefined {\n if (typeof value === 'string' && value.trim().length > 0) {\n return value.trim();\n }\n\n if (typeof value === 'number') {\n return String(value);\n }\n\n if (\n value &&\n typeof value === 'object' &&\n 'value' in value &&\n typeof value.value === 'string' &&\n value.value.trim().length > 0\n ) {\n return value.value.trim();\n }\n\n return undefined;\n }\n\n private normalizeDateBoundary(\n value: Date,\n boundary: 'start' | 'end',\n ): string {\n const normalizedDate = new Date(value);\n\n if (boundary === 'start') {\n normalizedDate.setHours(0, 0, 0, 0);\n } else {\n normalizedDate.setHours(23, 59, 59, 999);\n }\n\n return normalizeDates(normalizedDate);\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'audit-logs'\">\n <div class=\"flex flex-col gap-4\">\n @if (activeFilterBadges().length > 0) {\n <div class=\"flex flex-wrap gap-2\">\n @for (badge of activeFilterBadges(); track badge) {\n <mt-chip\n [label]=\"badge\"\n styleClass=\"border border-surface-200 !bg-surface-0 !text-surface-700 text-xs\"\n />\n }\n </div>\n }\n\n <div class=\"grid gap-3 md:grid-cols-2 xl:grid-cols-4\">\n @for (card of summaryCards(); track card.subTitle) {\n <mt-statistic-card [data]=\"card\" cardClass=\"shadow-sm\" />\n }\n </div>\n\n @if (error(); as errorMessage) {\n <section\n class=\"flex flex-col gap-3 rounded-xl border border-rose-200 bg-rose-50 px-5 py-4 lg:flex-row lg:items-center lg:justify-between\"\n >\n <div class=\"space-y-1\">\n <p class=\"text-sm font-semibold text-rose-700\">\n {{ t(\"load-error-title\") }}\n </p>\n <p class=\"text-sm text-rose-600\">\n {{ errorMessage }}\n </p>\n </div>\n\n <mt-button\n severity=\"danger\"\n variant=\"outlined\"\n icon=\"general.refresh-cw-05\"\n [label]=\"t('retry')\"\n (onClick)=\"retry()\"\n />\n </section>\n }\n\n <mt-table\n [(filters)]=\"tableFilters\"\n [data]=\"auditLogs().items\"\n [columns]=\"tableColumns()\"\n [loading]=\"loading()\"\n [lazy]=\"true\"\n [showFilters]=\"true\"\n [generalSearch]=\"true\"\n [clickableRows]=\"true\"\n [lazyTotalRecords]=\"auditLogs().totalCount\"\n dataKey=\"eventId\"\n (lazyLoad)=\"onLazyLoad($event)\"\n (rowClick)=\"openEventDetail($event)\"\n />\n </div>\n\n <ng-template #summaryCol let-row>\n <div class=\"flex flex-col gap-2 py-1\">\n <p class=\"line-clamp-2 text-sm font-semibold text-surface-900\">\n {{ row.summary }}\n </p>\n <div\n class=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-surface-500\"\n >\n <span>{{ t(\"event-id\") }}: {{ row.eventId }}</span>\n @if (row.primarySubjectType) {\n <span>{{ formatSubjectType(row) }}</span>\n }\n </div>\n </div>\n </ng-template>\n\n <ng-template #actorCol let-row>\n <div class=\"flex flex-col gap-1 py-1\">\n <span class=\"break-all text-sm font-medium text-surface-800\">\n {{ row.actorUserId || t(\"actor-unknown\") }}\n </span>\n <span class=\"text-xs text-surface-500\">\n {{ row.moduleKey || row.levelDataId || row.moduleDataId || \"audit\" }}\n </span>\n </div>\n </ng-template>\n\n <mt-audit-log-detail-drawer\n [visible]=\"drawerVisible()\"\n [detail]=\"detail()\"\n [loading]=\"loadingDetail()\"\n [error]=\"detailError()\"\n (visibleChange)=\"onDrawerVisibleChange($event)\"\n />\n</ng-container>\n","// store/index.ts\r\nexport * from './audit-logs';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/audit-logs",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/audit-logs",
6
6
  "linkDirectory": false,
@@ -20,9 +20,9 @@
20
20
  "tailwindcss": "^4.1.17",
21
21
  "tailwindcss-primeui": "^0.6.1",
22
22
  "@ngxs/store": "^20.1.0",
23
+ "@masterteam/components": "^0.0.125",
23
24
  "@masterteam/icons": "^0.0.14",
24
- "@masterteam/components": "^0.0.124",
25
- "@masterteam/forms": "^0.0.59"
25
+ "@masterteam/forms": "^0.0.60"
26
26
  },
27
27
  "sideEffects": false,
28
28
  "exports": {