@ngil/form-cva 3.0.1 → 5.0.1

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.
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Directive, EventEmitter, Input, Output, Optional, NgModule, forwardRef } from '@angular/core';
2
+ import { Injectable, Directive, EventEmitter, Output, Input, Optional, NgModule, forwardRef } from '@angular/core';
3
+ import { Subject, takeUntil, BehaviorSubject, combineLatest } from 'rxjs';
3
4
  import * as i2 from '@angular/forms';
4
5
  import { FormGroup, FormArray, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
5
- import { Subject, takeUntil, BehaviorSubject, combineLatest } from 'rxjs';
6
6
  import { takeUntil as takeUntil$1 } from 'rxjs/operators';
7
7
  import { CommonModule } from '@angular/common';
8
8
 
@@ -21,6 +21,8 @@ class NgilErrorMessagesService {
21
21
  this.config = {
22
22
  useDefaultReplacer: true
23
23
  };
24
+ this.errorMessagesChangedSubject = new Subject();
25
+ this.errorMessagesChanged$ = this.errorMessagesChangedSubject.asObservable();
24
26
  }
25
27
  addErrorMessages(errorMessages) {
26
28
  this.errorMessages = { ...this.errorMessages, ...errorMessages };
@@ -28,24 +30,33 @@ class NgilErrorMessagesService {
28
30
  setErrorMessages(errorMessages) {
29
31
  this.errorMessages = errorMessages;
30
32
  }
33
+ /**
34
+ * @deprecated
35
+ * use setConfig instead
36
+ */
31
37
  setUserReplacer(config) {
32
38
  this.config = { ...this.config, ...config };
33
39
  }
34
- getErrorMessage(errorKey, replacements) {
40
+ setConfig(config) {
41
+ this.config = { ...this.config, ...config };
42
+ }
43
+ getErrorMessage(errorKey, interpolateParams) {
35
44
  if (!this.errorMessages[errorKey]) {
36
45
  return `Missing error message to the error with key ${errorKey}`;
37
46
  }
38
- if (this.config.useDefaultReplacer) {
39
- return this.errorMessages[errorKey].replace(/{{(\w+)}}/g, (placeholderWithDelimiters, placeholderWithoutDelimiters) => replacements[placeholderWithoutDelimiters]
40
- ? replacements[placeholderWithoutDelimiters]
47
+ if (this.config.useDefaultReplacer || !this.config.replacer) {
48
+ return this.errorMessages[errorKey].replace(/{{(\w+)}}/g, (placeholderWithDelimiters, placeholderWithoutDelimiters) => interpolateParams[placeholderWithoutDelimiters]
49
+ ? interpolateParams[placeholderWithoutDelimiters]
41
50
  : placeholderWithDelimiters);
42
51
  }
43
- return this.errorMessages[errorKey];
52
+ return this.config.replacer
53
+ ? this.config.replacer(this.errorMessages[errorKey], interpolateParams)
54
+ : this.errorMessages[errorKey];
44
55
  }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilErrorMessagesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
46
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilErrorMessagesService, providedIn: 'root' }); }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgilErrorMessagesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
57
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgilErrorMessagesService, providedIn: 'root' }); }
47
58
  }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilErrorMessagesService, decorators: [{
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgilErrorMessagesService, decorators: [{
49
60
  type: Injectable,
50
61
  args: [{ providedIn: 'root' }]
51
62
  }] });
@@ -129,10 +140,10 @@ class AbstractFormArrayComponent {
129
140
  this.destroy$.next();
130
141
  this.destroy$.complete();
131
142
  }
132
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
133
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AbstractFormArrayComponent, ngImport: i0 }); }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractFormArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
144
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.4", type: AbstractFormArrayComponent, isStandalone: true, ngImport: i0 }); }
134
145
  }
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormArrayComponent, decorators: [{
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractFormArrayComponent, decorators: [{
136
147
  type: Directive
137
148
  }] });
138
149
 
@@ -175,10 +186,10 @@ class AbstractFormComponent {
175
186
  this.destroy$.next();
176
187
  this.destroy$.complete();
177
188
  }
178
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
179
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AbstractFormComponent, inputs: { formViewModel: "formViewModel" }, outputs: { submitted: "submitted" }, ngImport: i0 }); }
189
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
190
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.4", type: AbstractFormComponent, isStandalone: true, inputs: { formViewModel: "formViewModel" }, outputs: { submitted: "submitted" }, ngImport: i0 }); }
180
191
  }
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormComponent, decorators: [{
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractFormComponent, decorators: [{
182
193
  type: Directive
183
194
  }], propDecorators: { formViewModel: [{
184
195
  type: Input
@@ -236,10 +247,10 @@ class AbstractFormGroupComponent {
236
247
  this.destroy$.next();
237
248
  this.destroy$.complete();
238
249
  }
239
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
240
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AbstractFormGroupComponent, ngImport: i0 }); }
250
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractFormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
251
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.4", type: AbstractFormGroupComponent, isStandalone: true, ngImport: i0 }); }
241
252
  }
242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormGroupComponent, decorators: [{
253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractFormGroupComponent, decorators: [{
243
254
  type: Directive
244
255
  }] });
245
256
 
@@ -270,6 +281,7 @@ class AbstractInputComponent {
270
281
  }
271
282
  this.setRequiredState();
272
283
  this.listenStatusChanges();
284
+ this.listenErrorMessagesChanges();
273
285
  }
274
286
  setRequiredState() {
275
287
  if (!this.parentControl || !this.parentControl?.validator) {
@@ -298,6 +310,9 @@ class AbstractInputComponent {
298
310
  listenStatusChanges() {
299
311
  this.parentControl?.statusChanges.pipe(takeUntil$1(this.destroy$)).subscribe(() => this.setErrors());
300
312
  }
313
+ listenErrorMessagesChanges() {
314
+ this.errorMessagesService.errorMessagesChanged$.pipe(takeUntil$1(this.destroy$)).subscribe(() => this.setErrors());
315
+ }
301
316
  setErrors() {
302
317
  if (this.parentControl?.errors) {
303
318
  const errorKey = Object.keys(this.parentControl?.errors)[0];
@@ -315,10 +330,10 @@ class AbstractInputComponent {
315
330
  this.destroy$.next();
316
331
  this.destroy$.complete();
317
332
  }
318
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractInputComponent, deps: [{ token: NgilErrorMessagesService }, { token: i2.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
319
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AbstractInputComponent, inputs: { formControlName: "formControlName", errorMessage: "errorMessage", label: "label", readonly: "readonly", required: "required", disabled: "disabled" }, ngImport: i0 }); }
333
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractInputComponent, deps: [{ token: NgilErrorMessagesService }, { token: i2.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
334
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.4", type: AbstractInputComponent, isStandalone: true, inputs: { formControlName: "formControlName", errorMessage: "errorMessage", label: "label", readonly: "readonly", required: "required", disabled: "disabled" }, ngImport: i0 }); }
320
335
  }
321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractInputComponent, decorators: [{
336
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractInputComponent, decorators: [{
322
337
  type: Directive
323
338
  }], ctorParameters: () => [{ type: NgilErrorMessagesService }, { type: i2.ControlContainer, decorators: [{
324
339
  type: Optional
@@ -337,11 +352,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
337
352
  }] } });
338
353
 
339
354
  class NgilUiCommonFormCvaModule {
340
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilUiCommonFormCvaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
341
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: NgilUiCommonFormCvaModule, imports: [CommonModule] }); }
342
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilUiCommonFormCvaModule, imports: [CommonModule] }); }
355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgilUiCommonFormCvaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
356
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.4", ngImport: i0, type: NgilUiCommonFormCvaModule, imports: [CommonModule] }); }
357
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgilUiCommonFormCvaModule, imports: [CommonModule] }); }
343
358
  }
