@mediusinc/mng-commons 5.5.0-rc.0 → 5.5.0-rc.2

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 (170) hide show
  1. package/core/descriptors/table.descriptor.d.ts +4 -2
  2. package/core/directives/rerender.directive.d.ts +9 -0
  3. package/core/helpers/route.d.ts +25 -25
  4. package/core/index.d.ts +2 -0
  5. package/core/reactivity/effect.d.ts +16 -0
  6. package/esm2022/core/components/notification/notification-wrapper.component.mjs +4 -4
  7. package/esm2022/core/components/pages/error/error.page.component.mjs +4 -4
  8. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +4 -4
  9. package/esm2022/core/data-list/data-list-params-helpers.mjs +18 -3
  10. package/esm2022/core/descriptors/table.descriptor.mjs +1 -1
  11. package/esm2022/core/directives/component.directive.mjs +4 -4
  12. package/esm2022/core/directives/rerender.directive.mjs +25 -0
  13. package/esm2022/core/directives/template.directive.mjs +4 -4
  14. package/esm2022/core/index.mjs +4 -1
  15. package/esm2022/core/pipes/boolean.pipe.mjs +6 -6
  16. package/esm2022/core/pipes/class-map.pipe.mjs +4 -4
  17. package/esm2022/core/pipes/enum.pipe.mjs +4 -4
  18. package/esm2022/core/pipes/enumerate-async.pipe.mjs +4 -4
  19. package/esm2022/core/pipes/enumerate.pipe.mjs +4 -4
  20. package/esm2022/core/pipes/getter.pipe.mjs +5 -5
  21. package/esm2022/core/pipes/i18n-property.pipe.mjs +4 -4
  22. package/esm2022/core/pipes/json-path.pipe.mjs +4 -4
  23. package/esm2022/core/pipes/parametrize.pipe.mjs +4 -4
  24. package/esm2022/core/pipes/template.pipe.mjs +4 -4
  25. package/esm2022/core/reactivity/effect.mjs +22 -0
  26. package/esm2022/core/security/permission.service.mjs +4 -4
  27. package/esm2022/core/services/commons-init.service.mjs +4 -4
  28. package/esm2022/core/services/commons-router.service.mjs +4 -4
  29. package/esm2022/core/services/commons-storage.service.mjs +4 -4
  30. package/esm2022/core/services/commons.service.mjs +8 -8
  31. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +32 -25
  32. package/esm2022/filter/descriptors/filter.descriptor.mjs +53 -1
  33. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +4 -4
  34. package/esm2022/form/components/date-range/date-range.component.mjs +4 -4
  35. package/esm2022/form/components/dropdown/dropdown.component.mjs +4 -4
  36. package/esm2022/form/components/number-range/number-range.component.mjs +4 -4
  37. package/esm2022/form/directives/input-trim.directive.mjs +4 -4
  38. package/esm2022/table/api/descriptors/sort.descriptor.mjs +2 -2
  39. package/esm2022/table/api/descriptors/table.descriptor.mjs +32 -8
  40. package/esm2022/table/components/column-filter/column-filter.component.mjs +33 -40
  41. package/esm2022/table/components/column-value/column-value.component.mjs +6 -6
  42. package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +7 -7
  43. package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +24 -34
  44. package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +44 -45
  45. package/esm2022/table/components/table/table.component.mjs +114 -430
  46. package/esm2022/table/helpers/filters.mjs +9 -25
  47. package/esm2022/table/helpers/table.mjs +24 -0
  48. package/esm2022/table/index.mjs +2 -2
  49. package/esm2022/table/models/column-preferences.model.mjs +1 -1
  50. package/esm2022/table/models/filter.model.mjs +1 -1
  51. package/esm2022/table/pipes/filter-value.pipe.mjs +4 -4
  52. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +4 -4
  53. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +4 -4
  54. package/esm2022/table/services/table-data.service.mjs +194 -0
  55. package/esm2022/table/services/table-metadata.service.mjs +136 -0
  56. package/esm2022/table/services/table-preferences.service.mjs +142 -0
  57. package/esm2022/tableview/action/components/action/action.component.mjs +6 -7
  58. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +4 -4
  59. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +69 -46
  60. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +4 -4
  61. package/esm2022/tableview/action/components/route/action-route.component.mjs +5 -6
  62. package/esm2022/tableview/action/components/table/action-table.component.mjs +4 -4
  63. package/esm2022/tableview/action/helpers/action-execution.mjs +25 -0
  64. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +2 -3
  65. package/esm2022/tableview/action/services/action-executor.service.mjs +12 -79
  66. package/esm2022/tableview/action/services/component-action-executor.service.mjs +4 -4
  67. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +4 -4
  68. package/esm2022/tableview/action/services/navigation.service.mjs +4 -4
  69. package/esm2022/tableview/action/services/root-action-executor.service.mjs +4 -4
  70. package/esm2022/tableview/action/services/view-container.service.mjs +4 -4
  71. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +13 -1
  72. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +67 -10
  73. package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +2 -2
  74. package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +17 -1
  75. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +32 -7
  76. package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +2 -2
  77. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +20 -1
  78. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +2 -1
  79. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +4 -4
  80. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +13 -5
  81. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +3 -2
  82. package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +2 -2
  83. package/esm2022/tableview/editor/components/editor/auto-save-status/auto-save-status.component.mjs +4 -4
  84. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +31 -38
  85. package/esm2022/tableview/editor/components/formly/constants.mjs +2 -0
  86. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
  87. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +7 -5
  88. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +4 -4
  89. package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +7 -5
  90. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +7 -5
  91. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +4 -4
  92. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +5 -5
  93. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +4 -4
  94. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +5 -6
  95. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +10 -6
  96. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +11 -7
  97. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +4 -4
  98. package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +6 -5
  99. package/esm2022/tableview/editor/components/formly/pipes/formly-field-label.pipe.mjs +4 -4
  100. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +4 -4
  101. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +10 -5
  102. package/esm2022/tableview/editor/helpers/editor-autosave.mjs +2 -2
  103. package/esm2022/tableview/editor/services/form-editor.service.mjs +4 -4
  104. package/esm2022/tableview/index.mjs +1 -2
  105. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +4 -4
  106. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +4 -4
  107. package/fesm2022/mediusinc-mng-commons-core.mjs +130 -71
  108. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  109. package/fesm2022/mediusinc-mng-commons-filter.mjs +83 -24
  110. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  111. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  112. package/fesm2022/mediusinc-mng-commons-form.mjs +15 -15
  113. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  114. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  115. package/fesm2022/mediusinc-mng-commons-table-api.mjs +32 -8
  116. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  117. package/fesm2022/mediusinc-mng-commons-table.mjs +700 -603
  118. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  119. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +165 -26
  120. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  121. package/fesm2022/mediusinc-mng-commons-tableview.mjs +265 -317
  122. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  123. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  124. package/filter/descriptors/filter-lookup.descriptor.d.ts +17 -20
  125. package/filter/descriptors/filter.descriptor.d.ts +32 -2
  126. package/form/components/date-range/date-range.component.d.ts +3 -3
  127. package/form/components/number-range/number-range.component.d.ts +2 -2
  128. package/package.json +4 -4
  129. package/table/api/descriptors/column.descriptor.d.ts +1 -1
  130. package/table/api/descriptors/sort.descriptor.d.ts +2 -2
  131. package/table/api/descriptors/table.descriptor.d.ts +21 -7
  132. package/table/components/column-filter/column-filter.component.d.ts +8 -14
  133. package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +5 -5
  134. package/table/components/filter/filter-form/filter-form.component.d.ts +10 -19
  135. package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +11 -13
  136. package/table/components/table/table.component.d.ts +20 -64
  137. package/table/helpers/filters.d.ts +4 -7
  138. package/table/helpers/table.d.ts +6 -0
  139. package/table/index.d.ts +1 -1
  140. package/table/models/column-preferences.model.d.ts +2 -2
  141. package/table/models/filter.model.d.ts +14 -2
  142. package/table/services/table-data.service.d.ts +36 -0
  143. package/table/services/table-metadata.service.d.ts +31 -0
  144. package/table/services/table-preferences.service.d.ts +25 -0
  145. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +4 -7
  146. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +1 -1
  147. package/tableview/action/helpers/action-execution.d.ts +7 -0
  148. package/tableview/action/models/execution/action-instance.model.d.ts +1 -2
  149. package/tableview/action/services/action-executor.service.d.ts +1 -2
  150. package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +1 -0
  151. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +12 -4
  152. package/tableview/api/action/descriptors/action-link.descriptor.d.ts +1 -0
  153. package/tableview/api/action/descriptors/action.descriptor.d.ts +5 -3
  154. package/tableview/api/action/models/execution/action-instance-state.model.d.ts +1 -1
  155. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +15 -10
  156. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +1 -1
  157. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +6 -4
  158. package/tableview/editor/components/editor/form-editor.component.d.ts +3 -2
  159. package/tableview/editor/components/formly/constants.d.ts +1 -0
  160. package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +1 -1
  161. package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +1 -0
  162. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +1 -0
  163. package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +2 -1
  164. package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +1 -0
  165. package/tableview/index.d.ts +0 -1
  166. package/version-info.json +5 -5
  167. package/esm2022/table/services/data-list.service.mjs +0 -29
  168. package/esm2022/tableview/action/models/execution/action-instance-state.model.mjs +0 -32
  169. package/table/services/data-list.service.d.ts +0 -19
  170. package/tableview/action/models/execution/action-instance-state.model.d.ts +0 -30
