@acorex/modules 19.4.13 → 19.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/assets/images/weather/cloudy-day-1.svg +175 -0
  2. package/assets/images/weather/cloudy-day-2.svg +176 -0
  3. package/assets/images/weather/cloudy-day-3.svg +175 -0
  4. package/assets/images/weather/cloudy-night-1.svg +198 -0
  5. package/assets/images/weather/cloudy-night-2.svg +198 -0
  6. package/assets/images/weather/cloudy-night-3.svg +198 -0
  7. package/assets/images/weather/cloudy.svg +500 -0
  8. package/assets/images/weather/day.svg +521 -0
  9. package/assets/images/weather/night.svg +503 -0
  10. package/assets/images/weather/rainy-1.svg +157 -0
  11. package/assets/images/weather/rainy-2.svg +133 -0
  12. package/assets/images/weather/rainy-3.svg +157 -0
  13. package/assets/images/weather/rainy-4.svg +66 -0
  14. package/assets/images/weather/rainy-5.svg +90 -0
  15. package/assets/images/weather/rainy-6.svg +91 -0
  16. package/assets/images/weather/rainy-7.svg +91 -0
  17. package/assets/images/weather/snowy-1.svg +230 -0
  18. package/assets/images/weather/snowy-2.svg +237 -0
  19. package/assets/images/weather/snowy-3.svg +268 -0
  20. package/assets/images/weather/snowy-4.svg +94 -0
  21. package/assets/images/weather/snowy-5.svg +166 -0
  22. package/assets/images/weather/snowy-6.svg +225 -0
  23. package/assets/images/weather/thunder.svg +268 -0
  24. package/assets/images/weather/weather-sprite.svg +1245 -0
  25. package/assets/images/weather/weather.svg +1245 -0
  26. package/assets/images/weather/weather_sagittarius.svg +9 -0
  27. package/assets/images/weather/weather_sunset.svg +14 -0
  28. package/content-management/index.d.ts +2 -0
  29. package/content-management/lib/entities/index.d.ts +1 -0
  30. package/content-management/lib/entities/promotion/index.d.ts +5 -0
  31. package/content-management/lib/features/index.d.ts +1 -0
  32. package/content-management/lib/features/promotion/components/index.d.ts +1 -0
  33. package/content-management/lib/features/promotion/index.d.ts +1 -0
  34. package/conversation/lib/features/chat/components/chat-preview/chat-preview.component.d.ts +0 -1
  35. package/conversation/lib/features/index.d.ts +1 -0
  36. package/conversation/lib/features/widget/share/comment/comment-widget-view.component.d.ts +66 -0
  37. package/conversation/lib/features/widget/share/comment/comment-widget.config.d.ts +2 -0
  38. package/conversation/lib/features/widget/share/comment/index.d.ts +2 -0
  39. package/dashboard-management/lib/features/home-dashboard/dashboard-popups/index.d.ts +3 -0
  40. package/dashboard-management/lib/features/home-dashboard/index.d.ts +3 -0
  41. package/dashboard-management/lib/features/home-dashboard/setrting.keys.d.ts +3 -0
  42. package/dashboard-management/lib/features/home-dashboard/widget-wrapper/index.d.ts +1 -0
  43. package/dashboard-management/lib/features/shared/widgets/analog-clock/analog-clock-widget-view.component.d.ts +9 -0
  44. package/dashboard-management/lib/features/shared/widgets/analog-clock/analog-clock-widget.config.d.ts +7 -0
  45. package/dashboard-management/lib/features/shared/widgets/analog-clock/analog-clock.component.d.ts +28 -0
  46. package/dashboard-management/lib/features/shared/widgets/analog-clock/index.d.ts +3 -0
  47. package/dashboard-management/lib/features/shared/widgets/index.d.ts +1 -0
  48. package/dashboard-management/lib/features/shared/widgets/weather/advanced-weather/advanced-weather.component.d.ts +32 -0
  49. package/dashboard-management/lib/features/shared/widgets/weather/advanced-weather/advanced-weather.config.d.ts +14 -0
  50. package/dashboard-management/lib/features/shared/widgets/weather/advanced-weather/index.d.ts +2 -0
  51. package/dashboard-management/lib/features/shared/widgets/weather/index.d.ts +2 -0
  52. package/dashboard-management/lib/features/shared/widgets/weather/minimal-weather/index.d.ts +2 -0
  53. package/dashboard-management/lib/features/shared/widgets/weather/minimal-weather/minimal-weather.component.d.ts +22 -0
  54. package/dashboard-management/lib/features/shared/widgets/weather/minimal-weather/minimal-weather.config.d.ts +14 -0
  55. package/dashboard-management/lib/features/shared/widgets/weather/weather-services/weather-api.abstract.d.ts +19 -0
  56. package/dashboard-management/lib/features/shared/widgets/weather/weather-widget.component.d.ts +5 -5
  57. package/fesm2022/{acorex-modules-application-management-module-designer.component-BJp8imYd.mjs → acorex-modules-application-management-module-designer.component-ZKzHxJ0D.mjs} +2 -2
  58. package/fesm2022/{acorex-modules-application-management-module-designer.component-BJp8imYd.mjs.map → acorex-modules-application-management-module-designer.component-ZKzHxJ0D.mjs.map} +1 -1
  59. package/fesm2022/acorex-modules-application-management.mjs +1 -1
  60. package/fesm2022/acorex-modules-content-management.mjs +1288 -1
  61. package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
  62. package/fesm2022/acorex-modules-conversation.mjs +476 -15
  63. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  64. package/fesm2022/acorex-modules-dashboard-management.mjs +1224 -30
  65. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  66. package/fesm2022/acorex-modules-notification-management.mjs +7 -7
  67. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  68. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-B8aACrqL.mjs → acorex-modules-platform-management-acorex-modules-platform-management-CGGoHpYi.mjs} +132 -54
  69. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-CGGoHpYi.mjs.map +1 -0
  70. package/fesm2022/{acorex-modules-platform-management-list-version.component-DhSicYd3.mjs → acorex-modules-platform-management-list-version.component-CGxYFnd9.mjs} +2 -2
  71. package/fesm2022/{acorex-modules-platform-management-list-version.component-DhSicYd3.mjs.map → acorex-modules-platform-management-list-version.component-CGxYFnd9.mjs.map} +1 -1
  72. package/fesm2022/{acorex-modules-platform-management-settings.provider-CnGAUpof.mjs → acorex-modules-platform-management-settings.provider-CHAI3QHV.mjs} +2 -2
  73. package/fesm2022/{acorex-modules-platform-management-settings.provider-CnGAUpof.mjs.map → acorex-modules-platform-management-settings.provider-CHAI3QHV.mjs.map} +1 -1
  74. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  75. package/fesm2022/acorex-modules-project-management.mjs +95 -21
  76. package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
  77. package/fesm2022/{acorex-modules-security-management-permissions-editor.component-Ccx0_9L_.mjs → acorex-modules-security-management-permissions-editor.component-B2OIvMs7.mjs} +2 -2
  78. package/fesm2022/{acorex-modules-security-management-permissions-editor.component-Ccx0_9L_.mjs.map → acorex-modules-security-management-permissions-editor.component-B2OIvMs7.mjs.map} +1 -1
  79. package/fesm2022/acorex-modules-security-management.mjs +1 -1
  80. package/package.json +1 -1
  81. package/platform-management/lib/entities/data-source/datasource-provider.dynamic.d.ts +2 -0
  82. package/platform-management/lib/features/common/regional/data-source.provider.d.ts +1 -0
  83. package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-C23PlUCn.mjs +0 -392
  84. package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-C23PlUCn.mjs.map +0 -1
  85. package/fesm2022/acorex-modules-content-management-promotion.entity-D3qRwZhQ.mjs +0 -892
  86. package/fesm2022/acorex-modules-content-management-promotion.entity-D3qRwZhQ.mjs.map +0 -1
  87. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-B8aACrqL.mjs.map +0 -1
