@masterteam/audit-logs 0.0.1

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.
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-bold:700;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.static{position:static}.mx-1{margin-inline:calc(var(--spacing)*1)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.flex{display:flex}.items-center{align-items:center}.justify-start{justify-content:flex-start}.gap-2{gap:calc(var(--spacing)*2)}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}@keyframes enter{0%{opacity:var(--p-enter-opacity,1);transform:translate3d(var(--p-enter-translate-x,0),var(--p-enter-translate-y,0),0)scale3d(var(--p-enter-scale,1),var(--p-enter-scale,1),var(--p-enter-scale,1))rotate(var(--p-enter-rotate,0))}}@keyframes leave{to{opacity:var(--p-leave-opacity,1);transform:translate3d(var(--p-leave-translate-x,0),var(--p-leave-translate-y,0),0)scale3d(var(--p-leave-scale,1),var(--p-leave-scale,1),var(--p-leave-scale,1))rotate(var(--p-leave-rotate,0))}}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
@@ -0,0 +1,11 @@
1
+ {
2
+ "audit-logs": {
3
+ "audit-logs": "سجلات التدقيق",
4
+ "title": "العنوان",
5
+ "module": "الوحدة",
6
+ "user": "المستخدم",
7
+ "activity": "النشاط",
8
+ "ip-address": "عنوان IP",
9
+ "date": "التاريخ"
10
+ }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "audit-logs": {
3
+ "audit-logs": "Audit Logs",
4
+ "title": "Title",
5
+ "module": "Module",
6
+ "user": "User",
7
+ "activity": "Activity",
8
+ "ip-address": "IP Address",
9
+ "date": "Date"
10
+ }
11
+ }
@@ -0,0 +1,297 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Component, Injectable, computed, viewChild, linkedSignal } from '@angular/core';
3
+ import { Router, RouterOutlet } from '@angular/router';
4
+ import { TranslocoService, TranslocoDirective } from '@jsverse/transloco';
5
+ import { Breadcrumb } from '@masterteam/components/breadcrumb';
6
+ import { Page } from '@masterteam/components/page';
7
+ import { CommonModule } from '@angular/common';
8
+ import { Table } from '@masterteam/components/table';
9
+ import { SkeletonModule } from 'primeng/skeleton';
10
+ import { Avatar } from '@masterteam/components/avatar';
11
+ import { Action, Selector, State, Store, select } from '@ngxs/store';
12
+ import { HttpClient, HttpContext } from '@angular/common/http';
13
+ import { CrudStateBase, handleApiRequest, REQUEST_CONTEXT } from '@masterteam/components';
14
+
15
+ class AuditLogs {
16
+ router = inject(Router);
17
+ translocoService = inject(TranslocoService);
18
+ breadcrumbItems = [
19
+ {
20
+ label: '',
21
+ icon: 'general.home-line',
22
+ routerLink: '/control-panel/workspaces',
23
+ },
24
+ {
25
+ label: this.translocoService.translate('product-settings.product-settings'),
26
+ routerLink: '/control-panel/product-settings',
27
+ },
28
+ { label: this.translocoService.translate('audit-logs.audit-logs') },
29
+ ];
30
+ goBack() {
31
+ this.router.navigate(['control-panel/product-settings']);
32
+ }
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogs, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: AuditLogs, isStandalone: true, selector: "mt-audit-logs", ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "component", type: Page, selector: "mt-page", inputs: ["backButton", "backButtonIcon", "avatarIcon", "avatarStyle", "avatarShape", "title", "tabs", "activeTab", "contentClass", "contentId"], outputs: ["backButtonClick", "tabChange"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: Breadcrumb, selector: "mt-breadcrumb", inputs: ["items", "styleClass"], outputs: ["onItemClick"] }] });
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogs, decorators: [{
37
+ type: Component,
38
+ args: [{ selector: 'mt-audit-logs', imports: [Page, RouterOutlet, TranslocoDirective, Breadcrumb], template: "<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" }]
39
+ }] });
40
+
41
+ var AuditLogsActionKey;
42
+ (function (AuditLogsActionKey) {
43
+ AuditLogsActionKey["GetAuditLogs"] = "getAuditLogs";
44
+ })(AuditLogsActionKey || (AuditLogsActionKey = {}));
45
+
46
+ class GetAuditLogs {
47
+ page;
48
+ pageSize;
49
+ filters;
50
+ static type = '[AuditLogs] Get Audit Logs';
51
+ constructor(page, pageSize, filters) {
52
+ this.page = page;
53
+ this.pageSize = pageSize;
54
+ this.filters = filters;
55
+ }
56
+ }
57
+
58
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
59
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
60
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
61
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
62
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
63
+ };
64
+ let AuditLogsState = class AuditLogsState extends CrudStateBase {
65
+ http = inject(HttpClient);
66
+ // ============================================================================
67
+ // Selectors - Individual data selectors for fine-grained reactivity
68
+ // ============================================================================
69
+ static getAuditLogs(state) {
70
+ return state.auditLogs;
71
+ }
72
+ static getPage(state) {
73
+ return state.page;
74
+ }
75
+ static getPageSize(state) {
76
+ return state.pageSize;
77
+ }
78
+ // ============================================================================
79
+ // Loading/Error Slice Selectors - REQUIRED for optimal performance
80
+ // ============================================================================
81
+ static getLoadingActive(state) {
82
+ return state.loadingActive;
83
+ }
84
+ static getErrors(state) {
85
+ return state.errors;
86
+ }
87
+ // ============================================================================
88
+ // Actions
89
+ // ============================================================================
90
+ getAuditLogs(ctx, { page, pageSize, filters }) {
91
+ const params = {
92
+ page: page.toString(),
93
+ pageSize: pageSize.toString(),
94
+ ...filters,
95
+ };
96
+ const req$ = this.http.get(`app/audittrail`, {
97
+ params: params,
98
+ });
99
+ return handleApiRequest({
100
+ ctx,
101
+ key: AuditLogsActionKey.GetAuditLogs,
102
+ request$: req$,
103
+ onSuccess: (response) => ({
104
+ auditLogs: response.data ?? [],
105
+ page,
106
+ pageSize,
107
+ }),
108
+ });
109
+ }
110
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogsState, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
111
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogsState });
112
+ };
113
+ __decorate([
114
+ Action(GetAuditLogs)
115
+ ], AuditLogsState.prototype, "getAuditLogs", null);
116
+ __decorate([
117
+ Selector()
118
+ ], AuditLogsState, "getAuditLogs", null);
119
+ __decorate([
120
+ Selector()
121
+ ], AuditLogsState, "getPage", null);
122
+ __decorate([
123
+ Selector()
124
+ ], AuditLogsState, "getPageSize", null);
125
+ __decorate([
126
+ Selector()
127
+ ], AuditLogsState, "getLoadingActive", null);
128
+ __decorate([
129
+ Selector()
130
+ ], AuditLogsState, "getErrors", null);
131
+ AuditLogsState = __decorate([
132
+ State({
133
+ name: 'auditLogs',
134
+ defaults: {
135
+ auditLogs: { items: [] },
136
+ page: 1,
137
+ pageSize: 10,
138
+ loadingActive: [],
139
+ errors: {},
140
+ },
141
+ })
142
+ ], AuditLogsState);
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogsState, decorators: [{
144
+ type: Injectable
145
+ }], propDecorators: { getAuditLogs: [] } });
146
+
147
+ class AuditLogsFacade {
148
+ store = inject(Store);
149
+ // ============================================================================
150
+ // Data Selectors - Memoized by NGXS (fine-grained reactivity)
151
+ // ============================================================================
152
+ auditLogs = select(AuditLogsState.getAuditLogs);
153
+ page = select(AuditLogsState.getPage);
154
+ pageSize = select(AuditLogsState.getPageSize);
155
+ // ============================================================================
156
+ // Loading/Error Slices - Memoized by NGXS
157
+ // ============================================================================
158
+ loadingActive = select(AuditLogsState.getLoadingActive);
159
+ errors = select(AuditLogsState.getErrors);
160
+ // ============================================================================
161
+ // Loading Signals - Computed from slice (minimal reactivity)
162
+ // ============================================================================
163
+ isLoadingAuditLogs = computed(() => this.loadingActive().includes(AuditLogsActionKey.GetAuditLogs), ...(ngDevMode ? [{ debugName: "isLoadingAuditLogs" }] : []));
164
+ // ============================================================================
165
+ // Error Signals - Computed from slice (minimal reactivity)
166
+ // ============================================================================
167
+ getAuditLogsError = computed(() => this.errors()[AuditLogsActionKey.GetAuditLogs] ?? null, ...(ngDevMode ? [{ debugName: "getAuditLogsError" }] : []));
168
+ // ============================================================================
169
+ // Action Dispatchers
170
+ // ============================================================================
171
+ getAuditLogs(page = 1, pageSize = 10, filters) {
172
+ return this.store.dispatch(new GetAuditLogs(page, pageSize, filters));
173
+ }
174
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogsFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
175
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogsFacade, providedIn: 'root' });
176
+ }
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogsFacade, decorators: [{
178
+ type: Injectable,
179
+ args: [{ providedIn: 'root' }]
180
+ }] });
181
+
182
+ /**
183
+ * Recursively normalizes Date objects to YYYY-MM-DDTHH:mm:ss format.
184
+ * Prevents UTC timezone leaks by converting dates to local datetime strings.
185
+ */
186
+ function normalizeDates(value) {
187
+ if (value instanceof Date) {
188
+ const y = value.getFullYear();
189
+ const m = String(value.getMonth() + 1).padStart(2, '0');
190
+ const d = String(value.getDate()).padStart(2, '0');
191
+ const h = String(value.getHours()).padStart(2, '0');
192
+ const min = String(value.getMinutes()).padStart(2, '0');
193
+ const s = String(value.getSeconds()).padStart(2, '0');
194
+ return `${y}-${m}-${d}T${h}:${min}:${s}`;
195
+ }
196
+ if (Array.isArray(value)) {
197
+ return value.map((v) => normalizeDates(v));
198
+ }
199
+ // Skip special objects that shouldn't be normalized (FormData, File, Blob, etc.)
200
+ if (value !== null && typeof value === 'object') {
201
+ // Check if it's a plain object (not FormData, File, Blob, or other special objects)
202
+ if (value.constructor !== Object) {
203
+ return value;
204
+ }
205
+ return Object.keys(value).reduce((acc, key) => {
206
+ acc[key] = normalizeDates(value[key]);
207
+ return acc;
208
+ }, {});
209
+ }
210
+ return value;
211
+ }
212
+
213
+ class AuditLogsList {
214
+ userCol = viewChild.required('userCol');
215
+ facade = inject(AuditLogsFacade);
216
+ translocoService = inject(TranslocoService);
217
+ context = new HttpContext().set(REQUEST_CONTEXT, {
218
+ useBaseUrl: true,
219
+ });
220
+ auditLogs = computed(() => this.facade.auditLogs()?.items, ...(ngDevMode ? [{ debugName: "auditLogs" }] : []));
221
+ fullDataAuditLogs = computed(() => this.facade.auditLogs(), ...(ngDevMode ? [{ debugName: "fullDataAuditLogs" }] : []));
222
+ tableColumns = linkedSignal(() => [
223
+ {
224
+ key: 'name',
225
+ label: this.translocoService.translate('audit-logs.title'),
226
+ },
227
+ {
228
+ key: 'module',
229
+ label: this.translocoService.translate('audit-logs.module'),
230
+ },
231
+ {
232
+ key: 'originalUserId.userName',
233
+ label: this.translocoService.translate('audit-logs.user'),
234
+ type: 'custom',
235
+ customCellTpl: this.userCol(),
236
+ filterConfig: {
237
+ type: 'user',
238
+ label: 'User',
239
+ context: this.context,
240
+ apiUrl: 'Identity/users',
241
+ },
242
+ },
243
+ {
244
+ key: 'description',
245
+ label: this.translocoService.translate('audit-logs.activity'),
246
+ },
247
+ {
248
+ key: 'userIpAddress',
249
+ label: this.translocoService.translate('audit-logs.ip-address'),
250
+ },
251
+ {
252
+ key: 'date.displayValue',
253
+ label: this.translocoService.translate('audit-logs.date'),
254
+ filterConfig: { type: 'date', label: 'Start Date' },
255
+ },
256
+ ], ...(ngDevMode ? [{ debugName: "tableColumns" }] : []));
257
+ loading = this.facade.isLoadingAuditLogs;
258
+ onLazyLoad(event) {
259
+ // Transform filters to API format
260
+ const apiFilters = {};
261
+ if (event.filters) {
262
+ // Handle date filter transformation
263
+ if (event.filters['date.displayValue']) {
264
+ const dateFilter = event.filters['date.displayValue'];
265
+ if (dateFilter.from) {
266
+ apiFilters['startDate'] = normalizeDates(dateFilter.from);
267
+ }
268
+ if (dateFilter.to) {
269
+ apiFilters['endDate'] = normalizeDates(dateFilter.to);
270
+ }
271
+ }
272
+ if (event.filters['generalSearch']) {
273
+ apiFilters['searchTerm'] = event.filters['generalSearch'];
274
+ }
275
+ if (event.filters['originalUserId.userName']) {
276
+ const userFilter = event.filters['originalUserId.userName'];
277
+ apiFilters['userId'] = userFilter?.userId;
278
+ }
279
+ }
280
+ this.facade.getAuditLogs(event.currentPage, event.pageSize, apiFilters);
281
+ }
282
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogsList, deps: [], target: i0.ɵɵFactoryTarget.Component });
283
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.3", type: AuditLogsList, isStandalone: true, selector: "mt-audit-logs-list", viewQueries: [{ propertyName: "userCol", first: true, predicate: ["userCol"], descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: Table, selector: "mt-table", inputs: ["filters", "data", "columns", "rowActions", "size", "showGridlines", "stripedRows", "selectableRows", "generalSearch", "showFilters", "loading", "updating", "lazy", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "exportable", "exportFilename", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "pageSize", "currentPage", "first", "filterTerm"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] });
284
+ }
285
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuditLogsList, decorators: [{
286
+ type: Component,
287
+ args: [{ selector: 'mt-audit-logs-list', standalone: true, imports: [CommonModule, SkeletonModule, Table, Avatar, TranslocoDirective], template: "<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" }]
288
+ }], propDecorators: { userCol: [{ type: i0.ViewChild, args: ['userCol', { isSignal: true }] }] } });
289
+
290
+ // store/index.ts
291
+
292
+ /**
293
+ * Generated bundle index. Do not edit.
294
+ */
295
+
296
+ export { AuditLogs, AuditLogsActionKey, AuditLogsFacade, AuditLogsList, AuditLogsState, GetAuditLogs };
297
+ //# sourceMappingURL=masterteam-audit-logs.mjs.map
@@ -0,0 +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: '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: { type: 'date', label: 'Start Date' },\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":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@masterteam/audit-logs",
3
+ "version": "0.0.1",
4
+ "publishConfig": {
5
+ "directory": "../../../dist/masterteam/audit-logs",
6
+ "linkDirectory": false,
7
+ "access": "public"
8
+ },
9
+ "peerDependencies": {
10
+ "@angular/common": "^21.0.3",
11
+ "@angular/core": "^21.0.3",
12
+ "@angular/forms": "^21.0.3",
13
+ "@angular/cdk": "^21.0.2",
14
+ "@primeuix/themes": "^2.0.2",
15
+ "@tailwindcss/postcss": "^4.1.17",
16
+ "@jsverse/transloco": "^8.0.2",
17
+ "postcss": "^8.5.6",
18
+ "primeng": "21.0.1",
19
+ "rxjs": "^7.8.2",
20
+ "tailwindcss": "^4.1.17",
21
+ "tailwindcss-primeui": "^0.6.1",
22
+ "@ngxs/store": "^20.1.0",
23
+ "@masterteam/components": "^0.0.84",
24
+ "@masterteam/forms": "^0.0.35",
25
+ "@masterteam/icons": "^0.0.12"
26
+ },
27
+ "sideEffects": false,
28
+ "exports": {
29
+ "./assets/audit-logs.css": {
30
+ "style": "./assets/audit-logs.css"
31
+ },
32
+ "./assets/i18n/*.json": {
33
+ "default": "./assets/i18n/*.json"
34
+ },
35
+ "./package.json": {
36
+ "default": "./package.json"
37
+ },
38
+ ".": {
39
+ "types": "./types/masterteam-audit-logs.d.ts",
40
+ "default": "./fesm2022/masterteam-audit-logs.mjs"
41
+ }
42
+ },
43
+ "module": "fesm2022/masterteam-audit-logs.mjs",
44
+ "typings": "types/masterteam-audit-logs.d.ts",
45
+ "dependencies": {
46
+ "tslib": "^2.8.1"
47
+ }
48
+ }
@@ -0,0 +1,126 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+ import * as _masterteam_audit_logs from '@masterteam/audit-logs';
4
+ import { ColumnDef } from '@masterteam/components/table';
5
+ import { HttpContext } from '@angular/common/http';
6
+ import * as rxjs from 'rxjs';
7
+ import { StateContext } from '@ngxs/store';
8
+ import { CrudStateBase } from '@masterteam/components';
9
+
10
+ declare class AuditLogs {
11
+ private readonly router;
12
+ private readonly translocoService;
13
+ breadcrumbItems: {
14
+ label?: string;
15
+ routerLink?: string;
16
+ icon?: string;
17
+ }[];
18
+ goBack(): void;
19
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuditLogs, never>;
20
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AuditLogs, "mt-audit-logs", never, {}, {}, never, never, true, never>;
21
+ }
22
+
23
+ declare class AuditLogsList {
24
+ userCol: _angular_core.Signal<TemplateRef<any>>;
25
+ private readonly facade;
26
+ private readonly translocoService;
27
+ context: HttpContext;
28
+ auditLogs: _angular_core.Signal<_masterteam_audit_logs.AuditLog[]>;
29
+ fullDataAuditLogs: _angular_core.Signal<{
30
+ items: _masterteam_audit_logs.AuditLog[];
31
+ page?: number;
32
+ pageSize?: number;
33
+ totalCount?: number;
34
+ }>;
35
+ tableColumns: _angular_core.WritableSignal<ColumnDef[]>;
36
+ loading: _angular_core.Signal<boolean>;
37
+ onLazyLoad(event: any): void;
38
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuditLogsList, never>;
39
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AuditLogsList, "mt-audit-logs-list", never, {}, {}, never, never, true, never>;
40
+ }
41
+
42
+ interface LoadingStateShape<L extends string = string> {
43
+ loadingActive: L[];
44
+ errors: Partial<Record<L, string>>;
45
+ }
46
+
47
+ interface AuditLog {
48
+ event?: string;
49
+ module?: string;
50
+ originalUserId?: {
51
+ id?: string;
52
+ userId?: string;
53
+ displayName?: string;
54
+ mobile?: string;
55
+ userName?: string;
56
+ email?: string;
57
+ photo?: string;
58
+ };
59
+ date?: {
60
+ displayValue?: string;
61
+ actualValue?: string;
62
+ };
63
+ description?: string;
64
+ title?: string;
65
+ userIpAddress?: string;
66
+ }
67
+ declare enum AuditLogsActionKey {
68
+ GetAuditLogs = "getAuditLogs"
69
+ }
70
+ interface AuditLogsStateModel extends LoadingStateShape<AuditLogsActionKey> {
71
+ auditLogs: {
72
+ items: AuditLog[];
73
+ page?: number;
74
+ pageSize?: number;
75
+ totalCount?: number;
76
+ };
77
+ page: number;
78
+ pageSize: number;
79
+ }
80
+
81
+ declare class GetAuditLogs {
82
+ page: number;
83
+ pageSize: number;
84
+ filters?: Record<string, any> | undefined;
85
+ static readonly type = "[AuditLogs] Get Audit Logs";
86
+ constructor(page: number, pageSize: number, filters?: Record<string, any> | undefined);
87
+ }
88
+
89
+ declare class AuditLogsState extends CrudStateBase<AuditLog, AuditLogsStateModel, AuditLogsActionKey> {
90
+ private http;
91
+ static getAuditLogs(state: AuditLogsStateModel): {
92
+ items: AuditLog[];
93
+ page?: number;
94
+ pageSize?: number;
95
+ totalCount?: number;
96
+ };
97
+ static getPage(state: AuditLogsStateModel): number;
98
+ static getPageSize(state: AuditLogsStateModel): number;
99
+ static getLoadingActive(state: AuditLogsStateModel): string[];
100
+ static getErrors(state: AuditLogsStateModel): Record<string, string | null>;
101
+ getAuditLogs(ctx: StateContext<AuditLogsStateModel>, { page, pageSize, filters }: GetAuditLogs): rxjs.Observable<any>;
102
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuditLogsState, never>;
103
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuditLogsState>;
104
+ }
105
+
106
+ declare class AuditLogsFacade {
107
+ private readonly store;
108
+ readonly auditLogs: _angular_core.Signal<{
109
+ items: _masterteam_audit_logs.AuditLog[];
110
+ page?: number;
111
+ pageSize?: number;
112
+ totalCount?: number;
113
+ }>;
114
+ readonly page: _angular_core.Signal<number>;
115
+ readonly pageSize: _angular_core.Signal<number>;
116
+ private readonly loadingActive;
117
+ private readonly errors;
118
+ readonly isLoadingAuditLogs: _angular_core.Signal<boolean>;
119
+ readonly getAuditLogsError: _angular_core.Signal<string | null>;
120
+ getAuditLogs(page?: number, pageSize?: number, filters?: Record<string, any>): rxjs.Observable<void>;
121
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuditLogsFacade, never>;
122
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuditLogsFacade>;
123
+ }
124
+
125
+ export { AuditLogs, AuditLogsActionKey, AuditLogsFacade, AuditLogsList, AuditLogsState, GetAuditLogs };
126
+ export type { AuditLog, AuditLogsStateModel };