@verisoft/store 18.4.0 → 18.6.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 (45) hide show
  1. package/esm2022/index.mjs +11 -0
  2. package/esm2022/lib/binding-state/binding.actions.mjs +35 -0
  3. package/esm2022/lib/binding-state/binding.effects.mjs +124 -0
  4. package/esm2022/lib/detail-state/detail.actions.mjs +47 -0
  5. package/esm2022/lib/detail-state/detail.effects.mjs +116 -0
  6. package/esm2022/lib/detail-state/detail.models.mjs +12 -0
  7. package/esm2022/lib/detail-state/detail.reducer.mjs +87 -0
  8. package/esm2022/lib/table-state/actions.mjs +50 -0
  9. package/esm2022/lib/table-state/effects.mjs +49 -0
  10. package/esm2022/lib/table-state/models.mjs +12 -0
  11. package/esm2022/lib/table-state/reducers.mjs +80 -0
  12. package/esm2022/verisoft-store.mjs +5 -0
  13. package/fesm2022/verisoft-store.mjs +602 -0
  14. package/fesm2022/verisoft-store.mjs.map +1 -0
  15. package/{src/index.ts → index.d.ts} +10 -12
  16. package/lib/binding-state/binding.actions.d.ts +43 -0
  17. package/lib/binding-state/binding.effects.d.ts +45 -0
  18. package/lib/detail-state/detail.actions.d.ts +52 -0
  19. package/lib/detail-state/detail.effects.d.ts +52 -0
  20. package/lib/detail-state/detail.models.d.ts +27 -0
  21. package/lib/detail-state/detail.reducer.d.ts +4 -0
  22. package/lib/table-state/actions.d.ts +48 -0
  23. package/lib/table-state/effects.d.ts +25 -0
  24. package/lib/table-state/models.d.ts +9 -0
  25. package/lib/table-state/reducers.d.ts +3 -0
  26. package/package.json +28 -13
  27. package/.eslintrc.json +0 -43
  28. package/jest.config.ts +0 -22
  29. package/ng-package.json +0 -7
  30. package/project.json +0 -36
  31. package/src/lib/binding-state/binding.actions.ts +0 -76
  32. package/src/lib/binding-state/binding.effects.ts +0 -472
  33. package/src/lib/detail-state/detail.actions.ts +0 -89
  34. package/src/lib/detail-state/detail.effects.ts +0 -283
  35. package/src/lib/detail-state/detail.models.ts +0 -42
  36. package/src/lib/detail-state/detail.reducer.ts +0 -147
  37. package/src/lib/table-state/actions.ts +0 -93
  38. package/src/lib/table-state/effects.ts +0 -100
  39. package/src/lib/table-state/models.ts +0 -20
  40. package/src/lib/table-state/reducers.ts +0 -126
  41. package/src/test-setup.ts +0 -8
  42. package/tsconfig.json +0 -31
  43. package/tsconfig.lib.json +0 -17
  44. package/tsconfig.lib.prod.json +0 -10
  45. package/tsconfig.spec.json +0 -16