344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilUiCommonFormCvaModule, decorators: [{
359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgilUiCommonFormCvaModule, decorators: [{
345
360
  type: NgModule,
346
361
  args: [{
347
362
  imports: [CommonModule]
@@ -1 +1 @@
1
- {"version":3,"file":"ngil-form-cva.mjs","sources":["../../../../../../../libs/ngil/ui/common/form-cva/src/lib/error-messages.model.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/error-messages.service.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-array-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-group.component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-input-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/ngil-ui-common-form-cva.module.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/utils/control-value-accessor.util.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/ngil-form-cva.ts"],"sourcesContent":["export interface NgilErrorMessageConfig {\r\n useDefaultReplacer: boolean;\r\n}\r\n\r\nexport const DEFAULT_ERROR_MESSAGES: Record<string, string> = {\r\n required: '{{fieldName}} is required.',\r\n max: 'Maximum {{fieldName}} is {{max}}.',\r\n min: 'Minimum {{fieldName}} is {{min}}.',\r\n maxlength: '{{fieldName}} can be max {{requiredLength}} characters long.',\r\n minlength: '{{fieldName}} must be at least {{requiredLength}} characters long.',\r\n email: '{{fieldName}} must be an email.'\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { DEFAULT_ERROR_MESSAGES, NgilErrorMessageConfig } from './error-messages.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgilErrorMessagesService {\r\n private errorMessages: Record<string, string> = DEFAULT_ERROR_MESSAGES;\r\n private config: NgilErrorMessageConfig = {\r\n useDefaultReplacer: true\r\n };\r\n\r\n addErrorMessages(errorMessages: Record<string, string>) {\r\n this.errorMessages = { ...this.errorMessages, ...errorMessages };\r\n }\r\n\r\n setErrorMessages(errorMessages: Record<string, string>) {\r\n this.errorMessages = errorMessages;\r\n }\r\n\r\n setUserReplacer(config: Partial<NgilErrorMessageConfig>) {\r\n this.config = { ...this.config, ...config };\r\n }\r\n\r\n getErrorMessage(errorKey: string, replacements: Record<string, string>): string {\r\n if (!this.errorMessages[errorKey]) {\r\n return `Missing error message to the error with key ${errorKey}`;\r\n }\r\n\r\n if (this.config.useDefaultReplacer) {\r\n return this.errorMessages[errorKey].replace(\r\n /{{(\\w+)}}/g,\r\n (placeholderWithDelimiters, placeholderWithoutDelimiters) =>\r\n replacements[placeholderWithoutDelimiters]\r\n ? replacements[placeholderWithoutDelimiters]\r\n : placeholderWithDelimiters\r\n );\r\n }\r\n\r\n return this.errorMessages[errorKey];\r\n }\r\n}\r\n","import { AfterViewInit, Directive, OnDestroy } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormGroup,\r\n ValidationErrors,\r\n Validator\r\n} from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FormValueOf } from './form.model';\r\n\r\n/**\r\n *\r\n */\r\n@Directive()\r\nexport abstract class AbstractFormArrayComponent<F extends AbstractControl<any>>\r\n implements AfterViewInit, OnDestroy, ControlValueAccessor, Validator\r\n{\r\n protected abstract createFormArray(): FormArray<F>;\r\n protected abstract createFormArrayItem(item?: FormValueOf<F>): F;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n protected onChange?: (value: FormValueOf<F>[]) => void;\r\n protected onTouched?: () => void;\r\n\r\n formGroup = new FormGroup({\r\n formArray: this.createFormArray()\r\n });\r\n get formArray() {\r\n return this.formGroup.controls.formArray;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.listenValueChanges();\r\n }\r\n\r\n protected listenValueChanges(): void {\r\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n if (this.onChange) {\r\n this.onChange(this.formArray.getRawValue());\r\n }\r\n });\r\n }\r\n\r\n registerOnChange(fn: (value: FormValueOf<F>[]) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n writeValue(items: FormValueOf<F>[] | undefined | null): void {\r\n this.prepareControls(items);\r\n\r\n if (items) {\r\n this.formArray.patchValue(items, { emitEvent: false });\r\n } else {\r\n this.formArray.reset(undefined, { emitEvent: false });\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });\r\n }\r\n\r\n validate(): ValidationErrors | null {\r\n if (this.formArray.invalid) {\r\n return { invalidFormArray: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected prepareControls(items: FormValueOf<F>[] | undefined | null): void {\r\n items = items || [];\r\n\r\n if (this.formArray.value.length < items.length) {\r\n this.addExtraControls(items);\r\n }\r\n\r\n if (this.formArray.value.length > items.length) {\r\n this.removeExtraControls(items);\r\n }\r\n }\r\n\r\n private addExtraControls(items: FormValueOf<F>[]): void {\r\n items.forEach((item, index) => {\r\n const control = this.formArray.at(index);\r\n if (!control) {\r\n this.formArray.push(this.createFormArrayItem(item));\r\n }\r\n });\r\n }\r\n\r\n private removeExtraControls(items: FormValueOf<F>[]): void {\r\n let formArrayIndex = 0;\r\n this.formArray.value.forEach((item, index) => {\r\n if (!items[index]) {\r\n this.formArray.removeAt(formArrayIndex);\r\n } else {\r\n formArrayIndex++;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Directive()\r\nexport abstract class AbstractFormComponent<T> implements OnDestroy, OnInit {\r\n @Input() formViewModel?: T;\r\n\r\n @Output() submitted: EventEmitter<T> = new EventEmitter();\r\n\r\n abstract form: FormGroup;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n\r\n get isSubmitDisabled(): boolean {\r\n return !this.form.valid || this.form.pristine;\r\n }\r\n\r\n get isCancelDisabled(): boolean {\r\n return !this.form.dirty;\r\n }\r\n\r\n protected getFormDefaultValue(model?: T): T | undefined {\r\n return model;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.patchValue(this.getFormDefaultValue(this.formViewModel) || {}, { emitEvent: false });\r\n }\r\n\r\n submit(): void {\r\n if (!this.isSubmitDisabled) {\r\n this.submitted.emit({\r\n ...this.formViewModel,\r\n ...this.form.value\r\n });\r\n } else {\r\n Object.values(this.form.controls).forEach(control => control.updateValueAndValidity());\r\n }\r\n }\r\n\r\n cancel(): void {\r\n if (!this.isCancelDisabled) {\r\n this.form.reset(this.getFormDefaultValue(this.formViewModel), { emitEvent: false });\r\n this.form.markAsPristine();\r\n this.form.markAsUntouched();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","/**\r\n * This class implements ControlValueAccessor logic for a FormGroup.\r\n * NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.\r\n *\r\n * The FormGroup changes will be automatically change the parent FormControl value.\r\n *\r\n * Example:\r\n\r\n */\r\n\r\nimport { AfterViewInit, Directive, OnDestroy } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormGroup, ValidationErrors, Validator } from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FlatFormControlsOf, FormValueOf } from './form.model';\r\n\r\n@Directive()\r\nexport abstract class AbstractFormGroupComponent<\r\n T extends { [K in keyof T]: any },\r\n F extends { [K in keyof T]: AbstractControl<any, any> } = FlatFormControlsOf<T>\r\n> implements ControlValueAccessor, Validator, OnDestroy, AfterViewInit\r\n{\r\n abstract formGroup: FormGroup<F>;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n protected onChange?: (value: FormValueOf<FormGroup<F>>) => void;\r\n protected onTouched?: () => void;\r\n\r\n ngAfterViewInit(): void {\r\n this.listenValueChanges();\r\n }\r\n\r\n protected listenValueChanges(): void {\r\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n if (this.onChange) {\r\n this.onChange(this.formGroup.getRawValue());\r\n }\r\n });\r\n }\r\n\r\n registerOnChange(fn: (value: FormValueOf<FormGroup<F>>) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n writeValue(formValue: T | undefined | null): void {\r\n if (formValue) {\r\n this.formGroup.patchValue(formValue, { emitEvent: false });\r\n } else {\r\n this.formGroup.reset(undefined, { emitEvent: false });\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });\r\n }\r\n\r\n validate(): ValidationErrors | null {\r\n if (this.formGroup.invalid) {\r\n return { invalidFormGroup: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Directive, Input, OnDestroy, OnInit, Optional } from '@angular/core';\r\nimport { AbstractControl, ControlContainer, ControlValueAccessor, FormArray } from '@angular/forms';\r\nimport { BehaviorSubject, Subject, combineLatest } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { NgilErrorMessagesService } from '../error-messages.service';\r\n\r\n@Directive()\r\nexport abstract class AbstractInputComponent<T = string> implements OnInit, ControlValueAccessor, OnDestroy {\r\n @Input() formControlName = '';\r\n @Input() set errorMessage(errorMessage: string) {\r\n this.errorMessage$.next(errorMessage);\r\n }\r\n @Input() label = '';\r\n @Input() readonly = false;\r\n @Input() required = false;\r\n @Input() disabled = false;\r\n\r\n protected parentControl?: AbstractControl | null;\r\n protected onChange?: (value: T | null) => void;\r\n protected onTouched?: () => void;\r\n protected readonly destroy$ = new Subject<void>();\r\n protected readonly errorMessage$ = new BehaviorSubject<string>('');\r\n\r\n model$ = combineLatest({\r\n errorMessage: this.errorMessage$\r\n });\r\n\r\n constructor(\r\n private readonly errorMessagesService: NgilErrorMessagesService,\r\n @Optional() private readonly controlContainer?: ControlContainer\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (this.controlContainer?.control instanceof FormArray) {\r\n this.parentControl = this.controlContainer?.control.at(+this.formControlName);\r\n } else {\r\n this.parentControl = this.controlContainer?.control?.get(this.formControlName);\r\n }\r\n this.setRequiredState();\r\n this.listenStatusChanges();\r\n }\r\n\r\n private setRequiredState(): void {\r\n if (!this.parentControl || !this.parentControl?.validator) {\r\n return;\r\n }\r\n\r\n const validators = this.parentControl?.validator({ value: '' } as AbstractControl);\r\n if (validators && Object.keys(validators).includes('required')) {\r\n this.required = true;\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n if (this.onTouched) {\r\n this.onTouched();\r\n }\r\n this.setErrors();\r\n }\r\n\r\n registerOnChange(fn: (value: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n abstract writeValue(value: T): void;\r\n\r\n protected listenStatusChanges(): void {\r\n this.parentControl?.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(() => this.setErrors());\r\n }\r\n\r\n protected setErrors(): void {\r\n if (this.parentControl?.errors) {\r\n const errorKey = Object.keys(this.parentControl?.errors)[0];\r\n const errorObj = this.parentControl?.errors[`${errorKey}`];\r\n this.errorMessage$.next(\r\n this.errorMessagesService.getErrorMessage(errorKey, {\r\n fieldName: this.label,\r\n ...errorObj\r\n })\r\n );\r\n } else {\r\n this.errorMessage$.next('');\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [CommonModule]\r\n})\r\nexport class NgilUiCommonFormCvaModule {}\r\n","import { forwardRef, Type } from '@angular/core';\r\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport function createControlValueAccessorProviders(component: Type<unknown>) {\r\n return [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => component),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => component),\r\n multi: true\r\n }\r\n ];\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["takeUntil","i1.NgilErrorMessagesService"],"mappings":"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"}
1
+ {"version":3,"file":"ngil-form-cva.mjs","sources":["../../../../../../../libs/ngil/ui/common/form-cva/src/lib/error-messages.model.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/error-messages.service.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-array-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-group.component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-input-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/ngil-ui-common-form-cva.module.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/utils/control-value-accessor.util.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/ngil-form-cva.ts"],"sourcesContent":["export interface NgilErrorMessageConfig {\r\n /**\r\n * @deprecated\r\n * set replacer property to override the default replacer\r\n */\r\n useDefaultReplacer?: boolean;\r\n replacer?: (i18nKey: string, replacements: Record<string, string>) => string;\r\n}\r\n\r\nexport const DEFAULT_ERROR_MESSAGES: Record<string, string> = {\r\n required: '{{fieldName}} is required.',\r\n max: 'Maximum {{fieldName}} is {{max}}.',\r\n min: 'Minimum {{fieldName}} is {{min}}.',\r\n maxlength: '{{fieldName}} can be max {{requiredLength}} characters long.',\r\n minlength: '{{fieldName}} must be at least {{requiredLength}} characters long.',\r\n email: '{{fieldName}} must be an email.'\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { DEFAULT_ERROR_MESSAGES, NgilErrorMessageConfig } from './error-messages.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgilErrorMessagesService {\r\n private errorMessages: Record<string, string> = DEFAULT_ERROR_MESSAGES;\r\n private config: NgilErrorMessageConfig = {\r\n useDefaultReplacer: true\r\n };\r\n private errorMessagesChangedSubject = new Subject<void>();\r\n errorMessagesChanged$ = this.errorMessagesChangedSubject.asObservable();\r\n\r\n addErrorMessages(errorMessages: Record<string, string>) {\r\n this.errorMessages = { ...this.errorMessages, ...errorMessages };\r\n }\r\n\r\n setErrorMessages(errorMessages: Record<string, string>) {\r\n this.errorMessages = errorMessages;\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * use setConfig instead\r\n */\r\n setUserReplacer(config: Partial<NgilErrorMessageConfig>) {\r\n this.config = { ...this.config, ...config };\r\n }\r\n\r\n setConfig(config: Partial<NgilErrorMessageConfig>) {\r\n this.config = { ...this.config, ...config };\r\n }\r\n\r\n getErrorMessage(errorKey: string, interpolateParams: Record<string, string>): string {\r\n if (!this.errorMessages[errorKey]) {\r\n return `Missing error message to the error with key ${errorKey}`;\r\n }\r\n\r\n if (this.config.useDefaultReplacer || !this.config.replacer) {\r\n return this.errorMessages[errorKey].replace(\r\n /{{(\\w+)}}/g,\r\n (placeholderWithDelimiters, placeholderWithoutDelimiters) =>\r\n interpolateParams[placeholderWithoutDelimiters]\r\n ? interpolateParams[placeholderWithoutDelimiters]\r\n : placeholderWithDelimiters\r\n );\r\n }\r\n\r\n return this.config.replacer\r\n ? this.config.replacer(this.errorMessages[errorKey], interpolateParams)\r\n : this.errorMessages[errorKey];\r\n }\r\n}\r\n","import { AfterViewInit, Directive, OnDestroy } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormGroup,\r\n ValidationErrors,\r\n Validator\r\n} from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FormValueOf } from './form.model';\r\n\r\n/**\r\n *\r\n */\r\n@Directive()\r\nexport abstract class AbstractFormArrayComponent<F extends AbstractControl<any>>\r\n implements AfterViewInit, OnDestroy, ControlValueAccessor, Validator\r\n{\r\n protected abstract createFormArray(): FormArray<F>;\r\n protected abstract createFormArrayItem(item?: FormValueOf<F>): F;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n protected onChange?: (value: FormValueOf<F>[]) => void;\r\n protected onTouched?: () => void;\r\n\r\n formGroup = new FormGroup({\r\n formArray: this.createFormArray()\r\n });\r\n get formArray() {\r\n return this.formGroup.controls.formArray;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.listenValueChanges();\r\n }\r\n\r\n protected listenValueChanges(): void {\r\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n if (this.onChange) {\r\n this.onChange(this.formArray.getRawValue());\r\n }\r\n });\r\n }\r\n\r\n registerOnChange(fn: (value: FormValueOf<F>[]) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n writeValue(items: FormValueOf<F>[] | undefined | null): void {\r\n this.prepareControls(items);\r\n\r\n if (items) {\r\n this.formArray.patchValue(items, { emitEvent: false });\r\n } else {\r\n this.formArray.reset(undefined, { emitEvent: false });\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });\r\n }\r\n\r\n validate(): ValidationErrors | null {\r\n if (this.formArray.invalid) {\r\n return { invalidFormArray: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected prepareControls(items: FormValueOf<F>[] | undefined | null): void {\r\n items = items || [];\r\n\r\n if (this.formArray.value.length < items.length) {\r\n this.addExtraControls(items);\r\n }\r\n\r\n if (this.formArray.value.length > items.length) {\r\n this.removeExtraControls(items);\r\n }\r\n }\r\n\r\n private addExtraControls(items: FormValueOf<F>[]): void {\r\n items.forEach((item, index) => {\r\n const control = this.formArray.at(index);\r\n if (!control) {\r\n this.formArray.push(this.createFormArrayItem(item));\r\n }\r\n });\r\n }\r\n\r\n private removeExtraControls(items: FormValueOf<F>[]): void {\r\n let formArrayIndex = 0;\r\n this.formArray.value.forEach((item, index) => {\r\n if (!items[index]) {\r\n this.formArray.removeAt(formArrayIndex);\r\n } else {\r\n formArrayIndex++;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Directive()\r\nexport abstract class AbstractFormComponent<T> implements OnDestroy, OnInit {\r\n @Input() formViewModel?: T;\r\n\r\n @Output() submitted: EventEmitter<T> = new EventEmitter();\r\n\r\n abstract form: FormGroup;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n\r\n get isSubmitDisabled(): boolean {\r\n return !this.form.valid || this.form.pristine;\r\n }\r\n\r\n get isCancelDisabled(): boolean {\r\n return !this.form.dirty;\r\n }\r\n\r\n protected getFormDefaultValue(model?: T): T | undefined {\r\n return model;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.patchValue(this.getFormDefaultValue(this.formViewModel) || {}, { emitEvent: false });\r\n }\r\n\r\n submit(): void {\r\n if (!this.isSubmitDisabled) {\r\n this.submitted.emit({\r\n ...this.formViewModel,\r\n ...this.form.value\r\n });\r\n } else {\r\n Object.values(this.form.controls).forEach(control => control.updateValueAndValidity());\r\n }\r\n }\r\n\r\n cancel(): void {\r\n if (!this.isCancelDisabled) {\r\n this.form.reset(this.getFormDefaultValue(this.formViewModel), { emitEvent: false });\r\n this.form.markAsPristine();\r\n this.form.markAsUntouched();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","/**\r\n * This class implements ControlValueAccessor logic for a FormGroup.\r\n * NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.\r\n *\r\n * The FormGroup changes will be automatically change the parent FormControl value.\r\n *\r\n * Example:\r\n\r\n */\r\n\r\nimport { AfterViewInit, Directive, OnDestroy } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormGroup, ValidationErrors, Validator } from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FlatFormControlsOf, FormValueOf } from './form.model';\r\n\r\n@Directive()\r\nexport abstract class AbstractFormGroupComponent<\r\n T extends { [K in keyof T]: any },\r\n F extends { [K in keyof T]: AbstractControl<any, any> } = FlatFormControlsOf<T>\r\n> implements ControlValueAccessor, Validator, OnDestroy, AfterViewInit\r\n{\r\n abstract formGroup: FormGroup<F>;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n protected onChange?: (value: FormValueOf<FormGroup<F>>) => void;\r\n protected onTouched?: () => void;\r\n\r\n ngAfterViewInit(): void {\r\n this.listenValueChanges();\r\n }\r\n\r\n protected listenValueChanges(): void {\r\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n if (this.onChange) {\r\n this.onChange(this.formGroup.getRawValue());\r\n }\r\n });\r\n }\r\n\r\n registerOnChange(fn: (value: FormValueOf<FormGroup<F>>) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n writeValue(formValue: T | undefined | null): void {\r\n if (formValue) {\r\n this.formGroup.patchValue(formValue, { emitEvent: false });\r\n } else {\r\n this.formGroup.reset(undefined, { emitEvent: false });\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });\r\n }\r\n\r\n validate(): ValidationErrors | null {\r\n if (this.formGroup.invalid) {\r\n return { invalidFormGroup: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Directive, Input, OnDestroy, OnInit, Optional } from '@angular/core';\r\nimport { AbstractControl, ControlContainer, ControlValueAccessor, FormArray } from '@angular/forms';\r\nimport { BehaviorSubject, Subject, combineLatest } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { NgilErrorMessagesService } from '../error-messages.service';\r\n\r\n@Directive()\r\nexport abstract class AbstractInputComponent<T = string> implements OnInit, ControlValueAccessor, OnDestroy {\r\n @Input() formControlName = '';\r\n @Input() set errorMessage(errorMessage: string) {\r\n this.errorMessage$.next(errorMessage);\r\n }\r\n @Input() label = '';\r\n @Input() readonly = false;\r\n @Input() required = false;\r\n @Input() disabled = false;\r\n\r\n protected parentControl?: AbstractControl | null;\r\n protected onChange?: (value: T | null) => void;\r\n protected onTouched?: () => void;\r\n protected readonly destroy$ = new Subject<void>();\r\n protected readonly errorMessage$ = new BehaviorSubject<string>('');\r\n\r\n model$ = combineLatest({\r\n errorMessage: this.errorMessage$\r\n });\r\n\r\n constructor(\r\n private readonly errorMessagesService: NgilErrorMessagesService,\r\n @Optional() private readonly controlContainer?: ControlContainer\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (this.controlContainer?.control instanceof FormArray) {\r\n this.parentControl = this.controlContainer?.control.at(+this.formControlName);\r\n } else {\r\n this.parentControl = this.controlContainer?.control?.get(this.formControlName);\r\n }\r\n this.setRequiredState();\r\n this.listenStatusChanges();\r\n this.listenErrorMessagesChanges();\r\n }\r\n\r\n private setRequiredState(): void {\r\n if (!this.parentControl || !this.parentControl?.validator) {\r\n return;\r\n }\r\n\r\n const validators = this.parentControl?.validator({ value: '' } as AbstractControl);\r\n if (validators && Object.keys(validators).includes('required')) {\r\n this.required = true;\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n if (this.onTouched) {\r\n this.onTouched();\r\n }\r\n this.setErrors();\r\n }\r\n\r\n registerOnChange(fn: (value: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n abstract writeValue(value: T): void;\r\n\r\n protected listenStatusChanges(): void {\r\n this.parentControl?.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(() => this.setErrors());\r\n }\r\n\r\n protected listenErrorMessagesChanges() {\r\n this.errorMessagesService.errorMessagesChanged$.pipe(takeUntil(this.destroy$)).subscribe(() => this.setErrors());\r\n }\r\n\r\n protected setErrors(): void {\r\n if (this.parentControl?.errors) {\r\n const errorKey = Object.keys(this.parentControl?.errors)[0];\r\n const errorObj = this.parentControl?.errors[`${errorKey}`];\r\n this.errorMessage$.next(\r\n this.errorMessagesService.getErrorMessage(errorKey, {\r\n fieldName: this.label,\r\n ...errorObj\r\n })\r\n );\r\n } else {\r\n this.errorMessage$.next('');\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [CommonModule]\r\n})\r\nexport class NgilUiCommonFormCvaModule {}\r\n","import { forwardRef, Type } from '@angular/core';\r\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport function createControlValueAccessorProviders(component: Type<unknown>) {\r\n return [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => component),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => component),\r\n multi: true\r\n }\r\n ];\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["takeUntil","i1.NgilErrorMessagesService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngil/form-cva",
3
- "version": "3.0.1",
3
+ "version": "5.0.1",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0"
6
6
  },
@@ -11,21 +11,19 @@
11
11
  },
12
12
  "homepage": "https://github.com/allanartuso/ngdux/tree/master/libs/ngil/ui/common/cva#readme",
13
13
  "peerDependencies": {
14
- "@angular/core": "^17.0.0",
15
- "@angular/forms": "^17.0.0",
16
- "rxjs": "^7.0.0",
17
- "@angular/common": "^17.0.0"
14
+ "@angular/core": ">=17.0.0",
15
+ "@angular/forms": ">=17.0.0",
16
+ "rxjs": ">=7.0.0",
17
+ "@angular/common": ">=17.0.0"
18
18
  },
19
19
  "module": "fesm2022/ngil-form-cva.mjs",
20
- "typings": "index.d.ts",
20
+ "typings": "types/ngil-form-cva.d.ts",
21
21
  "exports": {
22
22
  "./package.json": {
23
23
  "default": "./package.json"
24
24
  },
25
25
  ".": {
26
- "types": "./index.d.ts",
27
- "esm2022": "./esm2022/ngil-form-cva.mjs",
28
- "esm": "./esm2022/ngil-form-cva.mjs",
26
+ "types": "./types/ngil-form-cva.d.ts",
29
27
  "default": "./fesm2022/ngil-form-cva.mjs"
30
28
  }
31
29
  },
@@ -0,0 +1,175 @@
1
+ import * as rxjs from 'rxjs';
2
+ import { Subject, BehaviorSubject } from 'rxjs';
3
+ import * as i0 from '@angular/core';
4
+ import { AfterViewInit, OnDestroy, OnInit, EventEmitter, Type } from '@angular/core';
5
+ import * as _angular_forms from '@angular/forms';
6
+ import { AbstractControl, FormControl, FormGroup, ControlValueAccessor, Validator, FormArray, ValidationErrors, ControlContainer } from '@angular/forms';
7
+ import * as i1 from '@angular/common';
8
+
9
+ interface NgilErrorMessageConfig {
10
+ /**
11
+ * @deprecated
12
+ * set replacer property to override the default replacer
13
+ */
14
+ useDefaultReplacer?: boolean;
15
+ replacer?: (i18nKey: string, replacements: Record<string, string>) => string;
16
+ }
17
+ declare const DEFAULT_ERROR_MESSAGES: Record<string, string>;
18
+
19
+ declare class NgilErrorMessagesService {
20
+ private errorMessages;
21
+ private config;
22
+ private errorMessagesChangedSubject;
23
+ errorMessagesChanged$: rxjs.Observable<void>;
24
+ addErrorMessages(errorMessages: Record<string, string>): void;
25
+ setErrorMessages(errorMessages: Record<string, string>): void;
26
+ /**
27
+ * @deprecated
28
+ * use setConfig instead
29
+ */
30
+ setUserReplacer(config: Partial<NgilErrorMessageConfig>): void;
31
+ setConfig(config: Partial<NgilErrorMessageConfig>): void;
32
+ getErrorMessage(errorKey: string, interpolateParams: Record<string, string>): string;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgilErrorMessagesService, never>;
34
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgilErrorMessagesService>;
35
+ }
36
+
37
+ /**
38
+ * Create FormControl or FormGroup types to used in a FormGroup using a interface
39
+ */
40
+ type FormControlsOf<T extends Record<string, any>> = {
41
+ [K in keyof Required<T>]: Required<T>[K] extends Record<string, any> ? Required<T>[K] extends any[] ? FormControl<T[K] | null> : FormGroup<FormControlsOf<Required<T>[K]>> : FormControl<T[K] | null>;
42
+ };
43
+ /**
44
+ * Wrap every property in the Record T in a FormControl type
45
+ */
46
+ type FlatFormControlsOf<T extends Record<string, any>> = {
47
+ [K in keyof T]: FormControl<T[K] | null>;
48
+ };
49
+ /**
50
+ * Gives the form value type
51
+ */
52
+ type FormValueOf<T extends AbstractControl<any>> = T['value'];
53
+
54
+ /**
55
+ *
56
+ */
57
+ declare abstract class AbstractFormArrayComponent<F extends AbstractControl<any>> implements AfterViewInit, OnDestroy, ControlValueAccessor, Validator {
58
+ protected abstract createFormArray(): FormArray<F>;
59
+ protected abstract createFormArrayItem(item?: FormValueOf<F>): F;
60
+ protected readonly destroy$: Subject<void>;
61
+ protected onChange?: (value: FormValueOf<F>[]) => void;
62
+ protected onTouched?: () => void;
63
+ formGroup: FormGroup<{
64
+ formArray: FormArray<F>;
65
+ }>;
66
+ get formArray(): FormArray<F>;
67
+ ngAfterViewInit(): void;
68
+ protected listenValueChanges(): void;
69
+ registerOnChange(fn: (value: FormValueOf<F>[]) => void): void;
70
+ registerOnTouched(fn: () => void): void;
71
+ writeValue(items: FormValueOf<F>[] | undefined | null): void;
72
+ setDisabledState(isDisabled: boolean): void;
73
+ validate(): ValidationErrors | null;
74
+ protected prepareControls(items: FormValueOf<F>[] | undefined | null): void;
75
+ private addExtraControls;
76
+ private removeExtraControls;
77
+ ngOnDestroy(): void;
78
+ static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormArrayComponent<any>, never>;
79
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormArrayComponent<any>, never, never, {}, {}, never, never, true, never>;
80
+ }
81
+
82
+ declare abstract class AbstractFormComponent<T> implements OnDestroy, OnInit {
83
+ formViewModel?: T;
84
+ submitted: EventEmitter<T>;
85
+ abstract form: FormGroup;
86
+ protected readonly destroy$: Subject<void>;
87
+ get isSubmitDisabled(): boolean;
88
+ get isCancelDisabled(): boolean;
89
+ protected getFormDefaultValue(model?: T): T | undefined;
90
+ ngOnInit(): void;
91
+ submit(): void;
92
+ cancel(): void;
93
+ ngOnDestroy(): void;
94
+ static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormComponent<any>, never>;
95
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormComponent<any>, never, never, { "formViewModel": { "alias": "formViewModel"; "required": false; }; }, { "submitted": "submitted"; }, never, never, true, never>;
96
+ }
97
+
98
+ /**
99
+ * This class implements ControlValueAccessor logic for a FormGroup.
100
+ * NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.
101
+ *
102
+ * The FormGroup changes will be automatically change the parent FormControl value.
103
+ *
104
+ * Example:
105
+
106
+ */
107
+
108
+ declare abstract class AbstractFormGroupComponent<T extends {
109
+ [K in keyof T]: any;
110
+ }, F extends {
111
+ [K in keyof T]: AbstractControl<any, any>;
112
+ } = FlatFormControlsOf<T>> implements ControlValueAccessor, Validator, OnDestroy, AfterViewInit {
113
+ abstract formGroup: FormGroup<F>;
114
+ protected readonly destroy$: Subject<void>;
115
+ protected onChange?: (value: FormValueOf<FormGroup<F>>) => void;
116
+ protected onTouched?: () => void;
117
+ ngAfterViewInit(): void;
118
+ protected listenValueChanges(): void;
119
+ registerOnChange(fn: (value: FormValueOf<FormGroup<F>>) => void): void;
120
+ registerOnTouched(fn: () => void): void;
121
+ writeValue(formValue: T | undefined | null): void;
122
+ setDisabledState(isDisabled: boolean): void;
123
+ validate(): ValidationErrors | null;
124
+ ngOnDestroy(): void;
125
+ static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormGroupComponent<any, any>, never>;
126
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormGroupComponent<any, any>, never, never, {}, {}, never, never, true, never>;
127
+ }
128
+
129
+ declare abstract class AbstractInputComponent<T = string> implements OnInit, ControlValueAccessor, OnDestroy {
130
+ private readonly errorMessagesService;
131
+ private readonly controlContainer?;
132
+ formControlName: string;
133
+ set errorMessage(errorMessage: string);
134
+ label: string;
135
+ readonly: boolean;
136
+ required: boolean;
137
+ disabled: boolean;
138
+ protected parentControl?: AbstractControl | null;
139
+ protected onChange?: (value: T | null) => void;
140
+ protected onTouched?: () => void;
141
+ protected readonly destroy$: Subject<void>;
142
+ protected readonly errorMessage$: BehaviorSubject<string>;
143
+ model$: rxjs.Observable<{
144
+ errorMessage: string;
145
+ }>;
146
+ constructor(errorMessagesService: NgilErrorMessagesService, controlContainer?: ControlContainer | undefined);
147
+ ngOnInit(): void;
148
+ private setRequiredState;
149
+ onBlur(): void;
150
+ registerOnChange(fn: (value: T | null) => void): void;
151
+ registerOnTouched(fn: () => void): void;
152
+ setDisabledState(isDisabled: boolean): void;
153
+ abstract writeValue(value: T): void;
154
+ protected listenStatusChanges(): void;
155
+ protected listenErrorMessagesChanges(): void;
156
+ protected setErrors(): void;
157
+ ngOnDestroy(): void;
158
+ static ɵfac: i0.ɵɵFactoryDeclaration<AbstractInputComponent<any>, [null, { optional: true; }]>;
159
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractInputComponent<any>, never, never, { "formControlName": { "alias": "formControlName"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "label": { "alias": "label"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
160
+ }
161
+
162
+ declare class NgilUiCommonFormCvaModule {
163
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgilUiCommonFormCvaModule, never>;
164
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NgilUiCommonFormCvaModule, never, [typeof i1.CommonModule], never>;
165
+ static ɵinj: i0.ɵɵInjectorDeclaration<NgilUiCommonFormCvaModule>;
166
+ }
167
+
168
+ declare function createControlValueAccessorProviders(component: Type<unknown>): {
169
+ provide: i0.InjectionToken<readonly _angular_forms.ControlValueAccessor[]>;
170
+ useExisting: Type<any>;
171
+ multi: boolean;
172
+ }[];
173
+
174
+ export { AbstractFormArrayComponent, AbstractFormComponent, AbstractFormGroupComponent, AbstractInputComponent, DEFAULT_ERROR_MESSAGES, NgilErrorMessagesService, NgilUiCommonFormCvaModule, createControlValueAccessorProviders };
175
+ export type { FlatFormControlsOf, FormControlsOf, FormValueOf, NgilErrorMessageConfig };
package/esm2022/index.mjs DELETED
@@ -1,10 +0,0 @@
1
- export * from './lib/error-messages.model';
2
- export * from './lib/error-messages.service';
3
- export * from './lib/models/abstract-form-array-component';
4
- export * from './lib/models/abstract-form-component';
5
- export * from './lib/models/abstract-form-group.component';
6
- export * from './lib/models/abstract-input-component';
7
- export * from './lib/models/form.model';
8
- export * from './lib/ngil-ui-common-form-cva.module';
9
- export * from './lib/utils/control-value-accessor.util';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvY29tbW9uL2Zvcm0tY3ZhL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2Vycm9yLW1lc3NhZ2VzLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZXJyb3ItbWVzc2FnZXMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hYnN0cmFjdC1mb3JtLWFycmF5LWNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hYnN0cmFjdC1mb3JtLWNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hYnN0cmFjdC1mb3JtLWdyb3VwLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hYnN0cmFjdC1pbnB1dC1jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25naWwtdWktY29tbW9uLWZvcm0tY3ZhLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2NvbnRyb2wtdmFsdWUtYWNjZXNzb3IudXRpbCc7XHJcbiJdfQ==
@@ -1,9 +0,0 @@
1
- export const DEFAULT_ERROR_MESSAGES = {
2
- required: '{{fieldName}} is required.',
3
- max: 'Maximum {{fieldName}} is {{max}}.',
4
- min: 'Minimum {{fieldName}} is {{min}}.',
5
- maxlength: '{{fieldName}} can be max {{requiredLength}} characters long.',
6
- minlength: '{{fieldName}} must be at least {{requiredLength}} characters long.',
7
- email: '{{fieldName}} must be an email.'
8
- };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbWVzc2FnZXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvY29tbW9uL2Zvcm0tY3ZhL3NyYy9saWIvZXJyb3ItbWVzc2FnZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQTJCO0lBQzVELFFBQVEsRUFBRSw0QkFBNEI7SUFDdEMsR0FBRyxFQUFFLG1DQUFtQztJQUN4QyxHQUFHLEVBQUUsbUNBQW1DO0lBQ3hDLFNBQVMsRUFBRSw4REFBOEQ7SUFDekUsU0FBUyxFQUFFLG9FQUFvRTtJQUMvRSxLQUFLLEVBQUUsaUNBQWlDO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE5naWxFcnJvck1lc3NhZ2VDb25maWcge1xyXG4gIHVzZURlZmF1bHRSZXBsYWNlcjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVJST1JfTUVTU0FHRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgcmVxdWlyZWQ6ICd7e2ZpZWxkTmFtZX19IGlzIHJlcXVpcmVkLicsXHJcbiAgbWF4OiAnTWF4aW11bSB7e2ZpZWxkTmFtZX19IGlzIHt7bWF4fX0uJyxcclxuICBtaW46ICdNaW5pbXVtIHt7ZmllbGROYW1lfX0gaXMge3ttaW59fS4nLFxyXG4gIG1heGxlbmd0aDogJ3t7ZmllbGROYW1lfX0gY2FuIGJlIG1heCB7e3JlcXVpcmVkTGVuZ3RofX0gY2hhcmFjdGVycyBsb25nLicsXHJcbiAgbWlubGVuZ3RoOiAne3tmaWVsZE5hbWV9fSBtdXN0IGJlIGF0IGxlYXN0IHt7cmVxdWlyZWRMZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuJyxcclxuICBlbWFpbDogJ3t7ZmllbGROYW1lfX0gbXVzdCBiZSBhbiBlbWFpbC4nXHJcbn07XHJcbiJdfQ==
@@ -1,38 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { DEFAULT_ERROR_MESSAGES } from './error-messages.model';
3
- import * as i0 from "@angular/core";
4
- export class NgilErrorMessagesService {
5
- constructor() {
6
- this.errorMessages = DEFAULT_ERROR_MESSAGES;
7
- this.config = {
8
- useDefaultReplacer: true
9
- };
10
- }
11
- addErrorMessages(errorMessages) {
12
- this.errorMessages = { ...this.errorMessages, ...errorMessages };
13
- }
14
- setErrorMessages(errorMessages) {
15
- this.errorMessages = errorMessages;
16
- }
17
- setUserReplacer(config) {
18
- this.config = { ...this.config, ...config };
19
- }
20
- getErrorMessage(errorKey, replacements) {
21
- if (!this.errorMessages[errorKey]) {
22
- return `Missing error message to the error with key ${errorKey}`;
23
- }
24
- if (this.config.useDefaultReplacer) {
25
- return this.errorMessages[errorKey].replace(/{{(\w+)}}/g, (placeholderWithDelimiters, placeholderWithoutDelimiters) => replacements[placeholderWithoutDelimiters]
26
- ? replacements[placeholderWithoutDelimiters]
27
- : placeholderWithDelimiters);
28
- }
29
- return this.errorMessages[errorKey];
30
- }
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilErrorMessagesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
32
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilErrorMessagesService, providedIn: 'root' }); }
33
- }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilErrorMessagesService, decorators: [{
35
- type: Injectable,
36
- args: [{ providedIn: 'root' }]
37
- }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbWVzc2FnZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdpbC91aS9jb21tb24vZm9ybS1jdmEvc3JjL2xpYi9lcnJvci1tZXNzYWdlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUEwQixNQUFNLHdCQUF3QixDQUFDOztBQUd4RixNQUFNLE9BQU8sd0JBQXdCO0lBRHJDO1FBRVUsa0JBQWEsR0FBMkIsc0JBQXNCLENBQUM7UUFDL0QsV0FBTSxHQUEyQjtZQUN2QyxrQkFBa0IsRUFBRSxJQUFJO1NBQ3pCLENBQUM7S0ErQkg7SUE3QkMsZ0JBQWdCLENBQUMsYUFBcUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBQ25FLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxhQUFxQztRQUNwRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQXVDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQWdCLEVBQUUsWUFBb0M7UUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLCtDQUErQyxRQUFRLEVBQUUsQ0FBQztRQUNuRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FDekMsWUFBWSxFQUNaLENBQUMseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsRUFBRSxDQUMxRCxZQUFZLENBQUMsNEJBQTRCLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyx5QkFBeUIsQ0FDaEMsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs4R0FsQ1Usd0JBQXdCO2tIQUF4Qix3QkFBd0IsY0FEWCxNQUFNOzsyRkFDbkIsd0JBQXdCO2tCQURwQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUywgTmdpbEVycm9yTWVzc2FnZUNvbmZpZyB9IGZyb20gJy4vZXJyb3ItbWVzc2FnZXMubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE5naWxFcnJvck1lc3NhZ2VzU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBlcnJvck1lc3NhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUztcclxuICBwcml2YXRlIGNvbmZpZzogTmdpbEVycm9yTWVzc2FnZUNvbmZpZyA9IHtcclxuICAgIHVzZURlZmF1bHRSZXBsYWNlcjogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGFkZEVycm9yTWVzc2FnZXMoZXJyb3JNZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0geyAuLi50aGlzLmVycm9yTWVzc2FnZXMsIC4uLmVycm9yTWVzc2FnZXMgfTtcclxuICB9XHJcblxyXG4gIHNldEVycm9yTWVzc2FnZXMoZXJyb3JNZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlcztcclxuICB9XHJcblxyXG4gIHNldFVzZXJSZXBsYWNlcihjb25maWc6IFBhcnRpYWw8TmdpbEVycm9yTWVzc2FnZUNvbmZpZz4pIHtcclxuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgLi4uY29uZmlnIH07XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoZXJyb3JLZXk6IHN0cmluZywgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5lcnJvck1lc3NhZ2VzW2Vycm9yS2V5XSkge1xyXG4gICAgICByZXR1cm4gYE1pc3NpbmcgZXJyb3IgbWVzc2FnZSB0byB0aGUgZXJyb3Igd2l0aCBrZXkgJHtlcnJvcktleX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy51c2VEZWZhdWx0UmVwbGFjZXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlc1tlcnJvcktleV0ucmVwbGFjZShcclxuICAgICAgICAve3soXFx3Kyl9fS9nLFxyXG4gICAgICAgIChwbGFjZWhvbGRlcldpdGhEZWxpbWl0ZXJzLCBwbGFjZWhvbGRlcldpdGhvdXREZWxpbWl0ZXJzKSA9PlxyXG4gICAgICAgICAgcmVwbGFjZW1lbnRzW3BsYWNlaG9sZGVyV2l0aG91dERlbGltaXRlcnNdXHJcbiAgICAgICAgICAgID8gcmVwbGFjZW1lbnRzW3BsYWNlaG9sZGVyV2l0aG91dERlbGltaXRlcnNdXHJcbiAgICAgICAgICAgIDogcGxhY2Vob2xkZXJXaXRoRGVsaW1pdGVyc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmVycm9yTWVzc2FnZXNbZXJyb3JLZXldO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,90 +0,0 @@
1
- import { Directive } from '@angular/core';
2
- import { FormGroup } from '@angular/forms';
3
- import { Subject, takeUntil } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- /**
6
- *
7
- */
8
- export class AbstractFormArrayComponent {
9
- constructor() {
10
- this.destroy$ = new Subject();
11
- this.formGroup = new FormGroup({
12
- formArray: this.createFormArray()
13
- });
14
- }
15
- get formArray() {
16
- return this.formGroup.controls.formArray;
17
- }
18
- ngAfterViewInit() {
19
- this.listenValueChanges();
20
- }
21
- listenValueChanges() {
22
- this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {
23
- if (this.onChange) {
24
- this.onChange(this.formArray.getRawValue());
25
- }
26
- });
27
- }
28
- registerOnChange(fn) {
29
- this.onChange = fn;
30
- }
31
- registerOnTouched(fn) {
32
- this.onTouched = fn;
33
- }
34
- writeValue(items) {
35
- this.prepareControls(items);
36
- if (items) {
37
- this.formArray.patchValue(items, { emitEvent: false });
38
- }
39
- else {
40
- this.formArray.reset(undefined, { emitEvent: false });
41
- }
42
- }
43
- setDisabledState(isDisabled) {
44
- isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });
45
- }
46
- validate() {
47
- if (this.formArray.invalid) {
48
- return { invalidFormArray: true };
49
- }
50
- return null;
51
- }
52
- prepareControls(items) {
53
- items = items || [];
54
- if (this.formArray.value.length < items.length) {
55
- this.addExtraControls(items);
56
- }
57
- if (this.formArray.value.length > items.length) {
58
- this.removeExtraControls(items);
59
- }
60
- }
61
- addExtraControls(items) {
62
- items.forEach((item, index) => {
63
- const control = this.formArray.at(index);
64
- if (!control) {
65
- this.formArray.push(this.createFormArrayItem(item));
66
- }
67
- });
68
- }
69
- removeExtraControls(items) {
70
- let formArrayIndex = 0;
71
- this.formArray.value.forEach((item, index) => {
72
- if (!items[index]) {
73
- this.formArray.removeAt(formArrayIndex);
74
- }
75
- else {
76
- formArrayIndex++;
77
- }
78
- });
79
- }
80
- ngOnDestroy() {
81
- this.destroy$.next();
82
- this.destroy$.complete();
83
- }
84
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
85
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AbstractFormArrayComponent, ngImport: i0 }); }
86
- }
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormArrayComponent, decorators: [{
88
- type: Directive
89
- }] });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZm9ybS1hcnJheS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvY29tbW9uL2Zvcm0tY3ZhL3NyYy9saWIvbW9kZWxzL2Fic3RyYWN0LWZvcm0tYXJyYXktY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFJTCxTQUFTLEVBR1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHMUM7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLDBCQUEwQjtJQURoRDtRQU9xQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUlsRCxjQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDeEIsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7U0FDbEMsQ0FBQyxDQUFDO0tBbUZKO0lBbEZDLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDeEUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNM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QzNCLENBQUM7OEdBOUZtQiwwQkFBMEI7a0dBQTFCLDBCQUEwQjs7MkZBQTFCLDBCQUEwQjtrQkFEL0MsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxuICBWYWxpZGF0b3JcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtVmFsdWVPZiB9IGZyb20gJy4vZm9ybS5tb2RlbCc7XHJcblxyXG4vKipcclxuICpcclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RGb3JtQXJyYXlDb21wb25lbnQ8RiBleHRlbmRzIEFic3RyYWN0Q29udHJvbDxhbnk+PlxyXG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yXHJcbntcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlRm9ybUFycmF5KCk6IEZvcm1BcnJheTxGPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlRm9ybUFycmF5SXRlbShpdGVtPzogRm9ybVZhbHVlT2Y8Rj4pOiBGO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByb3RlY3RlZCBvbkNoYW5nZT86ICh2YWx1ZTogRm9ybVZhbHVlT2Y8Rj5bXSkgPT4gdm9pZDtcclxuICBwcm90ZWN0ZWQgb25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcclxuXHJcbiAgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICBmb3JtQXJyYXk6IHRoaXMuY3JlYXRlRm9ybUFycmF5KClcclxuICB9KTtcclxuICBnZXQgZm9ybUFycmF5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubGlzdGVuVmFsdWVDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuVmFsdWVDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5mb3JtQXJyYXkuZ2V0UmF3VmFsdWUoKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBGb3JtVmFsdWVPZjxGPltdKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoaXRlbXM6IEZvcm1WYWx1ZU9mPEY+W10gfCB1bmRlZmluZWQgfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLnByZXBhcmVDb250cm9scyhpdGVtcyk7XHJcblxyXG4gICAgaWYgKGl0ZW1zKSB7XHJcbiAgICAgIHRoaXMuZm9ybUFycmF5LnBhdGNoVmFsdWUoaXRlbXMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUFycmF5LnJlc2V0KHVuZGVmaW5lZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpc0Rpc2FibGVkID8gdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkgOiB0aGlzLmZvcm1Hcm91cC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5LmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZEZvcm1BcnJheTogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByZXBhcmVDb250cm9scyhpdGVtczogRm9ybVZhbHVlT2Y8Rj5bXSB8IHVuZGVmaW5lZCB8IG51bGwpOiB2b2lkIHtcclxuICAgIGl0ZW1zID0gaXRlbXMgfHwgW107XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5LnZhbHVlLmxlbmd0aCA8IGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmFkZEV4dHJhQ29udHJvbHMoaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZvcm1BcnJheS52YWx1ZS5sZW5ndGggPiBpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZW1vdmVFeHRyYUNvbnRyb2xzKGl0ZW1zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkRXh0cmFDb250cm9scyhpdGVtczogRm9ybVZhbHVlT2Y8Rj5bXSk6IHZvaWQge1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgICAgaWYgKCFjb250cm9sKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtQXJyYXkucHVzaCh0aGlzLmNyZWF0ZUZvcm1BcnJheUl0ZW0oaXRlbSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRXh0cmFDb250cm9scyhpdGVtczogRm9ybVZhbHVlT2Y8Rj5bXSk6IHZvaWQge1xyXG4gICAgbGV0IGZvcm1BcnJheUluZGV4ID0gMDtcclxuICAgIHRoaXMuZm9ybUFycmF5LnZhbHVlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICghaXRlbXNbaW5kZXhdKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtQXJyYXkucmVtb3ZlQXQoZm9ybUFycmF5SW5kZXgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvcm1BcnJheUluZGV4Kys7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,53 +0,0 @@
1
- import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export class AbstractFormComponent {
5
- constructor() {
6
- this.submitted = new EventEmitter();
7
- this.destroy$ = new Subject();
8
- }
9
- get isSubmitDisabled() {
10
- return !this.form.valid || this.form.pristine;
11
- }
12
- get isCancelDisabled() {
13
- return !this.form.dirty;
14
- }
15
- getFormDefaultValue(model) {
16
- return model;
17
- }
18
- ngOnInit() {
19
- this.form.patchValue(this.getFormDefaultValue(this.formViewModel) || {}, { emitEvent: false });
20
- }
21
- submit() {
22
- if (!this.isSubmitDisabled) {
23
- this.submitted.emit({
24
- ...this.formViewModel,
25
- ...this.form.value
26
- });
27
- }
28
- else {
29
- Object.values(this.form.controls).forEach(control => control.updateValueAndValidity());
30
- }
31
- }
32
- cancel() {
33
- if (!this.isCancelDisabled) {
34
- this.form.reset(this.getFormDefaultValue(this.formViewModel), { emitEvent: false });
35
- this.form.markAsPristine();
36
- this.form.markAsUntouched();
37
- }
38
- }
39
- ngOnDestroy() {
40
- this.destroy$.next();
41
- this.destroy$.complete();
42
- }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
44
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AbstractFormComponent, inputs: { formViewModel: "formViewModel" }, outputs: { submitted: "submitted" }, ngImport: i0 }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormComponent, decorators: [{
47
- type: Directive
48
- }], propDecorators: { formViewModel: [{
49
- type: Input
50
- }], submitted: [{
51
- type: Output
52
- }] } });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZm9ybS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvY29tbW9uL2Zvcm0tY3ZhL3NyYy9saWIvbW9kZWxzL2Fic3RyYWN0LWZvcm0tY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRy9CLE1BQU0sT0FBZ0IscUJBQXFCO0lBRDNDO1FBSVksY0FBUyxHQUFvQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBSXZDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0tBeUNuRDtJQXZDQyxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRVMsbUJBQW1CLENBQUMsS0FBUztRQUNyQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDbEIsR0FBRyxJQUFJLENBQUMsYUFBYTtnQkFDckIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0EvQ21CLHFCQUFxQjtrR0FBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQUQxQyxTQUFTOzhCQUVDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RGb3JtQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGZvcm1WaWV3TW9kZWw/OiBUO1xyXG5cclxuICBAT3V0cHV0KCkgc3VibWl0dGVkOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGFic3RyYWN0IGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgZ2V0IGlzU3VibWl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZm9ybS52YWxpZCB8fCB0aGlzLmZvcm0ucHJpc3RpbmU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNDYW5jZWxEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5mb3JtLmRpcnR5O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEZvcm1EZWZhdWx0VmFsdWUobW9kZWw/OiBUKTogVCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gbW9kZWw7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybURlZmF1bHRWYWx1ZSh0aGlzLmZvcm1WaWV3TW9kZWwpIHx8IHt9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNTdWJtaXREaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHtcclxuICAgICAgICAuLi50aGlzLmZvcm1WaWV3TW9kZWwsXHJcbiAgICAgICAgLi4udGhpcy5mb3JtLnZhbHVlXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNDYW5jZWxEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmZvcm0ucmVzZXQodGhpcy5nZXRGb3JtRGVmYXVsdFZhbHVlKHRoaXMuZm9ybVZpZXdNb2RlbCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgIHRoaXMuZm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,60 +0,0 @@
1
- /**
2
- * This class implements ControlValueAccessor logic for a FormGroup.
3
- * NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.
4
- *
5
- * The FormGroup changes will be automatically change the parent FormControl value.
6
- *
7
- * Example:
8
-
9
- */
10
- import { Directive } from '@angular/core';
11
- import { Subject, takeUntil } from 'rxjs';
12
- import * as i0 from "@angular/core";
13
- export class AbstractFormGroupComponent {
14
- constructor() {
15
- this.destroy$ = new Subject();
16
- }
17
- ngAfterViewInit() {
18
- this.listenValueChanges();
19
- }
20
- listenValueChanges() {
21
- this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {
22
- if (this.onChange) {
23
- this.onChange(this.formGroup.getRawValue());
24
- }
25
- });
26
- }
27
- registerOnChange(fn) {
28
- this.onChange = fn;
29
- }
30
- registerOnTouched(fn) {
31
- this.onTouched = fn;
32
- }
33
- writeValue(formValue) {
34
- if (formValue) {
35
- this.formGroup.patchValue(formValue, { emitEvent: false });
36
- }
37
- else {
38
- this.formGroup.reset(undefined, { emitEvent: false });
39
- }
40
- }
41
- setDisabledState(isDisabled) {
42
- isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });
43
- }
44
- validate() {
45
- if (this.formGroup.invalid) {
46
- return { invalidFormGroup: true };
47
- }
48
- return null;
49
- }
50
- ngOnDestroy() {
51
- this.destroy$.next();
52
- this.destroy$.complete();
53
- }
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
55
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AbstractFormGroupComponent, ngImport: i0 }); }
56
- }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractFormGroupComponent, decorators: [{
58
- type: Directive
59
- }] });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZm9ybS1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvY29tbW9uL2Zvcm0tY3ZhL3NyYy9saWIvbW9kZWxzL2Fic3RyYWN0LWZvcm0tZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFpQixTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSTFDLE1BQU0sT0FBZ0IsMEJBQTBCO0lBRGhEO1FBUXFCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0tBZ0RuRDtJQTVDQyxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDeEUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUE4QztRQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQStCO1FBQ3hDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQXREbUIsMEJBQTBCO2tHQUExQiwwQkFBMEI7OzJGQUExQiwwQkFBMEI7a0JBRC9DLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGxvZ2ljIGZvciBhIEZvcm1Hcm91cC5cclxuICogTkdfVkFMVUVfQUNDRVNTT1IgYW5kIE5HX1ZBTElEQVRPUlMgbXVzdCBiZSBwcm92aWRlZCBpbiB0aGUgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBUaGUgRm9ybUdyb3VwIGNoYW5nZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoYW5nZSB0aGUgcGFyZW50IEZvcm1Db250cm9sIHZhbHVlLlxyXG4gKlxyXG4gKiBFeGFtcGxlOlxyXG5cclxuICovXHJcblxyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZsYXRGb3JtQ29udHJvbHNPZiwgRm9ybVZhbHVlT2YgfSBmcm9tICcuL2Zvcm0ubW9kZWwnO1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEZvcm1Hcm91cENvbXBvbmVudDxcclxuICBUIGV4dGVuZHMgeyBbSyBpbiBrZXlvZiBUXTogYW55IH0sXHJcbiAgRiBleHRlbmRzIHsgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4gfSA9IEZsYXRGb3JtQ29udHJvbHNPZjxUPlxyXG4+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XHJcbntcclxuICBhYnN0cmFjdCBmb3JtR3JvdXA6IEZvcm1Hcm91cDxGPjtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcm90ZWN0ZWQgb25DaGFuZ2U/OiAodmFsdWU6IEZvcm1WYWx1ZU9mPEZvcm1Hcm91cDxGPj4pID0+IHZvaWQ7XHJcbiAgcHJvdGVjdGVkIG9uVG91Y2hlZD86ICgpID0+IHZvaWQ7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubGlzdGVuVmFsdWVDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuVmFsdWVDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBGb3JtVmFsdWVPZjxGb3JtR3JvdXA8Rj4+KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoZm9ybVZhbHVlOiBUIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKGZvcm1WYWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGZvcm1WYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAucmVzZXQodW5kZWZpbmVkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlzRGlzYWJsZWQgPyB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSA6IHRoaXMuZm9ybUdyb3VwLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZSgpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICByZXR1cm4geyBpbnZhbGlkRm9ybUdyb3VwOiB0cnVlIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,101 +0,0 @@
1
- import { Directive, Input, Optional } from '@angular/core';
2
- import { ControlContainer, FormArray } from '@angular/forms';
3
- import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
5
- import { NgilErrorMessagesService } from '../error-messages.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../error-messages.service";
8
- import * as i2 from "@angular/forms";
9
- export class AbstractInputComponent {
10
- set errorMessage(errorMessage) {
11
- this.errorMessage$.next(errorMessage);
12
- }
13
- constructor(errorMessagesService, controlContainer) {
14
- this.errorMessagesService = errorMessagesService;
15
- this.controlContainer = controlContainer;
16
- this.formControlName = '';
17
- this.label = '';
18
- this.readonly = false;
19
- this.required = false;
20
- this.disabled = false;
21
- this.destroy$ = new Subject();
22
- this.errorMessage$ = new BehaviorSubject('');
23
- this.model$ = combineLatest({
24
- errorMessage: this.errorMessage$
25
- });
26
- }
27
- ngOnInit() {
28
- if (this.controlContainer?.control instanceof FormArray) {
29
- this.parentControl = this.controlContainer?.control.at(+this.formControlName);
30
- }
31
- else {
32
- this.parentControl = this.controlContainer?.control?.get(this.formControlName);
33
- }
34
- this.setRequiredState();
35
- this.listenStatusChanges();
36
- }
37
- setRequiredState() {
38
- if (!this.parentControl || !this.parentControl?.validator) {
39
- return;
40
- }
41
- const validators = this.parentControl?.validator({ value: '' });
42
- if (validators && Object.keys(validators).includes('required')) {
43
- this.required = true;
44
- }
45
- }
46
- onBlur() {
47
- if (this.onTouched) {
48
- this.onTouched();
49
- }
50
- this.setErrors();
51
- }
52
- registerOnChange(fn) {
53
- this.onChange = fn;
54
- }
55
- registerOnTouched(fn) {
56
- this.onTouched = fn;
57
- }
58
- setDisabledState(isDisabled) {
59
- this.disabled = isDisabled;
60
- }
61
- listenStatusChanges() {
62
- this.parentControl?.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(() => this.setErrors());
63
- }
64
- setErrors() {
65
- if (this.parentControl?.errors) {
66
- const errorKey = Object.keys(this.parentControl?.errors)[0];
67
- const errorObj = this.parentControl?.errors[`${errorKey}`];
68
- this.errorMessage$.next(this.errorMessagesService.getErrorMessage(errorKey, {
69
- fieldName: this.label,
70
- ...errorObj
71
- }));
72
- }
73
- else {
74
- this.errorMessage$.next('');
75
- }
76
- }
77
- ngOnDestroy() {
78
- this.destroy$.next();
79
- this.destroy$.complete();
80
- }
81
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractInputComponent, deps: [{ token: i1.NgilErrorMessagesService }, { token: i2.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
82
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AbstractInputComponent, inputs: { formControlName: "formControlName", errorMessage: "errorMessage", label: "label", readonly: "readonly", required: "required", disabled: "disabled" }, ngImport: i0 }); }
83
- }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AbstractInputComponent, decorators: [{
85
- type: Directive
86
- }], ctorParameters: () => [{ type: i1.NgilErrorMessagesService }, { type: i2.ControlContainer, decorators: [{
87
- type: Optional
88
- }] }], propDecorators: { formControlName: [{
89
- type: Input
90
- }], errorMessage: [{
91
- type: Input
92
- }], label: [{
93
- type: Input
94
- }], readonly: [{
95
- type: Input
96
- }], required: [{
97
- type: Input
98
- }], disabled: [{
99
- type: Input
100
- }] } });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtaW5wdXQtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ2lsL3VpL2NvbW1vbi9mb3JtLWN2YS9zcmMvbGliL21vZGVscy9hYnN0cmFjdC1pbnB1dC1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQW1CLGdCQUFnQixFQUF3QixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBR3JFLE1BQU0sT0FBZ0Isc0JBQXNCO0lBRTFDLElBQWEsWUFBWSxDQUFDLFlBQW9CO1FBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFnQkQsWUFDbUIsb0JBQThDLEVBQ2xDLGdCQUFtQztRQUQvQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTBCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFyQnpELG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBSXJCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUtQLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFFbkUs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QUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OEdBekZtQixzQkFBc0I7a0dBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEM0MsU0FBUzs7MEJBdUJMLFFBQVE7eUNBckJGLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ08sWUFBWTtzQkFBeEIsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOZ2lsRXJyb3JNZXNzYWdlc1NlcnZpY2UgfSBmcm9tICcuLi9lcnJvci1tZXNzYWdlcy5zZXJ2aWNlJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbnB1dENvbXBvbmVudDxUID0gc3RyaW5nPiBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lID0gJyc7XHJcbiAgQElucHV0KCkgc2V0IGVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UkLm5leHQoZXJyb3JNZXNzYWdlKTtcclxuICB9XHJcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcclxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIHBhcmVudENvbnRyb2w/OiBBYnN0cmFjdENvbnRyb2wgfCBudWxsO1xyXG4gIHByb3RlY3RlZCBvbkNoYW5nZT86ICh2YWx1ZTogVCB8IG51bGwpID0+IHZvaWQ7XHJcbiAgcHJvdGVjdGVkIG9uVG91Y2hlZD86ICgpID0+IHZvaWQ7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZXJyb3JNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcblxyXG4gIG1vZGVsJCA9IGNvbWJpbmVMYXRlc3Qoe1xyXG4gICAgZXJyb3JNZXNzYWdlOiB0aGlzLmVycm9yTWVzc2FnZSRcclxuICB9KTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTWVzc2FnZXNTZXJ2aWNlOiBOZ2lsRXJyb3JNZXNzYWdlc1NlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI/OiBDb250cm9sQ29udGFpbmVyXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRyb2xDb250YWluZXI/LmNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgdGhpcy5wYXJlbnRDb250cm9sID0gdGhpcy5jb250cm9sQ29udGFpbmVyPy5jb250cm9sLmF0KCt0aGlzLmZvcm1Db250cm9sTmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhcmVudENvbnRyb2wgPSB0aGlzLmNvbnRyb2xDb250YWluZXI/LmNvbnRyb2w/LmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFJlcXVpcmVkU3RhdGUoKTtcclxuICAgIHRoaXMubGlzdGVuU3RhdHVzQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSZXF1aXJlZFN0YXRlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnBhcmVudENvbnRyb2wgfHwgIXRoaXMucGFyZW50Q29udHJvbD8udmFsaWRhdG9yKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5wYXJlbnRDb250cm9sPy52YWxpZGF0b3IoeyB2YWx1ZTogJycgfSBhcyBBYnN0cmFjdENvbnRyb2wpO1xyXG4gICAgaWYgKHZhbGlkYXRvcnMgJiYgT2JqZWN0LmtleXModmFsaWRhdG9ycykuaW5jbHVkZXMoJ3JlcXVpcmVkJykpIHtcclxuICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vblRvdWNoZWQpIHtcclxuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RXJyb3JzKCk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFQgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCB3cml0ZVZhbHVlKHZhbHVlOiBUKTogdm9pZDtcclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblN0YXR1c0NoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudENvbnRyb2w/LnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldEVycm9ycygpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRFcnJvcnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRDb250cm9sPy5lcnJvcnMpIHtcclxuICAgICAgY29uc3QgZXJyb3JLZXkgPSBPYmplY3Qua2V5cyh0aGlzLnBhcmVudENvbnRyb2w/LmVycm9ycylbMF07XHJcbiAgICAgIGNvbnN0IGVycm9yT2JqID0gdGhpcy5wYXJlbnRDb250cm9sPy5lcnJvcnNbYCR7ZXJyb3JLZXl9YF07XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlJC5uZXh0KFxyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlc1NlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKGVycm9yS2V5LCB7XHJcbiAgICAgICAgICBmaWVsZE5hbWU6IHRoaXMubGFiZWwsXHJcbiAgICAgICAgICAuLi5lcnJvck9ialxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSQubmV4dCgnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdpbC91aS9jb21tb24vZm9ybS1jdmEvc3JjL2xpYi9tb2RlbHMvZm9ybS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBGb3JtQ29udHJvbCBvciBGb3JtR3JvdXAgdHlwZXMgdG8gdXNlZCBpbiBhIEZvcm1Hcm91cCB1c2luZyBhIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xzT2Y8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xyXG4gIFtLIGluIGtleW9mIFJlcXVpcmVkPFQ+XTogUmVxdWlyZWQ8VD5bS10gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcbiAgICA/IFJlcXVpcmVkPFQ+W0tdIGV4dGVuZHMgYW55W11cclxuICAgICAgPyBGb3JtQ29udHJvbDxUW0tdIHwgbnVsbD5cclxuICAgICAgOiBGb3JtR3JvdXA8Rm9ybUNvbnRyb2xzT2Y8UmVxdWlyZWQ8VD5bS10+PlxyXG4gICAgOiBGb3JtQ29udHJvbDxUW0tdIHwgbnVsbD47XHJcbn07XHJcblxyXG4vKipcclxuICogV3JhcCBldmVyeSBwcm9wZXJ0eSBpbiB0aGUgUmVjb3JkIFQgaW4gYSBGb3JtQ29udHJvbCB0eXBlXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBGbGF0Rm9ybUNvbnRyb2xzT2Y8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xyXG4gIFtLIGluIGtleW9mIFRdOiBGb3JtQ29udHJvbDxUW0tdIHwgbnVsbD47XHJcbn07XHJcblxyXG4vKipcclxuICogR2l2ZXMgdGhlIGZvcm0gdmFsdWUgdHlwZVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRm9ybVZhbHVlT2Y8VCBleHRlbmRzIEFic3RyYWN0Q29udHJvbDxhbnk+PiA9IFRbJ3ZhbHVlJ107XHJcbiJdfQ==
@@ -1,15 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import * as i0 from "@angular/core";
4
- export class NgilUiCommonFormCvaModule {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilUiCommonFormCvaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: NgilUiCommonFormCvaModule, imports: [CommonModule] }); }
7
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilUiCommonFormCvaModule, imports: [CommonModule] }); }
8
- }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilUiCommonFormCvaModule, decorators: [{
10
- type: NgModule,
11
- args: [{
12
- imports: [CommonModule]
13
- }]
14
- }] });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdpbC11aS1jb21tb24tZm9ybS1jdmEubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ2lsL3VpL2NvbW1vbi9mb3JtLWN2YS9zcmMvbGliL25naWwtdWktY29tbW9uLWZvcm0tY3ZhLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLL0MsTUFBTSxPQUFPLHlCQUF5Qjs4R0FBekIseUJBQXlCOytHQUF6Qix5QkFBeUIsWUFGMUIsWUFBWTsrR0FFWCx5QkFBeUIsWUFGMUIsWUFBWTs7MkZBRVgseUJBQXlCO2tCQUhyQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdpbFVpQ29tbW9uRm9ybUN2YU1vZHVsZSB7fVxyXG4iXX0=
@@ -1,17 +0,0 @@
1
- import { forwardRef } from '@angular/core';
2
- import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
- export function createControlValueAccessorProviders(component) {
4
- return [
5
- {
6
- provide: NG_VALUE_ACCESSOR,
7
- useExisting: forwardRef(() => component),
8
- multi: true
9
- },
10
- {
11
- provide: NG_VALIDATORS,
12
- useExisting: forwardRef(() => component),
13
- multi: true
14
- }
15
- ];
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC12YWx1ZS1hY2Nlc3Nvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ2lsL3VpL2NvbW1vbi9mb3JtLWN2YS9zcmMvbGliL3V0aWxzL2NvbnRyb2wtdmFsdWUtYWNjZXNzb3IudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxNQUFNLFVBQVUsbUNBQW1DLENBQUMsU0FBd0I7SUFDMUUsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN4QyxLQUFLLEVBQUUsSUFBSTtTQUNaO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsYUFBYTtZQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN4QyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3J3YXJkUmVmLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRyb2xWYWx1ZUFjY2Vzc29yUHJvdmlkZXJzKGNvbXBvbmVudDogVHlwZTx1bmtub3duPikge1xyXG4gIHJldHVybiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBjb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gY29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdO1xyXG59XHJcbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdpbC1mb3JtLWN2YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdpbC91aS9jb21tb24vZm9ybS1jdmEvc3JjL25naWwtZm9ybS1jdmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
package/index.d.ts DELETED
@@ -1,9 +0,0 @@
1
- export * from './lib/error-messages.model';
2
- export * from './lib/error-messages.service';
3
- export * from './lib/models/abstract-form-array-component';
4
- export * from './lib/models/abstract-form-component';
5
- export * from './lib/models/abstract-form-group.component';
6
- export * from './lib/models/abstract-input-component';
7
- export * from './lib/models/form.model';
8
- export * from './lib/ngil-ui-common-form-cva.module';
9
- export * from './lib/utils/control-value-accessor.util';
@@ -1,4 +0,0 @@
1
- export interface NgilErrorMessageConfig {
2
- useDefaultReplacer: boolean;
3
- }
4
- export declare const DEFAULT_ERROR_MESSAGES: Record<string, string>;
@@ -1,12 +0,0 @@
1
- import { NgilErrorMessageConfig } from './error-messages.model';
2
- import * as i0 from "@angular/core";
3
- export declare class NgilErrorMessagesService {
4
- private errorMessages;
5
- private config;
6
- addErrorMessages(errorMessages: Record<string, string>): void;
7
- setErrorMessages(errorMessages: Record<string, string>): void;
8
- setUserReplacer(config: Partial<NgilErrorMessageConfig>): void;
9
- getErrorMessage(errorKey: string, replacements: Record<string, string>): string;
10
- static ɵfac: i0.ɵɵFactoryDeclaration<NgilErrorMessagesService, never>;
11
- static ɵprov: i0.ɵɵInjectableDeclaration<NgilErrorMessagesService>;
12
- }
@@ -1,32 +0,0 @@
1
- import { AfterViewInit, OnDestroy } from '@angular/core';
2
- import { AbstractControl, ControlValueAccessor, FormArray, FormGroup, ValidationErrors, Validator } from '@angular/forms';
3
- import { Subject } from 'rxjs';
4
- import { FormValueOf } from './form.model';
5
- import * as i0 from "@angular/core";
6
- /**
7
- *
8
- */
9
- export declare abstract class AbstractFormArrayComponent<F extends AbstractControl<any>> implements AfterViewInit, OnDestroy, ControlValueAccessor, Validator {
10
- protected abstract createFormArray(): FormArray<F>;
11
- protected abstract createFormArrayItem(item?: FormValueOf<F>): F;
12
- protected readonly destroy$: Subject<void>;
13
- protected onChange?: (value: FormValueOf<F>[]) => void;
14
- protected onTouched?: () => void;
15
- formGroup: FormGroup<{
16
- formArray: FormArray<F>;
17
- }>;
18
- get formArray(): FormArray<F>;
19
- ngAfterViewInit(): void;
20
- protected listenValueChanges(): void;
21
- registerOnChange(fn: (value: FormValueOf<F>[]) => void): void;
22
- registerOnTouched(fn: () => void): void;
23
- writeValue(items: FormValueOf<F>[] | undefined | null): void;
24
- setDisabledState(isDisabled: boolean): void;
25
- validate(): ValidationErrors | null;
26
- protected prepareControls(items: FormValueOf<F>[] | undefined | null): void;
27
- private addExtraControls;
28
- private removeExtraControls;
29
- ngOnDestroy(): void;
30
- static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormArrayComponent<any>, never>;
31
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormArrayComponent<any>, never, never, {}, {}, never, never, false, never>;
32
- }
@@ -1,19 +0,0 @@
1
- import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
- import { FormGroup } from '@angular/forms';
3
- import { Subject } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- export declare abstract class AbstractFormComponent<T> implements OnDestroy, OnInit {
6
- formViewModel?: T;
7
- submitted: EventEmitter<T>;
8
- abstract form: FormGroup;
9
- protected readonly destroy$: Subject<void>;
10
- get isSubmitDisabled(): boolean;
11
- get isCancelDisabled(): boolean;
12
- protected getFormDefaultValue(model?: T): T | undefined;
13
- ngOnInit(): void;
14
- submit(): void;
15
- cancel(): void;
16
- ngOnDestroy(): void;
17
- static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormComponent<any>, never>;
18
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormComponent<any>, never, never, { "formViewModel": { "alias": "formViewModel"; "required": false; }; }, { "submitted": "submitted"; }, never, never, false, never>;
19
- }
@@ -1,34 +0,0 @@
1
- /**
2
- * This class implements ControlValueAccessor logic for a FormGroup.
3
- * NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.
4
- *
5
- * The FormGroup changes will be automatically change the parent FormControl value.
6
- *
7
- * Example:
8
-
9
- */
10
- import { AfterViewInit, OnDestroy } from '@angular/core';
11
- import { AbstractControl, ControlValueAccessor, FormGroup, ValidationErrors, Validator } from '@angular/forms';
12
- import { Subject } from 'rxjs';
13
- import { FlatFormControlsOf, FormValueOf } from './form.model';
14
- import * as i0 from "@angular/core";
15
- export declare abstract class AbstractFormGroupComponent<T extends {
16
- [K in keyof T]: any;
17
- }, F extends {
18
- [K in keyof T]: AbstractControl<any, any>;
19
- } = FlatFormControlsOf<T>> implements ControlValueAccessor, Validator, OnDestroy, AfterViewInit {
20
- abstract formGroup: FormGroup<F>;
21
- protected readonly destroy$: Subject<void>;
22
- protected onChange?: (value: FormValueOf<FormGroup<F>>) => void;
23
- protected onTouched?: () => void;
24
- ngAfterViewInit(): void;
25
- protected listenValueChanges(): void;
26
- registerOnChange(fn: (value: FormValueOf<FormGroup<F>>) => void): void;
27
- registerOnTouched(fn: () => void): void;
28
- writeValue(formValue: T | undefined | null): void;
29
- setDisabledState(isDisabled: boolean): void;
30
- validate(): ValidationErrors | null;
31
- ngOnDestroy(): void;
32
- static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormGroupComponent<any, any>, never>;
33
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormGroupComponent<any, any>, never, never, {}, {}, never, never, false, never>;
34
- }
@@ -1,36 +0,0 @@
1
- import { OnDestroy, OnInit } from '@angular/core';
2
- import { AbstractControl, ControlContainer, ControlValueAccessor } from '@angular/forms';
3
- import { BehaviorSubject, Subject } from 'rxjs';
4
- import { NgilErrorMessagesService } from '../error-messages.service';
5
- import * as i0 from "@angular/core";
6
- export declare abstract class AbstractInputComponent<T = string> implements OnInit, ControlValueAccessor, OnDestroy {
7
- private readonly errorMessagesService;
8
- private readonly controlContainer?;
9
- formControlName: string;
10
- set errorMessage(errorMessage: string);
11
- label: string;
12
- readonly: boolean;
13
- required: boolean;
14
- disabled: boolean;
15
- protected parentControl?: AbstractControl | null;
16
- protected onChange?: (value: T | null) => void;
17
- protected onTouched?: () => void;
18
- protected readonly destroy$: Subject<void>;
19
- protected readonly errorMessage$: BehaviorSubject<string>;
20
- model$: import("rxjs").Observable<{
21
- errorMessage: string;
22
- }>;
23
- constructor(errorMessagesService: NgilErrorMessagesService, controlContainer?: ControlContainer | undefined);
24
- ngOnInit(): void;
25
- private setRequiredState;
26
- onBlur(): void;
27
- registerOnChange(fn: (value: T | null) => void): void;
28
- registerOnTouched(fn: () => void): void;
29
- setDisabledState(isDisabled: boolean): void;
30
- abstract writeValue(value: T): void;
31
- protected listenStatusChanges(): void;
32
- protected setErrors(): void;
33
- ngOnDestroy(): void;
34
- static ɵfac: i0.ɵɵFactoryDeclaration<AbstractInputComponent<any>, [null, { optional: true; }]>;
35
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractInputComponent<any>, never, never, { "formControlName": { "alias": "formControlName"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "label": { "alias": "label"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, false, never>;
36
- }
@@ -1,17 +0,0 @@
1
- import { AbstractControl, FormControl, FormGroup } from '@angular/forms';
2
- /**
3
- * Create FormControl or FormGroup types to used in a FormGroup using a interface
4
- */
5
- export type FormControlsOf<T extends Record<string, any>> = {
6
- [K in keyof Required<T>]: Required<T>[K] extends Record<string, any> ? Required<T>[K] extends any[] ? FormControl<T[K] | null> : FormGroup<FormControlsOf<Required<T>[K]>> : FormControl<T[K] | null>;
7
- };
8
- /**
9
- * Wrap every property in the Record T in a FormControl type
10
- */
11
- export type FlatFormControlsOf<T extends Record<string, any>> = {
12
- [K in keyof T]: FormControl<T[K] | null>;
13
- };
14
- /**
15
- * Gives the form value type
16
- */
17
- export type FormValueOf<T extends AbstractControl<any>> = T['value'];
@@ -1,7 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "@angular/common";
3
- export declare class NgilUiCommonFormCvaModule {
4
- static ɵfac: i0.ɵɵFactoryDeclaration<NgilUiCommonFormCvaModule, never>;
5
- static ɵmod: i0.ɵɵNgModuleDeclaration<NgilUiCommonFormCvaModule, never, [typeof i1.CommonModule], never>;
6
- static ɵinj: i0.ɵɵInjectorDeclaration<NgilUiCommonFormCvaModule>;
7
- }
@@ -1,6 +0,0 @@
1
- import { Type } from '@angular/core';
2
- export declare function createControlValueAccessorProviders(component: Type<unknown>): {
3
- provide: import("@angular/core").InjectionToken<readonly import("@angular/forms").ControlValueAccessor[]>;
4
- useExisting: Type<any>;
5
- multi: boolean;
6
- }[];