@acorex/platform 20.3.0-next.8 → 20.4.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 (132) hide show
  1. package/common/index.d.ts +643 -367
  2. package/core/index.d.ts +91 -66
  3. package/fesm2022/acorex-platform-auth.mjs +19 -19
  4. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-common-common-settings.provider-9OHien_H.mjs +47 -0
  6. package/fesm2022/acorex-platform-common-common-settings.provider-9OHien_H.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-common.mjs +678 -252
  8. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-core.mjs +173 -161
  10. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-domain.mjs +16 -16
  12. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-builder.mjs +1946 -1947
  14. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-components.mjs +1902 -904
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +96 -89
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity-create-entity.command-DyXF9zAh.mjs +52 -0
  20. package/fesm2022/acorex-platform-layout-entity-create-entity.command-DyXF9zAh.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-layout-entity.mjs +2237 -1834
  22. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-views.mjs +64 -62
  24. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-widget-core.mjs +2758 -0
  26. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -0
  27. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-C2Qn1YAW.mjs → acorex-platform-layout-widgets-button-widget-designer.component-C_3IWNkj.mjs} +6 -6
  28. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C_3IWNkj.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CJltEgut.mjs} +5 -5
  30. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CJltEgut.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-pM-TIuk0.mjs} +5 -5
  32. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-pM-TIuk0.mjs.map +1 -0
  33. package/fesm2022/{acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-BqI96-fU.mjs} +5 -5
  34. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-BqI96-fU.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-C-AhenaM.mjs} +5 -5
  36. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-view.component-C-AhenaM.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs → acorex-platform-layout-widgets-extra-properties-widget-edit.component-DCAya5ne.mjs} +5 -5
  38. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-edit.component-DCAya5ne.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs → acorex-platform-layout-widgets-extra-properties-widget-view.component-D-PnBqLb.mjs} +5 -5
  40. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-view.component-D-PnBqLb.mjs.map +1 -0
  41. package/fesm2022/{acorex-platform-widgets-file-list-popup.component-rW2RD35f.mjs → acorex-platform-layout-widgets-file-list-popup.component-DuuFHWvB.mjs} +10 -10
  42. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-DuuFHWvB.mjs.map +1 -0
  43. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-DNvnQ4Mc.mjs → acorex-platform-layout-widgets-page-widget-designer.component-Bss0xUcu.mjs} +8 -8
  44. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-Bss0xUcu.mjs.map +1 -0
  45. package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-CPVRbE8B.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-Cy9mHnNP.mjs} +14 -14
  46. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Cy9mHnNP.mjs.map +1 -0
  47. package/fesm2022/{acorex-platform-widgets-tabular-data-view-popup.component-Dmg5DdX8.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DznLtuer.mjs} +6 -5
  48. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DznLtuer.mjs.map +1 -0
  49. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-yADN3Xji.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-ndOUSFi9.mjs} +6 -7
  50. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-ndOUSFi9.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-widgets.mjs → acorex-platform-layout-widgets.mjs} +9918 -8826
  52. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -0
  53. package/fesm2022/acorex-platform-native.mjs +7 -7
  54. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  55. package/fesm2022/acorex-platform-runtime.mjs +40 -40
  56. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  57. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-B1PT6FtZ.mjs +115 -0
  58. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-B1PT6FtZ.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-rdKxuMC_.mjs +742 -0
  60. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-rdKxuMC_.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-4g19A3eI.mjs +101 -0
  62. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-4g19A3eI.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs → acorex-platform-themes-default-entity-master-single-view.component-B8gx5cG7.mjs} +17 -17
  64. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-B8gx5cG7.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs → acorex-platform-themes-default-error-401.component-CcvGfdhu.mjs} +4 -4
  66. package/fesm2022/{acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs.map → acorex-platform-themes-default-error-401.component-CcvGfdhu.mjs.map} +1 -1
  67. package/fesm2022/{acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs → acorex-platform-themes-default-error-404.component-4-CaEsnV.mjs} +4 -4
  68. package/fesm2022/{acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs.map → acorex-platform-themes-default-error-404.component-4-CaEsnV.mjs.map} +1 -1
  69. package/fesm2022/{acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs → acorex-platform-themes-default-error-offline.component-BNecbFEj.mjs} +4 -4
  70. package/fesm2022/{acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs.map → acorex-platform-themes-default-error-offline.component-BNecbFEj.mjs.map} +1 -1
  71. package/fesm2022/acorex-platform-themes-default.mjs +117 -51
  72. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  73. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BgEh06Tn.mjs → acorex-platform-themes-shared-icon-chooser-view.component-Dc_Txe32.mjs} +5 -5
  74. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-Dc_Txe32.mjs.map +1 -0
  75. package/fesm2022/{acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs → acorex-platform-themes-shared-settings.provider-DY2xFnrv.mjs} +9 -9
  76. package/fesm2022/acorex-platform-themes-shared-settings.provider-DY2xFnrv.mjs.map +1 -0
  77. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-AeOQxjbS.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-hgWLhhle.mjs} +5 -5
  78. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-hgWLhhle.mjs.map +1 -0
  79. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-DEVzRd6-.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-CY3JZK_W.mjs} +5 -5
  80. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-CY3JZK_W.mjs.map +1 -0
  81. package/fesm2022/acorex-platform-themes-shared.mjs +217 -75
  82. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  83. package/fesm2022/acorex-platform-workflow.mjs +27 -39
  84. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  85. package/layout/builder/README.md +1577 -3
  86. package/layout/builder/index.d.ts +735 -813
  87. package/layout/components/index.d.ts +384 -433
  88. package/layout/designer/index.d.ts +8 -6
  89. package/layout/entity/index.d.ts +953 -338
  90. package/layout/views/index.d.ts +13 -14
  91. package/layout/widget-core/README.md +4 -0
  92. package/layout/widget-core/index.d.ts +959 -0
  93. package/layout/widgets/README.md +4 -0
  94. package/{widgets → layout/widgets}/index.d.ts +768 -655
  95. package/package.json +14 -10
  96. package/themes/shared/index.d.ts +2 -2
  97. package/workflow/index.d.ts +3 -173
  98. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-BXbkGGei.mjs +0 -115
  99. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-BXbkGGei.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-gQIK6PIx.mjs +0 -706
  101. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-gQIK6PIx.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Bp1JLsj1.mjs +0 -101
  103. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Bp1JLsj1.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BgEh06Tn.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-AeOQxjbS.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DEVzRd6-.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-C2Qn1YAW.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-CzEFmKWG.mjs +0 -84
  111. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-CzEFmKWG.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-BXPrXy-h.mjs +0 -55
  113. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-BXPrXy-h.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-KYCQ2qTJ.mjs +0 -92
  115. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-KYCQ2qTJ.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-BVZ7lWm9.mjs +0 -55
  117. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-BVZ7lWm9.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs.map +0 -1
  120. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs.map +0 -1
  121. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs.map +0 -1
  122. package/fesm2022/acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs.map +0 -1
  123. package/fesm2022/acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs.map +0 -1
  124. package/fesm2022/acorex-platform-widgets-file-list-popup.component-rW2RD35f.mjs.map +0 -1
  125. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DNvnQ4Mc.mjs.map +0 -1
  126. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-Cydlpsat.mjs +0 -40
  127. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-Cydlpsat.mjs.map +0 -1
  128. package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-CPVRbE8B.mjs.map +0 -1
  129. package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-Dmg5DdX8.mjs.map +0 -1
  130. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-yADN3Xji.mjs.map +0 -1
  131. package/fesm2022/acorex-platform-widgets.mjs.map +0 -1
  132. package/widgets/README.md +0 -4
