imng-kendo-data-entry 6.23.4 → 6.27.7

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,4 +1,4 @@
1
- import { Directive, Inject, InjectionToken, Input, } from '@angular/core';
1
+ import { Component, Inject, InjectionToken, Input, } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import { Subscriptions } from 'imng-ngrx-utils';
4
4
  import * as i0 from "@angular/core";
@@ -20,31 +20,30 @@ export class BaseDataEntryComponent {
20
20
  this.facade = facade;
21
21
  this.width = 800; //NOSONAR
22
22
  this.height = 600; //NOSONAR
23
+ this.formId = 'imng-form';
24
+ this.saveButtonText = 'Save';
23
25
  this.MinLengthError = 'minlength';
24
26
  this.RequiredError = 'required';
25
27
  this.ENUM_DISPLAY_TEXT = 'displayText';
26
28
  this.ENUM_NAME = 'name';
27
29
  this.allSubscriptions = new Subscriptions();
28
- this._submitted$ = new BehaviorSubject(false);
30
+ this.submitted$ = new BehaviorSubject(false);
29
31
  this.loading$ = this.facade.loading$;
30
32
  this.initForm();
31
33
  }
32
- get submitted$() {
33
- return this._submitted$.asObservable();
34
- }
35
34
  ngOnDestroy() {
36
35
  this.allSubscriptions.unsubscribeAll();
37
36
  }
38
37
  closeForm() {
39
38
  this.initForm();
40
39
  this.facade.clearCurrentEntity();
41
- this._submitted$.next(false);
40
+ this.submitted$.next(false);
42
41
  }
43
42
  onCancel() {
44
43
  this.closeForm();
45
44
  }
46
45
  onSubmit() {
47
- this._submitted$.next(true);
46
+ this.submitted$.next(true);
48
47
  // stop here if form is invalid
49
48
  if (!this.addEditForm.valid) {
50
49
  console.error('form validation errors.'); //NOSONAR
@@ -62,9 +61,11 @@ export class BaseDataEntryComponent {
62
61
  formControl(controlName, controls = this.addEditForm.controls) {
63
62
  return controls[controlName];
64
63
  }
65
- formControlErrors(control, controls = this.addEditForm.controls) {
64
+ formControlErrors(control, controls = this
65
+ .addEditForm.controls) {
66
+ const tempControl =
66
67
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
- const tempControl = typeof control === 'string' ? controls[control] : control;
68
+ typeof control === 'string' ? controls[control] : control;
68
69
  if (tempControl?.valid && !tempControl?.errors) {
69
70
  return null;
70
71
  }
@@ -73,25 +74,34 @@ export class BaseDataEntryComponent {
73
74
  formMinLengthError(controlName) {
74
75
  return this.formControlErrors(controlName)?.[this.MinLengthError];
75
76
  }
76
- getFormErrors(controls = this.addEditForm.controls, parentControlName) {
77
+ getFormErrors(controls = this
78
+ .addEditForm.controls, parentControlName) {
77
79
  const errors = [];
78
80
  for (const controlName of Object.keys(controls)) {
79
81
  const control = controls[controlName];
80
82
  const error = this.formControlErrors(control, controls);
81
83
  if (error) {
82
- errors.push({ controlName: parentControlName ? `${parentControlName}.${controlName}` : controlName, error });
84
+ errors.push({
85
+ controlName: parentControlName
86
+ ? `${parentControlName}.${controlName}`
87
+ : controlName,
88
+ error,
89
+ });
83
90
  }
84
91
  if (control?.controls) {
85
- errors.push(...this.getFormErrors(control.controls, parentControlName ? `${parentControlName}.${controlName}` : controlName));
92
+ errors.push(...this.getFormErrors(control.controls, parentControlName
93
+ ? `${parentControlName}.${controlName}`
94
+ : controlName));
86
95
  }
87
96
  }
88
97
  return errors;
89
98
  }
90
99
  }
91
- BaseDataEntryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, deps: [{ token: FACADE }], target: i0.ɵɵFactoryTarget.Directive });
92
- BaseDataEntryComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: BaseDataEntryComponent, inputs: { width: "width", height: "height" }, ngImport: i0 });
100
+ BaseDataEntryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, deps: [{ token: FACADE }], target: i0.ɵɵFactoryTarget.Component });
101
+ BaseDataEntryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: BaseDataEntryComponent, selector: "ng-component", inputs: { width: "width", height: "height" }, ngImport: i0, template: '', isInline: true });
93
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, decorators: [{
94
- type: Directive
103
+ type: Component,
104
+ args: [{ template: '' }]
95
105
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
96
106
  type: Inject,
97
107
  args: [FACADE]
@@ -100,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
100
110
  }], height: [{
101
111
  type: Input
102
112
  }] } });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvaW1uZy1rZW5kby1kYXRhLWVudHJ5L3NyYy9saWIvYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkQsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQy9CLHdCQUF3QixDQUN6QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLE9BQWdCLHNCQUFzQjtJQXFCMUMsWUFBNEMsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFsQjFDLFVBQUssR0FBb0IsR0FBRyxDQUFDLENBQUMsU0FBUztRQUN2QyxXQUFNLEdBQW9CLEdBQUcsQ0FBQyxDQUFDLFNBQVM7UUFDeEMsbUJBQWMsR0FBRyxXQUFXLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxVQUFVLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDNUIscUJBQWdCLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUs3QixnQkFBVyxHQUE2QixJQUFJLGVBQWUsQ0FDMUUsS0FBZ0IsQ0FDakIsQ0FBQztRQU1BLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFORCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVks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QUFDLEdBQUcsaUJBQWlCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDOUk7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O21IQTFGbUIsc0JBQXNCLGtCQXFCdEIsTUFBTTt1R0FyQk4sc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRDNDLFNBQVM7OzBCQXNCSyxNQUFNOzJCQUFDLE1BQU07NENBbEJWLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgRm9ybUdyb3VwLCBGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJQmFzZURhdGFFbnRyeUZhY2FkZSB9IGZyb20gJy4vZGF0YS1lbnRyeS1mYWNhZGUnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlLCBTdWJzY3JpcHRpb25zIH0gZnJvbSAnaW1uZy1uZ3J4LXV0aWxzJztcblxuY29uc3QgRkFDQURFID0gbmV3IEluamVjdGlvblRva2VuPElCYXNlRGF0YUVudHJ5RmFjYWRlPihcbiAgJ2ltbmctZGF0YS1lbnRyeS1mYWNhZGUnLFxuKTtcblxuLyoqXG4gKiBUaGUgZXh0ZW5kaW5nIGNsYXNzIGhhcyB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG9uIG5nSW5pdFxuICogZGlhbG9nVGl0bGU6IHN0cmluZyAtIFRoaXMgd2lsbCBiZSB0aGUgdGV4dCBkaXNwbGF5ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbW9kYWwgdGl0bGUgYmFyXG4gKiBwcm9wczogZW51bSAtIFRoaXMgaXMgYSBoZWxwZXIgcHJvcGVydHkgdG8gbWFrZSB0aGUgaHRtbCBtYXJrdXAgdHlwZSBzYWZlXG4gKlxuICogQWxvbmcgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIGFib3ZlLCB0aGUgZXh0ZW5kaW5nIGNsYXNzIGhhcyB0byBzZXQgdmFsdWVzIHRvIHRoZVxuICogZm9sbG93aW5nIHByb3BlcnRpZXMgb24gbmdJbml0XG4gKiBhY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+IC0gVGhpcyB0eXBpY2FsbHkgd291bGQgYmUgYXNzaWduZWQgdG8gdGhlIGlzTmV3QWN0aXZlJCBvciBpc0VkaXRBY3RpdmUgb24gdGhlIGZhY2FkZVxuICogYWRkRWRpdEZvcm06IEZvcm1Hcm91cCAtIFRoaXMgd2lsbCBiZSBjcmVhdGVkIGJ5IHlvdXIgY29tcG9uZW50XG4gKlxuICogQGNsYXNzIEJhc2VEYXRhRW50cnlDb21wb25lbnQ+XG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEYXRhRW50cnlDb21wb25lbnQ8XG4gIEZBQ0FERSBleHRlbmRzIElCYXNlRGF0YUVudHJ5RmFjYWRlLFxuICA+IGltcGxlbWVudHMgT25EZXN0cm95LCBTdWJzY3JpYmFibGUge1xuICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6IHN0cmluZyB8IG51bWJlciA9IDgwMDsgLy9OT1NPTkFSXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9IDYwMDsgLy9OT1NPTkFSXG4gIHB1YmxpYyByZWFkb25seSBNaW5MZW5ndGhFcnJvciA9ICdtaW5sZW5ndGgnO1xuICBwdWJsaWMgcmVhZG9ubHkgUmVxdWlyZWRFcnJvciA9ICdyZXF1aXJlZCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX0RJU1BMQVlfVEVYVCA9ICdkaXNwbGF5VGV4dCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX05BTUUgPSAnbmFtZSc7XG4gIHB1YmxpYyBhbGxTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbnMoKTtcbiAgcHVibGljIGFic3RyYWN0IGRpYWxvZ1RpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBwcm9wczogdW5rbm93bjtcbiAgcHVibGljIGFic3RyYWN0IGFkZEVkaXRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3VibWl0dGVkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBmYWxzZSBhcyBib29sZWFuLFxuICApO1xuXG4gIHB1YmxpYyBnZXQgc3VibWl0dGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3VibWl0dGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEZBQ0FERSkgcHVibGljIHJlYWRvbmx5IGZhY2FkZTogRkFDQURFKSB7XG4gICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuZmFjYWRlLmxvYWRpbmckO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmVBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMuZmFjYWRlLmNsZWFyQ3VycmVudEVudGl0eSgpO1xuICAgIHRoaXMuX3N1Ym1pdHRlZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdCgpOiBib29sZWFuIHtcbiAgICB0aGlzLl9zdWJtaXR0ZWQkLm5leHQodHJ1ZSk7XG5cbiAgICAvLyBzdG9wIGhlcmUgaWYgZm9ybSBpcyBpbnZhbGlkXG4gICAgaWYgKCF0aGlzLmFkZEVkaXRGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmb3JtIHZhbGlkYXRpb24gZXJyb3JzLicpOyAvL05PU09OQVJcbiAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRGb3JtRXJyb3JzKCkpKTsgLy9OT1NPTkFSXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc2F2ZSgpO1xuICAgIHRoaXMuY2xvc2VGb3JtKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgaXNEYXRhSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRFZGl0Rm9ybS5pbnZhbGlkO1xuICB9XG5cbiAgLy8gY29udmVuaWVuY2UgZ2V0dGVyIGZvciBlYXN5IGFjY2VzcyB0byBmb3JtIGZpZWxkc1xuICBwdWJsaWMgZm9ybUNvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZywgY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sOyB9ID0gdGhpcy5hZGRFZGl0Rm9ybS5jb250cm9scyk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIGNvbnRyb2xzW2NvbnRyb2xOYW1lXTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtQ29udHJvbEVycm9ycyhjb250cm9sOiBzdHJpbmcgfCBBYnN0cmFjdENvbnRyb2wsIGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbDsgfSB8IEFic3RyYWN0Q29udHJvbFtdID0gdGhpcy5hZGRFZGl0Rm9ybS5jb250cm9scyk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHRlbXBDb250cm9sID0gdHlwZW9mIGNvbnRyb2wgPT09ICdzdHJpbmcnID8gKGNvbnRyb2xzIGFzIGFueSlbY29udHJvbF0gOiBjb250cm9sO1xuICAgIGlmICh0ZW1wQ29udHJvbD8udmFsaWQgJiYgIXRlbXBDb250cm9sPy5lcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcENvbnRyb2w/LmVycm9ycztcbiAgfVxuICBwdWJsaWMgZm9ybU1pbkxlbmd0aEVycm9yKFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICk6IHsgcmVxdWlyZWRMZW5ndGg6IG51bWJlcjsgYWN0dWFsTGVuZ3RoOiBudW1iZXI7IH0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbEVycm9ycyhjb250cm9sTmFtZSk/Llt0aGlzLk1pbkxlbmd0aEVycm9yXTtcbiAgfVxuICBwdWJsaWMgZ2V0Rm9ybUVycm9ycyhjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2w7IH0gfCBBYnN0cmFjdENvbnRyb2xbXSA9IHRoaXMuYWRkRWRpdEZvcm0uY29udHJvbHMsIHBhcmVudENvbnRyb2xOYW1lPzogc3RyaW5nKTogeyBjb250cm9sTmFtZTogc3RyaW5nOyBlcnJvcjogVmFsaWRhdGlvbkVycm9yczsgfVtdIHtcbiAgICBjb25zdCBlcnJvcnM6IHsgY29udHJvbE5hbWU6IHN0cmluZzsgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnM7IH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXMoY29udHJvbHMpKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gKGNvbnRyb2xzIGFzIG5ldmVyKVtjb250cm9sTmFtZV07XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZm9ybUNvbnRyb2xFcnJvcnMoY29udHJvbCwgY29udHJvbHMpO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHsgY29udHJvbE5hbWU6IHBhcmVudENvbnRyb2xOYW1lID8gYCR7cGFyZW50Q29udHJvbE5hbWV9LiR7Y29udHJvbE5hbWV9YCA6IGNvbnRyb2xOYW1lLCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICAgIGlmICgoY29udHJvbCBhcyBGb3JtQXJyYXkpPy5jb250cm9scykge1xuXG4gICAgICAgIGVycm9ycy5wdXNoKC4uLnRoaXMuZ2V0Rm9ybUVycm9ycygoY29udHJvbCBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLCBwYXJlbnRDb250cm9sTmFtZSA/IGAke3BhcmVudENvbnRyb2xOYW1lfS4ke2NvbnRyb2xOYW1lfWAgOiBjb250cm9sTmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGluaXRGb3JtKCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBzYXZlKCk6IHZvaWQ7XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvaW1uZy1rZW5kby1kYXRhLWVudHJ5L3NyYy9saWIvYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRbkQsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQy9CLHdCQUF3QixDQUN6QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLE9BQWdCLHNCQUFzQjtJQXNCMUMsWUFBNEMsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFsQjFDLFVBQUssR0FBb0IsR0FBRyxDQUFDLENBQUMsU0FBUztRQUN2QyxXQUFNLEdBQW9CLEdBQUcsQ0FBQyxDQUFDLFNBQVM7UUFFakQsV0FBTSxHQUFHLFdBQVcsQ0FBQztRQUNyQixtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQUNmLG1CQUFjLEdBQUcsV0FBVyxDQUFDO1FBQzdCLGtCQUFhLEdBQUcsVUFBVSxDQUFDO1FBQzNCLHNCQUFpQixHQUFHLGFBQWEsQ0FBQztRQUNsQyxjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQzVCLHFCQUFnQixHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFLOUIsZUFBVSxHQUE2QixJQUFJLGVBQWUsQ0FDeEUsS0FBZ0IsQ0FDakIsQ0FBQztRQUdBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7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R0FBRyxpQkFBaUIsSUFBSSxXQUFXLEVBQUU7b0JBQ3ZDLENBQUMsQ0FBQyxXQUFXLENBQ2hCLENBQ0YsQ0FBQzthQUNIO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzttSEFsSG1CLHNCQUFzQixrQkFzQnRCLE1BQU07dUdBdEJOLHNCQUFzQixrR0FEckIsRUFBRTsyRkFDSCxzQkFBc0I7a0JBRDNDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFOzswQkF1QlosTUFBTTsyQkFBQyxNQUFNOzRDQWxCVixLQUFLO3NCQUFwQixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUFycmF5LFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJQmFzZURhdGFFbnRyeUZhY2FkZSB9IGZyb20gJy4vZGF0YS1lbnRyeS1mYWNhZGUnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlLCBTdWJzY3JpcHRpb25zIH0gZnJvbSAnaW1uZy1uZ3J4LXV0aWxzJztcblxuY29uc3QgRkFDQURFID0gbmV3IEluamVjdGlvblRva2VuPElCYXNlRGF0YUVudHJ5RmFjYWRlPihcbiAgJ2ltbmctZGF0YS1lbnRyeS1mYWNhZGUnLFxuKTtcblxuLyoqXG4gKiBUaGUgZXh0ZW5kaW5nIGNsYXNzIGhhcyB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG9uIG5nSW5pdFxuICogZGlhbG9nVGl0bGU6IHN0cmluZyAtIFRoaXMgd2lsbCBiZSB0aGUgdGV4dCBkaXNwbGF5ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbW9kYWwgdGl0bGUgYmFyXG4gKiBwcm9wczogZW51bSAtIFRoaXMgaXMgYSBoZWxwZXIgcHJvcGVydHkgdG8gbWFrZSB0aGUgaHRtbCBtYXJrdXAgdHlwZSBzYWZlXG4gKlxuICogQWxvbmcgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIGFib3ZlLCB0aGUgZXh0ZW5kaW5nIGNsYXNzIGhhcyB0byBzZXQgdmFsdWVzIHRvIHRoZVxuICogZm9sbG93aW5nIHByb3BlcnRpZXMgb24gbmdJbml0XG4gKiBhY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+IC0gVGhpcyB0eXBpY2FsbHkgd291bGQgYmUgYXNzaWduZWQgdG8gdGhlIGlzTmV3QWN0aXZlJCBvciBpc0VkaXRBY3RpdmUgb24gdGhlIGZhY2FkZVxuICogYWRkRWRpdEZvcm06IEZvcm1Hcm91cCAtIFRoaXMgd2lsbCBiZSBjcmVhdGVkIGJ5IHlvdXIgY29tcG9uZW50XG4gKlxuICogQGNsYXNzIEJhc2VEYXRhRW50cnlDb21wb25lbnQ+XG4gKi9cbkBDb21wb25lbnQoeyB0ZW1wbGF0ZTogJycgfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YUVudHJ5Q29tcG9uZW50PFxuICBGQUNBREUgZXh0ZW5kcyBJQmFzZURhdGFFbnRyeUZhY2FkZSxcbj4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIFN1YnNjcmliYWJsZVxue1xuICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6IHN0cmluZyB8IG51bWJlciA9IDgwMDsgLy9OT1NPTkFSXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9IDYwMDsgLy9OT1NPTkFSXG5cbiAgcHVibGljIGZvcm1JZCA9ICdpbW5nLWZvcm0nO1xuICBwdWJsaWMgc2F2ZUJ1dHRvblRleHQgPSAnU2F2ZSc7XG4gIHB1YmxpYyByZWFkb25seSBNaW5MZW5ndGhFcnJvciA9ICdtaW5sZW5ndGgnO1xuICBwdWJsaWMgcmVhZG9ubHkgUmVxdWlyZWRFcnJvciA9ICdyZXF1aXJlZCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX0RJU1BMQVlfVEVYVCA9ICdkaXNwbGF5VGV4dCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX05BTUUgPSAnbmFtZSc7XG4gIHB1YmxpYyBhbGxTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbnMoKTtcbiAgcHVibGljIGFic3RyYWN0IGRpYWxvZ1RpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBwcm9wczogdW5rbm93bjtcbiAgcHVibGljIGFic3RyYWN0IGFkZEVkaXRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IHN1Ym1pdHRlZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgZmFsc2UgYXMgYm9vbGVhbixcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEZBQ0FERSkgcHVibGljIHJlYWRvbmx5IGZhY2FkZTogRkFDQURFKSB7XG4gICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuZmFjYWRlLmxvYWRpbmckO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmVBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMuZmFjYWRlLmNsZWFyQ3VycmVudEVudGl0eSgpO1xuICAgIHRoaXMuc3VibWl0dGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlRm9ybSgpO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuc3VibWl0dGVkJC5uZXh0KHRydWUpO1xuXG4gICAgLy8gc3RvcCBoZXJlIGlmIGZvcm0gaXMgaW52YWxpZFxuICAgIGlmICghdGhpcy5hZGRFZGl0Rm9ybS52YWxpZCkge1xuICAgICAgY29uc29sZS5lcnJvcignZm9ybSB2YWxpZGF0aW9uIGVycm9ycy4nKTsgLy9OT1NPTkFSXG4gICAgICBjb25zb2xlLmVycm9yKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Rm9ybUVycm9ycygpKSk7IC8vTk9TT05BUlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNhdmUoKTtcbiAgICB0aGlzLmNsb3NlRm9ybSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGlzRGF0YUludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkRWRpdEZvcm0uaW52YWxpZDtcbiAgfVxuXG4gIC8vIGNvbnZlbmllbmNlIGdldHRlciBmb3IgZWFzeSBhY2Nlc3MgdG8gZm9ybSBmaWVsZHNcbiAgcHVibGljIGZvcm1Db250cm9sKFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICAgY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0gPSB0aGlzLmFkZEVkaXRGb3JtLmNvbnRyb2xzLFxuICApOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV07XG4gIH1cblxuICBwdWJsaWMgZm9ybUNvbnRyb2xFcnJvcnMoXG4gICAgY29udHJvbDogc3RyaW5nIHwgQWJzdHJhY3RDb250cm9sLFxuICAgIGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9IHwgQWJzdHJhY3RDb250cm9sW10gPSB0aGlzXG4gICAgICAuYWRkRWRpdEZvcm0uY29udHJvbHMsXG4gICk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB0ZW1wQ29udHJvbCA9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgdHlwZW9mIGNvbnRyb2wgPT09ICdzdHJpbmcnID8gKGNvbnRyb2xzIGFzIGFueSlbY29udHJvbF0gOiBjb250cm9sO1xuICAgIGlmICh0ZW1wQ29udHJvbD8udmFsaWQgJiYgIXRlbXBDb250cm9sPy5lcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcENvbnRyb2w/LmVycm9ycztcbiAgfVxuICBwdWJsaWMgZm9ybU1pbkxlbmd0aEVycm9yKFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICk6IHsgcmVxdWlyZWRMZW5ndGg6IG51bWJlcjsgYWN0dWFsTGVuZ3RoOiBudW1iZXIgfSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sRXJyb3JzKGNvbnRyb2xOYW1lKT8uW3RoaXMuTWluTGVuZ3RoRXJyb3JdO1xuICB9XG4gIHB1YmxpYyBnZXRGb3JtRXJyb3JzKFxuICAgIGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9IHwgQWJzdHJhY3RDb250cm9sW10gPSB0aGlzXG4gICAgICAuYWRkRWRpdEZvcm0uY29udHJvbHMsXG4gICAgcGFyZW50Q29udHJvbE5hbWU/OiBzdHJpbmcsXG4gICk6IHsgY29udHJvbE5hbWU6IHN0cmluZzsgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfVtdIHtcbiAgICBjb25zdCBlcnJvcnM6IHsgY29udHJvbE5hbWU6IHN0cmluZzsgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfVtdID0gW107XG4gICAgZm9yIChjb25zdCBjb250cm9sTmFtZSBvZiBPYmplY3Qua2V5cyhjb250cm9scykpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSAoY29udHJvbHMgYXMgbmV2ZXIpW2NvbnRyb2xOYW1lXTtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5mb3JtQ29udHJvbEVycm9ycyhjb250cm9sLCBjb250cm9scyk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvbnRyb2xOYW1lOiBwYXJlbnRDb250cm9sTmFtZVxuICAgICAgICAgICAgPyBgJHtwYXJlbnRDb250cm9sTmFtZX0uJHtjb250cm9sTmFtZX1gXG4gICAgICAgICAgICA6IGNvbnRyb2xOYW1lLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICgoY29udHJvbCBhcyBGb3JtQXJyYXkpPy5jb250cm9scykge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi50aGlzLmdldEZvcm1FcnJvcnMoXG4gICAgICAgICAgICAoY29udHJvbCBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLFxuICAgICAgICAgICAgcGFyZW50Q29udHJvbE5hbWVcbiAgICAgICAgICAgICAgPyBgJHtwYXJlbnRDb250cm9sTmFtZX0uJHtjb250cm9sTmFtZX1gXG4gICAgICAgICAgICAgIDogY29udHJvbE5hbWUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBpbml0Rm9ybSgpOiB2b2lkO1xuICBwdWJsaWMgYWJzdHJhY3Qgc2F2ZSgpOiB2b2lkO1xufVxuIl19
