@unipin/angular-applet 21.3.1 → 21.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +4 -2
  2. package/fesm2022/unipin-angular-applet-accordion.mjs +39 -37
  3. package/fesm2022/unipin-angular-applet-accordion.mjs.map +1 -1
  4. package/fesm2022/unipin-angular-applet-alert-dialog.mjs +9 -9
  5. package/fesm2022/unipin-angular-applet-alert-dialog.mjs.map +1 -1
  6. package/fesm2022/unipin-angular-applet-alert.mjs +16 -19
  7. package/fesm2022/unipin-angular-applet-alert.mjs.map +1 -1
  8. package/fesm2022/unipin-angular-applet-approval.mjs +11 -11
  9. package/fesm2022/unipin-angular-applet-approval.mjs.map +1 -1
  10. package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-3a2P0bZr.mjs → unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs} +6 -7
  11. package/fesm2022/unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs.map +1 -0
  12. package/fesm2022/unipin-angular-applet-audit.mjs +14 -14
  13. package/fesm2022/unipin-angular-applet-audit.mjs.map +1 -1
  14. package/fesm2022/unipin-angular-applet-auth.mjs +23 -26
  15. package/fesm2022/unipin-angular-applet-auth.mjs.map +1 -1
  16. package/fesm2022/unipin-angular-applet-avatar.mjs +6 -7
  17. package/fesm2022/unipin-angular-applet-avatar.mjs.map +1 -1
  18. package/fesm2022/unipin-angular-applet-badge.mjs +6 -7
  19. package/fesm2022/unipin-angular-applet-badge.mjs.map +1 -1
  20. package/fesm2022/unipin-angular-applet-buttons.mjs +13 -15
  21. package/fesm2022/unipin-angular-applet-buttons.mjs.map +1 -1
  22. package/fesm2022/unipin-angular-applet-calendar.mjs +23 -27
  23. package/fesm2022/unipin-angular-applet-calendar.mjs.map +1 -1
  24. package/fesm2022/unipin-angular-applet-collapsible.mjs +17 -20
  25. package/fesm2022/unipin-angular-applet-collapsible.mjs.map +1 -1
  26. package/fesm2022/unipin-angular-applet-common.mjs +25 -30
  27. package/fesm2022/unipin-angular-applet-common.mjs.map +1 -1
  28. package/fesm2022/unipin-angular-applet-containers.mjs +23 -26
  29. package/fesm2022/unipin-angular-applet-containers.mjs.map +1 -1
  30. package/fesm2022/unipin-angular-applet-dialog.mjs +64 -70
  31. package/fesm2022/unipin-angular-applet-dialog.mjs.map +1 -1
  32. package/fesm2022/unipin-angular-applet-forms.mjs +231 -236
  33. package/fesm2022/unipin-angular-applet-forms.mjs.map +1 -1
  34. package/fesm2022/unipin-angular-applet-froala.mjs +10 -11
  35. package/fesm2022/unipin-angular-applet-froala.mjs.map +1 -1
  36. package/fesm2022/unipin-angular-applet-grids.mjs +430 -17
  37. package/fesm2022/unipin-angular-applet-grids.mjs.map +1 -1
  38. package/fesm2022/unipin-angular-applet-infinite-scroll.mjs +5 -6
  39. package/fesm2022/unipin-angular-applet-infinite-scroll.mjs.map +1 -1
  40. package/fesm2022/unipin-angular-applet-json-viewer.mjs +8 -9
  41. package/fesm2022/unipin-angular-applet-json-viewer.mjs.map +1 -1
  42. package/fesm2022/unipin-angular-applet-kbd.mjs +5 -6
  43. package/fesm2022/unipin-angular-applet-kbd.mjs.map +1 -1
  44. package/fesm2022/unipin-angular-applet-loading-dialog.mjs +8 -9
  45. package/fesm2022/unipin-angular-applet-loading-dialog.mjs.map +1 -1
  46. package/fesm2022/unipin-angular-applet-markdown.mjs +20 -21
  47. package/fesm2022/unipin-angular-applet-markdown.mjs.map +1 -1
  48. package/fesm2022/unipin-angular-applet-popover.mjs +26 -30
  49. package/fesm2022/unipin-angular-applet-popover.mjs.map +1 -1
  50. package/fesm2022/unipin-angular-applet-progress-bar.mjs +8 -9
  51. package/fesm2022/unipin-angular-applet-progress-bar.mjs.map +1 -1
  52. package/fesm2022/unipin-angular-applet-skeleton.mjs +5 -6
  53. package/fesm2022/unipin-angular-applet-skeleton.mjs.map +1 -1
  54. package/fesm2022/unipin-angular-applet-spinner.mjs +7 -7
  55. package/fesm2022/unipin-angular-applet-spinner.mjs.map +1 -1
  56. package/fesm2022/unipin-angular-applet-stepper.mjs +17 -19
  57. package/fesm2022/unipin-angular-applet-stepper.mjs.map +1 -1
  58. package/fesm2022/unipin-angular-applet-swipeable.mjs +26 -30
  59. package/fesm2022/unipin-angular-applet-swipeable.mjs.map +1 -1
  60. package/fesm2022/unipin-angular-applet-tabs.mjs +22 -25
  61. package/fesm2022/unipin-angular-applet-tabs.mjs.map +1 -1
  62. package/fesm2022/unipin-angular-applet-tooltip.mjs +5 -6
  63. package/fesm2022/unipin-angular-applet-tooltip.mjs.map +1 -1
  64. package/package.json +6 -2
  65. package/types/unipin-angular-applet-accordion.d.ts +4 -2
  66. package/types/unipin-angular-applet-forms.d.ts +6 -3
  67. package/types/unipin-angular-applet-grids.d.ts +102 -15
  68. package/types/unipin-angular-applet-popover.d.ts +3 -3
  69. package/common/assets/sprites/flagGlobal.png +0 -0
  70. package/fesm2022/unipin-angular-applet-audit-audit-modal.component-3a2P0bZr.mjs.map +0 -1