@@ -0,0 +1,742 @@
1
+ import { AXActionSheetModule } from '@acorex/components/action-sheet';
2
+ import * as i7 from '@acorex/components/data-table';
3
+ import { AXDataTableModule } from '@acorex/components/data-table';
4
+ import { AXDrawerModule } from '@acorex/components/drawer';
5
+ import * as i1$1 from '@acorex/core/platform';
6
+ import * as i0 from '@angular/core';
7
+ import { inject, input, viewChild, signal, ViewEncapsulation, Component, computed, effect, Input, ChangeDetectionStrategy } from '@angular/core';
8
+ import { Router, ActivatedRoute, RouterModule } from '@angular/router';
9
+ import { AXBadgeModule } from '@acorex/components/badge';
10
+ import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
11
+ import * as i3$1 from '@acorex/components/button';
12
+ import { AXButtonModule } from '@acorex/components/button';
13
+ import * as i2 from '@acorex/components/decorators';
14
+ import { AXDecoratorModule } from '@acorex/components/decorators';
15
+ import { AXDialogModule } from '@acorex/components/dialog';
16
+ import * as i5 from '@acorex/components/dropdown';
17
+ import { AXDropdownModule } from '@acorex/components/dropdown';
18
+ import { AXFormModule } from '@acorex/components/form';
19
+ import { AXLoadingModule } from '@acorex/components/loading';
20
+ import * as i3$2 from '@acorex/components/popover';
21
+ import { AXPopoverModule } from '@acorex/components/popover';
22
+ import * as i6 from '@acorex/components/search-box';
23
+ import { AXSearchBoxModule } from '@acorex/components/search-box';
24
+ import { AXTabsModule } from '@acorex/components/tabs';
25
+ import { AXTooltipModule } from '@acorex/components/tooltip';
26
+ import * as i10 from '@acorex/core/translation';
27
+ import { AXTranslationService, AXTranslationModule, translateSync } from '@acorex/core/translation';
28
+ import { AXPAuthModule } from '@acorex/platform/auth';
29
+ import { AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutToolbarComponent, AXPStateMessageComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPQueryColumnsComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';
30
+ import * as i7$1 from '@acorex/platform/layout/widget-core';
31
+ import { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';
32
+ import { AXPWidgetsModule } from '@acorex/platform/layout/widgets';
33
+ import { DragDropModule } from '@angular/cdk/drag-drop';
34
+ import * as i1 from '@angular/common';
35
+ import { CommonModule } from '@angular/common';
36
+ import { FormsModule } from '@angular/forms';
37
+ import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
38
+ import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
39
+ import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
40
+ import * as i3 from '@acorex/components/skeleton';
41
+ import { AXSkeletonModule } from '@acorex/components/skeleton';
42
+ import * as i2$1 from '@acorex/components/tree-view';
43
+ import { AXTreeViewModule } from '@acorex/components/tree-view';
44
+ import { AXPWorkflowService } from '@acorex/platform/workflow';
45
+ import { AXPEntityResolver, AXPEntityListViewColumnViewModel } from '@acorex/platform/layout/entity';
46
+
47
+ class AXPEntityCategoryComponent {
48
+ constructor() {
49
+ this.entityResolver = inject(AXPEntityResolver);
50
+ this.translate = inject(AXTranslationService);
51
+ this.workflow = inject(AXPWorkflowService);
52
+ this.vm = input.required(...(ngDevMode ? [{ debugName: "vm" }] : []));
53
+ this.tree = viewChild('tree', ...(ngDevMode ? [{ debugName: "tree" }] : []));
54
+ this.searchValue = input('', ...(ngDevMode ? [{ debugName: "searchValue" }] : []));
55
+ this.isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
56
+ this.basicQueryEvent = {
57
+ skip: 0,
58
+ take: 1000,
59
+ };
60
+ this.treeItems = signal([
61
+ {
62
+ expand: true,
63
+ children: [],
64
+ },
65
+ ], ...(ngDevMode ? [{ debugName: "treeItems" }] : []));
66
+ }
67
+ ngOnInit() {
68
+ this.getCategories();
69
+ }
70
+ async handleCategorySearchChange(e) {
71
+ if (this.categoryEntityDef) {
72
+ this.isLoading.set(true);
73
+ const categoryInlineFilters = this.categoryEntityDef.properties.filter((p) => p.options?.filter?.inline?.enabled);
74
+ const event = {
75
+ ...this.basicQueryEvent,
76
+ filter: {
77
+ filters: [
78
+ {
79
+ filters: categoryInlineFilters.map((cif) => ({
80
+ field: cif.name,
81
+ operator: {
82
+ type: 'contains',
83
+ },
84
+ value: e.value,
85
+ })),
86
+ logic: 'or',
87
+ },
88
+ {
89
+ value: true,
90
+ field: this.categoryEntityDef.parentKey,
91
+ operator: {
92
+ type: 'isEmpty',
93
+ },
94
+ },
95
+ ],
96
+ logic: 'and',
97
+ },
98
+ };
99
+ const res = await this.categoryEntityQueryFunc(event);
100
+ this.treeItems.update((prev) => prev.map((item) => ({ ...item, children: res.items })));
101
+ this.isLoading.set(false);
102
+ }
103
+ }
104
+ async getCategories() {
105
+ this.isLoading.set(true);
106
+ this.categoryEntityDef = await this.getCategoryEntityDef();
107
+ this.categoryEntityQueryFunc = this.categoryEntityDef?.queries.list?.execute;
108
+ const res = await this.categoryEntityQueryFunc(this.basicQueryEvent);
109
+ const textField = this.vm().entityDef.category?.textField || 'title';
110
+ const valueField = this.vm().entityDef.category?.valueField || 'id';
111
+ const updatedItems = {
112
+ expand: true,
113
+ [textField]: await this.translate.translateAsync('@general:terms.interface.selection.all-items'),
114
+ [valueField]: 'all',
115
+ children: res.items,
116
+ };
117
+ this.treeItems.update((prev) => prev.map((_) => updatedItems));
118
+ this.isLoading.set(false);
119
+ }
120
+ async handleCollapseChanged(e) {
121
+ await this.loadChildrenAtNode(e.data.id);
122
+ }
123
+ async getCategoryEntityDef() {
124
+ const [module, entity] = this.vm().entityDef.category?.entity?.split('.') || [];
125
+ return await this.entityResolver.get(module, entity);
126
+ }
127
+ handleNodeClick(event) {
128
+ const filters = this.vm()
129
+ .entityDef.category?.applyConditions?.map((f) => {
130
+ return event.data[f.value] !== 'all'
131
+ ? {
132
+ field: f.name,
133
+ value: event.data[f.value],
134
+ operator: f.operator,
135
+ }
136
+ : null;
137
+ })
138
+ .filter((item) => item != null);
139
+ const viewFilters = this.vm()
140
+ .view()
141
+ .conditions.map((i) => ({ ...i, field: i.name }));
142
+ const newFilters = [...viewFilters, ...filters];
143
+ // this.vm().filterQueries.update((prev) => [...prev, ...filters!]);
144
+ this.vm().dataSource.filter({
145
+ filters: newFilters,
146
+ logic: 'and',
147
+ });
148
+ this.vm().dataSource.refresh();
149
+ }
150
+ //#region ---- Utility Methods ----
151
+ /** Loads children for a given node id and updates the tree in place. */
152
+ async loadChildrenAtNode(targetId) {
153
+ this.tree()?.setNodeLoading(targetId, true);
154
+ const event = {
155
+ ...this.basicQueryEvent,
156
+ filter: {
157
+ field: this.categoryEntityDef?.parentKey,
158
+ value: targetId,
159
+ operator: { type: 'equal' },
160
+ },
161
+ };
162
+ const children = await this.categoryEntityQueryFunc(event);
163
+ const updateChildrenAtPath = (items, id) => {
164
+ return items.map((item) => {
165
+ if (item.id === id) {
166
+ return { ...item, children: children.items };
167
+ }
168
+ if (item.children?.length) {
169
+ return { ...item, children: updateChildrenAtPath(item.children, id) };
170
+ }
171
+ return item;
172
+ });
173
+ };
174
+ this.treeItems.update((prev) => prev.map((i) => ({ ...i, children: updateChildrenAtPath(prev[0].children, targetId) })));
175
+ this.tree()?.setNodeLoading(targetId, false);
176
+ }
177
+ /** Returns the module.entity key for the configured category entity. */
178
+ getCategoryEntityKey() {
179
+ return this.vm().entityDef.category?.entity;
180
+ }
181
+ /** Refresh tree after CRUD operations. */
182
+ async refreshAfterChange(parentId) {
183
+ if (parentId) {
184
+ await this.loadChildrenAtNode(parentId);
185
+ }
186
+ else {
187
+ await this.getCategories();
188
+ }
189
+ }
190
+ //#endregion
191
+ //#region ---- UI Handlers ----
192
+ /** Create a new root category node. */
193
+ async handleCreateRootClick(e) {
194
+ e.nativeEvent.preventDefault();
195
+ e.nativeEvent.stopPropagation();
196
+ await this.workflow.execute('create-entity', {
197
+ entity: this.getCategoryEntityKey(),
198
+ options: { process: { redirect: false } },
199
+ });
200
+ await this.refreshAfterChange();
201
+ }
202
+ /** Create a new child under the given node. */
203
+ async handleCreateChildClick(node, e) {
204
+ e.nativeEvent.preventDefault();
205
+ e.nativeEvent.stopPropagation();
206
+ const parentKey = this.categoryEntityDef?.parentKey;
207
+ const data = {};
208
+ if (parentKey) {
209
+ data[parentKey] = node.id;
210
+ }
211
+ await this.workflow.execute('create-entity', {
212
+ entity: this.getCategoryEntityKey(),
213
+ data,
214
+ options: { process: { redirect: false, canCreateNewOne: true } },
215
+ });
216
+ await this.refreshAfterChange(node.id);
217
+ }
218
+ /** Update the given node. */
219
+ async handleEditNodeClick(node, e) {
220
+ e.nativeEvent.preventDefault();
221
+ e.nativeEvent.stopPropagation();
222
+ await this.workflow.execute('quick-modify-entity', {
223
+ entity: this.getCategoryEntityKey(),
224
+ data: node,
225
+ options: { layout: { size: 'md' } },
226
+ });
227
+ await this.refreshAfterChange(node[this.categoryEntityDef?.parentKey]);
228
+ }
229
+ /** Delete the given node. */
230
+ async handleDeleteNodeClick(node, e) {
231
+ e.nativeEvent.preventDefault();
232
+ e.nativeEvent.stopPropagation();
233
+ await this.workflow.execute('delete-entity', {
234
+ entity: this.getCategoryEntityKey(),
235
+ data: node,
236
+ options: { process: { showResult: true } },
237
+ });
238
+ await this.refreshAfterChange(node[this.categoryEntityDef?.parentKey]);
239
+ }
240
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
241
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPEntityCategoryComponent, isStandalone: true, selector: "axp-entity-category", inputs: { vm: { classPropertyName: "vm", publicName: "vm", isSignal: true, isRequired: true, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, isSignal: true }], ngImport: i0, template: "<axp-layout-header>\n <axp-layout-title>{{\n vm().entityDef.category?.title || '@general:terms.classification.category' | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n (onValueChanged)=\"handleCategorySearchChange($event)\"\n [delayTime]=\"300\"\n [placeholder]=\"'@general:terms.interface.category.search.placeholder' | translate | async\"\n >\n </ax-search-box>\n </axp-layout-toolbar>\n</axp-layout-header>\n<axp-layout-content>\n @if (isLoading()) {\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-3\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n </div>\n } @else if (treeItems()[0].children.length) {\n <div class=\"ax-px-4 ax-max-h-[calc(100vh-250px)] ax-overflow-auto\">\n <ax-tree-view\n (onNodeClick)=\"handleNodeClick($event)\"\n (onCollapsedChanged)=\"handleCollapseChanged($event)\"\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n #treeRef\n [textField]=\"vm().entityDef.category?.textField || 'title'\"\n [valueField]=\"vm().entityDef.category?.valueField || 'id'\"\n [expandedField]=\"'expand'\"\n [items]=\"treeItems()\"\n #tree\n >\n </ax-tree-view>\n </div>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@general:terms.interface.category.search.no-records.title'\"\n [description]=\"'@general:terms.interface.category.search.no-records.description'\"\n >\n </axp-state-message>\n }\n\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-2 ax-overflow-hidden\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-min-w-0\">\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n <span class=\"ax-truncate\">{{ item.title }}</span>\n </div>\n @if (item.id && item.id !== 'all') {\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n <ax-button class=\"ax-xs\" color=\"default\" look=\"blank\" (onClick)=\"$event.nativeEvent.stopPropagation()\">\n <ax-icon class=\"fas fa-ellipsis-v\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"handleCreateChildClick(item, $event)\"\n look=\"blank\"\n color=\"default\"\n text=\"Add New Child\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button-item>\n <ax-button-item (onClick)=\"handleEditNodeClick(item, $event)\" look=\"blank\" text=\"Edit\">\n <ax-icon class=\"fas fa-pen\"></ax-icon>\n </ax-button-item>\n <ax-button-item\n (onClick)=\"handleDeleteNodeClick(item, $event)\"\n color=\"danger\"\n look=\"blank\"\n text=\"Delete\"\n >\n <ax-icon class=\"fas fa-trash\"></ax-icon>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n } @else if (item.id === 'all') {\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n <ax-button class=\"ax-xs\" (onClick)=\"handleCreateRootClick($event)\" look=\"blank\" color=\"default\">\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </ng-template>\n</axp-layout-content>\n", styles: ["ax-tree-view-item .ax-tree-view-items{width:100%;min-width:0px}ax-tree-view-item .ax-tree-view-items>div{width:100%}ax-tree-view-item .ax-state-tree-view-active{background-color:rgb(var(--ax-sys-color-light-surface))!important;color:rgb(var(--ax-sys-color-on-light-surface))!important;border-color:rgb(var(--ax-sys-color-border-light-surface))!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTreeViewModule }, { kind: "component", type: i2$1.AXTreeViewComponent, selector: "ax-tree-view", inputs: ["items", "showCheckbox", "hasCheckboxField", "selectionMode", "selectionBehavior", "selectionScope", "focusNodeEnabled", "valueField", "textField", "visibleField", "disableField", "hasChildField", "selectedField", "expandedField", "tooltipField", "childrenField", "activeField", "indeterminateField", "parentField", "iconField", "toggleIcons", "look", "showEmptyNodeMassage", "itemTemplate", "emptyTemplate", "expandOn"], outputs: ["onSelectionChanged", "onItemSelectedChanged", "onNodeClick", "onCollapsedChanged", "onNodedbClick"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { 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, " }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutToolbarComponent, selector: "axp-layout-toolbar" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i3$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i5.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "variant"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
242
+ }
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityCategoryComponent, decorators: [{
244
+ type: Component,
245
+ args: [{ selector: 'axp-entity-category', standalone: true, encapsulation: ViewEncapsulation.None, imports: [
246
+ CommonModule,
247
+ AXDecoratorModule,
248
+ AXTreeViewModule,
249
+ AXSkeletonModule,
250
+ AXPThemeLayoutBlockComponent,
251
+ AXSearchBoxModule,
252
+ AXPThemeLayoutHeaderComponent,
253
+ AXPThemeLayoutToolbarComponent,
254
+ AXTranslationModule,
255
+ AXButtonModule,
256
+ AXDropdownModule,
257
+ AXPStateMessageComponent
258
+ ], template: "<axp-layout-header>\n <axp-layout-title>{{\n vm().entityDef.category?.title || '@general:terms.classification.category' | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n (onValueChanged)=\"handleCategorySearchChange($event)\"\n [delayTime]=\"300\"\n [placeholder]=\"'@general:terms.interface.category.search.placeholder' | translate | async\"\n >\n </ax-search-box>\n </axp-layout-toolbar>\n</axp-layout-header>\n<axp-layout-content>\n @if (isLoading()) {\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-3\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n </div>\n } @else if (treeItems()[0].children.length) {\n <div class=\"ax-px-4 ax-max-h-[calc(100vh-250px)] ax-overflow-auto\">\n <ax-tree-view\n (onNodeClick)=\"handleNodeClick($event)\"\n (onCollapsedChanged)=\"handleCollapseChanged($event)\"\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n #treeRef\n [textField]=\"vm().entityDef.category?.textField || 'title'\"\n [valueField]=\"vm().entityDef.category?.valueField || 'id'\"\n [expandedField]=\"'expand'\"\n [items]=\"treeItems()\"\n #tree\n >\n </ax-tree-view>\n </div>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@general:terms.interface.category.search.no-records.title'\"\n [description]=\"'@general:terms.interface.category.search.no-records.description'\"\n >\n </axp-state-message>\n }\n\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-2 ax-overflow-hidden\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-min-w-0\">\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n <span class=\"ax-truncate\">{{ item.title }}</span>\n </div>\n @if (item.id && item.id !== 'all') {\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n <ax-button class=\"ax-xs\" color=\"default\" look=\"blank\" (onClick)=\"$event.nativeEvent.stopPropagation()\">\n <ax-icon class=\"fas fa-ellipsis-v\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"handleCreateChildClick(item, $event)\"\n look=\"blank\"\n color=\"default\"\n text=\"Add New Child\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button-item>\n <ax-button-item (onClick)=\"handleEditNodeClick(item, $event)\" look=\"blank\" text=\"Edit\">\n <ax-icon class=\"fas fa-pen\"></ax-icon>\n </ax-button-item>\n <ax-button-item\n (onClick)=\"handleDeleteNodeClick(item, $event)\"\n color=\"danger\"\n look=\"blank\"\n text=\"Delete\"\n >\n <ax-icon class=\"fas fa-trash\"></ax-icon>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n } @else if (item.id === 'all') {\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n <ax-button class=\"ax-xs\" (onClick)=\"handleCreateRootClick($event)\" look=\"blank\" color=\"default\">\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </ng-template>\n</axp-layout-content>\n", styles: ["ax-tree-view-item .ax-tree-view-items{width:100%;min-width:0px}ax-tree-view-item .ax-tree-view-items>div{width:100%}ax-tree-view-item .ax-state-tree-view-active{background-color:rgb(var(--ax-sys-color-light-surface))!important;color:rgb(var(--ax-sys-color-on-light-surface))!important;border-color:rgb(var(--ax-sys-color-border-light-surface))!important}\n"] }]
259
+ }] });
260
+
261
+ class AXPEntityMasterToolbarViewComponent {
262
+ constructor() {
263
+ this.layoutService = inject(AXPLayoutThemeService);
264
+ this.parent = inject(AXPEntityMasterListViewComponent);
265
+ this.router = inject(Router);
266
+ this.activeRoute = inject(ActivatedRoute);
267
+ this.isInitializing = false;
268
+ this.pendingInitialFilters = true;
269
+ this.pendingInitialSorts = true;
270
+ this.initialFilters = signal([], ...(ngDevMode ? [{ debugName: "initialFilters" }] : []));
271
+ this.filtersDefinitions = signal([], ...(ngDevMode ? [{ debugName: "filtersDefinitions" }] : []));
272
+ this.viewQueries = computed(() => this.vm.views().map((v) => ({
273
+ name: v.name,
274
+ fixed: false,
275
+ title: v.title,
276
+ columns: v.columns,
277
+ conditions: v.conditions.map((c) => ({
278
+ field: c.name,
279
+ operator: c.operator,
280
+ value: c.value,
281
+ })),
282
+ sorts: v.sorts,
283
+ })), ...(ngDevMode ? [{ debugName: "viewQueries" }] : []));
284
+ this.selectedViewQuery = computed(() => ({
285
+ name: this.vm.view().name,
286
+ fixed: false,
287
+ title: this.vm.view().title,
288
+ columns: this.vm.view().columns,
289
+ conditions: this.vm.view().conditions.map((c) => ({
290
+ field: c.name,
291
+ operator: c.operator,
292
+ value: c.value,
293
+ })),
294
+ sorts: this.vm.view().sorts,
295
+ }), ...(ngDevMode ? [{ debugName: "selectedViewQuery" }] : []));
296
+ // Debounced apply to coalesce multiple UI changes (filters/sorts/columns)
297
+ this.applyTimer = null;
298
+ this.#effect = effect(() => {
299
+ // Keep definitions up to date; initial filters are set explicitly from settings or view
300
+ this.filtersDefinitions.set(this.vm.filtersDef);
301
+ }, ...(ngDevMode ? [{ debugName: "#effect" }] : []));
302
+ this.sortQueries = computed(() => this.vm
303
+ .sortedFields()
304
+ .filter((s) => !!s.dir)
305
+ .map((s) => ({ name: s.name, dir: s.dir })), ...(ngDevMode ? [{ debugName: "sortQueries" }] : []));
306
+ this.sortDefinitions = computed(() => this.vm.sortableFields().map((s) => ({
307
+ name: s.name,
308
+ title: s.title,
309
+ dir: s.dir,
310
+ })), ...(ngDevMode ? [{ debugName: "sortDefinitions" }] : []));
311
+ }
312
+ async ngOnInit() {
313
+ // Prefer saved settings (view/columns/sorts/filters) if available, then apply
314
+ await this.vm.setView();
315
+ this.filtersDefinitions.set(this.vm.filtersDef);
316
+ this.isInitializing = true;
317
+ // this.pendingInitialFilters = true;
318
+ // this.pendingInitialSorts = true;
319
+ this.setInitialFiltersFromSettingsOrView();
320
+ // Ensure initial load even when filters/sorts are absent
321
+ setTimeout(() => {
322
+ this.isInitializing = false;
323
+ this.scheduleApply();
324
+ }, 0);
325
+ }
326
+ scheduleApply() {
327
+ clearTimeout(this.applyTimer);
328
+ this.applyTimer = setTimeout(() => {
329
+ this.vm.applyFilterAndSort();
330
+ }, 50);
331
+ }
332
+ async onViewChanged(view) {
333
+ await this.vm.setView(view.name);
334
+ // Sync query param immediately on tab change
335
+ this.router.navigate([], {
336
+ relativeTo: this.activeRoute,
337
+ queryParams: { view: view.name },
338
+ queryParamsHandling: 'merge',
339
+ replaceUrl: true,
340
+ });
341
+ this.isInitializing = true;
342
+ this.pendingInitialFilters = true;
343
+ this.pendingInitialSorts = true;
344
+ this.setInitialFiltersFromSettingsOrView();
345
+ // Ensure initial load after view change
346
+ setTimeout(() => {
347
+ this.isInitializing = false;
348
+ this.scheduleApply();
349
+ }, 0);
350
+ }
351
+ #effect;
352
+ setInitialFiltersFromSettingsOrView() {
353
+ const saved = this.vm.filterQueries();
354
+ const viewConditions = this.vm.view().conditions.map((c) => c.name);
355
+ if (saved && saved.length) {
356
+ this.initialFilters.set(saved.map((s) => ({ ...s, hidden: viewConditions.includes(s.field) })));
357
+ return;
358
+ }
359
+ this.initialFilters.set(this.vm.view().conditions.map((c) => ({
360
+ field: c.name,
361
+ operator: c.operator,
362
+ value: c.value,
363
+ hidden: true,
364
+ })));
365
+ }
366
+ onFiltersChanged(filters) {
367
+ if (this.isInitializing || this.pendingInitialFilters) {
368
+ this.pendingInitialFilters = false;
369
+ return;
370
+ }
371
+ this.vm.filterQueries.set(filters);
372
+ // Persist filters per module/entity/view
373
+ this.vm.saveSettings('filters', filters);
374
+ this.scheduleApply();
375
+ }
376
+ onSortQueriesChange(e) {
377
+ if (this.isInitializing || this.pendingInitialSorts) {
378
+ this.pendingInitialSorts = false;
379
+ return;
380
+ }
381
+ this.vm.sortedFields.set(e.map((s) => ({
382
+ name: s.name,
383
+ title: s.name,
384
+ dir: s.dir,
385
+ })));
386
+ // Persist sorts per module/entity/view
387
+ this.vm.saveSettings('sorts', e);
388
+ this.scheduleApply();
389
+ }
390
+ onColumnsChange(columns) {
391
+ const keyOf = (c) => c.column?.options?.dataPath ?? c.name;
392
+ this.vm.columns.update((prev) => {
393
+ const byKey = new Map(prev.map((c) => [keyOf(c), c]));
394
+ return columns.map((newColumn) => {
395
+ const existing = byKey.get(keyOf(newColumn));
396
+ return new AXPEntityListViewColumnViewModel(existing.property, {
397
+ ...existing.column,
398
+ options: {
399
+ ...existing.column.options,
400
+ visible: newColumn.visible,
401
+ },
402
+ });
403
+ });
404
+ });
405
+ // Persist column order/visibility
406
+ this.vm.onColumnsChanged(this.vm.columns());
407
+ // Use debounced apply to avoid triple refresh when combined with sorts/filters
408
+ // this.scheduleApply();
409
+ }
410
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
411
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPEntityMasterToolbarViewComponent, isStandalone: true, selector: "axp-entity-master-toolbar-view", inputs: { vm: ["viewModel", "vm"] }, host: { classAttribute: "ax-w-full" }, ngImport: i0, template: "<!-- <axp-entity-view-toolbar [viewModel]=\"vm\"></axp-entity-view-toolbar> -->\n<axp-query-views\n id=\"axp-toolbar-view-selector\"\n [views]=\"viewQueries()\"\n [selectedView]=\"selectedViewQuery()\"\n (selectedViewChange)=\"onViewChanged($event)\"\n></axp-query-views>\n<div class=\"ax-flex ax-items-center ax-gap-2 ax-border-b ax-border-light w-full\">\n <!-- <axp-entity-filter-toolbar [viewModel]=\"vm\"></axp-entity-filter-toolbar> -->\n <axp-query-filters\n id=\"axp-toolbar-filters\"\n [filtersDefinitions]=\"filtersDefinitions()\"\n [initialFilters]=\"initialFilters()\"\n (onFiltersChanged)=\"onFiltersChanged($event)\"\n ></axp-query-filters>\n\n <div class=\"ax-flex ax-items-center ax-gap-1 md:ax-gap-2\">\n <ax-button id=\"axp-toolbar-btn-columns\" [iconOnly]=\"true\" #columnButton [color]=\"'default'\">\n <i class=\"fa-light fa-table-columns\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-columns\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"30\"\n [target]=\"columnButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #popover\n >\n <div class=\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\">\n <ax-header class=\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\">\n {{ '@general:terms.common.columns' | translate | async }}\n </ax-header>\n <div class=\"ax-py-2 ax-px-4\">\n <axp-query-columns [columns]=\"vm.columns()\" (columnsChange)=\"onColumnsChange($event)\"></axp-query-columns>\n <!-- <axp-list-view-option-columns [viewModel]=\"vm\"></axp-list-view-option-columns> -->\n </div>\n </div>\n </ax-popover>\n @if (vm.canSort()) {\n <ax-button id=\"axp-toolbar-btn-sort\" [iconOnly]=\"true\" [text]=\"'Sorts'\" #sortButton [color]=\"'default'\">\n <i class=\"fa-light fa-sort-amount-up\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-sort\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"sortButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #popover\n >\n <div class=\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\">\n <ax-header class=\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\">\n {{ '@general:terms.common.sorts' | translate | async }}\n </ax-header>\n <div class=\"ax-py-2 ax-px-4\">\n <!-- <axp-list-view-option-sorting [viewModel]=\"vm\"></axp-list-view-option-sorting> -->\n <axp-query-sorts\n [sortDefinitions]=\"sortDefinitions()\"\n (sortQueriesChange)=\"onSortQueriesChange($event)\"\n [initialSortQueries]=\"sortQueries()\"\n ></axp-query-sorts>\n </div>\n </div>\n </ax-popover>\n }\n @if (layoutService.isSmall()) {\n <ax-button\n id=\"axp-toolbar-btn-category\"\n (onClick)=\"parent.toggleCategoryDrawer()\"\n [iconOnly]=\"true\"\n [color]=\"'default'\"\n >\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.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: "component", type: AXPQueryFiltersComponent, selector: "axp-query-filters", inputs: ["filtersDefinitions", "initialFilters"], outputs: ["onFiltersChanged"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i3$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXPQuerySortsComponent, selector: "axp-query-sorts", inputs: ["sortDefinitions", "initialSortQueries"], outputs: ["sortDefinitionsChange", "sortQueriesChange"] }, { kind: "component", type: AXPQueryViewsComponent, selector: "axp-query-views", inputs: ["views", "selectedView"], outputs: ["viewsChange", "selectedViewChange"] }, { kind: "component", type: AXPQueryColumnsComponent, selector: "axp-query-columns", inputs: ["columns"], outputs: ["columnsChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
412
+ }
413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, decorators: [{
414
+ type: Component,
415
+ args: [{ selector: 'axp-entity-master-toolbar-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
416
+ CommonModule,
417
+ AXButtonModule,
418
+ AXDecoratorModule,
419
+ AXTranslationModule,
420
+ AXPQueryFiltersComponent,
421
+ AXPopoverModule,
422
+ AXPQuerySortsComponent,
423
+ AXPQueryViewsComponent,
424
+ AXPQueryColumnsComponent,
425
+ ], host: {
426
+ class: 'ax-w-full',
427
+ }, template: "<!-- <axp-entity-view-toolbar [viewModel]=\"vm\"></axp-entity-view-toolbar> -->\n<axp-query-views\n id=\"axp-toolbar-view-selector\"\n [views]=\"viewQueries()\"\n [selectedView]=\"selectedViewQuery()\"\n (selectedViewChange)=\"onViewChanged($event)\"\n></axp-query-views>\n<div class=\"ax-flex ax-items-center ax-gap-2 ax-border-b ax-border-light w-full\">\n <!-- <axp-entity-filter-toolbar [viewModel]=\"vm\"></axp-entity-filter-toolbar> -->\n <axp-query-filters\n id=\"axp-toolbar-filters\"\n [filtersDefinitions]=\"filtersDefinitions()\"\n [initialFilters]=\"initialFilters()\"\n (onFiltersChanged)=\"onFiltersChanged($event)\"\n ></axp-query-filters>\n\n <div class=\"ax-flex ax-items-center ax-gap-1 md:ax-gap-2\">\n <ax-button id=\"axp-toolbar-btn-columns\" [iconOnly]=\"true\" #columnButton [color]=\"'default'\">\n <i class=\"fa-light fa-table-columns\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-columns\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"30\"\n [target]=\"columnButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #popover\n >\n <div class=\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\">\n <ax-header class=\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\">\n {{ '@general:terms.common.columns' | translate | async }}\n </ax-header>\n <div class=\"ax-py-2 ax-px-4\">\n <axp-query-columns [columns]=\"vm.columns()\" (columnsChange)=\"onColumnsChange($event)\"></axp-query-columns>\n <!-- <axp-list-view-option-columns [viewModel]=\"vm\"></axp-list-view-option-columns> -->\n </div>\n </div>\n </ax-popover>\n @if (vm.canSort()) {\n <ax-button id=\"axp-toolbar-btn-sort\" [iconOnly]=\"true\" [text]=\"'Sorts'\" #sortButton [color]=\"'default'\">\n <i class=\"fa-light fa-sort-amount-up\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-sort\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"sortButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #popover\n >\n <div class=\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\">\n <ax-header class=\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\">\n {{ '@general:terms.common.sorts' | translate | async }}\n </ax-header>\n <div class=\"ax-py-2 ax-px-4\">\n <!-- <axp-list-view-option-sorting [viewModel]=\"vm\"></axp-list-view-option-sorting> -->\n <axp-query-sorts\n [sortDefinitions]=\"sortDefinitions()\"\n (sortQueriesChange)=\"onSortQueriesChange($event)\"\n [initialSortQueries]=\"sortQueries()\"\n ></axp-query-sorts>\n </div>\n </div>\n </ax-popover>\n }\n @if (layoutService.isSmall()) {\n <ax-button\n id=\"axp-toolbar-btn-category\"\n (onClick)=\"parent.toggleCategoryDrawer()\"\n [iconOnly]=\"true\"\n [color]=\"'default'\"\n >\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n </div>\n</div>\n" }]
428
+ }], propDecorators: { vm: [{
429
+ type: Input,
430
+ args: ['viewModel']
431
+ }] } });
432
+
433
+ class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {
434
+ constructor(platform) {
435
+ super();
436
+ this.platform = platform;
437
+ this.activeRoute = inject(ActivatedRoute);
438
+ this.router = inject(Router);
439
+ this.vm = this.activeRoute.snapshot.data['vm'];
440
+ //
441
+ this.store = inject(AXPLayoutThemeService);
442
+ //
443
+ this.searchBarShown = signal(true, ...(ngDevMode ? [{ debugName: "searchBarShown" }] : []));
444
+ this.activeEndSideView = signal('column', ...(ngDevMode ? [{ debugName: "activeEndSideView" }] : []));
445
+ this.categorySearchValue = signal('', ...(ngDevMode ? [{ debugName: "categorySearchValue" }] : []));
446
+ // @ViewChild('grid', { static: true}) grid: AXDataTableComponent;
447
+ this.grid = viewChild('grid', ...(ngDevMode ? [{ debugName: "grid" }] : []));
448
+ this.initializedFromRoute = false;
449
+ this.commandRowItems = computed(() => {
450
+ return this.vm.primaryRowActions().map((c) => {
451
+ return {
452
+ icon: c.icon,
453
+ name: c.name,
454
+ text: translateSync(c.title),
455
+ color: c.color,
456
+ disabled: c.disabled,
457
+ default: c.default,
458
+ };
459
+ });
460
+ }, ...(ngDevMode ? [{ debugName: "commandRowItems" }] : []));
461
+ this.getDropdownRowItems = (rowData) => {
462
+ return Promise.resolve(this.dropdownRowItems(rowData));
463
+ };
464
+ this.getCommandRowItems = () => {
465
+ return this.commandRowItems();
466
+ };
467
+ effect(() => {
468
+ if (this.grid()) {
469
+ this.grid().selectedRows = this.vm.selectedItems();
470
+ }
471
+ });
472
+ //
473
+ this.vm.events$.subscribe(async (e) => {
474
+ const refreshTargetId = e.meta?.refreshTargetId;
475
+ if (e.action == 'refresh') {
476
+ if (refreshTargetId) {
477
+ this.grid()?.refreshItemChildren(refreshTargetId);
478
+ }
479
+ else {
480
+ this.grid()?.refresh({
481
+ reset: false,
482
+ });
483
+ }
484
+ }
485
+ });
486
+ // Keep URL query param `view` in sync with current vm view
487
+ effect(() => {
488
+ if (!this.initializedFromRoute) {
489
+ return;
490
+ }
491
+ const currentViewName = this.vm.view().name;
492
+ const urlView = this.activeRoute.snapshot.queryParamMap.get('view');
493
+ if (currentViewName && currentViewName !== urlView) {
494
+ this.router.navigate([], {
495
+ relativeTo: this.activeRoute,
496
+ queryParams: { view: currentViewName },
497
+ queryParamsHandling: 'merge',
498
+ replaceUrl: true,
499
+ });
500
+ }
501
+ });
502
+ }
503
+ async ngOnInit() {
504
+ // React to external URL changes (back/forward navigation or deep links)
505
+ this.queryParamSub = this.activeRoute.queryParamMap.subscribe(async (qp) => {
506
+ const viewFromUrl = qp.get('view');
507
+ await this.vm.setView(viewFromUrl);
508
+ });
509
+ }
510
+ async ngAfterViewInit() {
511
+ const viewFromUrl = this.activeRoute.snapshot.queryParamMap.get('view');
512
+ await this.vm.setView(viewFromUrl);
513
+ const resolvedView = this.vm.view().name;
514
+ const currentUrlView = this.activeRoute.snapshot.queryParamMap.get('view');
515
+ if (currentUrlView !== resolvedView) {
516
+ this.router.navigate([], {
517
+ relativeTo: this.activeRoute,
518
+ queryParams: { view: resolvedView },
519
+ queryParamsHandling: 'merge',
520
+ replaceUrl: true,
521
+ });
522
+ }
523
+ this.initializedFromRoute = true;
524
+ }
525
+ onColumnSizeChanged(e) {
526
+ if (e.isUserInteraction && e.type === 'end') {
527
+ this.vm.saveSettings('columnSizes', e.data);
528
+ }
529
+ }
530
+ onPageChanged(e) {
531
+ if (e.isUserInteraction) {
532
+ const pageSizeChanged = e.take != this.vm.dataSource.pageSize;
533
+ if (pageSizeChanged) {
534
+ this.vm.saveSettings('pageSize', e.take);
535
+ }
536
+ }
537
+ }
538
+ onColumnsOrderChanged(e) {
539
+ if (e.isUserInteraction) {
540
+ this.vm.onColumnsOrderChanged(e.data.event);
541
+ }
542
+ }
543
+ async dropdownRowItems(rowData) {
544
+ return (await this.vm.secondaryRowActions(rowData)).map((c) => ({
545
+ icon: c.icon,
546
+ name: c.name,
547
+ text: c.title,
548
+ color: c.color,
549
+ disabled: c.disabled,
550
+ default: c.default,
551
+ }));
552
+ }
553
+ async handleRowDbClick(e) {
554
+ const allItems = [...this.commandRowItems(), ...(await this.dropdownRowItems(e.data))];
555
+ // const defaultAction = allItems.find((c) => (c as any).default) || allItems[0];
556
+ const defaultAction = allItems.find((c) => {
557
+ const commandName = c.name.split('&')[0];
558
+ return (c.default || commandName === 'open-entity') && !c.disabled;
559
+ });
560
+ if (!defaultAction) {
561
+ return;
562
+ }
563
+ const d = {
564
+ component: e.component,
565
+ name: defaultAction.name,
566
+ data: e.data,
567
+ };
568
+ this.handleRowCommandClick(d);
569
+ }
570
+ async handleRowCommandClick(e) {
571
+ this.vm.executeCommand(e.name, e.data);
572
+ }
573
+ async handleSelectedRowsChange(rows) {
574
+ this.vm.selectedItems.set(rows);
575
+ }
576
+ makeResponsive(value) {
577
+ if (this.platform.is('Mobile') || this.platform.is('SM')) {
578
+ return '';
579
+ }
580
+ else {
581
+ return value;
582
+ }
583
+ }
584
+ toggleSideBar(sideBar) {
585
+ this.toggleEndSide();
586
+ if (sideBar) {
587
+ this.activeEndSideView.set(sideBar);
588
+ }
589
+ }
590
+ toggleSearchBar() {
591
+ this.searchBarShown.update((v) => !v);
592
+ }
593
+ handleResetClick(sideBar) {
594
+ switch (sideBar) {
595
+ case 'filter': {
596
+ this.vm.resetFilters();
597
+ break;
598
+ }
599
+ case 'sort': {
600
+ this.vm.resetSorts();
601
+ break;
602
+ }
603
+ case 'column': {
604
+ this.vm.resetColumns();
605
+ break;
606
+ }
607
+ }
608
+ }
609
+ // protected handleDiscardClick(sideBar: 'filter' | 'sort' | 'column') {
610
+ // switch (sideBar) {
611
+ // case 'filter': {
612
+ // this.vm.discardFilters();
613
+ // break;
614
+ // }
615
+ // case 'sort': {
616
+ // this.vm.resetSorts();
617
+ // break;
618
+ // }
619
+ // case 'column': {
620
+ // this.vm.resetColumns();
621
+ // break;
622
+ // }
623
+ // }
624
+ // }
625
+ handleApplyClick(sideBar) {
626
+ this.vm.applyFilterAndSort();
627
+ this.toggleEndSide();
628
+ }
629
+ ngOnDestroy() {
630
+ this.queryParamSub?.unsubscribe();
631
+ this.vm.destroy();
632
+ }
633
+ toggleCategoryDrawer() {
634
+ this.toggleStartSide();
635
+ }
636
+ getPageTitle() {
637
+ return this.vm.title();
638
+ }
639
+ async getPageDescription() {
640
+ const description = this.vm.description();
641
+ if (description) {
642
+ return this.translateService.translateAsync(description);
643
+ }
644
+ return '';
645
+ }
646
+ getPageBreadcrumbs() {
647
+ return this.vm.beardcrumbs();
648
+ }
649
+ async getPrimaryMenuItems() {
650
+ return (await this.vm.getPrimaryActions()).map((tr) => ({
651
+ name: tr.name,
652
+ title: tr.title,
653
+ icon: tr.icon,
654
+ color: tr.color,
655
+ disabled: tr.disabled,
656
+ command: {
657
+ name: tr.name,
658
+ options: tr.options,
659
+ metadata: tr.metadata,
660
+ },
661
+ }));
662
+ }
663
+ async getSecondaryMenuItems() {
664
+ return (await this.vm.getSecondaryActions()).map((tr) => ({
665
+ name: tr.name,
666
+ title: tr.title,
667
+ icon: tr.icon,
668
+ color: tr.color,
669
+ disabled: tr.disabled,
670
+ separated: tr.separated,
671
+ command: {
672
+ name: tr.name,
673
+ options: tr.options,
674
+ metadata: tr.metadata,
675
+ },
676
+ }));
677
+ }
678
+ async execute(command) {
679
+ if (command) {
680
+ this.vm.execute(command);
681
+ }
682
+ }
683
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityMasterListViewComponent, deps: [{ token: i1$1.AXPlatform }], target: i0.ɵɵFactoryTarget.Component }); }
684
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPEntityMasterListViewComponent, isStandalone: true, selector: "axp-entity-master-list", providers: [
685
+ {
686
+ provide: AXPPageLayoutBase,
687
+ useExisting: AXPEntityMasterListViewComponent,
688
+ },
689
+ ], viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.entityDef.category) {\n <axp-layout-start-side id=\"axp-entity-category-drawer\">\n <axp-entity-category\n id=\"axp-entity-category\"\n class=\"ax-w-80\"\n [vm]=\"vm\"\n [searchValue]=\"categorySearchValue()\"\n ></axp-entity-category>\n </axp-layout-start-side>\n }\n <axp-page-toolbar id=\"axp-entity-toolbar\">\n <axp-entity-master-toolbar-view [viewModel]=\"vm\"></axp-entity-master-toolbar-view>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-overflow-auto\">\n <ax-data-table\n id=\"axp-entity-table\"\n [allowReordering]=\"true\"\n (onColumnsOrderChanged)=\"onColumnsOrderChanged($event)\"\n #grid\n [showFooter]=\"false\"\n class=\"ax-flex-1\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n [parentField]=\"vm.parentKey()\"\n [loading]=\"{ enabled: true, animation: true }\"\n [dataSource]=\"vm.dataSource\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n (onColumnSizeChanged)=\"onColumnSizeChanged($event)\"\n (onPageChanged)=\"onPageChanged($event)\"\n >\n @if (vm.view().indexCol === true) {\n <ax-index-column id=\"axp-table-col-index\" fixed=\"start\" [width]=\"'80px'\" [padZero]=\"true\"></ax-index-column>\n }\n @if (vm.selectedScopeActionsCount()) {\n <ax-select-column id=\"axp-table-col-select\" fixed=\"start\" [width]=\"'60px'\"></ax-select-column>\n }\n @for (col of vm.columns(); track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer\n [attr.id]=\"'axp-table-col-' + col.name\"\n [expandHandler]=\"$index === 0 && vm.parentKey() ? true : false\"\n [caption]=\"(col.title | translate | async)!\"\n [node]=\"col.node()\"\n [customWidth]=\"col.width\"\n ></axp-widget-column-renderer>\n }\n }\n @if (getCommandRowItems().length) {\n <ax-command-column\n id=\"axp-table-col-commands\"\n fixed=\"end\"\n [width]=\"getCommandRowItems().length * 60 + 'px'\"\n [items]=\"getCommandRowItems()\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n }\n <ax-dropdown-command-column\n id=\"axp-table-col-dropdown-commands\"\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n </ax-data-table>\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axp-entity-master-list axp-layout-start-side{min-width:20rem!important;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}.view-drawer{width:85vw}@media (min-width: 768px){.view-drawer{width:45vw}}@media (min-width: 1024px){.view-drawer{width:35vw}}@media (min-width: 1536px){.view-drawer{width:20vw}}.view-drawer{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));border-inline-start-width:1px;border-inline-start-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));border-top-width:1px;--tw-border-opacity: 1;border-top-color:rgba(var(--ax-sys-color-primary-600),var(--tw-border-opacity, 1))}.view-drawer ax-header{display:flex;align-items:center;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1));padding:.5rem 1rem}.view-drawer ax-header h2{font-size:1.25rem;line-height:1.75rem;font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lighter-surface),var(--tw-text-opacity, 1))}.view-drawer ax-footer{position:absolute!important;bottom:0!important;width:100%!important;justify-content:flex-start!important;border-top-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1))!important;padding:.5rem 1rem!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i7.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i7.AXRowIndexColumnComponent, selector: "ax-index-column", inputs: ["width", "caption", "fixed", "footerTemplate", "padZero"] }, { kind: "component", type: i7.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i7.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i7.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i10.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "ngmodule", type:
690
+ //
691
+ AXPWidgetCoreModule }, { kind: "component", type: i7$1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "cellTemplate", "headerTemplate"] }, { kind: "ngmodule", type: AXPWidgetsModule }, { kind: "ngmodule", type: AXPAuthModule }, { kind: "component", type:
692
+ //
693
+ AXPEntityMasterToolbarViewComponent, selector: "axp-entity-master-toolbar-view", inputs: ["viewModel"] }, { kind: "component", type:
694
+ //
695
+ AXPPageLayoutComponent, selector: "axp-page-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, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPEntityCategoryComponent, selector: "axp-entity-category", inputs: ["vm", "searchValue"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
696
+ }
697
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityMasterListViewComponent, decorators: [{
698
+ type: Component,
699
+ args: [{ selector: 'axp-entity-master-list', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
700
+ CommonModule,
701
+ FormsModule,
702
+ RouterModule,
703
+ AXButtonModule,
704
+ AXDecoratorModule,
705
+ AXBadgeModule,
706
+ AXDropdownModule,
707
+ AXPopoverModule,
708
+ AXFormModule,
709
+ AXActionSheetModule,
710
+ AXDrawerModule,
711
+ AXDialogModule,
712
+ AXLoadingModule,
713
+ AXTabsModule,
714
+ AXTooltipModule,
715
+ AXBreadcrumbsModule,
716
+ AXDropdownButtonModule,
717
+ AXSearchBoxModule,
718
+ AXDataTableModule,
719
+ AXTranslationModule,
720
+ DragDropModule,
721
+ //
722
+ AXPWidgetCoreModule,
723
+ AXPWidgetsModule,
724
+ AXPAuthModule,
725
+ //
726
+ AXPEntityMasterToolbarViewComponent,
727
+ //
728
+ AXPPageLayoutComponent,
729
+ AXPThemeLayoutBlockComponent,
730
+ AXDropdownButtonModule,
731
+ AXPThemeLayoutStartSideComponent,
732
+ AXPEntityCategoryComponent,
733
+ ], providers: [
734
+ {
735
+ provide: AXPPageLayoutBase,
736
+ useExisting: AXPEntityMasterListViewComponent,
737
+ },
738
+ ], template: "<axp-page-layout *translate=\"let t\">\n @if (vm.entityDef.category) {\n <axp-layout-start-side id=\"axp-entity-category-drawer\">\n <axp-entity-category\n id=\"axp-entity-category\"\n class=\"ax-w-80\"\n [vm]=\"vm\"\n [searchValue]=\"categorySearchValue()\"\n ></axp-entity-category>\n </axp-layout-start-side>\n }\n <axp-page-toolbar id=\"axp-entity-toolbar\">\n <axp-entity-master-toolbar-view [viewModel]=\"vm\"></axp-entity-master-toolbar-view>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-overflow-auto\">\n <ax-data-table\n id=\"axp-entity-table\"\n [allowReordering]=\"true\"\n (onColumnsOrderChanged)=\"onColumnsOrderChanged($event)\"\n #grid\n [showFooter]=\"false\"\n class=\"ax-flex-1\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n [parentField]=\"vm.parentKey()\"\n [loading]=\"{ enabled: true, animation: true }\"\n [dataSource]=\"vm.dataSource\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n (onColumnSizeChanged)=\"onColumnSizeChanged($event)\"\n (onPageChanged)=\"onPageChanged($event)\"\n >\n @if (vm.view().indexCol === true) {\n <ax-index-column id=\"axp-table-col-index\" fixed=\"start\" [width]=\"'80px'\" [padZero]=\"true\"></ax-index-column>\n }\n @if (vm.selectedScopeActionsCount()) {\n <ax-select-column id=\"axp-table-col-select\" fixed=\"start\" [width]=\"'60px'\"></ax-select-column>\n }\n @for (col of vm.columns(); track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer\n [attr.id]=\"'axp-table-col-' + col.name\"\n [expandHandler]=\"$index === 0 && vm.parentKey() ? true : false\"\n [caption]=\"(col.title | translate | async)!\"\n [node]=\"col.node()\"\n [customWidth]=\"col.width\"\n ></axp-widget-column-renderer>\n }\n }\n @if (getCommandRowItems().length) {\n <ax-command-column\n id=\"axp-table-col-commands\"\n fixed=\"end\"\n [width]=\"getCommandRowItems().length * 60 + 'px'\"\n [items]=\"getCommandRowItems()\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n }\n <ax-dropdown-command-column\n id=\"axp-table-col-dropdown-commands\"\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n </ax-data-table>\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axp-entity-master-list axp-layout-start-side{min-width:20rem!important;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}.view-drawer{width:85vw}@media (min-width: 768px){.view-drawer{width:45vw}}@media (min-width: 1024px){.view-drawer{width:35vw}}@media (min-width: 1536px){.view-drawer{width:20vw}}.view-drawer{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));border-inline-start-width:1px;border-inline-start-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));border-top-width:1px;--tw-border-opacity: 1;border-top-color:rgba(var(--ax-sys-color-primary-600),var(--tw-border-opacity, 1))}.view-drawer ax-header{display:flex;align-items:center;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1));padding:.5rem 1rem}.view-drawer ax-header h2{font-size:1.25rem;line-height:1.75rem;font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lighter-surface),var(--tw-text-opacity, 1))}.view-drawer ax-footer{position:absolute!important;bottom:0!important;width:100%!important;justify-content:flex-start!important;border-top-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1))!important;padding:.5rem 1rem!important}\n"] }]
739
+ }], ctorParameters: () => [{ type: i1$1.AXPlatform }] });
740
+
741
+ export { AXPEntityMasterListViewComponent };
742
+ //# sourceMappingURL=acorex-platform-themes-default-entity-master-list-view.component-rdKxuMC_.mjs.map