@senior-agronegocio/angular-components 1.0.8 → 1.0.10

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 (141) hide show
  1. package/LLM_LIBRARY_GUIDES.md +9 -1
  2. package/README.md +5 -0
  3. package/agro-angular-components.module.d.ts +4 -6
  4. package/esm2022/agro-angular-components.module.mjs +21 -5
  5. package/esm2022/fields/lookups/config/lookup-host-project-config.mjs +10 -0
  6. package/esm2022/fields/lookups/config/lookup-runtime-context.mjs +12 -0
  7. package/esm2022/fields/lookups/core/agro-base-lookup-field.mjs +385 -0
  8. package/esm2022/fields/lookups/core/agro-branch-lookup.mjs +27 -0
  9. package/esm2022/fields/lookups/core/agro-company-lookup.mjs +25 -0
  10. package/esm2022/fields/lookups/core/agro-currency-lookup.mjs +24 -0
  11. package/esm2022/fields/lookups/core/agro-deposit-balance-lookup.mjs +25 -0
  12. package/esm2022/fields/lookups/core/agro-deposit-lookup.mjs +25 -0
  13. package/esm2022/fields/lookups/core/agro-driver-lookup.mjs +25 -0
  14. package/esm2022/fields/lookups/core/agro-e095-pes-lookup.mjs +25 -0
  15. package/esm2022/fields/lookups/core/agro-family-group-lookup.mjs +25 -0
  16. package/esm2022/fields/lookups/core/agro-family-lookup.mjs +25 -0
  17. package/esm2022/fields/lookups/core/agro-harvest-lookup.mjs +25 -0
  18. package/esm2022/fields/lookups/core/agro-increase-product-lookup.mjs +31 -0
  19. package/esm2022/fields/lookups/core/agro-lookup-base.mjs +39 -0
  20. package/esm2022/fields/lookups/core/agro-producer-lookup.mjs +25 -0
  21. package/esm2022/fields/lookups/core/agro-product-lookup.mjs +25 -0
  22. package/esm2022/fields/lookups/core/agro-product-variety-lookup.mjs +25 -0
  23. package/esm2022/fields/lookups/core/agro-romaneo-lookup.mjs +24 -0
  24. package/esm2022/fields/lookups/core/agro-rural-estate-lookup.mjs +25 -0
  25. package/esm2022/fields/lookups/core/agro-ticket-lookup.mjs +25 -0
  26. package/esm2022/fields/lookups/core/index.mjs +21 -0
  27. package/esm2022/fields/lookups/core/lookup-field.handlers.mjs +82 -0
  28. package/esm2022/fields/lookups/core/lookup-field.types.mjs +2 -0
  29. package/esm2022/fields/lookups/index.mjs +5 -0
  30. package/esm2022/fields/lookups/services/agro-lookup-entity.service.mjs +132 -0
  31. package/esm2022/fields/lookups/services/driver/agro-lookup-driver.service.mjs +34 -0
  32. package/esm2022/fields/lookups/services/driver/driver-dto.mjs +2 -0
  33. package/esm2022/fields/lookups/services/e-001-pes/agro-lookup-e001-pes.service.mjs +41 -0
  34. package/esm2022/fields/lookups/services/e-001-pes/e-001-pes-dto.mjs +2 -0
  35. package/esm2022/fields/lookups/services/e-012-fam/agro-lookup-e012-fam.service.mjs +34 -0
  36. package/esm2022/fields/lookups/services/e-012-fam/e-012-fam-dto.mjs +2 -0
  37. package/esm2022/fields/lookups/services/e-031-moe/agro-lookup-e031-moe.service.mjs +41 -0
  38. package/esm2022/fields/lookups/services/e-031-moe/e-031-moe-dto.mjs +2 -0
  39. package/esm2022/fields/lookups/services/e-070-emp/agro-lookup-e070-emp.service.mjs +41 -0
  40. package/esm2022/fields/lookups/services/e-070-emp/e-070-emp-dto.mjs +2 -0
  41. package/esm2022/fields/lookups/services/e-070-fil/agro-lookup-e070-fil.service.mjs +41 -0
  42. package/esm2022/fields/lookups/services/e-070-fil/e-070-fil-dto.mjs +2 -0
  43. package/esm2022/fields/lookups/services/e-075-der/agro-lookup-e075-der.service.mjs +41 -0
  44. package/esm2022/fields/lookups/services/e-075-der/e-075-der-dto.mjs +2 -0
  45. package/esm2022/fields/lookups/services/e-095-pes/agro-lookup-e095-pes.service.mjs +41 -0
  46. package/esm2022/fields/lookups/services/e-095-pes/e-095-pes-dto.mjs +2 -0
  47. package/esm2022/fields/lookups/services/e-113-saf/agro-lookup-e113-saf.service.mjs +41 -0
  48. package/esm2022/fields/lookups/services/e-113-saf/e-113-saf-dto.mjs +2 -0
  49. package/esm2022/fields/lookups/services/e-205-dep/agro-lookup-e205-dep.service.mjs +41 -0
  50. package/esm2022/fields/lookups/services/e-205-dep/e-205-dep-dto.mjs +2 -0
  51. package/esm2022/fields/lookups/services/e-210-dxp/agro-lookup-e210-dxp.service.mjs +41 -0
  52. package/esm2022/fields/lookups/services/e-210-dxp/e-210-dxp-dto.mjs +2 -0
  53. package/esm2022/fields/lookups/services/family-group/agro-lookup-family-group.service.mjs +41 -0
  54. package/esm2022/fields/lookups/services/family-group/family-group-dto.mjs +2 -0
  55. package/esm2022/fields/lookups/services/increase-product/agro-lookup-increase-product.service.mjs +41 -0
  56. package/esm2022/fields/lookups/services/increase-product/increase-product-dto.mjs +2 -0
  57. package/esm2022/fields/lookups/services/index.mjs +18 -0
  58. package/esm2022/fields/lookups/services/product-variety/agro-lookup-product-variety.service.mjs +41 -0
  59. package/esm2022/fields/lookups/services/product-variety/product-variety-dto.mjs +2 -0
  60. package/esm2022/fields/lookups/services/rural-estate/agro-lookup-rural-estate.service.mjs +41 -0
  61. package/esm2022/fields/lookups/services/rural-estate/rural-estate-dto.mjs +2 -0
  62. package/esm2022/fields/lookups/services/ticket/agro-lookup-ticket.service.mjs +34 -0
  63. package/esm2022/fields/lookups/services/ticket/ticket-dto.mjs +2 -0
  64. package/esm2022/fields/lookups/utils/agro-lookup-utils.mjs +303 -0
  65. package/esm2022/fields/lookups/utils/cpf-cnpj-formatter.mjs +23 -0
  66. package/esm2022/fields/lookups/utils/index.mjs +3 -0
  67. package/esm2022/lib-config.token.mjs +3 -0
  68. package/esm2022/public-api.mjs +3 -1
  69. package/esm2022/services/i18n/en-US.mjs +58 -1
  70. package/esm2022/services/i18n/es-CO.mjs +58 -1
  71. package/esm2022/services/i18n/pt-BR.mjs +58 -1
  72. package/fesm2022/senior-agronegocio-angular-components.mjs +2044 -6
  73. package/fesm2022/senior-agronegocio-angular-components.mjs.map +1 -1
  74. package/fields/lookups/config/lookup-host-project-config.d.ts +2 -0
  75. package/fields/lookups/config/lookup-runtime-context.d.ts +3 -0
  76. package/fields/lookups/core/agro-base-lookup-field.d.ts +30 -0
  77. package/fields/lookups/core/agro-branch-lookup.d.ts +7 -0
  78. package/fields/lookups/core/agro-company-lookup.d.ts +7 -0
  79. package/fields/lookups/core/agro-currency-lookup.d.ts +7 -0
  80. package/fields/lookups/core/agro-deposit-balance-lookup.d.ts +7 -0
  81. package/fields/lookups/core/agro-deposit-lookup.d.ts +7 -0
  82. package/fields/lookups/core/agro-driver-lookup.d.ts +7 -0
  83. package/fields/lookups/core/agro-e095-pes-lookup.d.ts +7 -0
  84. package/fields/lookups/core/agro-family-group-lookup.d.ts +7 -0
  85. package/fields/lookups/core/agro-family-lookup.d.ts +7 -0
  86. package/fields/lookups/core/agro-harvest-lookup.d.ts +7 -0
  87. package/fields/lookups/core/agro-increase-product-lookup.d.ts +7 -0
  88. package/fields/lookups/core/agro-lookup-base.d.ts +24 -0
  89. package/fields/lookups/core/agro-producer-lookup.d.ts +7 -0
  90. package/fields/lookups/core/agro-product-lookup.d.ts +7 -0
  91. package/fields/lookups/core/agro-product-variety-lookup.d.ts +7 -0
  92. package/fields/lookups/core/agro-romaneo-lookup.d.ts +7 -0
  93. package/fields/lookups/core/agro-rural-estate-lookup.d.ts +7 -0
  94. package/fields/lookups/core/agro-ticket-lookup.d.ts +7 -0
  95. package/fields/lookups/core/index.d.ts +22 -0
  96. package/fields/lookups/core/lookup-field.handlers.d.ts +12 -0
  97. package/fields/lookups/core/lookup-field.types.d.ts +45 -0
  98. package/fields/lookups/index.d.ts +5 -0
  99. package/fields/lookups/services/agro-lookup-entity.service.d.ts +42 -0
  100. package/fields/lookups/services/driver/agro-lookup-driver.service.d.ts +15 -0
  101. package/fields/lookups/services/driver/driver-dto.d.ts +10 -0
  102. package/fields/lookups/services/e-001-pes/agro-lookup-e001-pes.service.d.ts +16 -0
  103. package/fields/lookups/services/e-001-pes/e-001-pes-dto.d.ts +14 -0
  104. package/fields/lookups/services/e-012-fam/agro-lookup-e012-fam.service.d.ts +15 -0
  105. package/fields/lookups/services/e-012-fam/e-012-fam-dto.d.ts +11 -0
  106. package/fields/lookups/services/e-031-moe/agro-lookup-e031-moe.service.d.ts +16 -0
  107. package/fields/lookups/services/e-031-moe/e-031-moe-dto.d.ts +22 -0
  108. package/fields/lookups/services/e-070-emp/agro-lookup-e070-emp.service.d.ts +16 -0
  109. package/fields/lookups/services/e-070-emp/e-070-emp-dto.d.ts +12 -0
  110. package/fields/lookups/services/e-070-fil/agro-lookup-e070-fil.service.d.ts +16 -0
  111. package/fields/lookups/services/e-070-fil/e-070-fil-dto.d.ts +16 -0
  112. package/fields/lookups/services/e-075-der/agro-lookup-e075-der.service.d.ts +16 -0
  113. package/fields/lookups/services/e-075-der/e-075-der-dto.d.ts +14 -0
  114. package/fields/lookups/services/e-095-pes/agro-lookup-e095-pes.service.d.ts +16 -0
  115. package/fields/lookups/services/e-095-pes/e-095-pes-dto.d.ts +10 -0
  116. package/fields/lookups/services/e-113-saf/agro-lookup-e113-saf.service.d.ts +16 -0
  117. package/fields/lookups/services/e-113-saf/e-113-saf-dto.d.ts +15 -0
  118. package/fields/lookups/services/e-205-dep/agro-lookup-e205-dep.service.d.ts +16 -0
  119. package/fields/lookups/services/e-205-dep/e-205-dep-dto.d.ts +14 -0
  120. package/fields/lookups/services/e-210-dxp/agro-lookup-e210-dxp.service.d.ts +16 -0
  121. package/fields/lookups/services/e-210-dxp/e-210-dxp-dto.d.ts +13 -0
  122. package/fields/lookups/services/family-group/agro-lookup-family-group.service.d.ts +16 -0
  123. package/fields/lookups/services/family-group/family-group-dto.d.ts +14 -0
  124. package/fields/lookups/services/increase-product/agro-lookup-increase-product.service.d.ts +16 -0
  125. package/fields/lookups/services/increase-product/increase-product-dto.d.ts +16 -0
  126. package/fields/lookups/services/index.d.ts +34 -0
  127. package/fields/lookups/services/product-variety/agro-lookup-product-variety.service.d.ts +16 -0
  128. package/fields/lookups/services/product-variety/product-variety-dto.d.ts +14 -0
  129. package/fields/lookups/services/rural-estate/agro-lookup-rural-estate.service.d.ts +16 -0
  130. package/fields/lookups/services/rural-estate/rural-estate-dto.d.ts +28 -0
  131. package/fields/lookups/services/ticket/agro-lookup-ticket.service.d.ts +15 -0
  132. package/fields/lookups/services/ticket/ticket-dto.d.ts +15 -0
  133. package/fields/lookups/utils/agro-lookup-utils.d.ts +37 -0
  134. package/fields/lookups/utils/cpf-cnpj-formatter.d.ts +12 -0
  135. package/fields/lookups/utils/index.d.ts +2 -0
  136. package/lib-config.token.d.ts +6 -0
  137. package/package.json +5 -1
  138. package/public-api.d.ts +2 -0
  139. package/services/i18n/en-US.d.ts +57 -0
  140. package/services/i18n/es-CO.d.ts +57 -0
  141. package/services/i18n/pt-BR.d.ts +57 -0