@@ -55,10 +55,10 @@ class ApprovalService {
55
55
  `
56
56
  });
57
57
  }
58
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ApprovalService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
59
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ApprovalService, providedIn: 'root' }); }
58
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ApprovalService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
59
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ApprovalService, providedIn: 'root' }); }
60
60
  }
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ApprovalService, decorators: [{
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ApprovalService, decorators: [{
62
62
  type: Injectable,
63
63
  args: [{
64
64
  providedIn: 'root'
@@ -67,10 +67,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
67
67
 
68
68
  class UpApprovalFormComponent {
69
69
  constructor() {
70
- this.approvalData = input.required(...(ngDevMode ? [{ debugName: "approvalData" }] : []));
71
- this.isLoading = model(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
72
- this.borderColors = signal({}, ...(ngDevMode ? [{ debugName: "borderColors" }] : []));
73
- this.backgroundColors = signal({}, ...(ngDevMode ? [{ debugName: "backgroundColors" }] : []));
70
+ this.approvalData = input.required(...(ngDevMode ? [{ debugName: "approvalData" }] : /* istanbul ignore next */ []));
71
+ this.isLoading = model(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
72
+ this.borderColors = signal({}, ...(ngDevMode ? [{ debugName: "borderColors" }] : /* istanbul ignore next */ []));
73
+ this.backgroundColors = signal({}, ...(ngDevMode ? [{ debugName: "backgroundColors" }] : /* istanbul ignore next */ []));
74
74
  this.STATUS_COLOR_MAP = {
75
75
  PENDING: {
76
76
  bg: 'bg-yellow-500',
@@ -104,12 +104,12 @@ class UpApprovalFormComponent {
104
104
  getColors(status) {
105
105
  return this.STATUS_COLOR_MAP[status] ?? this.STATUS_COLOR_MAP.DEFAULT;
106
106
  }
107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UpApprovalFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
108
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: UpApprovalFormComponent, isStandalone: true, selector: "up-approval-form", inputs: { approvalData: { classPropertyName: "approvalData", publicName: "approvalData", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isLoading: "isLoadingChange" }, host: { classAttribute: "block space-y-4" }, ngImport: i0, template: "@if (isLoading()) {\n @for (i of [1,2,3,4,5]; track $index) {\n <div class=\"border border-border rounded-md px-2 select-none\">\n <div class=\"px-2 py-4 border-b border-border flex justify-between items-center gap-4\">\n <div class=\"grow flex items-center gap-2\">\n <div \n upSkeleton\n class=\"h-6 w-4/5 max-w-50\"\n ></div>\n </div>\n\n <div class=\"shrink-0 text-sm\">\n <div \n upSkeleton\n class=\"h-6 w-screen max-w-30\"\n ></div>\n </div>\n </div>\n\n <div class=\"px-2 py-4 space-y-4\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Entity\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n User\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Remark\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Data\n </label>\n\n <div \n upSkeleton\n class=\"h-20 w-full\"\n ></div>\n </div>\n </div>\n </div>\n }\n}\n@else {\n @for (d of approvalData(); track $index) {\n <div \n class=\"border rounded-md px-2 select-none\"\n [class]=\"borderColors()[$index]\"\n >\n <div \n class=\"px-2 py-4 border-b flex justify-between items-center gap-4\"\n [class]=\"borderColors()[$index]\"\n >\n <div class=\"grow flex items-center gap-2\">\n <div \n upBadge \n class=\"text-white shrink-0\" \n [class]=\"backgroundColors()[$index]\"\n >\n {{ (d.status?? 'Unknown') | upCapitalize }}\n </div>\n </div>\n\n @if (d.createdAt) {\n <div class=\"shrink-0 text-sm text-muted-foreground\">\n {{ d.createdAt | date: 'dd LLL yyyy HH:mm' }}\n </div>\n }\n </div>\n\n <div class=\"px-2 py-4 space-y-6\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Entity\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.entity\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n User\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.createdByUser?.name?? '-'\"\n />\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Remark\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.remark\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Data\n </label>\n\n <textarea \n upInput \n readonly\n class=\"min-h-50 resize-none\"\n [value]=\"d.data | json\"\n >\n </textarea>\n </div>\n </div>\n </div>\n }\n}\n", dependencies: [{ kind: "directive", type: UpInputDirective, selector: "[upInput]", inputs: ["class"], exportAs: ["upInput"] }, { kind: "directive", type: UpBadgeDirective, selector: "[upBadge]", inputs: ["variant", "class"], exportAs: ["upBadge"] }, { kind: "directive", type: UpSkeletonDirective, selector: "[upSkeleton]", inputs: ["class"], exportAs: ["upSkeleton"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: UpCapitalizaPipe, name: "upCapitalize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpApprovalFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: UpApprovalFormComponent, isStandalone: true, selector: "up-approval-form", inputs: { approvalData: { classPropertyName: "approvalData", publicName: "approvalData", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isLoading: "isLoadingChange" }, host: { classAttribute: "block space-y-4" }, ngImport: i0, template: "@if (isLoading()) {\n @for (i of [1,2,3,4,5]; track $index) {\n <div class=\"border border-border rounded-md px-2 select-none\">\n <div class=\"px-2 py-4 border-b border-border flex justify-between items-center gap-4\">\n <div class=\"grow flex items-center gap-2\">\n <div \n upSkeleton\n class=\"h-6 w-4/5 max-w-50\"\n ></div>\n </div>\n\n <div class=\"shrink-0 text-sm\">\n <div \n upSkeleton\n class=\"h-6 w-screen max-w-30\"\n ></div>\n </div>\n </div>\n\n <div class=\"px-2 py-4 space-y-4\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Entity\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n User\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Remark\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Data\n </label>\n\n <div \n upSkeleton\n class=\"h-20 w-full\"\n ></div>\n </div>\n </div>\n </div>\n }\n}\n@else {\n @for (d of approvalData(); track $index) {\n <div \n class=\"border rounded-md px-2 select-none\"\n [class]=\"borderColors()[$index]\"\n >\n <div \n class=\"px-2 py-4 border-b flex justify-between items-center gap-4\"\n [class]=\"borderColors()[$index]\"\n >\n <div class=\"grow flex items-center gap-2\">\n <div \n upBadge \n class=\"text-white shrink-0\" \n [class]=\"backgroundColors()[$index]\"\n >\n {{ (d.status?? 'Unknown') | upCapitalize }}\n </div>\n </div>\n\n @if (d.createdAt) {\n <div class=\"shrink-0 text-sm text-muted-foreground\">\n {{ d.createdAt | date: 'dd LLL yyyy HH:mm' }}\n </div>\n }\n </div>\n\n <div class=\"px-2 py-4 space-y-6\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Entity\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.entity\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n User\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.createdByUser?.name?? '-'\"\n />\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Remark\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.remark\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Data\n </label>\n\n <textarea \n upInput \n readonly\n class=\"min-h-50 resize-none\"\n [value]=\"d.data | json\"\n >\n </textarea>\n </div>\n </div>\n </div>\n }\n}\n", dependencies: [{ kind: "directive", type: UpInputDirective, selector: "[upInput]", inputs: ["class"], exportAs: ["upInput"] }, { kind: "directive", type: UpBadgeDirective, selector: "[upBadge]", inputs: ["variant", "class"], exportAs: ["upBadge"] }, { kind: "directive", type: UpSkeletonDirective, selector: "[upSkeleton]", inputs: ["class"], exportAs: ["upSkeleton"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: UpCapitalizaPipe, name: "upCapitalize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
109
109
  }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UpApprovalFormComponent, decorators: [{
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpApprovalFormComponent, decorators: [{
111
111
  type: Component,
112
- args: [{ standalone: true, selector: 'up-approval-form', changeDetection: ChangeDetectionStrategy.OnPush, host: {
112
+ args: [{ selector: 'up-approval-form', changeDetection: ChangeDetectionStrategy.OnPush, host: {
113
113
  class: 'block space-y-4'
114
114
  }, imports: [
115
115
  DatePipe,
@@ -1 +1 @@
1
- {"version":3,"file":"unipin-angular-applet-approval.mjs","sources":["../../../projects/unipin-angular/approval/services/approval.service.ts","../../../projects/unipin-angular/approval/component/form/approval-form.component.ts","../../../projects/unipin-angular/approval/component/form/approval-form.component.html","../../../projects/unipin-angular/approval/unipin-angular-applet-approval.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CacheStrategy, GqlParser, MutationResult, QueryResult } from '@unipin/angular-gql';\nimport { ApprovalCriteria, PageableResponse, MutationApprovalMsApproveOrDeclineRequestArgs } from '@unipin/graphql-schema';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApprovalService {\n\n constructor(\n protected readonly gql: GqlParser\n ) { }\n\n public query(\n input: ApprovalCriteria, \n extraAttr: string = '', \n cacheStrategy?: CacheStrategy\n ): Observable<QueryResult<{ approvalMsApprovals: PageableResponse }>>{\n \n return this.gql.query({\n operationName: 'QueryApproval',\n cacheStrategy,\n variables: { \n input \n },\n query: `\n query QueryApproval($input: ApprovalCriteria) {\n approvalMsApprovals(input: $input) {\n data {\n guid \n createdAt \n entity \n remark \n sourcePlatform \n status \n type \n createdByUser {\n guid\n name\n }\n approvalGroup { \n guid \n }\n ${ extraAttr }\n }\n ${ input.page === 0? 'totalRecord' : '' }\n }\n }\n `\n });\n }\n\n public request(variables: MutationApprovalMsApproveOrDeclineRequestArgs): Observable<MutationResult<{ approvalMsApproveOrDeclineRequest: string }>>{\n \n return this.gql.mutate({\n variables,\n operationName: variables.isApprove? 'ApproveApproval' : 'DeclineApproval',\n mutation: `\n mutation ${ variables.isApprove? 'ApproveApproval' : 'DeclineApproval'} ($approvalGroupGuid: String, $guids: [String], $isApprove: Boolean, $reason: String) {\n approvalMsApproveOrDeclineRequest(approvalGroupGuid: $approvalGroupGuid, guids: $guids, isApprove: $isApprove, reason: $reason)\n }\n `\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, effect, input, model, signal } from '@angular/core';\nimport { DatePipe, JsonPipe } from '@angular/common';\nimport { Approval } from '@unipin/graphql-schema';\nimport { UpInputDirective } from '@unipin/angular-applet/forms';\nimport { UpBadgeDirective } from '@unipin/angular-applet/badge';\nimport { UpCapitalizaPipe } from '@unipin/angular-applet/common';\nimport { UpSkeletonDirective } from '@unipin/angular-applet/skeleton';\n\n\n@Component({\n standalone: true,\n selector: 'up-approval-form',\n templateUrl: './approval-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block space-y-4'\n },\n imports: [\n DatePipe,\n JsonPipe,\n UpCapitalizaPipe,\n UpInputDirective,\n UpBadgeDirective,\n UpSkeletonDirective\n ]\n})\nexport class UpApprovalFormComponent {\n \n public readonly approvalData = input.required<Approval[]>();\n public readonly isLoading = model<boolean>(true);\n\n public readonly borderColors = signal<{ [key: number]: string }>({});\n public readonly backgroundColors = signal<{ [key: number]: string }>({});\n\n protected readonly STATUS_COLOR_MAP = {\n PENDING: { \n bg: 'bg-yellow-500', \n border: 'border-yellow-500' \n },\n APPROVED: { \n bg: 'bg-green-700', \n border: 'border-green-700' \n },\n DECLINED: { \n bg: 'bg-destructive', \n border: 'border-destructive' \n },\n DEFAULT: { \n bg: 'bg-primary', \n border: 'border-primary' \n },\n };\n\n constructor() {\n effect(\n () => {\n const bg: any = {};\n const border: any = {};\n \n this.approvalData().forEach(\n (item, index) => {\n const colors = this.getColors(item.status);\n \n bg[index] = colors.bg;\n border[index] = colors.border;\n }\n );\n \n this.backgroundColors.set(bg);\n this.borderColors.set(border);\n }\n );\n }\n\n protected getColors(status?: string | null): { bg: string, border: string}{\n return this.STATUS_COLOR_MAP[status as keyof typeof this.STATUS_COLOR_MAP]?? this.STATUS_COLOR_MAP.DEFAULT;\n }\n}\n","@if (isLoading()) {\n @for (i of [1,2,3,4,5]; track $index) {\n <div class=\"border border-border rounded-md px-2 select-none\">\n <div class=\"px-2 py-4 border-b border-border flex justify-between items-center gap-4\">\n <div class=\"grow flex items-center gap-2\">\n <div \n upSkeleton\n class=\"h-6 w-4/5 max-w-50\"\n ></div>\n </div>\n\n <div class=\"shrink-0 text-sm\">\n <div \n upSkeleton\n class=\"h-6 w-screen max-w-30\"\n ></div>\n </div>\n </div>\n\n <div class=\"px-2 py-4 space-y-4\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Entity\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n User\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Remark\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Data\n </label>\n\n <div \n upSkeleton\n class=\"h-20 w-full\"\n ></div>\n </div>\n </div>\n </div>\n }\n}\n@else {\n @for (d of approvalData(); track $index) {\n <div \n class=\"border rounded-md px-2 select-none\"\n [class]=\"borderColors()[$index]\"\n >\n <div \n class=\"px-2 py-4 border-b flex justify-between items-center gap-4\"\n [class]=\"borderColors()[$index]\"\n >\n <div class=\"grow flex items-center gap-2\">\n <div \n upBadge \n class=\"text-white shrink-0\" \n [class]=\"backgroundColors()[$index]\"\n >\n {{ (d.status?? 'Unknown') | upCapitalize }}\n </div>\n </div>\n\n @if (d.createdAt) {\n <div class=\"shrink-0 text-sm text-muted-foreground\">\n {{ d.createdAt | date: 'dd LLL yyyy HH:mm' }}\n </div>\n }\n </div>\n\n <div class=\"px-2 py-4 space-y-6\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Entity\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.entity\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n User\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.createdByUser?.name?? '-'\"\n />\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Remark\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.remark\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Data\n </label>\n\n <textarea \n upInput \n readonly\n class=\"min-h-50 resize-none\"\n [value]=\"d.data | json\"\n >\n </textarea>\n </div>\n </div>\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MAQa,eAAe,CAAA;AAE1B,IAAA,WAAA,CACqB,GAAc,EAAA;QAAd,IAAA,CAAA,GAAG,GAAH,GAAG;IACpB;AAEG,IAAA,KAAK,CACV,KAAuB,EACvB,SAAA,GAAoB,EAAE,EACtB,aAA6B,EAAA;AAG7B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,YAAA,aAAa,EAAE,eAAe;YAC9B,aAAa;AACb,YAAA,SAAS,EAAE;gBACT;AACD,aAAA;AACD,YAAA,KAAK,EAAE;;;;;;;;;;;;;;;;;;gBAkBI,SAAU;;cAEZ,KAAK,CAAC,IAAI,KAAK,CAAC,GAAE,aAAa,GAAG,EAAG;;;AAG7C,MAAA;AACF,SAAA,CAAC;IACJ;AAEO,IAAA,OAAO,CAAC,SAAwD,EAAA;AAErE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YACrB,SAAS;YACT,aAAa,EAAE,SAAS,CAAC,SAAS,GAAE,iBAAiB,GAAG,iBAAiB;AACzE,YAAA,QAAQ,EAAE;mBACI,SAAS,CAAC,SAAS,GAAE,iBAAiB,GAAG,iBAAiB,CAAA;;;AAGvE,MAAA;AACF,SAAA,CAAC;IACJ;8GAxDW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCmBY,uBAAuB,CAAA;AA2BlC,IAAA,WAAA,GAAA;AAzBgB,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAc;AAC3C,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,IAAI,qDAAC;AAEhC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAA4B,EAAE,wDAAC;AACpD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAA4B,EAAE,4DAAC;AAErD,QAAA,IAAA,CAAA,gBAAgB,GAAG;AACpC,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,EAAE,eAAe;AACnB,gBAAA,MAAM,EAAE;AACT,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,EAAE,EAAE,cAAc;AAClB,gBAAA,MAAM,EAAE;AACT,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,EAAE,EAAE,gBAAgB;AACpB,gBAAA,MAAM,EAAE;AACT,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,EAAE,YAAY;AAChB,gBAAA,MAAM,EAAE;AACT,aAAA;SACF;QAGC,MAAM,CACJ,MAAK;YACH,MAAM,EAAE,GAAQ,EAAE;YAClB,MAAM,MAAM,GAAQ,EAAE;YAEtB,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CACzB,CAAC,IAAI,EAAE,KAAK,KAAI;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAE1C,gBAAA,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE;AACrB,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM;AAC/B,YAAA,CAAC,CACF;AAED,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/B,QAAA,CAAC,CACF;IACH;AAEU,IAAA,SAAS,CAAC,MAAsB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAA4C,CAAC,IAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO;IAC5G;8GAlDW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BpC,yrKAwJA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnII,gBAAgB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EALnB,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACR,QAAQ,wCACR,gBAAgB,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjBnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,kBAAkB,EAAA,eAAA,EAEX,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE;qBACR,EAAA,OAAA,EACQ;wBACP,QAAQ;wBACR,QAAQ;wBACR,gBAAgB;wBAChB,gBAAgB;wBAChB,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,yrKAAA,EAAA;;;AExBH;;AAEG;;;;"}
1
+ {"version":3,"file":"unipin-angular-applet-approval.mjs","sources":["../../../projects/unipin-angular/approval/services/approval.service.ts","../../../projects/unipin-angular/approval/component/form/approval-form.component.ts","../../../projects/unipin-angular/approval/component/form/approval-form.component.html","../../../projects/unipin-angular/approval/unipin-angular-applet-approval.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CacheStrategy, GqlParser, MutationResult, QueryResult } from '@unipin/angular-gql';\nimport { ApprovalCriteria, PageableResponse, MutationApprovalMsApproveOrDeclineRequestArgs } from '@unipin/graphql-schema';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApprovalService {\n\n constructor(\n protected readonly gql: GqlParser\n ) { }\n\n public query(\n input: ApprovalCriteria, \n extraAttr: string = '', \n cacheStrategy?: CacheStrategy\n ): Observable<QueryResult<{ approvalMsApprovals: PageableResponse }>>{\n \n return this.gql.query({\n operationName: 'QueryApproval',\n cacheStrategy,\n variables: { \n input \n },\n query: `\n query QueryApproval($input: ApprovalCriteria) {\n approvalMsApprovals(input: $input) {\n data {\n guid \n createdAt \n entity \n remark \n sourcePlatform \n status \n type \n createdByUser {\n guid\n name\n }\n approvalGroup { \n guid \n }\n ${ extraAttr }\n }\n ${ input.page === 0? 'totalRecord' : '' }\n }\n }\n `\n });\n }\n\n public request(variables: MutationApprovalMsApproveOrDeclineRequestArgs): Observable<MutationResult<{ approvalMsApproveOrDeclineRequest: string }>>{\n \n return this.gql.mutate({\n variables,\n operationName: variables.isApprove? 'ApproveApproval' : 'DeclineApproval',\n mutation: `\n mutation ${ variables.isApprove? 'ApproveApproval' : 'DeclineApproval'} ($approvalGroupGuid: String, $guids: [String], $isApprove: Boolean, $reason: String) {\n approvalMsApproveOrDeclineRequest(approvalGroupGuid: $approvalGroupGuid, guids: $guids, isApprove: $isApprove, reason: $reason)\n }\n `\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, effect, input, model, signal } from '@angular/core';\nimport { DatePipe, JsonPipe } from '@angular/common';\nimport { Approval } from '@unipin/graphql-schema';\nimport { UpInputDirective } from '@unipin/angular-applet/forms';\nimport { UpBadgeDirective } from '@unipin/angular-applet/badge';\nimport { UpCapitalizaPipe } from '@unipin/angular-applet/common';\nimport { UpSkeletonDirective } from '@unipin/angular-applet/skeleton';\n\n\n@Component({\n selector: 'up-approval-form',\n templateUrl: './approval-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block space-y-4'\n },\n imports: [\n DatePipe,\n JsonPipe,\n UpCapitalizaPipe,\n UpInputDirective,\n UpBadgeDirective,\n UpSkeletonDirective\n ]\n})\nexport class UpApprovalFormComponent {\n \n public readonly approvalData = input.required<Approval[]>();\n public readonly isLoading = model<boolean>(true);\n\n public readonly borderColors = signal<{ [key: number]: string }>({});\n public readonly backgroundColors = signal<{ [key: number]: string }>({});\n\n protected readonly STATUS_COLOR_MAP = {\n PENDING: { \n bg: 'bg-yellow-500', \n border: 'border-yellow-500' \n },\n APPROVED: { \n bg: 'bg-green-700', \n border: 'border-green-700' \n },\n DECLINED: { \n bg: 'bg-destructive', \n border: 'border-destructive' \n },\n DEFAULT: { \n bg: 'bg-primary', \n border: 'border-primary' \n },\n };\n\n constructor() {\n effect(\n () => {\n const bg: any = {};\n const border: any = {};\n \n this.approvalData().forEach(\n (item, index) => {\n const colors = this.getColors(item.status);\n \n bg[index] = colors.bg;\n border[index] = colors.border;\n }\n );\n \n this.backgroundColors.set(bg);\n this.borderColors.set(border);\n }\n );\n }\n\n protected getColors(status?: string | null): { bg: string, border: string}{\n return this.STATUS_COLOR_MAP[status as keyof typeof this.STATUS_COLOR_MAP]?? this.STATUS_COLOR_MAP.DEFAULT;\n }\n}\n","@if (isLoading()) {\n @for (i of [1,2,3,4,5]; track $index) {\n <div class=\"border border-border rounded-md px-2 select-none\">\n <div class=\"px-2 py-4 border-b border-border flex justify-between items-center gap-4\">\n <div class=\"grow flex items-center gap-2\">\n <div \n upSkeleton\n class=\"h-6 w-4/5 max-w-50\"\n ></div>\n </div>\n\n <div class=\"shrink-0 text-sm\">\n <div \n upSkeleton\n class=\"h-6 w-screen max-w-30\"\n ></div>\n </div>\n </div>\n\n <div class=\"px-2 py-4 space-y-4\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Entity\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n User\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Remark\n </label>\n\n <div \n upSkeleton\n class=\"h-9 w-full\"\n ></div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Data\n </label>\n\n <div \n upSkeleton\n class=\"h-20 w-full\"\n ></div>\n </div>\n </div>\n </div>\n }\n}\n@else {\n @for (d of approvalData(); track $index) {\n <div \n class=\"border rounded-md px-2 select-none\"\n [class]=\"borderColors()[$index]\"\n >\n <div \n class=\"px-2 py-4 border-b flex justify-between items-center gap-4\"\n [class]=\"borderColors()[$index]\"\n >\n <div class=\"grow flex items-center gap-2\">\n <div \n upBadge \n class=\"text-white shrink-0\" \n [class]=\"backgroundColors()[$index]\"\n >\n {{ (d.status?? 'Unknown') | upCapitalize }}\n </div>\n </div>\n\n @if (d.createdAt) {\n <div class=\"shrink-0 text-sm text-muted-foreground\">\n {{ d.createdAt | date: 'dd LLL yyyy HH:mm' }}\n </div>\n }\n </div>\n\n <div class=\"px-2 py-4 space-y-6\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Entity\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.entity\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n User\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.createdByUser?.name?? '-'\"\n />\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Remark\n </label>\n\n <input \n upInput \n readonly \n [value]=\"d.remark\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-sm font-medium leading-none\">\n Data\n </label>\n\n <textarea \n upInput \n readonly\n class=\"min-h-50 resize-none\"\n [value]=\"d.data | json\"\n >\n </textarea>\n </div>\n </div>\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -7,11 +7,11 @@ import { UpDialogWrapperComponent, UpDialogContentDirective, UpDialogContentRefD
7
7
 
8
8
  class UpAuditModalComponent {
9
9
  constructor() {
10
- this.audit = input.required(...(ngDevMode ? [{ debugName: "audit" }] : []));
10
+ this.audit = input.required(...(ngDevMode ? [{ debugName: "audit" }] : /* istanbul ignore next */ []));
11
11
  this.dismissed = output();
12
12
  }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UpAuditModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: UpAuditModalComponent, isStandalone: true, selector: "up-audit-modal", inputs: { audit: { classPropertyName: "audit", publicName: "audit", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { dismissed: "dismissed" }, ngImport: i0, template: `
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpAuditModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: UpAuditModalComponent, isStandalone: true, selector: "up-audit-modal", inputs: { audit: { classPropertyName: "audit", publicName: "audit", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { dismissed: "dismissed" }, ngImport: i0, template: `
15
15
  <up-dialog-wrapper
16
16
  [isOpen]="audit() !== null"
17
17
  (dismissed)="dismissed.emit()"
@@ -133,12 +133,11 @@ class UpAuditModalComponent {
133
133
  </up-content-container>
134
134
  </div>
135
135
  </up-dialog-wrapper>
136
- `, isInline: true, dependencies: [{ kind: "directive", type: UpInputDirective, selector: "[upInput]", inputs: ["class"], exportAs: ["upInput"] }, { kind: "component", type: UpFormFieldComponent, selector: "up-form-field", inputs: ["name", "hint", "label", "class"] }, { kind: "component", type: UpDialogWrapperComponent, selector: "up-dialog-wrapper", inputs: ["isOpen"], outputs: ["dismissed"], exportAs: ["upDialogWrapper"] }, { kind: "directive", type: UpDialogContentDirective, selector: "[upDialogContent]", inputs: ["class"], exportAs: ["upDialogContent"] }, { kind: "directive", type: UpDialogContentRefDirective, selector: "[upDialogContentRef]", inputs: ["context"], exportAs: ["upDialogContentRef"] }, { kind: "component", type: UpContentContainerComponent, selector: "up-content-container", inputs: ["header", "disabled", "hideCloseButton"], outputs: ["closed"] }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
136
+ `, isInline: true, dependencies: [{ kind: "directive", type: UpInputDirective, selector: "[upInput]", inputs: ["class"], exportAs: ["upInput"] }, { kind: "component", type: UpFormFieldComponent, selector: "up-form-field", inputs: ["name", "hint", "label", "class", "hideAsterisk"] }, { kind: "component", type: UpDialogWrapperComponent, selector: "up-dialog-wrapper", inputs: ["isOpen"], outputs: ["dismissed"], exportAs: ["upDialogWrapper"] }, { kind: "directive", type: UpDialogContentDirective, selector: "[upDialogContent]", inputs: ["class"], exportAs: ["upDialogContent"] }, { kind: "directive", type: UpDialogContentRefDirective, selector: "[upDialogContentRef]", inputs: ["context"], exportAs: ["upDialogContentRef"] }, { kind: "component", type: UpContentContainerComponent, selector: "up-content-container", inputs: ["header", "disabled", "hideCloseButton"], outputs: ["closed"] }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
137
137
  }
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UpAuditModalComponent, decorators: [{
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpAuditModalComponent, decorators: [{
139
139
  type: Component,
140
140
  args: [{
141
- standalone: true,
142
141
  selector: 'up-audit-modal',
143
142
  changeDetection: ChangeDetectionStrategy.OnPush,
144
143
  imports: [
@@ -277,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
277
276
  }], propDecorators: { audit: [{ type: i0.Input, args: [{ isSignal: true, alias: "audit", required: true }] }], dismissed: [{ type: i0.Output, args: ["dismissed"] }] } });
278
277
 
279
278
  export { UpAuditModalComponent };
280
- //# sourceMappingURL=unipin-angular-applet-audit-audit-modal.component-3a2P0bZr.mjs.map
279
+ //# sourceMappingURL=unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs","sources":["../../../projects/unipin-angular/audit/components/modal/audit-modal.component.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { AuditTrail } from '@unipin/graphql-schema';\nimport { UpContentContainerComponent } from '@unipin/angular-applet/containers';\nimport { UpFormFieldComponent, UpInputDirective } from '@unipin/angular-applet/forms';\nimport { UpDialogWrapperComponent, UpDialogContentDirective, UpDialogContentRefDirective } from '@unipin/angular-applet/dialog';\n\n\ntype AuditTrailData = AuditTrail & {\n icon: string;\n changedData?: Array<{ field: string; oldValue: any; newValue: any }>;\n}\n\n\n@Component({\n selector: 'up-audit-modal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DatePipe,\n UpInputDirective,\n UpFormFieldComponent,\n UpDialogWrapperComponent,\n UpDialogContentDirective,\n UpDialogContentRefDirective,\n UpContentContainerComponent\n ],\n template: `\n <up-dialog-wrapper\n [isOpen]=\"audit() !== null\"\n (dismissed)=\"dismissed.emit()\"\n >\n <div\n upDialogContent\n class=\"max-w-200\"\n *upDialogContentRef\n >\n <up-content-container\n [header]=\"audit()?.user?.name + ' ' + audit()?.action + ' • ' + (audit()?.createdAt | date: 'dd LLL yyyy HH:mm')\"\n (closed)=\"dismissed.emit()\"\n >\n <div class=\"p-4 space-y-6\">\n <up-form-field label=\"Username\">\n <input \n upInput \n readonly\n type=\"text\"\n tabindex=\"-1\"\n [value]=\"audit()?.user?.name\" \n />\n </up-form-field>\n\n <up-form-field label=\"Description\">\n <textarea \n upInput\n readonly\n tabindex=\"-1\"\n class=\"h-25 w-full\"\n [value]=\"audit()?.description\"\n ></textarea>\n </up-form-field>\n\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <up-form-field label=\"Source IP\">\n <input \n upInput \n readonly\n type=\"text\"\n tabindex=\"-1\"\n [value]=\"audit()?.sourceIp\" \n />\n </up-form-field>\n\n <up-form-field label=\"Source Platform\">\n <input \n upInput \n readonly\n type=\"text\"\n tabindex=\"-1\"\n [value]=\"audit()?.user?.sourcePlatform\" \n />\n </up-form-field>\n\n <up-form-field label=\"MS Source\">\n <input \n upInput \n readonly\n type=\"text\"\n tabindex=\"-1\"\n [value]=\"audit()?.msSource\" \n />\n </up-form-field>\n\n <up-form-field label=\"Function\">\n <input \n upInput \n readonly\n type=\"text\"\n tabindex=\"-1\"\n [value]=\"audit()?.function\" \n />\n </up-form-field>\n </div>\n\n @if (\n audit() &&\n audit()!.changedData &&\n audit()!.changedData!.length > 0\n ) {\n <div class=\"space-y-2\">\n <label class=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 select-none\">\n Changed Data\n </label>\n \n <table class=\"w-full my-2 table-fixed border-collapse rounded-md select-none\">\n <thead class=\"border-inherit border-solid border-0\">\n <tr>\n <th class=\"w-[30%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tl-2\">Field</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base\">Old Value</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tr-2\">New Value</th>\n </tr>\n </thead>\n\n <tbody class=\"border-inherit border-solid border-0\">\n @for (data of audit()!.changedData; track data.field; let even = $even) {\n <tr \n [class]=\"even? 'bg-white': 'bg-[#f9f9f9]'\"\n >\n <td class=\"p-2 text-left border border-border capitalize\">\n {{ data.field }}\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n {{ data.oldValue }}\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n {{ data.newValue }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </up-content-container>\n </div>\n </up-dialog-wrapper> \n `\n})\nexport class UpAuditModalComponent {\n\n public readonly audit = input.required<AuditTrailData | null>();\n public readonly dismissed = output<void>();\n}\n"],"names":[],"mappings":"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"}
@@ -54,10 +54,10 @@ class AuditService {
54
54
  });
55
55
  }));