@@ -0,0 +1,11 @@
1
+ export * from './lib/detail-state/detail.actions';
2
+ export * from './lib/detail-state/detail.reducer';
3
+ export * from './lib/detail-state/detail.effects';
4
+ export * from './lib/detail-state/detail.models';
5
+ export * from './lib/table-state/actions';
6
+ export * from './lib/table-state/reducers';
7
+ export * from './lib/table-state/effects';
8
+ export * from './lib/table-state/models';
9
+ export * from './lib/binding-state/binding.actions';
10
+ export * from './lib/binding-state/binding.effects';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zdG9yZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUVqRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBCQUEwQixDQUFDO0FBRXpDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2RldGFpbC1zdGF0ZS9kZXRhaWwuYWN0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RldGFpbC1zdGF0ZS9kZXRhaWwucmVkdWNlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RldGFpbC1zdGF0ZS9kZXRhaWwuZWZmZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RldGFpbC1zdGF0ZS9kZXRhaWwubW9kZWxzJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYmxlLXN0YXRlL2FjdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWJsZS1zdGF0ZS9yZWR1Y2Vycyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYmxlLXN0YXRlL2VmZmVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWJsZS1zdGF0ZS9tb2RlbHMnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYmluZGluZy1zdGF0ZS9iaW5kaW5nLmFjdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9iaW5kaW5nLXN0YXRlL2JpbmRpbmcuZWZmZWN0cyc7XHJcbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import { createAction, props } from '@ngrx/store';
2
+ export function createAddBindingAction(bindingsRepository) {
3
+ return createAction(`[${bindingsRepository}/API] Add bindings`, props());
4
+ }
5
+ export function createAddBindingsAction(bindingsRepository) {
6
+ return createAction(`[${bindingsRepository}/API] Add bindings`, props());
7
+ }
8
+ export function createAddBindingsFailureAction(bindingsRepository) {
9
+ return createAction(`[${bindingsRepository}/API] Add bindings failure`, props());
10
+ }
11
+ export function createAddBindingsSuccessAction(bindingsRepository) {
12
+ return createAction(`[${bindingsRepository}/API] Add bindings success`);
13
+ }
14
+ export function createEditBindingAction(bindingsRepository) {
15
+ return createAction(`[${bindingsRepository}/API] Edit binding`, props());
16
+ }
17
+ export function createEditBindingFailureAction(bindingsRepository) {
18
+ return createAction(`[${bindingsRepository}/API] Edit binding failure`, props());
19
+ }
20
+ export function createEditBindingSuccessAction(bindingsRepository) {
21
+ return createAction(`[${bindingsRepository}/API] Edit binding success`);
22
+ }
23
+ export function createDeleteBindingAction(bindingsRepository) {
24
+ return createAction(`[${bindingsRepository}/API] Delete binding`, props());
25
+ }
26
+ export function createDeleteBindingsAction(bindingsRepository) {
27
+ return createAction(`[${bindingsRepository}/API] Delete bindings`, props());
28
+ }
29
+ export function createDeleteBindingsFailureAction(bindingsRepository) {
30
+ return createAction(`[${bindingsRepository}/API] Delete bindings failure`, props());
31
+ }
32
+ export function createDeleteBindingsSuccessAction(bindingsRepository) {
33
+ return createAction(`[${bindingsRepository}/API] Delete bindings success`);
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGluZy5hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvc3RvcmUvc3JjL2xpYi9iaW5kaW5nLXN0YXRlL2JpbmRpbmcuYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRCxNQUFNLFVBQVUsc0JBQXNCLENBQVUsa0JBQTBCO0lBQ3hFLE9BQU8sWUFBWSxDQUNqQixJQUFJLGtCQUFrQixvQkFBb0IsRUFDMUMsS0FBSyxFQUF3QixDQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBVSxrQkFBMEI7SUFDekUsT0FBTyxZQUFZLENBQ2pCLElBQUksa0JBQWtCLG9CQUFvQixFQUMxQyxLQUFLLEVBQTJCLENBQ2pDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDhCQUE4QixDQUFDLGtCQUEwQjtJQUN2RSxPQUFPLFlBQVksQ0FDakIsSUFBSSxrQkFBa0IsNEJBQTRCLEVBQ2xELEtBQUssRUFBa0IsQ0FDeEIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsOEJBQThCLENBQUMsa0JBQTBCO0lBQ3ZFLE9BQU8sWUFBWSxDQUNqQixJQUFJLGtCQUFrQiw0QkFBNEIsQ0FDbkQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQVEsa0JBQTBCO0lBQ3ZFLE9BQU8sWUFBWSxDQUNqQixJQUFJLGtCQUFrQixvQkFBb0IsRUFDMUMsS0FBSyxFQUFzQixDQUM1QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxrQkFBMEI7SUFDdkUsT0FBTyxZQUFZLENBQ2pCLElBQUksa0JBQWtCLDRCQUE0QixFQUNsRCxLQUFLLEVBQWtCLENBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDhCQUE4QixDQUFDLGtCQUEwQjtJQUN2RSxPQUFPLFlBQVksQ0FDakIsSUFBSSxrQkFBa0IsNEJBQTRCLENBQ25ELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLGtCQUEwQjtJQUNsRSxPQUFPLFlBQVksQ0FDakIsSUFBSSxrQkFBa0Isc0JBQXNCLEVBQzVDLEtBQUssRUFBMkIsQ0FDakMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsa0JBQTBCO0lBQ25FLE9BQU8sWUFBWSxDQUNqQixJQUFJLGtCQUFrQix1QkFBdUIsRUFDN0MsS0FBSyxFQUE0QixDQUNsQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxrQkFBMEI7SUFDMUUsT0FBTyxZQUFZLENBQ2pCLElBQUksa0JBQWtCLCtCQUErQixFQUNyRCxLQUFLLEVBQWtCLENBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLGtCQUEwQjtJQUMxRSxPQUFPLFlBQVksQ0FDakIsSUFBSSxrQkFBa0IsK0JBQStCLENBQ3RELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQWN0aW9uLCBwcm9wcyB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGRCaW5kaW5nQWN0aW9uPFRDcmVhdGU+KGJpbmRpbmdzUmVwb3NpdG9yeTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbihcclxuICAgIGBbJHtiaW5kaW5nc1JlcG9zaXRvcnl9L0FQSV0gQWRkIGJpbmRpbmdzYCxcclxuICAgIHByb3BzPHsgYmluZGluZzogVENyZWF0ZSB9PigpXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkZEJpbmRpbmdzQWN0aW9uPFRDcmVhdGU+KGJpbmRpbmdzUmVwb3NpdG9yeTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbihcclxuICAgIGBbJHtiaW5kaW5nc1JlcG9zaXRvcnl9L0FQSV0gQWRkIGJpbmRpbmdzYCxcclxuICAgIHByb3BzPHsgYmluZGluZ3M6IFRDcmVhdGVbXSB9PigpXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkZEJpbmRpbmdzRmFpbHVyZUFjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7YmluZGluZ3NSZXBvc2l0b3J5fS9BUEldIEFkZCBiaW5kaW5ncyBmYWlsdXJlYCxcclxuICAgIHByb3BzPHsgZXJyb3I6IGFueSB9PigpXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkZEJpbmRpbmdzU3VjY2Vzc0FjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7YmluZGluZ3NSZXBvc2l0b3J5fS9BUEldIEFkZCBiaW5kaW5ncyBzdWNjZXNzYFxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFZGl0QmluZGluZ0FjdGlvbjxURWRpdD4oYmluZGluZ3NSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKFxyXG4gICAgYFske2JpbmRpbmdzUmVwb3NpdG9yeX0vQVBJXSBFZGl0IGJpbmRpbmdgLFxyXG4gICAgcHJvcHM8eyBiaW5kaW5nOiBURWRpdCB9PigpXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRCaW5kaW5nRmFpbHVyZUFjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7YmluZGluZ3NSZXBvc2l0b3J5fS9BUEldIEVkaXQgYmluZGluZyBmYWlsdXJlYCxcclxuICAgIHByb3BzPHsgZXJyb3I6IGFueSB9PigpXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRCaW5kaW5nU3VjY2Vzc0FjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7YmluZGluZ3NSZXBvc2l0b3J5fS9BUEldIEVkaXQgYmluZGluZyBzdWNjZXNzYFxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWxldGVCaW5kaW5nQWN0aW9uKGJpbmRpbmdzUmVwb3NpdG9yeTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbihcclxuICAgIGBbJHtiaW5kaW5nc1JlcG9zaXRvcnl9L0FQSV0gRGVsZXRlIGJpbmRpbmdgLFxyXG4gICAgcHJvcHM8eyBpZDogbnVtYmVyIHwgc3RyaW5nIH0+KClcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVsZXRlQmluZGluZ3NBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKFxyXG4gICAgYFske2JpbmRpbmdzUmVwb3NpdG9yeX0vQVBJXSBEZWxldGUgYmluZGluZ3NgLFxyXG4gICAgcHJvcHM8eyBiaW5kaW5nSWRzOiBudW1iZXJbXSB9PigpXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlbGV0ZUJpbmRpbmdzRmFpbHVyZUFjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7YmluZGluZ3NSZXBvc2l0b3J5fS9BUEldIERlbGV0ZSBiaW5kaW5ncyBmYWlsdXJlYCxcclxuICAgIHByb3BzPHsgZXJyb3I6IGFueSB9PigpXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlbGV0ZUJpbmRpbmdzU3VjY2Vzc0FjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7YmluZGluZ3NSZXBvc2l0b3J5fS9BUEldIERlbGV0ZSBiaW5kaW5ncyBzdWNjZXNzYFxyXG4gICk7XHJcbn1cclxuXHJcbiJdfQ==
@@ -0,0 +1,124 @@
1
+ import { createEffect, ofType } from '@ngrx/effects';
2
+ import { catchError, map, of, switchMap, tap, withLatestFrom, } from 'rxjs';
3
+ import { createAddBindingAction, createAddBindingsAction, createAddBindingsFailureAction, createAddBindingsSuccessAction, createDeleteBindingAction, createDeleteBindingsAction, createDeleteBindingsFailureAction, createDeleteBindingsSuccessAction, createEditBindingAction, createEditBindingFailureAction, createEditBindingSuccessAction, } from './binding.actions';
4
+ export function createSingleBindingEffectsWithEdit(bindingsRepository, actions$, detail$, bindingSingularName, bindingPluralName, addFunction, editFunction, deleteFunction, snackbar, translateService, tableService, overrideDetailWithBinding = false) {
5
+ const addEffect = createAddBindingEffect(bindingsRepository, actions$, detail$, bindingPluralName, addFunction, snackbar, translateService);
6
+ const editEffect = createEditBindingEffect(bindingsRepository, actions$, detail$, bindingSingularName, editFunction, snackbar, translateService, overrideDetailWithBinding);
7
+ const deleteEffect = createDeleteBindingEffect(bindingsRepository, actions$, detail$, bindingPluralName, deleteFunction, snackbar, translateService);
8
+ const modifiedSuccessEffect = createBindingModifiedSuccessEffect(bindingsRepository, actions$, tableService);
9
+ return { addEffect, editEffect, deleteEffect, modifiedSuccessEffect };
10
+ }
11
+ export function createBindingsEffectsWithEdit(bindingsRepository, actions$, detail$, bindingSingularName, bindingPluralName, addFunction, editFunction, deleteFunction, snackbar, translateService, tableService, overrideDetailWithBinding = false) {
12
+ const addEffect = createAddBindingsEffect(bindingsRepository, actions$, detail$, bindingPluralName, addFunction, snackbar, translateService);
13
+ const editEffect = createEditBindingEffect(bindingsRepository, actions$, detail$, bindingSingularName, editFunction, snackbar, translateService, overrideDetailWithBinding);
14
+ const deleteEffect = createDeleteBindingsEffect(bindingsRepository, actions$, detail$, bindingPluralName, deleteFunction, snackbar, translateService);
15
+ const modifiedSuccessEffect = createBindingModifiedSuccessEffect(bindingsRepository, actions$, tableService);
16
+ return { addEffect, editEffect, deleteEffect, modifiedSuccessEffect };
17
+ }
18
+ export function createBindingsEffects(bindingsRepository, actions$, detail$, bindingPluralName, addFunction, deleteFunction, snackbar, translateService, tableService) {
19
+ const addEffect = createAddBindingsEffect(bindingsRepository, actions$, detail$, bindingPluralName, addFunction, snackbar, translateService);
20
+ const deleteEffect = createDeleteBindingsEffect(bindingsRepository, actions$, detail$, bindingPluralName, deleteFunction, snackbar, translateService);
21
+ const modifiedSuccessEffect = createBindingModifiedSuccessEffect(bindingsRepository, actions$, tableService);
22
+ return { addEffect, deleteEffect, modifiedSuccessEffect };
23
+ }
24
+ function createAddBindingEffect(bindingsRepository, actions$, detail$, bindingPluralName, addFunction, snackbar, translateService) {
25
+ return createEffect(() => actions$.pipe(ofType(createAddBindingAction(bindingsRepository)), withLatestFrom(detail$), switchMap(([{ binding }, detail]) => {
26
+ const translatedPluralName = translateService.instant(bindingPluralName);
27
+ const successMessage = `${translateService.instant('BINDINGS_EFFECTS.SUCCESS_ADD')} ${translatedPluralName}!`;
28
+ const failureMessage = `${translateService.instant('BINDINGS_EFFECTS.FAILURE_ADD')} ${translatedPluralName}!`;
29
+ return addFunction(binding).pipe(map(() => {
30
+ snackbar.showSuccess(successMessage);
31
+ return createAddBindingsSuccessAction(bindingsRepository)();
32
+ }), catchError((error) => {
33
+ snackbar.showError(failureMessage);
34
+ return of(createAddBindingsFailureAction(bindingsRepository)({ error }));
35
+ }));
36
+ })));
37
+ }
38
+ function createAddBindingsEffect(bindingsRepository, actions$, detail$, bindingPluralName, addFunction, snackbar, translateService) {
39
+ return createEffect(() => actions$.pipe(ofType(createAddBindingsAction(bindingsRepository)), withLatestFrom(detail$), switchMap(([{ bindings }, detail]) => {
40
+ const translatedPluralName = translateService.instant(bindingPluralName);
41
+ const successMessage = `${translateService.instant('BINDINGS_EFFECTS.SUCCESS_ADD')} ${translatedPluralName}!`;
42
+ const failureMessage = `${translateService.instant('BINDINGS_EFFECTS.FAILURE_ADD')} ${translatedPluralName}!`;
43
+ if (!detail?.id) {
44
+ snackbar.showError(failureMessage);
45
+ return of(createAddBindingsFailureAction(bindingsRepository)({
46
+ error: failureMessage,
47
+ }));
48
+ }
49
+ return addFunction(bindings, detail.id).pipe(map(() => {
50
+ snackbar.showSuccess(successMessage);
51
+ return createAddBindingsSuccessAction(bindingsRepository)();
52
+ }), catchError((error) => {
53
+ snackbar.showError(failureMessage);
54
+ return of(createAddBindingsFailureAction(bindingsRepository)({ error }));
55
+ }));
56
+ })));
57
+ }
58
+ function createEditBindingEffect(bindingsRepository, actions$, detail$, bindingSingularName, editFunction, snackbar, translateService, overrideDetailWithBinding = false) {
59
+ return createEffect(() => actions$.pipe(ofType(createEditBindingAction(bindingsRepository)), withLatestFrom(detail$), switchMap(([{ binding }, detail]) => {
60
+ const translatedPluralName = translateService.instant(bindingSingularName);
61
+ const successMessage = `${translateService.instant('BINDINGS_EFFECTS.SUCCESS_EDIT')} ${translatedPluralName}!`;
62
+ const failureMessage = `${translateService.instant('BINDINGS_EFFECTS.FAILURE_EDIT')} ${translatedPluralName}!`;
63
+ const id = overrideDetailWithBinding ? binding?.id : detail?.id;
64
+ if (!id) {
65
+ snackbar.showError(failureMessage);
66
+ return of(createEditBindingFailureAction(bindingsRepository)({
67
+ error: failureMessage,
68
+ }));
69
+ }
70
+ return editFunction(binding, id).pipe(map(() => {
71
+ snackbar.showSuccess(successMessage);
72
+ return createEditBindingSuccessAction(bindingsRepository)();
73
+ }), catchError((error) => {
74
+ snackbar.showError(failureMessage);
75
+ return of(createEditBindingFailureAction(bindingsRepository)({ error }));
76
+ }));
77
+ })));
78
+ }
79
+ function createDeleteBindingEffect(bindingsRepository, actions$, detail$, bindingPluralName, deleteFunction, snackbar, translateService) {
80
+ return createEffect(() => actions$.pipe(ofType(createDeleteBindingAction(bindingsRepository)), withLatestFrom(detail$), switchMap(([{ id }, detail]) => {
81
+ const translatedPluralName = translateService.instant(bindingPluralName);
82
+ const successMessage = `${translateService.instant('BINDINGS_EFFECTS.SUCCESS_DELETE')} ${translatedPluralName}!`;
83
+ const failureMessage = `${translateService.instant('BINDINGS_EFFECTS.FAILURE_DELETE')} ${translatedPluralName}!`;
84
+ if (!id && !detail?.id) {
85
+ snackbar.showError(failureMessage);
86
+ return of(createDeleteBindingsFailureAction(bindingsRepository)({
87
+ error: failureMessage,
88
+ }));
89
+ }
90
+ return deleteFunction(id, id ?? detail?.id).pipe(map(() => {
91
+ snackbar.showSuccess(successMessage);
92
+ return createDeleteBindingsSuccessAction(bindingsRepository)();
93
+ }), catchError((error) => {
94
+ snackbar.showError(failureMessage);
95
+ return of(createDeleteBindingsFailureAction(bindingsRepository)({ error }));
96
+ }));
97
+ })));
98
+ }
99
+ function createDeleteBindingsEffect(bindingsRepository, actions$, detail$, bindingPluralName, deleteFunction, snackbar, translateService) {
100
+ return createEffect(() => actions$.pipe(ofType(createDeleteBindingsAction(bindingsRepository)), withLatestFrom(detail$), switchMap(([{ bindingIds }, detail]) => {
101
+ const translatedPluralName = translateService.instant(bindingPluralName);
102
+ const successMessage = `${translateService.instant('BINDINGS_EFFECTS.SUCCESS_DELETE')} ${translatedPluralName}!`;
103
+ const failureMessage = `${translateService.instant('BINDINGS_EFFECTS.FAILURE_DELETE')} ${translatedPluralName}!`;
104
+ if (!detail?.id) {
105
+ snackbar.showError(failureMessage);
106
+ return of(createDeleteBindingsFailureAction(bindingsRepository)({
107
+ error: failureMessage,
108
+ }));
109
+ }
110
+ return deleteFunction(bindingIds, detail.id).pipe(map(() => {
111
+ snackbar.showSuccess(successMessage);
112
+ return createDeleteBindingsSuccessAction(bindingsRepository)();
113
+ }), catchError((error) => {
114
+ snackbar.showError(failureMessage);
115
+ return of(createDeleteBindingsFailureAction(bindingsRepository)({ error }));
116
+ }));
117
+ })));
118
+ }
119
+ function createBindingModifiedSuccessEffect(bindingsRepository, actions$, tableService) {
120
+ return createEffect(() => actions$.pipe(ofType(createAddBindingsSuccessAction(bindingsRepository), createEditBindingSuccessAction(bindingsRepository), createDeleteBindingsSuccessAction(bindingsRepository)), tap(() => {
121
+ tableService.forceReload();
122
+ })), { dispatch: false });
123
+ }
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGluZy5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvc3RvcmUvc3JjL2xpYi9iaW5kaW5nLXN0YXRlL2JpbmRpbmcuZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2Qiw4QkFBOEIsRUFDOUIsOEJBQThCLEVBQzlCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsaUNBQWlDLEVBQ2pDLGlDQUFpQyxFQUNqQyx1QkFBdUIsRUFDdkIsOEJBQThCLEVBQzlCLDhCQUE4QixHQUMvQixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sVUFBVSxrQ0FBa0MsQ0FLaEQsa0JBQTBCLEVBQzFCLFFBQWlCLEVBQ2pCLE9BQWtDLEVBQ2xDLG1CQUEyQixFQUMzQixpQkFBeUIsRUFDekIsV0FFb0IsRUFDcEIsWUFBNEUsRUFDNUUsY0FHb0IsRUFDcEIsUUFBYSxFQUNiLGdCQUFxQixFQUNyQixZQUFpQixFQUNqQix5QkFBeUIsR0FBRyxLQUFLO0lBRWpDLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUN0QyxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsV0FBVyxFQUNYLFFBQVEsRUFDUixnQkFBZ0IsQ0FDakIsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHLHVCQUF1QixDQUN4QyxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIseUJB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UCxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQ0gsRUFDSCxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FDcEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIGNhdGNoRXJyb3IsXHJcbiAgbWFwLFxyXG4gIE9ic2VydmFibGUsXHJcbiAgb2YsXHJcbiAgc3dpdGNoTWFwLFxyXG4gIHRhcCxcclxuICB3aXRoTGF0ZXN0RnJvbSxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBjcmVhdGVBZGRCaW5kaW5nQWN0aW9uLFxyXG4gIGNyZWF0ZUFkZEJpbmRpbmdzQWN0aW9uLFxyXG4gIGNyZWF0ZUFkZEJpbmRpbmdzRmFpbHVyZUFjdGlvbixcclxuICBjcmVhdGVBZGRCaW5kaW5nc1N1Y2Nlc3NBY3Rpb24sXHJcbiAgY3JlYXRlRGVsZXRlQmluZGluZ0FjdGlvbixcclxuICBjcmVhdGVEZWxldGVCaW5kaW5nc0FjdGlvbixcclxuICBjcmVhdGVEZWxldGVCaW5kaW5nc0ZhaWx1cmVBY3Rpb24sXHJcbiAgY3JlYXRlRGVsZXRlQmluZGluZ3NTdWNjZXNzQWN0aW9uLFxyXG4gIGNyZWF0ZUVkaXRCaW5kaW5nQWN0aW9uLFxyXG4gIGNyZWF0ZUVkaXRCaW5kaW5nRmFpbHVyZUFjdGlvbixcclxuICBjcmVhdGVFZGl0QmluZGluZ1N1Y2Nlc3NBY3Rpb24sXHJcbn0gZnJvbSAnLi9iaW5kaW5nLmFjdGlvbnMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpbmdsZUJpbmRpbmdFZmZlY3RzV2l0aEVkaXQ8XHJcbiAgVCBleHRlbmRzIHsgaWQ6IG51bWJlciB8IHN0cmluZyB9LFxyXG4gIFRDcmVhdGUsXHJcbiAgVEVkaXQgZXh0ZW5kcyB7IGlkPzogbnVtYmVyIHwgc3RyaW5nIH1cclxuPihcclxuICBiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZyxcclxuICBhY3Rpb25zJDogQWN0aW9ucyxcclxuICBkZXRhaWwkOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+LFxyXG4gIGJpbmRpbmdTaW5ndWxhck5hbWU6IHN0cmluZyxcclxuICBiaW5kaW5nUGx1cmFsTmFtZTogc3RyaW5nLFxyXG4gIGFkZEZ1bmN0aW9uOiAoXHJcbiAgICBiaW5kaW5nczogVENyZWF0ZSxcclxuICApID0+IE9ic2VydmFibGU8YW55PixcclxuICBlZGl0RnVuY3Rpb246IChiaW5kaW5nOiBURWRpdCwgZGV0YWlsSWQ6IG51bWJlciB8IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxhbnk+LFxyXG4gIGRlbGV0ZUZ1bmN0aW9uOiAoXHJcbiAgICBiaW5kaW5nSWRzOiBzdHJpbmcgfCBudW1iZXIsXHJcbiAgICBkZXRhaWxJZDogbnVtYmVyIHwgc3RyaW5nXHJcbiAgKSA9PiBPYnNlcnZhYmxlPGFueT4sXHJcbiAgc25hY2tiYXI6IGFueSxcclxuICB0cmFuc2xhdGVTZXJ2aWNlOiBhbnksXHJcbiAgdGFibGVTZXJ2aWNlOiBhbnksXHJcbiAgb3ZlcnJpZGVEZXRhaWxXaXRoQmluZGluZyA9IGZhbHNlLFxyXG4pIHtcclxuICBjb25zdCBhZGRFZmZlY3QgPSBjcmVhdGVBZGRCaW5kaW5nRWZmZWN0KFxyXG4gICAgYmluZGluZ3NSZXBvc2l0b3J5LFxyXG4gICAgYWN0aW9ucyQsXHJcbiAgICBkZXRhaWwkLFxyXG4gICAgYmluZGluZ1BsdXJhbE5hbWUsXHJcbiAgICBhZGRGdW5jdGlvbixcclxuICAgIHNuYWNrYmFyLFxyXG4gICAgdHJhbnNsYXRlU2VydmljZSxcclxuICApO1xyXG5cclxuICBjb25zdCBlZGl0RWZmZWN0ID0gY3JlYXRlRWRpdEJpbmRpbmdFZmZlY3QoXHJcbiAgICBiaW5kaW5nc1JlcG9zaXRvcnksXHJcbiAgICBhY3Rpb25zJCxcclxuICAgIGRldGFpbCQsXHJcbiAgICBiaW5kaW5nU2luZ3VsYXJOYW1lLFxyXG4gICAgZWRpdEZ1bmN0aW9uLFxyXG4gICAgc25hY2tiYXIsXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgb3ZlcnJpZGVEZXRhaWxXaXRoQmluZGluZ1xyXG4gICk7XHJcblxyXG4gIGNvbnN0IGRlbGV0ZUVmZmVjdCA9IGNyZWF0ZURlbGV0ZUJpbmRpbmdFZmZlY3QoXHJcbiAgICBiaW5kaW5nc1JlcG9zaXRvcnksXHJcbiAgICBhY3Rpb25zJCxcclxuICAgIGRldGFpbCQsXHJcbiAgICBiaW5kaW5nUGx1cmFsTmFtZSxcclxuICAgIGRlbGV0ZUZ1bmN0aW9uLFxyXG4gICAgc25hY2tiYXIsXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgbW9kaWZpZWRTdWNjZXNzRWZmZWN0ID0gY3JlYXRlQmluZGluZ01vZGlmaWVkU3VjY2Vzc0VmZmVjdChcclxuICAgIGJpbmRpbmdzUmVwb3NpdG9yeSxcclxuICAgIGFjdGlvbnMkLFxyXG4gICAgdGFibGVTZXJ2aWNlXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHsgYWRkRWZmZWN0LCBlZGl0RWZmZWN0LCBkZWxldGVFZmZlY3QsIG1vZGlmaWVkU3VjY2Vzc0VmZmVjdCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmluZGluZ3NFZmZlY3RzV2l0aEVkaXQ8XHJcbiAgVCBleHRlbmRzIHsgaWQ6IG51bWJlciB8IHN0cmluZyB9LFxyXG4gIFRDcmVhdGUsXHJcbiAgVEVkaXQgZXh0ZW5kcyB7IGlkPzogbnVtYmVyIHwgc3RyaW5nIH1cclxuPihcclxuICBiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZyxcclxuICBhY3Rpb25zJDogQWN0aW9ucyxcclxuICBkZXRhaWwkOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+LFxyXG4gIGJpbmRpbmdTaW5ndWxhck5hbWU6IHN0cmluZyxcclxuICBiaW5kaW5nUGx1cmFsTmFtZTogc3RyaW5nLFxyXG4gIGFkZEZ1bmN0aW9uOiAoXHJcbiAgICBiaW5kaW5nczogVENyZWF0ZVtdLFxyXG4gICAgZGV0YWlsSWQ6IG51bWJlciB8IHN0cmluZ1xyXG4gICkgPT4gT2JzZXJ2YWJsZTxhbnk+LFxyXG4gIGVkaXRGdW5jdGlvbjogKGJpbmRpbmc6IFRFZGl0LCBkZXRhaWxJZDogbnVtYmVyIHwgc3RyaW5nKSA9PiBPYnNlcnZhYmxlPGFueT4sXHJcbiAgZGVsZXRlRnVuY3Rpb246IChcclxuICAgIGJpbmRpbmdJZHM6IG51bWJlcltdLFxyXG4gICAgZGV0YWlsSWQ6IG51bWJlciB8IHN0cmluZ1xyXG4gICkgPT4gT2JzZXJ2YWJsZTxhbnk+LFxyXG4gIHNuYWNrYmFyOiBhbnksXHJcbiAgdHJhbnNsYXRlU2VydmljZTogYW55LFxyXG4gIHRhYmxlU2VydmljZTogYW55LFxyXG4gIG92ZXJyaWRlRGV0YWlsV2l0aEJpbmRpbmcgPSBmYWxzZSxcclxuKSB7XHJcbiAgY29uc3QgYWRkRWZmZWN0ID0gY3JlYXRlQWRkQmluZGluZ3NFZmZlY3QoXHJcbiAgICBiaW5kaW5nc1JlcG9zaXRvcnksXHJcbiAgICBhY3Rpb25zJCxcclxuICAgIGRldGFpbCQsXHJcbiAgICBiaW5kaW5nUGx1cmFsTmFtZSxcclxuICAgIGFkZEZ1bmN0aW9uLFxyXG4gICAgc25hY2tiYXIsXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgZWRpdEVmZmVjdCA9IGNyZWF0ZUVkaXRCaW5kaW5nRWZmZWN0KFxyXG4gICAgYmluZGluZ3NSZXBvc2l0b3J5LFxyXG4gICAgYWN0aW9ucyQsXHJcbiAgICBkZXRhaWwkLFxyXG4gICAgYmluZGluZ1Npbmd1bGFyTmFtZSxcclxuICAgIGVkaXRGdW5jdGlvbixcclxuICAgIHNuYWNrYmFyLFxyXG4gICAgdHJhbnNsYXRlU2VydmljZSxcclxuICAgIG92ZXJyaWRlRGV0YWlsV2l0aEJpbmRpbmdcclxuICApO1xyXG5cclxuICBjb25zdCBkZWxldGVFZmZlY3QgPSBjcmVhdGVEZWxldGVCaW5kaW5nc0VmZmVjdChcclxuICAgIGJpbmRpbmdzUmVwb3NpdG9yeSxcclxuICAgIGFjdGlvbnMkLFxyXG4gICAgZGV0YWlsJCxcclxuICAgIGJpbmRpbmdQbHVyYWxOYW1lLFxyXG4gICAgZGVsZXRlRnVuY3Rpb24sXHJcbiAgICBzbmFja2JhcixcclxuICAgIHRyYW5zbGF0ZVNlcnZpY2VcclxuICApO1xyXG5cclxuICBjb25zdCBtb2RpZmllZFN1Y2Nlc3NFZmZlY3QgPSBjcmVhdGVCaW5kaW5nTW9kaWZpZWRTdWNjZXNzRWZmZWN0KFxyXG4gICAgYmluZGluZ3NSZXBvc2l0b3J5LFxyXG4gICAgYWN0aW9ucyQsXHJcbiAgICB0YWJsZVNlcnZpY2VcclxuICApO1xyXG5cclxuICByZXR1cm4geyBhZGRFZmZlY3QsIGVkaXRFZmZlY3QsIGRlbGV0ZUVmZmVjdCwgbW9kaWZpZWRTdWNjZXNzRWZmZWN0IH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nc0VmZmVjdHM8XHJcbiAgVCBleHRlbmRzIHsgaWQ6IG51bWJlciB8IHN0cmluZyB9LFxyXG4gIFRDcmVhdGVcclxuPihcclxuICBiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZyxcclxuICBhY3Rpb25zJDogQWN0aW9ucyxcclxuICBkZXRhaWwkOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+LFxyXG4gIGJpbmRpbmdQbHVyYWxOYW1lOiBzdHJpbmcsXHJcbiAgYWRkRnVuY3Rpb246IChcclxuICAgIGJpbmRpbmdzOiBUQ3JlYXRlW10sXHJcbiAgICBkZXRhaWxJZDogbnVtYmVyIHwgc3RyaW5nXHJcbiAgKSA9PiBPYnNlcnZhYmxlPGFueT4sXHJcbiAgZGVsZXRlRnVuY3Rpb246IChcclxuICAgIGJpbmRpbmdJZHM6IG51bWJlcltdLFxyXG4gICAgZGV0YWlsSWQ6IG51bWJlciB8IHN0cmluZ1xyXG4gICkgPT4gT2JzZXJ2YWJsZTxhbnk+LFxyXG4gIHNuYWNrYmFyOiBhbnksXHJcbiAgdHJhbnNsYXRlU2VydmljZTogYW55LFxyXG4gIHRhYmxlU2VydmljZTogYW55XHJcbikge1xyXG4gIGNvbnN0IGFkZEVmZmVjdCA9IGNyZWF0ZUFkZEJpbmRpbmdzRWZmZWN0KFxyXG4gICAgYmluZGluZ3NSZXBvc2l0b3J5LFxyXG4gICAgYWN0aW9ucyQsXHJcbiAgICBkZXRhaWwkLFxyXG4gICAgYmluZGluZ1BsdXJhbE5hbWUsXHJcbiAgICBhZGRGdW5jdGlvbixcclxuICAgIHNuYWNrYmFyLFxyXG4gICAgdHJhbnNsYXRlU2VydmljZVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGRlbGV0ZUVmZmVjdCA9IGNyZWF0ZURlbGV0ZUJpbmRpbmdzRWZmZWN0KFxyXG4gICAgYmluZGluZ3NSZXBvc2l0b3J5LFxyXG4gICAgYWN0aW9ucyQsXHJcbiAgICBkZXRhaWwkLFxyXG4gICAgYmluZGluZ1BsdXJhbE5hbWUsXHJcbiAgICBkZWxldGVGdW5jdGlvbixcclxuICAgIHNuYWNrYmFyLFxyXG4gICAgdHJhbnNsYXRlU2VydmljZVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IG1vZGlmaWVkU3VjY2Vzc0VmZmVjdCA9IGNyZWF0ZUJpbmRpbmdNb2RpZmllZFN1Y2Nlc3NFZmZlY3QoXHJcbiAgICBiaW5kaW5nc1JlcG9zaXRvcnksXHJcbiAgICBhY3Rpb25zJCxcclxuICAgIHRhYmxlU2VydmljZVxyXG4gICk7XHJcblxyXG4gIHJldHVybiB7IGFkZEVmZmVjdCwgZGVsZXRlRWZmZWN0LCBtb2RpZmllZFN1Y2Nlc3NFZmZlY3QgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQWRkQmluZGluZ0VmZmVjdDxUIGV4dGVuZHMgeyBpZDogbnVtYmVyIHwgc3RyaW5nIH0sIFRDcmVhdGU+KFxyXG4gIGJpbmRpbmdzUmVwb3NpdG9yeTogc3RyaW5nLFxyXG4gIGFjdGlvbnMkOiBBY3Rpb25zLFxyXG4gIGRldGFpbCQ6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4sXHJcbiAgYmluZGluZ1BsdXJhbE5hbWU6IHN0cmluZyxcclxuICBhZGRGdW5jdGlvbjogKFxyXG4gICAgYmluZGluZ3M6IFRDcmVhdGUsXHJcbiAgKSA9PiBPYnNlcnZhYmxlPGFueT4sXHJcbiAgc25hY2tiYXI6IGFueSxcclxuICB0cmFuc2xhdGVTZXJ2aWNlOiBhbnksXHJcbikge1xyXG4gIHJldHVybiBjcmVhdGVFZmZlY3QoKCkgPT5cclxuICAgIGFjdGlvbnMkLnBpcGUoXHJcbiAgICAgIG9mVHlwZShjcmVhdGVBZGRCaW5kaW5nQWN0aW9uPFRDcmVhdGU+KGJpbmRpbmdzUmVwb3NpdG9yeSkpLFxyXG4gICAgICB3aXRoTGF0ZXN0RnJvbShkZXRhaWwkKSxcclxuICAgICAgc3dpdGNoTWFwKChbeyBiaW5kaW5nIH0sIGRldGFpbF0pID0+IHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUGx1cmFsTmFtZSA9XHJcbiAgICAgICAgICB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYmluZGluZ1BsdXJhbE5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYCR7dHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ0JJTkRJTkdTX0VGRkVDVFMuU1VDQ0VTU19BREQnXHJcbiAgICAgICAgKX0gJHt0cmFuc2xhdGVkUGx1cmFsTmFtZX0hYDtcclxuICAgICAgICBjb25zdCBmYWlsdXJlTWVzc2FnZSA9IGAke3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgICAgICAgICdCSU5ESU5HU19FRkZFQ1RTLkZBSUxVUkVfQUREJ1xyXG4gICAgICAgICl9ICR7dHJhbnNsYXRlZFBsdXJhbE5hbWV9IWA7XHJcblxyXG4gICAgICAgIHJldHVybiBhZGRGdW5jdGlvbihiaW5kaW5nKS5waXBlKFxyXG4gICAgICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICAgICAgc25hY2tiYXIuc2hvd1N1Y2Nlc3Moc3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQWRkQmluZGluZ3NTdWNjZXNzQWN0aW9uKGJpbmRpbmdzUmVwb3NpdG9yeSkoKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgc25hY2tiYXIuc2hvd0Vycm9yKGZhaWx1cmVNZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgICAgICAgIGNyZWF0ZUFkZEJpbmRpbmdzRmFpbHVyZUFjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnkpKHsgZXJyb3IgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgIClcclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBZGRCaW5kaW5nc0VmZmVjdDxUIGV4dGVuZHMgeyBpZDogbnVtYmVyIHwgc3RyaW5nIH0sIFRDcmVhdGU+KFxyXG4gIGJpbmRpbmdzUmVwb3NpdG9yeTogc3RyaW5nLFxyXG4gIGFjdGlvbnMkOiBBY3Rpb25zLFxyXG4gIGRldGFpbCQ6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4sXHJcbiAgYmluZGluZ1BsdXJhbE5hbWU6IHN0cmluZyxcclxuICBhZGRGdW5jdGlvbjogKFxyXG4gICAgYmluZGluZ3M6IFRDcmVhdGVbXSxcclxuICAgIGRldGFpbElkOiBudW1iZXIgfCBzdHJpbmdcclxuICApID0+IE9ic2VydmFibGU8YW55PixcclxuICBzbmFja2JhcjogYW55LFxyXG4gIHRyYW5zbGF0ZVNlcnZpY2U6IGFueVxyXG4pIHtcclxuICByZXR1cm4gY3JlYXRlRWZmZWN0KCgpID0+XHJcbiAgICBhY3Rpb25zJC5waXBlKFxyXG4gICAgICBvZlR5cGUoY3JlYXRlQWRkQmluZGluZ3NBY3Rpb248VENyZWF0ZT4oYmluZGluZ3NSZXBvc2l0b3J5KSksXHJcbiAgICAgIHdpdGhMYXRlc3RGcm9tKGRldGFpbCQpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt7IGJpbmRpbmdzIH0sIGRldGFpbF0pID0+IHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUGx1cmFsTmFtZSA9XHJcbiAgICAgICAgICB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYmluZGluZ1BsdXJhbE5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYCR7dHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ0JJTkRJTkdTX0VGRkVDVFMuU1VDQ0VTU19BREQnXHJcbiAgICAgICAgKX0gJHt0cmFuc2xhdGVkUGx1cmFsTmFtZX0hYDtcclxuICAgICAgICBjb25zdCBmYWlsdXJlTWVzc2FnZSA9IGAke3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgICAgICAgICdCSU5ESU5HU19FRkZFQ1RTLkZBSUxVUkVfQUREJ1xyXG4gICAgICAgICl9ICR7dHJhbnNsYXRlZFBsdXJhbE5hbWV9IWA7XHJcblxyXG4gICAgICAgIGlmICghZGV0YWlsPy5pZCkge1xyXG4gICAgICAgICAgc25hY2tiYXIuc2hvd0Vycm9yKGZhaWx1cmVNZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybiBvZihcclxuICAgICAgICAgICAgY3JlYXRlQWRkQmluZGluZ3NGYWlsdXJlQWN0aW9uKGJpbmRpbmdzUmVwb3NpdG9yeSkoe1xyXG4gICAgICAgICAgICAgIGVycm9yOiBmYWlsdXJlTWVzc2FnZSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYWRkRnVuY3Rpb24oYmluZGluZ3MsIGRldGFpbC5pZCkucGlwZShcclxuICAgICAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNuYWNrYmFyLnNob3dTdWNjZXNzKHN1Y2Nlc3NNZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkZEJpbmRpbmdzU3VjY2Vzc0FjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnkpKCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHNuYWNrYmFyLnNob3dFcnJvcihmYWlsdXJlTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihcclxuICAgICAgICAgICAgICBjcmVhdGVBZGRCaW5kaW5nc0ZhaWx1cmVBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5KSh7IGVycm9yIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRWRpdEJpbmRpbmdFZmZlY3Q8XHJcbiAgVCBleHRlbmRzIHsgaWQ6IG51bWJlciB8IHN0cmluZyB9LFxyXG4gIFRFZGl0IGV4dGVuZHMgeyBpZD86IG51bWJlciB8IHN0cmluZyB9XHJcbj4oXHJcbiAgYmluZGluZ3NSZXBvc2l0b3J5OiBzdHJpbmcsXHJcbiAgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgZGV0YWlsJDogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPixcclxuICBiaW5kaW5nU2luZ3VsYXJOYW1lOiBzdHJpbmcsXHJcbiAgZWRpdEZ1bmN0aW9uOiAoYmluZGluZzogVEVkaXQsIGRldGFpbElkOiBudW1iZXIgfCBzdHJpbmcpID0+IE9ic2VydmFibGU8YW55PixcclxuICBzbmFja2JhcjogYW55LFxyXG4gIHRyYW5zbGF0ZVNlcnZpY2U6IGFueSxcclxuICBvdmVycmlkZURldGFpbFdpdGhCaW5kaW5nID0gZmFsc2UsXHJcbikge1xyXG4gIHJldHVybiBjcmVhdGVFZmZlY3QoKCkgPT5cclxuICAgIGFjdGlvbnMkLnBpcGUoXHJcbiAgICAgIG9mVHlwZShjcmVhdGVFZGl0QmluZGluZ0FjdGlvbjxURWRpdD4oYmluZGluZ3NSZXBvc2l0b3J5KSksXHJcbiAgICAgIHdpdGhMYXRlc3RGcm9tKGRldGFpbCQpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt7IGJpbmRpbmcgfSwgZGV0YWlsXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQbHVyYWxOYW1lID1cclxuICAgICAgICAgIHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChiaW5kaW5nU2luZ3VsYXJOYW1lKTtcclxuICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGAke3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgICAgICAgICdCSU5ESU5HU19FRkZFQ1RTLlNVQ0NFU1NfRURJVCdcclxuICAgICAgICApfSAke3RyYW5zbGF0ZWRQbHVyYWxOYW1lfSFgO1xyXG4gICAgICAgIGNvbnN0IGZhaWx1cmVNZXNzYWdlID0gYCR7dHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ0JJTkRJTkdTX0VGRkVDVFMuRkFJTFVSRV9FRElUJ1xyXG4gICAgICAgICl9ICR7dHJhbnNsYXRlZFBsdXJhbE5hbWV9IWA7XHJcblxyXG4gICAgICAgIGNvbnN0IGlkID0gb3ZlcnJpZGVEZXRhaWxXaXRoQmluZGluZyA/IGJpbmRpbmc/LmlkIDogZGV0YWlsPy5pZDtcclxuICAgICAgICBpZiAoIWlkKSB7XHJcbiAgICAgICAgICBzbmFja2Jhci5zaG93RXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgICAgICBjcmVhdGVFZGl0QmluZGluZ0ZhaWx1cmVBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5KSh7XHJcbiAgICAgICAgICAgICAgZXJyb3I6IGZhaWx1cmVNZXNzYWdlLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlZGl0RnVuY3Rpb24oYmluZGluZywgaWQpLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBzbmFja2Jhci5zaG93U3VjY2VzcyhzdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFZGl0QmluZGluZ1N1Y2Nlc3NBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5KSgpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBzbmFja2Jhci5zaG93RXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoXHJcbiAgICAgICAgICAgICAgY3JlYXRlRWRpdEJpbmRpbmdGYWlsdXJlQWN0aW9uKGJpbmRpbmdzUmVwb3NpdG9yeSkoeyBlcnJvciB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZURlbGV0ZUJpbmRpbmdFZmZlY3Q8VCBleHRlbmRzIHsgaWQ6IG51bWJlciB8IHN0cmluZyB9PihcclxuICBiaW5kaW5nc1JlcG9zaXRvcnk6IHN0cmluZyxcclxuICBhY3Rpb25zJDogQWN0aW9ucyxcclxuICBkZXRhaWwkOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+LFxyXG4gIGJpbmRpbmdQbHVyYWxOYW1lOiBzdHJpbmcsXHJcbiAgZGVsZXRlRnVuY3Rpb246IChcclxuICAgIGJpbmRpbmdJZHM6IHN0cmluZyB8IG51bWJlcixcclxuICAgIGRldGFpbElkOiBzdHJpbmcgfCBudW1iZXJcclxuICApID0+IE9ic2VydmFibGU8YW55PixcclxuICBzbmFja2JhcjogYW55LFxyXG4gIHRyYW5zbGF0ZVNlcnZpY2U6IGFueVxyXG4pIHtcclxuICByZXR1cm4gY3JlYXRlRWZmZWN0KCgpID0+XHJcbiAgICBhY3Rpb25zJC5waXBlKFxyXG4gICAgICBvZlR5cGUoY3JlYXRlRGVsZXRlQmluZGluZ0FjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnkpKSxcclxuICAgICAgd2l0aExhdGVzdEZyb20oZGV0YWlsJCksXHJcbiAgICAgIHN3aXRjaE1hcCgoW3sgaWQgfSwgZGV0YWlsXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQbHVyYWxOYW1lID1cclxuICAgICAgICAgIHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChiaW5kaW5nUGx1cmFsTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgJHt0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXHJcbiAgICAgICAgICAnQklORElOR1NfRUZGRUNUUy5TVUNDRVNTX0RFTEVURSdcclxuICAgICAgICApfSAke3RyYW5zbGF0ZWRQbHVyYWxOYW1lfSFgO1xyXG4gICAgICAgIGNvbnN0IGZhaWx1cmVNZXNzYWdlID0gYCR7dHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ0JJTkRJTkdTX0VGRkVDVFMuRkFJTFVSRV9ERUxFVEUnXHJcbiAgICAgICAgKX0gJHt0cmFuc2xhdGVkUGx1cmFsTmFtZX0hYDtcclxuXHJcbiAgICAgICAgaWYgKCFpZCAmJiAhZGV0YWlsPy5pZCkge1xyXG4gICAgICAgICAgc25hY2tiYXIuc2hvd0Vycm9yKGZhaWx1cmVNZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybiBvZihcclxuICAgICAgICAgICAgY3JlYXRlRGVsZXRlQmluZGluZ3NGYWlsdXJlQWN0aW9uKGJpbmRpbmdzUmVwb3NpdG9yeSkoe1xyXG4gICAgICAgICAgICAgIGVycm9yOiBmYWlsdXJlTWVzc2FnZSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZGVsZXRlRnVuY3Rpb24oaWQsIGlkID8/IGRldGFpbD8uaWQpLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBzbmFja2Jhci5zaG93U3VjY2VzcyhzdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEZWxldGVCaW5kaW5nc1N1Y2Nlc3NBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5KSgpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBzbmFja2Jhci5zaG93RXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoXHJcbiAgICAgICAgICAgICAgY3JlYXRlRGVsZXRlQmluZGluZ3NGYWlsdXJlQWN0aW9uKGJpbmRpbmdzUmVwb3NpdG9yeSkoeyBlcnJvciB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZURlbGV0ZUJpbmRpbmdzRWZmZWN0PFQgZXh0ZW5kcyB7IGlkOiBudW1iZXIgfCBzdHJpbmcgfT4oXHJcbiAgYmluZGluZ3NSZXBvc2l0b3J5OiBzdHJpbmcsXHJcbiAgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgZGV0YWlsJDogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPixcclxuICBiaW5kaW5nUGx1cmFsTmFtZTogc3RyaW5nLFxyXG4gIGRlbGV0ZUZ1bmN0aW9uOiAoXHJcbiAgICBiaW5kaW5nSWRzOiBudW1iZXJbXSxcclxuICAgIGRldGFpbElkOiBzdHJpbmcgfCBudW1iZXJcclxuICApID0+IE9ic2VydmFibGU8YW55PixcclxuICBzbmFja2JhcjogYW55LFxyXG4gIHRyYW5zbGF0ZVNlcnZpY2U6IGFueVxyXG4pIHtcclxuICByZXR1cm4gY3JlYXRlRWZmZWN0KCgpID0+XHJcbiAgICBhY3Rpb25zJC5waXBlKFxyXG4gICAgICBvZlR5cGUoY3JlYXRlRGVsZXRlQmluZGluZ3NBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5KSksXHJcbiAgICAgIHdpdGhMYXRlc3RGcm9tKGRldGFpbCQpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt7IGJpbmRpbmdJZHMgfSwgZGV0YWlsXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQbHVyYWxOYW1lID1cclxuICAgICAgICAgIHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChiaW5kaW5nUGx1cmFsTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgJHt0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXHJcbiAgICAgICAgICAnQklORElOR1NfRUZGRUNUUy5TVUNDRVNTX0RFTEVURSdcclxuICAgICAgICApfSAke3RyYW5zbGF0ZWRQbHVyYWxOYW1lfSFgO1xyXG4gICAgICAgIGNvbnN0IGZhaWx1cmVNZXNzYWdlID0gYCR7dHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ0JJTkRJTkdTX0VGRkVDVFMuRkFJTFVSRV9ERUxFVEUnXHJcbiAgICAgICAgKX0gJHt0cmFuc2xhdGVkUGx1cmFsTmFtZX0hYDtcclxuXHJcbiAgICAgICAgaWYgKCFkZXRhaWw/LmlkKSB7XHJcbiAgICAgICAgICBzbmFja2Jhci5zaG93RXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgICAgICBjcmVhdGVEZWxldGVCaW5kaW5nc0ZhaWx1cmVBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5KSh7XHJcbiAgICAgICAgICAgICAgZXJyb3I6IGZhaWx1cmVNZXNzYWdlLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkZWxldGVGdW5jdGlvbihiaW5kaW5nSWRzLCBkZXRhaWwuaWQpLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBzbmFja2Jhci5zaG93U3VjY2VzcyhzdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEZWxldGVCaW5kaW5nc1N1Y2Nlc3NBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5KSgpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBzbmFja2Jhci5zaG93RXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoXHJcbiAgICAgICAgICAgICAgY3JlYXRlRGVsZXRlQmluZGluZ3NGYWlsdXJlQWN0aW9uKGJpbmRpbmdzUmVwb3NpdG9yeSkoeyBlcnJvciB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdNb2RpZmllZFN1Y2Nlc3NFZmZlY3QoXHJcbiAgYmluZGluZ3NSZXBvc2l0b3J5OiBzdHJpbmcsXHJcbiAgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgdGFibGVTZXJ2aWNlOiBhbnlcclxuKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUVmZmVjdChcclxuICAgICgpID0+XHJcbiAgICAgIGFjdGlvbnMkLnBpcGUoXHJcbiAgICAgICAgb2ZUeXBlKFxyXG4gICAgICAgICAgY3JlYXRlQWRkQmluZGluZ3NTdWNjZXNzQWN0aW9uKGJpbmRpbmdzUmVwb3NpdG9yeSksXHJcbiAgICAgICAgICBjcmVhdGVFZGl0QmluZGluZ1N1Y2Nlc3NBY3Rpb24oYmluZGluZ3NSZXBvc2l0b3J5KSxcclxuICAgICAgICAgIGNyZWF0ZURlbGV0ZUJpbmRpbmdzU3VjY2Vzc0FjdGlvbihiaW5kaW5nc1JlcG9zaXRvcnkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGFibGVTZXJ2aWNlLmZvcmNlUmVsb2FkKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgIHsgZGlzcGF0Y2g6IGZhbHNlIH1cclxuICApO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,47 @@
1
+ import { createAction, props } from '@ngrx/store';
2
+ export function createInitDetailAction(detailsRepository) {
3
+ return createAction(`[${detailsRepository} Page] Init`, props());
4
+ }
5
+ export function createInitNewDetailAction(detailsRepository) {
6
+ return createAction(`[${detailsRepository} Page] Init New`);
7
+ }
8
+ export function createLoadDetailSuccessAction(detailsRepository) {
9
+ return createAction(`[${detailsRepository}/API] Load ${detailsRepository} Success`, props());
10
+ }
11
+ export function createLoadDetailFailureAction(detailsRepository) {
12
+ return createAction(`[${detailsRepository}/API] Load ${detailsRepository} Failure`, props());
13
+ }
14
+ export function createUpdateDetailAction(detailsRepository) {
15
+ return createAction(`[${detailsRepository}/API] Update ${detailsRepository}`, props());
16
+ }
17
+ export function createUpdateDetailSetErrorsAction(detailsRepository) {
18
+ return createAction(`[${detailsRepository}/API] Update Validation Errors ${detailsRepository}`, props());
19
+ }
20
+ export function createUpdateFormStateAction(detailsRepository) {
21
+ return createAction(`[${detailsRepository}/API] Update Form State`, props());
22
+ }
23
+ export function createSaveDetailAction(detailsRepository) {
24
+ return createAction(`[${detailsRepository}/API] Save Detail `);
25
+ }
26
+ export function createSaveDetailSuccessAction(detailsRepository) {
27
+ return createAction(`[${detailsRepository}/API] Save Detail Success`, props());
28
+ }
29
+ export function createSaveDetailFailureAction(detailsRepository) {
30
+ return createAction(`[${detailsRepository}/API] Save Detail Failure`, props());
31
+ }
32
+ export function createUpdateSaveDetailAction(detailsRepository) {
33
+ return createAction(`[${detailsRepository}/API] Update Detail `);
34
+ }
35
+ export function createResetStateAction(detailsRepository) {
36
+ return createAction(`[${detailsRepository}/API] Reset State`);
37
+ }
38
+ export function createDeleteDetailAction(detailsRepository) {
39
+ return createAction(`[${detailsRepository}/API] Delete Detail`);
40
+ }
41
+ export function createDeleteDetailSuccessAction(detailsRepository) {
42
+ return createAction(`[${detailsRepository}/API] Delete Detail Success`);
43
+ }
44
+ export function createDeleteDetailFailureAction(detailsRepository) {
45
+ return createAction(`[${detailsRepository}/API] Delete Detail Failure`, props());
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLmFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zdG9yZS9zcmMvbGliL2RldGFpbC1zdGF0ZS9kZXRhaWwuYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsaUJBQXlCO0lBQzlELE9BQU8sWUFBWSxDQUNqQixJQUFJLGlCQUFpQixhQUFhLEVBQ2xDLEtBQUssRUFBcUQsQ0FDM0QsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsaUJBQXlCO0lBQ2pFLE9BQU8sWUFBWSxDQUFDLElBQUksaUJBQWlCLGlCQUFpQixDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FBSSxpQkFBeUI7SUFDeEUsT0FBTyxZQUFZLENBQ2pCLElBQUksaUJBQWlCLGNBQWMsaUJBQWlCLFVBQVUsRUFDOUQsS0FBSyxFQUFlLENBQ3JCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDZCQUE2QixDQUFDLGlCQUF5QjtJQUNyRSxPQUFPLFlBQVksQ0FDakIsSUFBSSxpQkFBaUIsY0FBYyxpQkFBaUIsVUFBVSxFQUM5RCxLQUFLLEVBQWtCLENBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFJLGlCQUF5QjtJQUNuRSxPQUFPLFlBQVksQ0FDakIsSUFBSSxpQkFBaUIsZ0JBQWdCLGlCQUFpQixFQUFFLEVBQ3hELEtBQUssRUFBZSxDQUNyQixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxpQkFBeUI7SUFDekUsT0FBTyxZQUFZLENBQ2pCLElBQUksaUJBQWlCLGtDQUFrQyxpQkFBaUIsRUFBRSxFQUMxRSxLQUFLLEVBQWtCLENBQ3hCLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLGlCQUF5QjtJQUNuRSxPQUFPLFlBQVksQ0FDakIsSUFBSSxpQkFBaUIseUJBQXlCLEVBQzlDLEtBQUssRUFBNEIsQ0FDbEMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsaUJBQXlCO0lBQzlELE9BQU8sWUFBWSxDQUFDLElBQUksaUJBQWlCLG9CQUFvQixDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FBSSxpQkFBeUI7SUFDeEUsT0FBTyxZQUFZLENBQ2pCLElBQUksaUJBQWlCLDJCQUEyQixFQUNoRCxLQUFLLEVBQWUsQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsaUJBQXlCO0lBQ3JFLE9BQU8sWUFBWSxDQUNqQixJQUFJLGlCQUFpQiwyQkFBMkIsRUFDaEQsS0FBSyxFQUFrQixDQUN4QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxpQkFBeUI7SUFDcEUsT0FBTyxZQUFZLENBQUMsSUFBSSxpQkFBaUIsc0JBQXNCLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLGlCQUF5QjtJQUM5RCxPQUFPLFlBQVksQ0FBQyxJQUFJLGlCQUFpQixtQkFBbUIsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsaUJBQXlCO0lBQ2hFLE9BQU8sWUFBWSxDQUFDLElBQUksaUJBQWlCLHFCQUFxQixDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxpQkFBeUI7SUFDdkUsT0FBTyxZQUFZLENBQUMsSUFBSSxpQkFBaUIsNkJBQTZCLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLCtCQUErQixDQUFDLGlCQUF5QjtJQUN2RSxPQUFPLFlBQVksQ0FDakIsSUFBSSxpQkFBaUIsNkJBQTZCLEVBQ2xELEtBQUssRUFBa0IsQ0FDeEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVBY3Rpb24sIHByb3BzIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuL2RldGFpbC5tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluaXREZXRhaWxBY3Rpb24oZGV0YWlsc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7ZGV0YWlsc1JlcG9zaXRvcnl9IFBhZ2VdIEluaXRgLFxyXG4gICAgcHJvcHM8eyBvYmo6IHN0cmluZyB8IG51bGwgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBhbnkgfT4oKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbml0TmV3RGV0YWlsQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKGBbJHtkZXRhaWxzUmVwb3NpdG9yeX0gUGFnZV0gSW5pdCBOZXdgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvYWREZXRhaWxTdWNjZXNzQWN0aW9uPFQ+KGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKFxyXG4gICAgYFske2RldGFpbHNSZXBvc2l0b3J5fS9BUEldIExvYWQgJHtkZXRhaWxzUmVwb3NpdG9yeX0gU3VjY2Vzc2AsXHJcbiAgICBwcm9wczx7IGl0ZW06IFQgfT4oKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2FkRGV0YWlsRmFpbHVyZUFjdGlvbihkZXRhaWxzUmVwb3NpdG9yeTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbihcclxuICAgIGBbJHtkZXRhaWxzUmVwb3NpdG9yeX0vQVBJXSBMb2FkICR7ZGV0YWlsc1JlcG9zaXRvcnl9IEZhaWx1cmVgLFxyXG4gICAgcHJvcHM8eyBlcnJvcjogYW55IH0+KClcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXBkYXRlRGV0YWlsQWN0aW9uPFQ+KGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKFxyXG4gICAgYFske2RldGFpbHNSZXBvc2l0b3J5fS9BUEldIFVwZGF0ZSAke2RldGFpbHNSZXBvc2l0b3J5fWAsXHJcbiAgICBwcm9wczx7IGl0ZW06IFQgfT4oKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGVEZXRhaWxTZXRFcnJvcnNBY3Rpb24oZGV0YWlsc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7ZGV0YWlsc1JlcG9zaXRvcnl9L0FQSV0gVXBkYXRlIFZhbGlkYXRpb24gRXJyb3JzICR7ZGV0YWlsc1JlcG9zaXRvcnl9YCxcclxuICAgIHByb3BzPHsgZXJyb3I6IGFueSB9PigpXHJcbiAgKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXBkYXRlRm9ybVN0YXRlQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKFxyXG4gICAgYFske2RldGFpbHNSZXBvc2l0b3J5fS9BUEldIFVwZGF0ZSBGb3JtIFN0YXRlYCxcclxuICAgIHByb3BzPHsgZm9ybVN0YXRlOiBGb3JtU3RhdGUgfT4oKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTYXZlRGV0YWlsQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKGBbJHtkZXRhaWxzUmVwb3NpdG9yeX0vQVBJXSBTYXZlIERldGFpbCBgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNhdmVEZXRhaWxTdWNjZXNzQWN0aW9uPFQ+KGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKFxyXG4gICAgYFske2RldGFpbHNSZXBvc2l0b3J5fS9BUEldIFNhdmUgRGV0YWlsIFN1Y2Nlc3NgLFxyXG4gICAgcHJvcHM8eyBpdGVtOiBUIH0+KClcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2F2ZURldGFpbEZhaWx1cmVBY3Rpb24oZGV0YWlsc1JlcG9zaXRvcnk6IHN0cmluZykge1xyXG4gIHJldHVybiBjcmVhdGVBY3Rpb24oXHJcbiAgICBgWyR7ZGV0YWlsc1JlcG9zaXRvcnl9L0FQSV0gU2F2ZSBEZXRhaWwgRmFpbHVyZWAsXHJcbiAgICBwcm9wczx7IGVycm9yOiBhbnkgfT4oKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGVTYXZlRGV0YWlsQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKGBbJHtkZXRhaWxzUmVwb3NpdG9yeX0vQVBJXSBVcGRhdGUgRGV0YWlsIGApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzZXRTdGF0ZUFjdGlvbihkZXRhaWxzUmVwb3NpdG9yeTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbihgWyR7ZGV0YWlsc1JlcG9zaXRvcnl9L0FQSV0gUmVzZXQgU3RhdGVgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlbGV0ZURldGFpbEFjdGlvbihkZXRhaWxzUmVwb3NpdG9yeTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbihgWyR7ZGV0YWlsc1JlcG9zaXRvcnl9L0FQSV0gRGVsZXRlIERldGFpbGApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVsZXRlRGV0YWlsU3VjY2Vzc0FjdGlvbihkZXRhaWxzUmVwb3NpdG9yeTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbihgWyR7ZGV0YWlsc1JlcG9zaXRvcnl9L0FQSV0gRGVsZXRlIERldGFpbCBTdWNjZXNzYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWxldGVEZXRhaWxGYWlsdXJlQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gY3JlYXRlQWN0aW9uKFxyXG4gICAgYFske2RldGFpbHNSZXBvc2l0b3J5fS9BUEldIERlbGV0ZSBEZXRhaWwgRmFpbHVyZWAsXHJcbiAgICBwcm9wczx7IGVycm9yOiBhbnkgfT4oKVxyXG4gICk7XHJcbn1cclxuIl19
@@ -0,0 +1,116 @@
1
+ import { createEffect, ofType } from '@ngrx/effects';
2
+ import { catchError, EMPTY, map, of, switchMap, tap, withLatestFrom, } from 'rxjs';
3
+ import { createDeleteDetailAction, createDeleteDetailFailureAction, createDeleteDetailSuccessAction, createInitDetailAction, createInitNewDetailAction, createLoadDetailFailureAction, createLoadDetailSuccessAction, createSaveDetailAction, createSaveDetailFailureAction, createSaveDetailSuccessAction, } from './detail.actions';
4
+ export function createInitDetailEffect(detailsRepository, actions$, config) {
5
+ return createEffect(() => {
6
+ return actions$.pipe(ofType(createInitDetailAction(detailsRepository)), switchMap(({ obj }) => {
7
+ const get$ = (config?.service?.get(obj) ??
8
+ config?.get?.(obj));
9
+ if (!get$)
10
+ return EMPTY;
11
+ return get$?.pipe(map((item) => {
12
+ return createLoadDetailSuccessAction(detailsRepository)({ item });
13
+ }), catchError((error) => {
14
+ if (error.status === 404) {
15
+ config?.snackbar?.showError(config?.notFoundMessage ?? error);
16
+ }
17
+ else {
18
+ config?.snackbar?.showError(config?.errorMessage ?? error);
19
+ }
20
+ console.error('Error', error);
21
+ return of(createLoadDetailFailureAction(detailsRepository)({ error }));
22
+ }));
23
+ }));
24
+ });
25
+ }
26
+ export function createInitNewDetailEffect(detailsRepository, actions$) {
27
+ return createEffect(() => actions$.pipe(ofType(createInitNewDetailAction(detailsRepository)), map(() => {
28
+ return createLoadDetailSuccessAction(detailsRepository)({ item: null });
29
+ })));
30
+ }
31
+ export function createSaveDetailEffect(detailsRepository, actions$, service, config) {
32
+ return createEffect(() => actions$.pipe(ofType(createSaveDetailAction(detailsRepository)), withLatestFrom(config.detail$), switchMap(([, savedItem]) => {
33
+ const isNew = !savedItem?.id;
34
+ const saveAction = isNew
35
+ ? service.post(savedItem)
36
+ : service.put(savedItem.id, savedItem);
37
+ return saveAction.pipe(map((item) => {
38
+ if (isNew && config?.router && config?.redirectPath) {
39
+ const suffix = config?.useItemId ? '/' + item.id : '';
40
+ config.router.navigateByUrl(config.redirectPath + suffix);
41
+ }
42
+ if (isNew && config?.router && config?.navigationMap) {
43
+ const url = constructUrlFromNavigationMap(item, config.navigationMap);
44
+ config.router.navigateByUrl(url);
45
+ }
46
+ return createSaveDetailSuccessAction(detailsRepository)({
47
+ item: item,
48
+ });
49
+ }), catchError((error) => {
50
+ console.error('Error', error);
51
+ return of(createSaveDetailFailureAction(detailsRepository)({ error }));
52
+ }));
53
+ })));
54
+ }
55
+ export function createSaveDetailSuccessEffect(detailsRepository, actions$, config) {
56
+ return createEffect(() => actions$.pipe(ofType(createSaveDetailSuccessAction(detailsRepository)), map((data) => {
57
+ config?.snackbar?.showSuccess(config?.successMessge ?? `Item successfully saved.`);
58
+ return createInitDetailAction(detailsRepository)({ obj: data.item.id });
59
+ })));
60
+ }
61
+ export function createSaveDetailFailureEffect(detailsRepository, actions$, config) {
62
+ return createEffect(() => actions$.pipe(ofType(createSaveDetailFailureAction(detailsRepository)), tap(({ error }) => {
63
+ config?.snackbar?.showError(config.errorMessage ?? `Error saving item. ${error.message}`);
64
+ })), {
65
+ dispatch: false,
66
+ });
67
+ }
68
+ export function createDeleteDetailEffect(detailsRepository, actions$, service, config) {
69
+ return createEffect(() => actions$.pipe(ofType(createDeleteDetailAction(detailsRepository)), withLatestFrom(config.detail$), switchMap(([, savedItem]) => {
70
+ const id = savedItem?.id;
71
+ if (!id) {
72
+ return of(createSaveDetailFailureAction(detailsRepository)({
73
+ error: 'Item has no id',
74
+ }));
75
+ }
76
+ return service.delete(id).pipe(map(() => {
77
+ if (config?.router && config?.redirectPath) {
78
+ config.router.navigateByUrl(`${config.redirectPath}`);
79
+ }
80
+ if (config?.router && config?.navigationMap) {
81
+ const url = constructUrlFromNavigationMap(savedItem, config.navigationMap);
82
+ config.router.navigateByUrl(url);
83
+ }
84
+ return createDeleteDetailSuccessAction(detailsRepository)();
85
+ }), catchError((error) => {
86
+ console.error('Error', error);
87
+ config.snackbar?.showError('Failed to delete item.');
88
+ return of(createDeleteDetailFailureAction(detailsRepository)({ error }));
89
+ }));
90
+ })));
91
+ }
92
+ export function createDeleteDetailSuccessEffect(detailsRepository, actions$, config) {
93
+ return createEffect(() => actions$.pipe(ofType(createDeleteDetailSuccessAction(detailsRepository)), tap(() => {
94
+ config?.snackbar?.showSuccess(config.successMessge ?? `Item successfully deleted.`);
95
+ })), {
96
+ dispatch: false,
97
+ });
98
+ }
99
+ export function createDeleteDetailFailureEffect(detailsRepository, actions$, config) {
100
+ return createEffect(() => actions$.pipe(ofType(createDeleteDetailFailureAction(detailsRepository)), tap(({ error }) => {
101
+ config?.snackbar?.showError(config.errorMessage ?? `Error deleting item. ${error.message}`);
102
+ })), {
103
+ dispatch: false,
104
+ });
105
+ }
106
+ function constructUrlFromNavigationMap(item, navigationMap) {
107
+ let url = '';
108
+ navigationMap.forEach((urlPartValue, suffixPropertyKey) => {
109
+ const suffix = item[suffixPropertyKey];
110
+ if (suffix) {
111
+ url += `${urlPartValue}/${suffix}`;
112
+ }
113
+ });
114
+ return url;
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLmVmZmVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zdG9yZS9zcmMvbGliL2RldGFpbC1zdGF0ZS9kZXRhaWwuZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVcsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLEtBQUssRUFDTCxHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxHQUFHLEVBQ0gsY0FBYyxHQUNmLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsK0JBQStCLEVBQy9CLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsNkJBQTZCLEVBQzdCLDZCQUE2QixFQUM3QixzQkFBc0IsRUFDdEIsNkJBQTZCLEVBQzdCLDZCQUE2QixHQUM5QixNQUFNLGtCQUFrQixDQUFDO0FBb0IxQixNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLGlCQUF5QixFQUN6QixRQUFpQixFQUNqQixNQUErQjtJQUUvQixPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUU7UUFDdkIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUNsQixNQUFNLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUNqRCxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEdBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBVSxDQUFDO2dCQUM3RCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQW9CLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDeEIsT0FBTyxJQUFJLEVBQUUsSUFBSSxDQUNmLEdBQUcsQ0FBQyxDQUFDLElB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QyxJQUFJLENBQ1gsTUFBTSxDQUFDLCtCQUErQixDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFDMUQsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUN6QixNQUFNLENBQUMsWUFBWSxJQUFJLHdCQUF3QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQy9ELENBQUM7SUFDSixDQUFDLENBQUMsQ0FDSCxFQUNIO1FBQ0UsUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQ3BDLElBQU8sRUFDUCxhQUFtQztJQUVuQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLEVBQUU7UUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLEdBQUcsSUFBSSxHQUFHLFlBQVksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xyXG5pbXBvcnQgeyBCYXNlSHR0cFNlcnZpY2UgfSBmcm9tICdAdmVyaXNvZnQvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgY2F0Y2hFcnJvcixcclxuICBFTVBUWSxcclxuICBtYXAsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBvZixcclxuICBzd2l0Y2hNYXAsXHJcbiAgdGFwLFxyXG4gIHdpdGhMYXRlc3RGcm9tLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZURlbGV0ZURldGFpbEFjdGlvbixcclxuICBjcmVhdGVEZWxldGVEZXRhaWxGYWlsdXJlQWN0aW9uLFxyXG4gIGNyZWF0ZURlbGV0ZURldGFpbFN1Y2Nlc3NBY3Rpb24sXHJcbiAgY3JlYXRlSW5pdERldGFpbEFjdGlvbixcclxuICBjcmVhdGVJbml0TmV3RGV0YWlsQWN0aW9uLFxyXG4gIGNyZWF0ZUxvYWREZXRhaWxGYWlsdXJlQWN0aW9uLFxyXG4gIGNyZWF0ZUxvYWREZXRhaWxTdWNjZXNzQWN0aW9uLFxyXG4gIGNyZWF0ZVNhdmVEZXRhaWxBY3Rpb24sXHJcbiAgY3JlYXRlU2F2ZURldGFpbEZhaWx1cmVBY3Rpb24sXHJcbiAgY3JlYXRlU2F2ZURldGFpbFN1Y2Nlc3NBY3Rpb24sXHJcbn0gZnJvbSAnLi9kZXRhaWwuYWN0aW9ucyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUluaXRGb3JtQ29uZmlnPFQ+IHtcclxuICBzZXJ2aWNlPzogQmFzZUh0dHBTZXJ2aWNlPFQ+O1xyXG4gIGdldD86IChvYmo6IGFueSkgPT4gT2JzZXJ2YWJsZTxUPjtcclxuICBzbmFja2Jhcj86IGFueTtcclxuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgbm90Rm91bmRNZXNzYWdlPzogc3RyaW5nO1xyXG4gIHN1Y2Nlc3NNZXNzZ2U/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGV0YWlsRWZmZWN0Q29uZmlnPFQ+IHtcclxuICBkZXRhaWwkOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xyXG4gIHNuYWNrYmFyPzogYW55O1xyXG4gIHJvdXRlcj86IFJvdXRlcjtcclxuICByZWRpcmVjdFBhdGg/OiBzdHJpbmc7XHJcbiAgdXNlSXRlbUlkPzogYm9vbGVhbjtcclxuICBuYXZpZ2F0aW9uTWFwPzogTWFwPGtleW9mIFQsIHN0cmluZz47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbml0RGV0YWlsRWZmZWN0PFQ+KFxyXG4gIGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcsXHJcbiAgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgY29uZmlnOiBDcmVhdGVJbml0Rm9ybUNvbmZpZzxUPlxyXG4pIHtcclxuICByZXR1cm4gY3JlYXRlRWZmZWN0KCgpID0+IHtcclxuICAgIHJldHVybiBhY3Rpb25zJC5waXBlKFxyXG4gICAgICBvZlR5cGUoY3JlYXRlSW5pdERldGFpbEFjdGlvbihkZXRhaWxzUmVwb3NpdG9yeSkpLFxyXG4gICAgICBzd2l0Y2hNYXAoKHsgb2JqIH0pID0+IHtcclxuICAgICAgICBjb25zdCBnZXQkOiBPYnNlcnZhYmxlPGFueT4gPSAoY29uZmlnPy5zZXJ2aWNlPy5nZXQob2JqIGFzIGFueSkgPz9cclxuICAgICAgICAgIGNvbmZpZz8uZ2V0Py4ob2JqKSkgYXMgT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgICAgIGlmICghZ2V0JCkgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIHJldHVybiBnZXQkPy5waXBlKFxyXG4gICAgICAgICAgbWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2FkRGV0YWlsU3VjY2Vzc0FjdGlvbihkZXRhaWxzUmVwb3NpdG9yeSkoeyBpdGVtIH0pO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcclxuICAgICAgICAgICAgICBjb25maWc/LnNuYWNrYmFyPy5zaG93RXJyb3IoY29uZmlnPy5ub3RGb3VuZE1lc3NhZ2UgPz8gZXJyb3IpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbmZpZz8uc25hY2tiYXI/LnNob3dFcnJvcihjb25maWc/LmVycm9yTWVzc2FnZSA/PyBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoXHJcbiAgICAgICAgICAgICAgY3JlYXRlTG9hZERldGFpbEZhaWx1cmVBY3Rpb24oZGV0YWlsc1JlcG9zaXRvcnkpKHsgZXJyb3IgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbml0TmV3RGV0YWlsRWZmZWN0KFxyXG4gIGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcsXHJcbiAgYWN0aW9ucyQ6IEFjdGlvbnNcclxuKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUVmZmVjdCgoKSA9PlxyXG4gICAgYWN0aW9ucyQucGlwZShcclxuICAgICAgb2ZUeXBlKGNyZWF0ZUluaXROZXdEZXRhaWxBY3Rpb24oZGV0YWlsc1JlcG9zaXRvcnkpKSxcclxuICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlTG9hZERldGFpbFN1Y2Nlc3NBY3Rpb24oZGV0YWlsc1JlcG9zaXRvcnkpKHsgaXRlbTogbnVsbCB9KTtcclxuICAgICAgfSlcclxuICAgIClcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2F2ZURldGFpbEVmZmVjdDxcclxuICBUIGV4dGVuZHMgeyBpZDogbnVtYmVyIHwgc3RyaW5nIH0sXHJcbiAgU0VSVklDRSBleHRlbmRzIEJhc2VIdHRwU2VydmljZTxUPlxyXG4+KFxyXG4gIGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcsXHJcbiAgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgc2VydmljZTogU0VSVklDRSxcclxuICBjb25maWc6IERldGFpbEVmZmVjdENvbmZpZzxUPlxyXG4pIHtcclxuICByZXR1cm4gY3JlYXRlRWZmZWN0KCgpID0+XHJcbiAgICBhY3Rpb25zJC5waXBlKFxyXG4gICAgICBvZlR5cGUoY3JlYXRlU2F2ZURldGFpbEFjdGlvbihkZXRhaWxzUmVwb3NpdG9yeSkpLFxyXG4gICAgICB3aXRoTGF0ZXN0RnJvbShjb25maWcuZGV0YWlsJCksXHJcbiAgICAgIHN3aXRjaE1hcCgoWywgc2F2ZWRJdGVtXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzTmV3ID0gIXNhdmVkSXRlbT8uaWQ7XHJcbiAgICAgICAgY29uc3Qgc2F2ZUFjdGlvbiA9IGlzTmV3XHJcbiAgICAgICAgICA/IHNlcnZpY2UucG9zdChzYXZlZEl0ZW0gYXMgVClcclxuICAgICAgICAgIDogc2VydmljZS5wdXQoc2F2ZWRJdGVtLmlkLCBzYXZlZEl0ZW0pO1xyXG4gICAgICAgIHJldHVybiBzYXZlQWN0aW9uLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzTmV3ICYmIGNvbmZpZz8ucm91dGVyICYmIGNvbmZpZz8ucmVkaXJlY3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gY29uZmlnPy51c2VJdGVtSWQgPyAnLycgKyBpdGVtLmlkIDogJyc7XHJcbiAgICAgICAgICAgICAgY29uZmlnLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGNvbmZpZy5yZWRpcmVjdFBhdGggKyBzdWZmaXgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNOZXcgJiYgY29uZmlnPy5yb3V0ZXIgJiYgY29uZmlnPy5uYXZpZ2F0aW9uTWFwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdXJsID0gY29uc3RydWN0VXJsRnJvbU5hdmlnYXRpb25NYXAoaXRlbSwgY29uZmlnLm5hdmlnYXRpb25NYXApXHJcbiAgICAgICAgICAgICAgY29uZmlnLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVTYXZlRGV0YWlsU3VjY2Vzc0FjdGlvbihkZXRhaWxzUmVwb3NpdG9yeSkoe1xyXG4gICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgICAgICAgIGNyZWF0ZVNhdmVEZXRhaWxGYWlsdXJlQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5KSh7IGVycm9yIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNhdmVEZXRhaWxTdWNjZXNzRWZmZWN0KFxyXG4gIGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcsXHJcbiAgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgY29uZmlnPzogQ3JlYXRlSW5pdEZvcm1Db25maWc8dW5rbm93bj5cclxuKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUVmZmVjdChcclxuICAgICgpID0+XHJcbiAgICAgIGFjdGlvbnMkLnBpcGUoXHJcbiAgICAgICAgb2ZUeXBlKGNyZWF0ZVNhdmVEZXRhaWxTdWNjZXNzQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5KSksXHJcbiAgICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbmZpZz8uc25hY2tiYXI/LnNob3dTdWNjZXNzKFxyXG4gICAgICAgICAgICBjb25maWc/LnN1Y2Nlc3NNZXNzZ2UgPz8gYEl0ZW0gc3VjY2Vzc2Z1bGx5IHNhdmVkLmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gY3JlYXRlSW5pdERldGFpbEFjdGlvbihkZXRhaWxzUmVwb3NpdG9yeSkoeyBvYmo6IGRhdGEuaXRlbS5pZCB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNhdmVEZXRhaWxGYWlsdXJlRWZmZWN0KFxyXG4gIGRldGFpbHNSZXBvc2l0b3J5OiBzdHJpbmcsXHJcbiAgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgY29uZmlnPzogQ3JlYXRlSW5pdEZvcm1Db25maWc8dW5rbm93bj5cclxuKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZUVmZmVjdChcclxuICAgICgpID0+XHJcbiAgICAgIGFjdGlvbnMkLnBpcGUoXHJcbiAgICAgICAgb2ZUeXBlKGNyZWF0ZVNhdmVEZXRhaWxGYWlsdXJlQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5KSksXHJcbiAgICAgICAgdGFwKCh7IGVycm9yIH0pID0+IHtcclxuICAgICAgICAgIGNvbmZpZz8uc25hY2tiYXI/LnNob3dFcnJvcihcclxuICAgICAgICAgICAgY29uZmlnLmVycm9yTWVzc2FnZSA/PyBgRXJyb3Igc2F2aW5nIGl0ZW0uICR7ZXJyb3IubWVzc2FnZX1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICB7XHJcbiAgICAgIGRpc3BhdGNoOiBmYWxzZSxcclxuICAgIH1cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVsZXRlRGV0YWlsRWZmZWN0PFxyXG4gIFQgZXh0ZW5kcyB7IGlkOiBudW1iZXIgfCBzdHJpbmcgfSxcclxuICBTRVJWSUNFIGV4dGVuZHMgQmFzZUh0dHBTZXJ2aWNlPFQ+XHJcbj4oXHJcbiAgZGV0YWlsc1JlcG9zaXRvcnk6IHN0cmluZyxcclxuICBhY3Rpb25zJDogQWN0aW9ucyxcclxuICBzZXJ2aWNlOiBTRVJWSUNFLFxyXG4gIGNvbmZpZzogRGV0YWlsRWZmZWN0Q29uZmlnPFQ+LFxyXG4pIHtcclxuICByZXR1cm4gY3JlYXRlRWZmZWN0KCgpID0+XHJcbiAgICBhY3Rpb25zJC5waXBlKFxyXG4gICAgICBvZlR5cGUoY3JlYXRlRGVsZXRlRGV0YWlsQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5KSksXHJcbiAgICAgIHdpdGhMYXRlc3RGcm9tKGNvbmZpZy5kZXRhaWwkKSxcclxuICAgICAgc3dpdGNoTWFwKChbLCBzYXZlZEl0ZW1dKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBzYXZlZEl0ZW0/LmlkO1xyXG4gICAgICAgIGlmICghaWQpIHtcclxuICAgICAgICAgIHJldHVybiBvZihcclxuICAgICAgICAgICAgY3JlYXRlU2F2ZURldGFpbEZhaWx1cmVBY3Rpb24oZGV0YWlsc1JlcG9zaXRvcnkpKHtcclxuICAgICAgICAgICAgICBlcnJvcjogJ0l0ZW0gaGFzIG5vIGlkJyxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VydmljZS5kZWxldGUoaWQpLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5yb3V0ZXIgJiYgY29uZmlnPy5yZWRpcmVjdFBhdGgpIHtcclxuICAgICAgICAgICAgICBjb25maWcucm91dGVyLm5hdmlnYXRlQnlVcmwoYCR7Y29uZmlnLnJlZGlyZWN0UGF0aH1gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmZpZz8ucm91dGVyICYmIGNvbmZpZz8ubmF2aWdhdGlvbk1hcCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHVybCA9IGNvbnN0cnVjdFVybEZyb21OYXZpZ2F0aW9uTWFwKHNhdmVkSXRlbSwgY29uZmlnLm5hdmlnYXRpb25NYXApXHJcbiAgICAgICAgICAgICAgY29uZmlnLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEZWxldGVEZXRhaWxTdWNjZXNzQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5KSgpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgY29uZmlnLnNuYWNrYmFyPy5zaG93RXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgaXRlbS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgICAgICAgIGNyZWF0ZURlbGV0ZURldGFpbEZhaWx1cmVBY3Rpb24oZGV0YWlsc1JlcG9zaXRvcnkpKHsgZXJyb3IgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgIClcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVsZXRlRGV0YWlsU3VjY2Vzc0VmZmVjdChcclxuICBkZXRhaWxzUmVwb3NpdG9yeTogc3RyaW5nLFxyXG4gIGFjdGlvbnMkOiBBY3Rpb25zLFxyXG4gIGNvbmZpZz86IENyZWF0ZUluaXRGb3JtQ29uZmlnPHVua25vd24+XHJcbikge1xyXG4gIHJldHVybiBjcmVhdGVFZmZlY3QoXHJcbiAgICAoKSA9PlxyXG4gICAgICBhY3Rpb25zJC5waXBlKFxyXG4gICAgICAgIG9mVHlwZShjcmVhdGVEZWxldGVEZXRhaWxTdWNjZXNzQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5KSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIGNvbmZpZz8uc25hY2tiYXI/LnNob3dTdWNjZXNzKFxyXG4gICAgICAgICAgICBjb25maWcuc3VjY2Vzc01lc3NnZSA/PyBgSXRlbSBzdWNjZXNzZnVsbHkgZGVsZXRlZC5gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICB7XHJcbiAgICAgIGRpc3BhdGNoOiBmYWxzZSxcclxuICAgIH1cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVsZXRlRGV0YWlsRmFpbHVyZUVmZmVjdChcclxuICBkZXRhaWxzUmVwb3NpdG9yeTogc3RyaW5nLFxyXG4gIGFjdGlvbnMkOiBBY3Rpb25zLFxyXG4gIGNvbmZpZz86IENyZWF0ZUluaXRGb3JtQ29uZmlnPHVua25vd24+XHJcbikge1xyXG4gIHJldHVybiBjcmVhdGVFZmZlY3QoXHJcbiAgICAoKSA9PlxyXG4gICAgICBhY3Rpb25zJC5waXBlKFxyXG4gICAgICAgIG9mVHlwZShjcmVhdGVEZWxldGVEZXRhaWxGYWlsdXJlQWN0aW9uKGRldGFpbHNSZXBvc2l0b3J5KSksXHJcbiAgICAgICAgdGFwKCh7IGVycm9yIH0pID0+IHtcclxuICAgICAgICAgIGNvbmZpZz8uc25hY2tiYXI/LnNob3dFcnJvcihcclxuICAgICAgICAgICAgY29uZmlnLmVycm9yTWVzc2FnZSA/PyBgRXJyb3IgZGVsZXRpbmcgaXRlbS4gJHtlcnJvci5tZXNzYWdlfWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgIHtcclxuICAgICAgZGlzcGF0Y2g6IGZhbHNlLFxyXG4gICAgfVxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnN0cnVjdFVybEZyb21OYXZpZ2F0aW9uTWFwPFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gIGl0ZW06IFQsXHJcbiAgbmF2aWdhdGlvbk1hcDogTWFwPGtleW9mIFQsIHN0cmluZz4pXHJcbiAgOiBzdHJpbmcge1xyXG4gIGxldCB1cmwgPSAnJztcclxuICBuYXZpZ2F0aW9uTWFwLmZvckVhY2goKHVybFBhcnRWYWx1ZSwgc3VmZml4UHJvcGVydHlLZXkpID0+IHtcclxuICAgIGNvbnN0IHN1ZmZpeCA9IGl0ZW1bc3VmZml4UHJvcGVydHlLZXldO1xyXG4gICAgaWYgKHN1ZmZpeCkge1xyXG4gICAgICB1cmwgKz0gYCR7dXJsUGFydFZhbHVlfS8ke3N1ZmZpeH1gO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gdXJsO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ export const INITIAL_SAVE_ITEM_STATE = {
2
+ saveInProgress: false,
3
+ };
4
+ export const INITIAL_CHOSEN_ROW_STATE = {
5
+ rows: []
6
+ };
7
+ export const INITIAL_DETAIL_STATE = {
8
+ loaded: false,
9
+ saveItemState: INITIAL_SAVE_ITEM_STATE,
10
+ backendValidationErrors: [],
11
+ };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL3N0b3JlL3NyYy9saWIvZGV0YWlsLXN0YXRlL2RldGFpbC5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0JBLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFrQjtJQUNwRCxjQUFjLEVBQUUsS0FBSztDQUN0QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXlCO0lBQzVELElBQUksRUFBRSxFQUFFO0NBQ1QsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFxQjtJQUNwRCxNQUFNLEVBQUUsS0FBSztJQUNiLGFBQWEsRUFBRSx1QkFBdUI7SUFDdEMsdUJBQXVCLEVBQUUsRUFBRTtDQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBEZXRhaWxTdGF0ZTxUPiB7XHJcbiAgbG9hZGVkOiBib29sZWFuO1xyXG4gIGl0ZW0/OiBUO1xyXG4gIGZvcm1TdGF0ZT86IEZvcm1TdGF0ZTtcclxuICBlcnJvcj86IHN0cmluZyB8IG51bGw7XHJcbiAgc2F2ZUl0ZW1TdGF0ZTogU2F2ZUl0ZW1TdGF0ZTtcclxuICBiYWNrZW5kVmFsaWRhdGlvbkVycm9yczogQmFja2VuZFZhbGlkYXRpb25FcnJvcltdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tlbmRWYWxpZGF0aW9uRXJyb3Ige1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgcGFyYW1ldGVyczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENob3NlblJvd3NTdGF0ZTxUPiB7IFxyXG4gIHJvd3M6IEFycmF5PFQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVJdGVtU3RhdGUge1xyXG4gIHNhdmVJblByb2dyZXNzOiBib29sZWFuO1xyXG4gIGVycm9yPzogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IElOSVRJQUxfU0FWRV9JVEVNX1NUQVRFOiBTYXZlSXRlbVN0YXRlID0ge1xyXG4gIHNhdmVJblByb2dyZXNzOiBmYWxzZSxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBJTklUSUFMX0NIT1NFTl9ST1dfU1RBVEU6IENob3NlblJvd3NTdGF0ZTxhbnk+ID0ge1xyXG4gIHJvd3M6IFtdXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBJTklUSUFMX0RFVEFJTF9TVEFURTogRGV0YWlsU3RhdGU8YW55PiA9IHtcclxuICBsb2FkZWQ6IGZhbHNlLFxyXG4gIHNhdmVJdGVtU3RhdGU6IElOSVRJQUxfU0FWRV9JVEVNX1NUQVRFLFxyXG4gIGJhY2tlbmRWYWxpZGF0aW9uRXJyb3JzOiBbXSxcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVN0YXRlIHtcclxuICBkaXJ0eTogYm9vbGVhbjtcclxuICB2YWxpZDogYm9vbGVhbjtcclxufVxyXG4iXX0=
@@ -0,0 +1,87 @@
1
+ import { createReducer, on } from '@ngrx/store';
2
+ import { createInitDetailAction, createInitNewDetailAction, createLoadDetailFailureAction, createLoadDetailSuccessAction, createResetStateAction, createSaveDetailAction, createSaveDetailFailureAction, createSaveDetailSuccessAction, createUpdateDetailAction, createUpdateDetailSetErrorsAction, createUpdateFormStateAction, } from './detail.actions';
3
+ import { INITIAL_DETAIL_STATE, INITIAL_SAVE_ITEM_STATE, } from './detail.models';
4
+ export function createDetailReducers(detailRepository, initialState = INITIAL_DETAIL_STATE, ...ons) {
5
+ return createReducer(initialState, on(createInitDetailAction(detailRepository), (state) => {
6
+ return {
7
+ ...state,
8
+ loaded: false,
9
+ error: null,
10
+ };
11
+ }), on(createInitNewDetailAction(detailRepository), (state) => {
12
+ return {
13
+ ...state,
14
+ loaded: false,
15
+ error: null,
16
+ };
17
+ }), on(createLoadDetailSuccessAction(detailRepository), (state, { item }) => {
18
+ return {
19
+ ...state,
20
+ loaded: true,
21
+ item,
22
+ };
23
+ }), on(createLoadDetailFailureAction(detailRepository), (state, { error }) => {
24
+ return {
25
+ ...state,
26
+ loaded: true,
27
+ error,
28
+ };
29
+ }), on(createUpdateDetailAction(detailRepository), (state, { item }) => {
30
+ return {
31
+ ...state,
32
+ item,
33
+ formState: {
34
+ dirty: true,
35
+ valid: state.formState?.valid ?? true,
36
+ },
37
+ };
38
+ }), on(createUpdateDetailSetErrorsAction(detailRepository), (state, { error }) => {
39
+ return {
40
+ ...state,
41
+ backendValidationErrors: error
42
+ };
43
+ }), on(createUpdateFormStateAction(detailRepository), (state, { formState }) => {
44
+ return {
45
+ ...state,
46
+ formState,
47
+ };
48
+ }), on(createSaveDetailSuccessAction(detailRepository), (state) => {
49
+ return {
50
+ ...state,
51
+ formState: {
52
+ dirty: false,
53
+ valid: state.formState?.valid ?? true,
54
+ },
55
+ };
56
+ }), on(createResetStateAction(detailRepository), () => {
57
+ return {
58
+ ...initialState,
59
+ };
60
+ }), on(createSaveDetailFailureAction(detailRepository), (state, { error }) => {
61
+ return {
62
+ ...state,
63
+ backendValidationErrors: error.error
64
+ };
65
+ }), ...ons);
66
+ }
67
+ export function createSaveDetailReducers(detailRepository, initialState = INITIAL_SAVE_ITEM_STATE) {
68
+ return createReducer(initialState, on(createSaveDetailAction(detailRepository), (state) => {
69
+ return {
70
+ ...state,
71
+ saveInProgress: true,
72
+ };
73
+ }), on(createSaveDetailSuccessAction(detailRepository), (state, { item }) => {
74
+ return {
75
+ ...state,
76
+ item,
77
+ saveInProgress: false,
78
+ };
79
+ }), on(createSaveDetailFailureAction(detailRepository), (state, { error }) => {
80
+ return {
81
+ ...state,
82
+ error,
83
+ saveInProgress: false,
84
+ };
85
+ }));
86
+ }
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLnJlZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zdG9yZS9zcmMvbGliL2RldGFpbC1zdGF0ZS9kZXRhaWwucmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLGFBQWEsRUFBRSxFQUFFLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBQzdFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0Qiw2QkFBNkIsRUFDN0IsNkJBQTZCLEVBQzdCLHdCQUF3QixFQUN4QixpQ0FBaUMsRUFDakMsMkJBQTJCLEdBQzVCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUVMLG9CQUFvQixFQUNwQix1QkFBdUIsR0FDeEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLFVBQVUsb0JBQW9CLENBSWxDLGdCQUF3QixFQUN4QixlQUF1QixvQkFBeUMsRUFDaEUsR0FBRyxHQUFxRDtJQUV4RCxPQUFPLGFBQWEsQ0FDbEIsWUFBWSxFQUNaLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDckQsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDO0lBQ0osQ0FBQyxDQUFDLEVBRUYsRUFBRSxDQUFDLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN4RCxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUM7SUFDSixDQUFDLENBQUMsRUFFRixFQUFFLENBQUMsNkJBQTZCLENBQUMsZ0JBQWdCLENB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RUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQ3ZFLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixLQUFLO1lBQ0wsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uQ3JlYXRvciwgY3JlYXRlUmVkdWNlciwgb24sIFJlZHVjZXJUeXBlcyB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHtcclxuICBjcmVhdGVJbml0RGV0YWlsQWN0aW9uLFxyXG4gIGNyZWF0ZUluaXROZXdEZXRhaWxBY3Rpb24sXHJcbiAgY3JlYXRlTG9hZERldGFpbEZhaWx1cmVBY3Rpb24sXHJcbiAgY3JlYXRlTG9hZERldGFpbFN1Y2Nlc3NBY3Rpb24sXHJcbiAgY3JlYXRlUmVzZXRTdGF0ZUFjdGlvbixcclxuICBjcmVhdGVTYXZlRGV0YWlsQWN0aW9uLFxyXG4gIGNyZWF0ZVNhdmVEZXRhaWxGYWlsdXJlQWN0aW9uLFxyXG4gIGNyZWF0ZVNhdmVEZXRhaWxTdWNjZXNzQWN0aW9uLFxyXG4gIGNyZWF0ZVVwZGF0ZURldGFpbEFjdGlvbixcclxuICBjcmVhdGVVcGRhdGVEZXRhaWxTZXRFcnJvcnNBY3Rpb24sXHJcbiAgY3JlYXRlVXBkYXRlRm9ybVN0YXRlQWN0aW9uLFxyXG59IGZyb20gJy4vZGV0YWlsLmFjdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gIERldGFpbFN0YXRlLFxyXG4gIElOSVRJQUxfREVUQUlMX1NUQVRFLFxyXG4gIElOSVRJQUxfU0FWRV9JVEVNX1NUQVRFLFxyXG59IGZyb20gJy4vZGV0YWlsLm1vZGVscyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGV0YWlsUmVkdWNlcnM8XHJcbiAgVCA9IGFueSxcclxuICBUU3RhdGUgZXh0ZW5kcyBEZXRhaWxTdGF0ZTxUPiA9IERldGFpbFN0YXRlPFQ+XHJcbj4oXHJcbiAgZGV0YWlsUmVwb3NpdG9yeTogc3RyaW5nLFxyXG4gIGluaXRpYWxTdGF0ZTogVFN0YXRlID0gSU5JVElBTF9ERVRBSUxfU1RBVEUgYXMgdW5rbm93biBhcyBUU3RhdGUsXHJcbiAgLi4ub25zOiBSZWR1Y2VyVHlwZXM8VFN0YXRlLCByZWFkb25seSBBY3Rpb25DcmVhdG9yW10+W11cclxuKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIoXHJcbiAgICBpbml0aWFsU3RhdGUsXHJcbiAgICBvbihjcmVhdGVJbml0RGV0YWlsQWN0aW9uKGRldGFpbFJlcG9zaXRvcnkpLCAoc3RhdGUpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICBsb2FkZWQ6IGZhbHNlLFxyXG4gICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICB9O1xyXG4gICAgfSksXHJcblxyXG4gICAgb24oY3JlYXRlSW5pdE5ld0RldGFpbEFjdGlvbihkZXRhaWxSZXBvc2l0b3J5KSwgKHN0YXRlKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgbG9hZGVkOiBmYWxzZSxcclxuICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgfTtcclxuICAgIH0pLFxyXG5cclxuICAgIG9uKGNyZWF0ZUxvYWREZXRhaWxTdWNjZXNzQWN0aW9uKGRldGFpbFJlcG9zaXRvcnkpLCAoc3RhdGUsIHsgaXRlbSB9KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgbG9hZGVkOiB0cnVlLFxyXG4gICAgICAgIGl0ZW0sXHJcbiAgICAgIH07XHJcbiAgICB9KSxcclxuXHJcbiAgICBvbihjcmVhdGVMb2FkRGV0YWlsRmFpbHVyZUFjdGlvbihkZXRhaWxSZXBvc2l0b3J5KSwgKHN0YXRlLCB7IGVycm9yIH0pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICBsb2FkZWQ6IHRydWUsXHJcbiAgICAgICAgZXJyb3IsXHJcbiAgICAgIH07XHJcbiAgICB9KSxcclxuXHJcbiAgICBvbihjcmVhdGVVcGRhdGVEZXRhaWxBY3Rpb24oZGV0YWlsUmVwb3NpdG9yeSksIChzdGF0ZSwgeyBpdGVtIH0pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICBpdGVtLFxyXG4gICAgICAgIGZvcm1TdGF0ZToge1xyXG4gICAgICAgICAgZGlydHk6IHRydWUsXHJcbiAgICAgICAgICB2YWxpZDogc3RhdGUuZm9ybVN0YXRlPy52YWxpZCA/PyB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9KSxcclxuXHJcbiAgICBvbihjcmVhdGVVcGRhdGVEZXRhaWxTZXRFcnJvcnNBY3Rpb24oZGV0YWlsUmVwb3NpdG9yeSksIChzdGF0ZSwgeyBlcnJvciB9KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgYmFja2VuZFZhbGlkYXRpb25FcnJvcnM6IGVycm9yXHJcbiAgICAgIH1cclxuICAgIH0pLFxyXG5cclxuICAgIG9uKFxyXG4gICAgICBjcmVhdGVVcGRhdGVGb3JtU3RhdGVBY3Rpb24oZGV0YWlsUmVwb3NpdG9yeSksXHJcbiAgICAgIChzdGF0ZSwgeyBmb3JtU3RhdGUgfSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgIGZvcm1TdGF0ZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICApLFxyXG5cclxuICAgIG9uKGNyZWF0ZVNhdmVEZXRhaWxTdWNjZXNzQWN0aW9uKGRldGFpbFJlcG9zaXRvcnkpLCAoc3RhdGUpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICBmb3JtU3RhdGU6IHtcclxuICAgICAgICAgIGRpcnR5OiBmYWxzZSxcclxuICAgICAgICAgIHZhbGlkOiBzdGF0ZS5mb3JtU3RhdGU/LnZhbGlkID8/IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH0pLFxyXG4gICAgXHJcbiAgICBvbihjcmVhdGVSZXNldFN0YXRlQWN0aW9uKGRldGFpbFJlcG9zaXRvcnkpLCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uKGluaXRpYWxTdGF0ZSBhcyBhbnkpLFxyXG4gICAgICB9O1xyXG4gICAgfSksXHJcbiAgICBcclxuICAgIG9uKGNyZWF0ZVNhdmVEZXRhaWxGYWlsdXJlQWN0aW9uKGRldGFpbFJlcG9zaXRvcnkpLCAoc3RhdGUsIHsgZXJyb3IgfSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgIGJhY2tlbmRWYWxpZGF0aW9uRXJyb3JzOiBlcnJvci5lcnJvclxyXG4gICAgICB9XHJcbiAgICB9KSxcclxuICAgIC4uLm9uc1xyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTYXZlRGV0YWlsUmVkdWNlcnMoXHJcbiAgZGV0YWlsUmVwb3NpdG9yeTogc3RyaW5nLFxyXG4gIGluaXRpYWxTdGF0ZSA9IElOSVRJQUxfU0FWRV9JVEVNX1NUQVRFXHJcbikge1xyXG4gIHJldHVybiBjcmVhdGVSZWR1Y2VyKFxyXG4gICAgaW5pdGlhbFN0YXRlLFxyXG5cclxuICAgIG9uKGNyZWF0ZVNhdmVEZXRhaWxBY3Rpb24oZGV0YWlsUmVwb3NpdG9yeSksIChzdGF0ZSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgIHNhdmVJblByb2dyZXNzOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgfSksXHJcblxyXG4gICAgb24oY3JlYXRlU2F2ZURldGFpbFN1Y2Nlc3NBY3Rpb24oZGV0YWlsUmVwb3NpdG9yeSksIChzdGF0ZSwgeyBpdGVtIH0pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICBpdGVtLFxyXG4gICAgICAgIHNhdmVJblByb2dyZXNzOiBmYWxzZSxcclxuICAgICAgfTtcclxuICAgIH0pLFxyXG5cclxuICAgIG9uKGNyZWF0ZVNhdmVEZXRhaWxGYWlsdXJlQWN0aW9uKGRldGFpbFJlcG9zaXRvcnkpLCAoc3RhdGUsIHsgZXJyb3IgfSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgIGVycm9yLFxyXG4gICAgICAgIHNhdmVJblByb2dyZXNzOiBmYWxzZSxcclxuICAgICAgfTtcclxuICAgIH0pXHJcbiAgKTtcclxufVxyXG4iXX0=