@@ -6,4 +6,12 @@
6
6
  - Instrucoes gerais para utilitarios de `common`:
7
7
  - [common/COMMON_LLM_INSTRUCTIONS.md](./common/COMMON_LLM_INSTRUCTIONS.md)
8
8
  - Guia dos componentes modais de notas fiscais PJ (`ModalInvoicePj`):
9
- - [components/modal-invoice-pj/README.md](./components/modal-invoice-pj/README.md)
9
+ - [components/modal-invoice-pj/README.md](./components/modal-invoice-pj/README.md)
10
+ - Guia de integracao dos Lookup Fields reutilizaveis:
11
+ - [fields/lookups/README.md](./fields/lookups/README.md)
12
+ - Relatorio de gap entre lookups do agro-origination e da biblioteca:
13
+ - [fields/lookups/ORIGINATION_GAP_ANALYSIS.md](./fields/lookups/ORIGINATION_GAP_ANALYSIS.md)
14
+ - Manual para criacao de Lookup Fields customizados no projeto host:
15
+ - [fields/lookups/CUSTOM_LOOKUP_FIELDS_MANUAL.md](./fields/lookups/CUSTOM_LOOKUP_FIELDS_MANUAL.md)
16
+ - Instruction para LLMs criarem lookups customizados com classes base da biblioteca:
17
+ - [../../.github/instructions/custom-lookup-fields.instructions.md](../../.github/instructions/custom-lookup-fields.instructions.md)
package/README.md CHANGED
@@ -20,6 +20,11 @@ After building your library with `ng build angular-components`, go to the dist f
20
20
 
21
21
  Run `ng test angular-components` to execute the unit tests via [Karma](https://karma-runner.github.io).
22
22
 
23
+ ## Guides
24
+
25
+ - [Lookup Fields integration guide](./fields/lookups/README.md)
26
+ - [Library guides index](./LLM_LIBRARY_GUIDES.md)
27
+
23
28
  ## Further help
24
29
 
25
30
  To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -1,10 +1,8 @@
1
- import { ModuleWithProviders, InjectionToken } from "@angular/core";
1
+ import { ModuleWithProviders } from "@angular/core";
2
+ import { HostProjectConfigs } from "./lib-config.token";
2
3
  import * as i0 from "@angular/core";
3
- export interface HostProjectConfigs {
4
- domain: string;
5
- service: string;
6
- }
7
- export declare const LIB_CONFIG: InjectionToken<HostProjectConfigs>;
4
+ export type { HostProjectConfigs } from "./lib-config.token";
5
+ export { LIB_CONFIG } from "./lib-config.token";
8
6
  export declare class AgroAngularComponentsModule {
9
7
  static forRoot(config: HostProjectConfigs): ModuleWithProviders<AgroAngularComponentsModule>;
10
8
  static ɵfac: i0.ɵɵFactoryDeclaration<AgroAngularComponentsModule, never>;
@@ -1,6 +1,8 @@
1
- import { NgModule, InjectionToken } from "@angular/core";
1
+ import { ENVIRONMENT_INITIALIZER, Injector, NgModule, inject } from "@angular/core";
2
+ import { LIB_CONFIG } from "./lib-config.token";
3
+ import { registerLookupRuntimeInjector } from "./fields/lookups/config/lookup-runtime-context";
2
4
  import * as i0 from "@angular/core";
3
- export const LIB_CONFIG = new InjectionToken("AgroAngularComponentsConfig");
5
+ export { LIB_CONFIG } from "./lib-config.token";
4
6
  export class AgroAngularComponentsModule {
5
7
  static forRoot(config) {
6
8
  return {
@@ -15,10 +17,24 @@ export class AgroAngularComponentsModule {
15
17
  }
16
18
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AgroAngularComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17
19
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AgroAngularComponentsModule });
18
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AgroAngularComponentsModule });
20
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AgroAngularComponentsModule, providers: [
21
+ {
22
+ provide: ENVIRONMENT_INITIALIZER,
23
+ multi: true,
24
+ useValue: () => registerLookupRuntimeInjector(inject(Injector)),
25
+ }
26
+ ] });
19
27
  }
