ngx-dynamic-entity 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +14 -0
  2. package/fesm2022/ngx-dynamic-entity.mjs +228 -150
  3. package/fesm2022/ngx-dynamic-entity.mjs.map +1 -1
  4. package/package.json +6 -7
  5. package/types/ngx-dynamic-entity.d.ts +1719 -0
  6. package/esm2022/lib/field-types/array-field.component.mjs +0 -168
  7. package/esm2022/lib/field-types/boolean-field.component.mjs +0 -101
  8. package/esm2022/lib/field-types/checkbox-field.component.mjs +0 -82
  9. package/esm2022/lib/field-types/currency-field.component.mjs +0 -102
  10. package/esm2022/lib/field-types/date-field.component.mjs +0 -91
  11. package/esm2022/lib/field-types/date-time-field.component.mjs +0 -138
  12. package/esm2022/lib/field-types/dropdown-field.component.mjs +0 -176
  13. package/esm2022/lib/field-types/email-field.component.mjs +0 -102
  14. package/esm2022/lib/field-types/entity-ref-field.component.mjs +0 -195
  15. package/esm2022/lib/field-types/field-component.contract.mjs +0 -2
  16. package/esm2022/lib/field-types/file-field.component.mjs +0 -157
  17. package/esm2022/lib/field-types/group-field.component.mjs +0 -89
  18. package/esm2022/lib/field-types/image-field.component.mjs +0 -169
  19. package/esm2022/lib/field-types/month-year-field.component.mjs +0 -152
  20. package/esm2022/lib/field-types/multi-select-field.component.mjs +0 -146
  21. package/esm2022/lib/field-types/number-field.component.mjs +0 -112
  22. package/esm2022/lib/field-types/password-field.component.mjs +0 -110
  23. package/esm2022/lib/field-types/radio-field.component.mjs +0 -153
  24. package/esm2022/lib/field-types/text-field.component.mjs +0 -121
  25. package/esm2022/lib/field-types/textarea-field.component.mjs +0 -85
  26. package/esm2022/lib/field-types/time-field.component.mjs +0 -96
  27. package/esm2022/lib/form/dynamic-field/dynamic-field.component.mjs +0 -152
  28. package/esm2022/lib/form/dynamic-form.component.mjs +0 -899
  29. package/esm2022/lib/form/dynamic-record-form.component.mjs +0 -531
  30. package/esm2022/lib/providers/provide-field-types.mjs +0 -75
  31. package/esm2022/lib/providers/provide-ngx-dynamic-entity.mjs +0 -27
  32. package/esm2022/lib/services/cascade-data.service.mjs +0 -129
  33. package/esm2022/lib/services/config-source.service.mjs +0 -67
  34. package/esm2022/lib/services/entity-ref-cache.mjs +0 -20
  35. package/esm2022/lib/services/entity-ref-registry.service.mjs +0 -31
  36. package/esm2022/lib/services/entity-ref-selection.service.mjs +0 -27
  37. package/esm2022/lib/services/entity-reference.service.mjs +0 -168
  38. package/esm2022/lib/services/field-registry.service.mjs +0 -55
  39. package/esm2022/lib/services/file-upload.service.mjs +0 -89
  40. package/esm2022/lib/services/hook-registry.service.mjs +0 -26
  41. package/esm2022/lib/services/lookup-registry.service.mjs +0 -246
  42. package/esm2022/lib/services/rbac.service.mjs +0 -46
  43. package/esm2022/lib/services/rules-evaluation.service.mjs +0 -27
  44. package/esm2022/lib/services/validation-messages.service.mjs +0 -56
  45. package/esm2022/lib/services/validator-registry.service.mjs +0 -99
  46. package/esm2022/lib/tokens/injection-tokens.mjs +0 -126
  47. package/esm2022/ngx-dynamic-entity.mjs +0 -5
  48. package/esm2022/public-api.mjs +0 -58
  49. package/index.d.ts +0 -5
  50. package/lib/field-types/array-field.component.d.ts +0 -28
  51. package/lib/field-types/boolean-field.component.d.ts +0 -18
  52. package/lib/field-types/checkbox-field.component.d.ts +0 -13
  53. package/lib/field-types/currency-field.component.d.ts +0 -17
  54. package/lib/field-types/date-field.component.d.ts +0 -15
  55. package/lib/field-types/date-time-field.component.d.ts +0 -30
  56. package/lib/field-types/dropdown-field.component.d.ts +0 -34
  57. package/lib/field-types/email-field.component.d.ts +0 -15
  58. package/lib/field-types/entity-ref-field.component.d.ts +0 -49
  59. package/lib/field-types/field-component.contract.d.ts +0 -49
  60. package/lib/field-types/file-field.component.d.ts +0 -25
  61. package/lib/field-types/group-field.component.d.ts +0 -17
  62. package/lib/field-types/image-field.component.d.ts +0 -30
  63. package/lib/field-types/month-year-field.component.d.ts +0 -28
  64. package/lib/field-types/multi-select-field.component.d.ts +0 -27
  65. package/lib/field-types/number-field.component.d.ts +0 -16
  66. package/lib/field-types/password-field.component.d.ts +0 -17
  67. package/lib/field-types/radio-field.component.d.ts +0 -33
  68. package/lib/field-types/text-field.component.d.ts +0 -23
  69. package/lib/field-types/textarea-field.component.d.ts +0 -14
  70. package/lib/field-types/time-field.component.d.ts +0 -27
  71. package/lib/form/dynamic-field/dynamic-field.component.d.ts +0 -78
  72. package/lib/form/dynamic-form.component.d.ts +0 -293
  73. package/lib/form/dynamic-record-form.component.d.ts +0 -199
  74. package/lib/providers/provide-field-types.d.ts +0 -24
  75. package/lib/providers/provide-ngx-dynamic-entity.d.ts +0 -56
  76. package/lib/services/cascade-data.service.d.ts +0 -45
  77. package/lib/services/config-source.service.d.ts +0 -14
  78. package/lib/services/entity-ref-cache.d.ts +0 -27
  79. package/lib/services/entity-ref-registry.service.d.ts +0 -21
  80. package/lib/services/entity-ref-selection.service.d.ts +0 -24
  81. package/lib/services/entity-reference.service.d.ts +0 -49
  82. package/lib/services/field-registry.service.d.ts +0 -32
  83. package/lib/services/file-upload.service.d.ts +0 -27
  84. package/lib/services/hook-registry.service.d.ts +0 -12
  85. package/lib/services/lookup-registry.service.d.ts +0 -94
  86. package/lib/services/rbac.service.d.ts +0 -27
  87. package/lib/services/rules-evaluation.service.d.ts +0 -17
  88. package/lib/services/validation-messages.service.d.ts +0 -43
  89. package/lib/services/validator-registry.service.d.ts +0 -32
  90. package/lib/tokens/injection-tokens.d.ts +0 -134
  91. package/public-api.d.ts +0 -42
