@smartsoft001/crud-shell-angular 1.2.91 → 2.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/.storybook/addons.js +1 -0
  2. package/.storybook/config.js +5 -0
  3. package/.storybook/tsconfig.json +8 -0
  4. package/.storybook/webpack.config.js +7 -0
  5. package/jest.config.ts +38 -0
  6. package/ng-package.json +7 -0
  7. package/package.json +12 -23
  8. package/project.json +49 -0
  9. package/src/index.ts +13 -0
  10. package/src/lib/+state/crud.facade.ts +82 -0
  11. package/src/lib/+state/crud.feature.methods.ts +258 -0
  12. package/src/lib/+state/crud.feature.store.ts +77 -0
  13. package/src/lib/components/components.module.ts +58 -0
  14. package/src/lib/components/export/export.component.ts +69 -0
  15. package/src/lib/components/filter/base/base.component.ts +175 -0
  16. package/src/lib/components/filter/check/check.component.scss +25 -0
  17. package/src/lib/components/filter/check/check.component.ts +72 -0
  18. package/src/lib/components/filter/date/date.component.html +30 -0
  19. package/src/lib/components/filter/date/date.component.ts +70 -0
  20. package/src/lib/components/filter/date-time/date-time.component.html +62 -0
  21. package/src/lib/components/filter/date-time/date-time.component.ts +56 -0
  22. package/src/lib/components/filter/date-with-edit/date-with-edit.component.html +109 -0
  23. package/src/lib/components/filter/date-with-edit/date-with-edit.component.ts +70 -0
  24. package/src/lib/components/filter/filter.component.html +52 -0
  25. package/src/lib/components/filter/filter.component.ts +34 -0
  26. package/src/lib/components/filter/flag/flag.component.ts +55 -0
  27. package/src/lib/components/filter/index.ts +9 -0
  28. package/src/lib/components/filter/int/int.component.html +74 -0
  29. package/src/lib/components/filter/int/int.component.ts +57 -0
  30. package/src/lib/components/filter/radio/radio.component.ts +74 -0
  31. package/src/lib/components/filter/text/text.component.ts +46 -0
  32. package/src/lib/components/filters/filters.component.scss +150 -0
  33. package/src/lib/components/filters/filters.component.ts +157 -0
  34. package/src/lib/components/filters-config/filters-config.component.ts +69 -0
  35. package/src/lib/components/group/group.component.ts +93 -0
  36. package/src/lib/components/index.ts +7 -0
  37. package/src/lib/components/multiselect/multiselect.component.html +41 -0
  38. package/src/lib/components/multiselect/multiselect.component.scss +125 -0
  39. package/src/lib/components/multiselect/multiselect.component.ts +104 -0
  40. package/src/lib/crud-full.module.ts +51 -0
  41. package/src/lib/crud.config.ts +79 -0
  42. package/src/lib/crud.module.ts +72 -0
  43. package/src/lib/factories/list-pagination/list-pagination.factory.ts +77 -0
  44. package/src/lib/models/index.ts +1 -0
  45. package/src/lib/models/interfaces.ts +34 -0
  46. package/src/lib/pages/index.ts +6 -0
  47. package/src/lib/pages/item/base/base.component.ts +54 -0
  48. package/src/lib/pages/item/item.component.ts +513 -0
  49. package/src/lib/pages/item/standard/standard.component.scss +0 -0
  50. package/src/lib/pages/item/standard/standard.component.ts +50 -0
  51. package/src/lib/pages/list/base/base.component.ts +29 -0
  52. package/src/lib/pages/list/list.component.stories.ts +77 -0
  53. package/src/lib/pages/list/list.component.ts +438 -0
  54. package/src/lib/pages/list/standard/standard.component.ts +42 -0
  55. package/src/lib/pipes/form-options/form-options.pipe.ts +61 -0
  56. package/src/lib/pipes/index.ts +2 -0
  57. package/src/lib/pipes/pipes.module.ts +9 -0
  58. package/src/lib/providers/model-possibilities/model-possibilities.provider.ts +19 -0
  59. package/src/lib/services/crud/crud.service.spec.ts +303 -0
  60. package/src/lib/services/crud/crud.service.ts +178 -0
  61. package/src/lib/services/list-group/list-group.service.spec.ts +87 -0
  62. package/src/lib/services/list-group/list-group.service.ts +65 -0
  63. package/src/lib/services/page/page.service.spec.ts +143 -0
  64. package/src/lib/services/page/page.service.ts +44 -0
  65. package/src/lib/services/search/search.service.spec.ts +134 -0
  66. package/src/lib/services/search/search.service.ts +42 -0
  67. package/test-setup.ts +0 -0
  68. package/tsconfig.json +13 -0
  69. package/tsconfig.lib.json +31 -0
  70. package/tsconfig.lib.prod.json +11 -0
  71. package/tsconfig.spec.json +10 -0
  72. package/tslint.json +10 -0
  73. package/esm2022/index.mjs +0 -18
  74. package/esm2022/lib/+state/crud.actions.mjs +0 -224
  75. package/esm2022/lib/+state/crud.effects.mjs +0 -182
  76. package/esm2022/lib/+state/crud.facade.mjs +0 -91
  77. package/esm2022/lib/+state/crud.reducer.mjs +0 -214
  78. package/esm2022/lib/+state/crud.selectors.mjs +0 -11
  79. package/esm2022/lib/components/components.module.mjs +0 -110
  80. package/esm2022/lib/components/export/export.component.mjs +0 -47
  81. package/esm2022/lib/components/filter/base/base.component.mjs +0 -152
  82. package/esm2022/lib/components/filter/check/check.component.mjs +0 -36
  83. package/esm2022/lib/components/filter/date/date.component.mjs +0 -47
  84. package/esm2022/lib/components/filter/date-time/date-time.component.mjs +0 -43
  85. package/esm2022/lib/components/filter/date-with-edit/date-with-edit.component.mjs +0 -49
  86. package/esm2022/lib/components/filter/filter.component.mjs +0 -30
  87. package/esm2022/lib/components/filter/flag/flag.component.mjs +0 -16
  88. package/esm2022/lib/components/filter/index.mjs +0 -10
  89. package/esm2022/lib/components/filter/int/int.component.mjs +0 -38
  90. package/esm2022/lib/components/filter/radio/radio.component.mjs +0 -16
  91. package/esm2022/lib/components/filter/text/text.component.mjs +0 -16
  92. package/esm2022/lib/components/filters/filters.component.mjs +0 -111
  93. package/esm2022/lib/components/filters-config/filters-config.component.mjs +0 -37
  94. package/esm2022/lib/components/group/group.component.mjs +0 -54
  95. package/esm2022/lib/components/index.mjs +0 -8
  96. package/esm2022/lib/components/multiselect/multiselect.component.mjs +0 -71
  97. package/esm2022/lib/crud-full.module.mjs +0 -103
  98. package/esm2022/lib/crud.config.mjs +0 -17
  99. package/esm2022/lib/crud.module.mjs +0 -106
  100. package/esm2022/lib/factories/list-pagination/list-pagination.factory.mjs +0 -69
  101. package/esm2022/lib/models/index.mjs +0 -2
  102. package/esm2022/lib/models/interfaces.mjs +0 -2
  103. package/esm2022/lib/pages/index.mjs +0 -7
  104. package/esm2022/lib/pages/item/base/base.component.mjs +0 -44
  105. package/esm2022/lib/pages/item/item.component.mjs +0 -395
  106. package/esm2022/lib/pages/item/standard/standard.component.mjs +0 -15
  107. package/esm2022/lib/pages/list/base/base.component.mjs +0 -23
  108. package/esm2022/lib/pages/list/list.component.mjs +0 -355
  109. package/esm2022/lib/pages/list/standard/standard.component.mjs +0 -34
  110. package/esm2022/lib/pipes/form-options/form-options.pipe.mjs +0 -55
  111. package/esm2022/lib/pipes/index.mjs +0 -3
  112. package/esm2022/lib/pipes/pipes.module.mjs +0 -20
  113. package/esm2022/lib/providers/model-possibilities/model-possibilities.provider.mjs +0 -11
  114. package/esm2022/lib/services/crud/crud.service.mjs +0 -138
  115. package/esm2022/lib/services/list-group/list-group.service.mjs +0 -60
  116. package/esm2022/lib/services/page/page.service.mjs +0 -41
  117. package/esm2022/lib/services/search/search.service.mjs +0 -41
  118. package/esm2022/lib/services/socket/socket.service.mjs +0 -17
  119. package/esm2022/smartsoft001-crud-shell-angular.mjs +0 -5
  120. package/fesm2022/smartsoft001-crud-shell-angular.mjs +0 -2810
  121. package/fesm2022/smartsoft001-crud-shell-angular.mjs.map +0 -1
  122. package/index.d.ts +0 -18
  123. package/index.d.ts.map +0 -1
  124. package/lib/+state/crud.actions.d.ts +0 -152
  125. package/lib/+state/crud.actions.d.ts.map +0 -1
  126. package/lib/+state/crud.effects.d.ts +0 -18
  127. package/lib/+state/crud.effects.d.ts.map +0 -1
  128. package/lib/+state/crud.facade.d.ts +0 -44
  129. package/lib/+state/crud.facade.d.ts.map +0 -1
  130. package/lib/+state/crud.reducer.d.ts +0 -43
  131. package/lib/+state/crud.reducer.d.ts.map +0 -1
  132. package/lib/+state/crud.selectors.d.ts +0 -10
  133. package/lib/+state/crud.selectors.d.ts.map +0 -1
  134. package/lib/components/components.module.d.ts +0 -27
  135. package/lib/components/components.module.d.ts.map +0 -1
  136. package/lib/components/export/export.component.d.ts +0 -21
  137. package/lib/components/export/export.component.d.ts.map +0 -1
  138. package/lib/components/filter/base/base.component.d.ts +0 -39
  139. package/lib/components/filter/base/base.component.d.ts.map +0 -1
  140. package/lib/components/filter/check/check.component.d.ts +0 -19
  141. package/lib/components/filter/check/check.component.d.ts.map +0 -1
  142. package/lib/components/filter/date/date.component.d.ts +0 -16
  143. package/lib/components/filter/date/date.component.d.ts.map +0 -1
  144. package/lib/components/filter/date-time/date-time.component.d.ts +0 -15
  145. package/lib/components/filter/date-time/date-time.component.d.ts.map +0 -1
  146. package/lib/components/filter/date-with-edit/date-with-edit.component.d.ts +0 -17
  147. package/lib/components/filter/date-with-edit/date-with-edit.component.d.ts.map +0 -1
  148. package/lib/components/filter/filter.component.d.ts +0 -14
  149. package/lib/components/filter/filter.component.d.ts.map +0 -1
  150. package/lib/components/filter/flag/flag.component.d.ts +0 -8
  151. package/lib/components/filter/flag/flag.component.d.ts.map +0 -1
  152. package/lib/components/filter/index.d.ts +0 -10
  153. package/lib/components/filter/index.d.ts.map +0 -1
  154. package/lib/components/filter/int/int.component.d.ts +0 -15
  155. package/lib/components/filter/int/int.component.d.ts.map +0 -1
  156. package/lib/components/filter/radio/radio.component.d.ts +0 -8
  157. package/lib/components/filter/radio/radio.component.d.ts.map +0 -1
  158. package/lib/components/filter/text/text.component.d.ts +0 -8
  159. package/lib/components/filter/text/text.component.d.ts.map +0 -1
  160. package/lib/components/filters/filters.component.d.ts +0 -83
  161. package/lib/components/filters/filters.component.d.ts.map +0 -1
  162. package/lib/components/filters-config/filters-config.component.d.ts +0 -19
  163. package/lib/components/filters-config/filters-config.component.d.ts.map +0 -1
  164. package/lib/components/group/group.component.d.ts +0 -23
  165. package/lib/components/group/group.component.d.ts.map +0 -1
  166. package/lib/components/index.d.ts +0 -8
  167. package/lib/components/index.d.ts.map +0 -1
  168. package/lib/components/multiselect/multiselect.component.d.ts +0 -28
  169. package/lib/components/multiselect/multiselect.component.d.ts.map +0 -1
  170. package/lib/crud-full.module.d.ts +0 -28
  171. package/lib/crud-full.module.d.ts.map +0 -1
  172. package/lib/crud.config.d.ts +0 -65
  173. package/lib/crud.config.d.ts.map +0 -1
  174. package/lib/crud.module.d.ts +0 -34
  175. package/lib/crud.module.d.ts.map +0 -1
  176. package/lib/factories/list-pagination/list-pagination.factory.d.ts +0 -20
  177. package/lib/factories/list-pagination/list-pagination.factory.d.ts.map +0 -1
  178. package/lib/models/index.d.ts +0 -2
  179. package/lib/models/index.d.ts.map +0 -1
  180. package/lib/models/interfaces.d.ts +0 -30
  181. package/lib/models/interfaces.d.ts.map +0 -1
  182. package/lib/pages/index.d.ts +0 -7
  183. package/lib/pages/index.d.ts.map +0 -1
  184. package/lib/pages/item/base/base.component.d.ts +0 -25
  185. package/lib/pages/item/base/base.component.d.ts.map +0 -1
  186. package/lib/pages/item/item.component.d.ts +0 -70
  187. package/lib/pages/item/item.component.d.ts.map +0 -1
  188. package/lib/pages/item/standard/standard.component.d.ts +0 -8
  189. package/lib/pages/item/standard/standard.component.d.ts.map +0 -1
  190. package/lib/pages/list/base/base.component.d.ts +0 -15
  191. package/lib/pages/list/base/base.component.d.ts.map +0 -1
  192. package/lib/pages/list/list.component.d.ts +0 -54
  193. package/lib/pages/list/list.component.d.ts.map +0 -1
  194. package/lib/pages/list/standard/standard.component.d.ts +0 -14
  195. package/lib/pages/list/standard/standard.component.d.ts.map +0 -1
  196. package/lib/pipes/form-options/form-options.pipe.d.ts +0 -15
  197. package/lib/pipes/form-options/form-options.pipe.d.ts.map +0 -1
  198. package/lib/pipes/index.d.ts +0 -3
  199. package/lib/pipes/index.d.ts.map +0 -1
  200. package/lib/pipes/pipes.module.d.ts +0 -8
  201. package/lib/pipes/pipes.module.d.ts.map +0 -1
  202. package/lib/providers/model-possibilities/model-possibilities.provider.d.ts +0 -18
  203. package/lib/providers/model-possibilities/model-possibilities.provider.d.ts.map +0 -1
  204. package/lib/services/crud/crud.service.d.ts +0 -38
  205. package/lib/services/crud/crud.service.d.ts.map +0 -1
  206. package/lib/services/list-group/list-group.service.d.ts +0 -15
  207. package/lib/services/list-group/list-group.service.d.ts.map +0 -1
  208. package/lib/services/page/page.service.d.ts +0 -12
  209. package/lib/services/page/page.service.d.ts.map +0 -1
  210. package/lib/services/search/search.service.d.ts +0 -16
  211. package/lib/services/search/search.service.d.ts.map +0 -1
  212. package/lib/services/socket/socket.service.d.ts +0 -10
  213. package/lib/services/socket/socket.service.d.ts.map +0 -1
  214. package/smartsoft001-crud-shell-angular.d.ts.map +0 -1
