verben-authentication-ui 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +23 -1
  2. package/esm2022/src/lib/base/core/base-data-page.facade.mjs +215 -0
  3. package/esm2022/src/lib/base/core/base-data-page.service.mjs +103 -0
  4. package/esm2022/src/lib/base/core/base-data-page.state.mjs +203 -0
  5. package/esm2022/src/lib/base/handlers/filter-handler.service.mjs +53 -0
  6. package/esm2022/src/lib/base/handlers/search-handler.service.mjs +31 -0
  7. package/esm2022/src/lib/base/handlers/sort-handler.service.mjs +49 -0
  8. package/esm2022/src/lib/base/models/api-payload.mjs +4 -0
  9. package/esm2022/src/lib/base/models/page-config.interface.mjs +2 -0
  10. package/esm2022/src/lib/base/public-api.mjs +14 -6
  11. package/esm2022/src/lib/base/utils/column-helpers.mjs +45 -0
  12. package/esm2022/src/lib/components/button/button.component.mjs +3 -3
  13. package/esm2022/src/lib/components/forgot-password/forgot-password.component.mjs +2 -2
  14. package/esm2022/src/lib/components/mail/mail.component.mjs +3 -3
  15. package/esm2022/src/lib/components/mail-validation/mail-validation.component.mjs +5 -5
  16. package/esm2022/src/lib/components/o-auth/o-auth.component.mjs +3 -3
  17. package/esm2022/src/lib/components/otp-input/otp-input.component.mjs +2 -2
  18. package/esm2022/src/lib/components/reset-password/reset-password.component.mjs +2 -2
  19. package/esm2022/src/lib/components/role-control/base-table-style.mjs +6 -6
  20. package/esm2022/src/lib/components/role-control/role-control.component.mjs +3 -3
  21. package/esm2022/src/lib/components/sign-in/sign-in.component.mjs +4 -4
  22. package/esm2022/src/lib/components/sign-up/sign-up.component.mjs +6 -6
  23. package/esm2022/src/lib/components/sso/base-table-style.mjs +6 -6
  24. package/esm2022/src/lib/components/sso/sso-form/sso-form.component.mjs +3 -3
  25. package/esm2022/src/lib/components/sso/sso.component.mjs +3 -3
  26. package/esm2022/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.mjs +4 -4
  27. package/esm2022/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.mjs +5 -5
  28. package/esm2022/src/lib/components/user-management/public-api.mjs +2 -1
  29. package/esm2022/src/lib/components/user-management/user-management-card/user-management-card.component.mjs +23 -0
  30. package/esm2022/src/lib/components/user-management/user-management-form/user-management-form.component.mjs +53 -91
  31. package/esm2022/src/lib/components/user-management/user-management-table/user-management-table.component.mjs +68 -0
  32. package/esm2022/src/lib/components/user-management/user-management.component.mjs +98 -509
  33. package/esm2022/src/lib/components/user-management/user-management.module.mjs +11 -80
  34. package/esm2022/src/lib/components/user-management/user-status-badge/user-status-badge.component.mjs +8 -6
  35. package/esm2022/src/lib/components/user-management/user.config.mjs +94 -0
  36. package/esm2022/src/lib/components/user-management/user.facade.mjs +118 -0
  37. package/esm2022/src/lib/components/user-management/user.service.mjs +60 -0
  38. package/esm2022/src/lib/components/user-management/user.state.mjs +33 -0
  39. package/esm2022/src/lib/components/user-request/user-request.component.mjs +8 -8
  40. package/esm2022/src/lib/components/user-request-approval/public-api.mjs +2 -2
  41. package/esm2022/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.mjs +8 -6
  42. package/esm2022/src/lib/components/user-request-approval/user-access-request.config.mjs +79 -0
  43. package/esm2022/src/lib/components/user-request-approval/user-access-request.facade.mjs +123 -0
  44. package/esm2022/src/lib/components/user-request-approval/user-access-request.service.mjs +74 -0
  45. package/esm2022/src/lib/components/user-request-approval/user-access-request.state.mjs +26 -0
  46. package/esm2022/src/lib/components/user-request-approval/user-request-approval-card/user-request-approval-card.component.mjs +23 -0
  47. package/esm2022/src/lib/components/user-request-approval/user-request-approval-form/user-request-approval-form.component.mjs +124 -0
  48. package/esm2022/src/lib/components/user-request-approval/user-request-approval-table/user-request-approval-table.component.mjs +44 -0
  49. package/esm2022/src/lib/components/user-request-approval/user-request-approval.component.mjs +101 -273
  50. package/esm2022/src/lib/components/user-request-approval/user-request-approval.module.mjs +10 -74
  51. package/fesm2022/verben-authentication-ui-src-lib-base.mjs +596 -214
  52. package/fesm2022/verben-authentication-ui-src-lib-base.mjs.map +1 -1
  53. package/fesm2022/verben-authentication-ui-src-lib-components-button.mjs +2 -2
  54. package/fesm2022/verben-authentication-ui-src-lib-components-button.mjs.map +1 -1
  55. package/fesm2022/verben-authentication-ui-src-lib-components-forgot-password.mjs +2 -2
  56. package/fesm2022/verben-authentication-ui-src-lib-components-forgot-password.mjs.map +1 -1
  57. package/fesm2022/verben-authentication-ui-src-lib-components-mail-validation.mjs +4 -4
  58. package/fesm2022/verben-authentication-ui-src-lib-components-mail-validation.mjs.map +1 -1
  59. package/fesm2022/verben-authentication-ui-src-lib-components-mail.mjs +2 -2
  60. package/fesm2022/verben-authentication-ui-src-lib-components-mail.mjs.map +1 -1
  61. package/fesm2022/verben-authentication-ui-src-lib-components-o-auth.mjs +2 -2
  62. package/fesm2022/verben-authentication-ui-src-lib-components-o-auth.mjs.map +1 -1
  63. package/fesm2022/verben-authentication-ui-src-lib-components-otp-input.mjs +2 -2
  64. package/fesm2022/verben-authentication-ui-src-lib-components-otp-input.mjs.map +1 -1
  65. package/fesm2022/verben-authentication-ui-src-lib-components-reset-password.mjs +2 -2
  66. package/fesm2022/verben-authentication-ui-src-lib-components-reset-password.mjs.map +1 -1
  67. package/fesm2022/verben-authentication-ui-src-lib-components-role-control.mjs +7 -7
  68. package/fesm2022/verben-authentication-ui-src-lib-components-role-control.mjs.map +1 -1
  69. package/fesm2022/verben-authentication-ui-src-lib-components-sign-in.mjs +3 -3
  70. package/fesm2022/verben-authentication-ui-src-lib-components-sign-in.mjs.map +1 -1
  71. package/fesm2022/verben-authentication-ui-src-lib-components-sign-up.mjs +5 -5
  72. package/fesm2022/verben-authentication-ui-src-lib-components-sign-up.mjs.map +1 -1
  73. package/fesm2022/verben-authentication-ui-src-lib-components-sso.mjs +9 -9
  74. package/fesm2022/verben-authentication-ui-src-lib-components-sso.mjs.map +1 -1
  75. package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-otp.mjs +3 -3
  76. package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-otp.mjs.map +1 -1
  77. package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-setup.mjs +4 -4
  78. package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-setup.mjs.map +1 -1
  79. package/fesm2022/verben-authentication-ui-src-lib-components-user-management.mjs +468 -831
  80. package/fesm2022/verben-authentication-ui-src-lib-components-user-management.mjs.map +1 -1
  81. package/fesm2022/verben-authentication-ui-src-lib-components-user-request-approval.mjs +509 -952
  82. package/fesm2022/verben-authentication-ui-src-lib-components-user-request-approval.mjs.map +1 -1
  83. package/fesm2022/verben-authentication-ui-src-lib-components-user-request.mjs +7 -7
  84. package/fesm2022/verben-authentication-ui-src-lib-components-user-request.mjs.map +1 -1
  85. package/package.json +42 -48
  86. package/src/lib/base/README.md +99 -0
  87. package/src/lib/base/core/base-data-page.facade.d.ts +65 -0
  88. package/src/lib/base/core/base-data-page.service.d.ts +43 -0
  89. package/src/lib/base/core/base-data-page.state.d.ts +68 -0
  90. package/src/lib/base/handlers/filter-handler.service.d.ts +13 -0
  91. package/src/lib/base/handlers/search-handler.service.d.ts +20 -0
  92. package/src/lib/base/handlers/sort-handler.service.d.ts +13 -0
  93. package/src/lib/base/models/api-payload.d.ts +2 -0
  94. package/src/lib/base/models/page-config.interface.d.ts +21 -0
  95. package/src/lib/base/public-api.d.ts +9 -5
  96. package/src/lib/base/utils/column-helpers.d.ts +16 -0
  97. package/src/lib/components/user-management/public-api.d.ts +1 -0
  98. package/src/lib/components/user-management/user-management-card/user-management-card.component.d.ts +11 -0
  99. package/src/lib/components/user-management/user-management-form/user-management-form.component.d.ts +12 -14
  100. package/src/lib/components/user-management/user-management-table/user-management-table.component.d.ts +30 -0
  101. package/src/lib/components/user-management/user-management.component.d.ts +28 -124
  102. package/src/lib/components/user-management/user-management.module.d.ts +8 -8
  103. package/src/lib/components/user-management/user-status-badge/user-status-badge.component.d.ts +1 -1
  104. package/src/lib/components/user-management/user.config.d.ts +13 -0
  105. package/src/lib/components/user-management/user.facade.d.ts +42 -0
  106. package/src/lib/components/user-management/user.service.d.ts +26 -0
  107. package/src/lib/components/user-management/user.state.d.ts +19 -0
  108. package/src/lib/components/user-request-approval/public-api.d.ts +1 -1
  109. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.d.ts +1 -1
  110. package/src/lib/components/user-request-approval/user-access-request.config.d.ts +13 -0
  111. package/src/lib/components/user-request-approval/user-access-request.facade.d.ts +36 -0
  112. package/src/lib/components/user-request-approval/user-access-request.service.d.ts +30 -0
  113. package/src/lib/components/user-request-approval/user-access-request.state.d.ts +16 -0
  114. package/src/lib/components/user-request-approval/user-request-approval-card/user-request-approval-card.component.d.ts +11 -0
  115. package/src/lib/components/user-request-approval/user-request-approval-form/user-request-approval-form.component.d.ts +47 -0
  116. package/src/lib/components/user-request-approval/user-request-approval-table/user-request-approval-table.component.d.ts +20 -0
  117. package/src/lib/components/user-request-approval/user-request-approval.component.d.ts +29 -68
  118. package/src/lib/components/user-request-approval/user-request-approval.module.d.ts +7 -6
  119. package/esm2022/src/lib/base/base-data.component.mjs +0 -80
  120. package/esm2022/src/lib/base/base-data.facade.mjs +0 -130
  121. package/esm2022/src/lib/base/base-data.service.mjs +0 -21
  122. package/esm2022/src/lib/base/base-data.state.mjs +0 -74
  123. package/esm2022/src/lib/base/models.mjs +0 -2
  124. package/esm2022/src/lib/components/user-management/base-table-style.mjs +0 -53
  125. package/esm2022/src/lib/components/user-management/services/user-management.service.mjs +0 -110
  126. package/esm2022/src/lib/components/user-management/user-management.columns.mjs +0 -53
  127. package/esm2022/src/lib/components/user-request-approval/access-request.columns.mjs +0 -29
  128. package/esm2022/src/lib/components/user-request-approval/base-table-style.mjs +0 -53
  129. package/esm2022/src/lib/components/user-request-approval/facades/user-access-request.facade.mjs +0 -260
  130. package/esm2022/src/lib/components/user-request-approval/helper.mjs +0 -56
  131. package/esm2022/src/lib/components/user-request-approval/services/user-access-request.service.mjs +0 -92
  132. package/esm2022/src/lib/components/user-request-approval/states/user-access-request.state.mjs +0 -92
  133. package/esm2022/src/lib/components/user-request-approval/user-request-form/user-request-form.component.mjs +0 -105
  134. package/esm2022/src/lib/components/user-request-process/index.mjs +0 -2
  135. package/esm2022/src/lib/components/user-request-process/public-api.mjs +0 -3
  136. package/esm2022/src/lib/components/user-request-process/user-request-process.component.mjs +0 -11
  137. package/esm2022/src/lib/components/user-request-process/user-request-process.module.mjs +0 -18
  138. package/esm2022/src/lib/components/user-request-process/verben-authentication-ui-src-lib-components-user-request-process.mjs +0 -5
  139. package/fesm2022/verben-authentication-ui-src-lib-components-user-request-process.mjs +0 -34
  140. package/fesm2022/verben-authentication-ui-src-lib-components-user-request-process.mjs.map +0 -1
  141. package/src/lib/base/base-data.component.d.ts +0 -32
  142. package/src/lib/base/base-data.facade.d.ts +0 -27
  143. package/src/lib/base/base-data.service.d.ts +0 -14
  144. package/src/lib/base/base-data.state.d.ts +0 -28
  145. package/src/lib/base/models.d.ts +0 -11
  146. package/src/lib/components/user-management/base-table-style.d.ts +0 -1
  147. package/src/lib/components/user-management/services/user-management.service.d.ts +0 -44
  148. package/src/lib/components/user-management/user-management.columns.d.ts +0 -3
  149. package/src/lib/components/user-request-approval/access-request.columns.d.ts +0 -3
  150. package/src/lib/components/user-request-approval/base-table-style.d.ts +0 -1
  151. package/src/lib/components/user-request-approval/facades/user-access-request.facade.d.ts +0 -39
  152. package/src/lib/components/user-request-approval/helper.d.ts +0 -7
  153. package/src/lib/components/user-request-approval/services/user-access-request.service.d.ts +0 -64
  154. package/src/lib/components/user-request-approval/states/user-access-request.state.d.ts +0 -35
  155. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.d.ts +0 -34
  156. package/src/lib/components/user-request-process/index.d.ts +0 -1
  157. package/src/lib/components/user-request-process/public-api.d.ts +0 -2
  158. package/src/lib/components/user-request-process/user-request-process.component.d.ts +0 -5
  159. package/src/lib/components/user-request-process/user-request-process.module.d.ts +0 -7