@@ -9,6 +9,7 @@ export class DataEntryDialogComponent {
9
9
  this.width = 800; //NOSONAR
10
10
  this.height = 600; //NOSONAR
11
11
  this.saveButtonText = 'Save';
12
+ this.formId = 'imng-form';
12
13
  this.submitted = false;
13
14
  }
14
15
  ngOnInit() {
@@ -18,6 +19,8 @@ export class DataEntryDialogComponent {
18
19
  this.dialogTitle = this.parentComponent.dialogTitle;
19
20
  this.loading$ = this.parentComponent.loading$;
20
21
  this.addEditForm = this.parentComponent.addEditForm;
22
+ this.saveButtonText = this.parentComponent.saveButtonText;
23
+ this.formId = this.parentComponent.formId;
21
24
  }
22
25
  close() {
23
26
  this.parentComponent?.closeForm();
@@ -36,7 +39,7 @@ export class DataEntryDialogComponent {
36
39
  }
37
40
  }
38
41
  DataEntryDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: DataEntryDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
39
- DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: DataEntryDialogComponent, selector: "imng-data-entry-dialog[parentComponent]", inputs: { minWidth: "minWidth", width: "width", height: "height", autoFocusedElement: "autoFocusedElement", parentComponent: "parentComponent", saveButtonText: "saveButtonText" }, queries: [{ propertyName: "dialogBtnsTemplate", first: true, predicate: DialogButtonsDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `<kendo-dialog
42
+ DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: DataEntryDialogComponent, selector: "imng-data-entry-dialog[parentComponent]", inputs: { minWidth: "minWidth", width: "width", height: "height", autoFocusedElement: "autoFocusedElement", parentComponent: "parentComponent" }, queries: [{ propertyName: "dialogBtnsTemplate", first: true, predicate: DialogButtonsDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `<kendo-dialog
40
43
  [width]="width"
41
44
  [minWidth]="minWidth ?? width"
42
45
  [height]="height"
@@ -55,12 +58,16 @@ DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0
55
58
  </ng-container>
56
59
  </kendo-dialog-actions>
57
60
  </kendo-dialog>
58
-
59
61
  <ng-template #defaultDialogActionsTpl>
60
62
  <button kendoButton (click)="cancel()" class="btn btn-secondary btn-sm">
61
63
  Cancel
62
64
  </button>
63
- <button kendoButton (click)="submit()" class="btn btn-primary btn-sm">
65
+ <button
66
+ [attr.form]="formId"
67
+ type="submit"
68
+ kendoButton
69
+ (click)="submit()"
70
+ class="btn btn-primary btn-sm">
64
71
  {{ saveButtonText }}
65
72
  </button>
66
73
  </ng-template>`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i2.DialogTitleBarComponent, selector: "kendo-dialog-titlebar", inputs: ["id", "closeTitle"], outputs: ["close"] }, { kind: "component", type: i2.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -87,12 +94,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
87
94
  </ng-container>
88
95
  </kendo-dialog-actions>
89
96
  </kendo-dialog>
90
-
91
97
  <ng-template #defaultDialogActionsTpl>
92
98
  <button kendoButton (click)="cancel()" class="btn btn-secondary btn-sm">
93
99
  Cancel
94
100
  </button>
95
- <button kendoButton (click)="submit()" class="btn btn-primary btn-sm">
101
+ <button
102
+ [attr.form]="formId"
103
+ type="submit"
104
+ kendoButton
105
+ (click)="submit()"
106
+ class="btn btn-primary btn-sm">
96
107
  {{ saveButtonText }}
97
108
  </button>
98
109
  </ng-template>`,
@@ -108,10 +119,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
108
119
  type: Input
109
120
  }], parentComponent: [{
110
121
  type: Input
111
- }], saveButtonText: [{
112
- type: Input
113
122
  }], dialogBtnsTemplate: [{
114
123
  type: ContentChild,
115
124
  args: [DialogButtonsDirective, { static: true, read: TemplateRef }]
116
125
  }] } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1lbnRyeS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pbW5nLWtlbmRvLWRhdGEtZW50cnkvc3JjL2xpYi9kYXRhLWVudHJ5LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFrQ3BFLE1BQU0sT0FBTyx3QkFBd0I7SUFoQ3JDO1FBa0NrQixVQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUztRQUN0QixXQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUztRQU92QixtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQWNqQyxjQUFTLEdBQUcsS0FBSyxDQUFDO0tBNkIxQjtJQXhCUSxRQUFRO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsTUFBTSxJQUFJLFNBQVMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7SUFDdEQsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ00sTUFBTTtRQUNYLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ3JCLFNBQVM7UUFDVCxPQUFPO1lBQ0wsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO1NBQ3hFLENBQUM7SUFDSixDQUFDOztxSEFwRFUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsbVRBV3JCLHNCQUFzQiwyQkFBd0IsV0FBVywyQ0F6QzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBMkJPOzJGQUdOLHdCQUF3QjtrQkFoQ3BDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlDQUF5QztvQkFDbkQsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBMkJPO29CQUNqQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OEJBRWlCLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUlVLGtCQUFrQjtzQkFBakMsS0FBSztnQkFFVSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBV0Msa0JBQWtCO3NCQVZ4QixZQUFZO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVGVtcGxhdGVSZWYsXG4gIENvbnRlbnRDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlRGF0YUVudHJ5Q29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWRhdGEtZW50cnkuY29tcG9uZW50JztcbmltcG9ydCB7IERpYWxvZ0J1dHRvbnNEaXJlY3RpdmUgfSBmcm9tICcuL2RpYWxvZy1idXR0b25zLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ltbmctZGF0YS1lbnRyeS1kaWFsb2dbcGFyZW50Q29tcG9uZW50XScsXG4gIHRlbXBsYXRlOiBgPGtlbmRvLWRpYWxvZ1xuICAgICAgW3dpZHRoXT1cIndpZHRoXCJcbiAgICAgIFttaW5XaWR0aF09XCJtaW5XaWR0aCA/PyB3aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICAoY2xvc2UpPVwiY2xvc2UoKVwiXG4gICAgICBbYXV0b0ZvY3VzZWRFbGVtZW50XT1cImF1dG9Gb2N1c2VkRWxlbWVudCB8fCAnJ1wiPlxuICAgICAgPGtlbmRvLWRpYWxvZy10aXRsZWJhciBjbGFzcz1cImJnLXByaW1hcnlcIj57e1xuICAgICAgICBkaWFsb2dUaXRsZVxuICAgICAgfX08L2tlbmRvLWRpYWxvZy10aXRsZWJhcj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDxrZW5kby1kaWFsb2ctYWN0aW9ucz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBkaWFsb2dCdG5zVGVtcGxhdGUgfHwgZGVmYXVsdERpYWxvZ0FjdGlvbnNUcGw7XG4gICAgICAgICAgICBjb250ZXh0OiBkaWFsb2dBY3Rpb25CdG5zQ3R4XG4gICAgICAgICAgXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9rZW5kby1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2tlbmRvLWRpYWxvZz5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdERpYWxvZ0FjdGlvbnNUcGw+XG4gICAgICA8YnV0dG9uIGtlbmRvQnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGtlbmRvQnV0dG9uIChjbGljayk9XCJzdWJtaXQoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxuICAgICAgICB7eyBzYXZlQnV0dG9uVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5gLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUVudHJ5RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIG1pbldpZHRoPzogbnVtYmVyOyAvL05PU09OQVJcbiAgQElucHV0KCkgcHVibGljIHdpZHRoID0gODAwOyAvL05PU09OQVJcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDYwMDsgLy9OT1NPTkFSXG4gIC8qKlxuICAgKiBodHRwczovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGlhbG9ncy9kaWFsb2cvaW5pdGlhbC1mb2N1cy9cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBhdXRvRm9jdXNlZEVsZW1lbnQ/OiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIEBJbnB1dCgpIHB1YmxpYyBwYXJlbnRDb21wb25lbnQ/OiBCYXNlRGF0YUVudHJ5Q29tcG9uZW50PGFueT47IC8vTk9TT05BUlxuICBASW5wdXQoKSBwdWJsaWMgc2F2ZUJ1dHRvblRleHQgPSAnU2F2ZSc7XG4gIEBDb250ZW50Q2hpbGQoRGlhbG9nQnV0dG9uc0RpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIC8qKlxuICAgKiBFeGFtcGxlIFVzYWdlOlxuICAgKiA8aW1uZy1kYXRhLWVudHJ5LWRpYWxvZz5cbiAgICogLi4uLi4uXG4gICAqICA8bmctdGVtcGxhdGUgW2ltbmdEaWFsb2dCdG5zXSBsZXQtY29yZUJ1dHRvbnM+XG4gICAqICAgIDxidXR0b24gaWQ9XCJidG5DdXN0b20xXCIgY2xhc3M9XCJrLWJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNsb3NlPC9idXR0b24+XG4gICAqICA8L25nLXRlbXBsYXRlPlxuICAgKiA8L2ltbmctZGF0YS1lbnRyeS1kaWFsb2c+XG4gICAqL1xuICBwdWJsaWMgZGlhbG9nQnRuc1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIHB1YmxpYyBsb2FkaW5nJD86IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBhZGRFZGl0Rm9ybT86IEZvcm1Hcm91cDtcbiAgcHVibGljIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICBwdWJsaWMgZGlhbG9nVGl0bGU/OiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIHB1YmxpYyBjb21wb25lbnQ/OiB7fTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcmVudENvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIGlucHV0ICdwYXJlbnRDb21wb25lbnQnIGlzIHJlcXVpcmVkYCk7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nVGl0bGUgPSB0aGlzLnBhcmVudENvbXBvbmVudC5kaWFsb2dUaXRsZTtcbiAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5wYXJlbnRDb21wb25lbnQubG9hZGluZyQ7XG4gICAgdGhpcy5hZGRFZGl0Rm9ybSA9IHRoaXMucGFyZW50Q29tcG9uZW50LmFkZEVkaXRGb3JtO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50Q29tcG9uZW50Py5jbG9zZUZvcm0oKTtcbiAgfVxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50Q29tcG9uZW50Py5vbkNhbmNlbCgpO1xuICB9XG4gIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5wYXJlbnRDb21wb25lbnQ/Lm9uU3VibWl0KCk7XG4gIH1cbiAgZ2V0IGRpYWxvZ0FjdGlvbkJ0bnNDdHgoKTogb2JqZWN0IHwgbnVsbCB7XG4gICAgLy9OT1NPTkFSXG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogeyBjYW5jZWw6ICgpID0+IHRoaXMuY2FuY2VsKCksIHN1Ym1pdDogKCkgPT4gdGhpcy5zdWJtaXQoKSB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1lbnRyeS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pbW5nLWtlbmRvLWRhdGEtZW50cnkvc3JjL2xpYi9kYXRhLWVudHJ5LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFzQ3BFLE1BQU0sT0FBTyx3QkFBd0I7SUFwQ3JDO1FBc0NrQixVQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUztRQUN0QixXQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUztRQU9oQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQWN4QixXQUFNLEdBQUcsV0FBVyxDQUFDO1FBQ3JCLGNBQVMsR0FBRyxLQUFLLENBQUM7S0ErQjFCO0lBMUJRLFFBQVE7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixNQUFNLElBQUksU0FBUyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDaEU7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQ3BELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUNwRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDO1FBQzFELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDNUMsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ00sTUFBTTtRQUNYLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ3JCLFNBQVM7UUFDVCxPQUFPO1lBQ0wsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO1NBQ3hFLENBQUM7SUFDSixDQUFDOztxSEF2RFUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsaVJBV3JCLHNCQUFzQiwyQkFBd0IsV0FBVywyQ0E3QzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQStCTzsyRkFHTix3QkFBd0I7a0JBcENwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5Q0FBeUM7b0JBQ25ELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErQk87b0JBQ2pCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFFaUIsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBSVUsa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUVVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBWUMsa0JBQWtCO3NCQVZ4QixZQUFZO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVGVtcGxhdGVSZWYsXG4gIENvbnRlbnRDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlRGF0YUVudHJ5Q29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWRhdGEtZW50cnkuY29tcG9uZW50JztcbmltcG9ydCB7IERpYWxvZ0J1dHRvbnNEaXJlY3RpdmUgfSBmcm9tICcuL2RpYWxvZy1idXR0b25zLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ltbmctZGF0YS1lbnRyeS1kaWFsb2dbcGFyZW50Q29tcG9uZW50XScsXG4gIHRlbXBsYXRlOiBgPGtlbmRvLWRpYWxvZ1xuICAgICAgW3dpZHRoXT1cIndpZHRoXCJcbiAgICAgIFttaW5XaWR0aF09XCJtaW5XaWR0aCA/PyB3aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICAoY2xvc2UpPVwiY2xvc2UoKVwiXG4gICAgICBbYXV0b0ZvY3VzZWRFbGVtZW50XT1cImF1dG9Gb2N1c2VkRWxlbWVudCB8fCAnJ1wiPlxuICAgICAgPGtlbmRvLWRpYWxvZy10aXRsZWJhciBjbGFzcz1cImJnLXByaW1hcnlcIj57e1xuICAgICAgICBkaWFsb2dUaXRsZVxuICAgICAgfX08L2tlbmRvLWRpYWxvZy10aXRsZWJhcj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDxrZW5kby1kaWFsb2ctYWN0aW9ucz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBkaWFsb2dCdG5zVGVtcGxhdGUgfHwgZGVmYXVsdERpYWxvZ0FjdGlvbnNUcGw7XG4gICAgICAgICAgICBjb250ZXh0OiBkaWFsb2dBY3Rpb25CdG5zQ3R4XG4gICAgICAgICAgXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9rZW5kby1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2tlbmRvLWRpYWxvZz5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHREaWFsb2dBY3Rpb25zVHBsPlxuICAgICAgPGJ1dHRvbiBrZW5kb0J1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiPlxuICAgICAgICBDYW5jZWxcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbYXR0ci5mb3JtXT1cImZvcm1JZFwiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBrZW5kb0J1dHRvblxuICAgICAgICAoY2xpY2spPVwic3VibWl0KClcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cbiAgICAgICAge3sgc2F2ZUJ1dHRvblRleHQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+YCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFFbnRyeURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHB1YmxpYyBtaW5XaWR0aD86IG51bWJlcjsgLy9OT1NPTkFSXG4gIEBJbnB1dCgpIHB1YmxpYyB3aWR0aCA9IDgwMDsgLy9OT1NPTkFSXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWlnaHQgPSA2MDA7IC8vTk9TT05BUlxuICAvKipcbiAgICogaHR0cHM6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RpYWxvZ3MvZGlhbG9nL2luaXRpYWwtZm9jdXMvXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgYXV0b0ZvY3VzZWRFbGVtZW50Pzogc3RyaW5nO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBASW5wdXQoKSBwdWJsaWMgcGFyZW50Q29tcG9uZW50PzogQmFzZURhdGFFbnRyeUNvbXBvbmVudDxhbnk+OyAvL05PU09OQVJcbiAgcHVibGljIHNhdmVCdXR0b25UZXh0ID0gJ1NhdmUnO1xuICBAQ29udGVudENoaWxkKERpYWxvZ0J1dHRvbnNEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAvKipcbiAgICogRXhhbXBsZSBVc2FnZTpcbiAgICogPGltbmctZGF0YS1lbnRyeS1kaWFsb2c+XG4gICAqIC4uLi4uLlxuICAgKiAgPG5nLXRlbXBsYXRlIFtpbW5nRGlhbG9nQnRuc10gbGV0LWNvcmVCdXR0b25zPlxuICAgKiAgICA8YnV0dG9uIGlkPVwiYnRuQ3VzdG9tMVwiIGNsYXNzPVwiay1idXR0b25cIiAoY2xpY2spPVwiY2FuY2VsKClcIj5DbG9zZTwvYnV0dG9uPlxuICAgKiAgPC9uZy10ZW1wbGF0ZT5cbiAgICogPC9pbW5nLWRhdGEtZW50cnktZGlhbG9nPlxuICAgKi9cbiAgcHVibGljIGRpYWxvZ0J0bnNUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBwdWJsaWMgbG9hZGluZyQ/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgYWRkRWRpdEZvcm0/OiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBmb3JtSWQgPSAnaW1uZy1mb3JtJztcbiAgcHVibGljIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICBwdWJsaWMgZGlhbG9nVGl0bGU/OiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIHB1YmxpYyBjb21wb25lbnQ/OiB7fTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcmVudENvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIGlucHV0ICdwYXJlbnRDb21wb25lbnQnIGlzIHJlcXVpcmVkYCk7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nVGl0bGUgPSB0aGlzLnBhcmVudENvbXBvbmVudC5kaWFsb2dUaXRsZTtcbiAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5wYXJlbnRDb21wb25lbnQubG9hZGluZyQ7XG4gICAgdGhpcy5hZGRFZGl0Rm9ybSA9IHRoaXMucGFyZW50Q29tcG9uZW50LmFkZEVkaXRGb3JtO1xuICAgIHRoaXMuc2F2ZUJ1dHRvblRleHQgPSB0aGlzLnBhcmVudENvbXBvbmVudC5zYXZlQnV0dG9uVGV4dDtcbiAgICB0aGlzLmZvcm1JZCA9IHRoaXMucGFyZW50Q29tcG9uZW50LmZvcm1JZDtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudENvbXBvbmVudD8uY2xvc2VGb3JtKCk7XG4gIH1cbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudENvbXBvbmVudD8ub25DYW5jZWwoKTtcbiAgfVxuICBwdWJsaWMgc3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50Q29tcG9uZW50Py5vblN1Ym1pdCgpO1xuICB9XG4gIGdldCBkaWFsb2dBY3Rpb25CdG5zQ3R4KCk6IG9iamVjdCB8IG51bGwge1xuICAgIC8vTk9TT05BUlxuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHsgY2FuY2VsOiAoKSA9PiB0aGlzLmNhbmNlbCgpLCBzdWJtaXQ6ICgpID0+IHRoaXMuc3VibWl0KCkgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -25,6 +25,7 @@ class DataEntryDialogComponent {
25
25
  this.width = 800; //NOSONAR
26
26
  this.height = 600; //NOSONAR
27
27
  this.saveButtonText = 'Save';
28
+ this.formId = 'imng-form';
28
29
  this.submitted = false;
29
30
  }