20
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AgroAngularComponentsModule, decorators: [{
21
29
  type: NgModule,
22
- args: [{}]
30
+ args: [{
31
+ providers: [
32
+ {
33
+ provide: ENVIRONMENT_INITIALIZER,
34
+ multi: true,
35
+ useValue: () => registerLookupRuntimeInjector(inject(Injector)),
36
+ }
37
+ ]
38
+ }]
23
39
  }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2Fncm8tYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzlFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsNkJBQTZCLENBQUMsQ0FBQztBQUloRyxNQUFNLE9BQU8sMkJBQTJCO0lBQ3BDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBMEI7UUFDckMsT0FBTztZQUNILFFBQVEsRUFBRSwyQkFBMkI7WUFDckMsU0FBUyxFQUFFO2dCQUNQO29CQUNJLE9BQU8sRUFBRSxVQUFVO29CQUNuQixRQUFRLEVBQUUsTUFBTTtpQkFDbkI7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO3dHQVhRLDJCQUEyQjt5R0FBM0IsMkJBQTJCO3lHQUEzQiwyQkFBMkI7OzRGQUEzQiwyQkFBMkI7a0JBRnZDLFFBQVE7bUJBQUMsRUFDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RQcm9qZWN0Q29uZmlncyB7XHJcbiAgICBkb21haW46IHN0cmluZztcclxuICAgIHNlcnZpY2U6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IExJQl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48SG9zdFByb2plY3RDb25maWdzPihcIkFncm9Bbmd1bGFyQ29tcG9uZW50c0NvbmZpZ1wiKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ3JvQW5ndWxhckNvbXBvbmVudHNNb2R1bGUge1xyXG4gICAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBIb3N0UHJvamVjdENvbmZpZ3MpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFncm9Bbmd1bGFyQ29tcG9uZW50c01vZHVsZT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5nTW9kdWxlOiBBZ3JvQW5ndWxhckNvbXBvbmVudHNNb2R1bGUsXHJcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IExJQl9DT05GSUcsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXX0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2Fncm8tYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUF1QixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBc0IsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7O0FBRy9GLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVdoRCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3BDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBMEI7UUFDckMsT0FBTztZQUNILFFBQVEsRUFBRSwyQkFBMkI7WUFDckMsU0FBUyxFQUFFO2dCQUNQO29CQUNJLE9BQU8sRUFBRSxVQUFVO29CQUNuQixRQUFRLEVBQUUsTUFBTTtpQkFDbkI7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO3dHQVhRLDJCQUEyQjt5R0FBM0IsMkJBQTJCO3lHQUEzQiwyQkFBMkIsYUFSekI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxLQUFLLEVBQUUsSUFBSTtnQkFDWCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xFO1NBQ0o7OzRGQUVRLDJCQUEyQjtrQkFUdkMsUUFBUTttQkFBQztvQkFDTixTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLHVCQUF1Qjs0QkFDaEMsS0FBSyxFQUFFLElBQUk7NEJBQ1gsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDbEU7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgSW5qZWN0b3IsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBMSUJfQ09ORklHIH0gZnJvbSBcIi4vbGliLWNvbmZpZy50b2tlblwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJMb29rdXBSdW50aW1lSW5qZWN0b3IgfSBmcm9tIFwiLi9maWVsZHMvbG9va3Vwcy9jb25maWcvbG9va3VwLXJ1bnRpbWUtY29udGV4dFwiO1xuXHJcbmV4cG9ydCB0eXBlIHsgSG9zdFByb2plY3RDb25maWdzIH0gZnJvbSBcIi4vbGliLWNvbmZpZy50b2tlblwiO1xyXG5leHBvcnQgeyBMSUJfQ09ORklHIH0gZnJvbSBcIi4vbGliLWNvbmZpZy50b2tlblwiO1xyXG5cclxuQE5nTW9kdWxlKHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZVZhbHVlOiAoKSA9PiByZWdpc3Rlckxvb2t1cFJ1bnRpbWVJbmplY3RvcihpbmplY3QoSW5qZWN0b3IpKSxcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQWdyb0FuZ3VsYXJDb21wb25lbnRzTW9kdWxlIHtcbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IEhvc3RQcm9qZWN0Q29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QWdyb0FuZ3VsYXJDb21wb25lbnRzTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEFncm9Bbmd1bGFyQ29tcG9uZW50c01vZHVsZSxcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTElCX0NPTkZJRyxcclxuICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ export function resolveLookupHostProjectConfig(config, serviceName) {
2
+ const domain = config?.domain;
3
+ const service = config?.service;
4
+ if (domain && service) {
5
+ return { domain, service };
6
+ }
7
+ throw new Error(`[${serviceName}] Missing host project configuration. ` +
8
+ `Provide 'domain' and 'service' in the lookup config or configure LIB_CONFIG in the module.`);
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLWhvc3QtcHJvamVjdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvZmllbGRzL2xvb2t1cHMvY29uZmlnL2xvb2t1cC1ob3N0LXByb2plY3QtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSw4QkFBOEIsQ0FDMUMsTUFBc0QsRUFDdEQsV0FBbUI7SUFFbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUM5QixNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsT0FBTyxDQUFDO0lBRWhDLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQ1gsSUFBSSxXQUFXLHdDQUF3QztRQUN2RCw0RkFBNEYsQ0FDL0YsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIb3N0UHJvamVjdENvbmZpZ3MgfSBmcm9tICcuLi8uLi8uLi9saWItY29uZmlnLnRva2VuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTG9va3VwSG9zdFByb2plY3RDb25maWcoXHJcbiAgICBjb25maWc6IFBhcnRpYWw8SG9zdFByb2plY3RDb25maWdzPiB8IG51bGwgfCB1bmRlZmluZWQsXHJcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nXHJcbik6IEhvc3RQcm9qZWN0Q29uZmlncyB7XHJcbiAgICBjb25zdCBkb21haW4gPSBjb25maWc/LmRvbWFpbjtcclxuICAgIGNvbnN0IHNlcnZpY2UgPSBjb25maWc/LnNlcnZpY2U7XHJcblxyXG4gICAgaWYgKGRvbWFpbiAmJiBzZXJ2aWNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZG9tYWluLCBzZXJ2aWNlIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBbJHtzZXJ2aWNlTmFtZX1dIE1pc3NpbmcgaG9zdCBwcm9qZWN0IGNvbmZpZ3VyYXRpb24uIGAgK1xyXG4gICAgICAgIGBQcm92aWRlICdkb21haW4nIGFuZCAnc2VydmljZScgaW4gdGhlIGxvb2t1cCBjb25maWcgb3IgY29uZmlndXJlIExJQl9DT05GSUcgaW4gdGhlIG1vZHVsZS5gXHJcbiAgICApO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ let runtimeInjector = null;
2
+ export function registerLookupRuntimeInjector(injector) {
3
+ runtimeInjector = injector;
4
+ }
5
+ export function resolveLookupRuntimeInjector(callerName) {
6
+ if (!runtimeInjector) {
7
+ throw new Error(`[${callerName}] No runtime injector registered. ` +
8
+ `Import AgroAngularComponentsModule in your AppModule or call registerLookupRuntimeInjector().`);
9
+ }
10
+ return runtimeInjector;
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLXJ1bnRpbWUtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9maWVsZHMvbG9va3Vwcy9jb25maWcvbG9va3VwLXJ1bnRpbWUtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxJQUFJLGVBQWUsR0FBb0IsSUFBSSxDQUFDO0FBRTVDLE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxRQUFrQjtJQUM1RCxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQy9CLENBQUM7QUFFRCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsVUFBa0I7SUFDM0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gsSUFBSSxVQUFVLG9DQUFvQztZQUNsRCwrRkFBK0YsQ0FDbEcsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmxldCBydW50aW1lSW5qZWN0b3I6IEluamVjdG9yIHwgbnVsbCA9IG51bGw7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJMb29rdXBSdW50aW1lSW5qZWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKTogdm9pZCB7XHJcbiAgICBydW50aW1lSW5qZWN0b3IgPSBpbmplY3RvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMb29rdXBSdW50aW1lSW5qZWN0b3IoY2FsbGVyTmFtZTogc3RyaW5nKTogSW5qZWN0b3Ige1xyXG4gICAgaWYgKCFydW50aW1lSW5qZWN0b3IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBbJHtjYWxsZXJOYW1lfV0gTm8gcnVudGltZSBpbmplY3RvciByZWdpc3RlcmVkLiBgICtcclxuICAgICAgICAgICAgYEltcG9ydCBBZ3JvQW5ndWxhckNvbXBvbmVudHNNb2R1bGUgaW4geW91ciBBcHBNb2R1bGUgb3IgY2FsbCByZWdpc3Rlckxvb2t1cFJ1bnRpbWVJbmplY3RvcigpLmBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJ1bnRpbWVJbmplY3RvcjtcclxufVxyXG4iXX0=
@@ -0,0 +1,385 @@
1
+ import { Subject } from 'rxjs';
2
+ import { pairwise, startWith, debounceTime } from 'rxjs/operators';
3
+ import { createGenericOnLookupRequest, createGenericOnSearchRequest } from './lookup-field.handlers';
4
+ import { getLabelValueRequest, mergeUnique } from '../utils/agro-lookup-utils';
5
+ import { formatCPFCNPJWithMask } from '../utils';
6
+ const LOOKUP_DEBOUNCE_MS = 300;
7
+ const LOOKUP_DOCUMENT_FIELDS_TO_FORMAT = ['cnpCpf', 'numCgc'];
8
+ export class AgroBaseLookupField {
9
+ config;
10
+ translate;
11
+ suggestionsSubject = new Subject();
12
+ searchSubject = new Subject();
13
+ hasDependencyListenerStarted = false;
14
+ constructor(config, translate) {
15
+ this.config = config;
16
+ this.translate = translate;
17
+ }
18
+ isLookupValueValid(value) {
19
+ if (value === null || value === undefined || value === '') {
20
+ return false;
21
+ }
22
+ if (Array.isArray(value)) {
23
+ return value.length > 0 && value.every((item) => item && typeof item === 'object' && item.id !== undefined && item.id !== null);
24
+ }
25
+ return typeof value === 'object' && value.id !== undefined && value.id !== null;
26
+ }
27
+ formatEntityDocumentFields(entity) {
28
+ if (!entity || typeof entity !== 'object' || Array.isArray(entity)) {
29
+ return entity;
30
+ }
31
+ let formattedEntity = entity;
32
+ LOOKUP_DOCUMENT_FIELDS_TO_FORMAT.forEach((fieldName) => {
33
+ if (!Object.hasOwn(entity, fieldName)) {
34
+ return;
35
+ }
36
+ const originalValue = entity[fieldName];
37
+ if (originalValue === null || originalValue === undefined || originalValue === '') {
38
+ return;
39
+ }
40
+ const formattedValue = formatCPFCNPJWithMask(originalValue);
41
+ if (formattedValue !== originalValue) {
42
+ if (formattedEntity === entity) {
43
+ formattedEntity = { ...entity };
44
+ }
45
+ formattedEntity[fieldName] = formattedValue;
46
+ }
47
+ });
48
+ return formattedEntity;
49
+ }
50
+ normalizeLookupValue(value) {
51
+ if (Array.isArray(value)) {
52
+ let hasChanges = false;
53
+ const normalizedArray = value.map((item) => {
54
+ const normalizedItem = this.normalizeLookupValue(item);
55
+ hasChanges = hasChanges || normalizedItem !== item;
56
+ return normalizedItem;
57
+ });
58
+ return hasChanges ? normalizedArray : value;
59
+ }
60
+ return this.formatEntityDocumentFields(value);
61
+ }
62
+ syncControlValueWithNormalization(control) {
63
+ if (!control) {
64
+ return null;
65
+ }
66
+ const normalizedValue = this.normalizeLookupValue(control.value);
67
+ if (normalizedValue !== control.value) {
68
+ control.setValue(normalizedValue, { emitEvent: false });
69
+ }
70
+ return normalizedValue;
71
+ }
72
+ hasUserInteraction(control) {
73
+ if (!control) {
74
+ return false;
75
+ }
76
+ return control.dirty || control.touched;
77
+ }
78
+ markControlAsUserInteracted(control) {
79
+ if (!control) {
80
+ return;
81
+ }
82
+ if (!control.dirty) {
83
+ control.markAsDirty({ onlySelf: true });
84
+ }
85
+ if (!control.touched) {
86
+ control.markAsTouched({ onlySelf: true });
87
+ }
88
+ }
89
+ isControlFilled(value) {
90
+ if (value === null || value === undefined) {
91
+ return false;
92
+ }
93
+ if (typeof value === 'string') {
94
+ return value.trim() !== '';
95
+ }
96
+ if (Array.isArray(value)) {
97
+ return value.length > 0;
98
+ }
99
+ return true;
100
+ }
101
+ areDependenciesReady() {
102
+ const dependsOf = this.config.dependsOf ?? [];
103
+ if (dependsOf.length === 0) {
104
+ return true;
105
+ }
106
+ return dependsOf.every((fieldName) => {
107
+ const control = this.config.formGroup.get(fieldName);
108
+ return this.isLookupValueValid(this.syncControlValueWithNormalization(control));
109
+ });
110
+ }
111
+ isAutofillEnabled() {
112
+ return this.config.autofill !== false;
113
+ }
114
+ buildDependencyQuery() {
115
+ const dependencies = this.config.dependencies ?? [];
116
+ return dependencies
117
+ .map(({ formControlName, apiField }) => {
118
+ const dependencyId = this.config.formGroup.get(formControlName)?.value?.id;
119
+ return dependencyId ? `${apiField} eq '${dependencyId}'` : '';
120
+ })
121
+ .filter(Boolean)
122
+ .join(' and ');
123
+ }
124
+ buildCustomFilterQuery() {
125
+ const query = this.config.customFilterQuery?.();
126
+ return typeof query === 'string' ? query.trim() : '';
127
+ }
128
+ combineFilterQueries(...queries) {
129
+ return queries.filter((query) => !!query).join(' and ');
130
+ }
131
+ tryAutofillWhenSingleResult() {
132
+ if (!this.isAutofillEnabled()) {
133
+ return;
134
+ }
135
+ const dependsOf = this.config.dependsOf ?? [];
136
+ if (dependsOf.length === 0) {
137
+ return;
138
+ }
139
+ const targetControl = this.config.formGroup.get(this.config.name);
140
+ if (!targetControl || targetControl.disabled || this.isLookupValueValid(targetControl.value)) {
141
+ return;
142
+ }
143
+ const dependencyQuery = this.buildDependencyQuery();
144
+ const customQuery = this.buildCustomFilterQuery();
145
+ const filterQuery = this.combineFilterQueries(dependencyQuery, customQuery);
146
+ if (!filterQuery) {
147
+ return;
148
+ }
149
+ const sort = this.config.lookupDisplayFields.map((field) => ({ field, order: 1 }));
150
+ const displayFields = mergeUnique(this.config.lookupDisplayFields, this.config.advancedDisplayFields);
151
+ this.config.service
152
+ .list({ page: 0, size: 2, sort, filterQuery, displayFields })
153
+ .subscribe((list) => {
154
+ const contents = list?.contents ?? [];
155
+ if (contents.length !== 1) {
156
+ return;
157
+ }
158
+ const [singleValue] = getLabelValueRequest(contents, this.config.lookupDisplayFields);
159
+ if (singleValue) {
160
+ targetControl.setValue(this.normalizeLookupValue(singleValue), { emitEvent: true });
161
+ }
162
+ });
163
+ }
164
+ isPrefilledAndIndependent(hasAnyUserInteraction, targetIsValid, targetIsFilled) {
165
+ return !hasAnyUserInteraction && (targetIsValid || targetIsFilled);
166
+ }
167
+ handleDependenciesState(forceReset = false) {
168
+ const targetControl = this.config.formGroup.get(this.config.name);
169
+ if (!targetControl) {
170
+ return;
171
+ }
172
+ const dependsOf = this.config.dependsOf ?? [];
173
+ if (dependsOf.length === 0) {
174
+ return;
175
+ }
176
+ const hasAnyUserInteraction = dependsOf.some((fieldName) => this.hasUserInteraction(this.config.formGroup.get(fieldName)));
177
+ const targetValue = this.syncControlValueWithNormalization(targetControl);
178
+ const targetIsValid = this.isLookupValueValid(targetValue);
179
+ const targetIsFilled = this.isControlFilled(targetValue);
180
+ if (forceReset) {
181
+ targetControl.setValue(null, { emitEvent: false });
182
+ targetControl.disable({ emitEvent: false });
183
+ return;
184
+ }
185
+ // Rule: dependent fields start disabled, except when already filled/valid (prefilled scenario).
186
+ if (this.isPrefilledAndIndependent(hasAnyUserInteraction, targetIsValid, targetIsFilled)) {
187
+ targetControl.enable({ emitEvent: false });
188
+ this.tryAutofillWhenSingleResult();
189
+ return;
190
+ }
191
+ if (this.areDependenciesReady()) {
192
+ targetControl.enable({ emitEvent: false });
193
+ this.tryAutofillWhenSingleResult();
194
+ return;
195
+ }
196
+ // Keep prefilled values; clear only when there is user interaction or value is invalid for lookup.
197
+ if (hasAnyUserInteraction || (targetIsFilled && !targetIsValid)) {
198
+ targetControl.setValue(null, { emitEvent: false });
199
+ }
200
+ targetControl.disable({ emitEvent: false });
201
+ }
202
+ clearTargetKeepingEnabled() {
203
+ const targetControl = this.config.formGroup.get(this.config.name);
204
+ if (!targetControl) {
205
+ return;
206
+ }
207
+ targetControl.setValue(null, { emitEvent: true });
208
+ if (this.areDependenciesReady()) {
209
+ targetControl.enable({ emitEvent: false });
210
+ this.tryAutofillWhenSingleResult();
211
+ }
212
+ }
213
+ getComparableLookupValue(value) {
214
+ const normalizedValue = this.normalizeLookupValue(value);
215
+ if (normalizedValue === null || normalizedValue === undefined || normalizedValue === '') {
216
+ return null;
217
+ }
218
+ if (Array.isArray(normalizedValue)) {
219
+ return normalizedValue.map((item) => this.getComparableLookupValue(item));
220
+ }
221
+ if (typeof normalizedValue === 'object') {
222
+ if (normalizedValue.id !== undefined && normalizedValue.id !== null) {
223
+ return normalizedValue.id;
224
+ }
225
+ return JSON.stringify(normalizedValue);
226
+ }
227
+ return normalizedValue;
228
+ }
229
+ didDependencyValueChange(previousComparable, currentComparable) {
230
+ return JSON.stringify(previousComparable) !== JSON.stringify(currentComparable);
231
+ }
232
+ startDependenciesListener() {
233
+ if (this.hasDependencyListenerStarted) {
234
+ return;
235
+ }
236
+ const dependsOf = this.config.dependsOf ?? [];
237
+ if (dependsOf.length === 0) {
238
+ return;
239
+ }
240
+ this.hasDependencyListenerStarted = true;
241
+ // Observe each dependency directly and compare previous/current values.
242
+ dependsOf.forEach((fieldName) => {
243
+ const control = this.config.formGroup.get(fieldName);
244
+ control?.valueChanges.pipe(startWith(control.value), debounceTime(LOOKUP_DEBOUNCE_MS), pairwise()).subscribe(([previousValue, currentValue]) => {
245
+ const normalizedPreviousValue = this.normalizeLookupValue(previousValue);
246
+ const normalizedCurrentValue = this.normalizeLookupValue(currentValue);
247
+ if (normalizedCurrentValue !== currentValue) {
248
+ control.setValue(normalizedCurrentValue, { emitEvent: false });
249
+ }
250
+ const previousValidity = this.isLookupValueValid(normalizedPreviousValue);
251
+ const currentValidity = this.isLookupValueValid(normalizedCurrentValue);
252
+ const previousComparable = this.getComparableLookupValue(normalizedPreviousValue);
253
+ const currentComparable = this.getComparableLookupValue(normalizedCurrentValue);
254
+ const didValueChange = this.didDependencyValueChange(previousComparable, currentComparable);
255
+ if (previousValidity && !currentValidity) {
256
+ this.handleDependenciesState(true);
257
+ return;
258
+ }
259
+ if (previousValidity && currentValidity && didValueChange) {
260
+ this.clearTargetKeepingEnabled();
261
+ return;
262
+ }
263
+ if (!previousValidity && currentValidity) {
264
+ this.handleDependenciesState(false);
265
+ }
266
+ });
267
+ control?.statusChanges.subscribe(() => {
268
+ if (this.areDependenciesReady()) {
269
+ this.handleDependenciesState(false);
270
+ }
271
+ });
272
+ });
273
+ // Evaluate once after init to honor prefilled valid dependencies without forcing resets.
274
+ this.handleDependenciesState(false);
275
+ }
276
+ makeIt() {
277
+ this.startDependenciesListener();
278
+ return {
279
+ name: this.config.name,
280
+ formControlName: this.config.name, // Explicitly set formControlName for s-dynamic-form binding
281
+ filterFieldName: this.config.filterFieldName ?? this.config.name,
282
+ required: this.config.required ?? (() => false),
283
+ size: this.config.size ?? { sm: 4, md: 4, lg: 4, xl: 4 },
284
+ dependsOf: this.config.dependsOf ?? [],
285
+ label: this.translate.instant(this.config.labelKey),
286
+ type: 'lookup',
287
+ dataKey: 'id',
288
+ lookupDisplayField: 'label',
289
+ searchTitle: this.translate.instant(this.config.searchTitleKey),
290
+ searchEmptyTitle: this.translate.instant('agro.angular_components.lookup_nothing_found'),
291
+ filterLabel: this.translate.instant('agro.angular_components.lookup_filter'),
292
+ filterTitle: this.translate.instant('agro.angular_components.lookup_filters'),
293
+ clearLabel: this.translate.instant('agro.angular_components.lookup_clear'),
294
+ cancelLabel: this.translate.instant('agro.angular_components.lookup_cancel'),
295
+ selectLabel: this.translate.instant('agro.angular_components.lookup_select'),
296
+ suggestionsObservable: this.suggestionsSubject.asObservable(),
297
+ searchObservable: this.searchSubject.asObservable(),
298
+ onLookupRequest: createGenericOnLookupRequest({
299
+ config: this.config,
300
+ suggestionsSubject: this.suggestionsSubject,
301
+ searchSubject: this.searchSubject,
302
+ }),
303
+ onSearchRequest: createGenericOnSearchRequest({
304
+ config: this.config,
305
+ suggestionsSubject: this.suggestionsSubject,
306
+ searchSubject: this.searchSubject,
307
+ }),
308
+ onBlur: (event) => {
309
+ const control = this.config.formGroup.get(this.config.name);
310
+ if (control) {
311
+ this.markControlAsUserInteracted(control);
312
+ const uiRawValue = event?.target?.value ?? event?.value ?? '';
313
+ const uiTextValue = typeof uiRawValue === 'string' ? uiRawValue.trim() : uiRawValue;
314
+ const isUiEmpty = !uiTextValue;
315
+ const currentValue = this.syncControlValueWithNormalization(control);
316
+ const isValueValid = this.isLookupValueValid(currentValue);
317
+ // If UI was cleared but control still has a value, force sync to null.
318
+ if (isUiEmpty && currentValue != null && currentValue !== '') {
319
+ control.setValue(null, { emitEvent: true });
320
+ control.updateValueAndValidity({ emitEvent: true });
321
+ return;
322
+ }
323
+ // If the control has a value but it's not a valid lookup object, clear it
324
+ // This catches cases where the UI cleared the field but the FormControl wasn't updated
325
+ if (currentValue && !isValueValid) {
326
+ this.config.formGroup.patchValue({ [this.config.name]: null }, { emitEvent: true });
327
+ }
328
+ }
329
+ },
330
+ onSelectHandler: (event) => {
331
+ const actualValue = event?.value || event;
332
+ const control = this.config.formGroup.get(this.config.name);
333
+ if (control && actualValue && typeof actualValue === 'object' && actualValue.id) {
334
+ const normalizedValue = this.normalizeLookupValue(actualValue);
335
+ this.markControlAsUserInteracted(control);
336
+ control.setValue(normalizedValue, { emitEvent: true });
337
+ }
338
+ },
339
+ onSelect: (event) => {
340
+ const actualValue = event?.value || event;
341
+ const control = this.config.formGroup.get(this.config.name);
342
+ if (control && actualValue && typeof actualValue === 'object' && actualValue.id) {
343
+ const normalizedValue = this.normalizeLookupValue(actualValue);
344
+ this.markControlAsUserInteracted(control);
345
+ control.setValue(normalizedValue, { emitEvent: true });
346
+ }
347
+ },
348
+ onClear: () => {
349
+ const control = this.config.formGroup.get(this.config.name);
350
+ if (control) {
351
+ this.markControlAsUserInteracted(control);
352
+ control.setValue(null, { emitEvent: true });
353
+ }
354
+ },
355
+ onChange: (event) => {
356
+ const control = this.config.formGroup.get(this.config.name);
357
+ const actualValue = event?.value || event;
358
+ if (control && actualValue && typeof actualValue === 'object') {
359
+ const normalizedValue = this.normalizeLookupValue(actualValue);
360
+ if (normalizedValue !== actualValue) {
361
+ this.markControlAsUserInteracted(control);
362
+ control.setValue(normalizedValue, { emitEvent: true });
363
+ return;
364
+ }
365
+ }
366
+ if (control && !actualValue) {
367
+ this.markControlAsUserInteracted(control);
368
+ control.setValue(null, { emitEvent: true });
369
+ }
370
+ },
371
+ onUnselect: () => {
372
+ const control = this.config.formGroup.get(this.config.name);
373
+ if (control) {
374
+ this.markControlAsUserInteracted(control);
375
+ control.setValue(null, { emitEvent: true });
376
+ }
377
+ },
378
+ searchFields: this.config.searchFields,
379
+ searchGridFields: this.config.searchFields,
380
+ appendTo: 'body',
381
+ baseZIndex: 10000,
382
+ };
383
+ }
384
+ }
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1iYXNlLWxvb2t1cC1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9maWVsZHMvbG9va3Vwcy9jb3JlL2Fncm8tYmFzZS1sb29rdXAtZmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWpELE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBQy9CLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFOUQsTUFBTSxPQUFPLG1CQUFtQjtJQU1QO0lBQ0E7SUFOSixrQkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO0lBQzFDLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0lBQzVDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztJQUU3QyxZQUNxQixNQUFnQyxFQUNoQyxTQUFnQztRQURoQyxXQUFNLEdBQU4sTUFBTSxDQUEwQjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUF1QjtJQUNqRCxDQUFDO0lBRUcsa0JBQWtCLENBQUMsS0FBVTtRQUNqQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDeEQsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELElB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L0QsSUFBSSxlQUFlLEtBQUssV0FBVyxFQUFFLENBQUM7d0JBQ2xDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDdkQsT0FBTztvQkFDWCxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO1lBQ0wsQ0FBQztZQUNELFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1YsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO1lBQ0wsQ0FBQztZQUNELFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7WUFDdEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO1lBQzFDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFVBQVUsRUFBRSxLQUFLO1NBQ3BCLENBQUM7SUFDTixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTGliVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGliLXRyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYWlyd2lzZSwgc3RhcnRXaXRoLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEdlbmVyaWNMb29rdXBGaWVsZENvbmZpZyB9IGZyb20gJy4vbG9va3VwLWZpZWxkLnR5cGVzJztcclxuaW1wb3J0IHsgY3JlYXRlR2VuZXJpY09uTG9va3VwUmVxdWVzdCwgY3JlYXRlR2VuZXJpY09uU2VhcmNoUmVxdWVzdCB9IGZyb20gJy4vbG9va3VwLWZpZWxkLmhhbmRsZXJzJztcclxuaW1wb3J0IHsgZ2V0TGFiZWxWYWx1ZVJlcXVlc3QsIG1lcmdlVW5pcXVlIH0gZnJvbSAnLi4vdXRpbHMvYWdyby1sb29rdXAtdXRpbHMnO1xyXG5pbXBvcnQgeyBmb3JtYXRDUEZDTlBKV2l0aE1hc2sgfSBmcm9tICcuLi91dGlscyc7XHJcblxyXG5jb25zdCBMT09LVVBfREVCT1VOQ0VfTVMgPSAzMDA7XHJcbmNvbnN0IExPT0tVUF9ET0NVTUVOVF9GSUVMRFNfVE9fRk9STUFUID0gWydjbnBDcGYnLCAnbnVtQ2djJ107XHJcblxyXG5leHBvcnQgY2xhc3MgQWdyb0Jhc2VMb29rdXBGaWVsZCB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1Z2dlc3Rpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueVtdPigpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgcHJpdmF0ZSBoYXNEZXBlbmRlbmN5TGlzdGVuZXJTdGFydGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IEdlbmVyaWNMb29rdXBGaWVsZENvbmZpZyxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogTGliVHJhbnNsYXRpb25TZXJ2aWNlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIHByaXZhdGUgaXNMb29rdXBWYWx1ZVZhbGlkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiBpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtLmlkICE9PSB1bmRlZmluZWQgJiYgaXRlbS5pZCAhPT0gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pZCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmlkICE9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9ybWF0RW50aXR5RG9jdW1lbnRGaWVsZHMoZW50aXR5OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghZW50aXR5IHx8IHR5cGVvZiBlbnRpdHkgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZW50aXR5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZW50aXR5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGZvcm1hdHRlZEVudGl0eSA9IGVudGl0eTtcclxuXHJcbiAgICAgICAgTE9PS1VQX0RPQ1VNRU5UX0ZJRUxEU19UT19GT1JNQVQuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093bihlbnRpdHksIGZpZWxkTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IGVudGl0eVtmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZSA9PT0gbnVsbCB8fCBvcmlnaW5hbFZhbHVlID09PSB1bmRlZmluZWQgfHwgb3JpZ2luYWxWYWx1ZSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXRDUEZDTlBKV2l0aE1hc2sob3JpZ2luYWxWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZWRWYWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlZEVudGl0eSA9PT0gZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkRW50aXR5ID0geyAuLi5lbnRpdHkgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRFbnRpdHlbZmllbGROYW1lXSA9IGZvcm1hdHRlZFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRFbnRpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBub3JtYWxpemVMb29rdXBWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEFycmF5ID0gdmFsdWUubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkSXRlbSA9IHRoaXMubm9ybWFsaXplTG9va3VwVmFsdWUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gaGFzQ2hhbmdlcyB8fCBub3JtYWxpemVkSXRlbSAhPT0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkSXRlbTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaGFzQ2hhbmdlcyA/IG5vcm1hbGl6ZWRBcnJheSA6IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RW50aXR5RG9jdW1lbnRGaWVsZHModmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3luY0NvbnRyb2xWYWx1ZVdpdGhOb3JtYWxpemF0aW9uKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBhbnkge1xyXG4gICAgICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMubm9ybWFsaXplTG9va3VwVmFsdWUoY29udHJvbC52YWx1ZSk7XHJcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSAhPT0gY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhc1VzZXJJbnRlcmFjdGlvbihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFjb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1hcmtDb250cm9sQXNVc2VySW50ZXJhY3RlZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFjb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29udHJvbC5kaXJ0eSkge1xyXG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbnRyb2wudG91Y2hlZCkge1xyXG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0NvbnRyb2xGaWxsZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcmVEZXBlbmRlbmNpZXNSZWFkeSgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBkZXBlbmRzT2YgPSB0aGlzLmNvbmZpZy5kZXBlbmRzT2YgPz8gW107XHJcbiAgICAgICAgaWYgKGRlcGVuZHNPZi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZGVwZW5kc09mLmV2ZXJ5KChmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29uZmlnLmZvcm1Hcm91cC5nZXQoZmllbGROYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNMb29rdXBWYWx1ZVZhbGlkKHRoaXMuc3luY0NvbnRyb2xWYWx1ZVdpdGhOb3JtYWxpemF0aW9uKGNvbnRyb2wpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzQXV0b2ZpbGxFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5hdXRvZmlsbCAhPT0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZERlcGVuZGVuY3lRdWVyeSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMuY29uZmlnLmRlcGVuZGVuY2llcyA/PyBbXTtcclxuICAgICAgICByZXR1cm4gZGVwZW5kZW5jaWVzXHJcbiAgICAgICAgICAgIC5tYXAoKHsgZm9ybUNvbnRyb2xOYW1lLCBhcGlGaWVsZCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5SWQgPSB0aGlzLmNvbmZpZy5mb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sTmFtZSk/LnZhbHVlPy5pZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkZXBlbmRlbmN5SWQgPyBgJHthcGlGaWVsZH0gZXEgJyR7ZGVwZW5kZW5jeUlkfSdgIDogJyc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcclxuICAgICAgICAgICAgLmpvaW4oJyBhbmQgJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZEN1c3RvbUZpbHRlclF1ZXJ5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmNvbmZpZy5jdXN0b21GaWx0ZXJRdWVyeT8uKCk7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZycgPyBxdWVyeS50cmltKCkgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbWJpbmVGaWx0ZXJRdWVyaWVzKC4uLnF1ZXJpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gcXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiAhIXF1ZXJ5KS5qb2luKCcgYW5kICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdHJ5QXV0b2ZpbGxXaGVuU2luZ2xlUmVzdWx0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0F1dG9maWxsRW5hYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRlcGVuZHNPZiA9IHRoaXMuY29uZmlnLmRlcGVuZHNPZiA/PyBbXTtcclxuICAgICAgICBpZiAoZGVwZW5kc09mLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gdGhpcy5jb25maWcuZm9ybUdyb3VwLmdldCh0aGlzLmNvbmZpZy5uYW1lKTtcclxuICAgICAgICBpZiAoIXRhcmdldENvbnRyb2wgfHwgdGFyZ2V0Q29udHJvbC5kaXNhYmxlZCB8fCB0aGlzLmlzTG9va3VwVmFsdWVWYWxpZCh0YXJnZXRDb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkZXBlbmRlbmN5UXVlcnkgPSB0aGlzLmJ1aWxkRGVwZW5kZW5jeVF1ZXJ5KCk7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tUXVlcnkgPSB0aGlzLmJ1aWxkQ3VzdG9tRmlsdGVyUXVlcnkoKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuY29tYmluZUZpbHRlclF1ZXJpZXMoZGVwZW5kZW5jeVF1ZXJ5LCBjdXN0b21RdWVyeSk7XHJcbiAgICAgICAgaWYgKCFmaWx0ZXJRdWVyeSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzb3J0ID0gdGhpcy5jb25maWcubG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBzdHJpbmcpID0+ICh7IGZpZWxkLCBvcmRlcjogMSB9KSk7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuY29uZmlnLmxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuY29uZmlnLmFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNlcnZpY2VcclxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlOiAwLCBzaXplOiAyLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gbGlzdD8uY29udGVudHMgPz8gW107XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IFtzaW5nbGVWYWx1ZV0gPSBnZXRMYWJlbFZhbHVlUmVxdWVzdChjb250ZW50cywgdGhpcy5jb25maWcubG9va3VwRGlzcGxheUZpZWxkcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldFZhbHVlKHRoaXMubm9ybWFsaXplTG9va3VwVmFsdWUoc2luZ2xlVmFsdWUpLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1ByZWZpbGxlZEFuZEluZGVwZW5kZW50KGhhc0FueVVzZXJJbnRlcmFjdGlvbjogYm9vbGVhbiwgdGFyZ2V0SXNWYWxpZDogYm9vbGVhbiwgdGFyZ2V0SXNGaWxsZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIWhhc0FueVVzZXJJbnRlcmFjdGlvbiAmJiAodGFyZ2V0SXNWYWxpZCB8fCB0YXJnZXRJc0ZpbGxlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVEZXBlbmRlbmNpZXNTdGF0ZShmb3JjZVJlc2V0ID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gdGhpcy5jb25maWcuZm9ybUdyb3VwLmdldCh0aGlzLmNvbmZpZy5uYW1lKTtcclxuICAgICAgICBpZiAoIXRhcmdldENvbnRyb2wpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGVwZW5kc09mID0gdGhpcy5jb25maWcuZGVwZW5kc09mID8/IFtdO1xyXG4gICAgICAgIGlmIChkZXBlbmRzT2YubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0FueVVzZXJJbnRlcmFjdGlvbiA9IGRlcGVuZHNPZi5zb21lKChmaWVsZE5hbWUpID0+IHRoaXMuaGFzVXNlckludGVyYWN0aW9uKHRoaXMuY29uZmlnLmZvcm1Hcm91cC5nZXQoZmllbGROYW1lKSkpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy5zeW5jQ29udHJvbFZhbHVlV2l0aE5vcm1hbGl6YXRpb24odGFyZ2V0Q29udHJvbCk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0SXNWYWxpZCA9IHRoaXMuaXNMb29rdXBWYWx1ZVZhbGlkKHRhcmdldFZhbHVlKTtcclxuICAgICAgICBjb25zdCB0YXJnZXRJc0ZpbGxlZCA9IHRoaXMuaXNDb250cm9sRmlsbGVkKHRhcmdldFZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKGZvcmNlUmVzZXQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHRhcmdldENvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJ1bGU6IGRlcGVuZGVudCBmaWVsZHMgc3RhcnQgZGlzYWJsZWQsIGV4Y2VwdCB3aGVuIGFscmVhZHkgZmlsbGVkL3ZhbGlkIChwcmVmaWxsZWQgc2NlbmFyaW8pLlxyXG4gICAgICAgIGlmICh0aGlzLmlzUHJlZmlsbGVkQW5kSW5kZXBlbmRlbnQoaGFzQW55VXNlckludGVyYWN0aW9uLCB0YXJnZXRJc1ZhbGlkLCB0YXJnZXRJc0ZpbGxlZCkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRyeUF1dG9maWxsV2hlblNpbmdsZVJlc3VsdCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hcmVEZXBlbmRlbmNpZXNSZWFkeSgpKSB7XHJcbiAgICAgICAgICAgIHRhcmdldENvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgdGhpcy50cnlBdXRvZmlsbFdoZW5TaW5nbGVSZXN1bHQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gS2VlcCBwcmVmaWxsZWQgdmFsdWVzOyBjbGVhciBvbmx5IHdoZW4gdGhlcmUgaXMgdXNlciBpbnRlcmFjdGlvbiBvciB2YWx1ZSBpcyBpbnZhbGlkIGZvciBsb29rdXAuXHJcbiAgICAgICAgaWYgKGhhc0FueVVzZXJJbnRlcmFjdGlvbiB8fCAodGFyZ2V0SXNGaWxsZWQgJiYgIXRhcmdldElzVmFsaWQpKSB7XHJcbiAgICAgICAgICAgIHRhcmdldENvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0Q29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyVGFyZ2V0S2VlcGluZ0VuYWJsZWQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29udHJvbCA9IHRoaXMuY29uZmlnLmZvcm1Hcm91cC5nZXQodGhpcy5jb25maWcubmFtZSk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhcmdldENvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFyZURlcGVuZGVuY2llc1JlYWR5KCkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRyeUF1dG9maWxsV2hlblNpbmdsZVJlc3VsdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvbXBhcmFibGVMb29rdXBWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cFZhbHVlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSA9PT0gbnVsbCB8fCBub3JtYWxpemVkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBub3JtYWxpemVkVmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9ybWFsaXplZFZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlLm1hcCgoaXRlbSkgPT4gdGhpcy5nZXRDb21wYXJhYmxlTG9va3VwVmFsdWUoaXRlbSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBub3JtYWxpemVkVmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaWQgIT09IHVuZGVmaW5lZCAmJiBub3JtYWxpemVkVmFsdWUuaWQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkVmFsdWUuaWQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRpZERlcGVuZGVuY3lWYWx1ZUNoYW5nZShwcmV2aW91c0NvbXBhcmFibGU6IGFueSwgY3VycmVudENvbXBhcmFibGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwcmV2aW91c0NvbXBhcmFibGUpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyZW50Q29tcGFyYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydERlcGVuZGVuY2llc0xpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0RlcGVuZGVuY3lMaXN0ZW5lclN0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGVwZW5kc09mID0gdGhpcy5jb25maWcuZGVwZW5kc09mID8/IFtdO1xyXG4gICAgICAgIGlmIChkZXBlbmRzT2YubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaGFzRGVwZW5kZW5jeUxpc3RlbmVyU3RhcnRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIE9ic2VydmUgZWFjaCBkZXBlbmRlbmN5IGRpcmVjdGx5IGFuZCBjb21wYXJlIHByZXZpb3VzL2N1cnJlbnQgdmFsdWVzLlxyXG4gICAgICAgIGRlcGVuZHNPZi5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29uZmlnLmZvcm1Hcm91cC5nZXQoZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2w/LnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoTE9PS1VQX0RFQk9VTkNFX01TKSxcclxuICAgICAgICAgICAgICAgICAgICBwYWlyd2lzZSgpXHJcbiAgICAgICAgICAgICAgICApLnN1YnNjcmliZSgoW3ByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcmV2aW91c1ZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBWYWx1ZShwcmV2aW91c1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50VmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cFZhbHVlKGN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRDdXJyZW50VmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplZEN1cnJlbnRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVmFsaWRpdHkgPSB0aGlzLmlzTG9va3VwVmFsdWVWYWxpZChub3JtYWxpemVkUHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsaWRpdHkgPSB0aGlzLmlzTG9va3VwVmFsdWVWYWxpZChub3JtYWxpemVkQ3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ29tcGFyYWJsZSA9IHRoaXMuZ2V0Q29tcGFyYWJsZUxvb2t1cFZhbHVlKG5vcm1hbGl6ZWRQcmV2aW91c1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb21wYXJhYmxlID0gdGhpcy5nZXRDb21wYXJhYmxlTG9va3VwVmFsdWUobm9ybWFsaXplZEN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaWRWYWx1ZUNoYW5nZSA9IHRoaXMuZGlkRGVwZW5kZW5jeVZhbHVlQ2hhbmdlKHByZXZpb3VzQ29tcGFyYWJsZSwgY3VycmVudENvbXBhcmFibGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1ZhbGlkaXR5ICYmICFjdXJyZW50VmFsaWRpdHkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURlcGVuZGVuY2llc1N0YXRlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNWYWxpZGl0eSAmJiBjdXJyZW50VmFsaWRpdHkgJiYgZGlkVmFsdWVDaGFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0S2VlcGluZ0VuYWJsZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1ZhbGlkaXR5ICYmIGN1cnJlbnRWYWxpZGl0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRGVwZW5kZW5jaWVzU3RhdGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRyb2w/LnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZURlcGVuZGVuY2llc1JlYWR5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURlcGVuZGVuY2llc1N0YXRlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEV2YWx1YXRlIG9uY2UgYWZ0ZXIgaW5pdCB0byBob25vciBwcmVmaWxsZWQgdmFsaWQgZGVwZW5kZW5jaWVzIHdpdGhvdXQgZm9yY2luZyByZXNldHMuXHJcbiAgICAgICAgdGhpcy5oYW5kbGVEZXBlbmRlbmNpZXNTdGF0ZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUl0KCk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5zdGFydERlcGVuZGVuY2llc0xpc3RlbmVyKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuY29uZmlnLm5hbWUsXHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZTogdGhpcy5jb25maWcubmFtZSwgIC8vIEV4cGxpY2l0bHkgc2V0IGZvcm1Db250cm9sTmFtZSBmb3Igcy1keW5hbWljLWZvcm0gYmluZGluZ1xyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZE5hbWU6IHRoaXMuY29uZmlnLmZpbHRlckZpZWxkTmFtZSA/PyB0aGlzLmNvbmZpZy5uYW1lLFxyXG4gICAgICAgICAgICByZXF1aXJlZDogdGhpcy5jb25maWcucmVxdWlyZWQgPz8gKCgpID0+IGZhbHNlKSxcclxuICAgICAgICAgICAgc2l6ZTogdGhpcy5jb25maWcuc2l6ZSA/PyB7IHNtOiA0LCBtZDogNCwgbGc6IDQsIHhsOiA0IH0sXHJcbiAgICAgICAgICAgIGRlcGVuZHNPZjogdGhpcy5jb25maWcuZGVwZW5kc09mID8/IFtdLFxyXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLmNvbmZpZy5sYWJlbEtleSksXHJcbiAgICAgICAgICAgIHR5cGU6ICdsb29rdXAnLFxyXG4gICAgICAgICAgICBkYXRhS2V5OiAnaWQnLFxyXG4gICAgICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6ICdsYWJlbCcsXHJcbiAgICAgICAgICAgIHNlYXJjaFRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRoaXMuY29uZmlnLnNlYXJjaFRpdGxlS2V5KSxcclxuICAgICAgICAgICAgc2VhcmNoRW1wdHlUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubG9va3VwX25vdGhpbmdfZm91bmQnKSxcclxuICAgICAgICAgICAgZmlsdGVyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmxvb2t1cF9maWx0ZXInKSxcclxuICAgICAgICAgICAgZmlsdGVyVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmxvb2t1cF9maWx0ZXJzJyksXHJcbiAgICAgICAgICAgIGNsZWFyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmxvb2t1cF9jbGVhcicpLFxyXG4gICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubG9va3VwX2NhbmNlbCcpLFxyXG4gICAgICAgICAgICBzZWxlY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubG9va3VwX3NlbGVjdCcpLFxyXG4gICAgICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiB0aGlzLnNlYXJjaFN1YmplY3QuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICAgICAgIG9uTG9va3VwUmVxdWVzdDogY3JlYXRlR2VuZXJpY09uTG9va3VwUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnNTdWJqZWN0OiB0aGlzLnN1Z2dlc3Rpb25zU3ViamVjdCxcclxuICAgICAgICAgICAgICAgIHNlYXJjaFN1YmplY3Q6IHRoaXMuc2VhcmNoU3ViamVjdCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG9uU2VhcmNoUmVxdWVzdDogY3JlYXRlR2VuZXJpY09uU2VhcmNoUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnNTdWJqZWN0OiB0aGlzLnN1Z2dlc3Rpb25zU3ViamVjdCxcclxuICAgICAgICAgICAgICAgIHNlYXJjaFN1YmplY3Q6IHRoaXMuc2VhcmNoU3ViamVjdCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG9uQmx1cjogKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbmZpZy5mb3JtR3JvdXAuZ2V0KHRoaXMuY29uZmlnLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtDb250cm9sQXNVc2VySW50ZXJhY3RlZChjb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1aVJhd1ZhbHVlID0gZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gZXZlbnQ/LnZhbHVlID8/ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpVGV4dFZhbHVlID0gdHlwZW9mIHVpUmF3VmFsdWUgPT09ICdzdHJpbmcnID8gdWlSYXdWYWx1ZS50cmltKCkgOiB1aVJhd1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVWlFbXB0eSA9ICF1aVRleHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnN5bmNDb250cm9sVmFsdWVXaXRoTm9ybWFsaXphdGlvbihjb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1ZhbHVlVmFsaWQgPSB0aGlzLmlzTG9va3VwVmFsdWVWYWxpZChjdXJyZW50VmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBVSSB3YXMgY2xlYXJlZCBidXQgY29udHJvbCBzdGlsbCBoYXMgYSB2YWx1ZSwgZm9yY2Ugc3luYyB0byBudWxsLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VpRW1wdHkgJiYgY3VycmVudFZhbHVlICE9IG51bGwgJiYgY3VycmVudFZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlIGJ1dCBpdCdzIG5vdCBhIHZhbGlkIGxvb2t1cCBvYmplY3QsIGNsZWFyIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXRjaGVzIGNhc2VzIHdoZXJlIHRoZSBVSSBjbGVhcmVkIHRoZSBmaWVsZCBidXQgdGhlIEZvcm1Db250cm9sIHdhc24ndCB1cGRhdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiAhaXNWYWx1ZVZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgW3RoaXMuY29uZmlnLm5hbWVdOiBudWxsIH0sIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25TZWxlY3RIYW5kbGVyOiAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBldmVudD8udmFsdWUgfHwgZXZlbnQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb25maWcuZm9ybUdyb3VwLmdldCh0aGlzLmNvbmZpZy5uYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sICYmIGFjdHVhbFZhbHVlICYmIHR5cGVvZiBhY3R1YWxWYWx1ZSA9PT0gJ29iamVjdCcgJiYgYWN0dWFsVmFsdWUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cFZhbHVlKGFjdHVhbFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtDb250cm9sQXNVc2VySW50ZXJhY3RlZChjb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uU2VsZWN0OiAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBldmVudD8udmFsdWUgfHwgZXZlbnQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb25maWcuZm9ybUdyb3VwLmdldCh0aGlzLmNvbmZpZy5uYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sICYmIGFjdHVhbFZhbHVlICYmIHR5cGVvZiBhY3R1YWxWYWx1ZSA9PT0gJ29iamVjdCcgJiYgYWN0dWFsVmFsdWUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cFZhbHVlKGFjdHVhbFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtDb250cm9sQXNVc2VySW50ZXJhY3RlZChjb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQ2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbmZpZy5mb3JtR3JvdXAuZ2V0KHRoaXMuY29uZmlnLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtDb250cm9sQXNVc2VySW50ZXJhY3RlZChjb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbmZpZy5mb3JtR3JvdXAuZ2V0KHRoaXMuY29uZmlnLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBldmVudD8udmFsdWUgfHwgZXZlbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wgJiYgYWN0dWFsVmFsdWUgJiYgdHlwZW9mIGFjdHVhbFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMubm9ybWFsaXplTG9va3VwVmFsdWUoYWN0dWFsVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUgIT09IGFjdHVhbFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya0NvbnRyb2xBc1VzZXJJbnRlcmFjdGVkKGNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wgJiYgIWFjdHVhbFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrQ29udHJvbEFzVXNlckludGVyYWN0ZWQoY29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25VbnNlbGVjdDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29uZmlnLmZvcm1Hcm91cC5nZXQodGhpcy5jb25maWcubmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya0NvbnRyb2xBc1VzZXJJbnRlcmFjdGVkKGNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlYXJjaEZpZWxkczogdGhpcy5jb25maWcuc2VhcmNoRmllbGRzLFxyXG4gICAgICAgICAgICBzZWFyY2hHcmlkRmllbGRzOiB0aGlzLmNvbmZpZy5zZWFyY2hGaWVsZHMsXHJcbiAgICAgICAgICAgIGFwcGVuZFRvOiAnYm9keScsXHJcbiAgICAgICAgICAgIGJhc2VaSW5kZXg6IDEwMDAwLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4iXX0=
@@ -0,0 +1,27 @@
1
+ import { AgroLookupEntityService } from '../services/agro-lookup-entity.service';
2
+ import { resolveLookupHostProjectConfig } from '../config/lookup-host-project-config';
3
+ import { AgroLookupBase } from './agro-lookup-base';
4
+ export class AgroBranchLookup extends AgroLookupBase {
5
+ e070FilService;
6
+ constructor(config) {
7
+ super(config, { defaultFieldName: 'branch', defaultFilterFieldName: 'branch.id' });
8
+ this.e070FilService = new AgroLookupEntityService(resolveLookupHostProjectConfig(config, AgroBranchLookup.name), 'entities/e070fil');
9
+ }
10
+ getLookupConfig() {
11
+ return {
12
+ labelKey: 'agro.angular_components.lookup_contract_branch',
13
+ searchTitleKey: 'agro.angular_components.lookup_contract_branch_search_title',
14
+ lookupDisplayFields: ['codFil', 'nomFil'],
15
+ advancedDisplayFields: ['codFil', 'nomFil'],
16
+ searchFields: [
17
+ { name: 'codFil', label: this.translate.instant('agro.angular_components.lookup_label_code'), type: 'integer', allowNegative: false, precision: 11, scale: 0 },
18
+ { name: 'nomFil', label: this.translate.instant('agro.angular_components.lookup_label_branch'), type: 'string' },
19
+ { name: 'numCgc', label: this.translate.instant('agro.angular_components.lookup_e_070_fil_num_cgc'), type: 'string' },
20
+ { name: 'cidFil', label: this.translate.instant('agro.angular_components.lookup_label_city'), type: 'string' },
21
+ ],
22
+ dependencies: [{ formControlName: 'company', apiField: 'e070emp.id' }],
23
+ service: this.e070FilService,
24
+ };
25
+ }
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1icmFuY2gtbG9va3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpZWxkcy9sb29rdXBzL2NvcmUvYWdyby1icmFuY2gtbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFHMUUsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGNBQWM7SUFDL0IsY0FBYyxDQUFtQztJQUVsRSxZQUFZLE1BQTBDO1FBQ2xELEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksdUJBQXVCLENBQzdDLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFDN0Qsa0JBQWtCLENBQ3JCLENBQUM7SUFDTixDQUFDO0lBRUQsZUFBZTtRQUNYLE9BQU87WUFDSCxRQUFRLEVBQUUsZ0RBQWdEO1lBQzFELGNBQWMsRUFBRSw2REFBNkQ7WUFDN0UsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO1lBQ3pDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztZQUMzQyxZQUFZLEVBQUU7Z0JBQ1YsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQzlKLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkNBQTZDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNoSCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGtEQUFrRCxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDckgsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7YUFDakg7WUFDRCxZQUFZLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYztTQUMvQixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWdyb0xvb2t1cEVudGl0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hZ3JvLWxvb2t1cC1lbnRpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IHJlc29sdmVMb29rdXBIb3N0UHJvamVjdENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9sb29rdXAtaG9zdC1wcm9qZWN0LWNvbmZpZyc7XHJcbmltcG9ydCB7IEFncm9Mb29rdXBCYXNlLCBMb29rdXBTcGVjaWZpY0NvbmZpZyB9IGZyb20gJy4vYWdyby1sb29rdXAtYmFzZSc7XHJcbmltcG9ydCB7IFNoYXJlZExvb2t1cEZpZWxkQ29uc3RydWN0b3JDb25maWcgfSBmcm9tICcuL2xvb2t1cC1maWVsZC50eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQWdyb0JyYW5jaExvb2t1cCBleHRlbmRzIEFncm9Mb29rdXBCYXNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZTA3MEZpbFNlcnZpY2U6IEFncm9Mb29rdXBFbnRpdHlTZXJ2aWNlPHVua25vd24+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogU2hhcmVkTG9va3VwRmllbGRDb25zdHJ1Y3RvckNvbmZpZykge1xyXG4gICAgICAgIHN1cGVyKGNvbmZpZywgeyBkZWZhdWx0RmllbGROYW1lOiAnYnJhbmNoJywgZGVmYXVsdEZpbHRlckZpZWxkTmFtZTogJ2JyYW5jaC5pZCcgfSk7XHJcbiAgICAgICAgdGhpcy5lMDcwRmlsU2VydmljZSA9IG5ldyBBZ3JvTG9va3VwRW50aXR5U2VydmljZShcclxuICAgICAgICAgICAgcmVzb2x2ZUxvb2t1cEhvc3RQcm9qZWN0Q29uZmlnKGNvbmZpZywgQWdyb0JyYW5jaExvb2t1cC5uYW1lKSxcclxuICAgICAgICAgICAgJ2VudGl0aWVzL2UwNzBmaWwnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb29rdXBDb25maWcoKTogTG9va3VwU3BlY2lmaWNDb25maWcge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxhYmVsS2V5OiAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubG9va3VwX2NvbnRyYWN0X2JyYW5jaCcsXHJcbiAgICAgICAgICAgIHNlYXJjaFRpdGxlS2V5OiAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubG9va3VwX2NvbnRyYWN0X2JyYW5jaF9zZWFyY2hfdGl0bGUnLFxyXG4gICAgICAgICAgICBsb29rdXBEaXNwbGF5RmllbGRzOiBbJ2NvZEZpbCcsICdub21GaWwnXSxcclxuICAgICAgICAgICAgYWR2YW5jZWREaXNwbGF5RmllbGRzOiBbJ2NvZEZpbCcsICdub21GaWwnXSxcclxuICAgICAgICAgICAgc2VhcmNoRmllbGRzOiBbXHJcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdjb2RGaWwnLCBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubG9va3VwX2xhYmVsX2NvZGUnKSwgdHlwZTogJ2ludGVnZXInLCBhbGxvd05lZ2F0aXZlOiBmYWxzZSwgcHJlY2lzaW9uOiAxMSwgc2NhbGU6IDAgfSxcclxuICAgICAgICAgICAgICAgIHsgbmFtZTogJ25vbUZpbCcsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5sb29rdXBfbGFiZWxfYnJhbmNoJyksIHR5cGU6ICdzdHJpbmcnIH0sXHJcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdudW1DZ2MnLCBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubG9va3VwX2VfMDcwX2ZpbF9udW1fY2djJyksIHR5cGU6ICdzdHJpbmcnIH0sXHJcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdjaWRGaWwnLCBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubG9va3VwX2xhYmVsX2NpdHknKSwgdHlwZTogJ3N0cmluZycgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbeyBmb3JtQ29udHJvbE5hbWU6ICdjb21wYW55JywgYXBpRmllbGQ6ICdlMDcwZW1wLmlkJyB9XSxcclxuICAgICAgICAgICAgc2VydmljZTogdGhpcy5lMDcwRmlsU2VydmljZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=