@@ -181,7 +181,7 @@ class AXPPermissionsEditorComponent extends AXPPopupLayoutBaseComponent {
181
181
  // Angular
182
182
  CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
183
183
  // ACoreX
184
- AXFormModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i3.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i4.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "checked", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i5.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i5.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i7.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "component", type:
184
+ AXFormModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i3.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i4.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "checked", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i5.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i5.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i7.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "text", "look"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "component", type:
185
185
  // Platform
186
186
  AXPPopupLayoutComponent, selector: "axp-popup-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }], encapsulation: i0.ViewEncapsulation.None }); }
187
187
  }
@@ -215,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
215
215
  }] });
216
216
 
217
217
  export { AXPPermissionsEditorComponent };
218
- //# sourceMappingURL=acorex-modules-security-management-permissions-editor.component-Ccx0_9L_.mjs.map
218
+ //# sourceMappingURL=acorex-modules-security-management-permissions-editor.component-B2OIvMs7.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-security-management-permissions-editor.component-Ccx0_9L_.mjs","sources":["../../../../libs/modules/security-management/src/lib/features/permissions/permissions-editor/permissions-editor.component.ts","../../../../libs/modules/security-management/src/lib/features/permissions/permissions-editor/permissions-editor.component.html"],"sourcesContent":["// #region ---------------- Imports ----------------\nimport { Component, ViewEncapsulation, computed, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPPermissionDefinition, AXPPermissionDefinitionService, AXPPermissionGroupDefinition } from '@acorex/platform/auth';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { FormsModule } from '@angular/forms';\nimport { AXValueChangedEvent } from \"@acorex/cdk/common\";\nimport { AXTooltipModule } from '@acorex/components/tooltip';\n// #endregion\n\n@Component({\n selector: 'axm-permissions-editor',\n templateUrl: './permissions-editor.component.html',\n styleUrl: './permissions-editor.component.scss',\n imports: [\n // Angular\n CommonModule,\n FormsModule,\n // ACoreX\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXTabsModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXBadgeModule,\n AXCheckBoxModule,\n AXTooltipModule,\n // Platform\n AXPPopupLayoutComponent,\n AXPThemeLayoutBlockComponent\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPopupLayoutBase,\n useExisting: AXPPermissionsEditorComponent\n }\n\n ],\n})\nexport class AXPPermissionsEditorComponent extends AXPPopupLayoutBaseComponent {\n\n // #region ---------------- Class Properties ----------------\n /** Service for fetching permission groups and definitions */\n private permissionService = inject(AXPPermissionDefinitionService);\n\n /** Currently selected permission group */\n protected selectedGroup = signal<AXPPermissionGroupDefinition | null>(null);\n\n /** All available permission groups */\n protected groups = signal<AXPPermissionGroupDefinition[]>([]);\n\n /** Initial permissions to be selected */\n protected initialPermissions = [];\n\n /** List of selected permission names */\n protected selectedPermissions = signal<string[]>([]);\n // #endregion\n\n // #region ---------------- Computed Properties ----------------\n /**\n * Recursively maps permissions to include selection state and children.\n */\n private mapPermissions(items: any[]): any[] {\n return (items || []).map(item => {\n const hasChild = Array.isArray(item.children) && item.children.length > 0;\n return {\n ...item,\n isSelected: this.isSelected(item.name),\n children: hasChild ? this.mapPermissions(item.children) : null\n };\n });\n }\n\n /**\n * Computed: Returns mapped permissions for the selected group.\n */\n protected items = computed(() => {\n const permissions = this.selectedGroup()?.permissions || [];\n return this.mapPermissions(permissions);\n });\n\n /**\n * Computed: Returns groups with badge counts.\n */\n protected groupsWithBadge = computed(() => {\n const groups = this.groups();\n const result = groups.map(group => {\n return {\n ...group,\n badge: this.getBadge(group) || ''\n };\n });\n return result;\n });\n // #endregion\n\n // #region ---------------- Utility Methods ----------------\n /**\n * Recursively collects all permission names (parents and children) from an array.\n */\n private collectAllPermissionNames(permissions: any[]): string[] {\n let names: string[] = [];\n for (const item of permissions) {\n names.push(item.name);\n if (Array.isArray(item.children) && item.children.length > 0) {\n names = names.concat(this.collectAllPermissionNames(item.children));\n }\n }\n return names;\n }\n\n /**\n * Returns the badge count for a group (all selected permissions, including parents).\n */\n private getBadge(group: AXPPermissionGroupDefinition): string {\n const allNames = this.collectAllPermissionNames(group.permissions || []);\n const selectedPermissions = this.selectedPermissions();\n const count = allNames.filter(name => selectedPermissions.includes(name)).length;\n return count.toString();\n }\n\n /**\n * Checks if a permission is selected.\n */\n private isSelected(name: string): boolean {\n return this.selectedPermissions().includes(name);\n }\n\n /**\n * Recursively collects all descendant permission names for a single item (including itself).\n */\n private collectPermissionNames(item: any): string[] {\n let names = [item.name];\n if (Array.isArray(item.children) && item.children.length > 0) {\n for (const child of item.children) {\n names = names.concat(this.collectPermissionNames(child));\n }\n }\n return names;\n }\n // #endregion\n\n // #region ---------------- Lifecycle Methods ----------------\n /**\n * Initializes the component and loads permission groups.\n */\n override async ngOnInit() {\n super.ngOnInit();\n const groups = await this.permissionService.getGroups();\n this.groups.set(groups);\n this.selectedGroup.set(groups[0]);\n this.selectedPermissions.set(this.initialPermissions);\n }\n // #endregion\n\n // #region ---------------- UI Handlers ----------------\n /**\n * Handles group tab/menu item click.\n */\n protected handleMenuItemClick(item: AXPPermissionGroupDefinition) {\n this.selectedGroup.set(item);\n }\n\n /**\n * Returns the primary menu items for the popup layout.\n */\n protected override getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [\n {\n title: 't(\"select\")',\n icon: 'fa-solid',\n command: {\n name: 'select'\n }\n }\n ]\n }\n\n /**\n * Handles permission checkbox toggle (checks/unchecks all children recursively).\n */\n protected onPermissionToggle(item: any, e: AXValueChangedEvent): void {\n const names = this.collectPermissionNames(item);\n if (e.value) {\n // Add all names (parent + children), avoiding duplicates\n const set = new Set([...this.selectedPermissions(), ...names]);\n this.selectedPermissions.set(Array.from(set));\n } else {\n // Remove all names (parent + children)\n this.selectedPermissions.set(\n this.selectedPermissions().filter(name => !names.includes(name))\n );\n }\n }\n\n override execute(command: AXPExecuteCommand): void | Promise<void> {\n if (command.name === 'select') {\n this.close(this.selectedPermissions());\n }\n }\n\n // #endregion\n\n}\n","<axp-popup-layout>\n <axp-page-content>\n <div class=\"ax-flex ax-min-h-96\">\n <div class=\"ax-p-4 ax-min-h-full ax-overflow-auto ax-w-2/5\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"ax-h-full\">\n @for (group of groupsWithBadge(); track $index) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [text]=\"group.title\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n <ax-suffix>\n <ax-badge color=\"primary\" [text]=\"group.badge\"></ax-badge>\n </ax-suffix>\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-flex ax-h-full ax-overflow-auto ax-flex-col ax-w-3/5 ax-border-s\">\n <div class=\"ax-p-4 ax-border-b ax-border-lightest\">\n <span class=\"ax-h6\">{{ selectedGroup()?.title! }}</span>\n </div>\n <div class=\"ax-flex ax-p-4\">\n <ul class=\"\">\n <ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"ax-py-1\">\n <ax-check-box [ngModel]=\"item.isSelected\" (onValueChanged)=\"onPermissionToggle(item, $event)\">\n <ax-label>\n {{ item.title }}\n @if (item.description) {\n <i class=\"ax-ps-2 ax-text-xs fa-light fa-circle-info\" [title]=\"item.description\"></i>\n }\n </ax-label>\n </ax-check-box>\n @if (item.children && item.children.length > 0) {\n <ul class=\"ax-p-2 ax-mt-1 ax-ms-1\">\n <ng-container\n *ngTemplateOutlet=\"recursiveList; context: { $implicit: item.children }\"\n ></ng-container>\n </ul>\n }\n </li>\n }\n </ng-template>\n <ng-container *ngTemplateOutlet=\"recursiveList; context: { $implicit: items() }\"></ng-container>\n </ul>\n </div>\n </div>\n </div>\n </axp-page-content>\n</axp-popup-layout>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAoBA;AAmCM,MAAO,6BAA8B,SAAQ,2BAA2B,CAAA;AAjC9E,IAAA,WAAA,GAAA;;;;AAqCY,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,8BAA8B,CAAC;;AAGxD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAsC,IAAI,CAAC;;AAGjE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAiC,EAAE,CAAC;;QAGnD,IAAkB,CAAA,kBAAA,GAAG,EAAE;;AAGvB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAW,EAAE,CAAC;AAkBpD;;AAEG;AACO,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,WAAW,IAAI,EAAE;AAC3D,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AAC3C,SAAC,CAAC;AAEF;;AAEG;AACO,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAG;gBAC9B,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;iBAClC;AACL,aAAC,CAAC;AACF,YAAA,OAAO,MAAM;AACjB,SAAC,CAAC;AA8GL;;;AAhJG;;AAEG;AACK,IAAA,cAAc,CAAC,KAAY,EAAA;QAC/B,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,IAAG;AAC5B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACzE,OAAO;AACH,gBAAA,GAAG,IAAI;gBACP,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,gBAAA,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;aAC7D;AACL,SAAC,CAAC;;;;AA2BN;;AAEG;AACK,IAAA,yBAAyB,CAAC,WAAkB,EAAA;QAChD,IAAI,KAAK,GAAa,EAAE;AACxB,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AAC5B,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,gBAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;;AAG3E,QAAA,OAAO,KAAK;;AAGhB;;AAEG;AACK,IAAA,QAAQ,CAAC,KAAmC,EAAA;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;AACxE,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACtD,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;AAChF,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;AAG3B;;AAEG;AACK,IAAA,UAAU,CAAC,IAAY,EAAA;QAC3B,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAGpD;;AAEG;AACK,IAAA,sBAAsB,CAAC,IAAS,EAAA;AACpC,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,gBAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;;;AAGhE,QAAA,OAAO,KAAK;;;;AAKhB;;AAEG;AACM,IAAA,MAAM,QAAQ,GAAA;QACnB,KAAK,CAAC,QAAQ,EAAE;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;;;;AAKzD;;AAEG;AACO,IAAA,mBAAmB,CAAC,IAAkC,EAAA;AAC5D,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGhC;;AAEG;IACgB,mBAAmB,GAAA;QAClC,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,OAAO,EAAE;AACL,oBAAA,IAAI,EAAE;AACT;AACJ;SACJ;;AAGL;;AAEG;IACO,kBAAkB,CAAC,IAAS,EAAE,CAAsB,EAAA;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/C,QAAA,IAAI,CAAC,CAAC,KAAK,EAAE;;AAET,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;aAC1C;;YAEH,IAAI,CAAC,mBAAmB,CAAC,GAAG,CACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACnE;;;AAIA,IAAA,OAAO,CAAC,OAA0B,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;;;+GA9JrC,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAR3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE;AAChB;AAEJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDL,ksEAoDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;ADxBQ,gBAAA,YAAY,qMACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAEX,gBAAA,YAAY,8BACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kaACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,yIAEb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAEf,gBAAA,uBAAuB,6DACvB,4BAA4B,EAAA,QAAA,EAAA,qfAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAWvB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAjCzC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAGzB,OAAA,EAAA;;wBAEL,YAAY;wBACZ,WAAW;;wBAEX,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB,YAAY;wBACZ,iBAAiB;wBACjB,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,eAAe;;wBAEf,uBAAuB;wBACvB;qBACH,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAA+B;AAC7C;AAEJ,qBAAA,EAAA,QAAA,EAAA,ksEAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"acorex-modules-security-management-permissions-editor.component-B2OIvMs7.mjs","sources":["../../../../libs/modules/security-management/src/lib/features/permissions/permissions-editor/permissions-editor.component.ts","../../../../libs/modules/security-management/src/lib/features/permissions/permissions-editor/permissions-editor.component.html"],"sourcesContent":["// #region ---------------- Imports ----------------\nimport { Component, ViewEncapsulation, computed, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPPermissionDefinition, AXPPermissionDefinitionService, AXPPermissionGroupDefinition } from '@acorex/platform/auth';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { FormsModule } from '@angular/forms';\nimport { AXValueChangedEvent } from \"@acorex/cdk/common\";\nimport { AXTooltipModule } from '@acorex/components/tooltip';\n// #endregion\n\n@Component({\n selector: 'axm-permissions-editor',\n templateUrl: './permissions-editor.component.html',\n styleUrl: './permissions-editor.component.scss',\n imports: [\n // Angular\n CommonModule,\n FormsModule,\n // ACoreX\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXTabsModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXBadgeModule,\n AXCheckBoxModule,\n AXTooltipModule,\n // Platform\n AXPPopupLayoutComponent,\n AXPThemeLayoutBlockComponent\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPopupLayoutBase,\n useExisting: AXPPermissionsEditorComponent\n }\n\n ],\n})\nexport class AXPPermissionsEditorComponent extends AXPPopupLayoutBaseComponent {\n\n // #region ---------------- Class Properties ----------------\n /** Service for fetching permission groups and definitions */\n private permissionService = inject(AXPPermissionDefinitionService);\n\n /** Currently selected permission group */\n protected selectedGroup = signal<AXPPermissionGroupDefinition | null>(null);\n\n /** All available permission groups */\n protected groups = signal<AXPPermissionGroupDefinition[]>([]);\n\n /** Initial permissions to be selected */\n protected initialPermissions = [];\n\n /** List of selected permission names */\n protected selectedPermissions = signal<string[]>([]);\n // #endregion\n\n // #region ---------------- Computed Properties ----------------\n /**\n * Recursively maps permissions to include selection state and children.\n */\n private mapPermissions(items: any[]): any[] {\n return (items || []).map(item => {\n const hasChild = Array.isArray(item.children) && item.children.length > 0;\n return {\n ...item,\n isSelected: this.isSelected(item.name),\n children: hasChild ? this.mapPermissions(item.children) : null\n };\n });\n }\n\n /**\n * Computed: Returns mapped permissions for the selected group.\n */\n protected items = computed(() => {\n const permissions = this.selectedGroup()?.permissions || [];\n return this.mapPermissions(permissions);\n });\n\n /**\n * Computed: Returns groups with badge counts.\n */\n protected groupsWithBadge = computed(() => {\n const groups = this.groups();\n const result = groups.map(group => {\n return {\n ...group,\n badge: this.getBadge(group) || ''\n };\n });\n return result;\n });\n // #endregion\n\n // #region ---------------- Utility Methods ----------------\n /**\n * Recursively collects all permission names (parents and children) from an array.\n */\n private collectAllPermissionNames(permissions: any[]): string[] {\n let names: string[] = [];\n for (const item of permissions) {\n names.push(item.name);\n if (Array.isArray(item.children) && item.children.length > 0) {\n names = names.concat(this.collectAllPermissionNames(item.children));\n }\n }\n return names;\n }\n\n /**\n * Returns the badge count for a group (all selected permissions, including parents).\n */\n private getBadge(group: AXPPermissionGroupDefinition): string {\n const allNames = this.collectAllPermissionNames(group.permissions || []);\n const selectedPermissions = this.selectedPermissions();\n const count = allNames.filter(name => selectedPermissions.includes(name)).length;\n return count.toString();\n }\n\n /**\n * Checks if a permission is selected.\n */\n private isSelected(name: string): boolean {\n return this.selectedPermissions().includes(name);\n }\n\n /**\n * Recursively collects all descendant permission names for a single item (including itself).\n */\n private collectPermissionNames(item: any): string[] {\n let names = [item.name];\n if (Array.isArray(item.children) && item.children.length > 0) {\n for (const child of item.children) {\n names = names.concat(this.collectPermissionNames(child));\n }\n }\n return names;\n }\n // #endregion\n\n // #region ---------------- Lifecycle Methods ----------------\n /**\n * Initializes the component and loads permission groups.\n */\n override async ngOnInit() {\n super.ngOnInit();\n const groups = await this.permissionService.getGroups();\n this.groups.set(groups);\n this.selectedGroup.set(groups[0]);\n this.selectedPermissions.set(this.initialPermissions);\n }\n // #endregion\n\n // #region ---------------- UI Handlers ----------------\n /**\n * Handles group tab/menu item click.\n */\n protected handleMenuItemClick(item: AXPPermissionGroupDefinition) {\n this.selectedGroup.set(item);\n }\n\n /**\n * Returns the primary menu items for the popup layout.\n */\n protected override getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [\n {\n title: 't(\"select\")',\n icon: 'fa-solid',\n command: {\n name: 'select'\n }\n }\n ]\n }\n\n /**\n * Handles permission checkbox toggle (checks/unchecks all children recursively).\n */\n protected onPermissionToggle(item: any, e: AXValueChangedEvent): void {\n const names = this.collectPermissionNames(item);\n if (e.value) {\n // Add all names (parent + children), avoiding duplicates\n const set = new Set([...this.selectedPermissions(), ...names]);\n this.selectedPermissions.set(Array.from(set));\n } else {\n // Remove all names (parent + children)\n this.selectedPermissions.set(\n this.selectedPermissions().filter(name => !names.includes(name))\n );\n }\n }\n\n override execute(command: AXPExecuteCommand): void | Promise<void> {\n if (command.name === 'select') {\n this.close(this.selectedPermissions());\n }\n }\n\n // #endregion\n\n}\n","<axp-popup-layout>\n <axp-page-content>\n <div class=\"ax-flex ax-min-h-96\">\n <div class=\"ax-p-4 ax-min-h-full ax-overflow-auto ax-w-2/5\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"ax-h-full\">\n @for (group of groupsWithBadge(); track $index) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [text]=\"group.title\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n <ax-suffix>\n <ax-badge color=\"primary\" [text]=\"group.badge\"></ax-badge>\n </ax-suffix>\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-flex ax-h-full ax-overflow-auto ax-flex-col ax-w-3/5 ax-border-s\">\n <div class=\"ax-p-4 ax-border-b ax-border-lightest\">\n <span class=\"ax-h6\">{{ selectedGroup()?.title! }}</span>\n </div>\n <div class=\"ax-flex ax-p-4\">\n <ul class=\"\">\n <ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"ax-py-1\">\n <ax-check-box [ngModel]=\"item.isSelected\" (onValueChanged)=\"onPermissionToggle(item, $event)\">\n <ax-label>\n {{ item.title }}\n @if (item.description) {\n <i class=\"ax-ps-2 ax-text-xs fa-light fa-circle-info\" [title]=\"item.description\"></i>\n }\n </ax-label>\n </ax-check-box>\n @if (item.children && item.children.length > 0) {\n <ul class=\"ax-p-2 ax-mt-1 ax-ms-1\">\n <ng-container\n *ngTemplateOutlet=\"recursiveList; context: { $implicit: item.children }\"\n ></ng-container>\n </ul>\n }\n </li>\n }\n </ng-template>\n <ng-container *ngTemplateOutlet=\"recursiveList; context: { $implicit: items() }\"></ng-container>\n </ul>\n </div>\n </div>\n </div>\n </axp-page-content>\n</axp-popup-layout>\n"],"names":[],"mappings":"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"}
@@ -2217,7 +2217,7 @@ class AXMOpenPermissionsEditorAction extends AXPWorkflowAction {
2217
2217
  }