@@ -1,224 +0,0 @@
1
- /*
2
- * Create
3
- */
4
- export const create = function (entity, item) {
5
- return {
6
- type: `[${entity}] Create`,
7
- item
8
- };
9
- };
10
- export const createSuccess = function (entity, item) {
11
- return {
12
- type: `[${entity}] Create Success`,
13
- item
14
- };
15
- };
16
- export const createFailure = function (entity, item, error) {
17
- return {
18
- type: `[${entity}] Create Failure`,
19
- item,
20
- error
21
- };
22
- };
23
- /*
24
- * Create many
25
- */
26
- export const createMany = function (entity, data) {
27
- return {
28
- type: `[${entity}] Create Many`,
29
- data
30
- };
31
- };
32
- export const createManySuccess = function (entity, data) {
33
- return {
34
- type: `[${entity}] Create Many Success`,
35
- data
36
- };
37
- };
38
- export const createManyFailure = function (entity, data, error) {
39
- return {
40
- type: `[${entity}] Create Many Failure`,
41
- data,
42
- error
43
- };
44
- };
45
- /*
46
- * Read
47
- */
48
- export const read = function (entity, filter = null) {
49
- return {
50
- type: `[${entity}] Read`,
51
- filter
52
- };
53
- };
54
- export const readSuccess = function (entity, filter, result) {
55
- return {
56
- type: `[${entity}] Read Success`,
57
- result,
58
- filter
59
- };
60
- };
61
- export const readFailure = function (entity, filter, error) {
62
- return {
63
- type: `[${entity}] Read Failure`,
64
- filter,
65
- error
66
- };
67
- };
68
- /*
69
- * Clear
70
- */
71
- export const clear = function (entity) {
72
- return {
73
- type: `[${entity}] Clear`
74
- };
75
- };
76
- /*
77
- * Export
78
- */
79
- export const exportList = function (entity, filter = null, format) {
80
- return {
81
- type: `[${entity}] Export`,
82
- filter,
83
- format
84
- };
85
- };
86
- export const exportListSuccess = function (entity, filter) {
87
- return {
88
- type: `[${entity}] Export Success`,
89
- filter
90
- };
91
- };
92
- export const exportListFailure = function (entity, filter, error) {
93
- return {
94
- type: `[${entity}] Export Failure`,
95
- filter,
96
- error
97
- };
98
- };
99
- /*
100
- * Select
101
- */
102
- export const select = function (entity, id) {
103
- return {
104
- type: `[${entity}] Select`,
105
- id
106
- };
107
- };
108
- export const selectSuccess = function (entity, id, item) {
109
- return {
110
- type: `[${entity}] Select Success`,
111
- id,
112
- item
113
- };
114
- };
115
- export const selectFailure = function (entity, id, error) {
116
- return {
117
- type: `[${entity}] Select Failure`,
118
- id,
119
- error
120
- };
121
- };
122
- export const unselect = function (entity) {
123
- return {
124
- type: `[${entity}] Unselect`
125
- };
126
- };
127
- /*
128
- * MultiSelect
129
- */
130
- export const multiSelect = function (entity, items) {
131
- return {
132
- type: `[${entity}] MultiSelect`,
133
- items
134
- };
135
- };
136
- /*
137
- * Update
138
- */
139
- export const update = function (entity, item) {
140
- return {
141
- type: `[${entity}] Update`,
142
- item
143
- };
144
- };
145
- export const updateSuccess = function (entity, item) {
146
- return {
147
- type: `[${entity}] Update Success`,
148
- item
149
- };
150
- };
151
- export const updateFailure = function (entity, item, error) {
152
- return {
153
- type: `[${entity}] Update Failure`,
154
- item,
155
- error
156
- };
157
- };
158
- /*
159
- * Update partial
160
- */
161
- export const updatePartial = function (entity, item) {
162
- return {
163
- type: `[${entity}] Update partial`,
164
- item
165
- };
166
- };
167
- export const updatePartialSuccess = function (entity, item) {
168
- return {
169
- type: `[${entity}] Update partial Success`,
170
- item
171
- };
172
- };
173
- export const updatePartialFailure = function (entity, item, error) {
174
- return {
175
- type: `[${entity}] Update partial Failure`,
176
- item,
177
- error
178
- };
179
- };
180
- /*
181
- * Update partial many
182
- */
183
- export const updatePartialMany = function (entity, items) {
184
- return {
185
- type: `[${entity}] Update partial many`,
186
- items
187
- };
188
- };
189
- export const updatePartialManySuccess = function (entity, items) {
190
- return {
191
- type: `[${entity}] Update partial many Success`,
192
- items
193
- };
194
- };
195
- export const updatePartialManyFailure = function (entity, items, error) {
196
- return {
197
- type: `[${entity}] Update partial many Failure`,
198
- items,
199
- error
200
- };
201
- };
202
- /*
203
- * Delete
204
- */
205
- export const deleteItem = function (entity, id) {
206
- return {
207
- type: `[${entity}] Delete`,
208
- id
209
- };
210
- };
211
- export const deleteSuccess = function (entity, id) {
212
- return {
213
- type: `[${entity}] Delete Success`,
214
- id
215
- };
216
- };
217
- export const deleteFailure = function (entity, id, error) {
218
- return {
219
- type: `[${entity}] Delete Failure`,
220
- id,
221
- error
222
- };
223
- };
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcnVkL3NoZWxsL2FuZ3VsYXIvc3JjL2xpYi8rc3RhdGUvY3J1ZC5hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFVBQ3BCLE1BQWMsRUFDZCxJQUFPO0lBRVAsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLE1BQU0sVUFBVTtRQUMxQixJQUFJO0tBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxVQUMzQixNQUFjLEVBQ2QsSUFBTztJQUVQLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxNQUFNLGtCQUFrQjtRQUNsQyxJQUFJO0tBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxVQUMzQixNQUFjLEVBQ2QsSUFBTyxFQUNQLEtBQUs7SUFFTCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksTUFBTSxrQkFBa0I7UUFDbEMsSUFBSTtRQUNKLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsVUFDeEIsTUFBYyxFQUNkLElBQXFEO0lBRXJELE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxNQUFNLGVBQWU7UUFDL0IsSUFBSTtLQUNMLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxVQUMvQixNQUFjLEVBQ2QsSUFBcUQ7SUFFckQsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLE1BQU0sdUJBQXVCO1FBQ3ZDLElBQUk7S0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsVUFDL0IsTUFB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QWMsRUFDZCxLQUFvQztJQUV0QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksTUFBTSx1QkFBdUI7UUFDdkMsS0FBSztLQUNOLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxVQUNwQyxNQUFjLEVBQ2QsS0FBb0M7SUFFdEMsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLE1BQU0sK0JBQStCO1FBQy9DLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsVUFDcEMsTUFBYyxFQUNkLEtBQW9DLEVBQ3BDLEtBQUs7SUFFUCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksTUFBTSwrQkFBK0I7UUFDL0MsS0FBSztRQUNMLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsVUFDeEIsTUFBYyxFQUNkLEVBQVU7SUFFVixPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksTUFBTSxVQUFVO1FBQzFCLEVBQUU7S0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFVBQzNCLE1BQWMsRUFDZCxFQUFVO0lBRVYsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLE1BQU0sa0JBQWtCO1FBQ2xDLEVBQUU7S0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFVBQzNCLE1BQWMsRUFDZCxFQUFVLEVBQ1YsS0FBSztJQUVMLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxNQUFNLGtCQUFrQjtRQUNsQyxFQUFFO1FBQ0YsS0FBSztLQUNOLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcblxuaW1wb3J0IHsgSUVudGl0eSB9IGZyb20gXCJAc21hcnRzb2Z0MDAxL2RvbWFpbi1jb3JlXCI7XG5pbXBvcnQgeyBJQ3J1ZENyZWF0ZU1hbnlPcHRpb25zLCBJQ3J1ZEZpbHRlciB9IGZyb20gXCIuLi9tb2RlbHMvaW50ZXJmYWNlc1wiO1xuXG5cbi8qXG4gKiBDcmVhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZSA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgaXRlbTogVFxuKTogQWN0aW9uICYgeyBpdGVtOiBUIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBDcmVhdGVgLFxuICAgIGl0ZW1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdWNjZXNzID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpdGVtOiBUXG4pOiBBY3Rpb24gJiB7IGl0ZW06IFQgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIENyZWF0ZSBTdWNjZXNzYCxcbiAgICBpdGVtXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRmFpbHVyZSA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgaXRlbTogVCxcbiAgZXJyb3Jcbik6IEFjdGlvbiAmIHsgaXRlbTogVDsgZXJyb3IgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIENyZWF0ZSBGYWlsdXJlYCxcbiAgICBpdGVtLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG4vKlxuICogQ3JlYXRlIG1hbnlcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbnkgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+PihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGRhdGE6IHsgaXRlbXM6IFRbXTsgb3B0aW9uczogSUNydWRDcmVhdGVNYW55T3B0aW9ucyB9XG4pOiBBY3Rpb24gJiB7IGRhdGE6IHsgaXRlbXM6IFRbXTsgb3B0aW9uczogSUNydWRDcmVhdGVNYW55T3B0aW9ucyB9IH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBDcmVhdGUgTWFueWAsXG4gICAgZGF0YVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbnlTdWNjZXNzID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBkYXRhOiB7IGl0ZW1zOiBUW107IG9wdGlvbnM6IElDcnVkQ3JlYXRlTWFueU9wdGlvbnMgfVxuKTogQWN0aW9uICYgeyBkYXRhOiB7IGl0ZW1zOiBUW107IG9wdGlvbnM6IElDcnVkQ3JlYXRlTWFueU9wdGlvbnMgfSB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gQ3JlYXRlIE1hbnkgU3VjY2Vzc2AsXG4gICAgZGF0YVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbnlGYWlsdXJlID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBkYXRhOiB7IGl0ZW1zOiBUW107IG9wdGlvbnM6IElDcnVkQ3JlYXRlTWFueU9wdGlvbnMgfSxcbiAgZXJyb3Jcbik6IEFjdGlvbiAmIHsgZGF0YTogeyBpdGVtczogVFtdOyBvcHRpb25zOiBJQ3J1ZENyZWF0ZU1hbnlPcHRpb25zIH07IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBDcmVhdGUgTWFueSBGYWlsdXJlYCxcbiAgICBkYXRhLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG4vKlxuICogUmVhZFxuICovXG5leHBvcnQgY29uc3QgcmVhZCA9IGZ1bmN0aW9uKFxuICBlbnRpdHk6IHN0cmluZyxcbiAgZmlsdGVyOiBJQ3J1ZEZpbHRlciA9IG51bGxcbik6IEFjdGlvbiAmIHsgZmlsdGVyOiBJQ3J1ZEZpbHRlciB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gUmVhZGAsXG4gICAgZmlsdGVyXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZFN1Y2Nlc3MgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+LCBGPihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGZpbHRlcjogRixcbiAgcmVzdWx0OiB7IGRhdGE6IFRbXTsgdG90YWxDb3VudDogbnVtYmVyOyBsaW5rcyB9XG4pOiBBY3Rpb24gJiB7IHJlc3VsdDogeyBkYXRhOiBUW107IHRvdGFsQ291bnQ6IG51bWJlcjsgbGlua3MgfTsgZmlsdGVyOiBGIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBSZWFkIFN1Y2Nlc3NgLFxuICAgIHJlc3VsdCxcbiAgICBmaWx0ZXJcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWFkRmFpbHVyZSA9IGZ1bmN0aW9uPEY+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgZmlsdGVyOiBGLFxuICBlcnJvclxuKTogQWN0aW9uICYgeyBmaWx0ZXI6IEY7IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBSZWFkIEZhaWx1cmVgLFxuICAgIGZpbHRlcixcbiAgICBlcnJvclxuICB9O1xufTtcblxuLypcbiAqIENsZWFyXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhciA9IGZ1bmN0aW9uKFxuICAgIGVudGl0eTogc3RyaW5nLFxuKTogQWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gQ2xlYXJgXG4gIH07XG59O1xuXG4vKlxuICogRXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBleHBvcnRMaXN0ID0gZnVuY3Rpb24oXG4gIGVudGl0eTogc3RyaW5nLFxuICBmaWx0ZXI6IElDcnVkRmlsdGVyID0gbnVsbCxcbiAgZm9ybWF0XG4pOiBBY3Rpb24gJiB7IGZpbHRlcjogSUNydWRGaWx0ZXIsIGZvcm1hdCB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gRXhwb3J0YCxcbiAgICBmaWx0ZXIsXG4gICAgZm9ybWF0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0TGlzdFN1Y2Nlc3MgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+LCBGPihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGZpbHRlcjogRlxuKTogQWN0aW9uICYgeyBmaWx0ZXI6IEYgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIEV4cG9ydCBTdWNjZXNzYCxcbiAgICBmaWx0ZXJcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBvcnRMaXN0RmFpbHVyZSA9IGZ1bmN0aW9uPEY+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgZmlsdGVyOiBGLFxuICBlcnJvclxuKTogQWN0aW9uICYgeyBmaWx0ZXI6IEY7IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBFeHBvcnQgRmFpbHVyZWAsXG4gICAgZmlsdGVyLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG4vKlxuICogU2VsZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBzZWxlY3QgPSBmdW5jdGlvbihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmdcbik6IEFjdGlvbiAmIHsgaWQ6IHN0cmluZyB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gU2VsZWN0YCxcbiAgICBpZFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFN1Y2Nlc3MgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+LCBGPihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IFRcbik6IEFjdGlvbiAmIHsgaWQ6IHN0cmluZzsgaXRlbTogVCB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gU2VsZWN0IFN1Y2Nlc3NgLFxuICAgIGlkLFxuICAgIGl0ZW1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RGYWlsdXJlID0gZnVuY3Rpb248Rj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBlcnJvclxuKTogQWN0aW9uICYgeyBpZDogc3RyaW5nOyBlcnJvciB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gU2VsZWN0IEZhaWx1cmVgLFxuICAgIGlkLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgdW5zZWxlY3QgPSBmdW5jdGlvbihlbnRpdHk6IHN0cmluZyk6IEFjdGlvbiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIFVuc2VsZWN0YFxuICB9O1xufTtcblxuLypcbiAqIE11bHRpU2VsZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBtdWx0aVNlbGVjdCA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICAgIGVudGl0eTogc3RyaW5nLFxuICAgIGl0ZW1zOiBBcnJheTxUPlxuKTogQWN0aW9uICYgeyBpdGVtczogQXJyYXk8VD4gfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIE11bHRpU2VsZWN0YCxcbiAgICBpdGVtc1xuICB9O1xufTtcblxuLypcbiAqIFVwZGF0ZVxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpdGVtOiBUXG4pOiBBY3Rpb24gJiB7IGl0ZW06IFQgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIFVwZGF0ZWAsXG4gICAgaXRlbVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVN1Y2Nlc3MgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+PihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGl0ZW06IFRcbik6IEFjdGlvbiAmIHsgaXRlbTogVCB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIFN1Y2Nlc3NgLFxuICAgIGl0ZW1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVGYWlsdXJlID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpdGVtOiBULFxuICBlcnJvclxuKTogQWN0aW9uICYgeyBpdGVtOiBUOyBlcnJvciB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIEZhaWx1cmVgLFxuICAgIGl0ZW0sXG4gICAgZXJyb3JcbiAgfTtcbn07XG5cbi8qXG4gKiBVcGRhdGUgcGFydGlhbFxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlUGFydGlhbCA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgaXRlbTogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9XG4pOiBBY3Rpb24gJiB7IGl0ZW06IFBhcnRpYWw8VD4gJiB7IGlkOiBzdHJpbmcgfSB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIHBhcnRpYWxgLFxuICAgIGl0ZW1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQYXJ0aWFsU3VjY2VzcyA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgaXRlbTogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9XG4pOiBBY3Rpb24gJiB7IGl0ZW06IFBhcnRpYWw8VD4gJiB7IGlkOiBzdHJpbmcgfSB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIHBhcnRpYWwgU3VjY2Vzc2AsXG4gICAgaXRlbVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBhcnRpYWxGYWlsdXJlID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpdGVtOiBQYXJ0aWFsPFQ+ICYgeyBpZDogc3RyaW5nIH0sXG4gIGVycm9yXG4pOiBBY3Rpb24gJiB7IGl0ZW06IFBhcnRpYWw8VD4gJiB7IGlkOiBzdHJpbmcgfTsgZXJyb3IgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIFVwZGF0ZSBwYXJ0aWFsIEZhaWx1cmVgLFxuICAgIGl0ZW0sXG4gICAgZXJyb3JcbiAgfTtcbn07XG5cbi8qXG4gKiBVcGRhdGUgcGFydGlhbCBtYW55XG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVQYXJ0aWFsTWFueSA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICAgIGVudGl0eTogc3RyaW5nLFxuICAgIGl0ZW1zOiBQYXJ0aWFsPFQ+ICYgeyBpZDogc3RyaW5nIH1bXVxuKTogQWN0aW9uICYgeyBpdGVtczogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9W10gfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIFVwZGF0ZSBwYXJ0aWFsIG1hbnlgLFxuICAgIGl0ZW1zXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUGFydGlhbE1hbnlTdWNjZXNzID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gICAgZW50aXR5OiBzdHJpbmcsXG4gICAgaXRlbXM6IFBhcnRpYWw8VD4gJiB7IGlkOiBzdHJpbmcgfVtdXG4pOiBBY3Rpb24gJiB7IGl0ZW1zOiBQYXJ0aWFsPFQ+ICYgeyBpZDogc3RyaW5nIH1bXSB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIHBhcnRpYWwgbWFueSBTdWNjZXNzYCxcbiAgICBpdGVtc1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBhcnRpYWxNYW55RmFpbHVyZSA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICAgIGVudGl0eTogc3RyaW5nLFxuICAgIGl0ZW1zOiBQYXJ0aWFsPFQ+ICYgeyBpZDogc3RyaW5nIH1bXSxcbiAgICBlcnJvclxuKTogQWN0aW9uICYgeyBpdGVtczogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9W107IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBVcGRhdGUgcGFydGlhbCBtYW55IEZhaWx1cmVgLFxuICAgIGl0ZW1zLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG4vKlxuICogRGVsZXRlXG4gKi9cbmV4cG9ydCBjb25zdCBkZWxldGVJdGVtID0gZnVuY3Rpb24oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpZDogc3RyaW5nXG4pOiBBY3Rpb24gJiB7IGlkOiBzdHJpbmcgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIERlbGV0ZWAsXG4gICAgaWRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVTdWNjZXNzID0gZnVuY3Rpb24oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpZDogc3RyaW5nXG4pOiBBY3Rpb24gJiB7IGlkOiBzdHJpbmcgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIERlbGV0ZSBTdWNjZXNzYCxcbiAgICBpZFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUZhaWx1cmUgPSBmdW5jdGlvbjxGPihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGVycm9yXG4pOiBBY3Rpb24gJiB7IGlkOiBzdHJpbmc7IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBEZWxldGUgRmFpbHVyZWAsXG4gICAgaWQsXG4gICAgZXJyb3JcbiAgfTtcbn07XG4iXX0=
@@ -1,182 +0,0 @@
1
- import "reflect-metadata";
2
- import { Injectable } from "@angular/core";
3
- import { catchError, first, tap } from "rxjs/operators";
4
- import { of } from "rxjs";
5
- import { ActionsSubject, select, State, Store } from "@ngrx/store";
6
- import { CrudService } from "../services/crud/crud.service";
7
- import * as CrudActions from "./crud.actions";
8
- import { CrudConfig } from "../crud.config";
9
- import { getCrudFilter } from "./crud.selectors";
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@ngrx/store";
12
- import * as i2 from "../services/crud/crud.service";
13
- import * as i3 from "../crud.config";
14
- export class CrudEffects {
15
- constructor(actions$, service, config, store, state) {
16
- this.actions$ = actions$;
17
- this.service = service;
18
- this.config = config;
19
- this.store = store;
20
- this.state = state;
21
- }
22
- init() {
23
- const metadata = Reflect.getMetadata(this.config.entity, CrudEffects);
24
- if (metadata)
25
- return;
26
- Reflect.defineMetadata(this.config.entity, true, CrudEffects);
27
- this.actions$.subscribe((action) => {
28
- switch (action.type) {
29
- case `[${this.config.entity}] Create`:
30
- this.service
31
- .create(action.item)
32
- .pipe(tap(() => this.store.dispatch(CrudActions.createSuccess(this.config.entity, action.item))), catchError((error) => {
33
- this.store.dispatch(CrudActions.createFailure(this.config.entity, action.item, error));
34
- return of();
35
- }))
36
- .subscribe();
37
- break;
38
- case `[${this.config.entity}] Create Success`:
39
- const createState = this.state.getValue()[this.config.entity];
40
- this.store.dispatch(CrudActions.read(this.config.entity, createState.filter ? { ...createState.filter, offset: 0 } : null));
41
- break;
42
- case `[${this.config.entity}] Create Many`:
43
- this.service
44
- .createMany(action.data.items, action.data.options)
45
- .pipe(tap(() => this.store.dispatch(CrudActions.createManySuccess(this.config.entity, {
46
- items: action.data.items,
47
- options: action.data.options,
48
- }))), catchError((error) => {
49
- this.store.dispatch(CrudActions.createManyFailure(this.config.entity, {
50
- items: action.data.items,
51
- options: action.data.options,
52
- }, error));
53
- return of();
54
- }))
55
- .subscribe();
56
- break;
57
- case `[${this.config.entity}] Create Many Success`:
58
- const createManyState = this.state.getValue()[this.config.entity];
59
- this.store.dispatch(CrudActions.read(this.config.entity, createManyState.filter
60
- ? { ...createManyState.filter, offset: 0 }
61
- : null));
62
- break;
63
- case `[${this.config.entity}] Read`:
64
- this.service
65
- .getList(action.filter)
66
- .pipe(tap((result) => this.store.dispatch(CrudActions.readSuccess(this.config.entity, action.filter, result))), catchError((error) => {
67
- this.store.dispatch(CrudActions.readFailure(this.config.entity, action.filter, error));
68
- return of();
69
- }))
70
- .subscribe();
71
- break;
72
- case `[${this.config.entity}] Export`:
73
- this.service
74
- .exportList(action.filter, action.format)
75
- .pipe(tap((result) => this.store.dispatch(CrudActions.exportListSuccess(this.config.entity, action.filter))), catchError((error) => {
76
- this.store.dispatch(CrudActions.exportListFailure(this.config.entity, action.filter, error));
77
- return of();
78
- }))
79
- .subscribe();
80
- break;
81
- case `[${this.config.entity}] Select`:
82
- this.service
83
- .getById(action.id)
84
- .pipe(tap((result) => this.store.dispatch(CrudActions.selectSuccess(this.config.entity, action.id, result))), catchError((error) => {
85
- this.store.dispatch(CrudActions.selectFailure(this.config.entity, action.id, error));
86
- return of();
87
- }))
88
- .subscribe();
89
- break;
90
- case `[${this.config.entity}] Update`:
91
- this.service
92
- .updatePartial(action.item)
93
- .pipe(tap(() => this.store.dispatch(CrudActions.updateSuccess(this.config.entity, action.item))), catchError((error) => {
94
- this.store.dispatch(CrudActions.updateFailure(this.config.entity, action.item, error));
95
- this.store.dispatch(CrudActions.read(this.config.entity));
96
- return of();
97
- }))
98
- .subscribe();
99
- break;
100
- case `[${this.config.entity}] Update Success`:
101
- this.store
102
- .pipe(select(getCrudFilter(this.config.entity)), first())
103
- .subscribe((filter) => {
104
- this.store.dispatch(CrudActions.read(this.config.entity, {
105
- ...filter,
106
- offset: 0,
107
- }));
108
- this.store.dispatch(CrudActions.select(this.config.entity, action.item.id));
109
- });
110
- break;
111
- case `[${this.config.entity}] Update partial`:
112
- this.service
113
- .updatePartial(action.item)
114
- .pipe(tap(() => this.store.dispatch(CrudActions.updatePartialSuccess(this.config.entity, action.item))), catchError((error) => {
115
- this.store.dispatch(CrudActions.updatePartialFailure(this.config.entity, action.item, error));
116
- this.store.dispatch(CrudActions.read(this.config.entity));
117
- return of();
118
- }))
119
- .subscribe();
120
- break;
121
- case `[${this.config.entity}] Update partial Success`:
122
- this.store
123
- .pipe(select(getCrudFilter(this.config.entity)), first())
124
- .subscribe((filter) => {
125
- this.store.dispatch(CrudActions.read(this.config.entity, {
126
- ...filter,
127
- offset: 0,
128
- }));
129
- this.store.dispatch(CrudActions.select(this.config.entity, action.item.id));
130
- });
131
- break;
132
- case `[${this.config.entity}] Update partial many`:
133
- this.service
134
- .updatePartialMany(action.items)
135
- .pipe(tap(() => this.store.dispatch(CrudActions.updatePartialManySuccess(this.config.entity, action.items))), catchError((error) => {
136
- this.store.dispatch(CrudActions.updatePartialManyFailure(this.config.entity, action.items, error));
137
- this.store.dispatch(CrudActions.read(this.config.entity));
138
- return of();
139
- }))
140
- .subscribe();
141
- break;
142
- case `[${this.config.entity}] Update partial many Success`:
143
- this.store
144
- .pipe(select(getCrudFilter(this.config.entity)), first())
145
- .subscribe((filter) => {
146
- this.store.dispatch(CrudActions.read(this.config.entity, {
147
- ...filter,
148
- offset: 0,
149
- }));
150
- });
151
- break;
152
- case `[${this.config.entity}] Delete`:
153
- this.service
154
- .delete(action.id)
155
- .pipe(tap(() => this.store.dispatch(CrudActions.deleteSuccess(this.config.entity, action.id))), catchError((error) => {
156
- this.store.dispatch(CrudActions.deleteFailure(this.config.entity, action.id, error));
157
- return of();
158
- }))
159
- .subscribe();
160
- break;
161
- case `[${this.config.entity}] Delete Success`:
162
- this.store
163
- .pipe(select(getCrudFilter(this.config.entity)), first())
164
- .subscribe((filter) => {
165
- this.store.dispatch(CrudActions.read(this.config.entity, {
166
- ...filter,
167
- offset: 0,
168
- }));
169
- });
170
- break;
171
- default:
172
- break;
173
- }
174
- });
175
- }
176
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudEffects, deps: [{ token: i1.ActionsSubject }, { token: i2.CrudService }, { token: i3.CrudConfig }, { token: i1.Store }, { token: i1.State }], target: i0.ɵɵFactoryTarget.Injectable }); }
177
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudEffects }); }
178
- }
179
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudEffects, decorators: [{
180
- type: Injectable
181
- }], ctorParameters: function () { return [{ type: i1.ActionsSubject }, { type: i2.CrudService }, { type: i3.CrudConfig }, { type: i1.Store }, { type: i1.State }]; } });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcnVkL3NoZWxsL2FuZ3VsYXIvc3JjL2xpYi8rc3RhdGUvY3J1ZC5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVELE9BQU8sS0FBSyxXQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFHakQsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDVSxRQUF3QixFQUN4QixPQUF1QixFQUN2QixNQUFxQixFQUNyQixLQUFpQixFQUNqQixLQUFpQjtRQUpqQixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtJQUN4QixDQUFDO0lBRUosSUFBSTtRQUNGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENB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QUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsV0FBVyxDQUFDLGFBQWEsQ0FDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQ2xCLE1BQU0sQ0FBQyxFQUFFLEVBQ1QsS0FBSyxDQUNOLENBQ0YsQ0FBQzt3QkFDRixPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNkLENBQUMsQ0FBQyxDQUNIO3lCQUNBLFNBQVMsRUFBRSxDQUFDO29CQUNmLE1BQU07Z0JBRVIsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxrQkFBa0I7b0JBQ3pDLElBQUksQ0FBQyxLQUFLO3lCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQzt5QkFDeEQsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNmLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7NEJBQ2pDLEdBQUcsTUFBTTs0QkFDVCxNQUFNLEVBQUUsQ0FBQzt5QkFDWixDQUFDLENBQ0wsQ0FBQztvQkFDTixDQUFDLENBQUMsQ0FBQztvQkFDVCxNQUFNO2dCQUVSO29CQUNFLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztpSUE3VVUsV0FBVztxSUFBWCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwicmVmbGVjdC1tZXRhZGF0YVwiO1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpcnN0LCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IG9mIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEFjdGlvbiwgQWN0aW9uc1N1YmplY3QsIHNlbGVjdCwgU3RhdGUsIFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XG5cbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2NydWQvY3J1ZC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSBcIkBzbWFydHNvZnQwMDEvZG9tYWluLWNvcmVcIjtcbmltcG9ydCAqIGFzIENydWRBY3Rpb25zIGZyb20gXCIuL2NydWQuYWN0aW9uc1wiO1xuaW1wb3J0IHsgQ3J1ZENvbmZpZyB9IGZyb20gXCIuLi9jcnVkLmNvbmZpZ1wiO1xuaW1wb3J0IHsgZ2V0Q3J1ZEZpbHRlciB9IGZyb20gXCIuL2NydWQuc2VsZWN0b3JzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDcnVkRWZmZWN0czxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+PiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnNTdWJqZWN0LFxuICAgIHByaXZhdGUgc2VydmljZTogQ3J1ZFNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBjb25maWc6IENydWRDb25maWc8VD4sXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHN0YXRlOiBTdGF0ZTxhbnk+XG4gICkge31cblxuICBpbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YSh0aGlzLmNvbmZpZy5lbnRpdHksIENydWRFZmZlY3RzKTtcblxuICAgIGlmIChtZXRhZGF0YSkgcmV0dXJuO1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSh0aGlzLmNvbmZpZy5lbnRpdHksIHRydWUsIENydWRFZmZlY3RzKTtcblxuICAgIHRoaXMuYWN0aW9ucyQuc3Vic2NyaWJlKChhY3Rpb246IEFjdGlvbiAmIGFueSkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBDcmVhdGVgOlxuICAgICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmNyZWF0ZShhY3Rpb24uaXRlbSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMuY3JlYXRlU3VjY2Vzcyh0aGlzLmNvbmZpZy5lbnRpdHksIGFjdGlvbi5pdGVtKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMuY3JlYXRlRmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIENyZWF0ZSBTdWNjZXNzYDpcbiAgICAgICAgICBjb25zdCBjcmVhdGVTdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0VmFsdWUoKVt0aGlzLmNvbmZpZy5lbnRpdHldO1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBDcnVkQWN0aW9ucy5yZWFkKFxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgIGNyZWF0ZVN0YXRlLmZpbHRlciA/IHsgLi4uY3JlYXRlU3RhdGUuZmlsdGVyLCBvZmZzZXQ6IDAgfSA6IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIENyZWF0ZSBNYW55YDpcbiAgICAgICAgICB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC5jcmVhdGVNYW55KGFjdGlvbi5kYXRhLml0ZW1zLCBhY3Rpb24uZGF0YS5vcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5jcmVhdGVNYW55U3VjY2Vzcyh0aGlzLmNvbmZpZy5lbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGFjdGlvbi5kYXRhLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBhY3Rpb24uZGF0YS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLmNyZWF0ZU1hbnlGYWlsdXJlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtczogYWN0aW9uLmRhdGEuaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogYWN0aW9uLmRhdGEub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIENyZWF0ZSBNYW55IFN1Y2Nlc3NgOlxuICAgICAgICAgIGNvbnN0IGNyZWF0ZU1hbnlTdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0VmFsdWUoKVt0aGlzLmNvbmZpZy5lbnRpdHldO1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBDcnVkQWN0aW9ucy5yZWFkKFxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgIGNyZWF0ZU1hbnlTdGF0ZS5maWx0ZXJcbiAgICAgICAgICAgICAgICA/IHsgLi4uY3JlYXRlTWFueVN0YXRlLmZpbHRlciwgb2Zmc2V0OiAwIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIFJlYWRgOlxuICAgICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmdldExpc3QoYWN0aW9uLmZpbHRlcilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKHJlc3VsdCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMucmVhZFN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5yZWFkRmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBgWyR7dGhpcy5jb25maWcuZW50aXR5fV0gRXhwb3J0YDpcbiAgICAgICAgICB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC5leHBvcnRMaXN0KGFjdGlvbi5maWx0ZXIsIGFjdGlvbi5mb3JtYXQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFwKChyZXN1bHQpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLmV4cG9ydExpc3RTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5maWx0ZXJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLmV4cG9ydExpc3RGYWlsdXJlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBTZWxlY3RgOlxuICAgICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmdldEJ5SWQoYWN0aW9uLmlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5zZWxlY3RTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5zZWxlY3RGYWlsdXJlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIFVwZGF0ZWA6XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlUGFydGlhbChhY3Rpb24uaXRlbSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMudXBkYXRlU3VjY2Vzcyh0aGlzLmNvbmZpZy5lbnRpdHksIGFjdGlvbi5pdGVtKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMudXBkYXRlRmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMucmVhZCh0aGlzLmNvbmZpZy5lbnRpdHkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBVcGRhdGUgU3VjY2Vzc2A6XG4gICAgICAgICAgdGhpcy5zdG9yZVxuICAgICAgICAgICAgLnBpcGUoc2VsZWN0KGdldENydWRGaWx0ZXIodGhpcy5jb25maWcuZW50aXR5KSksIGZpcnN0KCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5yZWFkKHRoaXMuY29uZmlnLmVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDcnVkQWN0aW9ucy5zZWxlY3QodGhpcy5jb25maWcuZW50aXR5LCBhY3Rpb24uaXRlbS5pZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBgWyR7dGhpcy5jb25maWcuZW50aXR5fV0gVXBkYXRlIHBhcnRpYWxgOlxuICAgICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZVBhcnRpYWwoYWN0aW9uLml0ZW0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnVwZGF0ZVBhcnRpYWxTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pdGVtXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy51cGRhdGVQYXJ0aWFsRmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMucmVhZCh0aGlzLmNvbmZpZy5lbnRpdHkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBVcGRhdGUgcGFydGlhbCBTdWNjZXNzYDpcbiAgICAgICAgICB0aGlzLnN0b3JlXG4gICAgICAgICAgICAucGlwZShzZWxlY3QoZ2V0Q3J1ZEZpbHRlcih0aGlzLmNvbmZpZy5lbnRpdHkpKSwgZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnJlYWQodGhpcy5jb25maWcuZW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENydWRBY3Rpb25zLnNlbGVjdCh0aGlzLmNvbmZpZy5lbnRpdHksIGFjdGlvbi5pdGVtLmlkKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBVcGRhdGUgcGFydGlhbCBtYW55YDpcbiAgICAgICAgICB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVQYXJ0aWFsTWFueShhY3Rpb24uaXRlbXMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnVwZGF0ZVBhcnRpYWxNYW55U3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbXNcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnVwZGF0ZVBhcnRpYWxNYW55RmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENydWRBY3Rpb25zLnJlYWQodGhpcy5jb25maWcuZW50aXR5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBgWyR7dGhpcy5jb25maWcuZW50aXR5fV0gVXBkYXRlIHBhcnRpYWwgbWFueSBTdWNjZXNzYDpcbiAgICAgICAgICB0aGlzLnN0b3JlXG4gICAgICAgICAgICAucGlwZShzZWxlY3QoZ2V0Q3J1ZEZpbHRlcih0aGlzLmNvbmZpZy5lbnRpdHkpKSwgZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnJlYWQodGhpcy5jb25maWcuZW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIERlbGV0ZWA6XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAuZGVsZXRlKGFjdGlvbi5pZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMuZGVsZXRlU3VjY2Vzcyh0aGlzLmNvbmZpZy5lbnRpdHksIGFjdGlvbi5pZClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLmRlbGV0ZUZhaWx1cmUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBgWyR7dGhpcy5jb25maWcuZW50aXR5fV0gRGVsZXRlIFN1Y2Nlc3NgOlxuICAgICAgICAgICAgdGhpcy5zdG9yZVxuICAgICAgICAgICAgICAgIC5waXBlKHNlbGVjdChnZXRDcnVkRmlsdGVyKHRoaXMuY29uZmlnLmVudGl0eSkpLCBmaXJzdCgpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMucmVhZCh0aGlzLmNvbmZpZy5lbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,91 +0,0 @@
1
- import { select, Store } from "@ngrx/store";
2
- import { Injectable } from "@angular/core";
3
- import { map, tap } from "rxjs/operators";
4
- import { CrudConfig } from "../crud.config";
5
- import * as CrudActions from "./crud.actions";
6
- import * as CrudSelectors from "./crud.selectors";
7
- import { NgrxStoreService } from "@smartsoft001/angular";
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@ngrx/store";
10
- import * as i2 from "../crud.config";
11
- export class CrudFacade {
12
- constructor(store, config) {
13
- this.store = store;
14
- this.config = config;
15
- this.loaded$ = this.store.pipe(select(CrudSelectors.getCrudLoaded(this.config.entity)));
16
- this.loading$ = this.store.pipe(select(CrudSelectors.getCrudLoaded(this.config.entity)), map(l => !l));
17
- this.selected$ = this.store.pipe(select(CrudSelectors.getCrudSelected(this.config.entity)), tap(s => {
18
- this.selected = s;
19
- }));
20
- this.multiSelected$ = this.store.pipe(select(CrudSelectors.getCrudMultiSelected(this.config.entity)), tap(s => {
21
- this.multiSelected = s;
22
- }));
23
- this.list$ = this.store.pipe(select(CrudSelectors.getCrudList(this.config.entity)), tap(l => {
24
- this.list = l;
25
- }));
26
- this.filter$ = this.store.pipe(select(CrudSelectors.getCrudFilter(this.config.entity)), tap(f => {
27
- this.filter = f;
28
- }));
29
- this.totalCount$ = this.store.pipe(select(CrudSelectors.getCrudTotalCount(this.config.entity)));
30
- this.links$ = this.store.pipe(select(CrudSelectors.getCrudLinks(this.config.entity)));
31
- this.error$ = this.store.pipe(select(CrudSelectors.getCrudError(this.config.entity)));
32
- if (NgrxStoreService.store) {
33
- this.store = NgrxStoreService.store;
34
- }
35
- }
36
- create(item) {
37
- this.store.dispatch(CrudActions.create(this.config.entity, item));
38
- }
39
- createMany(items, options) {
40
- this.store.dispatch(CrudActions.createMany(this.config.entity, { items, options }));
41
- }
42
- read(filter = null) {
43
- let baseQuery = [];
44
- if (this.config.baseQuery) {
45
- baseQuery = this.config.baseQuery;
46
- }
47
- const fullFilter = {
48
- ...(filter ? filter : {}),
49
- query: filter && filter.query ? filter.query : baseQuery
50
- };
51
- this.store.dispatch(CrudActions.read(this.config.entity, fullFilter));
52
- }
53
- clear() {
54
- this.store.dispatch(CrudActions.clear(this.config.entity));
55
- }
56
- select(id) {
57
- this.store.dispatch(CrudActions.select(this.config.entity, id));
58
- }
59
- unselect() {
60
- this.store.dispatch(CrudActions.unselect(this.config.entity));
61
- }
62
- multiSelect(items) {
63
- this.store.dispatch(CrudActions.multiSelect(this.config.entity, items));
64
- }
65
- update(item) {
66
- this.getStore().dispatch(CrudActions.update(this.config.entity, item));
67
- }
68
- export(filter = null, format = null) {
69
- this.getStore().dispatch(CrudActions.exportList(this.config.entity, filter, format));
70
- }
71
- updatePartial(item) {
72
- this.getStore().dispatch(CrudActions.updatePartial(this.config.entity, item));
73
- }
74
- updatePartialMany(items) {
75
- this.getStore().dispatch(CrudActions.updatePartialMany(this.config.entity, items));
76
- }
77
- delete(id) {
78
- this.getStore().dispatch(CrudActions.deleteItem(this.config.entity, id));
79
- }
80
- getStore() {
81
- if (NgrxStoreService.store)
82
- return NgrxStoreService.store;
83
- return this.store;
84
- }
85
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudFacade, deps: [{ token: i1.Store }, { token: i2.CrudConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
86
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudFacade }); }
87
- }
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudFacade, decorators: [{
89
- type: Injectable
90
- }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.CrudConfig }]; } });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5mYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NydWQvc2hlbGwvYW5ndWxhci9zcmMvbGliLytzdGF0ZS9jcnVkLmZhY2FkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxXQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUl2RCxNQUFNLE9BQU8sVUFBVTtJQWdEckIsWUFBb0IsS0FBaUIsRUFBVSxNQUFxQjtRQUFoRCxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQTFDcEUsWUFBTyxHQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDNUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUN4RCxDQUFDO1FBQ0YsYUFBUSxHQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDN0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNiLENBQUM7UUFDRixjQUFTLEdBQWtCLElBQUks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LENBQUM7WUFDekIsS0FBSyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3pELENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWU7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBTztRQUNaLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBc0IsSUFBSSxFQUFFLE1BQU0sR0FBRyxJQUFJO1FBQzlDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWlDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFvQztRQUNwRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBVTtRQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFFMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7aUlBcEhVLFVBQVU7cUlBQVYsVUFBVTs7MkZBQVYsVUFBVTtrQkFEdEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBtYXAsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmltcG9ydCB7IElFbnRpdHkgfSBmcm9tIFwiQHNtYXJ0c29mdDAwMS9kb21haW4tY29yZVwiO1xuXG5pbXBvcnQgeyBDcnVkQ29uZmlnIH0gZnJvbSBcIi4uL2NydWQuY29uZmlnXCI7XG5pbXBvcnQgKiBhcyBDcnVkQWN0aW9ucyBmcm9tIFwiLi9jcnVkLmFjdGlvbnNcIjtcbmltcG9ydCAqIGFzIENydWRTZWxlY3RvcnMgZnJvbSBcIi4vY3J1ZC5zZWxlY3RvcnNcIjtcbmltcG9ydCB7SUNydWRDcmVhdGVNYW55T3B0aW9ucywgSUNydWRGaWx0ZXJ9IGZyb20gXCIuLi9tb2RlbHMvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtOZ3J4U3RvcmVTZXJ2aWNlfSBmcm9tIFwiQHNtYXJ0c29mdDAwMS9hbmd1bGFyXCI7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENydWRGYWNhZGU8VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4ge1xuICBzZWxlY3RlZDogVDtcbiAgbXVsdGlTZWxlY3RlZDogQXJyYXk8VD47XG4gIGxpc3Q6IEFycmF5PFQ+O1xuICBmaWx0ZXI6IElDcnVkRmlsdGVyO1xuXG4gIGxvYWRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgc2VsZWN0KENydWRTZWxlY3RvcnMuZ2V0Q3J1ZExvYWRlZCh0aGlzLmNvbmZpZy5lbnRpdHkpKVxuICApO1xuICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RvcmUucGlwZShcbiAgICBzZWxlY3QoQ3J1ZFNlbGVjdG9ycy5nZXRDcnVkTG9hZGVkKHRoaXMuY29uZmlnLmVudGl0eSkpLFxuICAgIG1hcChsID0+ICFsKVxuICApO1xuICBzZWxlY3RlZCQ6IE9ic2VydmFibGU8VD4gPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgc2VsZWN0KENydWRTZWxlY3RvcnMuZ2V0Q3J1ZFNlbGVjdGVkKHRoaXMuY29uZmlnLmVudGl0eSkpLFxuICAgIHRhcChzID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBzO1xuICAgIH0pXG4gICk7XG4gIG11bHRpU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoQ3J1ZFNlbGVjdG9ycy5nZXRDcnVkTXVsdGlTZWxlY3RlZCh0aGlzLmNvbmZpZy5lbnRpdHkpKSxcbiAgICAgIHRhcChzID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdGVkID0gcztcbiAgICAgIH0pXG4gICk7XG4gIGxpc3QkOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgc2VsZWN0KENydWRTZWxlY3RvcnMuZ2V0Q3J1ZExpc3QodGhpcy5jb25maWcuZW50aXR5KSksXG4gICAgdGFwKGwgPT4ge1xuICAgICAgdGhpcy5saXN0ID0gbDtcbiAgICB9KVxuICApO1xuICBmaWx0ZXIkOiBPYnNlcnZhYmxlPElDcnVkRmlsdGVyPiA9IHRoaXMuc3RvcmUucGlwZShcbiAgICBzZWxlY3QoQ3J1ZFNlbGVjdG9ycy5nZXRDcnVkRmlsdGVyKHRoaXMuY29uZmlnLmVudGl0eSkpLFxuICAgIHRhcChmID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyID0gZjtcbiAgICB9KVxuICApO1xuICB0b3RhbENvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy5zdG9yZS5waXBlKFxuICAgIHNlbGVjdChDcnVkU2VsZWN0b3JzLmdldENydWRUb3RhbENvdW50KHRoaXMuY29uZmlnLmVudGl0eSkpXG4gICk7XG4gIGxpbmtzJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5zdG9yZS5waXBlKFxuICAgIHNlbGVjdChDcnVkU2VsZWN0b3JzLmdldENydWRMaW5rcyh0aGlzLmNvbmZpZy5lbnRpdHkpKVxuICApO1xuXG4gIGVycm9yJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgc2VsZWN0KENydWRTZWxlY3RvcnMuZ2V0Q3J1ZEVycm9yKHRoaXMuY29uZmlnLmVudGl0eSkpXG4gICk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PiwgcHJpdmF0ZSBjb25maWc6IENydWRDb25maWc8VD4pIHtcbiAgICBpZiAoTmdyeFN0b3JlU2VydmljZS5zdG9yZSkge1xuICAgICAgdGhpcy5zdG9yZSA9IE5ncnhTdG9yZVNlcnZpY2Uuc3RvcmU7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlKGl0ZW06IFQpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENydWRBY3Rpb25zLmNyZWF0ZSh0aGlzLmNvbmZpZy5lbnRpdHksIGl0ZW0pKTtcbiAgfVxuXG4gIGNyZWF0ZU1hbnkoaXRlbXM6IEFycmF5PFQ+LCBvcHRpb25zOiBJQ3J1ZENyZWF0ZU1hbnlPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDcnVkQWN0aW9ucy5jcmVhdGVNYW55KHRoaXMuY29uZmlnLmVudGl0eSwgeyBpdGVtcywgb3B0aW9ucyB9KSk7XG4gIH1cblxuICByZWFkKGZpbHRlcjogSUNydWRGaWx0ZXIgPSBudWxsKTogdm9pZCB7XG4gICAgbGV0IGJhc2VRdWVyeSA9IFtdO1xuICAgIGlmICh0aGlzLmNvbmZpZy5iYXNlUXVlcnkpIHtcbiAgICAgIGJhc2VRdWVyeSA9IHRoaXMuY29uZmlnLmJhc2VRdWVyeTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsRmlsdGVyID0ge1xuICAgICAgLi4uKGZpbHRlciA/IGZpbHRlciA6IHt9KSxcbiAgICAgIHF1ZXJ5OiBmaWx0ZXIgJiYgZmlsdGVyLnF1ZXJ5ID8gZmlsdGVyLnF1ZXJ5IDogYmFzZVF1ZXJ5XG4gICAgfTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMucmVhZCh0aGlzLmNvbmZpZy5lbnRpdHksIGZ1bGxGaWx0ZXIpKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMuY2xlYXIodGhpcy5jb25maWcuZW50aXR5KSk7XG4gIH1cblxuICBzZWxlY3QoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMuc2VsZWN0KHRoaXMuY29uZmlnLmVudGl0eSwgaWQpKTtcbiAgfVxuXG4gIHVuc2VsZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMudW5zZWxlY3QodGhpcy5jb25maWcuZW50aXR5KSk7XG4gIH1cblxuICBtdWx0aVNlbGVjdChpdGVtczogQXJyYXk8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENydWRBY3Rpb25zLm11bHRpU2VsZWN0KHRoaXMuY29uZmlnLmVudGl0eSwgaXRlbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShpdGVtOiBUKTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdG9yZSgpLmRpc3BhdGNoKENydWRBY3Rpb25zLnVwZGF0ZSh0aGlzLmNvbmZpZy5lbnRpdHksIGl0ZW0pKTtcbiAgfVxuXG4gIGV4cG9ydChmaWx0ZXI6IElDcnVkRmlsdGVyID0gbnVsbCwgZm9ybWF0ID0gbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0U3RvcmUoKS5kaXNwYXRjaChDcnVkQWN0aW9ucy5leHBvcnRMaXN0KHRoaXMuY29uZmlnLmVudGl0eSwgZmlsdGVyLCBmb3JtYXQpKTtcbiAgfVxuXG4gIHVwZGF0ZVBhcnRpYWwoaXRlbTogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdG9yZSgpLmRpc3BhdGNoKENydWRBY3Rpb25zLnVwZGF0ZVBhcnRpYWwodGhpcy5jb25maWcuZW50aXR5LCBpdGVtKSk7XG4gIH1cblxuICB1cGRhdGVQYXJ0aWFsTWFueShpdGVtczogKFBhcnRpYWw8VD4gJiB7aWQ6IHN0cmluZ30pW10pIHtcbiAgICB0aGlzLmdldFN0b3JlKCkuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMudXBkYXRlUGFydGlhbE1hbnkodGhpcy5jb25maWcuZW50aXR5LCBpdGVtcykpO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmdldFN0b3JlKCkuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMuZGVsZXRlSXRlbSh0aGlzLmNvbmZpZy5lbnRpdHksIGlkKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0b3JlKCk6IFN0b3JlIHtcbiAgICBpZiAoTmdyeFN0b3JlU2VydmljZS5zdG9yZSkgcmV0dXJuIE5ncnhTdG9yZVNlcnZpY2Uuc3RvcmU7XG5cbiAgICByZXR1cm4gdGhpcy5zdG9yZTtcbiAgfVxufVxuIl19