@@ -0,0 +1,194 @@
1
+ import { Injectable, Injector, computed, inject, signal } from '@angular/core';
2
+ import { CommonsService, toObservable as commonsToObservable, effectWithDeps } from '@mediusinc/mng-commons/core';
3
+ import { TableDynamicDescriptorInst, TablePaginationModeEnum } from '@mediusinc/mng-commons/table/api';
4
+ import { tableCreateFilterMeta, tableCreateSortMeta } from '../helpers/table';
5
+ import { TableMetadataService } from './table-metadata.service';
6
+ import * as i0 from "@angular/core";
7
+ export class TableDataService {
8
+ constructor() {
9
+ this.#injector = inject(Injector);
10
+ this.#commons = inject(CommonsService);
11
+ this.#metadata = inject(TableMetadataService);
12
+ // signal sources
13
+ this.#dataSources = signal({});
14
+ // data sources
15
+ this.#manualLoading = computed(() => this.#dataSources()?.manualLoading?.());
16
+ // results that are set directly via input and are not result of a asynchronous operation (aka data provider)
17
+ this.#synchronousResult = computed(() => {
18
+ const dataSources = this.#dataSources();
19
+ if (dataSources?.dataProvider?.() !== undefined) {
20
+ return undefined;
21
+ }
22
+ if (dataSources?.dataListResult?.() !== undefined) {
23
+ return dataSources?.dataListResult();
24
+ }
25
+ if (dataSources?.arrayItems?.() !== undefined) {
26
+ return { data: dataSources.arrayItems(), totalCount: dataSources.arrayItems()?.length ?? 0 };
27
+ }
28
+ return undefined;
29
+ });
30
+ this.#dataProvider = computed(() => this.#dataSources()?.dataProvider?.());
31
+ this.#dataProviderService = computed(() => {
32
+ const dataProvider = this.#dataProvider();
33
+ return dataProvider?.serviceType ? this.#injector.get(dataProvider.serviceType) : null;
34
+ });
35
+ this.#synchronousResultEffect = effectWithDeps([this.#synchronousResult], ([res]) => {
36
+ if (res != null) {
37
+ this.#setData(res.data ?? [], res.totalCount);
38
+ }
39
+ });
40
+ this.#synchronousLoadingEffect = effectWithDeps([this.#synchronousResult, this.#manualLoading], ([res, manualLoading]) => {
41
+ if (res != null && manualLoading == null) {
42
+ this.#loading.set(false);
43
+ }
44
+ });
45
+ this.#manualLoadingEffect = effectWithDeps([this.#manualLoading], ([manualLoading]) => {
46
+ if (manualLoading != null) {
47
+ this.#loading.set(manualLoading);
48
+ }
49
+ });
50
+ // pagination
51
+ this.#params = signal(undefined);
52
+ this.params = this.#params.asReadonly();
53
+ this.#sortMeta = signal(undefined);
54
+ this.sortMeta = this.#sortMeta.asReadonly();
55
+ this.#filterMeta = signal({});
56
+ this.filterMeta = this.#filterMeta.asReadonly();
57
+ this.#isSortAndFilterMetaInitialized = signal(false);
58
+ this.#defaultParamsEffect = effectWithDeps([this.#metadata.defaultParams], ([defaultParams]) => {
59
+ this.#sortMeta.set(tableCreateSortMeta(defaultParams));
60
+ this.#filterMeta.set(tableCreateFilterMeta(defaultParams));
61
+ this.#isSortAndFilterMetaInitialized.set(true);
62
+ }, { firstOnly: true });
63
+ this.#isSearchMetaInitialized = signal(false);
64
+ this.#searchMeta = signal(undefined);
65
+ this.searchMeta = this.#searchMeta.asReadonly();
66
+ this.isAllPaginationMetaInitialized = computed(() => this.#isSortAndFilterMetaInitialized() && this.#isSortAndFilterMetaInitialized());
67
+ this.paginationMode = computed(() => {
68
+ const descriptor = this.#metadata.descriptor();
69
+ if (descriptor.paginationMode != null) {
70
+ // descriptor choice is the strongest - if defined, use this value
71
+ return descriptor.paginationMode;
72
+ }
73
+ else if (this.#dataProvider() != null) {
74
+ // when data provider is used, use pagination
75
+ return TablePaginationModeEnum.Pagination;
76
+ }
77
+ else {
78
+ return TablePaginationModeEnum.None;
79
+ }
80
+ });
81
+ this.offset = computed(() => this.params()?.offset ?? 0);
82
+ this.rows = computed(() => {
83
+ if (this.params()?.limit) {
84
+ return this.params()?.limit;
85
+ }
86
+ const descriptor = this.#metadata.descriptor();
87
+ const rowsPerPageOptions = this.#metadata.rowsPerPageOptions();
88
+ if (descriptor.defaultNumRows && rowsPerPageOptions.includes(descriptor.defaultNumRows)) {
89
+ return descriptor.defaultNumRows;
90
+ }
91
+ return rowsPerPageOptions[0];
92
+ });
93
+ // data
94
+ this.#data = signal([]);
95
+ this.data = this.#data.asReadonly();
96
+ this.#count = signal(0);
97
+ this.count = this.#count.asReadonly();
98
+ this.#loading = signal(true);
99
+ this.loading = this.#loading.asReadonly();
100
+ }
101
+ #injector;
102
+ #commons;
103
+ #metadata;
104
+ // signal sources
105
+ #dataSources;
106
+ // data sources
107
+ #manualLoading;
108
+ // results that are set directly via input and are not result of a asynchronous operation (aka data provider)
109
+ #synchronousResult;
110
+ #dataProvider;
111
+ #dataProviderService;
112
+ #synchronousResultEffect;
113
+ #synchronousLoadingEffect;
114
+ #manualLoadingEffect;
115
+ #dataProviderSubscription;
116
+ // pagination
117
+ #params;
118
+ #sortMeta;
119
+ #filterMeta;
120
+ #isSortAndFilterMetaInitialized;
121
+ #defaultParamsEffect;
122
+ #isSearchMetaInitialized;
123
+ #searchMeta;
124
+ // data
125
+ #data;
126
+ #count;
127
+ #loading;
128
+ setDataSources(arrayItems, dataListResult, dataProvider, manualLoading) {
129
+ this.#dataSources.set({ arrayItems, dataListResult, dataProvider, manualLoading });
130
+ }
131
+ fetchWithDataProvider(params, onErrorFn) {
132
+ const dataProvider = this.#dataProvider();
133
+ if (!dataProvider || params.limit === 0) {
134
+ return false;
135
+ }
136
+ this.#dataProviderSubscription?.unsubscribe();
137
+ this.#loading.set(true);
138
+ this.#dataProviderSubscription = commonsToObservable(dataProvider.getAll(params, this.#dataProviderService(), this.#metadata.descriptor().isLocalized ? (this.#commons.appDataLocale() ?? undefined) : undefined)).subscribe({
139
+ next: res => {
140
+ const descriptorInput = this.#metadata.descriptorFromSource();
141
+ if (descriptorInput instanceof TableDynamicDescriptorInst) {
142
+ this.#metadata.setDescriptor(descriptorInput.toTableDescriptorFromData(res));
143
+ }
144
+ this.#setData(res?.data ?? [], res?.totalCount);
145
+ this.#loading.set(false);
146
+ },
147
+ error: err => {
148
+ onErrorFn(err);
149
+ this.#setData([]);
150
+ this.#loading.set(false);
151
+ }
152
+ });
153
+ return true;
154
+ }
155
+ setParams(params, fromQueryParams = false) {
156
+ if (!fromQueryParams && this.compareWithCurrentParams(params)) {
157
+ return;
158
+ }
159
+ this.#params.set(params);
160
+ this.#sortMeta.set(tableCreateSortMeta(params));
161
+ this.#filterMeta.set(tableCreateFilterMeta(params));
162
+ this.#isSortAndFilterMetaInitialized.set(true);
163
+ if (fromQueryParams && !this.#isSearchMetaInitialized() && params?.search) {
164
+ this.#searchMeta.set({ value: params.search, caseSensitive: params.filters?.['global']?.caseSensitive ?? false });
165
+ }
166
+ this.#isSearchMetaInitialized.set(true);
167
+ }
168
+ /**
169
+ * Compare the given params with the stored params in the DataListService.
170
+ *
171
+ * @param {DataListParams} params - The params to compare with the stored params.
172
+ *
173
+ * @return {boolean} - True if the given params match the stored params, otherwise false.
174
+ */
175
+ compareWithCurrentParams(params) {
176
+ return (params.offset === this.offset() &&
177
+ params.limit === this.rows() &&
178
+ JSON.stringify(tableCreateSortMeta(params)) === JSON.stringify(this.#sortMeta()) &&
179
+ JSON.stringify(tableCreateFilterMeta(params)) === JSON.stringify(this.#filterMeta()));
180
+ }
181
+ #setData(data, count) {
182
+ this.#data.set([...data]);
183
+ this.#count.set(count ?? data.length);
184
+ }
185
+ ngOnDestroy() {
186
+ this.#dataProviderSubscription?.unsubscribe();
187
+ }
188
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TableDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
189
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TableDataService }); }
190
+ }
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TableDataService, decorators: [{
192
+ type: Injectable
193
+ }] });
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL3NlcnZpY2VzL3RhYmxlLWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFLaEcsT0FBTyxFQUF3QixjQUFjLEVBQWtDLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN2SyxPQUFPLEVBQXFCLDBCQUEwQixFQUFFLHVCQUF1QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFekgsT0FBTyxFQUFDLHFCQUFxQixFQUFFLG1CQUFtQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBVTlELE1BQU0sT0FBTyxnQkFBZ0I7SUFEN0I7UUFFYSxjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLGFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWxELGlCQUFpQjtRQUNSLGlCQUFZLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztRQUV0RCxlQUFlO1FBQ04sbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRiw2R0FBNkc7UUFDcEcsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsSUFBSSxXQUFXLEVBQUUsWUFB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LENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMseUJBQXlCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbEQsQ0FBQzsrR0F2TFEsZ0JBQWdCO21IQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yLCBPbkRlc3Ryb3ksIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTb3J0TWV0YX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NvbW1vbnNGaWx0ZXJNZXRhZGF0YSwgQ29tbW9uc1NlcnZpY2UsIERhdGFMaXN0UGFyYW1zLCBEYXRhTGlzdFJlc3VsdCwgdG9PYnNlcnZhYmxlIGFzIGNvbW1vbnNUb09ic2VydmFibGUsIGVmZmVjdFdpdGhEZXBzfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtJVGFibGVEYXRhUHJvdmlkZXIsIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0LCBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge3RhYmxlQ3JlYXRlRmlsdGVyTWV0YSwgdGFibGVDcmVhdGVTb3J0TWV0YX0gZnJvbSAnLi4vaGVscGVycy90YWJsZSc7XG5pbXBvcnQge1RhYmxlTWV0YWRhdGFTZXJ2aWNlfSBmcm9tICcuL3RhYmxlLW1ldGFkYXRhLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgRGF0YVNvdXJjZXM8SXRlbSA9IGFueT4ge1xuICAgIGFycmF5SXRlbXM/OiBTaWduYWw8SXRlbVtdIHwgdW5kZWZpbmVkPjtcbiAgICBkYXRhTGlzdFJlc3VsdD86IFNpZ25hbDxEYXRhTGlzdFJlc3VsdDxJdGVtPiB8IHVuZGVmaW5lZD47XG4gICAgZGF0YVByb3ZpZGVyPzogU2lnbmFsPElUYWJsZURhdGFQcm92aWRlcjxJdGVtPiB8IHVuZGVmaW5lZD47XG4gICAgbWFudWFsTG9hZGluZz86IFNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYmxlRGF0YVNlcnZpY2U8SXRlbT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHJlYWRvbmx5ICNpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcmVhZG9ubHkgI2NvbW1vbnMgPSBpbmplY3QoQ29tbW9uc1NlcnZpY2UpO1xuICAgIHJlYWRvbmx5ICNtZXRhZGF0YSA9IGluamVjdChUYWJsZU1ldGFkYXRhU2VydmljZSk7XG5cbiAgICAvLyBzaWduYWwgc291cmNlc1xuICAgIHJlYWRvbmx5ICNkYXRhU291cmNlcyA9IHNpZ25hbDxEYXRhU291cmNlczxJdGVtPj4oe30pO1xuXG4gICAgLy8gZGF0YSBzb3VyY2VzXG4gICAgcmVhZG9ubHkgI21hbnVhbExvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNkYXRhU291cmNlcygpPy5tYW51YWxMb2FkaW5nPy4oKSk7XG4gICAgLy8gcmVzdWx0cyB0aGF0IGFyZSBzZXQgZGlyZWN0bHkgdmlhIGlucHV0IGFuZCBhcmUgbm90IHJlc3VsdCBvZiBhIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gKGFrYSBkYXRhIHByb3ZpZGVyKVxuICAgIHJlYWRvbmx5ICNzeW5jaHJvbm91c1Jlc3VsdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZXMgPSB0aGlzLiNkYXRhU291cmNlcygpO1xuICAgICAgICBpZiAoZGF0YVNvdXJjZXM/LmRhdGFQcm92aWRlcj8uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YVNvdXJjZXM/LmRhdGFMaXN0UmVzdWx0Py4oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZXM/LmRhdGFMaXN0UmVzdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFTb3VyY2VzPy5hcnJheUl0ZW1zPy4oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gPERhdGFMaXN0UmVzdWx0PntkYXRhOiBkYXRhU291cmNlcy5hcnJheUl0ZW1zKCksIHRvdGFsQ291bnQ6IGRhdGFTb3VyY2VzLmFycmF5SXRlbXMoKT8ubGVuZ3RoID8/IDB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgI2RhdGFQcm92aWRlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuI2RhdGFTb3VyY2VzKCk/LmRhdGFQcm92aWRlcj8uKCkpO1xuICAgIHJlYWRvbmx5ICNkYXRhUHJvdmlkZXJTZXJ2aWNlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLiNkYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgcmV0dXJuIGRhdGFQcm92aWRlcj8uc2VydmljZVR5cGUgPyB0aGlzLiNpbmplY3Rvci5nZXQ8YW55PihkYXRhUHJvdmlkZXIuc2VydmljZVR5cGUpIDogbnVsbDtcbiAgICB9KTtcbiAgICByZWFkb25seSAjc3luY2hyb25vdXNSZXN1bHRFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy4jc3luY2hyb25vdXNSZXN1bHRdLCAoW3Jlc10pID0+IHtcbiAgICAgICAgaWYgKHJlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNzZXREYXRhKHJlcy5kYXRhID8/IFtdLCByZXMudG90YWxDb3VudCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZWFkb25seSAjc3luY2hyb25vdXNMb2FkaW5nRWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuI3N5bmNocm9ub3VzUmVzdWx0LCB0aGlzLiNtYW51YWxMb2FkaW5nXSwgKFtyZXMsIG1hbnVhbExvYWRpbmddKSA9PiB7XG4gICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJiBtYW51YWxMb2FkaW5nID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuI2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJlYWRvbmx5ICNtYW51YWxMb2FkaW5nRWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuI21hbnVhbExvYWRpbmddLCAoW21hbnVhbExvYWRpbmddKSA9PiB7XG4gICAgICAgIGlmIChtYW51YWxMb2FkaW5nICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuI2xvYWRpbmcuc2V0KG1hbnVhbExvYWRpbmcpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgI2RhdGFQcm92aWRlclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8vIHBhZ2luYXRpb25cbiAgICByZWFkb25seSAjcGFyYW1zID0gc2lnbmFsPERhdGFMaXN0UGFyYW1zIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHJlYWRvbmx5IHBhcmFtcyA9IHRoaXMuI3BhcmFtcy5hc1JlYWRvbmx5KCk7XG4gICAgcmVhZG9ubHkgI3NvcnRNZXRhID0gc2lnbmFsPFNvcnRNZXRhW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcmVhZG9ubHkgc29ydE1ldGEgPSB0aGlzLiNzb3J0TWV0YS5hc1JlYWRvbmx5KCk7XG4gICAgcmVhZG9ubHkgI2ZpbHRlck1ldGEgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgQ29tbW9uc0ZpbHRlck1ldGFkYXRhPj4oe30pO1xuICAgIHJlYWRvbmx5IGZpbHRlck1ldGEgPSB0aGlzLiNmaWx0ZXJNZXRhLmFzUmVhZG9ubHkoKTtcbiAgICByZWFkb25seSAjaXNTb3J0QW5kRmlsdGVyTWV0YUluaXRpYWxpemVkID0gc2lnbmFsKGZhbHNlKTtcbiAgICByZWFkb25seSAjZGVmYXVsdFBhcmFtc0VmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFxuICAgICAgICBbdGhpcy4jbWV0YWRhdGEuZGVmYXVsdFBhcmFtc10sXG4gICAgICAgIChbZGVmYXVsdFBhcmFtc10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuI3NvcnRNZXRhLnNldCh0YWJsZUNyZWF0ZVNvcnRNZXRhKGRlZmF1bHRQYXJhbXMpKTtcbiAgICAgICAgICAgIHRoaXMuI2ZpbHRlck1ldGEuc2V0KHRhYmxlQ3JlYXRlRmlsdGVyTWV0YShkZWZhdWx0UGFyYW1zKSk7XG4gICAgICAgICAgICB0aGlzLiNpc1NvcnRBbmRGaWx0ZXJNZXRhSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICB7Zmlyc3RPbmx5OiB0cnVlfVxuICAgICk7XG4gICAgcmVhZG9ubHkgI2lzU2VhcmNoTWV0YUluaXRpYWxpemVkID0gc2lnbmFsKGZhbHNlKTtcbiAgICByZWFkb25seSAjc2VhcmNoTWV0YSA9IHNpZ25hbDx7dmFsdWU6IHN0cmluZzsgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbn0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcmVhZG9ubHkgc2VhcmNoTWV0YSA9IHRoaXMuI3NlYXJjaE1ldGEuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5IGlzQWxsUGFnaW5hdGlvbk1ldGFJbml0aWFsaXplZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuI2lzU29ydEFuZEZpbHRlck1ldGFJbml0aWFsaXplZCgpICYmIHRoaXMuI2lzU29ydEFuZEZpbHRlck1ldGFJbml0aWFsaXplZCgpKTtcbiAgICByZWFkb25seSBwYWdpbmF0aW9uTW9kZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuI21ldGFkYXRhLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IucGFnaW5hdGlvbk1vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gZGVzY3JpcHRvciBjaG9pY2UgaXMgdGhlIHN0cm9uZ2VzdCAtIGlmIGRlZmluZWQsIHVzZSB0aGlzIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5wYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNkYXRhUHJvdmlkZXIoKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyB3aGVuIGRhdGEgcHJvdmlkZXIgaXMgdXNlZCwgdXNlIHBhZ2luYXRpb25cbiAgICAgICAgICAgIHJldHVybiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bS5QYWdpbmF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtLk5vbmU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZWFkb25seSBvZmZzZXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBhcmFtcygpPy5vZmZzZXQgPz8gMCk7XG4gICAgcmVhZG9ubHkgcm93cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucGFyYW1zKCk/LmxpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMoKT8ubGltaXQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy4jbWV0YWRhdGEuZGVzY3JpcHRvcigpO1xuICAgICAgICBjb25zdCByb3dzUGVyUGFnZU9wdGlvbnMgPSB0aGlzLiNtZXRhZGF0YS5yb3dzUGVyUGFnZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGVmYXVsdE51bVJvd3MgJiYgcm93c1BlclBhZ2VPcHRpb25zLmluY2x1ZGVzKGRlc2NyaXB0b3IuZGVmYXVsdE51bVJvd3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5kZWZhdWx0TnVtUm93cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgfSk7XG5cbiAgICAvLyBkYXRhXG4gICAgcmVhZG9ubHkgI2RhdGEgPSBzaWduYWw8SXRlbVtdPihbXSk7XG4gICAgcmVhZG9ubHkgZGF0YSA9IHRoaXMuI2RhdGEuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5ICNjb3VudCA9IHNpZ25hbCgwKTtcbiAgICByZWFkb25seSBjb3VudCA9IHRoaXMuI2NvdW50LmFzUmVhZG9ubHkoKTtcbiAgICByZWFkb25seSAjbG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgICByZWFkb25seSBsb2FkaW5nID0gdGhpcy4jbG9hZGluZy5hc1JlYWRvbmx5KCk7XG5cbiAgICBzZXREYXRhU291cmNlcyhcbiAgICAgICAgYXJyYXlJdGVtczogU2lnbmFsPEl0ZW1bXSB8IHVuZGVmaW5lZD4sXG4gICAgICAgIGRhdGFMaXN0UmVzdWx0OiBTaWduYWw8RGF0YUxpc3RSZXN1bHQ8SXRlbT4gfCB1bmRlZmluZWQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI6IFNpZ25hbDxJVGFibGVEYXRhUHJvdmlkZXI8SXRlbSwgYW55LCBhbnksIGFueT4gfCB1bmRlZmluZWQ+LFxuICAgICAgICBtYW51YWxMb2FkaW5nOiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICApIHtcbiAgICAgICAgdGhpcy4jZGF0YVNvdXJjZXMuc2V0KHthcnJheUl0ZW1zLCBkYXRhTGlzdFJlc3VsdCwgZGF0YVByb3ZpZGVyLCBtYW51YWxMb2FkaW5nfSk7XG4gICAgfVxuXG4gICAgZmV0Y2hXaXRoRGF0YVByb3ZpZGVyKHBhcmFtczogRGF0YUxpc3RQYXJhbXMsIG9uRXJyb3JGbjogKGVycm9yOiBFcnJvcikgPT4gdm9pZCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLiNkYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIgfHwgcGFyYW1zLmxpbWl0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNkYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuI2xvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgICAgIHRoaXMuI2RhdGFQcm92aWRlclN1YnNjcmlwdGlvbiA9IGNvbW1vbnNUb09ic2VydmFibGUoXG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0QWxsKFxuICAgICAgICAgICAgICAgIHBhcmFtcyBhcyBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4sXG4gICAgICAgICAgICAgICAgdGhpcy4jZGF0YVByb3ZpZGVyU2VydmljZSgpLFxuICAgICAgICAgICAgICAgIHRoaXMuI21ldGFkYXRhLmRlc2NyaXB0b3IoKS5pc0xvY2FsaXplZCA/ICh0aGlzLiNjb21tb25zLmFwcERhdGFMb2NhbGUoKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvcklucHV0ID0gdGhpcy4jbWV0YWRhdGEuZGVzY3JpcHRvckZyb21Tb3VyY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvcklucHV0IGluc3RhbmNlb2YgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbWV0YWRhdGEuc2V0RGVzY3JpcHRvcihkZXNjcmlwdG9ySW5wdXQudG9UYWJsZURlc2NyaXB0b3JGcm9tRGF0YShyZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jc2V0RGF0YShyZXM/LmRhdGEgPz8gW10sIHJlcz8udG90YWxDb3VudCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIG9uRXJyb3JGbihlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3NldERhdGEoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2V0UGFyYW1zKHBhcmFtczogRGF0YUxpc3RQYXJhbXMsIGZyb21RdWVyeVBhcmFtcyA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghZnJvbVF1ZXJ5UGFyYW1zICYmIHRoaXMuY29tcGFyZVdpdGhDdXJyZW50UGFyYW1zKHBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI3BhcmFtcy5zZXQocGFyYW1zKTtcbiAgICAgICAgdGhpcy4jc29ydE1ldGEuc2V0KHRhYmxlQ3JlYXRlU29ydE1ldGEocGFyYW1zKSk7XG4gICAgICAgIHRoaXMuI2ZpbHRlck1ldGEuc2V0KHRhYmxlQ3JlYXRlRmlsdGVyTWV0YShwYXJhbXMpKTtcbiAgICAgICAgdGhpcy4jaXNTb3J0QW5kRmlsdGVyTWV0YUluaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICAgICAgaWYgKGZyb21RdWVyeVBhcmFtcyAmJiAhdGhpcy4jaXNTZWFyY2hNZXRhSW5pdGlhbGl6ZWQoKSAmJiBwYXJhbXM/LnNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy4jc2VhcmNoTWV0YS5zZXQoe3ZhbHVlOiBwYXJhbXMuc2VhcmNoLCBjYXNlU2Vuc2l0aXZlOiBwYXJhbXMuZmlsdGVycz8uWydnbG9iYWwnXT8uY2FzZVNlbnNpdGl2ZSA/PyBmYWxzZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2lzU2VhcmNoTWV0YUluaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIHRoZSBnaXZlbiBwYXJhbXMgd2l0aCB0aGUgc3RvcmVkIHBhcmFtcyBpbiB0aGUgRGF0YUxpc3RTZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtcyB0byBjb21wYXJlIHdpdGggdGhlIHN0b3JlZCBwYXJhbXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIFRydWUgaWYgdGhlIGdpdmVuIHBhcmFtcyBtYXRjaCB0aGUgc3RvcmVkIHBhcmFtcywgb3RoZXJ3aXNlIGZhbHNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgY29tcGFyZVdpdGhDdXJyZW50UGFyYW1zKHBhcmFtczogRGF0YUxpc3RQYXJhbXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBhcmFtcy5vZmZzZXQgPT09IHRoaXMub2Zmc2V0KCkgJiZcbiAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9PT0gdGhpcy5yb3dzKCkgJiZcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRhYmxlQ3JlYXRlU29ydE1ldGEocGFyYW1zKSkgPT09IEpTT04uc3RyaW5naWZ5KHRoaXMuI3NvcnRNZXRhKCkpICYmXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0YWJsZUNyZWF0ZUZpbHRlck1ldGEocGFyYW1zKSkgPT09IEpTT04uc3RyaW5naWZ5KHRoaXMuI2ZpbHRlck1ldGEoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAjc2V0RGF0YShkYXRhOiBJdGVtW10sIGNvdW50PzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuI2RhdGEuc2V0KFsuLi5kYXRhXSk7XG4gICAgICAgIHRoaXMuI2NvdW50LnNldChjb3VudCA/PyBkYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuI2RhdGFQcm92aWRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,136 @@
1
+ import { Injectable, Injector, computed, inject, signal } from '@angular/core';
2
+ import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
3
+ import { PrimeNGConfig } from 'primeng/api';
4
+ import { combineLatest, of, switchMap } from 'rxjs';
5
+ import { COMMONS_MODULE_CONFIG_IT, toObservable as commonsToObservable, effectWithDeps } from '@mediusinc/mng-commons/core';
6
+ import { FilterDisplayTypeEnum } from '@mediusinc/mng-commons/filter';
7
+ import { TableDynamicDescriptorInst, tableDescriptor } from '@mediusinc/mng-commons/table/api';
8
+ import { createFilterDescriptorsFromGeneric, filterApplySerializationConfigToCmp, filterGenerateMatchModeOptions, filterGetDateConfig, filterGetDefaultMatchMode, filterGetNumberConfig } from '../helpers/filters';
9
+ import { COMMONS_TABLE_FEATURE_CONFIG_IT } from './table-feature-config.token';
10
+ import * as i0 from "@angular/core";
11
+ export class TableMetadataService {
12
+ static { this.cmpTypeName = 'TableComponent'; }
13
+ #injector;
14
+ #translationObserver;
15
+ // signal sources
16
+ #signalSources;
17
+ #descriptor;
18
+ #updateDescriptorFromSourceEffect;
19
+ #genericFilters;
20
+ // search
21
+ #searchFieldsFromSignalSource;
22
+ #searchFields;
23
+ #searchFieldsEffect;
24
+ constructor() {
25
+ this.#injector = inject(Injector);
26
+ this.primeConfig = inject(PrimeNGConfig);
27
+ this.moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, { optional: true });
28
+ this.tableModuleConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, { optional: true });
29
+ this.serializationCfg = {};
30
+ this.#translationObserver = toSignal(this.primeConfig.translationObserver);
31
+ this.defaultFilterDisplayType = this.tableModuleConfig?.filterDisplayType ?? FilterDisplayTypeEnum.Column;
32
+ // signal sources
33
+ this.#signalSources = signal({});
34
+ // descriptors
35
+ this.descriptorFromSource = computed(() => this.#signalSources().descriptor?.());
36
+ this.#descriptor = signal(tableDescriptor());
37
+ this.descriptor = this.#descriptor.asReadonly();
38
+ this.#updateDescriptorFromSourceEffect = effectWithDeps([this.descriptorFromSource], ([d]) => {
39
+ if (d != null) {
40
+ this.#descriptor.set(d);
41
+ }
42
+ });
43
+ // pagination
44
+ this.rowsPerPageOptions = computed(() => {
45
+ const descriptor = this.descriptor();
46
+ if (Array.isArray(descriptor.rowsPerPageOptions) && descriptor.rowsPerPageOptions.length > 0) {
47
+ return descriptor.rowsPerPageOptions;
48
+ }
49
+ else {
50
+ return [25, 50, 100];
51
+ }
52
+ });
53
+ // filters
54
+ this.filterDescriptors = computed(() => this.descriptor().filters);
55
+ this.filters = computed(() => {
56
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
57
+ const observer = this.#translationObserver(); // need this one to track language changes
58
+ return this.filterDescriptors().map(d => this.mapDescriptorToMetadata(d));
59
+ });
60
+ this.genericFilterDescriptor = computed(() => this.descriptor().genericFilter);
61
+ this.#genericFilters = signal([]);
62
+ this.genericFilters = this.#genericFilters.asReadonly();
63
+ // search
64
+ this.#searchFieldsFromSignalSource = computed(() => this.#signalSources().searchFields?.());
65
+ this.#searchFields = signal([]);
66
+ this.searchFields = this.#searchFields.asReadonly();
67
+ this.#searchFieldsEffect = effectWithDeps([this.descriptor, this.#searchFieldsFromSignalSource], ([descriptor, searchFieldsFromSignalSource]) => {
68
+ this.#searchFields.set(searchFieldsFromSignalSource ?? (descriptor.search && descriptor.searchFields ? descriptor.searchFields : this.descriptor().columns.map(c => c.property)));
69
+ });
70
+ // params
71
+ this.defaultParams = computed(() => {
72
+ const params = {
73
+ offset: 0,
74
+ limit: this.rowsPerPageOptions()[0],
75
+ sort: this.descriptor()
76
+ .sorts.filter(s => s.defaultIsEnabled)
77
+ .sort((s1, s2) => (s1.defaultOrder ?? 1000) - (s2.defaultOrder ?? 1000))
78
+ .map(s => ({
79
+ property: s.property,
80
+ ascending: s.defaultIsAscending
81
+ })),
82
+ filters: {}
83
+ };
84
+ this.filters()
85
+ .filter(f => f.descriptor.hasDefaultValue)
86
+ .forEach(f => {
87
+ params.filters[f.descriptor.property] = {
88
+ value: f.descriptor.defaultValue,
89
+ matchMode: f.defaultMatchMode
90
+ };
91
+ });
92
+ return params;
93
+ });
94
+ filterApplySerializationConfigToCmp(this.moduleConfig, this.serializationCfg);
95
+ combineLatest([toObservable(this.genericFilterDescriptor), toObservable(this.#translationObserver)])
96
+ .pipe(switchMap(([genericFilterDescriptor]) => {
97
+ if (genericFilterDescriptor) {
98
+ const dataProvider = this.genericFilterDescriptor()?.propertyLookup;
99
+ const genericFilterService = dataProvider?.serviceType ? this.#injector.get(dataProvider.serviceType) : null;
100
+ // fetch filterable properties
101
+ return commonsToObservable(genericFilterDescriptor.propertyLookup.lookup({}, genericFilterService));
102
+ }
103
+ return of([]);
104
+ }), takeUntilDestroyed())
105
+ .subscribe({
106
+ next: genericFilters => {
107
+ // set descriptors from generic filter data
108
+ this.#genericFilters.set(createFilterDescriptorsFromGeneric(genericFilters, this.genericFilterDescriptor()?.valueLookup).map(d => this.mapDescriptorToMetadata(d)));
109
+ }
110
+ });
111
+ }
112
+ setSignalSources(descriptor, searchFields) {
113
+ this.#signalSources.set({ descriptor, searchFields });
114
+ }
115
+ setDescriptor(descriptor) {
116
+ if (this.descriptorFromSource() instanceof TableDynamicDescriptorInst) {
117
+ this.#descriptor.set(descriptor);
118
+ }
119
+ }
120
+ mapDescriptorToMetadata(descriptor) {
121
+ const matchModes = filterGenerateMatchModeOptions(this.primeConfig, descriptor, this.serializationCfg);
122
+ return {
123
+ descriptor: descriptor,
124
+ matchModes: matchModes,
125
+ defaultMatchMode: filterGetDefaultMatchMode(descriptor, matchModes),
126
+ dateConfig: filterGetDateConfig(descriptor, this.serializationCfg),
127
+ numberConfig: filterGetNumberConfig(descriptor)
128
+ };
129
+ }
130
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TableMetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
131
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TableMetadataService }); }
132
+ }
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TableMetadataService, decorators: [{
134
+ type: Injectable
135
+ }], ctorParameters: () => [] });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWV0YWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9zZXJ2aWNlcy90YWJsZS1tZXRhZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEQsT0FBTyxFQUFDLHdCQUF3QixFQUE4QyxZQUFZLElBQUksbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDdEssT0FBTyxFQUFtQixxQkFBcUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3RGLE9BQU8sRUFBc0IsMEJBQTBCLEVBQUUsZUFBZSxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFbEgsT0FBTyxFQUNILGtDQUFrQyxFQUNsQyxtQ0FBbUMsRUFDbkMsOEJBQThCLEVBQzlCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3hCLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sOEJBQThCLENBQUM7O0FBUTdFLE1BQU0sT0FBTyxvQkFBb0I7YUFDYixnQkFBVyxHQUFHLGdCQUFnQixBQUFuQixDQUFvQjtJQUV0QyxTQUFTLENBQW9CO0lBTTdCLG9CQUFvQixDQUFrRDtJQUcvRSxpQkFBaUI7SUFDUixjQUFjLENBQTZCO0lBSTNDLFdBQVcsQ0FBeUY7SUFFN0csaUNBQWlDLENBSTlC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QUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RyxPQUFPO1lBQ0gsVUFBVSxFQUFFLFVBQVU7WUFDdEIsVUFBVSxFQUFFLFVBQVU7WUFDdEIsZ0JBQWdCLEVBQUUseUJBQXlCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztZQUNuRSxVQUFVLEVBQUUsbUJBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNsRSxZQUFZLEVBQUUscUJBQXFCLENBQUMsVUFBVSxDQUFDO1NBQ2xELENBQUM7SUFDTixDQUFDOytHQWpJUSxvQkFBb0I7bUhBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7UHJpbWVOR0NvbmZpZ30gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBvZiwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDT01NT05TX01PRFVMRV9DT05GSUdfSVQsIENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnLCBEYXRhTGlzdFBhcmFtcywgdG9PYnNlcnZhYmxlIGFzIGNvbW1vbnNUb09ic2VydmFibGUsIGVmZmVjdFdpdGhEZXBzfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yLCBGaWx0ZXJEaXNwbGF5VHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcbmltcG9ydCB7VGFibGVEZXNjcmlwdG9ySW5zdCwgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QsIHRhYmxlRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge1xuICAgIGNyZWF0ZUZpbHRlckRlc2NyaXB0b3JzRnJvbUdlbmVyaWMsXG4gICAgZmlsdGVyQXBwbHlTZXJpYWxpemF0aW9uQ29uZmlnVG9DbXAsXG4gICAgZmlsdGVyR2VuZXJhdGVNYXRjaE1vZGVPcHRpb25zLFxuICAgIGZpbHRlckdldERhdGVDb25maWcsXG4gICAgZmlsdGVyR2V0RGVmYXVsdE1hdGNoTW9kZSxcbiAgICBmaWx0ZXJHZXROdW1iZXJDb25maWdcbn0gZnJvbSAnLi4vaGVscGVycy9maWx0ZXJzJztcbmltcG9ydCB7RmlsdGVyTWV0YWRhdGF9IGZyb20gJy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHtDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lUfSBmcm9tICcuL3RhYmxlLWZlYXR1cmUtY29uZmlnLnRva2VuJztcblxuaW50ZXJmYWNlIFNpZ25hbFNvdXJjZXM8SXRlbSA9IGFueT4ge1xuICAgIGRlc2NyaXB0b3I/OiBTaWduYWw8VGFibGVEZXNjcmlwdG9ySW5zdDxJdGVtLCBhbnksIGFueT4+O1xuICAgIHNlYXJjaEZpZWxkcz86IFNpZ25hbDxzdHJpbmdbXSB8IHVuZGVmaW5lZD47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYWJsZU1ldGFkYXRhU2VydmljZSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IGNtcFR5cGVOYW1lID0gJ1RhYmxlQ29tcG9uZW50JztcblxuICAgIHJlYWRvbmx5ICNpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcmVhZG9ubHkgcHJpbWVDb25maWcgPSBpbmplY3QoUHJpbWVOR0NvbmZpZyk7XG4gICAgcmVhZG9ubHkgbW9kdWxlQ29uZmlnID0gaW5qZWN0KENPTU1PTlNfTU9EVUxFX0NPTkZJR19JVCwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcmVhZG9ubHkgdGFibGVNb2R1bGVDb25maWcgPSBpbmplY3QoQ09NTU9OU19UQUJMRV9GRUFUVVJFX0NPTkZJR19JVCwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICByZWFkb25seSBzZXJpYWxpemF0aW9uQ2ZnOiBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZyA9IHt9O1xuICAgIHJlYWRvbmx5ICN0cmFuc2xhdGlvbk9ic2VydmVyID0gdG9TaWduYWwodGhpcy5wcmltZUNvbmZpZy50cmFuc2xhdGlvbk9ic2VydmVyKTtcbiAgICByZWFkb25seSBkZWZhdWx0RmlsdGVyRGlzcGxheVR5cGU6IEZpbHRlckRpc3BsYXlUeXBlRW51bSA9IHRoaXMudGFibGVNb2R1bGVDb25maWc/LmZpbHRlckRpc3BsYXlUeXBlID8/IEZpbHRlckRpc3BsYXlUeXBlRW51bS5Db2x1bW47XG5cbiAgICAvLyBzaWduYWwgc291cmNlc1xuICAgIHJlYWRvbmx5ICNzaWduYWxTb3VyY2VzID0gc2lnbmFsPFNpZ25hbFNvdXJjZXM+KHt9KTtcblxuICAgIC8vIGRlc2NyaXB0b3JzXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRvckZyb21Tb3VyY2UgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNzaWduYWxTb3VyY2VzKCkuZGVzY3JpcHRvcj8uKCkpO1xuICAgIHJlYWRvbmx5ICNkZXNjcmlwdG9yID0gc2lnbmFsPFRhYmxlRGVzY3JpcHRvckluc3Q8YW55LCBhbnksIGFueT4+KHRhYmxlRGVzY3JpcHRvcjxzdHJpbmcsIHN0cmluZywgc3RyaW5nPigpKTtcbiAgICByZWFkb25seSBkZXNjcmlwdG9yID0gdGhpcy4jZGVzY3JpcHRvci5hc1JlYWRvbmx5KCk7XG4gICAgI3VwZGF0ZURlc2NyaXB0b3JGcm9tU291cmNlRWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuZGVzY3JpcHRvckZyb21Tb3VyY2VdLCAoW2RdKSA9PiB7XG4gICAgICAgIGlmIChkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuI2Rlc2NyaXB0b3Iuc2V0KGQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBwYWdpbmF0aW9uXG4gICAgcm93c1BlclBhZ2VPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yKCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0b3Iucm93c1BlclBhZ2VPcHRpb25zKSAmJiBkZXNjcmlwdG9yLnJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5yb3dzUGVyUGFnZU9wdGlvbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWzI1LCA1MCwgMTAwXTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZmlsdGVyc1xuICAgIHJlYWRvbmx5IGZpbHRlckRlc2NyaXB0b3JzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kZXNjcmlwdG9yKCkuZmlsdGVycyk7XG4gICAgcmVhZG9ubHkgZmlsdGVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IHRoaXMuI3RyYW5zbGF0aW9uT2JzZXJ2ZXIoKTsgLy8gbmVlZCB0aGlzIG9uZSB0byB0cmFjayBsYW5ndWFnZSBjaGFuZ2VzXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckRlc2NyaXB0b3JzKCkubWFwKGQgPT4gdGhpcy5tYXBEZXNjcmlwdG9yVG9NZXRhZGF0YShkKSk7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRlc2NyaXB0b3IoKS5nZW5lcmljRmlsdGVyKTtcbiAgICByZWFkb25seSAjZ2VuZXJpY0ZpbHRlcnMgPSBzaWduYWw8RmlsdGVyTWV0YWRhdGFbXT4oW10pO1xuICAgIHJlYWRvbmx5IGdlbmVyaWNGaWx0ZXJzID0gdGhpcy4jZ2VuZXJpY0ZpbHRlcnMuYXNSZWFkb25seSgpO1xuXG4gICAgLy8gc2VhcmNoXG4gICAgcmVhZG9ubHkgI3NlYXJjaEZpZWxkc0Zyb21TaWduYWxTb3VyY2UgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNzaWduYWxTb3VyY2VzKCkuc2VhcmNoRmllbGRzPy4oKSk7XG4gICAgcmVhZG9ubHkgI3NlYXJjaEZpZWxkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICAgIHJlYWRvbmx5IHNlYXJjaEZpZWxkcyA9IHRoaXMuI3NlYXJjaEZpZWxkcy5hc1JlYWRvbmx5KCk7XG4gICAgI3NlYXJjaEZpZWxkc0VmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFt0aGlzLmRlc2NyaXB0b3IsIHRoaXMuI3NlYXJjaEZpZWxkc0Zyb21TaWduYWxTb3VyY2VdLCAoW2Rlc2NyaXB0b3IsIHNlYXJjaEZpZWxkc0Zyb21TaWduYWxTb3VyY2VdKSA9PiB7XG4gICAgICAgIHRoaXMuI3NlYXJjaEZpZWxkcy5zZXQoXG4gICAgICAgICAgICBzZWFyY2hGaWVsZHNGcm9tU2lnbmFsU291cmNlID8/IChkZXNjcmlwdG9yLnNlYXJjaCAmJiBkZXNjcmlwdG9yLnNlYXJjaEZpZWxkcyA/IGRlc2NyaXB0b3Iuc2VhcmNoRmllbGRzIDogdGhpcy5kZXNjcmlwdG9yKCkuY29sdW1ucy5tYXAoYyA9PiBjLnByb3BlcnR5KSlcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIHBhcmFtc1xuICAgIHJlYWRvbmx5IGRlZmF1bHRQYXJhbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7XG4gICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMoKVswXSxcbiAgICAgICAgICAgIHNvcnQ6IHRoaXMuZGVzY3JpcHRvcigpXG4gICAgICAgICAgICAgICAgLnNvcnRzLmZpbHRlcihzID0+IHMuZGVmYXVsdElzRW5hYmxlZClcbiAgICAgICAgICAgICAgICAuc29ydCgoczEsIHMyKSA9PiAoczEuZGVmYXVsdE9yZGVyID8/IDEwMDApIC0gKHMyLmRlZmF1bHRPcmRlciA/PyAxMDAwKSlcbiAgICAgICAgICAgICAgICAubWFwKHMgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IHMucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGFzY2VuZGluZzogcy5kZWZhdWx0SXNBc2NlbmRpbmdcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBmaWx0ZXJzOiB7fVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZmlsdGVycygpXG4gICAgICAgICAgICAuZmlsdGVyKGYgPT4gZi5kZXNjcmlwdG9yLmhhc0RlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzIVtmLmRlc2NyaXB0b3IucHJvcGVydHldID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZi5kZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiBmLmRlZmF1bHRNYXRjaE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBmaWx0ZXJBcHBseVNlcmlhbGl6YXRpb25Db25maWdUb0NtcCh0aGlzLm1vZHVsZUNvbmZpZywgdGhpcy5zZXJpYWxpemF0aW9uQ2ZnKTtcblxuICAgICAgICBjb21iaW5lTGF0ZXN0KFt0b09ic2VydmFibGUodGhpcy5nZW5lcmljRmlsdGVyRGVzY3JpcHRvciksIHRvT2JzZXJ2YWJsZSh0aGlzLiN0cmFuc2xhdGlvbk9ic2VydmVyKV0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtnZW5lcmljRmlsdGVyRGVzY3JpcHRvcl0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLmdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKCk/LnByb3BlcnR5TG9va3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJpY0ZpbHRlclNlcnZpY2UgPSBkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlID8gdGhpcy4jaW5qZWN0b3IuZ2V0PGFueT4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZldGNoIGZpbHRlcmFibGUgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1vbnNUb09ic2VydmFibGUoZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IucHJvcGVydHlMb29rdXAubG9va3VwKHt9LCBnZW5lcmljRmlsdGVyU2VydmljZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGdlbmVyaWNGaWx0ZXJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGRlc2NyaXB0b3JzIGZyb20gZ2VuZXJpYyBmaWx0ZXIgZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNnZW5lcmljRmlsdGVycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVGaWx0ZXJEZXNjcmlwdG9yc0Zyb21HZW5lcmljKGdlbmVyaWNGaWx0ZXJzLCB0aGlzLmdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKCk/LnZhbHVlTG9va3VwKS5tYXAoZCA9PiB0aGlzLm1hcERlc2NyaXB0b3JUb01ldGFkYXRhKGQpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTaWduYWxTb3VyY2VzKGRlc2NyaXB0b3I6IFNpZ25hbDxUYWJsZURlc2NyaXB0b3JJbnN0PGFueSwgYW55Pj4sIHNlYXJjaEZpZWxkczogU2lnbmFsPHN0cmluZ1tdIHwgdW5kZWZpbmVkPikge1xuICAgICAgICB0aGlzLiNzaWduYWxTb3VyY2VzLnNldCh7ZGVzY3JpcHRvciwgc2VhcmNoRmllbGRzfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERlc2NyaXB0b3IoZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55Pikge1xuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yRnJvbVNvdXJjZSgpIGluc3RhbmNlb2YgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgIHRoaXMuI2Rlc2NyaXB0b3Iuc2V0KGRlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBEZXNjcmlwdG9yVG9NZXRhZGF0YShkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55Pik6IEZpbHRlck1ldGFkYXRhIHtcbiAgICAgICAgY29uc3QgbWF0Y2hNb2RlcyA9IGZpbHRlckdlbmVyYXRlTWF0Y2hNb2RlT3B0aW9ucyh0aGlzLnByaW1lQ29uZmlnLCBkZXNjcmlwdG9yLCB0aGlzLnNlcmlhbGl6YXRpb25DZmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRvcjogZGVzY3JpcHRvcixcbiAgICAgICAgICAgIG1hdGNoTW9kZXM6IG1hdGNoTW9kZXMsXG4gICAgICAgICAgICBkZWZhdWx0TWF0Y2hNb2RlOiBmaWx0ZXJHZXREZWZhdWx0TWF0Y2hNb2RlKGRlc2NyaXB0b3IsIG1hdGNoTW9kZXMpLFxuICAgICAgICAgICAgZGF0ZUNvbmZpZzogZmlsdGVyR2V0RGF0ZUNvbmZpZyhkZXNjcmlwdG9yLCB0aGlzLnNlcmlhbGl6YXRpb25DZmcpLFxuICAgICAgICAgICAgbnVtYmVyQ29uZmlnOiBmaWx0ZXJHZXROdW1iZXJDb25maWcoZGVzY3JpcHRvcilcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,142 @@
1
+ import { Injectable, computed, inject, signal } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { CommonsStorageService } from '@mediusinc/mng-commons/core';
4
+ import { FilterDisplayTypeEnum } from '@mediusinc/mng-commons/filter';
5
+ import { generateTableLayoutPrefsKey } from '../helpers/table-layout-prefs';
6
+ import { TableMetadataService } from './table-metadata.service';
7
+ import * as i0 from "@angular/core";
8
+ export class TablePreferencesService {
9
+ constructor() {
10
+ this.#router = inject(Router);
11
+ this.#storageService = inject(CommonsStorageService);
12
+ this.#metadata = inject(TableMetadataService);
13
+ this.localstorageKey = computed(() => {
14
+ const descriptor = this.#metadata.descriptor();
15
+ return descriptor.model.i18nBaseKey ? generateTableLayoutPrefsKey(descriptor.model.i18nBaseKey, this.#router.url, descriptor.identifier) : null;
16
+ });
17
+ this.#layoutPrefsSaveCnt = signal(0);
18
+ this.layoutPreferences = computed(() => {
19
+ const lsKey = this.localstorageKey();
20
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
+ const cnt = this.#layoutPrefsSaveCnt(); // needed to force updates on user changes
22
+ const layoutPrefs = lsKey ? this.#storageService.getItem(TableMetadataService.cmpTypeName, lsKey) : undefined;
23
+ return layoutPrefs ?? { columnWidths: {} };
24
+ });
25
+ // columns
26
+ this.columnsWithPrefs = computed(() => this.#computeColumnsWithLayout());
27
+ }
28
+ #router;
29
+ #storageService;
30
+ #metadata;
31
+ #layoutPrefsSaveCnt;
32
+ /**
33
+ * Method is called on column resize
34
+ * @param element event's element
35
+ */
36
+ onColumnResize({ element }) {
37
+ const fieldId = element.id;
38
+ const width = element.offsetWidth;
39
+ const layoutPrefs = this.layoutPreferences();
40
+ const col = this.columnsWithPrefs().find(el => el.descriptor.property === fieldId);
41
+ if (col)
42
+ col.width = width;
43
+ if (!layoutPrefs.columnWidths)
44
+ layoutPrefs.columnWidths = {};
45
+ layoutPrefs.columnWidths[fieldId] = width;
46
+ this.#saveLayoutPreferences(layoutPrefs);
47
+ }
48
+ onColumnToggle(event) {
49
+ const layoutPrefs = this.layoutPreferences();
50
+ const selectedColumns = event.value.map(v => v.descriptor.property);
51
+ layoutPrefs.columnHidden = this.columnsWithPrefs()
52
+ .filter(c => selectedColumns.indexOf(c.descriptor.property) < 0)
53
+ .map(c => c.descriptor.property);
54
+ this.#saveLayoutPreferences(layoutPrefs, true);
55
+ }
56
+ onColumnToggleAll() {
57
+ const layoutPrefs = this.layoutPreferences();
58
+ const columns = [...this.columnsWithPrefs()];
59
+ const isVisible = !this.columnsWithPrefs().some(c => c.isVisible);
60
+ for (const col of columns) {
61
+ if (isVisible !== col.isVisible) {
62
+ col.isVisible = isVisible;
63
+ }
64
+ }
65
+ layoutPrefs.columnHidden = columns.filter(c => !c.isVisible).map(c => c.descriptor.property);
66
+ this.#saveLayoutPreferences(layoutPrefs);
67
+ }
68
+ onColumnReorder(event) {
69
+ if (event.dropIndex !== undefined && event.dropIndex >= 0 && event.dragIndex !== undefined && event.dragIndex >= 0 && event.dropIndex !== event.dragIndex) {
70
+ const eventDropIndex = event.dropIndex;
71
+ const eventDragIndex = event.dragIndex;
72
+ const prevVisibleColumns = this.columnsWithPrefs().filter(c => c.isVisible);
73
+ const colAtDrop = prevVisibleColumns[eventDropIndex];
74
+ const colAtDrag = prevVisibleColumns[eventDragIndex];
75
+ const colAtDropIndex = this.columnsWithPrefs().findIndex(el => el.id === colAtDrop.id);
76
+ const colAtDragIndex = this.columnsWithPrefs().findIndex(el => el.id === colAtDrag.id);
77
+ if (colAtDropIndex > -1 && colAtDragIndex > -1) {
78
+ let columns = [...this.columnsWithPrefs()];
79
+ columns.splice(colAtDragIndex, 1);
80
+ const dropIndex = columns.findIndex(el => el.id === colAtDrop.id) + (eventDropIndex > eventDragIndex ? 1 : 0);
81
+ columns = [...columns.slice(0, dropIndex), colAtDrag, ...columns.slice(dropIndex)];
82
+ const layoutPrefs = this.layoutPreferences();
83
+ layoutPrefs.columnOrder = columns.map(el => el.descriptor.property);
84
+ this.#saveLayoutPreferences(layoutPrefs);
85
+ }
86
+ }
87
+ }
88
+ /**
89
+ * Reset column order and column visibility to default settings
90
+ */
91
+ clearLayoutPreferences() {
92
+ const key = this.localstorageKey();
93
+ if (key) {
94
+ this.#storageService.removeItem(TableMetadataService.cmpTypeName, key);
95
+ this.#layoutPrefsSaveCnt.update(v => v + 1);
96
+ }
97
+ }
98
+ #saveLayoutPreferences(layoutPrefs, forceUpdate = false) {
99
+ const key = this.localstorageKey();
100
+ if (key) {
101
+ this.#storageService.setItem(TableMetadataService.cmpTypeName, key, layoutPrefs);
102
+ if (forceUpdate) {
103
+ this.#layoutPrefsSaveCnt.update(v => v + 1);
104
+ }
105
+ }
106
+ }
107
+ #computeColumnsWithLayout() {
108
+ const descriptor = this.#metadata.descriptor();
109
+ const layoutPrefs = this.layoutPreferences();
110
+ // initialize columns with additional properties
111
+ const timestamp = new Date().getTime();
112
+ const columns = descriptor.columns.map(col => ({
113
+ id: `${col.property}-${timestamp}`,
114
+ descriptor: col,
115
+ filter: this.#metadata
116
+ .filters()
117
+ .find(f => f.descriptor.showOnColumn === col.property &&
118
+ ((f.descriptor.displayType == null && this.#metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.Column) ||
119
+ f.descriptor.displayType === FilterDisplayTypeEnum.Column)),
120
+ sort: descriptor.sorts.find(f => f.showOnColumn === col.property),
121
+ disabled: !col.isToggleable,
122
+ isVisible: layoutPrefs.columnHidden ? !layoutPrefs.columnHidden.includes(col.property) : col.isVisible,
123
+ width: layoutPrefs.columnWidths?.[col.property]
124
+ }));
125
+ if (layoutPrefs.columnOrder) {
126
+ for (let i = 0; i < layoutPrefs.columnOrder.length; i++) {
127
+ const colName = layoutPrefs.columnOrder[i];
128
+ const colWithPrefs = columns.find(el => el.descriptor.property === colName);
129
+ if (colWithPrefs) {
130
+ colWithPrefs.orderIdx = i;
131
+ }
132
+ }
133
+ }
134
+ return columns.sort((a, b) => (a.orderIdx !== undefined && b.orderIdx !== undefined ? a.orderIdx - b.orderIdx : 0));
135
+ }
136
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TablePreferencesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
137
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TablePreferencesService }); }
138
+ }
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TablePreferencesService, decorators: [{
140
+ type: Injectable
141
+ }] });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcHJlZmVyZW5jZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9zZXJ2aWNlcy90YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBS3ZDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBR3BFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRTFFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQUc5RCxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRWEsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV6QyxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwSixDQUFDLENBQUMsQ0FBQztRQUNN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QyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUM7Z0JBQzVFLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2YsWUFBWSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDOytHQXpJUSx1QkFBdUI7bUhBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge011bHRpU2VsZWN0Q2hhbmdlRXZlbnR9IGZyb20gJ3ByaW1lbmcvbXVsdGlzZWxlY3QnO1xuaW1wb3J0IHtUYWJsZUNvbHVtblJlb3JkZXJFdmVudH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbmltcG9ydCB7Q29tbW9uc1N0b3JhZ2VTZXJ2aWNlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJEaXNwbGF5VHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcbmltcG9ydCB7VGFibGVMYXlvdXRQcmVmZXJlbmNlc30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge2dlbmVyYXRlVGFibGVMYXlvdXRQcmVmc0tleX0gZnJvbSAnLi4vaGVscGVycy90YWJsZS1sYXlvdXQtcHJlZnMnO1xuaW1wb3J0IHtDb2x1bW5XaXRoUHJlZmVyZW5jZXN9IGZyb20gJy4uL21vZGVscy9jb2x1bW4tcHJlZmVyZW5jZXMubW9kZWwnO1xuaW1wb3J0IHtUYWJsZU1ldGFkYXRhU2VydmljZX0gZnJvbSAnLi90YWJsZS1tZXRhZGF0YS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlIHtcbiAgICByZWFkb25seSAjcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcmVhZG9ubHkgI3N0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KENvbW1vbnNTdG9yYWdlU2VydmljZSk7XG4gICAgcmVhZG9ubHkgI21ldGFkYXRhID0gaW5qZWN0KFRhYmxlTWV0YWRhdGFTZXJ2aWNlKTtcblxuICAgIHJlYWRvbmx5IGxvY2Fsc3RvcmFnZUtleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuI21ldGFkYXRhLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IubW9kZWwuaTE4bkJhc2VLZXkgPyBnZW5lcmF0ZVRhYmxlTGF5b3V0UHJlZnNLZXkoZGVzY3JpcHRvci5tb2RlbC5pMThuQmFzZUtleSwgdGhpcy4jcm91dGVyLnVybCwgZGVzY3JpcHRvci5pZGVudGlmaWVyKSA6IG51bGw7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgI2xheW91dFByZWZzU2F2ZUNudCA9IHNpZ25hbCgwKTtcbiAgICByZWFkb25seSBsYXlvdXRQcmVmZXJlbmNlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgbHNLZXkgPSB0aGlzLmxvY2Fsc3RvcmFnZUtleSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIGNvbnN0IGNudCA9IHRoaXMuI2xheW91dFByZWZzU2F2ZUNudCgpOyAvLyBuZWVkZWQgdG8gZm9yY2UgdXBkYXRlcyBvbiB1c2VyIGNoYW5nZXNcbiAgICAgICAgY29uc3QgbGF5b3V0UHJlZnMgPSBsc0tleSA/IHRoaXMuI3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW08VGFibGVMYXlvdXRQcmVmZXJlbmNlcz4oVGFibGVNZXRhZGF0YVNlcnZpY2UuY21wVHlwZU5hbWUsIGxzS2V5KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGxheW91dFByZWZzID8/IHtjb2x1bW5XaWR0aHM6IHt9fTtcbiAgICB9KTtcblxuICAgIC8vIGNvbHVtbnNcbiAgICBjb2x1bW5zV2l0aFByZWZzID0gY29tcHV0ZWQ8Q29sdW1uV2l0aFByZWZlcmVuY2VzW10+KCgpID0+IHRoaXMuI2NvbXB1dGVDb2x1bW5zV2l0aExheW91dCgpKTtcblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBpcyBjYWxsZWQgb24gY29sdW1uIHJlc2l6ZVxuICAgICAqIEBwYXJhbSBlbGVtZW50IGV2ZW50J3MgZWxlbWVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNvbHVtblJlc2l6ZSh7ZWxlbWVudH06IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWVsZElkOiBzdHJpbmcgPSBlbGVtZW50LmlkO1xuICAgICAgICBjb25zdCB3aWR0aDogbnVtYmVyID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgICAgICBjb25zdCBsYXlvdXRQcmVmcyA9IHRoaXMubGF5b3V0UHJlZmVyZW5jZXMoKTtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zV2l0aFByZWZzKCkuZmluZChlbCA9PiBlbC5kZXNjcmlwdG9yLnByb3BlcnR5ID09PSBmaWVsZElkKTtcbiAgICAgICAgaWYgKGNvbCkgY29sLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGlmICghbGF5b3V0UHJlZnMuY29sdW1uV2lkdGhzKSBsYXlvdXRQcmVmcy5jb2x1bW5XaWR0aHMgPSB7fTtcblxuICAgICAgICBsYXlvdXRQcmVmcy5jb2x1bW5XaWR0aHNbZmllbGRJZF0gPSB3aWR0aDtcbiAgICAgICAgdGhpcy4jc2F2ZUxheW91dFByZWZlcmVuY2VzKGxheW91dFByZWZzKTtcbiAgICB9XG5cbiAgICBvbkNvbHVtblRvZ2dsZShldmVudDogTXVsdGlTZWxlY3RDaGFuZ2VFdmVudCkge1xuICAgICAgICBjb25zdCBsYXlvdXRQcmVmcyA9IHRoaXMubGF5b3V0UHJlZmVyZW5jZXMoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gKGV2ZW50LnZhbHVlIGFzIENvbHVtbldpdGhQcmVmZXJlbmNlc1tdKS5tYXAodiA9PiB2LmRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICBsYXlvdXRQcmVmcy5jb2x1bW5IaWRkZW4gPSB0aGlzLmNvbHVtbnNXaXRoUHJlZnMoKVxuICAgICAgICAgICAgLmZpbHRlcihjID0+IHNlbGVjdGVkQ29sdW1ucy5pbmRleE9mKGMuZGVzY3JpcHRvci5wcm9wZXJ0eSkgPCAwKVxuICAgICAgICAgICAgLm1hcChjID0+IGMuZGVzY3JpcHRvci5wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuI3NhdmVMYXlvdXRQcmVmZXJlbmNlcyhsYXlvdXRQcmVmcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25Db2x1bW5Ub2dnbGVBbGwoKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFByZWZzID0gdGhpcy5sYXlvdXRQcmVmZXJlbmNlcygpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gWy4uLnRoaXMuY29sdW1uc1dpdGhQcmVmcygpXTtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gIXRoaXMuY29sdW1uc1dpdGhQcmVmcygpLnNvbWUoYyA9PiBjLmlzVmlzaWJsZSk7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgICAgIGlmIChpc1Zpc2libGUgIT09IGNvbC5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICBjb2wuaXNWaXNpYmxlID0gaXNWaXNpYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxheW91dFByZWZzLmNvbHVtbkhpZGRlbiA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuaXNWaXNpYmxlKS5tYXAoYyA9PiBjLmRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICB0aGlzLiNzYXZlTGF5b3V0UHJlZmVyZW5jZXMobGF5b3V0UHJlZnMpO1xuICAgIH1cblxuICAgIG9uQ29sdW1uUmVvcmRlcihldmVudDogVGFibGVDb2x1bW5SZW9yZGVyRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmRyb3BJbmRleCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50LmRyb3BJbmRleCA+PSAwICYmIGV2ZW50LmRyYWdJbmRleCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50LmRyYWdJbmRleCA+PSAwICYmIGV2ZW50LmRyb3BJbmRleCAhPT0gZXZlbnQuZHJhZ0luZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBldmVudERyb3BJbmRleCA9IGV2ZW50LmRyb3BJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50RHJhZ0luZGV4ID0gZXZlbnQuZHJhZ0luZGV4O1xuICAgICAgICAgICAgY29uc3QgcHJldlZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zV2l0aFByZWZzKCkuZmlsdGVyKGMgPT4gYy5pc1Zpc2libGUpO1xuICAgICAgICAgICAgY29uc3QgY29sQXREcm9wID0gcHJldlZpc2libGVDb2x1bW5zW2V2ZW50RHJvcEluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGNvbEF0RHJhZyA9IHByZXZWaXNpYmxlQ29sdW1uc1tldmVudERyYWdJbmRleF07XG4gICAgICAgICAgICBjb25zdCBjb2xBdERyb3BJbmRleCA9IHRoaXMuY29sdW1uc1dpdGhQcmVmcygpLmZpbmRJbmRleChlbCA9PiBlbC5pZCA9PT0gY29sQXREcm9wLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbEF0RHJhZ0luZGV4ID0gdGhpcy5jb2x1bW5zV2l0aFByZWZzKCkuZmluZEluZGV4KGVsID0+IGVsLmlkID09PSBjb2xBdERyYWcuaWQpO1xuXG4gICAgICAgICAgICBpZiAoY29sQXREcm9wSW5kZXggPiAtMSAmJiBjb2xBdERyYWdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbLi4udGhpcy5jb2x1bW5zV2l0aFByZWZzKCldO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGNvbEF0RHJhZ0luZGV4LCAxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wSW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChlbCA9PiBlbC5pZCA9PT0gY29sQXREcm9wLmlkKSArIChldmVudERyb3BJbmRleCA+IGV2ZW50RHJhZ0luZGV4ID8gMSA6IDApO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBbLi4uY29sdW1ucy5zbGljZSgwLCBkcm9wSW5kZXgpLCBjb2xBdERyYWcsIC4uLmNvbHVtbnMuc2xpY2UoZHJvcEluZGV4KV07XG4gICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0UHJlZnMgPSB0aGlzLmxheW91dFByZWZlcmVuY2VzKCk7XG4gICAgICAgICAgICAgICAgbGF5b3V0UHJlZnMuY29sdW1uT3JkZXIgPSBjb2x1bW5zLm1hcChlbCA9PiBlbC5kZXNjcmlwdG9yLnByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICB0aGlzLiNzYXZlTGF5b3V0UHJlZmVyZW5jZXMobGF5b3V0UHJlZnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXQgY29sdW1uIG9yZGVyIGFuZCBjb2x1bW4gdmlzaWJpbGl0eSB0byBkZWZhdWx0IHNldHRpbmdzXG4gICAgICovXG4gICAgY2xlYXJMYXlvdXRQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5sb2NhbHN0b3JhZ2VLZXkoKTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgdGhpcy4jc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbShUYWJsZU1ldGFkYXRhU2VydmljZS5jbXBUeXBlTmFtZSwga2V5KTtcbiAgICAgICAgICAgIHRoaXMuI2xheW91dFByZWZzU2F2ZUNudC51cGRhdGUodiA9PiB2ICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjc2F2ZUxheW91dFByZWZlcmVuY2VzKGxheW91dFByZWZzOiBUYWJsZUxheW91dFByZWZlcmVuY2VzLCBmb3JjZVVwZGF0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMubG9jYWxzdG9yYWdlS2V5KCk7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuI3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oVGFibGVNZXRhZGF0YVNlcnZpY2UuY21wVHlwZU5hbWUsIGtleSwgbGF5b3V0UHJlZnMpO1xuICAgICAgICAgICAgaWYgKGZvcmNlVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbGF5b3V0UHJlZnNTYXZlQ250LnVwZGF0ZSh2ID0+IHYgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICNjb21wdXRlQ29sdW1uc1dpdGhMYXlvdXQoKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLiNtZXRhZGF0YS5kZXNjcmlwdG9yKCk7XG4gICAgICAgIGNvbnN0IGxheW91dFByZWZzID0gdGhpcy5sYXlvdXRQcmVmZXJlbmNlcygpO1xuXG4gICAgICAgIC8vIGluaXRpYWxpemUgY29sdW1ucyB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3QgY29sdW1uczogQ29sdW1uV2l0aFByZWZlcmVuY2VzW10gPSBkZXNjcmlwdG9yLmNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgICAgICAgaWQ6IGAke2NvbC5wcm9wZXJ0eX0tJHt0aW1lc3RhbXB9YCxcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IGNvbCxcbiAgICAgICAgICAgIGZpbHRlcjogdGhpcy4jbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAuZmlsdGVycygpXG4gICAgICAgICAgICAgICAgLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIGYgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGYuZGVzY3JpcHRvci5zaG93T25Db2x1bW4gPT09IGNvbC5wcm9wZXJ0eSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKChmLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgPT0gbnVsbCAmJiB0aGlzLiNtZXRhZGF0YS5kZWZhdWx0RmlsdGVyRGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5Db2x1bW4pIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5kZXNjcmlwdG9yLmRpc3BsYXlUeXBlID09PSBGaWx0ZXJEaXNwbGF5VHlwZUVudW0uQ29sdW1uKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBzb3J0OiBkZXNjcmlwdG9yLnNvcnRzLmZpbmQoZiA9PiBmLnNob3dPbkNvbHVtbiA9PT0gY29sLnByb3BlcnR5KSxcbiAgICAgICAgICAgIGRpc2FibGVkOiAhY29sLmlzVG9nZ2xlYWJsZSxcbiAgICAgICAgICAgIGlzVmlzaWJsZTogbGF5b3V0UHJlZnMuY29sdW1uSGlkZGVuID8gIWxheW91dFByZWZzLmNvbHVtbkhpZGRlbi5pbmNsdWRlcyhjb2wucHJvcGVydHkpIDogY29sLmlzVmlzaWJsZSxcbiAgICAgICAgICAgIHdpZHRoOiBsYXlvdXRQcmVmcy5jb2x1bW5XaWR0aHM/Lltjb2wucHJvcGVydHldXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZiAobGF5b3V0UHJlZnMuY29sdW1uT3JkZXIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0UHJlZnMuY29sdW1uT3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xOYW1lID0gbGF5b3V0UHJlZnMuY29sdW1uT3JkZXJbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29sV2l0aFByZWZzID0gY29sdW1ucy5maW5kKGVsID0+IGVsLmRlc2NyaXB0b3IucHJvcGVydHkgPT09IGNvbE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjb2xXaXRoUHJlZnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sV2l0aFByZWZzLm9yZGVySWR4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sdW1ucy5zb3J0KChhLCBiKSA9PiAoYS5vcmRlcklkeCAhPT0gdW5kZWZpbmVkICYmIGIub3JkZXJJZHggIT09IHVuZGVmaW5lZCA/IGEub3JkZXJJZHggLSBiLm9yZGVySWR4IDogMCkpO1xuICAgIH1cbn1cbiJdfQ==