2218
2218
  async execute(context) {
2219
2219
  const role = context.getVariable('data');
2220
- const component = await import('./acorex-modules-security-management-permissions-editor.component-Ccx0_9L_.mjs').then(m => m.AXPPermissionsEditorComponent);
2220
+ const component = await import('./acorex-modules-security-management-permissions-editor.component-B2OIvMs7.mjs').then(m => m.AXPPermissionsEditorComponent);
2221
2221
  const title = await this.translateService.translateAsync("@security-management:features.permissions.terms.permissions-editor");
2222
2222
  const result = await this.modalService.open(component, {
2223
2223
  title: `${title} - ${role.title}`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/modules",
3
- "version": "19.4.13",
3
+ "version": "19.4.15",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=19.0.0",
6
6
  "@angular/core": ">=19.0.0",
@@ -1,8 +1,10 @@
1
1
  import { AXPWidgetDataSource, AXPWidgetDataSourceProvider } from '@acorex/platform/layout/builder';
2
2
  import { AXPEntityResolver } from '@acorex/platform/layout/entity';
3
3
  import { AXMDataSourceService } from './data-source.service';
4
+ import { AXPDataSourceDefinitionProviderService } from '@acorex/platform/core';
4
5
  export declare class AXMDynamicDataSourceProvider implements AXPWidgetDataSourceProvider {
5
6
  protected dataSourceService: AXMDataSourceService<any>;
6
7
  protected entityResolverService: AXPEntityResolver;
8
+ protected dataSourceDefinitionProviderService: AXPDataSourceDefinitionProviderService;
7
9
  items(): Promise<AXPWidgetDataSource[]>;
8
10
  }
@@ -6,5 +6,6 @@ export declare class AXPRegionalWidgetDataSourceProvider implements AXPWidgetDat
6
6
  private provinces;
7
7
  private currencies;
8
8
  private languages;
9
+ private timezones;
9
10
  items(): Promise<AXPWidgetDataSource[]>;
10
11
  }
@@ -1,392 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, Injector, Injectable, signal, Component, NgModule } from '@angular/core';
3
- import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
4
- import { AXPSearchCommandProvider, AXPFileStorageService, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';
5
- import { AXPEntityService, AXMEntityCrudServiceImpl, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
6
- import * as i1 from '@acorex/platform/layout/components';
7
- import { AXPComponentSlotModule } from '@acorex/platform/layout/components';
8
- import { AXP_DATASOURCE_DEFINITION_PROVIDER } from '@acorex/platform/core';
9
- import { AXDataSource } from '@acorex/cdk/common';
10
- import { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
11
- import { AXSafePipe } from '@acorex/core/pipes';
12
- import { CommonModule } from '@angular/common';
13
-
14
- const config = {
15
- i18n: 'content-management',
16
- };
17
- const RootConfig = {
18
- config,
19
- module: {
20
- module: 'ContentManagement',
21
- name: 'ContentManagement',
22
- title: `t('module-name', {scope:"${config.i18n}"})`,
23
- icon: 'fa-light fa-file-invoice',
24
- },
25
- entities: {
26
- promotion: {
27
- name: 'Promotion',
28
- title: `t("promotion", { scope: "${config.i18n}" })`,
29
- titlePlural: `t("promotions", { scope: "${config.i18n}" })`,
30
- icon: 'fa-light fa-megaphone',
31
- },
32
- },
33
- };
34
-
35
- class AXMMenuProvider {
36
- constructor() {
37
- this.entityService = inject(AXPEntityService);
38
- }
39
- async provide(context) {
40
- const scope = RootConfig.config.i18n;
41
- const module = RootConfig.module;
42
- context.addItems([
43
- {
44
- priority: 100,
45
- text: `t('module-name', {scope:"${scope}"})`,
46
- icon: module.icon,
47
- name: 'content-management-menu',
48
- children: [
49
- {
50
- text: RootConfig.entities.promotion.title,
51
- path: this.entityService.createPath(module.name, RootConfig.entities.promotion.name),
52
- icon: RootConfig.entities.promotion.icon,
53
- priority: 1,
54
- name: 'content-management-promotion-menu-item'
55
- }
56
- ],
57
- },
58
- ]);
59
- }
60
- }
61
-
62
- class AXMEntityProvider {
63
- constructor() {
64
- this.injector = inject(Injector);
65
- }
66
- preload() {
67
- const module = RootConfig.module.name;
68
- return Array.from(Object.values(RootConfig.entities)).map((entity) => ({
69
- module: module,
70
- entity: entity.name,
71
- }));
72
- }
73
- async get(moduleName, entityName) {
74
- if (moduleName == RootConfig.module.name) {
75
- switch (entityName) {
76
- // case RootConfig.entities.sample.name:
77
- // return (await import('./entities/sample/sample.entity')).factory(this.injector);
78
- case RootConfig.entities.promotion.name: {
79
- const entity = (await import('./acorex-modules-content-management-promotion.entity-D3qRwZhQ.mjs')).promotionEntityFactory;
80
- return entity(this.injector);
81
- }
82
- }
83
- }
84
- return null;
85
- }
86
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMEntityProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
87
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMEntityProvider }); }
88
- }
89
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMEntityProvider, decorators: [{
90
- type: Injectable
91
- }] });
92
-
93
- class AXMPermissionDefinitionProvider {
94
- async define(context) {
95
- // context.addPermissions([
96
- // {
97
- // name: 'view_templates',
98
- // title: 'Permission to view templates',
99
- // isArchived: false,
100
- // },
101
- // ]);
102
- }
103
- }
104
-
105
- class AXMSettingProvider {
106
- async provide(context) {
107
- // context
108
- // // Add Form Template Group
109
- // .addGroup('form-template', 'Form Template', 'Settings related to form templates.', RootConfig.module.icon)
110
- // // Start Interface Section
111
- // .addSection('interface', 'UI Interface', 'Customize the user interface for forms.')
112
- // .addSetting({
113
- // key: 'history-panel',
114
- // title: 'Show History Panel',
115
- // scope: 'U',
116
- // isInherited: true,
117
- // defaultValue: false,
118
- // widget: {
119
- // type: AXPWidgetsCatalog.toggle,
120
- // },
121
- // description: 'Enable or disable the history panel for forms.',
122
- // validationRules: [
123
- // {
124
- // rule: 'required',
125
- // },
126
- // ],
127
- // })
128
- // .endSection()
129
- // .endGroup();
130
- }
131
- }
132
-
133
- class AXMSearchCommandProvider extends AXPSearchCommandProvider {
134
- constructor() {
135
- super(...arguments);
136
- this.commands = [
137
- // {
138
- // group: 'command',
139
- // title: 'New Form Template',
140
- // icon: RootConfig.entities.template.icon,
141
- // description: 'Create a new form template for designing reusable forms.', // Added description
142
- // commands: {
143
- // 'create-entity': {
144
- // entity: `${RootConfig.module.name}.${RootConfig.entities.template.name}`,
145
- // },
146
- // },
147
- // }
148
- ];
149
- }
150
- }
151
-
152
- class AXMAppPromotionService extends AXMEntityCrudServiceImpl {
153
- }
154
- class AXMPromotionServiceImpl extends AXMEntityCrudServiceImpl {
155
- constructor() {
156
- super(`${RootConfig.module.name}.${RootConfig.entities.promotion.name}`);
157
- }
158
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMPromotionServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
159
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMPromotionServiceImpl }); }
160
- }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMPromotionServiceImpl, decorators: [{
162
- type: Injectable
163
- }], ctorParameters: () => [] });
164
-
165
- class AXMPromotionDataSourceDefinition {
166
- constructor() {
167
- this.promotionService = inject(AXMAppPromotionService);
168
- this.i18n = RootConfig.config.i18n;
169
- }
170
- items() {
171
- return Promise.resolve([
172
- {
173
- name: 'promotion',
174
- title: 'Promotion',
175
- source: () => {
176
- return new AXDataSource({
177
- load: async (_) => {
178
- try {
179
- const res = await this.promotionService.query();
180
- return {
181
- items: res.items,
182
- total: res.total,
183
- };
184
- }
185
- catch (e) {
186
- console.log(e);
187
- throw e;
188
- }
189
- },
190
- pageSize: 100,
191
- });
192
- },
193
- columns: [
194
- {
195
- name: 'id',
196
- title: 'ID',
197
- datatype: 'uuid',
198
- type: AXPWidgetsCatalog.text,
199
- },
200
- {
201
- name: 'title',
202
- //TODO translate
203
- title: `Title`,
204
- datatype: 'string',
205
- type: AXPWidgetsCatalog.text,
206
- },
207
- {
208
- name: 'body',
209
- title: `Body`,
210
- datatype: 'string',
211
- type: AXPWidgetsCatalog.richText,
212
- },
213
- ],
214
- textField: 'title',
215
- valueField: 'id',
216
- },
217
- ]);
218
- }
219
- }
220
-
221
- class AXMPromotionSlotComponent {
222
- constructor() {
223
- this.notificationChannelService = inject(AXMAppPromotionService);
224
- this.listData = signal([]);
225
- this.fileStorage = inject(AXPFileStorageService);
226
- }
227
- async ngOnInit() {
228
- const channels = await this.notificationChannelService.query({
229
- skip: 0,
230
- take: 10000,
231
- // filter: {
232
- // field: 'type',
233
- // operator: { type: 'equal' },
234
- // value: 'promotion',
235
- // },
236
- });
237
- const filteredItems = channels.items.filter((x) => x.placement?.name == this.location);
238
- const mappedItems = await Promise.all(filteredItems.map(async (item) => {
239
- if (item.imageId != null) {
240
- const image = await this.fileStorage.getInfo(item.imageId);
241
- return {
242
- ...item,
243
- image: image,
244
- };
245
- }
246
- else {
247
- return item;
248
- }
249
- }));
250
- this.listData.set(mappedItems);
251
- }
252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMPromotionSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
253
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AXMPromotionSlotComponent, isStandalone: true, selector: "acorex-platform-promotion-slot", ngImport: i0, template: "@for (item of listData(); track item.id) { @if (item.contentType?.name == 'media') {\n<img [src]=\"item.image?.url ?? ''\" class=\"ax-w-full ax-p-3 ax-border {{\n item.shape?.name == 'circle' ? 'ax-rounded-full' : 'ax-rounded-none'\n }}\" />\n} @if(item.contentType?.name == 'text'){\n<div class=\"ax-m-1 ax-px-6 ax-p-4 ax-border ax-bg-primary ax-rounded-lg\">\n <h1 class=\"ax-text-base/6\" [innerHTML]=\"item.body | safe : 'html'\"></h1>\n</div>\n\n} } ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: AXSafePipe, name: "safe" }] }); }
254
- }
255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMPromotionSlotComponent, decorators: [{
256
- type: Component,
257
- args: [{ selector: 'acorex-platform-promotion-slot', imports: [CommonModule, AXSafePipe], template: "@for (item of listData(); track item.id) { @if (item.contentType?.name == 'media') {\n<img [src]=\"item.image?.url ?? ''\" class=\"ax-w-full ax-p-3 ax-border {{\n item.shape?.name == 'circle' ? 'ax-rounded-full' : 'ax-rounded-none'\n }}\" />\n} @if(item.contentType?.name == 'text'){\n<div class=\"ax-m-1 ax-px-6 ax-p-4 ax-border ax-bg-primary ax-rounded-lg\">\n <h1 class=\"ax-text-base/6\" [innerHTML]=\"item.body | safe : 'html'\"></h1>\n</div>\n\n} } " }]
258
- }] });
259
-
260
- class AXMContentManagementModule {
261
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMContentManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
262
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.10", ngImport: i0, type: AXMContentManagementModule, imports: [i1.AXPComponentSlotModule] }); }
263
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMContentManagementModule, providers: [
264
- {
265
- provide: AXP_MENU_PROVIDER,
266
- useClass: AXMMenuProvider,
267
- multi: true,
268
- },
269
- {
270
- provide: AXP_ENTITY_DEFINITION_LOADER,
271
- useClass: AXMEntityProvider,
272
- multi: true,
273
- },
274
- {
275
- provide: AXP_SETTING_DEFINITION_PROVIDER,
276
- useClass: AXMSettingProvider,
277
- multi: true,
278
- },
279
- {
280
- provide: AXP_SEARCH_PROVIDER,
281
- useClass: AXMSearchCommandProvider,
282
- multi: true,
283
- },
284
- {
285
- provide: AXP_PERMISSION_DEFINITION_PROVIDER,
286
- useClass: AXMPermissionDefinitionProvider,
287
- multi: true,
288
- },
289
- {
290
- provide: AXMAppPromotionService,
291
- useClass: AXMPromotionServiceImpl,
292
- },
293
- {
294
- provide: AXP_DATASOURCE_DEFINITION_PROVIDER,
295
- useClass: AXMPromotionDataSourceDefinition,
296
- multi: true,
297
- },
298
- ], imports: [AXPComponentSlotModule.forChild({
299
- 'side-menu-footer': [
300
- {
301
- name: 'side-menu-footer-promotion',
302
- component: AXMPromotionSlotComponent,
303
- options: {
304
- location: 'side-menu-footer',
305
- },
306
- },
307
- ],
308
- 'side-menu-header': [
309
- {
310
- name: 'side-menu-header-promotion',
311
- component: AXMPromotionSlotComponent,
312
- priority: 2,
313
- options: {
314
- location: 'side-menu-header',
315
- },
316
- },
317
- ],
318
- })] }); }
319
- }
320
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMContentManagementModule, decorators: [{
321
- type: NgModule,
322
- args: [{
323
- imports: [
324
- AXPComponentSlotModule.forChild({
325
- 'side-menu-footer': [
326
- {
327
- name: 'side-menu-footer-promotion',
328
- component: AXMPromotionSlotComponent,
329
- options: {
330
- location: 'side-menu-footer',
331
- },
332
- },
333
- ],
334
- 'side-menu-header': [
335
- {
336
- name: 'side-menu-header-promotion',
337
- component: AXMPromotionSlotComponent,
338
- priority: 2,
339
- options: {
340
- location: 'side-menu-header',
341
- },
342
- },
343
- ],
344
- }),
345
- ],
346
- exports: [],
347
- declarations: [],
348
- providers: [
349
- {
350
- provide: AXP_MENU_PROVIDER,
351
- useClass: AXMMenuProvider,
352
- multi: true,
353
- },
354
- {
355
- provide: AXP_ENTITY_DEFINITION_LOADER,
356
- useClass: AXMEntityProvider,
357
- multi: true,
358
- },
359
- {
360
- provide: AXP_SETTING_DEFINITION_PROVIDER,
361
- useClass: AXMSettingProvider,
362
- multi: true,
363
- },
364
- {
365
- provide: AXP_SEARCH_PROVIDER,
366
- useClass: AXMSearchCommandProvider,
367
- multi: true,
368
- },
369
- {
370
- provide: AXP_PERMISSION_DEFINITION_PROVIDER,
371
- useClass: AXMPermissionDefinitionProvider,
372
- multi: true,
373
- },
374
- {
375
- provide: AXMAppPromotionService,
376
- useClass: AXMPromotionServiceImpl,
377
- },
378
- {
379
- provide: AXP_DATASOURCE_DEFINITION_PROVIDER,
380
- useClass: AXMPromotionDataSourceDefinition,
381
- multi: true,
382
- },
383
- ]
384
- }]
385
- }] });
386
-
387
- /**
388
- * Generated bundle index. Do not edit.
389
- */
390
-
391
- export { AXMAppPromotionService as A, RootConfig as R, AXMContentManagementModule as a, AXMEntityProvider as b, AXMMenuProvider as c, AXMSearchCommandProvider as d, AXMSettingProvider as e };
392
- //# sourceMappingURL=acorex-modules-content-management-acorex-modules-content-management-C23PlUCn.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-content-management-acorex-modules-content-management-C23PlUCn.mjs","sources":["../../../../libs/modules/content-management/src/lib/const.ts","../../../../libs/modules/content-management/src/lib/menu.provider.ts","../../../../libs/modules/content-management/src/lib/entity.provider.ts","../../../../libs/modules/content-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/content-management/src/lib/setting.provider.ts","../../../../libs/modules/content-management/src/lib/search-command.provider.ts","../../../../libs/modules/content-management/src/lib/entities/promotion/promotion.service.ts","../../../../libs/modules/content-management/src/lib/entities/promotion/promotion.datasource.ts","../../../../libs/modules/content-management/src/lib/features/promotion/components/promotion-slot/promotion-slot.component.ts","../../../../libs/modules/content-management/src/lib/features/promotion/components/promotion-slot/promotion-slot.component.html","../../../../libs/modules/content-management/src/lib/content-management.module.ts","../../../../libs/modules/content-management/src/acorex-modules-content-management.ts"],"sourcesContent":["const config = {\n i18n: 'content-management',\n};\nexport const RootConfig = {\n config,\n module: {\n module: 'ContentManagement',\n name: 'ContentManagement',\n title: `t('module-name', {scope:\"${config.i18n}\"})`,\n icon: 'fa-light fa-file-invoice',\n },\n entities: {\n promotion: {\n name: 'Promotion',\n title: `t(\"promotion\", { scope: \"${config.i18n}\" })`,\n titlePlural: `t(\"promotions\", { scope: \"${config.i18n}\" })`,\n icon: 'fa-light fa-megaphone',\n },\n },\n};\n","import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { RootConfig } from './const';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const scope = RootConfig.config.i18n;\n const module = RootConfig.module;\n\n context.addItems([\n {\n priority: 100,\n text: `t('module-name', {scope:\"${scope}\"})`,\n icon: module.icon,\n name: 'content-management-menu',\n children: [\n {\n text: RootConfig.entities.promotion.title,\n path: this.entityService.createPath(module.name, RootConfig.entities.promotion.name),\n icon: RootConfig.entities.promotion.icon,\n priority: 1,\n name: 'content-management-promotion-menu-item'\n }\n ],\n },\n ]);\n }\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport {\n AXPEntityDefinitionLoader,\n AXPEntityDefinitionPreloader,\n AXPEntityPreloadEntity,\n} from '@acorex/platform/layout/entity';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {\n private injector = inject(Injector);\n\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName == RootConfig.module.name) {\n switch (entityName) {\n // case RootConfig.entities.sample.name:\n // return (await import('./entities/sample/sample.entity')).factory(this.injector);\n case RootConfig.entities.promotion.name: {\n const entity = (await import('./entities/promotion/promotion.entity')).promotionEntityFactory;\n return entity(this.injector);\n }\n }\n }\n return null;\n }\n}\n","import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\n\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n // context.addPermissions([\n // {\n // name: 'view_templates',\n // title: 'Permission to view templates',\n // isArchived: false,\n // },\n // ]);\n }\n}\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex/platform/common';\n\nexport class AXMSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n // context\n // // Add Form Template Group\n // .addGroup('form-template', 'Form Template', 'Settings related to form templates.', RootConfig.module.icon)\n // // Start Interface Section\n // .addSection('interface', 'UI Interface', 'Customize the user interface for forms.')\n // .addSetting({\n // key: 'history-panel',\n // title: 'Show History Panel',\n // scope: 'U',\n // isInherited: true,\n // defaultValue: false,\n // widget: {\n // type: AXPWidgetsCatalog.toggle,\n // },\n // description: 'Enable or disable the history panel for forms.',\n // validationRules: [\n // {\n // rule: 'required',\n // },\n // ],\n // })\n // .endSection()\n // .endGroup();\n }\n}\n","import { AXPSearchCommandProvider, AXPSearchResult } from '@acorex/platform/common';\n\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [\n // {\n // group: 'command',\n // title: 'New Form Template',\n // icon: RootConfig.entities.template.icon,\n // description: 'Create a new form template for designing reusable forms.', // Added description\n // commands: {\n // 'create-entity': {\n // entity: `${RootConfig.module.name}.${RootConfig.entities.template.name}`,\n // },\n // },\n // }\n ];\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMPromotionEntityModel } from './promotion.types';\n\nexport abstract class AXMAppPromotionService extends AXMEntityCrudServiceImpl<string, AXMPromotionEntityModel> {}\n\n@Injectable()\nexport class AXMPromotionServiceImpl extends AXMEntityCrudServiceImpl<string, AXMPromotionEntityModel> {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.promotion.name}`);\n }\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { inject } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMAppPromotionService } from './promotion.service';\n\nexport class AXMPromotionDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n protected promotionService = inject(AXMAppPromotionService);\n protected i18n = RootConfig.config.i18n;\n\n items(): Promise<AXPDataSourceDefinition[]> {\n return Promise.resolve([\n {\n name: 'promotion',\n title: 'Promotion',\n source: () => {\n return new AXDataSource({\n load: async (_) => {\n try {\n const res = await this.promotionService.query();\n return {\n items: res.items,\n total: res.total,\n };\n } catch (e) {\n console.log(e);\n throw e;\n }\n },\n pageSize: 100,\n });\n },\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'uuid',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'title',\n //TODO translate\n title: `Title`,\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'body',\n title: `Body`,\n datatype: 'string',\n type: AXPWidgetsCatalog.richText,\n },\n ],\n textField: 'title',\n valueField: 'id',\n },\n ]);\n }\n} ","import { AXSafePipe } from '@acorex/core/pipes';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, signal, WritableSignal } from '@angular/core';\nimport { AXMAppPromotionService } from '../../../../entities/promotion/promotion.service';\nimport { AXMPromotionEntityModel } from '../../../../entities/promotion/promotion.types';\n\n@Component({\n selector: 'acorex-platform-promotion-slot',\n imports: [CommonModule, AXSafePipe],\n templateUrl: './promotion-slot.component.html',\n})\nexport class AXMPromotionSlotComponent implements OnInit {\n location: string;\n\n notificationChannelService = inject(AXMAppPromotionService);\n\n listData: WritableSignal<AXMPromotionEntityModel[]> = signal([]);\n\n private fileStorage = inject(AXPFileStorageService);\n\n async ngOnInit(): Promise<void> {\n const channels = await this.notificationChannelService.query({\n skip: 0,\n take: 10000,\n // filter: {\n // field: 'type',\n // operator: { type: 'equal' },\n // value: 'promotion',\n // },\n });\n\n const filteredItems = channels.items.filter((x) => x.placement?.name == this.location);\n\n const mappedItems = await Promise.all(\n filteredItems.map(async (item) => {\n if (item.imageId != null) {\n const image = await this.fileStorage.getInfo(item.imageId);\n\n return {\n ...item,\n image: image,\n };\n } else {\n return item;\n }\n })\n );\n\n this.listData.set(mappedItems);\n }\n} ","@for (item of listData(); track item.id) { @if (item.contentType?.name == 'media') {\n<img [src]=\"item.image?.url ?? ''\" class=\"ax-w-full ax-p-3 ax-border {{\n item.shape?.name == 'circle' ? 'ax-rounded-full' : 'ax-rounded-none'\n }}\" />\n} @if(item.contentType?.name == 'text'){\n<div class=\"ax-m-1 ax-px-6 ax-p-4 ax-border ax-bg-primary ax-rounded-lg\">\n <h1 class=\"ax-text-base/6\" [innerHTML]=\"item.body | safe : 'html'\"></h1>\n</div>\n\n} } ","import { NgModule } from \"@angular/core\";\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex/platform/common';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMEntityProvider } from './entity.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider'; \nimport { AXMSettingProvider } from './setting.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\nimport { AXPComponentSlotModule } from '@acorex/platform/layout/components';\nimport { AXP_DATASOURCE_DEFINITION_PROVIDER } from '@acorex/platform/core';\n\n// Import promotion-related services and components\nimport {\n AXMAppPromotionService,\n AXMPromotionServiceImpl,\n} from './entities/promotion/promotion.service';\nimport { AXMPromotionDataSourceDefinition } from './entities/promotion/promotion.datasource';\nimport { AXMPromotionSlotComponent } from './features/promotion/components/promotion-slot/promotion-slot.component';\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n 'side-menu-footer': [\n {\n name: 'side-menu-footer-promotion',\n component: AXMPromotionSlotComponent,\n options: {\n location: 'side-menu-footer',\n },\n },\n ],\n 'side-menu-header': [\n {\n name: 'side-menu-header-promotion',\n component: AXMPromotionSlotComponent,\n priority: 2,\n options: {\n location: 'side-menu-header',\n },\n },\n ],\n }),\n ],\n exports: [],\n declarations: [],\n providers : [\n \n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMSettingProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXMAppPromotionService,\n useClass: AXMPromotionServiceImpl,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMPromotionDataSourceDefinition,\n multi: true,\n },\n ]\n})\nexport class AXMContentManagementModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}