package/README.md CHANGED
@@ -1,7 +1,29 @@
1
- # VerbenNgUi
1
+ # VerbenAuthenticationUi
2
2
 
3
3
  This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0.
4
4
 
5
+ ## Theming
6
+
7
+ This library is theme-aware: its component styles read the `verben-ng-ui`
8
+ `--vbn-*` CSS custom properties instead of hardcoded colors, so it automatically
9
+ follows whatever theme the host application configures. It ships **no** theme
10
+ config of its own (no `theme.css`, no `forRoot()`) — that is the host app's job.
11
+
12
+ **Host requirement:** the consuming application must load
13
+ `node_modules/verben-ng-ui/styles/theme.css` (which requires `verben-ng-ui@>=1.3.0`,
14
+ matching this library's peer dependency) and call `VerbenUiModule.forRoot({...})`
15
+ once. See that package's `INTEGRATION.md` for the full multi-layer setup.
16
+
17
+ Translucent greys and tints (e.g. `#66666680`, `rgba(0, 0, 0, 0.25)`) are
18
+ intentionally left as literals — mapping them onto solid tokens would drop their
19
+ alpha channel.
20
+
21
+ **Two files here are generated, not hand-written:**
22
+ `src/theme/tailwind.css` is Tailwind output built by `npm run build:lib:tailwind`
23
+ and `@import`ed by the user-management and user-request-approval component styles.
24
+ Never hand-edit it — change the templates and regenerate, or you will produce
25
+ malformed escaped selectors that silently match nothing.
26
+
5
27
  ## Code scaffolding
6
28
 
7
29
  Run `ng generate component component-name --project verben-authentication-ui` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project verben-authentication-ui`.
@@ -0,0 +1,215 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject, takeUntil } from 'rxjs';
3
+ import { ErrorResponse } from 'verben-authentication-ui/src/lib/models';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./base-data-page.state";
6
+ import * as i2 from "./base-data-page.service";
7
+ import * as i3 from "../handlers/search-handler.service";
8
+ import * as i4 from "verben-authentication-ui/src/lib/services";
9
+ /**
10
+ * Abstract facade for base data pages.
11
+ * Orchestrates state, service, and search handler, and surfaces the host app's
12
+ * busy indicator / toasts through UtilService.
13
+ */
14
+ export class BaseDataPageFacade {
15
+ state;
16
+ service;
17
+ searchHandler;
18
+ utilService;
19
+ config;
20
+ destroy$ = new Subject();
21
+ cardSelectionCleared = new Subject();
22
+ constructor(state, service, searchHandler, utilService, config) {
23
+ this.state = state;
24
+ this.service = service;
25
+ this.searchHandler = searchHandler;
26
+ this.utilService = utilService;
27
+ this.config = config;
28
+ this.initializeSearchHandler();
29
+ this.state.setVisibleColumns(this.config.columns);
30
+ if (this.config.cardDataMapper) {
31
+ this.state.setCardDataMapper(this.config.cardDataMapper);
32
+ }
33
+ // Drive the host busy indicator from the shared loading flag.
34
+ this.state
35
+ .isUpdating$()
36
+ .pipe(takeUntil(this.destroy$))
37
+ .subscribe((loading) => this.utilService.sendBI(loading));
38
+ }
39
+ // ===== Configuration =====
40
+ getConfig() {
41
+ return this.config;
42
+ }
43
+ getColumns() {
44
+ return this.config.columns;
45
+ }
46
+ // ===== Observables =====
47
+ get items$() {
48
+ return this.state.getItems$();
49
+ }
50
+ get isLoading$() {
51
+ return this.state.isUpdating$();
52
+ }
53
+ get totalCount$() {
54
+ return this.state.getTotalCount$();
55
+ }
56
+ get filters$() {
57
+ return this.state.getFilters$();
58
+ }
59
+ get sorts$() {
60
+ return this.state.getSorts$();
61
+ }
62
+ get searchTerm$() {
63
+ return this.state.getSearchTerm$();
64
+ }
65
+ get visibleColumns$() {
66
+ return this.state.getVisibleColumns$();
67
+ }
68
+ get cardData() {
69
+ return this.state.getCardData();
70
+ }
71
+ get currentCardData() {
72
+ return this.state.getCurrentCardData();
73
+ }
74
+ /**
75
+ * Emits when a refetch invalidates the current card selection.
76
+ * Card views listen to this to clear their own selection state.
77
+ */
78
+ get cardSelectionCleared$() {
79
+ return this.cardSelectionCleared.asObservable();
80
+ }
81
+ // ===== Data Loading =====
82
+ async loadData() {
83
+ this.clearCardSelection();
84
+ this.state.setUpdating(true);
85
+ this.state.clearItems();
86
+ this.state.resetPagination();
87
+ const params = this.state.getQueryParamsValue();
88
+ const filters = this.state.getFiltersValue();
89
+ const sorts = this.state.getSortsValue();
90
+ const searchTerm = this.state.getSearchTermValue();
91
+ const result = await this.service.getData(params.skip, params.limit, filters, sorts, searchTerm, this.config.columns);
92
+ this.state.setUpdating(false);
93
+ if (result instanceof ErrorResponse) {
94
+ this.utilService.showError(result.ErrorMsg);
95
+ return;
96
+ }
97
+ this.state.setItems(result.Result || []);
98
+ this.state.setTotalCount(result.Total || 0);
99
+ }
100
+ addItem(item) {
101
+ this.state.addItem(item);
102
+ }
103
+ async loadMore() {
104
+ this.state.setUpdating(true);
105
+ this.state.incrementPagination();
106
+ const params = this.state.getQueryParamsValue();
107
+ const filters = this.state.getFiltersValue();
108
+ const sorts = this.state.getSortsValue();
109
+ const searchTerm = this.state.getSearchTermValue();
110
+ const result = await this.service.getData(params.skip, params.limit, filters, sorts, searchTerm, this.config.columns);
111
+ this.state.setUpdating(false);
112
+ if (result instanceof ErrorResponse) {
113
+ this.utilService.showError(result.ErrorMsg);
114
+ return;
115
+ }
116
+ this.state.appendItems(result.Result || []);
117
+ }
118
+ async refresh() {
119
+ await this.loadData();
120
+ }
121
+ // ===== Search =====
122
+ onSearch(term) {
123
+ this.searchHandler.search(term);
124
+ }
125
+ initializeSearchHandler() {
126
+ if (this.config.searchDebounceTime) {
127
+ this.searchHandler.setDebounceTime(this.config.searchDebounceTime);
128
+ }
129
+ this.searchHandler.search$.pipe(takeUntil(this.destroy$)).subscribe((term) => {
130
+ this.state.setSearchTerm(term);
131
+ this.loadData();
132
+ });
133
+ }
134
+ // ===== Filters / Sorts =====
135
+ async applyFilters(filters) {
136
+ this.state.setFilters(filters);
137
+ await this.loadData();
138
+ }
139
+ async clearFilters() {
140
+ this.state.clearFilters();
141
+ await this.loadData();
142
+ }
143
+ async applySorts(sorts) {
144
+ this.state.setSorts(sorts);
145
+ await this.loadData();
146
+ }
147
+ async clearSorts() {
148
+ this.state.clearSorts();
149
+ await this.loadData();
150
+ }
151
+ // ===== Visible Columns =====
152
+ updateVisibleColumns(columns) {
153
+ this.state.setVisibleColumns(columns);
154
+ }
155
+ // ===== Card Data =====
156
+ selectCard(cardData) {
157
+ this.state.setCurrentCardData(cardData);
158
+ }
159
+ /**
160
+ * Drop the current card selection because the data it referred to is being
161
+ * replaced. Called by loadData(); deliberately not by loadMore(), which only
162
+ * appends and leaves an existing selection valid.
163
+ */
164
+ clearCardSelection() {
165
+ this.state.setCurrentCardData(null);
166
+ this.cardSelectionCleared.next();
167
+ }
168
+ // ===== CRUD =====
169
+ async saveItems(items) {
170
+ this.state.setUpdating(true);
171
+ const result = await this.service.saveItems(items);
172
+ this.state.setUpdating(false);
173
+ if (result instanceof ErrorResponse) {
174
+ this.utilService.showError(result.ErrorMsg);
175
+ return false;
176
+ }
177
+ this.utilService.showSuccess('Record(s) saved successfully');
178
+ result.forEach((savedItem) => this.state.upsertItem(savedItem));
179
+ return true;
180
+ }
181
+ async deleteItems(itemIds) {
182
+ this.state.setUpdating(true);
183
+ const result = await this.service.deleteItems(itemIds);
184
+ this.state.setUpdating(false);
185
+ if (result instanceof ErrorResponse) {
186
+ this.utilService.showError(result.ErrorMsg);
187
+ return false;
188
+ }
189
+ itemIds.forEach((id) => this.state.removeItem(id));
190
+ return true;
191
+ }
192
+ // ===== Export =====
193
+ async exportData() {
194
+ const filters = this.state.getFiltersValue();
195
+ const sorts = this.state.getSortsValue();
196
+ const searchTerm = this.state.getSearchTermValue();
197
+ const result = await this.service.exportData(filters, sorts, searchTerm, this.config.columns);
198
+ if (result instanceof ErrorResponse) {
199
+ return [];
200
+ }
201
+ return result;
202
+ }
203
+ // ===== Cleanup =====
204
+ ngOnDestroy() {
205
+ this.destroy$.next();
206
+ this.destroy$.complete();
207
+ this.cardSelectionCleared.complete();
208
+ }
209
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseDataPageFacade, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
210
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseDataPageFacade });
211
+ }
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseDataPageFacade, decorators: [{
213
+ type: Injectable
214
+ }], ctorParameters: () => [{ type: i1.BaseDataPageState }, { type: i2.BaseDataPageService }, { type: i3.SearchHandlerService }, { type: i4.UtilService }, { type: undefined }] });
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLXBhZ2UuZmFjYWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLWF1dGhlbnRpY2F0aW9uLXVpL3NyYy9saWIvYmFzZS9jb3JlL2Jhc2UtZGF0YS1wYWdlLmZhY2FkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQWMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7OztBQVFuRjs7OztHQUlHO0FBRUgsTUFBTSxPQUFnQixrQkFBa0I7SUFLMUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVJKLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQy9CLG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFbkQsWUFDWSxLQUEyQixFQUMzQixPQUErQixFQUMvQixhQUFtQyxFQUNuQyxXQUF3QixFQUN4QixNQUF5QjtRQUp6QixVQUFLLEdBQUwsS0FBSyxDQUFzQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFFbkMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7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QUMsT0FBTyxDQUFDLFVBQVUsQ0FDMUMsT0FBTyxFQUNQLEtBQUssRUFDTCxVQUFVLEVBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3BCLENBQUM7UUFFRixJQUFJLE1BQU0sWUFBWSxhQUFhLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsc0JBQXNCO0lBRXRCLFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7d0dBN1FtQixrQkFBa0I7NEdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZU1vZGVsLCBFcnJvclJlc3BvbnNlIH0gZnJvbSAndmVyYmVuLWF1dGhlbnRpY2F0aW9uLXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAndmVyYmVuLWF1dGhlbnRpY2F0aW9uLXVpL3NyYy9saWIvc2VydmljZXMnO1xuaW1wb3J0IHsgQ2FyZERhdGEsIENvbHVtbkRlZmluaXRpb24sIEZpbHRlckNvbmRpdGlvbiwgU29ydENvbmRpdGlvbiB9IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBTZWFyY2hIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL2hhbmRsZXJzL3NlYXJjaC1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZVBhZ2VDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvcGFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhc2VEYXRhUGFnZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2UtZGF0YS1wYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZURhdGFQYWdlU3RhdGUgfSBmcm9tICcuL2Jhc2UtZGF0YS1wYWdlLnN0YXRlJztcblxuLyoqXG4gKiBBYnN0cmFjdCBmYWNhZGUgZm9yIGJhc2UgZGF0YSBwYWdlcy5cbiAqIE9yY2hlc3RyYXRlcyBzdGF0ZSwgc2VydmljZSwgYW5kIHNlYXJjaCBoYW5kbGVyLCBhbmQgc3VyZmFjZXMgdGhlIGhvc3QgYXBwJ3NcbiAqIGJ1c3kgaW5kaWNhdG9yIC8gdG9hc3RzIHRocm91Z2ggVXRpbFNlcnZpY2UuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YVBhZ2VGYWNhZGU8VCBleHRlbmRzIEJhc2VNb2RlbD4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjYXJkU2VsZWN0aW9uQ2xlYXJlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHN0YXRlOiBCYXNlRGF0YVBhZ2VTdGF0ZTxUPixcbiAgICBwcm90ZWN0ZWQgc2VydmljZTogQmFzZURhdGFQYWdlU2VydmljZTxUPixcbiAgICBwcm90ZWN0ZWQgc2VhcmNoSGFuZGxlcjogU2VhcmNoSGFuZGxlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBCYXNlUGFnZUNvbmZpZzxUPixcbiAgKSB7XG4gICAgdGhpcy5pbml0aWFsaXplU2VhcmNoSGFuZGxlcigpO1xuICAgIHRoaXMuc3RhdGUuc2V0VmlzaWJsZUNvbHVtbnModGhpcy5jb25maWcuY29sdW1ucyk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuY2FyZERhdGFNYXBwZXIpIHtcbiAgICAgIHRoaXMuc3RhdGUuc2V0Q2FyZERhdGFNYXBwZXIodGhpcy5jb25maWcuY2FyZERhdGFNYXBwZXIpO1xuICAgIH1cblxuICAgIC8vIERyaXZlIHRoZSBob3N0IGJ1c3kgaW5kaWNhdG9yIGZyb20gdGhlIHNoYXJlZCBsb2FkaW5nIGZsYWcuXG4gICAgdGhpcy5zdGF0ZVxuICAgICAgLmlzVXBkYXRpbmckKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvYWRpbmcpID0+IHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGxvYWRpbmcpKTtcbiAgfVxuXG4gIC8vID09PT09IENvbmZpZ3VyYXRpb24gPT09PT1cblxuICBnZXRDb25maWcoKTogQmFzZVBhZ2VDb25maWc8VD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIGdldENvbHVtbnMoKTogQ29sdW1uRGVmaW5pdGlvbjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgfVxuXG4gIC8vID09PT09IE9ic2VydmFibGVzID09PT09XG5cbiAgZ2V0IGl0ZW1zJCgpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmdldEl0ZW1zJCgpO1xuICB9XG5cbiAgZ2V0IGlzTG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNVcGRhdGluZyQoKTtcbiAgfVxuXG4gIGdldCB0b3RhbENvdW50JCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmdldFRvdGFsQ291bnQkKCk7XG4gIH1cblxuICBnZXQgZmlsdGVycyQoKTogT2JzZXJ2YWJsZTxGaWx0ZXJDb25kaXRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmdldEZpbHRlcnMkKCk7XG4gIH1cblxuICBnZXQgc29ydHMkKCk6IE9ic2VydmFibGU8U29ydENvbmRpdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZ2V0U29ydHMkKCk7XG4gIH1cblxuICBnZXQgc2VhcmNoVGVybSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5nZXRTZWFyY2hUZXJtJCgpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zJCgpOiBPYnNlcnZhYmxlPENvbHVtbkRlZmluaXRpb248VD5bXT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmdldFZpc2libGVDb2x1bW5zJCgpO1xuICB9XG5cbiAgZ2V0IGNhcmREYXRhKCk6IFdyaXRhYmxlU2lnbmFsPENhcmREYXRhW10+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5nZXRDYXJkRGF0YSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDYXJkRGF0YSgpOiBXcml0YWJsZVNpZ25hbDxDYXJkRGF0YSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5nZXRDdXJyZW50Q2FyZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGEgcmVmZXRjaCBpbnZhbGlkYXRlcyB0aGUgY3VycmVudCBjYXJkIHNlbGVjdGlvbi5cbiAgICogQ2FyZCB2aWV3cyBsaXN0ZW4gdG8gdGhpcyB0byBjbGVhciB0aGVpciBvd24gc2VsZWN0aW9uIHN0YXRlLlxuICAgKi9cbiAgZ2V0IGNhcmRTZWxlY3Rpb25DbGVhcmVkJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jYXJkU2VsZWN0aW9uQ2xlYXJlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8vID09PT09IERhdGEgTG9hZGluZyA9PT09PVxuXG4gIGFzeW5jIGxvYWREYXRhKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2xlYXJDYXJkU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICB0aGlzLnN0YXRlLmNsZWFySXRlbXMoKTtcbiAgICB0aGlzLnN0YXRlLnJlc2V0UGFnaW5hdGlvbigpO1xuXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5zdGF0ZS5nZXRRdWVyeVBhcmFtc1ZhbHVlKCk7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuc3RhdGUuZ2V0RmlsdGVyc1ZhbHVlKCk7XG4gICAgY29uc3Qgc29ydHMgPSB0aGlzLnN0YXRlLmdldFNvcnRzVmFsdWUoKTtcbiAgICBjb25zdCBzZWFyY2hUZXJtID0gdGhpcy5zdGF0ZS5nZXRTZWFyY2hUZXJtVmFsdWUoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VydmljZS5nZXREYXRhKFxuICAgICAgcGFyYW1zLnNraXAsXG4gICAgICBwYXJhbXMubGltaXQsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgc29ydHMsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucyxcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzdWx0LkVycm9yTXNnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlLnNldEl0ZW1zKHJlc3VsdC5SZXN1bHQgfHwgW10pO1xuICAgIHRoaXMuc3RhdGUuc2V0VG90YWxDb3VudChyZXN1bHQuVG90YWwgfHwgMCk7XG4gIH1cblxuICBhZGRJdGVtKGl0ZW06IFQpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlLmFkZEl0ZW0oaXRlbSk7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgIHRoaXMuc3RhdGUuaW5jcmVtZW50UGFnaW5hdGlvbigpO1xuXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5zdGF0ZS5nZXRRdWVyeVBhcmFtc1ZhbHVlKCk7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuc3RhdGUuZ2V0RmlsdGVyc1ZhbHVlKCk7XG4gICAgY29uc3Qgc29ydHMgPSB0aGlzLnN0YXRlLmdldFNvcnRzVmFsdWUoKTtcbiAgICBjb25zdCBzZWFyY2hUZXJtID0gdGhpcy5zdGF0ZS5nZXRTZWFyY2hUZXJtVmFsdWUoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VydmljZS5nZXREYXRhKFxuICAgICAgcGFyYW1zLnNraXAsXG4gICAgICBwYXJhbXMubGltaXQsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgc29ydHMsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucyxcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzdWx0LkVycm9yTXNnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlLmFwcGVuZEl0ZW1zKHJlc3VsdC5SZXN1bHQgfHwgW10pO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICAvLyA9PT09PSBTZWFyY2ggPT09PT1cblxuICBvblNlYXJjaCh0ZXJtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEhhbmRsZXIuc2VhcmNoKHRlcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU2VhcmNoSGFuZGxlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcuc2VhcmNoRGVib3VuY2VUaW1lKSB7XG4gICAgICB0aGlzLnNlYXJjaEhhbmRsZXIuc2V0RGVib3VuY2VUaW1lKHRoaXMuY29uZmlnLnNlYXJjaERlYm91bmNlVGltZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hIYW5kbGVyLnNlYXJjaCQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodGVybSkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5zZXRTZWFyY2hUZXJtKHRlcm0pO1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT0gRmlsdGVycyAvIFNvcnRzID09PT09XG5cbiAgYXN5bmMgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IEZpbHRlckNvbmRpdGlvbltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS5zZXRGaWx0ZXJzKGZpbHRlcnMpO1xuICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyRmlsdGVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLmNsZWFyRmlsdGVycygpO1xuICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5U29ydHMoc29ydHM6IFNvcnRDb25kaXRpb25bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUuc2V0U29ydHMoc29ydHMpO1xuICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyU29ydHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS5jbGVhclNvcnRzKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgLy8gPT09PT0gVmlzaWJsZSBDb2x1bW5zID09PT09XG5cbiAgdXBkYXRlVmlzaWJsZUNvbHVtbnMoY29sdW1uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5zZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5zKTtcbiAgfVxuXG4gIC8vID09PT09IENhcmQgRGF0YSA9PT09PVxuXG4gIHNlbGVjdENhcmQoY2FyZERhdGE6IENhcmREYXRhIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUuc2V0Q3VycmVudENhcmREYXRhKGNhcmREYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcm9wIHRoZSBjdXJyZW50IGNhcmQgc2VsZWN0aW9uIGJlY2F1c2UgdGhlIGRhdGEgaXQgcmVmZXJyZWQgdG8gaXMgYmVpbmdcbiAgICogcmVwbGFjZWQuIENhbGxlZCBieSBsb2FkRGF0YSgpOyBkZWxpYmVyYXRlbHkgbm90IGJ5IGxvYWRNb3JlKCksIHdoaWNoIG9ubHlcbiAgICogYXBwZW5kcyBhbmQgbGVhdmVzIGFuIGV4aXN0aW5nIHNlbGVjdGlvbiB2YWxpZC5cbiAgICovXG4gIHByb3RlY3RlZCBjbGVhckNhcmRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5zZXRDdXJyZW50Q2FyZERhdGEobnVsbCk7XG4gICAgdGhpcy5jYXJkU2VsZWN0aW9uQ2xlYXJlZC5uZXh0KCk7XG4gIH1cblxuICAvLyA9PT09PSBDUlVEID09PT09XG5cbiAgYXN5bmMgc2F2ZUl0ZW1zKGl0ZW1zOiBUW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnN0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VydmljZS5zYXZlSXRlbXMoaXRlbXMpO1xuICAgIHRoaXMuc3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlc3VsdC5FcnJvck1zZyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnUmVjb3JkKHMpIHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIHJlc3VsdC5mb3JFYWNoKChzYXZlZEl0ZW0pID0+IHRoaXMuc3RhdGUudXBzZXJ0SXRlbShzYXZlZEl0ZW0pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUl0ZW1zKGl0ZW1JZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5zdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlcnZpY2UuZGVsZXRlSXRlbXMoaXRlbUlkcyk7XG4gICAgdGhpcy5zdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzdWx0LkVycm9yTXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpdGVtSWRzLmZvckVhY2goKGlkKSA9PiB0aGlzLnN0YXRlLnJlbW92ZUl0ZW0oaWQpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09IEV4cG9ydCA9PT09PVxuXG4gIGFzeW5jIGV4cG9ydERhdGEoKTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5zdGF0ZS5nZXRGaWx0ZXJzVmFsdWUoKTtcbiAgICBjb25zdCBzb3J0cyA9IHRoaXMuc3RhdGUuZ2V0U29ydHNWYWx1ZSgpO1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0aGlzLnN0YXRlLmdldFNlYXJjaFRlcm1WYWx1ZSgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cG9ydERhdGEoXG4gICAgICBmaWx0ZXJzLFxuICAgICAgc29ydHMsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucyxcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gPT09PT0gQ2xlYW51cCA9PT09PVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmNhcmRTZWxlY3Rpb25DbGVhcmVkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,103 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { lastValueFrom } from 'rxjs';
3
+ import { ErrorResponse, } from 'verben-authentication-ui/src/lib/models';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "verben-authentication-ui/src/lib/services";
6
+ import * as i2 from "../handlers/filter-handler.service";
7
+ import * as i3 from "../handlers/sort-handler.service";
8
+ /**
9
+ * Abstract base service for data pages.
10
+ * Handles list/search/save/delete with filter and sort support.
11
+ *
12
+ * The concrete URLs are built by the protected `*Url` seams below so that
13
+ * services whose API does not follow the default `Get{Endpoint}/{skip}/{limit}`
14
+ * conventions (e.g. plural names or a trailing sort suffix) can override just
15
+ * the URL without reimplementing the request-selection logic in `getData()`.
16
+ * When `baseUrl` is omitted, HttpWebRequestService falls back to the
17
+ * AuthenticationAPI base.
18
+ */
19
+ export class BaseDataPageService {
20
+ server;
21
+ filterHandler;
22
+ sortHandler;
23
+ baseUrl;
24
+ constructor(server, filterHandler, sortHandler, baseUrl) {
25
+ this.server = server;
26
+ this.filterHandler = filterHandler;
27
+ this.sortHandler = sortHandler;
28
+ this.baseUrl = baseUrl;
29
+ }
30
+ // ===== URL seams (override in child services when the API deviates) =====
31
+ listUrl(skip, limit) {
32
+ return `Get${this.getEndpoint()}/${skip}/${limit}`;
33
+ }
34
+ searchTermUrl(term, skip, limit) {
35
+ return `Get${this.getEndpoint()}WithParam/${term}/${skip}/${limit}`;
36
+ }
37
+ filterSearchUrl(skip, limit) {
38
+ return `Search${this.getEndpoint()}/${skip}/${limit}`;
39
+ }
40
+ saveUrl() {
41
+ return `Save${this.getEndpoint()}`;
42
+ }
43
+ deleteUrl(itemIds) {
44
+ return `${this.getEndpoint()}/${itemIds.join(',')}`;
45
+ }
46
+ // ===== Payload =====
47
+ buildPayload(filters, sorts, columns) {
48
+ const filterPayload = this.filterHandler.buildFilterPayload(filters, columns);
49
+ const sortPayload = this.sortHandler.buildSortPayload(sorts, columns);
50
+ return [...filterPayload, ...sortPayload];
51
+ }
52
+ // ===== Reads =====
53
+ /**
54
+ * Fetch data, automatically choosing the endpoint based on parameters:
55
+ * search-only -> GET WithParam, filters/sorts -> POST Search, otherwise plain GET.
56
+ */
57
+ async getData(skip, limit, filters, sorts, searchTerm, columns) {
58
+ const hasFilters = !!filters && filters.length > 0;
59
+ const hasSorts = !!sorts && sorts.length > 0;
60
+ if (searchTerm && !hasFilters && !hasSorts) {
61
+ return this.server.get(this.searchTermUrl(searchTerm, skip, limit), this.baseUrl);
62
+ }
63
+ if (hasFilters || hasSorts) {
64
+ if (!columns) {
65
+ throw new Error('Columns required for filter/sort operations');
66
+ }
67
+ const payload = this.buildPayload(filters || [], sorts || [], columns);
68
+ return this.server.post(this.filterSearchUrl(skip, limit), payload, this.baseUrl);
69
+ }
70
+ return this.server.get(this.listUrl(skip, limit), this.baseUrl);
71
+ }
72
+ // ===== Writes =====
73
+ async saveItems(items) {
74
+ return this.server.post(this.saveUrl(), items, this.baseUrl);
75
+ }
76
+ async deleteItems(itemIds) {
77
+ // HttpWebRequestService.delete returns a raw observable that rejects on HTTP
78
+ // error (unlike get/post, which resolve an ErrorResponse), so normalize here
79
+ // to keep the facade's error-handling contract uniform.
80
+ try {
81
+ const result = await lastValueFrom(this.server.delete(this.deleteUrl(itemIds), this.baseUrl));
82
+ return result ?? false;
83
+ }
84
+ catch (err) {
85
+ const msg = err?.error?.ErrorMsg || err?.ErrorMsg || err?.message || 'Delete failed';
86
+ return new ErrorResponse(msg);
87
+ }
88
+ }
89
+ // ===== Export =====
90
+ async exportData(filters, sorts, searchTerm, columns) {
91
+ const result = await this.getData(0, 999999, filters, sorts, searchTerm, columns);
92
+ if (result instanceof ErrorResponse) {
93
+ return result;
94
+ }
95
+ return result.Result || [];
96
+ }
97
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseDataPageService, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
98
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseDataPageService });
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseDataPageService, decorators: [{
101
+ type: Injectable
102
+ }], ctorParameters: () => [{ type: i1.HttpWebRequestService }, { type: i2.FilterHandlerService }, { type: i3.SortHandlerService }, { type: undefined }] });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLXBhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2Jhc2UvY29yZS9iYXNlLWRhdGEtcGFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBRUwsYUFBYSxHQUVkLE1BQU0seUNBQXlDLENBQUM7Ozs7O0FBT2pEOzs7Ozs7Ozs7O0dBVUc7QUFFSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUUzQjtJQUNBO0lBQ0E7SUFDQTtJQUpaLFlBQ1ksTUFBNkIsRUFDN0IsYUFBbUMsRUFDbkMsV0FBK0IsRUFDL0IsT0FBZ0I7UUFIaEIsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixZQUFPLEdBQVAsT0FBTyxDQUFTO0lBQ3pCLENBQUM7SUFLSiwyRUFBMkU7SUFFakUsT0FBTyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQzNDLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFUyxhQUFhLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxLQUFhO1FBQy9ELE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRVMsZUFBZSxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ25ELE9BQU8sU0FBUyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxJQUFJLEtBQUssRUFB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UUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sR0FBRyxHQUNQLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLEdBQUcsRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxlQUFlLENBQUM7WUFDM0UsT0FBTyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtJQUVyQixLQUFLLENBQUMsVUFBVSxDQUNkLE9BQTJCLEVBQzNCLEtBQXVCLEVBQ3ZCLFVBQW1CLEVBQ25CLE9BQStCO1FBRS9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xGLElBQUksTUFBTSxZQUFZLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7d0dBdkhtQixtQkFBbUI7NEdBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJhc2VNb2RlbCxcbiAgRXJyb3JSZXNwb25zZSxcbiAgUGFnZWRSZXN1bHQsXG59IGZyb20gJ3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uLCBGaWx0ZXJDb25kaXRpb24sIFNvcnRDb25kaXRpb24gfSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgRmlsdGVySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9oYW5kbGVycy9maWx0ZXItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNvcnRIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL2hhbmRsZXJzL3NvcnQtaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5VmFsdWUgfSBmcm9tICcuLi9tb2RlbHMvYXBpLXBheWxvYWQnO1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2Ugc2VydmljZSBmb3IgZGF0YSBwYWdlcy5cbiAqIEhhbmRsZXMgbGlzdC9zZWFyY2gvc2F2ZS9kZWxldGUgd2l0aCBmaWx0ZXIgYW5kIHNvcnQgc3VwcG9ydC5cbiAqXG4gKiBUaGUgY29uY3JldGUgVVJMcyBhcmUgYnVpbHQgYnkgdGhlIHByb3RlY3RlZCBgKlVybGAgc2VhbXMgYmVsb3cgc28gdGhhdFxuICogc2VydmljZXMgd2hvc2UgQVBJIGRvZXMgbm90IGZvbGxvdyB0aGUgZGVmYXVsdCBgR2V0e0VuZHBvaW50fS97c2tpcH0ve2xpbWl0fWBcbiAqIGNvbnZlbnRpb25zIChlLmcuIHBsdXJhbCBuYW1lcyBvciBhIHRyYWlsaW5nIHNvcnQgc3VmZml4KSBjYW4gb3ZlcnJpZGUganVzdFxuICogdGhlIFVSTCB3aXRob3V0IHJlaW1wbGVtZW50aW5nIHRoZSByZXF1ZXN0LXNlbGVjdGlvbiBsb2dpYyBpbiBgZ2V0RGF0YSgpYC5cbiAqIFdoZW4gYGJhc2VVcmxgIGlzIG9taXR0ZWQsIEh0dHBXZWJSZXF1ZXN0U2VydmljZSBmYWxscyBiYWNrIHRvIHRoZVxuICogQXV0aGVudGljYXRpb25BUEkgYmFzZS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEYXRhUGFnZVNlcnZpY2U8VCBleHRlbmRzIEJhc2VNb2RlbD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGZpbHRlckhhbmRsZXI6IEZpbHRlckhhbmRsZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzb3J0SGFuZGxlcjogU29ydEhhbmRsZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBiYXNlVXJsPzogc3RyaW5nLFxuICApIHt9XG5cbiAgLyoqIEFQSSBlbmRwb2ludCBuYW1lIChlLmcuICdVc2VyJykuIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgY2hpbGQgY2xhc3Nlcy4gKi9cbiAgYWJzdHJhY3QgZ2V0RW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8vID09PT09IFVSTCBzZWFtcyAob3ZlcnJpZGUgaW4gY2hpbGQgc2VydmljZXMgd2hlbiB0aGUgQVBJIGRldmlhdGVzKSA9PT09PVxuXG4gIHByb3RlY3RlZCBsaXN0VXJsKHNraXA6IG51bWJlciwgbGltaXQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBHZXQke3RoaXMuZ2V0RW5kcG9pbnQoKX0vJHtza2lwfS8ke2xpbWl0fWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VhcmNoVGVybVVybCh0ZXJtOiBzdHJpbmcsIHNraXA6IG51bWJlciwgbGltaXQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBHZXQke3RoaXMuZ2V0RW5kcG9pbnQoKX1XaXRoUGFyYW0vJHt0ZXJtfS8ke3NraXB9LyR7bGltaXR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJTZWFyY2hVcmwoc2tpcDogbnVtYmVyLCBsaW1pdDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFNlYXJjaCR7dGhpcy5nZXRFbmRwb2ludCgpfS8ke3NraXB9LyR7bGltaXR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBTYXZlJHt0aGlzLmdldEVuZHBvaW50KCl9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWxldGVVcmwoaXRlbUlkczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmdldEVuZHBvaW50KCl9LyR7aXRlbUlkcy5qb2luKCcsJyl9YDtcbiAgfVxuXG4gIC8vID09PT09IFBheWxvYWQgPT09PT1cblxuICBidWlsZFBheWxvYWQoXG4gICAgZmlsdGVyczogRmlsdGVyQ29uZGl0aW9uW10sXG4gICAgc29ydHM6IFNvcnRDb25kaXRpb25bXSxcbiAgICBjb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10sXG4gICk6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSB7XG4gICAgY29uc3QgZmlsdGVyUGF5bG9hZCA9IHRoaXMuZmlsdGVySGFuZGxlci5idWlsZEZpbHRlclBheWxvYWQoZmlsdGVycywgY29sdW1ucyk7XG4gICAgY29uc3Qgc29ydFBheWxvYWQgPSB0aGlzLnNvcnRIYW5kbGVyLmJ1aWxkU29ydFBheWxvYWQoc29ydHMsIGNvbHVtbnMpO1xuICAgIHJldHVybiBbLi4uZmlsdGVyUGF5bG9hZCwgLi4uc29ydFBheWxvYWRdO1xuICB9XG5cbiAgLy8gPT09PT0gUmVhZHMgPT09PT1cblxuICAvKipcbiAgICogRmV0Y2ggZGF0YSwgYXV0b21hdGljYWxseSBjaG9vc2luZyB0aGUgZW5kcG9pbnQgYmFzZWQgb24gcGFyYW1ldGVyczpcbiAgICogc2VhcmNoLW9ubHkgLT4gR0VUIFdpdGhQYXJhbSwgZmlsdGVycy9zb3J0cyAtPiBQT1NUIFNlYXJjaCwgb3RoZXJ3aXNlIHBsYWluIEdFVC5cbiAgICovXG4gIGFzeW5jIGdldERhdGEoXG4gICAgc2tpcDogbnVtYmVyLFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICAgZmlsdGVycz86IEZpbHRlckNvbmRpdGlvbltdLFxuICAgIHNvcnRzPzogU29ydENvbmRpdGlvbltdLFxuICAgIHNlYXJjaFRlcm0/OiBzdHJpbmcsXG4gICAgY29sdW1ucz86IENvbHVtbkRlZmluaXRpb248VD5bXSxcbiAgKTogUHJvbWlzZTxQYWdlZFJlc3VsdDxUPiB8IEVycm9yUmVzcG9uc2U+IHtcbiAgICBjb25zdCBoYXNGaWx0ZXJzID0gISFmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNTb3J0cyA9ICEhc29ydHMgJiYgc29ydHMubGVuZ3RoID4gMDtcblxuICAgIGlmIChzZWFyY2hUZXJtICYmICFoYXNGaWx0ZXJzICYmICFoYXNTb3J0cykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VydmVyLmdldDxQYWdlZFJlc3VsdDxUPj4oXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybVVybChzZWFyY2hUZXJtLCBza2lwLCBsaW1pdCksXG4gICAgICAgIHRoaXMuYmFzZVVybCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0ZpbHRlcnMgfHwgaGFzU29ydHMpIHtcbiAgICAgIGlmICghY29sdW1ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbnMgcmVxdWlyZWQgZm9yIGZpbHRlci9zb3J0IG9wZXJhdGlvbnMnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmJ1aWxkUGF5bG9hZChmaWx0ZXJzIHx8IFtdLCBzb3J0cyB8fCBbXSwgY29sdW1ucyk7XG4gICAgICByZXR1cm4gdGhpcy5zZXJ2ZXIucG9zdDxQYWdlZFJlc3VsdDxUPj4oXG4gICAgICAgIHRoaXMuZmlsdGVyU2VhcmNoVXJsKHNraXAsIGxpbWl0KSxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgdGhpcy5iYXNlVXJsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXJ2ZXIuZ2V0PFBhZ2VkUmVzdWx0PFQ+Pih0aGlzLmxpc3RVcmwoc2tpcCwgbGltaXQpLCB0aGlzLmJhc2VVcmwpO1xuICB9XG5cbiAgLy8gPT09PT0gV3JpdGVzID09PT09XG5cbiAgYXN5bmMgc2F2ZUl0ZW1zKGl0ZW1zOiBUW10pOiBQcm9taXNlPFRbXSB8IEVycm9yUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2ZXIucG9zdDxUW10+KHRoaXMuc2F2ZVVybCgpLCBpdGVtcywgdGhpcy5iYXNlVXJsKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUl0ZW1zKGl0ZW1JZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxib29sZWFuIHwgRXJyb3JSZXNwb25zZT4ge1xuICAgIC8vIEh0dHBXZWJSZXF1ZXN0U2VydmljZS5kZWxldGUgcmV0dXJucyBhIHJhdyBvYnNlcnZhYmxlIHRoYXQgcmVqZWN0cyBvbiBIVFRQXG4gICAgLy8gZXJyb3IgKHVubGlrZSBnZXQvcG9zdCwgd2hpY2ggcmVzb2x2ZSBhbiBFcnJvclJlc3BvbnNlKSwgc28gbm9ybWFsaXplIGhlcmVcbiAgICAvLyB0byBrZWVwIHRoZSBmYWNhZGUncyBlcnJvci1oYW5kbGluZyBjb250cmFjdCB1bmlmb3JtLlxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLnNlcnZlci5kZWxldGU8Ym9vbGVhbj4odGhpcy5kZWxldGVVcmwoaXRlbUlkcyksIHRoaXMuYmFzZVVybCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3VsdCA/PyBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgY29uc3QgbXNnID1cbiAgICAgICAgZXJyPy5lcnJvcj8uRXJyb3JNc2cgfHwgZXJyPy5FcnJvck1zZyB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0RlbGV0ZSBmYWlsZWQnO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvclJlc3BvbnNlKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT0gRXhwb3J0ID09PT09XG5cbiAgYXN5bmMgZXhwb3J0RGF0YShcbiAgICBmaWx0ZXJzPzogRmlsdGVyQ29uZGl0aW9uW10sXG4gICAgc29ydHM/OiBTb3J0Q29uZGl0aW9uW10sXG4gICAgc2VhcmNoVGVybT86IHN0cmluZyxcbiAgICBjb2x1bW5zPzogQ29sdW1uRGVmaW5pdGlvbjxUPltdLFxuICApOiBQcm9taXNlPFRbXSB8IEVycm9yUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldERhdGEoMCwgOTk5OTk5LCBmaWx0ZXJzLCBzb3J0cywgc2VhcmNoVGVybSwgY29sdW1ucyk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuUmVzdWx0IHx8IFtdO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,203 @@
1
+ import { signal } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { SortDirection, } from 'verben-authentication-ui/src/lib/models';
4
+ /**
5
+ * Abstract state management for base data pages.
6
+ * Tracks items, loading state, query params, filters, sorts, search, and
7
+ * visible columns. Card data is held in signals for cheap change detection.
8
+ */
9
+ export class BaseDataPageState {
10
+ updating$ = new BehaviorSubject(false);
11
+ items$ = new BehaviorSubject([]);
12
+ totalCount$ = new BehaviorSubject(0);
13
+ queryParams$ = new BehaviorSubject({
14
+ skip: 0,
15
+ limit: 20,
16
+ sortOrder: SortDirection.Asc,
17
+ });
18
+ searchTerm$ = new BehaviorSubject('');
19
+ filters$ = new BehaviorSubject([]);
20
+ sorts$ = new BehaviorSubject([]);
21
+ visibleColumns$ = new BehaviorSubject([]);
22
+ cardData = signal([]);
23
+ currentCardData = signal(null);
24
+ cardDataMapper;
25
+ /**
26
+ * Stable identity for a record. The auth models key on uppercase `Id`/`Code`
27
+ * and only sometimes carry a lowercase `id`, so match across all three rather
28
+ * than assuming one is populated.
29
+ */
30
+ getItemKey(item) {
31
+ return item.Id || item.id || item.Code;
32
+ }
33
+ updateCardDataFromItems(items) {
34
+ if (this.cardDataMapper) {
35
+ this.cardData.set(items.map((item) => this.cardDataMapper(item)));
36
+ }
37
+ }
38
+ // ===== Loading State =====
39
+ isUpdating$() {
40
+ return this.updating$.asObservable();
41
+ }
42
+ setUpdating(isUpdating) {
43
+ this.updating$.next(isUpdating);
44
+ }
45
+ // ===== Items =====
46
+ getItems$() {
47
+ return this.items$.asObservable();
48
+ }
49
+ getItemsValue() {
50
+ return this.items$.getValue();
51
+ }
52
+ setItems(items) {
53
+ this.items$.next(items);
54
+ this.updateCardDataFromItems(items);
55
+ }
56
+ appendItems(newItems) {
57
+ const allItems = [...this.items$.getValue(), ...newItems];
58
+ this.items$.next(allItems);
59
+ this.updateCardDataFromItems(allItems);
60
+ }
61
+ addItem(item) {
62
+ const allItems = [item, ...this.items$.getValue()];
63
+ this.items$.next(allItems);
64
+ this.updateCardDataFromItems(allItems);
65
+ }
66
+ updateItem(updatedItem) {
67
+ const items = this.items$.getValue();
68
+ const key = this.getItemKey(updatedItem);
69
+ const index = items.findIndex((item) => this.getItemKey(item) === key);
70
+ if (index !== -1) {
71
+ items[index] = updatedItem;
72
+ const allItems = [...items];
73
+ this.items$.next(allItems);
74
+ this.updateCardDataFromItems(allItems);
75
+ }
76
+ }
77
+ /** Update the item when its key already exists, otherwise prepend it. */
78
+ upsertItem(item) {
79
+ const key = this.getItemKey(item);
80
+ const exists = this.items$
81
+ .getValue()
82
+ .some((existing) => this.getItemKey(existing) === key);
83
+ if (exists) {
84
+ this.updateItem(item);
85
+ }
86
+ else {
87
+ this.addItem(item);
88
+ }
89
+ }
90
+ removeItem(itemKey) {
91
+ const filteredItems = this.items$
92
+ .getValue()
93
+ .filter((item) => this.getItemKey(item) !== itemKey);
94
+ this.items$.next(filteredItems);
95
+ this.updateCardDataFromItems(filteredItems);
96
+ }
97
+ clearItems() {
98
+ this.items$.next([]);
99
+ this.updateCardDataFromItems([]);
100
+ }
101
+ // ===== Total Count =====
102
+ getTotalCount$() {
103
+ return this.totalCount$.asObservable();
104
+ }
105
+ setTotalCount(count) {
106
+ this.totalCount$.next(count);
107
+ }
108
+ // ===== Query Parameters =====
109
+ getQueryParams$() {
110
+ return this.queryParams$.asObservable();
111
+ }
112
+ getQueryParamsValue() {
113
+ return this.queryParams$.getValue();
114
+ }
115
+ updateQueryParams(params) {
116
+ this.queryParams$.next({ ...this.queryParams$.getValue(), ...params });
117
+ }
118
+ resetPagination() {
119
+ this.queryParams$.next({ ...this.queryParams$.getValue(), skip: 0 });
120
+ }
121
+ incrementPagination() {
122
+ const currentParams = this.queryParams$.getValue();
123
+ this.queryParams$.next({
124
+ ...currentParams,
125
+ skip: currentParams.skip + currentParams.limit,
126
+ });
127
+ }
128
+ // ===== Search =====
129
+ getSearchTerm$() {
130
+ return this.searchTerm$.asObservable();
131
+ }
132
+ getSearchTermValue() {
133
+ return this.searchTerm$.getValue();
134
+ }
135
+ setSearchTerm(term) {
136
+ this.searchTerm$.next(term);
137
+ }
138
+ // ===== Filters =====
139
+ getFilters$() {
140
+ return this.filters$.asObservable();
141
+ }
142
+ getFiltersValue() {
143
+ return this.filters$.getValue();
144
+ }
145
+ setFilters(filters) {
146
+ this.filters$.next(filters);
147
+ }
148
+ clearFilters() {
149
+ this.filters$.next([]);
150
+ }
151
+ // ===== Sorts =====
152
+ getSorts$() {
153
+ return this.sorts$.asObservable();
154
+ }
155
+ getSortsValue() {
156
+ return this.sorts$.getValue();
157
+ }
158
+ setSorts(sorts) {
159
+ this.sorts$.next(sorts);
160
+ }
161
+ clearSorts() {
162
+ this.sorts$.next([]);
163
+ }
164
+ // ===== Visible Columns =====
165
+ getVisibleColumns$() {
166
+ return this.visibleColumns$.asObservable();
167
+ }
168
+ getVisibleColumnsValue() {
169
+ return this.visibleColumns$.getValue();
170
+ }
171
+ setVisibleColumns(columns) {
172
+ this.visibleColumns$.next(columns);
173
+ }
174
+ // ===== Card Data =====
175
+ setCardDataMapper(mapper) {
176
+ this.cardDataMapper = mapper;
177
+ }
178
+ getCardData() {
179
+ return this.cardData;
180
+ }
181
+ setCardData(data) {
182
+ this.cardData.set(data);
183
+ }
184
+ getCurrentCardData() {
185
+ return this.currentCardData;
186
+ }
187
+ setCurrentCardData(data) {
188
+ this.currentCardData.set(data);
189
+ }
190
+ // ===== Reset All =====
191
+ reset() {
192
+ this.clearItems();
193
+ this.setSearchTerm('');
194
+ this.clearFilters();
195
+ this.clearSorts();
196
+ this.setVisibleColumns([]);
197
+ this.cardData.set([]);
198
+ this.currentCardData.set(null);
199
+ this.resetPagination();
200
+ this.setTotalCount(0);
201
+ }
202
+ }
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLXBhZ2Uuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9iYXNlL2NvcmUvYmFzZS1kYXRhLXBhZ2Uuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0seUNBQXlDLENBQUM7QUFHakQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBZ0IsaUJBQWlCO0lBQzNCLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUVoRCxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBRTdDLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBaUI7UUFDM0QsSUFBSSxFQUFFLENBQUM7UUFDUCxLQUFLLEVBQUUsRUFBRTtRQUNULFNBQVMsRUFBRSxhQUFhLENBQUMsR0FBRztLQUM3QixDQUFDLENBQUM7SUFFTyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7SUFFOUMsUUFBUSxHQUFHLElBQUksZUFBZSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUN0RCxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBRWxELGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7SUFFakUsUUFBUSxHQUFHLE1BQU0sQ0FBYSxFQUFFLENBQUMsQ0FBQztJQUNsQyxlQUFlLEdBQUcsTUFBTSxDQUFrQixJQUFJLENBQUMsQ0FBQztJQUVoRCxjQUFjLENBQXlC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TyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFxQjtRQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsd0JBQXdCO0lBRXhCLEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJhc2VNb2RlbCxcbiAgUXVlcnlQYXJhbXMsXG4gIFNvcnREaXJlY3Rpb24sXG59IGZyb20gJ3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBDYXJkRGF0YSwgQ29sdW1uRGVmaW5pdGlvbiwgRmlsdGVyQ29uZGl0aW9uLCBTb3J0Q29uZGl0aW9uIH0gZnJvbSAndmVyYmVuLW5nLXVpJztcblxuLyoqXG4gKiBBYnN0cmFjdCBzdGF0ZSBtYW5hZ2VtZW50IGZvciBiYXNlIGRhdGEgcGFnZXMuXG4gKiBUcmFja3MgaXRlbXMsIGxvYWRpbmcgc3RhdGUsIHF1ZXJ5IHBhcmFtcywgZmlsdGVycywgc29ydHMsIHNlYXJjaCwgYW5kXG4gKiB2aXNpYmxlIGNvbHVtbnMuIENhcmQgZGF0YSBpcyBoZWxkIGluIHNpZ25hbHMgZm9yIGNoZWFwIGNoYW5nZSBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YVBhZ2VTdGF0ZTxUIGV4dGVuZHMgQmFzZU1vZGVsPiB7XG4gIHByb3RlY3RlZCB1cGRhdGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgaXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcbiAgcHJvdGVjdGVkIHRvdGFsQ291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gIHByb3RlY3RlZCBxdWVyeVBhcmFtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5UGFyYW1zPFQ+Pih7XG4gICAgc2tpcDogMCxcbiAgICBsaW1pdDogMjAsXG4gICAgc29ydE9yZGVyOiBTb3J0RGlyZWN0aW9uLkFzYyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHNlYXJjaFRlcm0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBwcm90ZWN0ZWQgZmlsdGVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbHRlckNvbmRpdGlvbltdPihbXSk7XG4gIHByb3RlY3RlZCBzb3J0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvcnRDb25kaXRpb25bXT4oW10pO1xuXG4gIHByb3RlY3RlZCB2aXNpYmxlQ29sdW1ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbHVtbkRlZmluaXRpb248VD5bXT4oW10pO1xuXG4gIHByb3RlY3RlZCBjYXJkRGF0YSA9IHNpZ25hbDxDYXJkRGF0YVtdPihbXSk7XG4gIHByb3RlY3RlZCBjdXJyZW50Q2FyZERhdGEgPSBzaWduYWw8Q2FyZERhdGEgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgY2FyZERhdGFNYXBwZXI/OiAoaXRlbTogVCkgPT4gQ2FyZERhdGE7XG5cbiAgLyoqXG4gICAqIFN0YWJsZSBpZGVudGl0eSBmb3IgYSByZWNvcmQuIFRoZSBhdXRoIG1vZGVscyBrZXkgb24gdXBwZXJjYXNlIGBJZGAvYENvZGVgXG4gICAqIGFuZCBvbmx5IHNvbWV0aW1lcyBjYXJyeSBhIGxvd2VyY2FzZSBgaWRgLCBzbyBtYXRjaCBhY3Jvc3MgYWxsIHRocmVlIHJhdGhlclxuICAgKiB0aGFuIGFzc3VtaW5nIG9uZSBpcyBwb3B1bGF0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0SXRlbUtleShpdGVtOiBUKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5JZCB8fCBpdGVtLmlkIHx8IGl0ZW0uQ29kZTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVDYXJkRGF0YUZyb21JdGVtcyhpdGVtczogVFtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FyZERhdGFNYXBwZXIpIHtcbiAgICAgIHRoaXMuY2FyZERhdGEuc2V0KGl0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5jYXJkRGF0YU1hcHBlciEoaXRlbSkpKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PSBMb2FkaW5nIFN0YXRlID09PT09XG5cbiAgaXNVcGRhdGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2V0VXBkYXRpbmcoaXNVcGRhdGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudXBkYXRpbmckLm5leHQoaXNVcGRhdGluZyk7XG4gIH1cblxuICAvLyA9PT09PSBJdGVtcyA9PT09PVxuXG4gIGdldEl0ZW1zJCgpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldEl0ZW1zVmFsdWUoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHNldEl0ZW1zKGl0ZW1zOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zJC5uZXh0KGl0ZW1zKTtcbiAgICB0aGlzLnVwZGF0ZUNhcmREYXRhRnJvbUl0ZW1zKGl0ZW1zKTtcbiAgfVxuXG4gIGFwcGVuZEl0ZW1zKG5ld0l0ZW1zOiBUW10pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxJdGVtcyA9IFsuLi50aGlzLml0ZW1zJC5nZXRWYWx1ZSgpLCAuLi5uZXdJdGVtc107XG4gICAgdGhpcy5pdGVtcyQubmV4dChhbGxJdGVtcyk7XG4gICAgdGhpcy51cGRhdGVDYXJkRGF0YUZyb21JdGVtcyhhbGxJdGVtcyk7XG4gIH1cblxuICBhZGRJdGVtKGl0ZW06IFQpOiB2b2lkIHtcbiAgICBjb25zdCBhbGxJdGVtcyA9IFtpdGVtLCAuLi50aGlzLml0ZW1zJC5nZXRWYWx1ZSgpXTtcbiAgICB0aGlzLml0ZW1zJC5uZXh0KGFsbEl0ZW1zKTtcbiAgICB0aGlzLnVwZGF0ZUNhcmREYXRhRnJvbUl0ZW1zKGFsbEl0ZW1zKTtcbiAgfVxuXG4gIHVwZGF0ZUl0ZW0odXBkYXRlZEl0ZW06IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMkLmdldFZhbHVlKCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJdGVtS2V5KHVwZGF0ZWRJdGVtKTtcbiAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gdGhpcy5nZXRJdGVtS2V5KGl0ZW0pID09PSBrZXkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGl0ZW1zW2luZGV4XSA9IHVwZGF0ZWRJdGVtO1xuICAgICAgY29uc3QgYWxsSXRlbXMgPSBbLi4uaXRlbXNdO1xuICAgICAgdGhpcy5pdGVtcyQubmV4dChhbGxJdGVtcyk7XG4gICAgICB0aGlzLnVwZGF0ZUNhcmREYXRhRnJvbUl0ZW1zKGFsbEl0ZW1zKTtcbiAgICB9XG4gIH1cblxuICAvKiogVXBkYXRlIHRoZSBpdGVtIHdoZW4gaXRzIGtleSBhbHJlYWR5IGV4aXN0cywgb3RoZXJ3aXNlIHByZXBlbmQgaXQuICovXG4gIHVwc2VydEl0ZW0oaXRlbTogVCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0SXRlbUtleShpdGVtKTtcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzLml0ZW1zJFxuICAgICAgLmdldFZhbHVlKClcbiAgICAgIC5zb21lKChleGlzdGluZykgPT4gdGhpcy5nZXRJdGVtS2V5KGV4aXN0aW5nKSA9PT0ga2V5KTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW0oaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkSXRlbShpdGVtKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVJdGVtKGl0ZW1LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zJFxuICAgICAgLmdldFZhbHVlKClcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuZ2V0SXRlbUtleShpdGVtKSAhPT0gaXRlbUtleSk7XG4gICAgdGhpcy5pdGVtcyQubmV4dChmaWx0ZXJlZEl0ZW1zKTtcbiAgICB0aGlzLnVwZGF0ZUNhcmREYXRhRnJvbUl0ZW1zKGZpbHRlcmVkSXRlbXMpO1xuICB9XG5cbiAgY2xlYXJJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zJC5uZXh0KFtdKTtcbiAgICB0aGlzLnVwZGF0ZUNhcmREYXRhRnJvbUl0ZW1zKFtdKTtcbiAgfVxuXG4gIC8vID09PT09IFRvdGFsIENvdW50ID09PT09XG5cbiAgZ2V0VG90YWxDb3VudCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy50b3RhbENvdW50JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNldFRvdGFsQ291bnQoY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG90YWxDb3VudCQubmV4dChjb3VudCk7XG4gIH1cblxuICAvLyA9PT09PSBRdWVyeSBQYXJhbWV0ZXJzID09PT09XG5cbiAgZ2V0UXVlcnlQYXJhbXMkKCk6IE9ic2VydmFibGU8UXVlcnlQYXJhbXM8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVBhcmFtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRRdWVyeVBhcmFtc1ZhbHVlKCk6IFF1ZXJ5UGFyYW1zPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVBhcmFtcyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHVwZGF0ZVF1ZXJ5UGFyYW1zKHBhcmFtczogUGFydGlhbDxRdWVyeVBhcmFtczxUPj4pOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zJC5uZXh0KHsgLi4udGhpcy5xdWVyeVBhcmFtcyQuZ2V0VmFsdWUoKSwgLi4ucGFyYW1zIH0pO1xuICB9XG5cbiAgcmVzZXRQYWdpbmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlQYXJhbXMkLm5leHQoeyAuLi50aGlzLnF1ZXJ5UGFyYW1zJC5nZXRWYWx1ZSgpLCBza2lwOiAwIH0pO1xuICB9XG5cbiAgaW5jcmVtZW50UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtcyQuZ2V0VmFsdWUoKTtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zJC5uZXh0KHtcbiAgICAgIC4uLmN1cnJlbnRQYXJhbXMsXG4gICAgICBza2lwOiBjdXJyZW50UGFyYW1zLnNraXAgKyBjdXJyZW50UGFyYW1zLmxpbWl0LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT0gU2VhcmNoID09PT09XG5cbiAgZ2V0U2VhcmNoVGVybSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hUZXJtJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldFNlYXJjaFRlcm1WYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFRlcm0kLmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXRTZWFyY2hUZXJtKHRlcm06IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dCh0ZXJtKTtcbiAgfVxuXG4gIC8vID09PT09IEZpbHRlcnMgPT09PT1cblxuICBnZXRGaWx0ZXJzJCgpOiBPYnNlcnZhYmxlPEZpbHRlckNvbmRpdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVycyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRGaWx0ZXJzVmFsdWUoKTogRmlsdGVyQ29uZGl0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcnMkLmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXRGaWx0ZXJzKGZpbHRlcnM6IEZpbHRlckNvbmRpdGlvbltdKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJzJC5uZXh0KGZpbHRlcnMpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVycyQubmV4dChbXSk7XG4gIH1cblxuICAvLyA9PT09PSBTb3J0cyA9PT09PVxuXG4gIGdldFNvcnRzJCgpOiBPYnNlcnZhYmxlPFNvcnRDb25kaXRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLnNvcnRzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldFNvcnRzVmFsdWUoKTogU29ydENvbmRpdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0cyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHNldFNvcnRzKHNvcnRzOiBTb3J0Q29uZGl0aW9uW10pOiB2b2lkIHtcbiAgICB0aGlzLnNvcnRzJC5uZXh0KHNvcnRzKTtcbiAgfVxuXG4gIGNsZWFyU29ydHMoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0cyQubmV4dChbXSk7XG4gIH1cblxuICAvLyA9PT09PSBWaXNpYmxlIENvbHVtbnMgPT09PT1cblxuICBnZXRWaXNpYmxlQ29sdW1ucyQoKTogT2JzZXJ2YWJsZTxDb2x1bW5EZWZpbml0aW9uPFQ+W10+IHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRWaXNpYmxlQ29sdW1uc1ZhbHVlKCk6IENvbHVtbkRlZmluaXRpb248VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMkLmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10pOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zJC5uZXh0KGNvbHVtbnMpO1xuICB9XG5cbiAgLy8gPT09PT0gQ2FyZCBEYXRhID09PT09XG5cbiAgc2V0Q2FyZERhdGFNYXBwZXIobWFwcGVyOiAoaXRlbTogVCkgPT4gQ2FyZERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmREYXRhTWFwcGVyID0gbWFwcGVyO1xuICB9XG5cbiAgZ2V0Q2FyZERhdGEoKTogV3JpdGFibGVTaWduYWw8Q2FyZERhdGFbXT4ge1xuICAgIHJldHVybiB0aGlzLmNhcmREYXRhO1xuICB9XG5cbiAgc2V0Q2FyZERhdGEoZGF0YTogQ2FyZERhdGFbXSk6IHZvaWQge1xuICAgIHRoaXMuY2FyZERhdGEuc2V0KGRhdGEpO1xuICB9XG5cbiAgZ2V0Q3VycmVudENhcmREYXRhKCk6IFdyaXRhYmxlU2lnbmFsPENhcmREYXRhIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRDYXJkRGF0YTtcbiAgfVxuXG4gIHNldEN1cnJlbnRDYXJkRGF0YShkYXRhOiBDYXJkRGF0YSB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDYXJkRGF0YS5zZXQoZGF0YSk7XG4gIH1cblxuICAvLyA9PT09PSBSZXNldCBBbGwgPT09PT1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFySXRlbXMoKTtcbiAgICB0aGlzLnNldFNlYXJjaFRlcm0oJycpO1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgdGhpcy5jbGVhclNvcnRzKCk7XG4gICAgdGhpcy5zZXRWaXNpYmxlQ29sdW1ucyhbXSk7XG4gICAgdGhpcy5jYXJkRGF0YS5zZXQoW10pO1xuICAgIHRoaXMuY3VycmVudENhcmREYXRhLnNldChudWxsKTtcbiAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgIHRoaXMuc2V0VG90YWxDb3VudCgwKTtcbiAgfVxufVxuIl19