@@ -1,75 +0,0 @@
1
- import { makeEnvironmentProviders } from '@angular/core';
2
- import { FIELD_TYPE_SETS } from '../tokens/injection-tokens';
3
- import { TextFieldComponent } from '../field-types/text-field.component';
4
- import { TextareaFieldComponent } from '../field-types/textarea-field.component';
5
- import { NumberFieldComponent } from '../field-types/number-field.component';
6
- import { CurrencyFieldComponent } from '../field-types/currency-field.component';
7
- import { EmailFieldComponent } from '../field-types/email-field.component';
8
- import { PasswordFieldComponent } from '../field-types/password-field.component';
9
- import { CheckboxFieldComponent } from '../field-types/checkbox-field.component';
10
- import { BooleanFieldComponent } from '../field-types/boolean-field.component';
11
- import { DateFieldComponent } from '../field-types/date-field.component';
12
- import { DateTimeFieldComponent } from '../field-types/date-time-field.component';
13
- import { TimeFieldComponent } from '../field-types/time-field.component';
14
- import { MonthYearFieldComponent } from '../field-types/month-year-field.component';
15
- import { DropdownFieldComponent } from '../field-types/dropdown-field.component';
16
- import { RadioFieldComponent } from '../field-types/radio-field.component';
17
- import { MultiSelectFieldComponent } from '../field-types/multi-select-field.component';
18
- import { EntityRefFieldComponent } from '../field-types/entity-ref-field.component';
19
- import { GroupFieldComponent } from '../field-types/group-field.component';
20
- import { ArrayFieldComponent } from '../field-types/array-field.component';
21
- import { ImageFieldComponent } from '../field-types/image-field.component';
22
- import { FileFieldComponent } from '../field-types/file-field.component';
23
- /**
24
- * Field-type registration — the tree-shaking seam.
25
- *
26
- * `FieldRegistryService` imports no components. Whatever you register here is what gets
27
- * bundled, so an app that only uses text/number/dropdown pays for three components and
28
- * their imports, not nineteen.
29
- *
30
- * ```ts
31
- * // Everything (convenient; bundles all built-ins):
32
- * provideNgxDynamicEntity(), provideBuiltInFieldTypes()
33
- *
34
- * // Only what this app renders:
35
- * provideFieldTypes({ text: TextFieldComponent, number: NumberFieldComponent })
36
- * ```
37
- *
38
- * Both merge into `FIELD_TYPE_REGISTRY`; later registrations win on key collision.
39
- */
40
- /** Map of every built-in field type key → component. Referencing this pulls in all of them. */
41
- export function builtInFieldTypes() {
42
- return {
43
- text: TextFieldComponent,
44
- textarea: TextareaFieldComponent,
45
- number: NumberFieldComponent,
46
- currency: CurrencyFieldComponent,
47
- email: EmailFieldComponent,
48
- password: PasswordFieldComponent,
49
- checkbox: CheckboxFieldComponent,
50
- boolean: BooleanFieldComponent,
51
- date: DateFieldComponent,
52
- datetime: DateTimeFieldComponent,
53
- time: TimeFieldComponent,
54
- monthYear: MonthYearFieldComponent,
55
- dropdown: DropdownFieldComponent,
56
- radio: RadioFieldComponent,
57
- multiSelect: MultiSelectFieldComponent,
58
- 'entity-ref': EntityRefFieldComponent,
59
- group: GroupFieldComponent,
60
- array: ArrayFieldComponent,
61
- image: ImageFieldComponent,
62
- file: FileFieldComponent,
63
- };
64
- }
65
- /** Register a specific set of field types. Only the components you name are bundled. */
66
- export function provideFieldTypes(types) {
67
- return makeEnvironmentProviders([
68
- { provide: FIELD_TYPE_SETS, useValue: types, multi: true },
69
- ]);
70
- }
71
- /** Register all 19 built-in field type keys. Convenience for apps that use most of them. */
72
- export function provideBuiltInFieldTypes() {
73
- return provideFieldTypes(builtInFieldTypes());
74
- }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1maWVsZC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcHJvdmlkZXJzL3Byb3ZpZGUtZmllbGQtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4Qix3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCwrRkFBK0Y7QUFDL0YsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixPQUFPO1FBQ0wsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixRQUFRLEVBQUUsc0JBQXNCO1FBQ2hDLE1BQU0sRUFBRSxvQkFBb0I7UUFDNUIsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxLQUFLLEVBQUUsbUJBQW1CO1FBQzFCLFFBQVEsRUFBRSxzQkFBc0I7UUFDaEMsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxPQUFPLEVBQUUscUJBQXFCO1FBQzlCLElBQUksRUFBRSxrQkFBa0I7UUFDeEIsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLFNBQVMsRUFBRSx1QkFBdUI7UUFDbEMsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxLQUFLLEVBQUUsbUJBQW1CO1FBQzFCLFdBQVcsRUFBRSx5QkFBeUI7UUFDdEMsWUFBWSxFQUFFLHVCQUF1QjtRQUNyQyxLQUFLLEVBQUUsbUJBQW1CO1FBQzFCLEtBQUssRUFBRSxtQkFBbUI7UUFDMUIsS0FBSyxFQUFFLG1CQUFtQjtRQUMxQixJQUFJLEVBQUUsa0JBQWtCO0tBQ3pCLENBQUM7QUFDSixDQUFDO0FBRUQsd0ZBQXdGO0FBQ3hGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFnQztJQUNoRSxPQUFPLHdCQUF3QixDQUFDO1FBQzlCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7S0FDM0QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELDRGQUE0RjtBQUM1RixNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8saUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgVHlwZSwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGSUVMRF9UWVBFX1NFVFMgfSBmcm9tICcuLi90b2tlbnMvaW5qZWN0aW9uLXRva2Vucyc7XG5cbmltcG9ydCB7IFRleHRGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2ZpZWxkLXR5cGVzL3RleHQtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRhcmVhRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy90ZXh0YXJlYS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy9udW1iZXItZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEN1cnJlbmN5RmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy9jdXJyZW5jeS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1haWxGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2ZpZWxkLXR5cGVzL2VtYWlsLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmllbGQtdHlwZXMvcGFzc3dvcmQtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94RmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy9jaGVja2JveC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm9vbGVhbkZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmllbGQtdHlwZXMvYm9vbGVhbi1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmllbGQtdHlwZXMvZGF0ZS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2ZpZWxkLXR5cGVzL2RhdGUtdGltZS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGltZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmllbGQtdHlwZXMvdGltZS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9udGhZZWFyRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy9tb250aC15ZWFyLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wZG93bkZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmllbGQtdHlwZXMvZHJvcGRvd24tZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy9yYWRpby1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2ZpZWxkLXR5cGVzL211bHRpLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW50aXR5UmVmRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy9lbnRpdHktcmVmLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcm91cEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmllbGQtdHlwZXMvZ3JvdXAtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEFycmF5RmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy9hcnJheS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW1hZ2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2ZpZWxkLXR5cGVzL2ltYWdlLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC10eXBlcy9maWxlLWZpZWxkLmNvbXBvbmVudCc7XG5cbi8qKlxuICogRmllbGQtdHlwZSByZWdpc3RyYXRpb24g4oCUIHRoZSB0cmVlLXNoYWtpbmcgc2VhbS5cbiAqXG4gKiBgRmllbGRSZWdpc3RyeVNlcnZpY2VgIGltcG9ydHMgbm8gY29tcG9uZW50cy4gV2hhdGV2ZXIgeW91IHJlZ2lzdGVyIGhlcmUgaXMgd2hhdCBnZXRzXG4gKiBidW5kbGVkLCBzbyBhbiBhcHAgdGhhdCBvbmx5IHVzZXMgdGV4dC9udW1iZXIvZHJvcGRvd24gcGF5cyBmb3IgdGhyZWUgY29tcG9uZW50cyBhbmRcbiAqIHRoZWlyIGltcG9ydHMsIG5vdCBuaW5ldGVlbi5cbiAqXG4gKiBgYGB0c1xuICogLy8gRXZlcnl0aGluZyAoY29udmVuaWVudDsgYnVuZGxlcyBhbGwgYnVpbHQtaW5zKTpcbiAqIHByb3ZpZGVOZ3hEeW5hbWljRW50aXR5KCksIHByb3ZpZGVCdWlsdEluRmllbGRUeXBlcygpXG4gKlxuICogLy8gT25seSB3aGF0IHRoaXMgYXBwIHJlbmRlcnM6XG4gKiBwcm92aWRlRmllbGRUeXBlcyh7IHRleHQ6IFRleHRGaWVsZENvbXBvbmVudCwgbnVtYmVyOiBOdW1iZXJGaWVsZENvbXBvbmVudCB9KVxuICogYGBgXG4gKlxuICogQm90aCBtZXJnZSBpbnRvIGBGSUVMRF9UWVBFX1JFR0lTVFJZYDsgbGF0ZXIgcmVnaXN0cmF0aW9ucyB3aW4gb24ga2V5IGNvbGxpc2lvbi5cbiAqL1xuXG4vKiogTWFwIG9mIGV2ZXJ5IGJ1aWx0LWluIGZpZWxkIHR5cGUga2V5IOKGkiBjb21wb25lbnQuIFJlZmVyZW5jaW5nIHRoaXMgcHVsbHMgaW4gYWxsIG9mIHRoZW0uICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbHRJbkZpZWxkVHlwZXMoKTogUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+PiB7XG4gIHJldHVybiB7XG4gICAgdGV4dDogVGV4dEZpZWxkQ29tcG9uZW50LFxuICAgIHRleHRhcmVhOiBUZXh0YXJlYUZpZWxkQ29tcG9uZW50LFxuICAgIG51bWJlcjogTnVtYmVyRmllbGRDb21wb25lbnQsXG4gICAgY3VycmVuY3k6IEN1cnJlbmN5RmllbGRDb21wb25lbnQsXG4gICAgZW1haWw6IEVtYWlsRmllbGRDb21wb25lbnQsXG4gICAgcGFzc3dvcmQ6IFBhc3N3b3JkRmllbGRDb21wb25lbnQsXG4gICAgY2hlY2tib3g6IENoZWNrYm94RmllbGRDb21wb25lbnQsXG4gICAgYm9vbGVhbjogQm9vbGVhbkZpZWxkQ29tcG9uZW50LFxuICAgIGRhdGU6IERhdGVGaWVsZENvbXBvbmVudCxcbiAgICBkYXRldGltZTogRGF0ZVRpbWVGaWVsZENvbXBvbmVudCxcbiAgICB0aW1lOiBUaW1lRmllbGRDb21wb25lbnQsXG4gICAgbW9udGhZZWFyOiBNb250aFllYXJGaWVsZENvbXBvbmVudCxcbiAgICBkcm9wZG93bjogRHJvcGRvd25GaWVsZENvbXBvbmVudCxcbiAgICByYWRpbzogUmFkaW9GaWVsZENvbXBvbmVudCxcbiAgICBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3RGaWVsZENvbXBvbmVudCxcbiAgICAnZW50aXR5LXJlZic6IEVudGl0eVJlZkZpZWxkQ29tcG9uZW50LFxuICAgIGdyb3VwOiBHcm91cEZpZWxkQ29tcG9uZW50LFxuICAgIGFycmF5OiBBcnJheUZpZWxkQ29tcG9uZW50LFxuICAgIGltYWdlOiBJbWFnZUZpZWxkQ29tcG9uZW50LFxuICAgIGZpbGU6IEZpbGVGaWVsZENvbXBvbmVudCxcbiAgfTtcbn1cblxuLyoqIFJlZ2lzdGVyIGEgc3BlY2lmaWMgc2V0IG9mIGZpZWxkIHR5cGVzLiBPbmx5IHRoZSBjb21wb25lbnRzIHlvdSBuYW1lIGFyZSBidW5kbGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVGaWVsZFR5cGVzKHR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBUeXBlPGFueT4+KTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7IHByb3ZpZGU6IEZJRUxEX1RZUEVfU0VUUywgdXNlVmFsdWU6IHR5cGVzLCBtdWx0aTogdHJ1ZSB9LFxuICBdKTtcbn1cblxuLyoqIFJlZ2lzdGVyIGFsbCAxOSBidWlsdC1pbiBmaWVsZCB0eXBlIGtleXMuIENvbnZlbmllbmNlIGZvciBhcHBzIHRoYXQgdXNlIG1vc3Qgb2YgdGhlbS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQnVpbHRJbkZpZWxkVHlwZXMoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gcHJvdmlkZUZpZWxkVHlwZXMoYnVpbHRJbkZpZWxkVHlwZXMoKSk7XG59XG4iXX0=
@@ -1,27 +0,0 @@
1
- import { makeEnvironmentProviders } from '@angular/core';
2
- import { ENTITY_REF_REGISTRY, FIELD_TYPE_REGISTRY, HOOK_REGISTRY, ASYNC_VALIDATOR_REGISTRY, RECORD_MIGRATIONS, VALIDATION_MESSAGES, LOOKUP_REGISTRY, MASKED_ROLES, VALIDATOR_REGISTRY, } from '../tokens/injection-tokens';
3
- /**
4
- * Provider function for ngx-dynamic-entity.
5
- * All options are optional — consumers provide only what they use (ISP).
6
- *
7
- * Usage in app.config.ts:
8
- * provideNgxDynamicEntity({
9
- * maskedRoles: ['IT_SUPPORT'],
10
- * entityRefs: { clients: () => clientService.getOptions() },
11
- * })
12
- */
13
- export const provideNgxDynamicEntity = (config = {}) => makeEnvironmentProviders([
14
- { provide: MASKED_ROLES, useValue: config.maskedRoles ?? [] },
15
- { provide: FIELD_TYPE_REGISTRY, useValue: new Map(Object.entries(config.fieldTypes ?? {})) },
16
- { provide: ENTITY_REF_REGISTRY, useValue: new Map(Object.entries(config.entityRefs ?? {})) },
17
- { provide: LOOKUP_REGISTRY, useValue: new Map(Object.entries(config.lookups ?? {})) },
18
- { provide: VALIDATOR_REGISTRY, useValue: new Map(Object.entries(config.validators ?? {})) },
19
- {
20
- provide: ASYNC_VALIDATOR_REGISTRY,
21
- useValue: new Map(Object.entries(config.asyncValidators ?? {})),
22
- },
23
- { provide: HOOK_REGISTRY, useValue: new Map(Object.entries(config.hooks ?? {})) },
24
- { provide: RECORD_MIGRATIONS, useValue: config.migrations ?? [] },
25
- { provide: VALIDATION_MESSAGES, useValue: config.validationMessages ?? {} },
26
- ]);
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1uZ3gtZHluYW1pYy1lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Byb3ZpZGVycy9wcm92aWRlLW5neC1keW5hbWljLWVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLHdCQUF3QixFQUFRLE1BQU0sZUFBZSxDQUFDO0FBRXJGLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGFBQWEsRUFFYix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxFQUNaLGtCQUFrQixHQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBNkNwQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFNBQWlDLEVBQUUsRUFBd0IsRUFBRSxDQUNuRyx3QkFBd0IsQ0FBQztJQUN2QixFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFFO0lBQzdELEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM1RixFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDNUYsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNyRixFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDM0Y7UUFDRSxPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7S0FDaEU7SUFDRCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2pGLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRTtJQUNqRSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBRTtDQUM1RSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVJlZmVyZW5jZUxvYWRlciwgTG9va3VwTGlzdFNvdXJjZSwgUmVjb3JkTWlncmF0aW9uIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHtcbiAgRU5USVRZX1JFRl9SRUdJU1RSWSxcbiAgRklFTERfVFlQRV9SRUdJU1RSWSxcbiAgSE9PS19SRUdJU1RSWSxcbiAgdHlwZSBIb29rRm4sXG4gIEFTWU5DX1ZBTElEQVRPUl9SRUdJU1RSWSxcbiAgUkVDT1JEX01JR1JBVElPTlMsXG4gIFZBTElEQVRJT05fTUVTU0FHRVMsXG4gIExPT0tVUF9SRUdJU1RSWSxcbiAgTUFTS0VEX1JPTEVTLFxuICBWQUxJREFUT1JfUkVHSVNUUlksXG59IGZyb20gJy4uL3Rva2Vucy9pbmplY3Rpb24tdG9rZW5zJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3hEeW5hbWljRW50aXR5Q29uZmlnIHtcbiAgLyoqIFJvbGVzIHRoYXQgc2VlIG1hc2tlZCBmaWVsZCB2YWx1ZXMgYXMgWFhYWFhYWFhYICovXG4gIG1hc2tlZFJvbGVzPzogc3RyaW5nW107XG4gIC8qKiBDdXN0b20gZmllbGQgdHlwZSBjb21wb25lbnRzIGtleWVkIGJ5IHR5cGUgc3RyaW5nICovXG4gIGZpZWxkVHlwZXM/OiBSZWNvcmQ8c3RyaW5nLCBUeXBlPGFueT4+O1xuICAvKipcbiAgICogRW50aXR5LXJlZiBvcHRpb24gbG9hZGVycyBrZXllZCBieSBlbnRpdHkga2V5LlxuICAgKiBFYWNoIHJlY2VpdmVzIGB7IHBhcmVudFZhbHVlLCBmaWx0ZXJzLCBsYW5nIH1gIGFuZCBtYXkgcmV0dXJuIGFuIGFycmF5LCBQcm9taXNlLCBvciBPYnNlcnZhYmxlLlxuICAgKi9cbiAgZW50aXR5UmVmcz86IFJlY29yZDxzdHJpbmcsIEVudGl0eVJlZmVyZW5jZUxvYWRlcj47XG4gIC8qKlxuICAgKiBOYW1lZCBtYXN0ZXIgbGlzdHMga2V5ZWQgYnkgbGlzdCBuYW1lLCBmb3IgZmllbGRzIHRoYXQgc2V0IGBsaXN0TmFtZWAuXG4gICAqIEVhY2ggbWF5IGJlIHRoZSB2YWx1ZXMgdGhlbXNlbHZlcyAoYXJyYXkvUHJvbWlzZS9PYnNlcnZhYmxlKSBvciBhIGxvYWRlciBmdW5jdGlvbiDigJQgcHJlZmVyXG4gICAqIGEgbG9hZGVyIGZvciBhbnl0aGluZyBmZXRjaGVkLCBzbyBhbiB1bnVzZWQgbGlzdCBpcyBuZXZlciBsb2FkZWQuXG4gICAqL1xuICBsb29rdXBzPzogUmVjb3JkPHN0cmluZywgTG9va3VwTGlzdFNvdXJjZT47XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWVzc2FnZXMgc2hvd24gdW5kZXIgaW52YWxpZCBmaWVsZHMsIGtleWVkIGJ5IEFuZ3VsYXIgZXJyb3Iga2V5LiBBIHZhbHVlIGlzXG4gICAqIGEgc3RyaW5nLCBvciBhIGZ1bmN0aW9uIHJlY2VpdmluZyBgKGxhbmd1YWdlLCBlcnJvcilgIHdoZW4gaXQgbmVlZHMgdGhlIGVycm9yJ3MgZGV0YWlsLlxuICAgKiBVbmxpc3RlZCBrZXlzIGtlZXAgdGhlaXIgRW5nbGlzaCBkZWZhdWx0LlxuICAgKi9cbiAgdmFsaWRhdGlvbk1lc3NhZ2VzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgKChsYW5ndWFnZTogc3RyaW5nLCBlcnJvcjogYW55KSA9PiBzdHJpbmcpPjtcbiAgLyoqXG4gICAqIEFzeW5jIHZhbGlkYXRvciBmdW5jdGlvbnMga2V5ZWQgYnkgbmFtZSwgZm9yIGNoZWNrcyB0aGF0IG5lZWQgYSBzZXJ2ZXIg4oCUIHVuaXF1ZW5lc3MsXG4gICAqIGF2YWlsYWJpbGl0eSwgYSByZW1vdGUgcnVsZS4gTmFtZSB0aGVtIGZyb20gYSBzY2hlbWEgd2l0aFxuICAgKiBgdmFsaWRhdG9yczogeyBjdXN0b21Bc3luYzogWyd1bmlxdWVFbWFpbCddIH1gLlxuICAgKlxuICAgKiBFYWNoIGlzIGFuIEFuZ3VsYXIgYEFzeW5jVmFsaWRhdG9yRm5gOiBpdCByZWNlaXZlcyB0aGUgY29udHJvbCBhbmQgcmV0dXJucyBhIFByb21pc2Ugb3JcbiAgICogT2JzZXJ2YWJsZSBvZiBgVmFsaWRhdGlvbkVycm9ycyB8IG51bGxgLiBUaGUgY29udHJvbCBpcyBgcGVuZGluZ2Agd2hpbGUgaXQgcnVucywgYW5kIHRoZVxuICAgKiBmb3JtIGNhbm5vdCBiZSBzdWJtaXR0ZWQgdW50aWwgZXZlcnkgcGVuZGluZyBjaGVjayBzZXR0bGVzLlxuICAgKi9cbiAgYXN5bmNWYWxpZGF0b3JzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqIEN1c3RvbSB2YWxpZGF0b3IgZnVuY3Rpb25zIGtleWVkIGJ5IHZhbGlkYXRvciBuYW1lICovXG4gIHZhbGlkYXRvcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKiogSG9vayBmdW5jdGlvbnMga2V5ZWQgYnkgaG9vayBuYW1lICovXG4gIGhvb2tzPzogUmVjb3JkPHN0cmluZywgSG9va0ZuPjtcbiAgLyoqXG4gICAqIE9yZGVyZWQgc3RlcHMgdGhhdCB1cGdyYWRlIGEgc2F2ZWQgcmVjb3JkIHdoZW4gYEVudGl0eUZvcm1Db25maWcudmVyc2lvbmAgbW92ZXMgYWhlYWRcbiAgICogb2YgdGhlIHJlY29yZCdzIGBfY29uZmlnVmVyc2lvbmAuIEFwcGxpZWQgdG8gYGluaXRpYWxEYXRhYCBiZWZvcmUgdGhlIGZvcm0gaXMgcGF0Y2hlZC5cbiAgICovXG4gIG1pZ3JhdGlvbnM/OiBSZWNvcmRNaWdyYXRpb25bXTtcbn1cblxuLyoqXG4gKiBQcm92aWRlciBmdW5jdGlvbiBmb3Igbmd4LWR5bmFtaWMtZW50aXR5LlxuICogQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsIOKAlCBjb25zdW1lcnMgcHJvdmlkZSBvbmx5IHdoYXQgdGhleSB1c2UgKElTUCkuXG4gKlxuICogVXNhZ2UgaW4gYXBwLmNvbmZpZy50czpcbiAqICAgcHJvdmlkZU5neER5bmFtaWNFbnRpdHkoe1xuICogICAgIG1hc2tlZFJvbGVzOiBbJ0lUX1NVUFBPUlQnXSxcbiAqICAgICBlbnRpdHlSZWZzOiB7IGNsaWVudHM6ICgpID0+IGNsaWVudFNlcnZpY2UuZ2V0T3B0aW9ucygpIH0sXG4gKiAgIH0pXG4gKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlTmd4RHluYW1pY0VudGl0eSA9IChjb25maWc6IE5neER5bmFtaWNFbnRpdHlDb25maWcgPSB7fSk6IEVudmlyb25tZW50UHJvdmlkZXJzID0+XG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgeyBwcm92aWRlOiBNQVNLRURfUk9MRVMsIHVzZVZhbHVlOiBjb25maWcubWFza2VkUm9sZXMgPz8gW10gfSxcbiAgICB7IHByb3ZpZGU6IEZJRUxEX1RZUEVfUkVHSVNUUlksIHVzZVZhbHVlOiBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKGNvbmZpZy5maWVsZFR5cGVzID8/IHt9KSkgfSxcbiAgICB7IHByb3ZpZGU6IEVOVElUWV9SRUZfUkVHSVNUUlksIHVzZVZhbHVlOiBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKGNvbmZpZy5lbnRpdHlSZWZzID8/IHt9KSkgfSxcbiAgICB7IHByb3ZpZGU6IExPT0tVUF9SRUdJU1RSWSwgdXNlVmFsdWU6IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoY29uZmlnLmxvb2t1cHMgPz8ge30pKSB9LFxuICAgIHsgcHJvdmlkZTogVkFMSURBVE9SX1JFR0lTVFJZLCB1c2VWYWx1ZTogbmV3IE1hcChPYmplY3QuZW50cmllcyhjb25maWcudmFsaWRhdG9ycyA/PyB7fSkpIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZLFxuICAgICAgdXNlVmFsdWU6IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoY29uZmlnLmFzeW5jVmFsaWRhdG9ycyA/PyB7fSkpLFxuICAgIH0sXG4gICAgeyBwcm92aWRlOiBIT09LX1JFR0lTVFJZLCB1c2VWYWx1ZTogbmV3IE1hcChPYmplY3QuZW50cmllcyhjb25maWcuaG9va3MgPz8ge30pKSB9LFxuICAgIHsgcHJvdmlkZTogUkVDT1JEX01JR1JBVElPTlMsIHVzZVZhbHVlOiBjb25maWcubWlncmF0aW9ucyA/PyBbXSB9LFxuICAgIHsgcHJvdmlkZTogVkFMSURBVElPTl9NRVNTQUdFUywgdXNlVmFsdWU6IGNvbmZpZy52YWxpZGF0aW9uTWVzc2FnZXMgPz8ge30gfSxcbiAgXSk7XG4iXX0=
@@ -1,129 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { applyCascadeFilter } from '@dynamic-entity/core';
3
- import { EntityRefRegistryService } from './entity-ref-registry.service';
4
- import { EntityReferenceService } from './entity-reference.service';
5
- import * as i0 from "@angular/core";
6
- /**
7
- * CascadeDataService — loads entity-reference options and applies parent→child cascades.
8
- *
9
- * Loaders come from the registry only. This service owns the three things a
10
- * field component should not: resolving the loader, coercing whatever it returned
11
- * (array | Promise | Observable) into a Promise, and filtering by the parent's value.
12
- */
13
- export class CascadeDataService {
14
- registry = inject(EntityRefRegistryService);
15
- references = inject(EntityReferenceService);
16
- /** Preload runs by formConfigId, so a second call joins the first rather than re-fetching. */
17
- preloads = new Map();
18
- /** Registry key for a field: explicit `linkedEntityKey`, else the field id. */
19
- entityKeyFor(field) {
20
- return field.entityReference?.linkedEntityKey ?? field.id;
21
- }
22
- /** Whether a loader is registered for this field. */
23
- canLoad(field) {
24
- return this.registry.has(this.entityKeyFor(field));
25
- }
26
- /**
27
- * Load the options for a field, cascade-filtered against `parentValue`.
28
- * Returns `[]` when no loader is registered, or when a cascade child has no parent value yet.
29
- */
30
- async load(field, ctx = {}) {
31
- const cfg = field.entityReference;
32
- if (!this.canLoad(field))
33
- return [];
34
- // A cascade child with no parent selection must offer nothing.
35
- const hasParentValue = ctx.parentValue !== null && ctx.parentValue !== undefined && ctx.parentValue !== '';
36
- if (cfg?.parentField && !hasParentValue)
37
- return [];
38
- const lang = ctx.lang ?? 'en';
39
- // When the cascade can be resolved locally (`lookupFilter`/`lookupPath`), fetch the
40
- // unfiltered set once and filter per parent below — switching parent then costs nothing.
41
- // Otherwise the loader is the only thing that can narrow the list, so `parentValue` is
42
- // passed through and becomes part of the cache identity (one entry per parent).
43
- const filtersLocally = !!(cfg?.lookupFilter || cfg?.lookupPath);
44
- const options = await this.references.load(this.entityKeyFor(field), {
45
- ...ctx,
46
- parentValue: filtersLocally ? undefined : ctx.parentValue,
47
- filters: { ...(cfg?.filters ?? {}), ...(ctx.filters ?? {}) },
48
- displayFields: cfg?.displayFields,
49
- lang,
50
- });
51
- return applyCascadeFilter(options, ctx.parentValue, cfg, lang);
52
- }
53
- // ─── Preload ────────────────────────────────────────────────────────────────
54
- /**
55
- * Warm the cache for every entity a config's cascades depend on, so changing a parent
56
- * resolves from memory instead of a round-trip.
57
- *
58
- * Idempotent per `formConfigId`: calling it again returns the in-flight or completed run
59
- * rather than re-fetching.
60
- */
61
- initializeCascadeData(formConfigId, config, lang = 'en') {
62
- const existing = this.preloads.get(formConfigId);
63
- if (existing)
64
- return existing;
65
- const fields = this.cascadeFields(config);
66
- const run = Promise.all(fields.map(field => this.references.load(this.entityKeyFor(field), {
67
- filters: field.entityReference?.filters,
68
- displayFields: field.entityReference?.displayFields,
69
- lang,
70
- }))).then(() => undefined);
71
- this.preloads.set(formConfigId, run);
72
- return run;
73
- }
74
- /** Resolves true once `initializeCascadeData` for this config has finished. */
75
- async waitForData(formConfigId) {
76
- const run = this.preloads.get(formConfigId);
77
- if (!run)
78
- return false;
79
- await run;
80
- return true;
81
- }
82
- /**
83
- * Child options for a parent selection, from cache only — no load is triggered.
84
- * Returns `[]` when the entity has not been preloaded.
85
- */
86
- getCachedChildOptions(field, parentValue, lang = 'en') {
87
- const cfg = field.entityReference;
88
- const cached = this.references.peek(this.entityKeyFor(field), {
89
- filters: cfg?.filters,
90
- displayFields: cfg?.displayFields,
91
- lang,
92
- });
93
- if (!cached)
94
- return [];
95
- return applyCascadeFilter(cached, parentValue, cfg, lang);
96
- }
97
- /** Forget the preload for one config. The option cache itself is untouched. */
98
- clearCache(formConfigId) {
99
- this.preloads.delete(formConfigId);
100
- }
101
- /** Every entity-ref field in the config that participates in a cascade. */
102
- cascadeFields(config) {
103
- const found = [];
104
- const walkFields = (fields) => {
105
- for (const field of fields ?? []) {
106
- const cfg = field.entityReference;
107
- if (cfg?.enabled && (cfg.parentField || cfg.lookupPath || cfg.lookupFilter)) {
108
- found.push(field);
109
- }
110
- walkFields(field.children);
111
- }
112
- };
113
- const walkTabs = (tabs) => {
114
- for (const tab of tabs ?? []) {
115
- walkFields(tab.fields);
116
- walkTabs(tab.children);
117
- }
118
- };
119
- walkTabs(config?.tabs);
120
- return found;
121
- }
122
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CascadeDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
123
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CascadeDataService, providedIn: 'root' });
124
- }
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CascadeDataService, decorators: [{
126
- type: Injectable,
127
- args: [{ providedIn: 'root' }]
128
- }] });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZS1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2Nhc2NhZGUtZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVwRTs7Ozs7O0dBTUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ1osUUFBUSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVDLFVBQVUsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUU3RCw4RkFBOEY7SUFDN0UsUUFBUSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBRTdELCtFQUErRTtJQUMvRSxZQUFZLENBQUMsS0FBd0I7UUFDbkMsT0FBTyxLQUFLLENBQUMsZUFBZSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxxREFBcUQ7SUFDckQsT0FBTyxDQUFDLEtBQXdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUNSLEtBQXdCLEVBQ3hCLE1BQThCLEVBQUU7UUFFaEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFP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TUFBTSxDQUFDLENBQUM7Z0JBQ3ZCLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3dHQXBJVSxrQkFBa0I7NEdBQWxCLGtCQUFrQixjQURMLE1BQU07OzRGQUNuQixrQkFBa0I7a0JBRDlCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEVudGl0eUZvcm1Db25maWcsXG4gIE5lc3RlZEZpZWxkQ29uZmlnLFxuICBOZXN0ZWRUYWJDb25maWcsXG4gIFJlZmVyZW5jZUxvYWRlckNvbnRleHQsXG4gIFJlZmVyZW5jZU9wdGlvbixcbn0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgYXBwbHlDYXNjYWRlRmlsdGVyIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgRW50aXR5UmVmUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi9lbnRpdHktcmVmLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRW50aXR5UmVmZXJlbmNlU2VydmljZSB9IGZyb20gJy4vZW50aXR5LXJlZmVyZW5jZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBDYXNjYWRlRGF0YVNlcnZpY2Ug4oCUIGxvYWRzIGVudGl0eS1yZWZlcmVuY2Ugb3B0aW9ucyBhbmQgYXBwbGllcyBwYXJlbnTihpJjaGlsZCBjYXNjYWRlcy5cbiAqXG4gKiBMb2FkZXJzIGNvbWUgZnJvbSB0aGUgcmVnaXN0cnkgb25seS4gVGhpcyBzZXJ2aWNlIG93bnMgdGhlIHRocmVlIHRoaW5ncyBhXG4gKiBmaWVsZCBjb21wb25lbnQgc2hvdWxkIG5vdDogcmVzb2x2aW5nIHRoZSBsb2FkZXIsIGNvZXJjaW5nIHdoYXRldmVyIGl0IHJldHVybmVkXG4gKiAoYXJyYXkgfCBQcm9taXNlIHwgT2JzZXJ2YWJsZSkgaW50byBhIFByb21pc2UsIGFuZCBmaWx0ZXJpbmcgYnkgdGhlIHBhcmVudCdzIHZhbHVlLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENhc2NhZGVEYXRhU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoRW50aXR5UmVmUmVnaXN0cnlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWZlcmVuY2VzID0gaW5qZWN0KEVudGl0eVJlZmVyZW5jZVNlcnZpY2UpO1xuXG4gIC8qKiBQcmVsb2FkIHJ1bnMgYnkgZm9ybUNvbmZpZ0lkLCBzbyBhIHNlY29uZCBjYWxsIGpvaW5zIHRoZSBmaXJzdCByYXRoZXIgdGhhbiByZS1mZXRjaGluZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwcmVsb2FkcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4gIC8qKiBSZWdpc3RyeSBrZXkgZm9yIGEgZmllbGQ6IGV4cGxpY2l0IGBsaW5rZWRFbnRpdHlLZXlgLCBlbHNlIHRoZSBmaWVsZCBpZC4gKi9cbiAgZW50aXR5S2V5Rm9yKGZpZWxkOiBOZXN0ZWRGaWVsZENvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpZWxkLmVudGl0eVJlZmVyZW5jZT8ubGlua2VkRW50aXR5S2V5ID8/IGZpZWxkLmlkO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYSBsb2FkZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBmaWVsZC4gKi9cbiAgY2FuTG9hZChmaWVsZDogTmVzdGVkRmllbGRDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXModGhpcy5lbnRpdHlLZXlGb3IoZmllbGQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBvcHRpb25zIGZvciBhIGZpZWxkLCBjYXNjYWRlLWZpbHRlcmVkIGFnYWluc3QgYHBhcmVudFZhbHVlYC5cbiAgICogUmV0dXJucyBgW11gIHdoZW4gbm8gbG9hZGVyIGlzIHJlZ2lzdGVyZWQsIG9yIHdoZW4gYSBjYXNjYWRlIGNoaWxkIGhhcyBubyBwYXJlbnQgdmFsdWUgeWV0LlxuICAgKi9cbiAgYXN5bmMgbG9hZChcbiAgICBmaWVsZDogTmVzdGVkRmllbGRDb25maWcsXG4gICAgY3R4OiBSZWZlcmVuY2VMb2FkZXJDb250ZXh0ID0ge30sXG4gICk6IFByb21pc2U8UmVmZXJlbmNlT3B0aW9uW10+IHtcbiAgICBjb25zdCBjZmcgPSBmaWVsZC5lbnRpdHlSZWZlcmVuY2U7XG4gICAgaWYgKCF0aGlzLmNhbkxvYWQoZmllbGQpKSByZXR1cm4gW107XG5cbiAgICAvLyBBIGNhc2NhZGUgY2hpbGQgd2l0aCBubyBwYXJlbnQgc2VsZWN0aW9uIG11c3Qgb2ZmZXIgbm90aGluZy5cbiAgICBjb25zdCBoYXNQYXJlbnRWYWx1ZSA9XG4gICAgICBjdHgucGFyZW50VmFsdWUgIT09IG51bGwgJiYgY3R4LnBhcmVudFZhbHVlICE9PSB1bmRlZmluZWQgJiYgY3R4LnBhcmVudFZhbHVlICE9PSAnJztcbiAgICBpZiAoY2ZnPy5wYXJlbnRGaWVsZCAmJiAhaGFzUGFyZW50VmFsdWUpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGxhbmcgPSBjdHgubGFuZyA/PyAnZW4nO1xuXG4gICAgLy8gV2hlbiB0aGUgY2FzY2FkZSBjYW4gYmUgcmVzb2x2ZWQgbG9jYWxseSAoYGxvb2t1cEZpbHRlcmAvYGxvb2t1cFBhdGhgKSwgZmV0Y2ggdGhlXG4gICAgLy8gdW5maWx0ZXJlZCBzZXQgb25jZSBhbmQgZmlsdGVyIHBlciBwYXJlbnQgYmVsb3cg4oCUIHN3aXRjaGluZyBwYXJlbnQgdGhlbiBjb3N0cyBub3RoaW5nLlxuICAgIC8vIE90aGVyd2lzZSB0aGUgbG9hZGVyIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2FuIG5hcnJvdyB0aGUgbGlzdCwgc28gYHBhcmVudFZhbHVlYCBpc1xuICAgIC8vIHBhc3NlZCB0aHJvdWdoIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNhY2hlIGlkZW50aXR5IChvbmUgZW50cnkgcGVyIHBhcmVudCkuXG4gICAgY29uc3QgZmlsdGVyc0xvY2FsbHkgPSAhIShjZmc/Lmxvb2t1cEZpbHRlciB8fCBjZmc/Lmxvb2t1cFBhdGgpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMucmVmZXJlbmNlcy5sb2FkKHRoaXMuZW50aXR5S2V5Rm9yKGZpZWxkKSwge1xuICAgICAgLi4uY3R4LFxuICAgICAgcGFyZW50VmFsdWU6IGZpbHRlcnNMb2NhbGx5ID8gdW5kZWZpbmVkIDogY3R4LnBhcmVudFZhbHVlLFxuICAgICAgZmlsdGVyczogeyAuLi4oY2ZnPy5maWx0ZXJzID8/IHt9KSwgLi4uKGN0eC5maWx0ZXJzID8/IHt9KSB9LFxuICAgICAgZGlzcGxheUZpZWxkczogY2ZnPy5kaXNwbGF5RmllbGRzLFxuICAgICAgbGFuZyxcbiAgICB9KTtcblxuICAgIHJldHVybiBhcHBseUNhc2NhZGVGaWx0ZXIob3B0aW9ucywgY3R4LnBhcmVudFZhbHVlLCBjZmcsIGxhbmcpO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSAIFByZWxvYWQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFdhcm0gdGhlIGNhY2hlIGZvciBldmVyeSBlbnRpdHkgYSBjb25maWcncyBjYXNjYWRlcyBkZXBlbmQgb24sIHNvIGNoYW5naW5nIGEgcGFyZW50XG4gICAqIHJlc29sdmVzIGZyb20gbWVtb3J5IGluc3RlYWQgb2YgYSByb3VuZC10cmlwLlxuICAgKlxuICAgKiBJZGVtcG90ZW50IHBlciBgZm9ybUNvbmZpZ0lkYDogY2FsbGluZyBpdCBhZ2FpbiByZXR1cm5zIHRoZSBpbi1mbGlnaHQgb3IgY29tcGxldGVkIHJ1blxuICAgKiByYXRoZXIgdGhhbiByZS1mZXRjaGluZy5cbiAgICovXG4gIGluaXRpYWxpemVDYXNjYWRlRGF0YShmb3JtQ29uZmlnSWQ6IHN0cmluZywgY29uZmlnOiBFbnRpdHlGb3JtQ29uZmlnLCBsYW5nID0gJ2VuJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5wcmVsb2Fkcy5nZXQoZm9ybUNvbmZpZ0lkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuY2FzY2FkZUZpZWxkcyhjb25maWcpO1xuICAgIGNvbnN0IHJ1biA9IFByb21pc2UuYWxsKFxuICAgICAgZmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgICB0aGlzLnJlZmVyZW5jZXMubG9hZCh0aGlzLmVudGl0eUtleUZvcihmaWVsZCksIHtcbiAgICAgICAgICBmaWx0ZXJzOiBmaWVsZC5lbnRpdHlSZWZlcmVuY2U/LmZpbHRlcnMsXG4gICAgICAgICAgZGlzcGxheUZpZWxkczogZmllbGQuZW50aXR5UmVmZXJlbmNlPy5kaXNwbGF5RmllbGRzLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApLnRoZW4oKCkgPT4gdW5kZWZpbmVkKTtcblxuICAgIHRoaXMucHJlbG9hZHMuc2V0KGZvcm1Db25maWdJZCwgcnVuKTtcbiAgICByZXR1cm4gcnVuO1xuICB9XG5cbiAgLyoqIFJlc29sdmVzIHRydWUgb25jZSBgaW5pdGlhbGl6ZUNhc2NhZGVEYXRhYCBmb3IgdGhpcyBjb25maWcgaGFzIGZpbmlzaGVkLiAqL1xuICBhc3luYyB3YWl0Rm9yRGF0YShmb3JtQ29uZmlnSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJ1biA9IHRoaXMucHJlbG9hZHMuZ2V0KGZvcm1Db25maWdJZCk7XG4gICAgaWYgKCFydW4pIHJldHVybiBmYWxzZTtcbiAgICBhd2FpdCBydW47XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hpbGQgb3B0aW9ucyBmb3IgYSBwYXJlbnQgc2VsZWN0aW9uLCBmcm9tIGNhY2hlIG9ubHkg4oCUIG5vIGxvYWQgaXMgdHJpZ2dlcmVkLlxuICAgKiBSZXR1cm5zIGBbXWAgd2hlbiB0aGUgZW50aXR5IGhhcyBub3QgYmVlbiBwcmVsb2FkZWQuXG4gICAqL1xuICBnZXRDYWNoZWRDaGlsZE9wdGlvbnMoXG4gICAgZmllbGQ6IE5lc3RlZEZpZWxkQ29uZmlnLFxuICAgIHBhcmVudFZhbHVlOiB1bmtub3duLFxuICAgIGxhbmcgPSAnZW4nLFxuICApOiBSZWZlcmVuY2VPcHRpb25bXSB7XG4gICAgY29uc3QgY2ZnID0gZmllbGQuZW50aXR5UmVmZXJlbmNlO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMucmVmZXJlbmNlcy5wZWVrKHRoaXMuZW50aXR5S2V5Rm9yKGZpZWxkKSwge1xuICAgICAgZmlsdGVyczogY2ZnPy5maWx0ZXJzLFxuICAgICAgZGlzcGxheUZpZWxkczogY2ZnPy5kaXNwbGF5RmllbGRzLFxuICAgICAgbGFuZyxcbiAgICB9KTtcbiAgICBpZiAoIWNhY2hlZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcHBseUNhc2NhZGVGaWx0ZXIoY2FjaGVkLCBwYXJlbnRWYWx1ZSwgY2ZnLCBsYW5nKTtcbiAgfVxuXG4gIC8qKiBGb3JnZXQgdGhlIHByZWxvYWQgZm9yIG9uZSBjb25maWcuIFRoZSBvcHRpb24gY2FjaGUgaXRzZWxmIGlzIHVudG91Y2hlZC4gKi9cbiAgY2xlYXJDYWNoZShmb3JtQ29uZmlnSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJlbG9hZHMuZGVsZXRlKGZvcm1Db25maWdJZCk7XG4gIH1cblxuICAvKiogRXZlcnkgZW50aXR5LXJlZiBmaWVsZCBpbiB0aGUgY29uZmlnIHRoYXQgcGFydGljaXBhdGVzIGluIGEgY2FzY2FkZS4gKi9cbiAgcHJpdmF0ZSBjYXNjYWRlRmllbGRzKGNvbmZpZzogRW50aXR5Rm9ybUNvbmZpZyk6IE5lc3RlZEZpZWxkQ29uZmlnW10ge1xuICAgIGNvbnN0IGZvdW5kOiBOZXN0ZWRGaWVsZENvbmZpZ1tdID0gW107XG4gICAgY29uc3Qgd2Fsa0ZpZWxkcyA9IChmaWVsZHM6IE5lc3RlZEZpZWxkQ29uZmlnW10gfCB1bmRlZmluZWQpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IGZpZWxkLmVudGl0eVJlZmVyZW5jZTtcbiAgICAgICAgaWYgKGNmZz8uZW5hYmxlZCAmJiAoY2ZnLnBhcmVudEZpZWxkIHx8IGNmZy5sb29rdXBQYXRoIHx8IGNmZy5sb29rdXBGaWx0ZXIpKSB7XG4gICAgICAgICAgZm91bmQucHVzaChmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgd2Fsa0ZpZWxkcyhmaWVsZC5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB3YWxrVGFicyA9ICh0YWJzOiBOZXN0ZWRUYWJDb25maWdbXSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgZm9yIChjb25zdCB0YWIgb2YgdGFicyA/PyBbXSkge1xuICAgICAgICB3YWxrRmllbGRzKHRhYi5maWVsZHMpO1xuICAgICAgICB3YWxrVGFicyh0YWIuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH07XG4gICAgd2Fsa1RhYnMoY29uZmlnPy50YWJzKTtcbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,67 +0,0 @@
1
- import { Injectable, Inject, Optional } from '@angular/core';
2
- import { isObservable, firstValueFrom } from 'rxjs';
3
- import { CONFIG_SOURCE } from '../tokens/injection-tokens';
4
- import * as i0 from "@angular/core";
5
- export class ConfigSourceService {
6
- cache = new Map();
7
- inFlight = new Map();
8
- handler;
9
- constructor(handler) {
10
- this.handler = handler;
11
- }
12
- /** Retrieve an entity config by key, with caching and in-flight deduplication. */
13
- async getConfig(entityKey) {
14
- if (!entityKey || !this.handler)
15
- return undefined;
16
- if (this.cache.has(entityKey))
17
- return this.cache.get(entityKey);
18
- if (this.inFlight.has(entityKey))
19
- return this.inFlight.get(entityKey);
20
- const promise = (async () => {
21
- try {
22
- const raw = this.handler(entityKey);
23
- let resolved;
24
- if (isObservable(raw)) {
25
- resolved = await firstValueFrom(raw);
26
- }
27
- else {
28
- resolved = await Promise.resolve(raw);
29
- }
30
- if (resolved) {
31
- this.cache.set(entityKey, resolved);
32
- }
33
- return resolved;
34
- }
35
- catch (err) {
36
- console.warn(`ConfigSourceService failed to load config for entity "${entityKey}"`, err);
37
- return undefined;
38
- }
39
- finally {
40
- this.inFlight.delete(entityKey);
41
- }
42
- })();
43
- this.inFlight.set(entityKey, promise);
44
- return promise;
45
- }
46
- /** Clear cached configs (e.g. after a config edit in the builder). */
47
- clearCache(entityKey) {
48
- if (entityKey) {
49
- this.cache.delete(entityKey);
50
- }
51
- else {
52
- this.cache.clear();
53
- }
54
- }
55
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigSourceService, deps: [{ token: CONFIG_SOURCE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
56
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigSourceService, providedIn: 'root' });
57
- }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigSourceService, decorators: [{
59
- type: Injectable,
60
- args: [{ providedIn: 'root' }]
61
- }], ctorParameters: () => [{ type: undefined, decorators: [{
62
- type: Optional
63
- }, {
64
- type: Inject,
65
- args: [CONFIG_SOURCE]
66
- }] }] });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXNvdXJjZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9jb25maWctc291cmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQTRCLE1BQU0sNEJBQTRCLENBQUM7O0FBR3JGLE1BQU0sT0FBTyxtQkFBbUI7SUFDYixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFDNUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFpRCxDQUFDO0lBRXBFLE9BQU8sQ0FBdUI7SUFFL0MsWUFBK0MsT0FBYTtRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsa0ZBQWtGO0lBQ2xGLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBaUI7UUFDL0IsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RSxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLFFBQXNDLENBQUM7Z0JBRTNDLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFVLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBVSxDQUFDLENBQUM7Z0JBQy9DLENBQUM7Z0JBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyx5REFBeUQsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3pGLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVMLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLFVBQVUsQ0FBQyxTQUFrQjtRQUMzQixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO3dHQWxEVSxtQkFBbUIsa0JBTUUsYUFBYTs0R0FObEMsbUJBQW1CLGNBRE4sTUFBTTs7NEZBQ25CLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQU9uQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUZvcm1Db25maWcgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDT05GSUdfU09VUkNFLCB0eXBlIENvbmZpZ1NvdXJjZUhhbmRsZXIgfSBmcm9tICcuLi90b2tlbnMvaW5qZWN0aW9uLXRva2Vucyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ29uZmlnU291cmNlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgRW50aXR5Rm9ybUNvbmZpZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEVudGl0eUZvcm1Db25maWcgfCB1bmRlZmluZWQ+PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlcj86IENvbmZpZ1NvdXJjZUhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChDT05GSUdfU09VUkNFKSBoYW5kbGVyPzogYW55KSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIC8qKiBSZXRyaWV2ZSBhbiBlbnRpdHkgY29uZmlnIGJ5IGtleSwgd2l0aCBjYWNoaW5nIGFuZCBpbi1mbGlnaHQgZGVkdXBsaWNhdGlvbi4gKi9cbiAgYXN5bmMgZ2V0Q29uZmlnKGVudGl0eUtleTogc3RyaW5nKTogUHJvbWlzZTxFbnRpdHlGb3JtQ29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFlbnRpdHlLZXkgfHwgIXRoaXMuaGFuZGxlcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5jYWNoZS5oYXMoZW50aXR5S2V5KSkgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGVudGl0eUtleSk7XG4gICAgaWYgKHRoaXMuaW5GbGlnaHQuaGFzKGVudGl0eUtleSkpIHJldHVybiB0aGlzLmluRmxpZ2h0LmdldChlbnRpdHlLZXkpO1xuXG4gICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSB0aGlzLmhhbmRsZXIhKGVudGl0eUtleSk7XG4gICAgICAgIGxldCByZXNvbHZlZDogRW50aXR5Rm9ybUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJhdykpIHtcbiAgICAgICAgICByZXNvbHZlZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJhdyBhcyBhbnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmVkID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHJhdyBhcyBhbnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICAgICAgdGhpcy5jYWNoZS5zZXQoZW50aXR5S2V5LCByZXNvbHZlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ29uZmlnU291cmNlU2VydmljZSBmYWlsZWQgdG8gbG9hZCBjb25maWcgZm9yIGVudGl0eSBcIiR7ZW50aXR5S2V5fVwiYCwgZXJyKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaW5GbGlnaHQuZGVsZXRlKGVudGl0eUtleSk7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIHRoaXMuaW5GbGlnaHQuc2V0KGVudGl0eUtleSwgcHJvbWlzZSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICAvKiogQ2xlYXIgY2FjaGVkIGNvbmZpZ3MgKGUuZy4gYWZ0ZXIgYSBjb25maWcgZWRpdCBpbiB0aGUgYnVpbGRlcikuICovXG4gIGNsZWFyQ2FjaGUoZW50aXR5S2V5Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGVudGl0eUtleSkge1xuICAgICAgdGhpcy5jYWNoZS5kZWxldGUoZW50aXR5S2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,20 +0,0 @@
1
- /** Default in-memory store. Lives as long as the injector that created it. */
2
- export class InMemoryEntityRefCacheStore {
3
- map = new Map();
4
- get(key) {
5
- return this.map.get(key);
6
- }
7
- set(key, value) {
8
- this.map.set(key, value);
9
- }
10
- delete(key) {
11
- this.map.delete(key);
12
- }
13
- keys() {
14
- return [...this.map.keys()];
15
- }
16
- clear() {
17
- this.map.clear();
18
- }
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXJlZi1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZW50aXR5LXJlZi1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsOEVBQThFO0FBQzlFLE1BQU0sT0FBTywyQkFBMkI7SUFDckIsR0FBRyxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO0lBRTVELEdBQUcsQ0FBQyxHQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUF3QjtRQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFXO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlZmVyZW5jZU9wdGlvbiB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcblxuLyoqXG4gKiBCYWNraW5nIHN0b3JlIGZvciBjYWNoZWQgcmVmZXJlbmNlIG9wdGlvbnMuXG4gKlxuICogUGx1Z2dhYmxlIG9uIHB1cnBvc2UuIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24ga2VwdCBpdHMgY2FjaGUgaW4gYSBzZXJ2aWNlIGluc3RhbmNlLFxuICogc28gZXZlcnkgZW50aXR5IGxhYmVsIHdhcyByZS1mZXRjaGVkIG9uIGEgYnJvd3NlciByZWZyZXNoIChpc3N1ZSAjMjIgaW4gdGhlIGFyY2hpdGVjdHVyZVxuICogZG9jKS4gQSBjb25zdW1lciB0aGF0IHdhbnRzIHRoZSBjYWNoZSB0byBzdXJ2aXZlIGEgcmVsb2FkIGNhbiBiYWNrIHRoaXMgd2l0aFxuICogc2Vzc2lvblN0b3JhZ2U7IHRoZSBkZWZhdWx0IGtlZXBzIGl0IGluIG1lbW9yeSwgd2hpY2ggaXMgdGhlIHJpZ2h0IGNhbGwgZm9yIGEgbGlicmFyeVxuICogdGhhdCBtdXN0IG5vdCBzaWxlbnRseSBwZXJzaXN0IGEgdGVuYW50J3MgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlSZWZDYWNoZVN0b3JlIHtcbiAgZ2V0KGtleTogc3RyaW5nKTogUmVmZXJlbmNlT3B0aW9uW10gfCB1bmRlZmluZWQ7XG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFJlZmVyZW5jZU9wdGlvbltdKTogdm9pZDtcbiAgZGVsZXRlKGtleTogc3RyaW5nKTogdm9pZDtcbiAgLyoqIEV2ZXJ5IGtleSBjdXJyZW50bHkgaGVsZCDigJQgdXNlZCBmb3IgcHJlZml4IGludmFsaWRhdGlvbiBvZiBvbmUgZW50aXR5LiAqL1xuICBrZXlzKCk6IHN0cmluZ1tdO1xuICBjbGVhcigpOiB2b2lkO1xufVxuXG4vKiogRGVmYXVsdCBpbi1tZW1vcnkgc3RvcmUuIExpdmVzIGFzIGxvbmcgYXMgdGhlIGluamVjdG9yIHRoYXQgY3JlYXRlZCBpdC4gKi9cbmV4cG9ydCBjbGFzcyBJbk1lbW9yeUVudGl0eVJlZkNhY2hlU3RvcmUgaW1wbGVtZW50cyBFbnRpdHlSZWZDYWNoZVN0b3JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXAgPSBuZXcgTWFwPHN0cmluZywgUmVmZXJlbmNlT3B0aW9uW10+KCk7XG5cbiAgZ2V0KGtleTogc3RyaW5nKTogUmVmZXJlbmNlT3B0aW9uW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFJlZmVyZW5jZU9wdGlvbltdKTogdm9pZCB7XG4gICAgdGhpcy5tYXAuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgZGVsZXRlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gIH1cblxuICBrZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubWFwLmtleXMoKV07XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5jbGVhcigpO1xuICB9XG59XG4iXX0=
@@ -1,31 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { ENTITY_REF_REGISTRY } from '../tokens/injection-tokens';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * EntityRefRegistryService — resolves entity-ref option loader functions.
6
- * Entity-ref options come ONLY from this registry.
7
- * Never pass loaders via @Input() on field components.
8
- *
9
- * Consumers register loaders via provideNgxDynamicEntity({ entityRefs: { clients: () => [...] } }).
10
- * EntityRefFieldComponent injects this service and calls resolve(field.component ?? field.id).
11
- */
12
- export class EntityRefRegistryService {
13
- registry = inject(ENTITY_REF_REGISTRY, { optional: true }) ?? new Map();
14
- /**
15
- * Get the option loader for an entity key.
16
- * @returns The loader, or null if none is registered.
17
- */
18
- resolve(entityKey) {
19
- return this.registry.get(entityKey) ?? null;
20
- }
21
- has(entityKey) {
22
- return this.registry.has(entityKey);
23
- }
24
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EntityRefRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
25
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EntityRefRegistryService, providedIn: 'root' });
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EntityRefRegistryService, decorators: [{
28
- type: Injectable,
29
- args: [{ providedIn: 'root' }]
30
- }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXJlZi1yZWdpc3RyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9lbnRpdHktcmVmLXJlZ2lzdHJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRWpFOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2xCLFFBQVEsR0FDdkIsTUFBTSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFFOUY7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLFNBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzlDLENBQUM7SUFFRCxHQUFHLENBQUMsU0FBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO3dHQWRVLHdCQUF3Qjs0R0FBeEIsd0JBQXdCLGNBRFgsTUFBTTs7NEZBQ25CLHdCQUF3QjtrQkFEcEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgRW50aXR5UmVmZXJlbmNlTG9hZGVyIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgRU5USVRZX1JFRl9SRUdJU1RSWSB9IGZyb20gJy4uL3Rva2Vucy9pbmplY3Rpb24tdG9rZW5zJztcblxuLyoqXG4gKiBFbnRpdHlSZWZSZWdpc3RyeVNlcnZpY2Ug4oCUIHJlc29sdmVzIGVudGl0eS1yZWYgb3B0aW9uIGxvYWRlciBmdW5jdGlvbnMuXG4gKiBFbnRpdHktcmVmIG9wdGlvbnMgY29tZSBPTkxZIGZyb20gdGhpcyByZWdpc3RyeS5cbiAqIE5ldmVyIHBhc3MgbG9hZGVycyB2aWEgQElucHV0KCkgb24gZmllbGQgY29tcG9uZW50cy5cbiAqXG4gKiBDb25zdW1lcnMgcmVnaXN0ZXIgbG9hZGVycyB2aWEgcHJvdmlkZU5neER5bmFtaWNFbnRpdHkoeyBlbnRpdHlSZWZzOiB7IGNsaWVudHM6ICgpID0+IFsuLi5dIH0gfSkuXG4gKiBFbnRpdHlSZWZGaWVsZENvbXBvbmVudCBpbmplY3RzIHRoaXMgc2VydmljZSBhbmQgY2FsbHMgcmVzb2x2ZShmaWVsZC5jb21wb25lbnQgPz8gZmllbGQuaWQpLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEVudGl0eVJlZlJlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPVxuICAgIGluamVjdChFTlRJVFlfUkVGX1JFR0lTVFJZLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlSZWZlcmVuY2VMb2FkZXI+KCk7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3B0aW9uIGxvYWRlciBmb3IgYW4gZW50aXR5IGtleS5cbiAgICogQHJldHVybnMgVGhlIGxvYWRlciwgb3IgbnVsbCBpZiBub25lIGlzIHJlZ2lzdGVyZWQuXG4gICAqL1xuICByZXNvbHZlKGVudGl0eUtleTogc3RyaW5nKTogRW50aXR5UmVmZXJlbmNlTG9hZGVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuZ2V0KGVudGl0eUtleSkgPz8gbnVsbDtcbiAgfVxuXG4gIGhhcyhlbnRpdHlLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmhhcyhlbnRpdHlLZXkpO1xuICB9XG59XG4iXX0=
@@ -1,27 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * EntityRefSelectionService — the channel an entity-ref field uses to publish *which record*
6
- * the user picked, so the owning form can run `autoPatch` against it.
7
- *
8
- * The control value alone is not enough: `autoPatch` copies fields out of the selected
9
- * record, which only the field component has after loading its options.
10
- *
11
- * Provided at `DynamicFormComponent` level so each form instance gets its own channel;
12
- * the `root` fallback keeps standalone field components injectable in isolation.
13
- */
14
- export class EntityRefSelectionService {
15
- subject = new Subject();
16
- selection$ = this.subject.asObservable();
17
- emit(fieldId, option) {
18
- this.subject.next({ fieldId, option });
19
- }
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EntityRefSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
21
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EntityRefSelectionService, providedIn: 'root' });
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EntityRefSelectionService, decorators: [{
24
- type: Injectable,
25
- args: [{ providedIn: 'root' }]
26
- }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXJlZi1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZW50aXR5LXJlZi1zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBUy9COzs7Ozs7Ozs7R0FTRztBQUVILE1BQU0sT0FBTyx5QkFBeUI7SUFDbkIsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFzQixDQUFDO0lBRXBELFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWxELElBQUksQ0FBQyxPQUFlLEVBQUUsTUFBOEI7UUFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO3dHQVBVLHlCQUF5Qjs0R0FBekIseUJBQXlCLGNBRFosTUFBTTs7NEZBQ25CLHlCQUF5QjtrQkFEckMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7IFJlZmVyZW5jZU9wdGlvbiB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlSZWZTZWxlY3Rpb24ge1xuICBmaWVsZElkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY2hvc2VuIG9wdGlvbiwgb3IgYG51bGxgIHdoZW4gdGhlIHNlbGVjdGlvbiB3YXMgY2xlYXJlZC4gKi9cbiAgb3B0aW9uOiBSZWZlcmVuY2VPcHRpb24gfCBudWxsO1xufVxuXG4vKipcbiAqIEVudGl0eVJlZlNlbGVjdGlvblNlcnZpY2Ug4oCUIHRoZSBjaGFubmVsIGFuIGVudGl0eS1yZWYgZmllbGQgdXNlcyB0byBwdWJsaXNoICp3aGljaCByZWNvcmQqXG4gKiB0aGUgdXNlciBwaWNrZWQsIHNvIHRoZSBvd25pbmcgZm9ybSBjYW4gcnVuIGBhdXRvUGF0Y2hgIGFnYWluc3QgaXQuXG4gKlxuICogVGhlIGNvbnRyb2wgdmFsdWUgYWxvbmUgaXMgbm90IGVub3VnaDogYGF1dG9QYXRjaGAgY29waWVzIGZpZWxkcyBvdXQgb2YgdGhlIHNlbGVjdGVkXG4gKiByZWNvcmQsIHdoaWNoIG9ubHkgdGhlIGZpZWxkIGNvbXBvbmVudCBoYXMgYWZ0ZXIgbG9hZGluZyBpdHMgb3B0aW9ucy5cbiAqXG4gKiBQcm92aWRlZCBhdCBgRHluYW1pY0Zvcm1Db21wb25lbnRgIGxldmVsIHNvIGVhY2ggZm9ybSBpbnN0YW5jZSBnZXRzIGl0cyBvd24gY2hhbm5lbDtcbiAqIHRoZSBgcm9vdGAgZmFsbGJhY2sga2VlcHMgc3RhbmRhbG9uZSBmaWVsZCBjb21wb25lbnRzIGluamVjdGFibGUgaW4gaXNvbGF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEVudGl0eVJlZlNlbGVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YmplY3QgPSBuZXcgU3ViamVjdDxFbnRpdHlSZWZTZWxlY3Rpb24+KCk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uJCA9IHRoaXMuc3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBlbWl0KGZpZWxkSWQ6IHN0cmluZywgb3B0aW9uOiBSZWZlcmVuY2VPcHRpb24gfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zdWJqZWN0Lm5leHQoeyBmaWVsZElkLCBvcHRpb24gfSk7XG4gIH1cbn1cbiJdfQ==