56
56
  }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuditService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
58
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuditService, providedIn: 'root' }); }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuditService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
58
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuditService, providedIn: 'root' }); }
59
59
  }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuditService, decorators: [{
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuditService, decorators: [{
61
61
  type: Injectable,
62
62
  args: [{
63
63
  providedIn: 'root'
@@ -67,12 +67,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
67
67
  class UpAuditListComponent {
68
68
  constructor(service) {
69
69
  this.service = service;
70
- this.tagValues = input(...(ngDevMode ? [undefined, { debugName: "tagValues" }] : []));
71
- this.relatedEntities = input(...(ngDevMode ? [undefined, { debugName: "relatedEntities" }] : []));
72
- this.hasMore = signal(true, ...(ngDevMode ? [{ debugName: "hasMore" }] : []));
73
- this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
74
- this.auditTrails = signal([], ...(ngDevMode ? [{ debugName: "auditTrails" }] : []));
75
- this.selectedTrail = signal(null, ...(ngDevMode ? [{ debugName: "selectedTrail" }] : []));
70
+ this.tagValues = input(...(ngDevMode ? [undefined, { debugName: "tagValues" }] : /* istanbul ignore next */ []));
71
+ this.relatedEntities = input(...(ngDevMode ? [undefined, { debugName: "relatedEntities" }] : /* istanbul ignore next */ []));
72
+ this.hasMore = signal(true, ...(ngDevMode ? [{ debugName: "hasMore" }] : /* istanbul ignore next */ []));
73
+ this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
74
+ this.auditTrails = signal([], ...(ngDevMode ? [{ debugName: "auditTrails" }] : /* istanbul ignore next */ []));
75
+ this.selectedTrail = signal(null, ...(ngDevMode ? [{ debugName: "selectedTrail" }] : /* istanbul ignore next */ []));
76
76
  this.criteria = {
77
77
  page: 0,
78
78
  pageSize: 20,
@@ -182,8 +182,8 @@ class UpAuditListComponent {
182
182
  return JSON.stringify(value);
183
183
  return String(value);
184
184
  }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UpAuditListComponent, deps: [{ token: AuditService }], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: UpAuditListComponent, isStandalone: true, selector: "up-audit-list", inputs: { tagValues: { classPropertyName: "tagValues", publicName: "tagValues", isSignal: true, isRequired: false, transformFunction: null }, relatedEntities: { classPropertyName: "relatedEntities", publicName: "relatedEntities", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpAuditListComponent, deps: [{ token: AuditService }], target: i0.ɵɵFactoryTarget.Component }); }
186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: UpAuditListComponent, isStandalone: true, selector: "up-audit-list", inputs: { tagValues: { classPropertyName: "tagValues", publicName: "tagValues", isSignal: true, isRequired: false, transformFunction: null }, relatedEntities: { classPropertyName: "relatedEntities", publicName: "relatedEntities", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
187
187
  provideIcons({
188
188
  matEditRound,
189
189
  matErrorRound,
@@ -191,11 +191,11 @@ class UpAuditListComponent {
191
191
  matHourglassEmptyRound,
192
192
  matKeyboardArrowDownRound,
193
193
  })
194
- ], ngImport: i0, template: "<div class=\"w-full pb-5 pl-5 border-l-2 border-border\">\n @for (audit of auditTrails(); track audit.guid) {\n <div class=\"relative flex items-start first:pt-2.5 not-first:pt-4 not-last:pb-4 not-last:border-b not-last:border-border\">\n <div class=\"absolute border border-border rounded-full p-2 flex items-center bg-[#f5f7f6] -left-9.25\">\n <ng-icon\n size=\"14\"\n [name]=\"audit.icon\"\n />\n </div>\n\n <div class=\"px-2 pt-1.25 w-full\">\n <div class=\"flex items-center justify-between gap-3 select-none\">\n <div class=\"text-sm grow\">\n <b>{{ audit.user?.name }}</b> <span class=\"lowercase\">&nbsp;{{ audit.action }} <i class=\"text-muted-foreground\">\u2022</i></span>\n <span class=\"text-muted-foreground text-xs\">&nbsp;{{ audit.createdAt | date: 'dd LLL yyyy HH:mm' }}</span>\n </div>\n\n <button\n type=\"button\"\n class=\"text-sm text-primary font-medium hover:underline shrink-0 cursor-pointer\"\n (click)=\"selectedTrail.set(audit)\"\n >\n Detail\n </button>\n </div>\n\n @if (\n audit.changedData && \n audit.changedData.length > 0\n ) {\n <table class=\"w-full my-2 table-fixed border-collapse rounded-md select-none\">\n <thead class=\"border-inherit border-solid border-0\">\n <tr>\n <th class=\"w-[30%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tl-2\">Field</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base\">Old Value</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tr-2\">New Value</th>\n </tr>\n </thead>\n\n <tbody class=\"border-inherit border-solid border-0\">\n @for (data of audit.changedData; track data.field; let even = $even) {\n <tr \n [class]=\"even? 'bg-white': 'bg-[#f9f9f9]'\"\n >\n <td class=\"p-2 text-left border border-border capitalize\">\n {{ data.field }}\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n <div class=\"line-clamp-5 wrap-break-word\">{{ data.oldValue }}</div>\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n <div class=\"line-clamp-5 wrap-break-word\">{{ data.newValue }}</div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n }\n</div>\n\n\n@if (hasMore()) {\n <div \n upInfiniteScroll\n class=\"flex justify-center py-4\"\n (scrolled)=\"loadData()\"\n >\n <up-spinner />\n </div>\n}\n\n@defer (when selectedTrail()) {\n <up-audit-modal\n [audit]=\"selectedTrail()\"\n (dismissed)=\"selectedTrail.set(null)\"\n />\n}\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: UpSpinnerComponent, selector: "up-spinner", inputs: ["stokeWidth", "inlineClass"] }, { kind: "directive", type: UpInfiniteScrollDirective, selector: "[upInfiniteScroll]", inputs: ["threshold", "rootMargin"], outputs: ["scrolled"], exportAs: ["upInfiniteScroll"] }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [import('./unipin-angular-applet-audit-audit-modal.component-3a2P0bZr.mjs').then(m => m.UpAuditModalComponent)]] }); }
194
+ ], ngImport: i0, template: "<div class=\"w-full pb-5 pl-5 border-l-2 border-border\">\n @for (audit of auditTrails(); track audit.guid) {\n <div class=\"relative flex items-start first:pt-2.5 not-first:pt-4 not-last:pb-4 not-last:border-b not-last:border-border\">\n <div class=\"absolute border border-border rounded-full p-2 flex items-center bg-[#f5f7f6] -left-9.25\">\n <ng-icon\n size=\"14\"\n [name]=\"audit.icon\"\n />\n </div>\n\n <div class=\"px-2 pt-1.25 w-full\">\n <div class=\"flex items-center justify-between gap-3 select-none\">\n <div class=\"text-sm grow\">\n <b>{{ audit.user?.name }}</b> <span class=\"lowercase\">&nbsp;{{ audit.action }} <i class=\"text-muted-foreground\">\u2022</i></span>\n <span class=\"text-muted-foreground text-xs\">&nbsp;{{ audit.createdAt | date: 'dd LLL yyyy HH:mm' }}</span>\n </div>\n\n <button\n type=\"button\"\n class=\"text-sm text-primary font-medium hover:underline shrink-0 cursor-pointer\"\n (click)=\"selectedTrail.set(audit)\"\n >\n Detail\n </button>\n </div>\n\n @if (\n audit.changedData && \n audit.changedData.length > 0\n ) {\n <table class=\"w-full my-2 table-fixed border-collapse rounded-md select-none\">\n <thead class=\"border-inherit border-solid border-0\">\n <tr>\n <th class=\"w-[30%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tl-2\">Field</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base\">Old Value</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tr-2\">New Value</th>\n </tr>\n </thead>\n\n <tbody class=\"border-inherit border-solid border-0\">\n @for (data of audit.changedData; track data.field; let even = $even) {\n <tr \n [class]=\"even? 'bg-white': 'bg-[#f9f9f9]'\"\n >\n <td class=\"p-2 text-left border border-border capitalize\">\n {{ data.field }}\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n <div class=\"line-clamp-5 wrap-break-word\">{{ data.oldValue }}</div>\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n <div class=\"line-clamp-5 wrap-break-word\">{{ data.newValue }}</div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n }\n</div>\n\n\n@if (hasMore()) {\n <div \n upInfiniteScroll\n class=\"flex justify-center py-4\"\n (scrolled)=\"loadData()\"\n >\n <up-spinner />\n </div>\n}\n\n@defer (when selectedTrail()) {\n <up-audit-modal\n [audit]=\"selectedTrail()\"\n (dismissed)=\"selectedTrail.set(null)\"\n />\n}\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: UpSpinnerComponent, selector: "up-spinner", inputs: ["stokeWidth", "inlineClass"] }, { kind: "directive", type: UpInfiniteScrollDirective, selector: "[upInfiniteScroll]", inputs: ["threshold", "rootMargin"], outputs: ["scrolled"], exportAs: ["upInfiniteScroll"] }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [import('./unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs').then(m => m.UpAuditModalComponent)]] }); }
195
195
  }
196
- i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.1.5", ngImport: i0, type: UpAuditListComponent, resolveDeferredDeps: () => [import('./unipin-angular-applet-audit-audit-modal.component-3a2P0bZr.mjs').then(m => m.UpAuditModalComponent)], resolveMetadata: UpAuditModalComponent => ({ decorators: [{
196
+ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.2.7", ngImport: i0, type: UpAuditListComponent, resolveDeferredDeps: () => [import('./unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs').then(m => m.UpAuditModalComponent)], resolveMetadata: UpAuditModalComponent => ({ decorators: [{
197
197
  type: Component,
198
- args: [{ standalone: true, selector: 'up-audit-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
198
+ args: [{ selector: 'up-audit-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
199
199
  NgIcon,
200
200
  DatePipe,
201
201
  UpSpinnerComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"unipin-angular-applet-audit.mjs","sources":["../../../projects/unipin-angular/audit/services/audit.service.ts","../../../projects/unipin-angular/audit/components/list/audit-list.component.ts","../../../projects/unipin-angular/audit/components/list/audit-list.component.html","../../../projects/unipin-angular/audit/unipin-angular-applet-audit.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { GqlParser, QueryResult } from '@unipin/angular-gql';\nimport { AuditTrail, AuditTrailCriteria } from '@unipin/graphql-schema';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditService {\n\n constructor(\n protected readonly gql: GqlParser\n ) { }\n\n public query(input: AuditTrailCriteria): Observable<QueryResult<{ auditMsAuditTrail: AuditTrail[] }>>{\n return this.gql.query<{ auditMsAuditTrail: AuditTrail[] }>({\n operationName: 'QueryAuditTrail',\n variables: {\n input\n },\n query: `\n query QueryAuditTrail($input: AuditTrailCriteria) {\n auditMsAuditTrail(input: $input) {\n action\n createdAt\n description\n function\n guid\n msSource\n sourceIp\n data\n user {\n name\n sourcePlatform\n status\n appLoginPrincipal {\n principalId\n principalType\n }\n }\n }\n }\n `,\n }).pipe(\n map(\n (res) => {\n return {\n data: res.data?? null,\n errors: res.errors?? []\n };\n }\n ),\n catchError(\n (err) => {\n return of(\n {\n data: null as any,\n errors: Array.isArray(err)? err : [err]\n }\n );\n }\n )\n );\n }\n}\n","import { Component, ChangeDetectionStrategy, signal, OnDestroy, input, effect, untracked } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matAddCircleRound, matKeyboardArrowDownRound, matEditRound, matHourglassEmptyRound, matErrorRound } from '@ng-icons/material-icons/round';\nimport { AuditTrail, AuditTrailCriteria } from '@unipin/graphql-schema';\nimport { UpSpinnerComponent } from '@unipin/angular-applet/spinner';\nimport { UpInfiniteScrollDirective } from '@unipin/angular-applet/infinite-scroll';\nimport { AuditService } from './../../services/audit.service';\nimport { UpAuditModalComponent } from '../modal/audit-modal.component';\n\n\ntype AuditTrailData = AuditTrail & {\n icon: string;\n changedData?: Array<{ field: string; oldValue: any; newValue: any }>;\n}\n\n\n@Component({\n standalone: true,\n selector: 'up-audit-list',\n templateUrl: './audit-list.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgIcon,\n DatePipe,\n UpSpinnerComponent,\n UpInfiniteScrollDirective,\n UpAuditModalComponent\n ],\n providers: [\n provideIcons(\n { \n matEditRound,\n matErrorRound,\n matAddCircleRound,\n matHourglassEmptyRound,\n matKeyboardArrowDownRound,\n }\n ) \n ]\n})\nexport class UpAuditListComponent implements OnDestroy {\n\n public readonly tagValues = input<string[] | undefined>();\n public readonly relatedEntities = input<string[] | undefined>();\n\n public readonly hasMore = signal<boolean>(true);\n public readonly isLoading = signal<boolean>(false);\n public readonly auditTrails = signal<AuditTrailData[]>([]);\n public readonly selectedTrail = signal<AuditTrailData | null>(null);\n\n protected sub?: Subscription;\n protected readonly criteria: AuditTrailCriteria = { \n page: 0, \n pageSize: 20,\n sortBy: 'createdAt', \n sortDirection: 'desc'\n };\n\n constructor(\n protected readonly service: AuditService\n ) {\n effect(\n () => {\n this.criteria.page = 0;\n this.criteria.tagValues = undefined;\n this.criteria.relatedEntities = undefined;\n \n if (this.tagValues()) {\n this.criteria.tagValues = this.tagValues();\n }\n \n if (this.relatedEntities()) {\n this.criteria.relatedEntities = this.relatedEntities();\n }\n\n untracked(\n () => {\n this.hasMore.set(true);\n this.auditTrails.set([]);\n this.isLoading.set(false);\n\n this.sub?.unsubscribe();\n this.loadData();\n }\n );\n }\n );\n }\n\n public ngOnDestroy(): void{\n this.sub?.unsubscribe();\n }\n\n public loadData(): void{\n if (\n this.isLoading() || \n !this.hasMore()\n ) {\n return;\n }\n this.isLoading.set(true);\n\n this.sub = this.service.query(this.criteria).subscribe(\n {\n error: () => {\n this.isLoading.set(false);\n },\n next: ({ data: { auditMsAuditTrail: data }}) => {\n const formattedData = data.reduce(\n (acc, curr) => {\n if (!curr) {\n return acc;\n }\n\n acc.push(\n {\n ...curr,\n icon: this.getAuditIcon(curr),\n changedData: this.getChangedData(curr.data),\n }\n );\n return acc;\n },\n [] as AuditTrailData[]\n );\n this.hasMore.set(formattedData.length >= this.criteria.pageSize!);\n\n this.auditTrails.update(\n (curr) => {\n return [\n ...curr,\n ...formattedData\n ]\n }\n );\n \n this.criteria.page!++;\n this.isLoading.set(false);\n }\n }\n );\n }\n\n protected getAuditIcon(audit: AuditTrail): string{\n const actionLower = audit.action?.toLowerCase() || '';\n const descLower = audit.description?.toLowerCase() || '';\n \n if (\n actionLower.includes('waiting') || \n descLower.includes('waiting')\n ) {\n return 'matHourglassEmptyRound';\n }\n \n if (\n actionLower.includes('creation') || \n descLower.includes('creation')\n ) {\n return 'matAddCircleRound';\n }\n \n if (\n actionLower.includes('update') || \n descLower.includes('update')\n ) {\n return 'matEditRound';\n }\n return 'matErrorRound';\n }\n\n protected getChangedData(data: any): Array<{ field: string; oldValue: any; newValue: any }>{\n if (\n !data || \n !data.oldData || \n !data.newData\n ) {\n return [];\n }\n\n try {\n const oldData = JSON.parse(data.oldData);\n const newData = JSON.parse(data.newData);\n\n return Object.keys(newData).filter(\n (key) => {\n return JSON.stringify(oldData[key]) !== JSON.stringify(newData[key]) && !key.match(/update|created/);\n }\n ).map(\n (key) => {\n return {\n field: key,\n oldValue: this.formatValue(oldData[key]),\n newValue: this.formatValue(newData[key])\n };\n }\n );\n } \n catch (error) {\n return [];\n }\n }\n\n protected formatValue(value: any): string{\n if (value === null || value === undefined) return '-';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n }\n}\n","<div class=\"w-full pb-5 pl-5 border-l-2 border-border\">\n @for (audit of auditTrails(); track audit.guid) {\n <div class=\"relative flex items-start first:pt-2.5 not-first:pt-4 not-last:pb-4 not-last:border-b not-last:border-border\">\n <div class=\"absolute border border-border rounded-full p-2 flex items-center bg-[#f5f7f6] -left-9.25\">\n <ng-icon\n size=\"14\"\n [name]=\"audit.icon\"\n />\n </div>\n\n <div class=\"px-2 pt-1.25 w-full\">\n <div class=\"flex items-center justify-between gap-3 select-none\">\n <div class=\"text-sm grow\">\n <b>{{ audit.user?.name }}</b> <span class=\"lowercase\">&nbsp;{{ audit.action }} <i class=\"text-muted-foreground\">•</i></span>\n <span class=\"text-muted-foreground text-xs\">&nbsp;{{ audit.createdAt | date: 'dd LLL yyyy HH:mm' }}</span>\n </div>\n\n <button\n type=\"button\"\n class=\"text-sm text-primary font-medium hover:underline shrink-0 cursor-pointer\"\n (click)=\"selectedTrail.set(audit)\"\n >\n Detail\n </button>\n </div>\n\n @if (\n audit.changedData && \n audit.changedData.length > 0\n ) {\n <table class=\"w-full my-2 table-fixed border-collapse rounded-md select-none\">\n <thead class=\"border-inherit border-solid border-0\">\n <tr>\n <th class=\"w-[30%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tl-2\">Field</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base\">Old Value</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tr-2\">New Value</th>\n </tr>\n </thead>\n\n <tbody class=\"border-inherit border-solid border-0\">\n @for (data of audit.changedData; track data.field; let even = $even) {\n <tr \n [class]=\"even? 'bg-white': 'bg-[#f9f9f9]'\"\n >\n <td class=\"p-2 text-left border border-border capitalize\">\n {{ data.field }}\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n <div class=\"line-clamp-5 wrap-break-word\">{{ data.oldValue }}</div>\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n <div class=\"line-clamp-5 wrap-break-word\">{{ data.newValue }}</div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n }\n</div>\n\n\n@if (hasMore()) {\n <div \n upInfiniteScroll\n class=\"flex justify-center py-4\"\n (scrolled)=\"loadData()\"\n >\n <up-spinner />\n </div>\n}\n\n@defer (when selectedTrail()) {\n <up-audit-modal\n [audit]=\"selectedTrail()\"\n (dismissed)=\"selectedTrail.set(null)\"\n />\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuditService"],"mappings":"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"}
1
+ {"version":3,"file":"unipin-angular-applet-audit.mjs","sources":["../../../projects/unipin-angular/audit/services/audit.service.ts","../../../projects/unipin-angular/audit/components/list/audit-list.component.ts","../../../projects/unipin-angular/audit/components/list/audit-list.component.html","../../../projects/unipin-angular/audit/unipin-angular-applet-audit.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { GqlParser, QueryResult } from '@unipin/angular-gql';\nimport { AuditTrail, AuditTrailCriteria } from '@unipin/graphql-schema';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditService {\n\n constructor(\n protected readonly gql: GqlParser\n ) { }\n\n public query(input: AuditTrailCriteria): Observable<QueryResult<{ auditMsAuditTrail: AuditTrail[] }>>{\n return this.gql.query<{ auditMsAuditTrail: AuditTrail[] }>({\n operationName: 'QueryAuditTrail',\n variables: {\n input\n },\n query: `\n query QueryAuditTrail($input: AuditTrailCriteria) {\n auditMsAuditTrail(input: $input) {\n action\n createdAt\n description\n function\n guid\n msSource\n sourceIp\n data\n user {\n name\n sourcePlatform\n status\n appLoginPrincipal {\n principalId\n principalType\n }\n }\n }\n }\n `,\n }).pipe(\n map(\n (res) => {\n return {\n data: res.data?? null,\n errors: res.errors?? []\n };\n }\n ),\n catchError(\n (err) => {\n return of(\n {\n data: null as any,\n errors: Array.isArray(err)? err : [err]\n }\n );\n }\n )\n );\n }\n}\n","import { Component, ChangeDetectionStrategy, signal, OnDestroy, input, effect, untracked } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matAddCircleRound, matKeyboardArrowDownRound, matEditRound, matHourglassEmptyRound, matErrorRound } from '@ng-icons/material-icons/round';\nimport { AuditTrail, AuditTrailCriteria } from '@unipin/graphql-schema';\nimport { UpSpinnerComponent } from '@unipin/angular-applet/spinner';\nimport { UpInfiniteScrollDirective } from '@unipin/angular-applet/infinite-scroll';\nimport { AuditService } from './../../services/audit.service';\nimport { UpAuditModalComponent } from '../modal/audit-modal.component';\n\n\ntype AuditTrailData = AuditTrail & {\n icon: string;\n changedData?: Array<{ field: string; oldValue: any; newValue: any }>;\n}\n\n\n@Component({\n selector: 'up-audit-list',\n templateUrl: './audit-list.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgIcon,\n DatePipe,\n UpSpinnerComponent,\n UpInfiniteScrollDirective,\n UpAuditModalComponent\n ],\n providers: [\n provideIcons(\n { \n matEditRound,\n matErrorRound,\n matAddCircleRound,\n matHourglassEmptyRound,\n matKeyboardArrowDownRound,\n }\n ) \n ]\n})\nexport class UpAuditListComponent implements OnDestroy {\n\n public readonly tagValues = input<string[] | undefined>();\n public readonly relatedEntities = input<string[] | undefined>();\n\n public readonly hasMore = signal<boolean>(true);\n public readonly isLoading = signal<boolean>(false);\n public readonly auditTrails = signal<AuditTrailData[]>([]);\n public readonly selectedTrail = signal<AuditTrailData | null>(null);\n\n protected sub?: Subscription;\n protected readonly criteria: AuditTrailCriteria = { \n page: 0, \n pageSize: 20,\n sortBy: 'createdAt', \n sortDirection: 'desc'\n };\n\n constructor(\n protected readonly service: AuditService\n ) {\n effect(\n () => {\n this.criteria.page = 0;\n this.criteria.tagValues = undefined;\n this.criteria.relatedEntities = undefined;\n \n if (this.tagValues()) {\n this.criteria.tagValues = this.tagValues();\n }\n \n if (this.relatedEntities()) {\n this.criteria.relatedEntities = this.relatedEntities();\n }\n\n untracked(\n () => {\n this.hasMore.set(true);\n this.auditTrails.set([]);\n this.isLoading.set(false);\n\n this.sub?.unsubscribe();\n this.loadData();\n }\n );\n }\n );\n }\n\n public ngOnDestroy(): void{\n this.sub?.unsubscribe();\n }\n\n public loadData(): void{\n if (\n this.isLoading() || \n !this.hasMore()\n ) {\n return;\n }\n this.isLoading.set(true);\n\n this.sub = this.service.query(this.criteria).subscribe(\n {\n error: () => {\n this.isLoading.set(false);\n },\n next: ({ data: { auditMsAuditTrail: data }}) => {\n const formattedData = data.reduce(\n (acc, curr) => {\n if (!curr) {\n return acc;\n }\n\n acc.push(\n {\n ...curr,\n icon: this.getAuditIcon(curr),\n changedData: this.getChangedData(curr.data),\n }\n );\n return acc;\n },\n [] as AuditTrailData[]\n );\n this.hasMore.set(formattedData.length >= this.criteria.pageSize!);\n\n this.auditTrails.update(\n (curr) => {\n return [\n ...curr,\n ...formattedData\n ]\n }\n );\n \n this.criteria.page!++;\n this.isLoading.set(false);\n }\n }\n );\n }\n\n protected getAuditIcon(audit: AuditTrail): string{\n const actionLower = audit.action?.toLowerCase() || '';\n const descLower = audit.description?.toLowerCase() || '';\n \n if (\n actionLower.includes('waiting') || \n descLower.includes('waiting')\n ) {\n return 'matHourglassEmptyRound';\n }\n \n if (\n actionLower.includes('creation') || \n descLower.includes('creation')\n ) {\n return 'matAddCircleRound';\n }\n \n if (\n actionLower.includes('update') || \n descLower.includes('update')\n ) {\n return 'matEditRound';\n }\n return 'matErrorRound';\n }\n\n protected getChangedData(data: any): Array<{ field: string; oldValue: any; newValue: any }>{\n if (\n !data || \n !data.oldData || \n !data.newData\n ) {\n return [];\n }\n\n try {\n const oldData = JSON.parse(data.oldData);\n const newData = JSON.parse(data.newData);\n\n return Object.keys(newData).filter(\n (key) => {\n return JSON.stringify(oldData[key]) !== JSON.stringify(newData[key]) && !key.match(/update|created/);\n }\n ).map(\n (key) => {\n return {\n field: key,\n oldValue: this.formatValue(oldData[key]),\n newValue: this.formatValue(newData[key])\n };\n }\n );\n } \n catch (error) {\n return [];\n }\n }\n\n protected formatValue(value: any): string{\n if (value === null || value === undefined) return '-';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n }\n}\n","<div class=\"w-full pb-5 pl-5 border-l-2 border-border\">\n @for (audit of auditTrails(); track audit.guid) {\n <div class=\"relative flex items-start first:pt-2.5 not-first:pt-4 not-last:pb-4 not-last:border-b not-last:border-border\">\n <div class=\"absolute border border-border rounded-full p-2 flex items-center bg-[#f5f7f6] -left-9.25\">\n <ng-icon\n size=\"14\"\n [name]=\"audit.icon\"\n />\n </div>\n\n <div class=\"px-2 pt-1.25 w-full\">\n <div class=\"flex items-center justify-between gap-3 select-none\">\n <div class=\"text-sm grow\">\n <b>{{ audit.user?.name }}</b> <span class=\"lowercase\">&nbsp;{{ audit.action }} <i class=\"text-muted-foreground\">•</i></span>\n <span class=\"text-muted-foreground text-xs\">&nbsp;{{ audit.createdAt | date: 'dd LLL yyyy HH:mm' }}</span>\n </div>\n\n <button\n type=\"button\"\n class=\"text-sm text-primary font-medium hover:underline shrink-0 cursor-pointer\"\n (click)=\"selectedTrail.set(audit)\"\n >\n Detail\n </button>\n </div>\n\n @if (\n audit.changedData && \n audit.changedData.length > 0\n ) {\n <table class=\"w-full my-2 table-fixed border-collapse rounded-md select-none\">\n <thead class=\"border-inherit border-solid border-0\">\n <tr>\n <th class=\"w-[30%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tl-2\">Field</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base\">Old Value</th>\n <th class=\"w-[35%] p-2 text-left border border-border bg-[#f2f2f2] text-base border-tr-2\">New Value</th>\n </tr>\n </thead>\n\n <tbody class=\"border-inherit border-solid border-0\">\n @for (data of audit.changedData; track data.field; let even = $even) {\n <tr \n [class]=\"even? 'bg-white': 'bg-[#f9f9f9]'\"\n >\n <td class=\"p-2 text-left border border-border capitalize\">\n {{ data.field }}\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n <div class=\"line-clamp-5 wrap-break-word\">{{ data.oldValue }}</div>\n </td>\n\n <td class=\"p-2 text-left border border-border capitalize\">\n <div class=\"line-clamp-5 wrap-break-word\">{{ data.newValue }}</div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n }\n</div>\n\n\n@if (hasMore()) {\n <div \n upInfiniteScroll\n class=\"flex justify-center py-4\"\n (scrolled)=\"loadData()\"\n >\n <up-spinner />\n </div>\n}\n\n@defer (when selectedTrail()) {\n <up-audit-modal\n [audit]=\"selectedTrail()\"\n (dismissed)=\"selectedTrail.set(null)\"\n />\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuditService"],"mappings":";;;;;;;;;;;MAUa,YAAY,CAAA;AAEvB,IAAA,WAAA,CACqB,GAAc,EAAA;QAAd,IAAA,CAAA,GAAG,GAAH,GAAG;IACpB;AAEG,IAAA,KAAK,CAAC,KAAyB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAsC;AACzD,YAAA,aAAa,EAAE,iBAAiB;AAChC,YAAA,SAAS,EAAE;gBACT;AACD,aAAA;AACD,YAAA,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;AAsBN,MAAA,CAAA;SACF,CAAC,CAAC,IAAI,CACL,GAAG,CACD,CAAC,GAAG,KAAI;YACN,OAAO;AACL,gBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAG,IAAI;AACrB,gBAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAG;aACtB;AACH,QAAA,CAAC,CACF,EACD,UAAU,CACR,CAAC,GAAG,KAAI;AACN,YAAA,OAAO,EAAE,CACP;AACE,gBAAA,IAAI,EAAE,IAAW;AACjB,gBAAA,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAE,GAAG,GAAG,CAAC,GAAG;AACvC,aAAA,CACF;QACH,CAAC,CACF,CACF;IACH;8GAvDW,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCgCY,oBAAoB,CAAA;AAkB/B,IAAA,WAAA,CACqB,OAAqB,EAAA;QAArB,IAAA,CAAA,OAAO,GAAP,OAAO;QAjBZ,IAAA,CAAA,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAwB;QACzC,IAAA,CAAA,eAAe,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAwB;AAE/C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAU,IAAI,8EAAC;AAC/B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAU,KAAK,gFAAC;AAClC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAmB,EAAE,kFAAC;AAC1C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,IAAI,oFAAC;AAGhD,QAAA,IAAA,CAAA,QAAQ,GAAuB;AAChD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,aAAa,EAAE;SAChB;QAKC,MAAM,CACJ,MAAK;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,SAAS;AAEzC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAC5C;AAEA,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;gBAC1B,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;YACxD;YAEA,SAAS,CACP,MAAK;AACH,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAEzB,gBAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;gBACvB,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,CAAC,CACF;AACH,QAAA,CAAC,CACF;IACH;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;IACzB;IAEO,QAAQ,GAAA;QACb,IACE,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,CAAC,IAAI,CAAC,OAAO,EAAE,EACf;YACA;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAExB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CACpD;YACE,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,CAAC;AACD,YAAA,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAC,KAAI;gBAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,IAAI,KAAI;oBACZ,IAAI,CAAC,IAAI,EAAE;AACT,wBAAA,OAAO,GAAG;oBACZ;oBAEA,GAAG,CAAC,IAAI,CACN;AACE,wBAAA,GAAG,IAAI;AACP,wBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;wBAC7B,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5C,qBAAA,CACF;AACD,oBAAA,OAAO,GAAG;gBACZ,CAAC,EACD,EAAsB,CACvB;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAS,CAAC;gBAEjE,IAAI,CAAC,WAAW,CAAC,MAAM,CACrB,CAAC,IAAI,KAAI;oBACP,OAAO;AACL,wBAAA,GAAG,IAAI;AACP,wBAAA,GAAG;qBACJ;AACH,gBAAA,CAAC,CACF;AAED,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAK,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B;AACD,SAAA,CACF;IACH;AAEU,IAAA,YAAY,CAAC,KAAiB,EAAA;QACtC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;AAExD,QAAA,IACE,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC/B,YAAA,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC7B;AACA,YAAA,OAAO,wBAAwB;QACjC;AAEA,QAAA,IACE,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;AAChC,YAAA,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC9B;AACA,YAAA,OAAO,mBAAmB;QAC5B;AAEA,QAAA,IACE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9B,YAAA,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC5B;AACA,YAAA,OAAO,cAAc;QACvB;AACA,QAAA,OAAO,eAAe;IACxB;AAEU,IAAA,cAAc,CAAC,IAAS,EAAA;AAChC,QAAA,IACE,CAAC,IAAI;YACL,CAAC,IAAI,CAAC,OAAO;AACb,YAAA,CAAC,IAAI,CAAC,OAAO,EACb;AACA,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAExC,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAChC,CAAC,GAAG,KAAI;gBACN,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACtG,YAAA,CAAC,CACF,CAAC,GAAG,CACH,CAAC,GAAG,KAAI;gBACN,OAAO;AACL,oBAAA,KAAK,EAAE,GAAG;oBACV,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACxC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;iBACxC;AACH,YAAA,CAAC,CACF;QACH;QACA,OAAO,KAAK,EAAE;AACZ,YAAA,OAAO,EAAE;QACX;IACF;AAEU,IAAA,WAAW,CAAC,KAAU,EAAA;AAC9B,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,GAAG;QACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC3D,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;8GAtKW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAZpB;AACT,YAAA,YAAY,CACV;gBACE,YAAY;gBACZ,aAAa;gBACb,iBAAiB;gBACjB,sBAAsB;gBACtB,yBAAyB;aAC1B;SAEJ,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvCH,usHAkFA,4CD3DI,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEN,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,yBAAyB,sJAFzB,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,sBAAA,EAAA,CAAA,MAAA,CAAA,OAAA,kEAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,qBAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;;gGAiBC,oBAAoB,EAAA,mBAAA,EAAA,MAAA,CAAA,OAAA,kEAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,qBAAA,CAAA,CAAA,EAAA,eAAA,EAAA,qBAAA,KAAA,EAAA,UAAA,EAAA,CAAA;sBAvBhC,SAAS;AACE,gBAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EAER,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;4BACP,MAAM;4BACN,QAAQ;4BACR,kBAAkB;4BAClB,yBAAyB;4BACzB;yBACD,EAAA,SAAA,EACU;AACT,4BAAA,YAAY,CACV;gCACE,YAAY;gCACZ,aAAa;gCACb,iBAAiB;gCACjB,sBAAsB;gCACtB,yBAAyB;6BAC1B;AAEJ,yBAAA,EAAA,QAAA,EAAA,usHAAA,EAAA;;;AEvCH;;AAEG;;;;"}
@@ -108,10 +108,10 @@ class ProfileService {
108
108
  `,
109
109
  });
110
110
  }
111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfileService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
112
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ProfileService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
112
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
113
113
  }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfileService, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ProfileService, decorators: [{
115
115
  type: Injectable,
116
116
  args: [{
117
117
  providedIn: 'root'
@@ -136,7 +136,7 @@ class AuthService {
136
136
  * @type {User} An interface contain user information.
137
137
  * @default {} as User
138
138
  */
139
- this.user = signal({}, ...(ngDevMode ? [{ debugName: "user" }] : []));
139
+ this.user = signal({}, ...(ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []));
140
140
  }
141
141
  static logout() {
142
142
  AuthService.authToken = '';
@@ -242,10 +242,10 @@ class AuthService {
242
242
  localStorage.setItem('refreshToken', AuthService.refreshToken);
243
243
  }));
244
244
  }
245
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuthService, deps: [{ token: i1.GqlParser }, { token: ProfileService }], target: i0.ɵɵFactoryTarget.Injectable }); }
246
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuthService, providedIn: 'root' }); }
245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuthService, deps: [{ token: i1.GqlParser }, { token: ProfileService }], target: i0.ɵɵFactoryTarget.Injectable }); }
246
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuthService, providedIn: 'root' }); }
247
247
  }
248
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuthService, decorators: [{
248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuthService, decorators: [{
249
249
  type: Injectable,
250
250
  args: [{
251
251
  providedIn: 'root'
@@ -378,10 +378,10 @@ class AuthResolver {
378
378
  buffer = chars.indexOf(buffer);
379
379
  return output;
380
380
  }
381
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuthResolver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
382
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuthResolver, providedIn: 'root' }); }
381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuthResolver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
382
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuthResolver, providedIn: 'root' }); }
383
383
  }
384
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AuthResolver, decorators: [{
384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AuthResolver, decorators: [{
385
385
  type: Injectable,
386
386
  args: [{
387
387
  providedIn: 'root'
@@ -401,7 +401,7 @@ const authGuard = () => {
401
401
  class PermissionService {
402
402
  constructor(gql) {
403
403
  this.gql = gql;
404
- this.permissions = signal(new Map(), ...(ngDevMode ? [{ debugName: "permissions" }] : []));
404
+ this.permissions = signal(new Map(), ...(ngDevMode ? [{ debugName: "permissions" }] : /* istanbul ignore next */ []));
405
405
  /**
406
406
  * A boolean value that tells the permission service is initiated (permissions list is retrieved from Backend) or not.
407
407
  * @default false
@@ -456,10 +456,10 @@ class PermissionService {
456
456
  `
457
457
  });
458
458
  }
459
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
460
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionService, providedIn: 'root' }); }
459
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: PermissionService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
460
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: PermissionService, providedIn: 'root' }); }
461
461
  }
462
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionService, decorators: [{
462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: PermissionService, decorators: [{
463
463
  type: Injectable,
464
464
  args: [{
465
465
  providedIn: 'root'
@@ -582,13 +582,12 @@ class PermissionDirective {
582
582
  }
583
583
  this.viewContainer.clear();
584
584
  }
585
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionDirective, deps: [{ token: PermissionService }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
586
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.5", type: PermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission" }, exportAs: ["hasPermission"], ngImport: i0 }); }
585
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: PermissionDirective, deps: [{ token: PermissionService }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
586
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: PermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission" }, exportAs: ["hasPermission"], ngImport: i0 }); }
587
587
  }
588
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionDirective, decorators: [{
588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: PermissionDirective, decorators: [{
589
589
  type: Directive,
590
590
  args: [{
591
- standalone: true,
592
591
  exportAs: 'hasPermission',
593
592
  selector: '[hasPermission]'
594
593
  }]
@@ -597,8 +596,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
597
596
  }] } });
598
597
 
599
598
  class UnauthorizedPage {
600
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UnauthorizedPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
601
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: UnauthorizedPage, isStandalone: true, selector: "up-unauthorized", host: { classAttribute: "flex flex-col items-center justify-center size-full gap-4 p-5 select-none" }, providers: [
599
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UnauthorizedPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
600
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: UnauthorizedPage, isStandalone: true, selector: "up-unauthorized", host: { classAttribute: "flex flex-col items-center justify-center size-full gap-4 p-5 select-none" }, providers: [
602
601
  provideIcons({
603
602
  matLockRound
604
603
  })
@@ -614,10 +613,9 @@ class UnauthorizedPage {
614
613
  <p class="text-center">Please log in or re-check your permissions.</p>
615
614
  `, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
616
615
  }
617
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UnauthorizedPage, decorators: [{
616
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UnauthorizedPage, decorators: [{
618
617
  type: Component,
619
618
  args: [{
620
- standalone: true,
621
619
  selector: 'up-unauthorized',
622
620
  changeDetection: ChangeDetectionStrategy.OnPush,
623
621
  host: {
@@ -684,8 +682,8 @@ class LoadingPage {
684
682
  ngOnDestroy() {
685
683
  this.sub?.unsubscribe();
686
684
  }
687
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LoadingPage, deps: [{ token: LOADING_CONFIG }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
688
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: LoadingPage, isStandalone: true, selector: "up-loading", host: { classAttribute: "flex flex-col items-center gap-6 p-5 justify-center size-full select-none" }, ngImport: i0, template: `
685
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: LoadingPage, deps: [{ token: LOADING_CONFIG }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
686
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: LoadingPage, isStandalone: true, selector: "up-loading", host: { classAttribute: "flex flex-col items-center gap-6 p-5 justify-center size-full select-none" }, ngImport: i0, template: `
689
687
  <up-spinner class="size-10" />
690
688
 
691
689
  <h3 class="text-center text-lg lg:text-2xl font-bold">
@@ -693,10 +691,9 @@ class LoadingPage {
693
691
  </h3>
694
692
  `, isInline: true, dependencies: [{ kind: "component", type: UpSpinnerComponent, selector: "up-spinner", inputs: ["stokeWidth", "inlineClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
695
693
  }
696
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LoadingPage, decorators: [{
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: LoadingPage, decorators: [{
697
695
  type: Component,
698
696
  args: [{
699
- standalone: true,
700
697
  selector: 'up-loading',
701
698
  changeDetection: ChangeDetectionStrategy.OnPush,
702
699
  host: {