30
31
  ngOnInit() {
@@ -34,6 +35,8 @@ class DataEntryDialogComponent {
34
35
  this.dialogTitle = this.parentComponent.dialogTitle;
35
36
  this.loading$ = this.parentComponent.loading$;
36
37
  this.addEditForm = this.parentComponent.addEditForm;
38
+ this.saveButtonText = this.parentComponent.saveButtonText;
39
+ this.formId = this.parentComponent.formId;
37
40
  }
38
41
  close() {
39
42
  var _a;
@@ -55,7 +58,7 @@ class DataEntryDialogComponent {
55
58
  }
56
59
  }
57
60
  DataEntryDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: DataEntryDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
58
- DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: DataEntryDialogComponent, selector: "imng-data-entry-dialog[parentComponent]", inputs: { minWidth: "minWidth", width: "width", height: "height", autoFocusedElement: "autoFocusedElement", parentComponent: "parentComponent", saveButtonText: "saveButtonText" }, queries: [{ propertyName: "dialogBtnsTemplate", first: true, predicate: DialogButtonsDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `<kendo-dialog
61
+ DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: DataEntryDialogComponent, selector: "imng-data-entry-dialog[parentComponent]", inputs: { minWidth: "minWidth", width: "width", height: "height", autoFocusedElement: "autoFocusedElement", parentComponent: "parentComponent" }, queries: [{ propertyName: "dialogBtnsTemplate", first: true, predicate: DialogButtonsDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `<kendo-dialog
59
62
  [width]="width"
60
63
  [minWidth]="minWidth ?? width"
61
64
  [height]="height"
@@ -74,12 +77,16 @@ DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0
74
77
  </ng-container>
75
78
  </kendo-dialog-actions>
76
79
  </kendo-dialog>
77
-
78
80
  <ng-template #defaultDialogActionsTpl>
79
81
  <button kendoButton (click)="cancel()" class="btn btn-secondary btn-sm">
80
82
  Cancel
81
83
  </button>
82
- <button kendoButton (click)="submit()" class="btn btn-primary btn-sm">
84
+ <button
85
+ [attr.form]="formId"
86
+ type="submit"
87
+ kendoButton
88
+ (click)="submit()"
89
+ class="btn btn-primary btn-sm">
83
90
  {{ saveButtonText }}
84
91
  </button>
85
92
  </ng-template>`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i2.DialogTitleBarComponent, selector: "kendo-dialog-titlebar", inputs: ["id", "closeTitle"], outputs: ["close"] }, { kind: "component", type: i2.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -106,12 +113,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
106
113
  </ng-container>
107
114
  </kendo-dialog-actions>
108
115
  </kendo-dialog>
109
-
110
116
  <ng-template #defaultDialogActionsTpl>
111
117
  <button kendoButton (click)="cancel()" class="btn btn-secondary btn-sm">
112
118
  Cancel
113
119
  </button>
114
- <button kendoButton (click)="submit()" class="btn btn-primary btn-sm">
120
+ <button
121
+ [attr.form]="formId"
122
+ type="submit"
123
+ kendoButton
124
+ (click)="submit()"
125
+ class="btn btn-primary btn-sm">
115
126
  {{ saveButtonText }}
116
127
  </button>
117
128
  </ng-template>`,
@@ -127,8 +138,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
127
138
  type: Input
128
139
  }], parentComponent: [{
129
140
  type: Input
130
- }], saveButtonText: [{
131
- type: Input
132
141
  }], dialogBtnsTemplate: [{
133
142
  type: ContentChild,
134
143
  args: [DialogButtonsDirective, { static: true, read: TemplateRef }]
@@ -166,31 +175,30 @@ class BaseDataEntryComponent {
166
175
  this.facade = facade;
167
176
  this.width = 800; //NOSONAR
168
177
  this.height = 600; //NOSONAR
178
+ this.formId = 'imng-form';
179
+ this.saveButtonText = 'Save';
169
180
  this.MinLengthError = 'minlength';
170
181
  this.RequiredError = 'required';
171
182
  this.ENUM_DISPLAY_TEXT = 'displayText';
172
183
  this.ENUM_NAME = 'name';
173
184
  this.allSubscriptions = new Subscriptions();
174
- this._submitted$ = new BehaviorSubject(false);
185
+ this.submitted$ = new BehaviorSubject(false);
175
186
  this.loading$ = this.facade.loading$;
176
187
  this.initForm();
177
188
  }
178
- get submitted$() {
179
- return this._submitted$.asObservable();
180
- }
181
189
  ngOnDestroy() {
182
190
  this.allSubscriptions.unsubscribeAll();
183
191
  }
184
192
  closeForm() {
185
193
  this.initForm();
186
194
  this.facade.clearCurrentEntity();
187
- this._submitted$.next(false);
195
+ this.submitted$.next(false);
188
196
  }
189
197
  onCancel() {
190
198
  this.closeForm();
191
199
  }
192
200
  onSubmit() {
193
- this._submitted$.next(true);
201
+ this.submitted$.next(true);
194
202
  // stop here if form is invalid
195
203
  if (!this.addEditForm.valid) {
196
204
  console.error('form validation errors.'); //NOSONAR
@@ -208,9 +216,11 @@ class BaseDataEntryComponent {
208
216
  formControl(controlName, controls = this.addEditForm.controls) {
209
217
  return controls[controlName];
210
218
  }
211
- formControlErrors(control, controls = this.addEditForm.controls) {
219
+ formControlErrors(control, controls = this
220
+ .addEditForm.controls) {
221
+ const tempControl =
212
222
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
213
- const tempControl = typeof control === 'string' ? controls[control] : control;
223
+ typeof control === 'string' ? controls[control] : control;
214
224
  if ((tempControl === null || tempControl === void 0 ? void 0 : tempControl.valid) && !(tempControl === null || tempControl === void 0 ? void 0 : tempControl.errors)) {
215
225
  return null;
216
226
  }
@@ -220,25 +230,34 @@ class BaseDataEntryComponent {
220
230
  var _a;
221
231
  return (_a = this.formControlErrors(controlName)) === null || _a === void 0 ? void 0 : _a[this.MinLengthError];
222
232
  }
223
- getFormErrors(controls = this.addEditForm.controls, parentControlName) {
233
+ getFormErrors(controls = this
234
+ .addEditForm.controls, parentControlName) {
224
235
  const errors = [];
225
236
  for (const controlName of Object.keys(controls)) {
226
237
  const control = controls[controlName];
227
238
  const error = this.formControlErrors(control, controls);
228
239
  if (error) {
229
- errors.push({ controlName: parentControlName ? `${parentControlName}.${controlName}` : controlName, error });
240
+ errors.push({
241
+ controlName: parentControlName
242
+ ? `${parentControlName}.${controlName}`
243
+ : controlName,
244
+ error,
245
+ });
230
246
  }
231
247
  if (control === null || control === void 0 ? void 0 : control.controls) {
232
- errors.push(...this.getFormErrors(control.controls, parentControlName ? `${parentControlName}.${controlName}` : controlName));
248
+ errors.push(...this.getFormErrors(control.controls, parentControlName
249
+ ? `${parentControlName}.${controlName}`
250
+ : controlName));
233
251
  }
234
252
  }
235
253
  return errors;
236
254
  }
237
255
  }
238
- BaseDataEntryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, deps: [{ token: FACADE }], target: i0.ɵɵFactoryTarget.Directive });
239
- BaseDataEntryComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: BaseDataEntryComponent, inputs: { width: "width", height: "height" }, ngImport: i0 });
256
+ BaseDataEntryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, deps: [{ token: FACADE }], target: i0.ɵɵFactoryTarget.Component });
257
+ BaseDataEntryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: BaseDataEntryComponent, selector: "ng-component", inputs: { width: "width", height: "height" }, ngImport: i0, template: '', isInline: true });
240
258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, decorators: [{
241
- type: Directive
259
+ type: Component,
260
+ args: [{ template: '' }]
242
261
  }], ctorParameters: function () {
243
262
  return [{ type: undefined, decorators: [{
244
263
  type: Inject,
@@ -1 +1 @@
1
- {"version":3,"file":"imng-kendo-data-entry.mjs","sources":["../../../../libs/imng-kendo-data-entry/src/lib/dialog-buttons.directive.ts","../../../../libs/imng-kendo-data-entry/src/lib/data-entry-dialog.component.ts","../../../../libs/imng-kendo-data-entry/src/lib/imng-kendo-data-entry.module.ts","../../../../libs/imng-kendo-data-entry/src/lib/base-data-entry.component.ts","../../../../libs/imng-kendo-data-entry/src/lib/reducer-collection-logic.ts","../../../../libs/imng-kendo-data-entry/src/lib/form-group-patcher.ts","../../../../libs/imng-kendo-data-entry/src/imng-kendo-data-entry.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[imngDialogBtns]' })\nexport class DialogButtonsDirective {\n constructor(public tpl: TemplateRef<unknown>) { }\n}\n","import {\n Component,\n OnInit,\n Input,\n ChangeDetectionStrategy,\n TemplateRef,\n ContentChild,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { BaseDataEntryComponent } from './base-data-entry.component';\nimport { DialogButtonsDirective } from './dialog-buttons.directive';\n\n@Component({\n selector: 'imng-data-entry-dialog[parentComponent]',\n template: `<kendo-dialog\n [width]=\"width\"\n [minWidth]=\"minWidth ?? width\"\n [height]=\"height\"\n (close)=\"close()\"\n [autoFocusedElement]=\"autoFocusedElement || ''\">\n <kendo-dialog-titlebar class=\"bg-primary\">{{\n dialogTitle\n }}</kendo-dialog-titlebar>\n <ng-content></ng-content>\n <kendo-dialog-actions>\n <ng-container\n *ngTemplateOutlet=\"\n dialogBtnsTemplate || defaultDialogActionsTpl;\n context: dialogActionBtnsCtx\n \">\n </ng-container>\n </kendo-dialog-actions>\n </kendo-dialog>\n\n <ng-template #defaultDialogActionsTpl>\n <button kendoButton (click)=\"cancel()\" class=\"btn btn-secondary btn-sm\">\n Cancel\n </button>\n <button kendoButton (click)=\"submit()\" class=\"btn btn-primary btn-sm\">\n {{ saveButtonText }}\n </button>\n </ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataEntryDialogComponent implements OnInit {\n @Input() public minWidth?: number; //NOSONAR\n @Input() public width = 800; //NOSONAR\n @Input() public height = 600; //NOSONAR\n /**\n * https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/initial-focus/\n */\n @Input() public autoFocusedElement?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() public parentComponent?: BaseDataEntryComponent<any>; //NOSONAR\n @Input() public saveButtonText = 'Save';\n @ContentChild(DialogButtonsDirective, { static: true, read: TemplateRef })\n /**\n * Example Usage:\n * <imng-data-entry-dialog>\n * ......\n * <ng-template [imngDialogBtns] let-coreButtons>\n * <button id=\"btnCustom1\" class=\"k-button\" (click)=\"cancel()\">Close</button>\n * </ng-template>\n * </imng-data-entry-dialog>\n */\n public dialogBtnsTemplate?: TemplateRef<unknown>;\n public loading$?: Observable<boolean>;\n public addEditForm?: FormGroup;\n public submitted = false;\n public dialogTitle?: string;\n // eslint-disable-next-line @typescript-eslint/ban-types\n public component?: {};\n\n public ngOnInit(): void {\n if (!this.parentComponent) {\n throw new TypeError(`The input 'parentComponent' is required`);\n }\n this.dialogTitle = this.parentComponent.dialogTitle;\n this.loading$ = this.parentComponent.loading$;\n this.addEditForm = this.parentComponent.addEditForm;\n }\n\n public close(): void {\n this.parentComponent?.closeForm();\n }\n public cancel(): void {\n this.parentComponent?.onCancel();\n }\n public submit(): void {\n this.parentComponent?.onSubmit();\n }\n get dialogActionBtnsCtx(): object | null {\n //NOSONAR\n return {\n $implicit: { cancel: () => this.cancel(), submit: () => this.submit() },\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataEntryDialogComponent } from './data-entry-dialog.component';\nimport { DialogButtonsDirective } from './dialog-buttons.directive';\nimport { DialogModule } from '@progress/kendo-angular-dialog';\n\n@NgModule({\n imports: [CommonModule, DialogModule],\n declarations: [DataEntryDialogComponent, DialogButtonsDirective],\n exports: [DataEntryDialogComponent, DialogButtonsDirective],\n})\nexport class ImngDataEntryDialogModule {}\n","import {\n Directive,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { AbstractControl, ValidationErrors, FormGroup, FormArray } from '@angular/forms';\nimport { IBaseDataEntryFacade } from './data-entry-facade';\nimport { Subscribable, Subscriptions } from 'imng-ngrx-utils';\n\nconst FACADE = new InjectionToken<IBaseDataEntryFacade>(\n 'imng-data-entry-facade',\n);\n\n/**\n * The extending class has to implement the following properties on ngInit\n * dialogTitle: string - This will be the text displayed at the top of the modal title bar\n * props: enum - This is a helper property to make the html markup type safe\n *\n * Along with the requirements above, the extending class has to set values to the\n * following properties on ngInit\n * active$: Observable<boolean> - This typically would be assigned to the isNewActive$ or isEditActive on the facade\n * addEditForm: FormGroup - This will be created by your component\n *\n * @class BaseDataEntryComponent>\n */\n@Directive()\nexport abstract class BaseDataEntryComponent<\n FACADE extends IBaseDataEntryFacade,\n > implements OnDestroy, Subscribable {\n @Input() public width: string | number = 800; //NOSONAR\n @Input() public height: string | number = 600; //NOSONAR\n public readonly MinLengthError = 'minlength';\n public readonly RequiredError = 'required';\n public readonly ENUM_DISPLAY_TEXT = 'displayText';\n public readonly ENUM_NAME = 'name';\n public allSubscriptions = new Subscriptions();\n public abstract dialogTitle: string;\n public abstract props: unknown;\n public abstract addEditForm: FormGroup;\n public loading$: Observable<boolean>;\n private readonly _submitted$: BehaviorSubject<boolean> = new BehaviorSubject(\n false as boolean,\n );\n\n public get submitted$(): Observable<boolean> {\n return this._submitted$.asObservable();\n }\n constructor(@Inject(FACADE) public readonly facade: FACADE) {\n this.loading$ = this.facade.loading$;\n this.initForm();\n }\n\n public ngOnDestroy(): void {\n this.allSubscriptions.unsubscribeAll();\n }\n\n public closeForm(): void {\n this.initForm();\n this.facade.clearCurrentEntity();\n this._submitted$.next(false);\n }\n\n public onCancel(): void {\n this.closeForm();\n }\n\n public onSubmit(): boolean {\n this._submitted$.next(true);\n\n // stop here if form is invalid\n if (!this.addEditForm.valid) {\n console.error('form validation errors.'); //NOSONAR\n console.error(JSON.stringify(this.getFormErrors())); //NOSONAR\n return false;\n }\n this.save();\n this.closeForm();\n return true;\n }\n\n public isDataInvalid(): boolean {\n return this.addEditForm.invalid;\n }\n\n // convenience getter for easy access to form fields\n public formControl(controlName: string, controls: { [key: string]: AbstractControl; } = this.addEditForm.controls): AbstractControl {\n return controls[controlName];\n }\n\n public formControlErrors(control: string | AbstractControl, controls: { [key: string]: AbstractControl; } | AbstractControl[] = this.addEditForm.controls): ValidationErrors | null {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tempControl = typeof control === 'string' ? (controls as any)[control] : control;\n if (tempControl?.valid && !tempControl?.errors) {\n return null;\n }\n return tempControl?.errors;\n }\n public formMinLengthError(\n controlName: string,\n ): { requiredLength: number; actualLength: number; } | null {\n return this.formControlErrors(controlName)?.[this.MinLengthError];\n }\n public getFormErrors(controls: { [key: string]: AbstractControl; } | AbstractControl[] = this.addEditForm.controls, parentControlName?: string): { controlName: string; error: ValidationErrors; }[] {\n const errors: { controlName: string; error: ValidationErrors; }[] = [];\n for (const controlName of Object.keys(controls)) {\n const control = (controls as never)[controlName];\n const error = this.formControlErrors(control, controls);\n if (error) {\n errors.push({ controlName: parentControlName ? `${parentControlName}.${controlName}` : controlName, error });\n }\n if ((control as FormArray)?.controls) {\n\n errors.push(...this.getFormErrors((control as FormArray).controls, parentControlName ? `${parentControlName}.${controlName}` : controlName));\n }\n }\n return errors;\n }\n\n public abstract initForm(): void;\n public abstract save(): void;\n}\n","import { ValueType } from 'imng-nrsrx-client-utils';\nexport function updateStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const index = collection.findIndex((val) => val.id === item.id);\n if (index > -1) {\n const items = [...collection];\n items.splice(index, 1, item);\n return items;\n }\n return collection;\n}\n\nexport function removeStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const index = collection.findIndex((val) => val.id === item.id);\n if (index > -1) {\n const items = [...collection];\n items.splice(index, 1);\n return items;\n }\n return collection;\n}\n\nexport function addStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const items = [...collection];\n items.unshift(item);\n return items;\n}\n","import { FormGroup } from '@angular/forms';\nimport { take, tap, filter } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\n\nexport const formGroupPatcher =\n <TEntity>(addEditForm: FormGroup) =>\n (source: Observable<TEntity>) =>\n source.pipe(\n filter((t) => !!t),\n take(1),\n tap((t) => addEditForm.patchValue(t)),\n );\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;MAGa,sBAAsB,CAAA;AACjC,IAAA,WAAA,CAAmB,GAAyB,EAAA;AAAzB,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAsB;KAAK;;mHADtC,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAAtB,sBAAsB,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,SAAS;mBAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;;;MC2C9B,wBAAwB,CAAA;AAhCrC,IAAA,WAAA,GAAA;AAkCkB,QAAA,IAAA,CAAA,KAAK,GAAG,GAAG,CAAC;AACZ,QAAA,IAAA,CAAA,MAAM,GAAG,GAAG,CAAC;AAOb,QAAA,IAAc,CAAA,cAAA,GAAG,MAAM,CAAC;AAcjC,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;KA6B1B;IAxBQ,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,MAAM,IAAI,SAAS,CAAC,CAAA,uCAAA,CAAyC,CAAC,CAAC;AAChE,SAAA;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;KACrD;IAEM,KAAK,GAAA;;AACV,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,EAAE,CAAC;KACnC;IACM,MAAM,GAAA;;AACX,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,EAAE,CAAC;KAClC;IACM,MAAM,GAAA;;AACX,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,EAAE,CAAC;KAClC;AACD,IAAA,IAAI,mBAAmB,GAAA;;QAErB,OAAO;YACL,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE;SACxE,CAAC;KACH;;qHApDU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAWrB,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,sBAAsB,EAAwB,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EAzC7D,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,kBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAGN,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAhCpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yCAAyC;AACnD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,kBAAA,CAAA;oBACjB,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD,CAAA;8BAEiB,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAIU,kBAAkB,EAAA,CAAA;sBAAjC,KAAK;gBAEU,eAAe,EAAA,CAAA;sBAA9B,KAAK;gBACU,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBAWC,kBAAkB,EAAA,CAAA;sBAVxB,YAAY;uBAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;;;MC7C9D,yBAAyB,CAAA;;sHAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;uHAAzB,yBAAyB,EAAA,YAAA,EAAA,CAHrB,wBAAwB,EAAE,sBAAsB,CAAA,EAAA,OAAA,EAAA,CADrD,YAAY,EAAE,YAAY,CAAA,EAAA,OAAA,EAAA,CAE1B,wBAAwB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;uHAE/C,yBAAyB,EAAA,OAAA,EAAA,CAJ1B,YAAY,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;2FAIzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;AACrC,oBAAA,YAAY,EAAE,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;AAChE,oBAAA,OAAO,EAAE,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;iBAC5D,CAAA;;;ACED,MAAM,MAAM,GAAG,IAAI,cAAc,CAC/B,wBAAwB,CACzB,CAAC;AAEF;;;;;;;;;;;AAWG;MAEmB,sBAAsB,CAAA;AAqB1C,IAAA,WAAA,CAA4C,MAAc,EAAA;AAAd,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAlB1C,QAAA,IAAA,CAAA,KAAK,GAAoB,GAAG,CAAC;AAC7B,QAAA,IAAA,CAAA,MAAM,GAAoB,GAAG,CAAC;AAC9B,QAAA,IAAc,CAAA,cAAA,GAAG,WAAW,CAAC;AAC7B,QAAA,IAAa,CAAA,aAAA,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAiB,CAAA,iBAAA,GAAG,aAAa,CAAC;AAClC,QAAA,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC;AAC5B,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,aAAa,EAAE,CAAC;QAK7B,IAAA,CAAA,WAAW,GAA6B,IAAI,eAAe,CAC1E,KAAgB,CACjB,CAAC;QAMA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAND,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;KACxC;IAMM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC;KACxC;IAEM,SAAS,GAAA;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEM,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG5B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC3B,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACzC,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACpD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;KACjC;;IAGM,WAAW,CAAC,WAAmB,EAAE,QAAA,GAAgD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAA;AAC/G,QAAA,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;KAC9B;IAEM,iBAAiB,CAAC,OAAiC,EAAE,QAAA,GAAoE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAA;;AAEvJ,QAAA,MAAM,WAAW,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAI,QAAgB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AACvF,QAAA,IAAI,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAX,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,WAAW,CAAE,KAAK,KAAI,EAAC,WAAW,aAAX,WAAW,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAX,WAAW,CAAE,MAAM,CAAA,EAAE;AAC9C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,WAAW,KAAX,IAAA,IAAA,WAAW,uBAAX,WAAW,CAAE,MAAM,CAAC;KAC5B;AACM,IAAA,kBAAkB,CACvB,WAAmB,EAAA;;AAEnB,QAAA,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,IAAI,CAAC,cAAc,CAAC,CAAC;KACnE;IACM,aAAa,CAAC,WAAoE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,iBAA0B,EAAA;QAC5I,MAAM,MAAM,GAAwD,EAAE,CAAC;QACvE,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC/C,YAAA,MAAM,OAAO,GAAI,QAAkB,CAAC,WAAW,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxD,YAAA,IAAI,KAAK,EAAE;gBACT,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,iBAAiB,GAAG,CAAA,EAAG,iBAAiB,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,GAAG,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9G,aAAA;AACD,YAAA,IAAK,OAAqB,KAArB,IAAA,IAAA,OAAqB,uBAArB,OAAqB,CAAE,QAAQ,EAAE;gBAEpC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAE,OAAqB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AAC9I,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;;AA1FmB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAqBtB,MAAM,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGArBN,sBAAsB,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAD3C,SAAS;;;8BAsBK,MAAM;+BAAC,MAAM,CAAA;;yBAlBV,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;;;AChCQ,SAAA,yBAAyB,CACvC,UAAoB,EACpB,IAAY,EAAA;AAEZ,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;AAChE,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7B,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;AACD,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC;AAEe,SAAA,yBAAyB,CACvC,UAAoB,EACpB,IAAY,EAAA;AAEZ,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;AAChE,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AAC9B,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvB,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;AACD,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC;AAEe,SAAA,sBAAsB,CACpC,UAAoB,EACpB,IAAY,EAAA;AAEZ,IAAA,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AAC9B,IAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,IAAA,OAAO,KAAK,CAAC;AACf;;MC9Ba,gBAAgB,GAC3B,CAAU,WAAsB,KAChC,CAAC,MAA2B,KAC1B,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAClB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;ACV3C;;AAEG;;;;"}
1
+ {"version":3,"file":"imng-kendo-data-entry.mjs","sources":["../../../../libs/imng-kendo-data-entry/src/lib/dialog-buttons.directive.ts","../../../../libs/imng-kendo-data-entry/src/lib/data-entry-dialog.component.ts","../../../../libs/imng-kendo-data-entry/src/lib/imng-kendo-data-entry.module.ts","../../../../libs/imng-kendo-data-entry/src/lib/base-data-entry.component.ts","../../../../libs/imng-kendo-data-entry/src/lib/reducer-collection-logic.ts","../../../../libs/imng-kendo-data-entry/src/lib/form-group-patcher.ts","../../../../libs/imng-kendo-data-entry/src/imng-kendo-data-entry.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[imngDialogBtns]' })\nexport class DialogButtonsDirective {\n constructor(public tpl: TemplateRef<unknown>) { }\n}\n","import {\n Component,\n OnInit,\n Input,\n ChangeDetectionStrategy,\n TemplateRef,\n ContentChild,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { BaseDataEntryComponent } from './base-data-entry.component';\nimport { DialogButtonsDirective } from './dialog-buttons.directive';\n\n@Component({\n selector: 'imng-data-entry-dialog[parentComponent]',\n template: `<kendo-dialog\n [width]=\"width\"\n [minWidth]=\"minWidth ?? width\"\n [height]=\"height\"\n (close)=\"close()\"\n [autoFocusedElement]=\"autoFocusedElement || ''\">\n <kendo-dialog-titlebar class=\"bg-primary\">{{\n dialogTitle\n }}</kendo-dialog-titlebar>\n <ng-content></ng-content>\n <kendo-dialog-actions>\n <ng-container\n *ngTemplateOutlet=\"\n dialogBtnsTemplate || defaultDialogActionsTpl;\n context: dialogActionBtnsCtx\n \">\n </ng-container>\n </kendo-dialog-actions>\n </kendo-dialog>\n <ng-template #defaultDialogActionsTpl>\n <button kendoButton (click)=\"cancel()\" class=\"btn btn-secondary btn-sm\">\n Cancel\n </button>\n <button\n [attr.form]=\"formId\"\n type=\"submit\"\n kendoButton\n (click)=\"submit()\"\n class=\"btn btn-primary btn-sm\">\n {{ saveButtonText }}\n </button>\n </ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataEntryDialogComponent implements OnInit {\n @Input() public minWidth?: number; //NOSONAR\n @Input() public width = 800; //NOSONAR\n @Input() public height = 600; //NOSONAR\n /**\n * https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/initial-focus/\n */\n @Input() public autoFocusedElement?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() public parentComponent?: BaseDataEntryComponent<any>; //NOSONAR\n public saveButtonText = 'Save';\n @ContentChild(DialogButtonsDirective, { static: true, read: TemplateRef })\n /**\n * Example Usage:\n * <imng-data-entry-dialog>\n * ......\n * <ng-template [imngDialogBtns] let-coreButtons>\n * <button id=\"btnCustom1\" class=\"k-button\" (click)=\"cancel()\">Close</button>\n * </ng-template>\n * </imng-data-entry-dialog>\n */\n public dialogBtnsTemplate?: TemplateRef<unknown>;\n public loading$?: Observable<boolean>;\n public addEditForm?: FormGroup;\n public formId = 'imng-form';\n public submitted = false;\n public dialogTitle?: string;\n // eslint-disable-next-line @typescript-eslint/ban-types\n public component?: {};\n\n public ngOnInit(): void {\n if (!this.parentComponent) {\n throw new TypeError(`The input 'parentComponent' is required`);\n }\n this.dialogTitle = this.parentComponent.dialogTitle;\n this.loading$ = this.parentComponent.loading$;\n this.addEditForm = this.parentComponent.addEditForm;\n this.saveButtonText = this.parentComponent.saveButtonText;\n this.formId = this.parentComponent.formId;\n }\n\n public close(): void {\n this.parentComponent?.closeForm();\n }\n public cancel(): void {\n this.parentComponent?.onCancel();\n }\n public submit(): void {\n this.parentComponent?.onSubmit();\n }\n get dialogActionBtnsCtx(): object | null {\n //NOSONAR\n return {\n $implicit: { cancel: () => this.cancel(), submit: () => this.submit() },\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataEntryDialogComponent } from './data-entry-dialog.component';\nimport { DialogButtonsDirective } from './dialog-buttons.directive';\nimport { DialogModule } from '@progress/kendo-angular-dialog';\n\n@NgModule({\n imports: [CommonModule, DialogModule],\n declarations: [DataEntryDialogComponent, DialogButtonsDirective],\n exports: [DataEntryDialogComponent, DialogButtonsDirective],\n})\nexport class ImngDataEntryDialogModule {}\n","import {\n Component,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport {\n AbstractControl,\n ValidationErrors,\n FormGroup,\n FormArray,\n} from '@angular/forms';\nimport { IBaseDataEntryFacade } from './data-entry-facade';\nimport { Subscribable, Subscriptions } from 'imng-ngrx-utils';\n\nconst FACADE = new InjectionToken<IBaseDataEntryFacade>(\n 'imng-data-entry-facade',\n);\n\n/**\n * The extending class has to implement the following properties on ngInit\n * dialogTitle: string - This will be the text displayed at the top of the modal title bar\n * props: enum - This is a helper property to make the html markup type safe\n *\n * Along with the requirements above, the extending class has to set values to the\n * following properties on ngInit\n * active$: Observable<boolean> - This typically would be assigned to the isNewActive$ or isEditActive on the facade\n * addEditForm: FormGroup - This will be created by your component\n *\n * @class BaseDataEntryComponent>\n */\n@Component({ template: '' })\nexport abstract class BaseDataEntryComponent<\n FACADE extends IBaseDataEntryFacade,\n> implements OnDestroy, Subscribable\n{\n @Input() public width: string | number = 800; //NOSONAR\n @Input() public height: string | number = 600; //NOSONAR\n\n public formId = 'imng-form';\n public saveButtonText = 'Save';\n public readonly MinLengthError = 'minlength';\n public readonly RequiredError = 'required';\n public readonly ENUM_DISPLAY_TEXT = 'displayText';\n public readonly ENUM_NAME = 'name';\n public allSubscriptions = new Subscriptions();\n public abstract dialogTitle: string;\n public abstract props: unknown;\n public abstract addEditForm: FormGroup;\n public loading$: Observable<boolean>;\n public readonly submitted$: BehaviorSubject<boolean> = new BehaviorSubject(\n false as boolean,\n );\n\n constructor(@Inject(FACADE) public readonly facade: FACADE) {\n this.loading$ = this.facade.loading$;\n this.initForm();\n }\n\n public ngOnDestroy(): void {\n this.allSubscriptions.unsubscribeAll();\n }\n\n public closeForm(): void {\n this.initForm();\n this.facade.clearCurrentEntity();\n this.submitted$.next(false);\n }\n\n public onCancel(): void {\n this.closeForm();\n }\n\n public onSubmit(): boolean {\n this.submitted$.next(true);\n\n // stop here if form is invalid\n if (!this.addEditForm.valid) {\n console.error('form validation errors.'); //NOSONAR\n console.error(JSON.stringify(this.getFormErrors())); //NOSONAR\n return false;\n }\n this.save();\n this.closeForm();\n return true;\n }\n\n public isDataInvalid(): boolean {\n return this.addEditForm.invalid;\n }\n\n // convenience getter for easy access to form fields\n public formControl(\n controlName: string,\n controls: { [key: string]: AbstractControl } = this.addEditForm.controls,\n ): AbstractControl {\n return controls[controlName];\n }\n\n public formControlErrors(\n control: string | AbstractControl,\n controls: { [key: string]: AbstractControl } | AbstractControl[] = this\n .addEditForm.controls,\n ): ValidationErrors | null {\n const tempControl =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof control === 'string' ? (controls as any)[control] : control;\n if (tempControl?.valid && !tempControl?.errors) {\n return null;\n }\n return tempControl?.errors;\n }\n public formMinLengthError(\n controlName: string,\n ): { requiredLength: number; actualLength: number } | null {\n return this.formControlErrors(controlName)?.[this.MinLengthError];\n }\n public getFormErrors(\n controls: { [key: string]: AbstractControl } | AbstractControl[] = this\n .addEditForm.controls,\n parentControlName?: string,\n ): { controlName: string; error: ValidationErrors }[] {\n const errors: { controlName: string; error: ValidationErrors }[] = [];\n for (const controlName of Object.keys(controls)) {\n const control = (controls as never)[controlName];\n const error = this.formControlErrors(control, controls);\n if (error) {\n errors.push({\n controlName: parentControlName\n ? `${parentControlName}.${controlName}`\n : controlName,\n error,\n });\n }\n if ((control as FormArray)?.controls) {\n errors.push(\n ...this.getFormErrors(\n (control as FormArray).controls,\n parentControlName\n ? `${parentControlName}.${controlName}`\n : controlName,\n ),\n );\n }\n }\n return errors;\n }\n\n public abstract initForm(): void;\n public abstract save(): void;\n}\n","import { ValueType } from 'imng-nrsrx-client-utils';\nexport function updateStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const index = collection.findIndex((val) => val.id === item.id);\n if (index > -1) {\n const items = [...collection];\n items.splice(index, 1, item);\n return items;\n }\n return collection;\n}\n\nexport function removeStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const index = collection.findIndex((val) => val.id === item.id);\n if (index > -1) {\n const items = [...collection];\n items.splice(index, 1);\n return items;\n }\n return collection;\n}\n\nexport function addStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const items = [...collection];\n items.unshift(item);\n return items;\n}\n","import { FormGroup } from '@angular/forms';\nimport { take, tap, filter } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\n\nexport const formGroupPatcher =\n <TEntity>(addEditForm: FormGroup) =>\n (source: Observable<TEntity>) =>\n source.pipe(\n filter((t) => !!t),\n take(1),\n tap((t) => addEditForm.patchValue(t)),\n );\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Directive, Inject, Input, TemplateRef, Component, ChangeDetectionStrategy, ContentChild, NgModule } from '@angular/core';
2
+ import { InjectionToken, Component, Inject, Input, Directive, TemplateRef, ChangeDetectionStrategy, ContentChild, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { BehaviorSubject } from 'rxjs';
@@ -26,31 +26,30 @@ class BaseDataEntryComponent {
26
26
  this.facade = facade;
27
27
  this.width = 800; //NOSONAR
28
28
  this.height = 600; //NOSONAR
29
+ this.formId = 'imng-form';
30
+ this.saveButtonText = 'Save';
29
31
  this.MinLengthError = 'minlength';
30
32
  this.RequiredError = 'required';
31
33
  this.ENUM_DISPLAY_TEXT = 'displayText';
32
34
  this.ENUM_NAME = 'name';
33
35
  this.allSubscriptions = new Subscriptions();
34
- this._submitted$ = new BehaviorSubject(false);
36
+ this.submitted$ = new BehaviorSubject(false);
35
37
  this.loading$ = this.facade.loading$;
36
38
  this.initForm();
37
39
  }
38
- get submitted$() {
39
- return this._submitted$.asObservable();
40
- }
41
40
  ngOnDestroy() {
42
41
  this.allSubscriptions.unsubscribeAll();
43
42
  }
44
43
  closeForm() {
45
44
  this.initForm();
46
45
  this.facade.clearCurrentEntity();
47
- this._submitted$.next(false);
46
+ this.submitted$.next(false);
48
47
  }
49
48
  onCancel() {
50
49
  this.closeForm();
51
50
  }
52
51
  onSubmit() {
53
- this._submitted$.next(true);
52
+ this.submitted$.next(true);
54
53
  // stop here if form is invalid
55
54
  if (!this.addEditForm.valid) {
56
55
  console.error('form validation errors.'); //NOSONAR
@@ -68,9 +67,11 @@ class BaseDataEntryComponent {
68
67
  formControl(controlName, controls = this.addEditForm.controls) {
69
68
  return controls[controlName];
70
69
  }
71
- formControlErrors(control, controls = this.addEditForm.controls) {
70
+ formControlErrors(control, controls = this
71
+ .addEditForm.controls) {
72
+ const tempControl =
72
73
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
- const tempControl = typeof control === 'string' ? controls[control] : control;
74
+ typeof control === 'string' ? controls[control] : control;
74
75
  if (tempControl?.valid && !tempControl?.errors) {
75
76
  return null;
76
77
  }
@@ -79,25 +80,34 @@ class BaseDataEntryComponent {
79
80
  formMinLengthError(controlName) {
80
81
  return this.formControlErrors(controlName)?.[this.MinLengthError];
81
82
  }
82
- getFormErrors(controls = this.addEditForm.controls, parentControlName) {
83
+ getFormErrors(controls = this
84
+ .addEditForm.controls, parentControlName) {
83
85
  const errors = [];
84
86
  for (const controlName of Object.keys(controls)) {
85
87
  const control = controls[controlName];
86
88
  const error = this.formControlErrors(control, controls);
87
89
  if (error) {
88
- errors.push({ controlName: parentControlName ? `${parentControlName}.${controlName}` : controlName, error });
90
+ errors.push({
91
+ controlName: parentControlName
92
+ ? `${parentControlName}.${controlName}`
93
+ : controlName,
94
+ error,
95
+ });
89
96
  }
90
97
  if (control?.controls) {
91
- errors.push(...this.getFormErrors(control.controls, parentControlName ? `${parentControlName}.${controlName}` : controlName));
98
+ errors.push(...this.getFormErrors(control.controls, parentControlName
99
+ ? `${parentControlName}.${controlName}`
100
+ : controlName));
92
101
  }
93
102
  }
94
103
  return errors;
95
104
  }
96
105
  }
97
- BaseDataEntryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, deps: [{ token: FACADE }], target: i0.ɵɵFactoryTarget.Directive });
98
- BaseDataEntryComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: BaseDataEntryComponent, inputs: { width: "width", height: "height" }, ngImport: i0 });
106
+ BaseDataEntryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, deps: [{ token: FACADE }], target: i0.ɵɵFactoryTarget.Component });
107
+ BaseDataEntryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: BaseDataEntryComponent, selector: "ng-component", inputs: { width: "width", height: "height" }, ngImport: i0, template: '', isInline: true });
99
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BaseDataEntryComponent, decorators: [{
100
- type: Directive
109
+ type: Component,
110
+ args: [{ template: '' }]
101
111
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
102
112
  type: Inject,
103
113
  args: [FACADE]
@@ -124,6 +134,7 @@ class DataEntryDialogComponent {
124
134
  this.width = 800; //NOSONAR
125
135
  this.height = 600; //NOSONAR
126
136
  this.saveButtonText = 'Save';
137
+ this.formId = 'imng-form';
127
138
  this.submitted = false;
128
139
  }
129
140
  ngOnInit() {
@@ -133,6 +144,8 @@ class DataEntryDialogComponent {
133
144
  this.dialogTitle = this.parentComponent.dialogTitle;
134
145
  this.loading$ = this.parentComponent.loading$;
135
146
  this.addEditForm = this.parentComponent.addEditForm;
147
+ this.saveButtonText = this.parentComponent.saveButtonText;
148
+ this.formId = this.parentComponent.formId;
136
149
  }
137
150
  close() {
138
151
  this.parentComponent?.closeForm();
@@ -151,7 +164,7 @@ class DataEntryDialogComponent {
151
164
  }
152
165
  }
153
166
  DataEntryDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: DataEntryDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
154
- DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: DataEntryDialogComponent, selector: "imng-data-entry-dialog[parentComponent]", inputs: { minWidth: "minWidth", width: "width", height: "height", autoFocusedElement: "autoFocusedElement", parentComponent: "parentComponent", saveButtonText: "saveButtonText" }, queries: [{ propertyName: "dialogBtnsTemplate", first: true, predicate: DialogButtonsDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `<kendo-dialog
167
+ DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: DataEntryDialogComponent, selector: "imng-data-entry-dialog[parentComponent]", inputs: { minWidth: "minWidth", width: "width", height: "height", autoFocusedElement: "autoFocusedElement", parentComponent: "parentComponent" }, queries: [{ propertyName: "dialogBtnsTemplate", first: true, predicate: DialogButtonsDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `<kendo-dialog
155
168
  [width]="width"
156
169
  [minWidth]="minWidth ?? width"
157
170
  [height]="height"
@@ -170,12 +183,16 @@ DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0
170
183
  </ng-container>
171
184
  </kendo-dialog-actions>
172
185
  </kendo-dialog>
173
-
174
186
  <ng-template #defaultDialogActionsTpl>
175
187
  <button kendoButton (click)="cancel()" class="btn btn-secondary btn-sm">
176
188
  Cancel
177
189
  </button>
178
- <button kendoButton (click)="submit()" class="btn btn-primary btn-sm">
190
+ <button
191
+ [attr.form]="formId"
192
+ type="submit"
193
+ kendoButton
194
+ (click)="submit()"
195
+ class="btn btn-primary btn-sm">
179
196
  {{ saveButtonText }}
180
197
  </button>
181
198
  </ng-template>`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i2.DialogTitleBarComponent, selector: "kendo-dialog-titlebar", inputs: ["id", "closeTitle"], outputs: ["close"] }, { kind: "component", type: i2.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -202,12 +219,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
202
219
  </ng-container>
203
220
  </kendo-dialog-actions>
204
221
  </kendo-dialog>
205
-
206
222
  <ng-template #defaultDialogActionsTpl>
207
223
  <button kendoButton (click)="cancel()" class="btn btn-secondary btn-sm">
208
224
  Cancel
209
225
  </button>
210
- <button kendoButton (click)="submit()" class="btn btn-primary btn-sm">
226
+ <button
227
+ [attr.form]="formId"
228
+ type="submit"
229
+ kendoButton
230
+ (click)="submit()"
231
+ class="btn btn-primary btn-sm">
211
232
  {{ saveButtonText }}
212
233
  </button>
213
234
  </ng-template>`,
@@ -223,8 +244,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
223
244
  type: Input
224
245
  }], parentComponent: [{
225
246
  type: Input
226
- }], saveButtonText: [{
227
- type: Input
228
247
  }], dialogBtnsTemplate: [{
229
248
  type: ContentChild,
230
249
  args: [DialogButtonsDirective, { static: true, read: TemplateRef }]
@@ -1 +1 @@
1
- {"version":3,"file":"imng-kendo-data-entry.mjs","sources":["../../../../libs/imng-kendo-data-entry/src/lib/base-data-entry.component.ts","../../../../libs/imng-kendo-data-entry/src/lib/dialog-buttons.directive.ts","../../../../libs/imng-kendo-data-entry/src/lib/data-entry-dialog.component.ts","../../../../libs/imng-kendo-data-entry/src/lib/imng-kendo-data-entry.module.ts","../../../../libs/imng-kendo-data-entry/src/lib/reducer-collection-logic.ts","../../../../libs/imng-kendo-data-entry/src/lib/form-group-patcher.ts","../../../../libs/imng-kendo-data-entry/src/imng-kendo-data-entry.ts"],"sourcesContent":["import {\n Directive,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { AbstractControl, ValidationErrors, FormGroup, FormArray } from '@angular/forms';\nimport { IBaseDataEntryFacade } from './data-entry-facade';\nimport { Subscribable, Subscriptions } from 'imng-ngrx-utils';\n\nconst FACADE = new InjectionToken<IBaseDataEntryFacade>(\n 'imng-data-entry-facade',\n);\n\n/**\n * The extending class has to implement the following properties on ngInit\n * dialogTitle: string - This will be the text displayed at the top of the modal title bar\n * props: enum - This is a helper property to make the html markup type safe\n *\n * Along with the requirements above, the extending class has to set values to the\n * following properties on ngInit\n * active$: Observable<boolean> - This typically would be assigned to the isNewActive$ or isEditActive on the facade\n * addEditForm: FormGroup - This will be created by your component\n *\n * @class BaseDataEntryComponent>\n */\n@Directive()\nexport abstract class BaseDataEntryComponent<\n FACADE extends IBaseDataEntryFacade,\n > implements OnDestroy, Subscribable {\n @Input() public width: string | number = 800; //NOSONAR\n @Input() public height: string | number = 600; //NOSONAR\n public readonly MinLengthError = 'minlength';\n public readonly RequiredError = 'required';\n public readonly ENUM_DISPLAY_TEXT = 'displayText';\n public readonly ENUM_NAME = 'name';\n public allSubscriptions = new Subscriptions();\n public abstract dialogTitle: string;\n public abstract props: unknown;\n public abstract addEditForm: FormGroup;\n public loading$: Observable<boolean>;\n private readonly _submitted$: BehaviorSubject<boolean> = new BehaviorSubject(\n false as boolean,\n );\n\n public get submitted$(): Observable<boolean> {\n return this._submitted$.asObservable();\n }\n constructor(@Inject(FACADE) public readonly facade: FACADE) {\n this.loading$ = this.facade.loading$;\n this.initForm();\n }\n\n public ngOnDestroy(): void {\n this.allSubscriptions.unsubscribeAll();\n }\n\n public closeForm(): void {\n this.initForm();\n this.facade.clearCurrentEntity();\n this._submitted$.next(false);\n }\n\n public onCancel(): void {\n this.closeForm();\n }\n\n public onSubmit(): boolean {\n this._submitted$.next(true);\n\n // stop here if form is invalid\n if (!this.addEditForm.valid) {\n console.error('form validation errors.'); //NOSONAR\n console.error(JSON.stringify(this.getFormErrors())); //NOSONAR\n return false;\n }\n this.save();\n this.closeForm();\n return true;\n }\n\n public isDataInvalid(): boolean {\n return this.addEditForm.invalid;\n }\n\n // convenience getter for easy access to form fields\n public formControl(controlName: string, controls: { [key: string]: AbstractControl; } = this.addEditForm.controls): AbstractControl {\n return controls[controlName];\n }\n\n public formControlErrors(control: string | AbstractControl, controls: { [key: string]: AbstractControl; } | AbstractControl[] = this.addEditForm.controls): ValidationErrors | null {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tempControl = typeof control === 'string' ? (controls as any)[control] : control;\n if (tempControl?.valid && !tempControl?.errors) {\n return null;\n }\n return tempControl?.errors;\n }\n public formMinLengthError(\n controlName: string,\n ): { requiredLength: number; actualLength: number; } | null {\n return this.formControlErrors(controlName)?.[this.MinLengthError];\n }\n public getFormErrors(controls: { [key: string]: AbstractControl; } | AbstractControl[] = this.addEditForm.controls, parentControlName?: string): { controlName: string; error: ValidationErrors; }[] {\n const errors: { controlName: string; error: ValidationErrors; }[] = [];\n for (const controlName of Object.keys(controls)) {\n const control = (controls as never)[controlName];\n const error = this.formControlErrors(control, controls);\n if (error) {\n errors.push({ controlName: parentControlName ? `${parentControlName}.${controlName}` : controlName, error });\n }\n if ((control as FormArray)?.controls) {\n\n errors.push(...this.getFormErrors((control as FormArray).controls, parentControlName ? `${parentControlName}.${controlName}` : controlName));\n }\n }\n return errors;\n }\n\n public abstract initForm(): void;\n public abstract save(): void;\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[imngDialogBtns]' })\nexport class DialogButtonsDirective {\n constructor(public tpl: TemplateRef<unknown>) { }\n}\n","import {\n Component,\n OnInit,\n Input,\n ChangeDetectionStrategy,\n TemplateRef,\n ContentChild,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { BaseDataEntryComponent } from './base-data-entry.component';\nimport { DialogButtonsDirective } from './dialog-buttons.directive';\n\n@Component({\n selector: 'imng-data-entry-dialog[parentComponent]',\n template: `<kendo-dialog\n [width]=\"width\"\n [minWidth]=\"minWidth ?? width\"\n [height]=\"height\"\n (close)=\"close()\"\n [autoFocusedElement]=\"autoFocusedElement || ''\">\n <kendo-dialog-titlebar class=\"bg-primary\">{{\n dialogTitle\n }}</kendo-dialog-titlebar>\n <ng-content></ng-content>\n <kendo-dialog-actions>\n <ng-container\n *ngTemplateOutlet=\"\n dialogBtnsTemplate || defaultDialogActionsTpl;\n context: dialogActionBtnsCtx\n \">\n </ng-container>\n </kendo-dialog-actions>\n </kendo-dialog>\n\n <ng-template #defaultDialogActionsTpl>\n <button kendoButton (click)=\"cancel()\" class=\"btn btn-secondary btn-sm\">\n Cancel\n </button>\n <button kendoButton (click)=\"submit()\" class=\"btn btn-primary btn-sm\">\n {{ saveButtonText }}\n </button>\n </ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataEntryDialogComponent implements OnInit {\n @Input() public minWidth?: number; //NOSONAR\n @Input() public width = 800; //NOSONAR\n @Input() public height = 600; //NOSONAR\n /**\n * https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/initial-focus/\n */\n @Input() public autoFocusedElement?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() public parentComponent?: BaseDataEntryComponent<any>; //NOSONAR\n @Input() public saveButtonText = 'Save';\n @ContentChild(DialogButtonsDirective, { static: true, read: TemplateRef })\n /**\n * Example Usage:\n * <imng-data-entry-dialog>\n * ......\n * <ng-template [imngDialogBtns] let-coreButtons>\n * <button id=\"btnCustom1\" class=\"k-button\" (click)=\"cancel()\">Close</button>\n * </ng-template>\n * </imng-data-entry-dialog>\n */\n public dialogBtnsTemplate?: TemplateRef<unknown>;\n public loading$?: Observable<boolean>;\n public addEditForm?: FormGroup;\n public submitted = false;\n public dialogTitle?: string;\n // eslint-disable-next-line @typescript-eslint/ban-types\n public component?: {};\n\n public ngOnInit(): void {\n if (!this.parentComponent) {\n throw new TypeError(`The input 'parentComponent' is required`);\n }\n this.dialogTitle = this.parentComponent.dialogTitle;\n this.loading$ = this.parentComponent.loading$;\n this.addEditForm = this.parentComponent.addEditForm;\n }\n\n public close(): void {\n this.parentComponent?.closeForm();\n }\n public cancel(): void {\n this.parentComponent?.onCancel();\n }\n public submit(): void {\n this.parentComponent?.onSubmit();\n }\n get dialogActionBtnsCtx(): object | null {\n //NOSONAR\n return {\n $implicit: { cancel: () => this.cancel(), submit: () => this.submit() },\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataEntryDialogComponent } from './data-entry-dialog.component';\nimport { DialogButtonsDirective } from './dialog-buttons.directive';\nimport { DialogModule } from '@progress/kendo-angular-dialog';\n\n@NgModule({\n imports: [CommonModule, DialogModule],\n declarations: [DataEntryDialogComponent, DialogButtonsDirective],\n exports: [DataEntryDialogComponent, DialogButtonsDirective],\n})\nexport class ImngDataEntryDialogModule {}\n","import { ValueType } from 'imng-nrsrx-client-utils';\nexport function updateStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const index = collection.findIndex((val) => val.id === item.id);\n if (index > -1) {\n const items = [...collection];\n items.splice(index, 1, item);\n return items;\n }\n return collection;\n}\n\nexport function removeStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const index = collection.findIndex((val) => val.id === item.id);\n if (index > -1) {\n const items = [...collection];\n items.splice(index, 1);\n return items;\n }\n return collection;\n}\n\nexport function addStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const items = [...collection];\n items.unshift(item);\n return items;\n}\n","import { FormGroup } from '@angular/forms';\nimport { take, tap, filter } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\n\nexport const formGroupPatcher =\n <TEntity>(addEditForm: FormGroup) =>\n (source: Observable<TEntity>) =>\n source.pipe(\n filter((t) => !!t),\n take(1),\n tap((t) => addEditForm.patchValue(t)),\n );\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAYA,MAAM,MAAM,GAAG,IAAI,cAAc,CAC/B,wBAAwB,CACzB,CAAC;AAEF;;;;;;;;;;;AAWG;MAEmB,sBAAsB,CAAA;AAqB1C,IAAA,WAAA,CAA4C,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAlB1C,QAAA,IAAA,CAAA,KAAK,GAAoB,GAAG,CAAC;AAC7B,QAAA,IAAA,CAAA,MAAM,GAAoB,GAAG,CAAC;QAC9B,IAAc,CAAA,cAAA,GAAG,WAAW,CAAC;QAC7B,IAAa,CAAA,aAAA,GAAG,UAAU,CAAC;QAC3B,IAAiB,CAAA,iBAAA,GAAG,aAAa,CAAC;QAClC,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC;AAC5B,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,aAAa,EAAE,CAAC;AAK7B,QAAA,IAAA,CAAA,WAAW,GAA6B,IAAI,eAAe,CAC1E,KAAgB,CACjB,CAAC;QAMA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAND,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;KACxC;IAMM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC;KACxC;IAEM,SAAS,GAAA;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEM,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG5B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC3B,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACzC,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACpD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;KACjC;;IAGM,WAAW,CAAC,WAAmB,EAAE,QAAA,GAAgD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAA;AAC/G,QAAA,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;KAC9B;IAEM,iBAAiB,CAAC,OAAiC,EAAE,QAAA,GAAoE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAA;;AAEvJ,QAAA,MAAM,WAAW,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAI,QAAgB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;QACvF,IAAI,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC9C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,WAAW,EAAE,MAAM,CAAC;KAC5B;AACM,IAAA,kBAAkB,CACvB,WAAmB,EAAA;AAEnB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;KACnE;IACM,aAAa,CAAC,WAAoE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,iBAA0B,EAAA;QAC5I,MAAM,MAAM,GAAwD,EAAE,CAAC;QACvE,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC/C,YAAA,MAAM,OAAO,GAAI,QAAkB,CAAC,WAAW,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxD,YAAA,IAAI,KAAK,EAAE;gBACT,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,iBAAiB,GAAG,CAAA,EAAG,iBAAiB,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,GAAG,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9G,aAAA;YACD,IAAK,OAAqB,EAAE,QAAQ,EAAE;gBAEpC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAE,OAAqB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AAC9I,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;;AA1FmB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAqBtB,MAAM,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGArBN,sBAAsB,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAD3C,SAAS;;0BAsBK,MAAM;2BAAC,MAAM,CAAA;4CAlBV,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;;;MC9BK,sBAAsB,CAAA;AACjC,IAAA,WAAA,CAAmB,GAAyB,EAAA;QAAzB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAsB;KAAK;;mHADtC,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAAtB,sBAAsB,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,SAAS;mBAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;;;MC2C9B,wBAAwB,CAAA;AAhCrC,IAAA,WAAA,GAAA;AAkCkB,QAAA,IAAA,CAAA,KAAK,GAAG,GAAG,CAAC;AACZ,QAAA,IAAA,CAAA,MAAM,GAAG,GAAG,CAAC;QAOb,IAAc,CAAA,cAAA,GAAG,MAAM,CAAC;QAcjC,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AA6B1B,KAAA;IAxBQ,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,MAAM,IAAI,SAAS,CAAC,CAAA,uCAAA,CAAyC,CAAC,CAAC;AAChE,SAAA;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;KACrD;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC;KACnC;IACM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC;KAClC;IACM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC;KAClC;AACD,IAAA,IAAI,mBAAmB,GAAA;;QAErB,OAAO;YACL,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE;SACxE,CAAC;KACH;;qHApDU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAWrB,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,sBAAsB,EAAwB,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EAzC7D,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,kBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAGN,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAhCpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yCAAyC;AACnD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,kBAAA,CAAA;oBACjB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA,CAAA;8BAEiB,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAIU,kBAAkB,EAAA,CAAA;sBAAjC,KAAK;gBAEU,eAAe,EAAA,CAAA;sBAA9B,KAAK;gBACU,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBAWC,kBAAkB,EAAA,CAAA;sBAVxB,YAAY;uBAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;;;MC7C9D,yBAAyB,CAAA;;sHAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;uHAAzB,yBAAyB,EAAA,YAAA,EAAA,CAHrB,wBAAwB,EAAE,sBAAsB,CAAA,EAAA,OAAA,EAAA,CADrD,YAAY,EAAE,YAAY,CAAA,EAAA,OAAA,EAAA,CAE1B,wBAAwB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;uHAE/C,yBAAyB,EAAA,OAAA,EAAA,CAJ1B,YAAY,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;2FAIzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;AACrC,oBAAA,YAAY,EAAE,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;AAChE,oBAAA,OAAO,EAAE,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;AAC5D,iBAAA,CAAA;;;ACTe,SAAA,yBAAyB,CACvC,UAAoB,EACpB,IAAY,EAAA;AAEZ,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;AAChE,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7B,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;AACD,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC;AAEe,SAAA,yBAAyB,CACvC,UAAoB,EACpB,IAAY,EAAA;AAEZ,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;AAChE,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AAC9B,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvB,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;AACD,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC;AAEe,SAAA,sBAAsB,CACpC,UAAoB,EACpB,IAAY,EAAA;AAEZ,IAAA,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AAC9B,IAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,IAAA,OAAO,KAAK,CAAC;AACf;;MC9Ba,gBAAgB,GAC3B,CAAU,WAAsB,KAChC,CAAC,MAA2B,KAC1B,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAClB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;ACV3C;;AAEG;;;;"}
1
+ {"version":3,"file":"imng-kendo-data-entry.mjs","sources":["../../../../libs/imng-kendo-data-entry/src/lib/base-data-entry.component.ts","../../../../libs/imng-kendo-data-entry/src/lib/dialog-buttons.directive.ts","../../../../libs/imng-kendo-data-entry/src/lib/data-entry-dialog.component.ts","../../../../libs/imng-kendo-data-entry/src/lib/imng-kendo-data-entry.module.ts","../../../../libs/imng-kendo-data-entry/src/lib/reducer-collection-logic.ts","../../../../libs/imng-kendo-data-entry/src/lib/form-group-patcher.ts","../../../../libs/imng-kendo-data-entry/src/imng-kendo-data-entry.ts"],"sourcesContent":["import {\n Component,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport {\n AbstractControl,\n ValidationErrors,\n FormGroup,\n FormArray,\n} from '@angular/forms';\nimport { IBaseDataEntryFacade } from './data-entry-facade';\nimport { Subscribable, Subscriptions } from 'imng-ngrx-utils';\n\nconst FACADE = new InjectionToken<IBaseDataEntryFacade>(\n 'imng-data-entry-facade',\n);\n\n/**\n * The extending class has to implement the following properties on ngInit\n * dialogTitle: string - This will be the text displayed at the top of the modal title bar\n * props: enum - This is a helper property to make the html markup type safe\n *\n * Along with the requirements above, the extending class has to set values to the\n * following properties on ngInit\n * active$: Observable<boolean> - This typically would be assigned to the isNewActive$ or isEditActive on the facade\n * addEditForm: FormGroup - This will be created by your component\n *\n * @class BaseDataEntryComponent>\n */\n@Component({ template: '' })\nexport abstract class BaseDataEntryComponent<\n FACADE extends IBaseDataEntryFacade,\n> implements OnDestroy, Subscribable\n{\n @Input() public width: string | number = 800; //NOSONAR\n @Input() public height: string | number = 600; //NOSONAR\n\n public formId = 'imng-form';\n public saveButtonText = 'Save';\n public readonly MinLengthError = 'minlength';\n public readonly RequiredError = 'required';\n public readonly ENUM_DISPLAY_TEXT = 'displayText';\n public readonly ENUM_NAME = 'name';\n public allSubscriptions = new Subscriptions();\n public abstract dialogTitle: string;\n public abstract props: unknown;\n public abstract addEditForm: FormGroup;\n public loading$: Observable<boolean>;\n public readonly submitted$: BehaviorSubject<boolean> = new BehaviorSubject(\n false as boolean,\n );\n\n constructor(@Inject(FACADE) public readonly facade: FACADE) {\n this.loading$ = this.facade.loading$;\n this.initForm();\n }\n\n public ngOnDestroy(): void {\n this.allSubscriptions.unsubscribeAll();\n }\n\n public closeForm(): void {\n this.initForm();\n this.facade.clearCurrentEntity();\n this.submitted$.next(false);\n }\n\n public onCancel(): void {\n this.closeForm();\n }\n\n public onSubmit(): boolean {\n this.submitted$.next(true);\n\n // stop here if form is invalid\n if (!this.addEditForm.valid) {\n console.error('form validation errors.'); //NOSONAR\n console.error(JSON.stringify(this.getFormErrors())); //NOSONAR\n return false;\n }\n this.save();\n this.closeForm();\n return true;\n }\n\n public isDataInvalid(): boolean {\n return this.addEditForm.invalid;\n }\n\n // convenience getter for easy access to form fields\n public formControl(\n controlName: string,\n controls: { [key: string]: AbstractControl } = this.addEditForm.controls,\n ): AbstractControl {\n return controls[controlName];\n }\n\n public formControlErrors(\n control: string | AbstractControl,\n controls: { [key: string]: AbstractControl } | AbstractControl[] = this\n .addEditForm.controls,\n ): ValidationErrors | null {\n const tempControl =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof control === 'string' ? (controls as any)[control] : control;\n if (tempControl?.valid && !tempControl?.errors) {\n return null;\n }\n return tempControl?.errors;\n }\n public formMinLengthError(\n controlName: string,\n ): { requiredLength: number; actualLength: number } | null {\n return this.formControlErrors(controlName)?.[this.MinLengthError];\n }\n public getFormErrors(\n controls: { [key: string]: AbstractControl } | AbstractControl[] = this\n .addEditForm.controls,\n parentControlName?: string,\n ): { controlName: string; error: ValidationErrors }[] {\n const errors: { controlName: string; error: ValidationErrors }[] = [];\n for (const controlName of Object.keys(controls)) {\n const control = (controls as never)[controlName];\n const error = this.formControlErrors(control, controls);\n if (error) {\n errors.push({\n controlName: parentControlName\n ? `${parentControlName}.${controlName}`\n : controlName,\n error,\n });\n }\n if ((control as FormArray)?.controls) {\n errors.push(\n ...this.getFormErrors(\n (control as FormArray).controls,\n parentControlName\n ? `${parentControlName}.${controlName}`\n : controlName,\n ),\n );\n }\n }\n return errors;\n }\n\n public abstract initForm(): void;\n public abstract save(): void;\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[imngDialogBtns]' })\nexport class DialogButtonsDirective {\n constructor(public tpl: TemplateRef<unknown>) { }\n}\n","import {\n Component,\n OnInit,\n Input,\n ChangeDetectionStrategy,\n TemplateRef,\n ContentChild,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { BaseDataEntryComponent } from './base-data-entry.component';\nimport { DialogButtonsDirective } from './dialog-buttons.directive';\n\n@Component({\n selector: 'imng-data-entry-dialog[parentComponent]',\n template: `<kendo-dialog\n [width]=\"width\"\n [minWidth]=\"minWidth ?? width\"\n [height]=\"height\"\n (close)=\"close()\"\n [autoFocusedElement]=\"autoFocusedElement || ''\">\n <kendo-dialog-titlebar class=\"bg-primary\">{{\n dialogTitle\n }}</kendo-dialog-titlebar>\n <ng-content></ng-content>\n <kendo-dialog-actions>\n <ng-container\n *ngTemplateOutlet=\"\n dialogBtnsTemplate || defaultDialogActionsTpl;\n context: dialogActionBtnsCtx\n \">\n </ng-container>\n </kendo-dialog-actions>\n </kendo-dialog>\n <ng-template #defaultDialogActionsTpl>\n <button kendoButton (click)=\"cancel()\" class=\"btn btn-secondary btn-sm\">\n Cancel\n </button>\n <button\n [attr.form]=\"formId\"\n type=\"submit\"\n kendoButton\n (click)=\"submit()\"\n class=\"btn btn-primary btn-sm\">\n {{ saveButtonText }}\n </button>\n </ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataEntryDialogComponent implements OnInit {\n @Input() public minWidth?: number; //NOSONAR\n @Input() public width = 800; //NOSONAR\n @Input() public height = 600; //NOSONAR\n /**\n * https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/initial-focus/\n */\n @Input() public autoFocusedElement?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() public parentComponent?: BaseDataEntryComponent<any>; //NOSONAR\n public saveButtonText = 'Save';\n @ContentChild(DialogButtonsDirective, { static: true, read: TemplateRef })\n /**\n * Example Usage:\n * <imng-data-entry-dialog>\n * ......\n * <ng-template [imngDialogBtns] let-coreButtons>\n * <button id=\"btnCustom1\" class=\"k-button\" (click)=\"cancel()\">Close</button>\n * </ng-template>\n * </imng-data-entry-dialog>\n */\n public dialogBtnsTemplate?: TemplateRef<unknown>;\n public loading$?: Observable<boolean>;\n public addEditForm?: FormGroup;\n public formId = 'imng-form';\n public submitted = false;\n public dialogTitle?: string;\n // eslint-disable-next-line @typescript-eslint/ban-types\n public component?: {};\n\n public ngOnInit(): void {\n if (!this.parentComponent) {\n throw new TypeError(`The input 'parentComponent' is required`);\n }\n this.dialogTitle = this.parentComponent.dialogTitle;\n this.loading$ = this.parentComponent.loading$;\n this.addEditForm = this.parentComponent.addEditForm;\n this.saveButtonText = this.parentComponent.saveButtonText;\n this.formId = this.parentComponent.formId;\n }\n\n public close(): void {\n this.parentComponent?.closeForm();\n }\n public cancel(): void {\n this.parentComponent?.onCancel();\n }\n public submit(): void {\n this.parentComponent?.onSubmit();\n }\n get dialogActionBtnsCtx(): object | null {\n //NOSONAR\n return {\n $implicit: { cancel: () => this.cancel(), submit: () => this.submit() },\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataEntryDialogComponent } from './data-entry-dialog.component';\nimport { DialogButtonsDirective } from './dialog-buttons.directive';\nimport { DialogModule } from '@progress/kendo-angular-dialog';\n\n@NgModule({\n imports: [CommonModule, DialogModule],\n declarations: [DataEntryDialogComponent, DialogButtonsDirective],\n exports: [DataEntryDialogComponent, DialogButtonsDirective],\n})\nexport class ImngDataEntryDialogModule {}\n","import { ValueType } from 'imng-nrsrx-client-utils';\nexport function updateStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const index = collection.findIndex((val) => val.id === item.id);\n if (index > -1) {\n const items = [...collection];\n items.splice(index, 1, item);\n return items;\n }\n return collection;\n}\n\nexport function removeStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const index = collection.findIndex((val) => val.id === item.id);\n if (index > -1) {\n const items = [...collection];\n items.splice(index, 1);\n return items;\n }\n return collection;\n}\n\nexport function addStateCollectionItem<Entity extends { id?: ValueType; }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const items = [...collection];\n items.unshift(item);\n return items;\n}\n","import { FormGroup } from '@angular/forms';\nimport { take, tap, filter } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\n\nexport const formGroupPatcher =\n <TEntity>(addEditForm: FormGroup) =>\n (source: Observable<TEntity>) =>\n source.pipe(\n filter((t) => !!t),\n take(1),\n tap((t) => addEditForm.patchValue(t)),\n );\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { OnDestroy } from '@angular/core';
2
- import { Observable } from 'rxjs';
2
+ import { Observable, BehaviorSubject } from 'rxjs';
3
3
  import { AbstractControl, ValidationErrors, FormGroup } from '@angular/forms';
4
4
  import { IBaseDataEntryFacade } from './data-entry-facade';
5
5
  import { Subscribable, Subscriptions } from 'imng-ngrx-utils';
@@ -20,6 +20,8 @@ export declare abstract class BaseDataEntryComponent<FACADE extends IBaseDataEnt
20
20
  readonly facade: FACADE;
21
21
  width: string | number;
22
22
  height: string | number;
23
+ formId: string;
24
+ saveButtonText: string;
23
25
  readonly MinLengthError = "minlength";
24
26
  readonly RequiredError = "required";
25
27
  readonly ENUM_DISPLAY_TEXT = "displayText";
@@ -29,8 +31,7 @@ export declare abstract class BaseDataEntryComponent<FACADE extends IBaseDataEnt
29
31
  abstract props: unknown;
30
32
  abstract addEditForm: FormGroup;
31
33
  loading$: Observable<boolean>;
32
- private readonly _submitted$;
33
- get submitted$(): Observable<boolean>;
34
+ readonly submitted$: BehaviorSubject<boolean>;
34
35
  constructor(facade: FACADE);
35
36
  ngOnDestroy(): void;
36
37
  closeForm(): void;
@@ -56,5 +57,5 @@ export declare abstract class BaseDataEntryComponent<FACADE extends IBaseDataEnt
56
57
  abstract initForm(): void;
57
58
  abstract save(): void;
58
59
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseDataEntryComponent<any>, never>;
59
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseDataEntryComponent<any>, never, never, { "width": "width"; "height": "height"; }, {}, never, never, false>;
60
+ static ɵcmp: i0.ɵɵComponentDeclaration<BaseDataEntryComponent<any>, "ng-component", never, { "width": "width"; "height": "height"; }, {}, never, never, false>;
60
61
  }
@@ -16,6 +16,7 @@ export declare class DataEntryDialogComponent implements OnInit {
16
16
  dialogBtnsTemplate?: TemplateRef<unknown>;
17
17
  loading$?: Observable<boolean>;
18
18
  addEditForm?: FormGroup;
19
+ formId: string;
19
20
  submitted: boolean;
20
21
  dialogTitle?: string;
21
22
  component?: {};
@@ -25,5 +26,5 @@ export declare class DataEntryDialogComponent implements OnInit {
25
26
  submit(): void;
26
27
  get dialogActionBtnsCtx(): object | null;
27
28
  static ɵfac: i0.ɵɵFactoryDeclaration<DataEntryDialogComponent, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<DataEntryDialogComponent, "imng-data-entry-dialog[parentComponent]", never, { "minWidth": "minWidth"; "width": "width"; "height": "height"; "autoFocusedElement": "autoFocusedElement"; "parentComponent": "parentComponent"; "saveButtonText": "saveButtonText"; }, {}, ["dialogBtnsTemplate"], ["*"], false>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<DataEntryDialogComponent, "imng-data-entry-dialog[parentComponent]", never, { "minWidth": "minWidth"; "width": "width"; "height": "height"; "autoFocusedElement": "autoFocusedElement"; "parentComponent": "parentComponent"; }, {}, ["dialogBtnsTemplate"], ["*"], false>;
29
30
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "imng-kendo-data-entry",
3
3
  "description": "A library to make integrating Angular Kendo forms and NGRX a bit simpler.",
4
- "version": "6.23.4",
4
+ "version": "6.27.7",
5
5
  "peerDependencies": {
6
6
  "@angular/common": ">=13.x",
7
7
  "@angular/core": ">=13.x",