imng-kendo-data-entry 5.224.2 → 5.224.5

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.
@@ -49,30 +49,40 @@ export class BaseDataEntryComponent {
49
49
  if (!this.addEditForm.valid) {
50
50
  console.error('form validation errors.'); //NOSONAR
51
51
  console.error(JSON.stringify(this.getFormErrors())); //NOSONAR
52
- return;
52
+ return false;
53
53
  }
54
54
  this.save();
55
55
  this.closeForm();
56
+ return true;
56
57
  }
57
58
  isDataInvalid() {
58
59
  return this.addEditForm.invalid;
59
60
  }
60
61
  // convenience getter for easy access to form fields
61
- formControl(controlName) {
62
- return this.addEditForm.controls[controlName];
62
+ formControl(controlName, controls = this.addEditForm.controls) {
63
+ return controls[controlName];
63
64
  }
64
- formControlErrors(controlName) {
65
- return this.formControl(controlName)?.errors;
65
+ formControlErrors(control, controls = this.addEditForm.controls) {
66
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+ const tempControl = typeof control === 'string' ? controls[control] : control;
68
+ if (tempControl?.valid && !tempControl?.errors) {
69
+ return null;
70
+ }
71
+ return tempControl?.errors;
66
72
  }
67
73
  formMinLengthError(controlName) {
68
74
  return this.formControlErrors(controlName)?.[this.MinLengthError];
69
75
  }
70
- getFormErrors() {
76
+ getFormErrors(controls = this.addEditForm.controls, parentControlName) {
71
77
  const errors = [];
72
- for (const control of Object.keys(this.addEditForm.controls)) {
73
- const error = this.formControlErrors(control);
78
+ for (const controlName of Object.keys(controls)) {
79
+ const control = controls[controlName];
80
+ const error = this.formControlErrors(control, controls);
74
81
  if (error) {
75
- errors.push({ control, error });
82
+ errors.push({ controlName: parentControlName ? `${parentControlName}.${controlName}` : controlName, error });
83
+ }
84
+ if (control?.controls) {
85
+ errors.push(...this.getFormErrors(control.controls, parentControlName ? `${parentControlName}.${controlName}` : controlName));
76
86
  }
77
87
  }
78
88
  return errors;
@@ -90,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
90
100
  }], height: [{
91
101
  type: Input
92
102
  }] } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvaW1uZy1rZW5kby1kYXRhLWVudHJ5L3NyYy9saWIvYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkQsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQy9CLHdCQUF3QixDQUN6QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLE9BQWdCLHNCQUFzQjtJQXNCMUMsWUFBNEMsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFsQjFDLFVBQUssR0FBb0IsR0FBRyxDQUFDLENBQUMsU0FBUztRQUN2QyxXQUFNLEdBQW9CLEdBQUcsQ0FBQyxDQUFDLFNBQVM7UUFDeEMsbUJBQWMsR0FBRyxXQUFXLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxVQUFVLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDNUIscUJBQWdCLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUs3QixnQkFBVyxHQUE2QixJQUFJLGVBQWUsQ0FDMUUsS0FBZ0IsQ0FDakIsQ0FBQztRQU1BLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFORCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFNTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzlELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxvREFBb0Q7SUFDN0MsV0FBVyxDQUFDLFdBQW1CO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNNLGlCQUFpQixDQUFDLFdBQW1CO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDL0MsQ0FBQztJQUNNLGtCQUFrQixDQUN2QixXQUFtQjtRQUVuQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ00sYUFBYTtRQUNsQixNQUFNLE1BQU0sR0FBbUQsRUFBRSxDQUFDO1FBQ2xFLEtBQUssTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxJQUFJLEtBQUssRUFBRTtnQkFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O21IQS9FbUIsc0JBQXNCLGtCQXNCdEIsTUFBTTt1R0F0Qk4sc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRDNDLFNBQVM7OzBCQXVCSyxNQUFNOzJCQUFDLE1BQU07NENBbEJWLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUJhc2VEYXRhRW50cnlGYWNhZGUgfSBmcm9tICcuL2RhdGEtZW50cnktZmFjYWRlJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSwgU3Vic2NyaXB0aW9ucyB9IGZyb20gJ2ltbmctbmdyeC11dGlscyc7XG5cbmNvbnN0IEZBQ0FERSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJQmFzZURhdGFFbnRyeUZhY2FkZT4oXG4gICdpbW5nLWRhdGEtZW50cnktZmFjYWRlJyxcbik7XG5cbi8qKlxuICogVGhlIGV4dGVuZGluZyBjbGFzcyBoYXMgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBvbiBuZ0luaXRcbiAqIGRpYWxvZ1RpdGxlOiBzdHJpbmcgLSBUaGlzIHdpbGwgYmUgdGhlIHRleHQgZGlzcGxheWVkIGF0IHRoZSB0b3Agb2YgdGhlIG1vZGFsIHRpdGxlIGJhclxuICogcHJvcHM6IGVudW0gLSBUaGlzIGlzIGEgaGVscGVyIHByb3BlcnR5IHRvIG1ha2UgdGhlIGh0bWwgbWFya3VwIHR5cGUgc2FmZVxuICpcbiAqIEFsb25nIHdpdGggdGhlIHJlcXVpcmVtZW50cyBhYm92ZSwgdGhlIGV4dGVuZGluZyBjbGFzcyBoYXMgdG8gc2V0IHZhbHVlcyB0byB0aGVcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG9uIG5nSW5pdFxuICogYWN0aXZlJDogT2JzZXJ2YWJsZTxib29sZWFuPiAtIFRoaXMgdHlwaWNhbGx5IHdvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBpc05ld0FjdGl2ZSQgb3IgaXNFZGl0QWN0aXZlIG9uIHRoZSBmYWNhZGVcbiAqIGFkZEVkaXRGb3JtOiBGb3JtR3JvdXAgLSBUaGlzIHdpbGwgYmUgY3JlYXRlZCBieSB5b3VyIGNvbXBvbmVudFxuICpcbiAqIEBjbGFzcyBCYXNlRGF0YUVudHJ5Q29tcG9uZW50PlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YUVudHJ5Q29tcG9uZW50PFxuICBGQUNBREUgZXh0ZW5kcyBJQmFzZURhdGFFbnRyeUZhY2FkZSxcbj4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIFN1YnNjcmliYWJsZVxue1xuICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6IHN0cmluZyB8IG51bWJlciA9IDgwMDsgLy9OT1NPTkFSXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9IDYwMDsgLy9OT1NPTkFSXG4gIHB1YmxpYyByZWFkb25seSBNaW5MZW5ndGhFcnJvciA9ICdtaW5sZW5ndGgnO1xuICBwdWJsaWMgcmVhZG9ubHkgUmVxdWlyZWRFcnJvciA9ICdyZXF1aXJlZCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX0RJU1BMQVlfVEVYVCA9ICdkaXNwbGF5VGV4dCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX05BTUUgPSAnbmFtZSc7XG4gIHB1YmxpYyBhbGxTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbnMoKTtcbiAgcHVibGljIGFic3RyYWN0IGRpYWxvZ1RpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBwcm9wczogdW5rbm93bjtcbiAgcHVibGljIGFic3RyYWN0IGFkZEVkaXRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3VibWl0dGVkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBmYWxzZSBhcyBib29sZWFuLFxuICApO1xuXG4gIHB1YmxpYyBnZXQgc3VibWl0dGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3VibWl0dGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEZBQ0FERSkgcHVibGljIHJlYWRvbmx5IGZhY2FkZTogRkFDQURFKSB7XG4gICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuZmFjYWRlLmxvYWRpbmckO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmVBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMuZmFjYWRlLmNsZWFyQ3VycmVudEVudGl0eSgpO1xuICAgIHRoaXMuX3N1Ym1pdHRlZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJtaXR0ZWQkLm5leHQodHJ1ZSk7XG5cbiAgICAvLyBzdG9wIGhlcmUgaWYgZm9ybSBpcyBpbnZhbGlkXG4gICAgaWYgKCF0aGlzLmFkZEVkaXRGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmb3JtIHZhbGlkYXRpb24gZXJyb3JzLicpOyAvL05PU09OQVJcbiAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRGb3JtRXJyb3JzKCkpKTsgLy9OT1NPTkFSXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2F2ZSgpO1xuICAgIHRoaXMuY2xvc2VGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgaXNEYXRhSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRFZGl0Rm9ybS5pbnZhbGlkO1xuICB9XG5cbiAgLy8gY29udmVuaWVuY2UgZ2V0dGVyIGZvciBlYXN5IGFjY2VzcyB0byBmb3JtIGZpZWxkc1xuICBwdWJsaWMgZm9ybUNvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuYWRkRWRpdEZvcm0uY29udHJvbHNbY29udHJvbE5hbWVdO1xuICB9XG4gIHB1YmxpYyBmb3JtQ29udHJvbEVycm9ycyhjb250cm9sTmFtZTogc3RyaW5nKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sKGNvbnRyb2xOYW1lKT8uZXJyb3JzO1xuICB9XG4gIHB1YmxpYyBmb3JtTWluTGVuZ3RoRXJyb3IoXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcbiAgKTogeyByZXF1aXJlZExlbmd0aDogbnVtYmVyOyBhY3R1YWxMZW5ndGg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2xFcnJvcnMoY29udHJvbE5hbWUpPy5bdGhpcy5NaW5MZW5ndGhFcnJvcl07XG4gIH1cbiAgcHVibGljIGdldEZvcm1FcnJvcnMoKTogeyBjb250cm9sOiBzdHJpbmc7IGVycm9yOiBWYWxpZGF0aW9uRXJyb3JzIH1bXSB7XG4gICAgY29uc3QgZXJyb3JzOiB7IGNvbnRyb2w6IHN0cmluZzsgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfVtdID0gW107XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIE9iamVjdC5rZXlzKHRoaXMuYWRkRWRpdEZvcm0uY29udHJvbHMpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZm9ybUNvbnRyb2xFcnJvcnMoY29udHJvbCk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goeyBjb250cm9sLCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBpbml0Rm9ybSgpOiB2b2lkO1xuICBwdWJsaWMgYWJzdHJhY3Qgc2F2ZSgpOiB2b2lkO1xufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvaW1uZy1rZW5kby1kYXRhLWVudHJ5L3NyYy9saWIvYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkQsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQy9CLHdCQUF3QixDQUN6QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLE9BQWdCLHNCQUFzQjtJQXFCMUMsWUFBNEMsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFsQjFDLFVBQUssR0FBb0IsR0FBRyxDQUFDLENBQUMsU0FBUztRQUN2QyxXQUFNLEdBQW9CLEdBQUcsQ0FBQyxDQUFDLFNBQVM7UUFDeEMsbUJBQWMsR0FBRyxXQUFXLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxVQUFVLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDNUIscUJBQWdCLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUs3QixnQkFBVyxHQUE2QixJQUFJLGVBQWUsQ0FDMUUsS0FBZ0IsQ0FDakIsQ0FBQztRQU1BLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFORCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVks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QUFDLEdBQUcsaUJBQWlCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDOUk7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O21IQTFGbUIsc0JBQXNCLGtCQXFCdEIsTUFBTTt1R0FyQk4sc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRDNDLFNBQVM7OzBCQXNCSyxNQUFNOzJCQUFDLE1BQU07NENBbEJWLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgRm9ybUdyb3VwLCBGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJQmFzZURhdGFFbnRyeUZhY2FkZSB9IGZyb20gJy4vZGF0YS1lbnRyeS1mYWNhZGUnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlLCBTdWJzY3JpcHRpb25zIH0gZnJvbSAnaW1uZy1uZ3J4LXV0aWxzJztcblxuY29uc3QgRkFDQURFID0gbmV3IEluamVjdGlvblRva2VuPElCYXNlRGF0YUVudHJ5RmFjYWRlPihcbiAgJ2ltbmctZGF0YS1lbnRyeS1mYWNhZGUnLFxuKTtcblxuLyoqXG4gKiBUaGUgZXh0ZW5kaW5nIGNsYXNzIGhhcyB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG9uIG5nSW5pdFxuICogZGlhbG9nVGl0bGU6IHN0cmluZyAtIFRoaXMgd2lsbCBiZSB0aGUgdGV4dCBkaXNwbGF5ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbW9kYWwgdGl0bGUgYmFyXG4gKiBwcm9wczogZW51bSAtIFRoaXMgaXMgYSBoZWxwZXIgcHJvcGVydHkgdG8gbWFrZSB0aGUgaHRtbCBtYXJrdXAgdHlwZSBzYWZlXG4gKlxuICogQWxvbmcgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIGFib3ZlLCB0aGUgZXh0ZW5kaW5nIGNsYXNzIGhhcyB0byBzZXQgdmFsdWVzIHRvIHRoZVxuICogZm9sbG93aW5nIHByb3BlcnRpZXMgb24gbmdJbml0XG4gKiBhY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+IC0gVGhpcyB0eXBpY2FsbHkgd291bGQgYmUgYXNzaWduZWQgdG8gdGhlIGlzTmV3QWN0aXZlJCBvciBpc0VkaXRBY3RpdmUgb24gdGhlIGZhY2FkZVxuICogYWRkRWRpdEZvcm06IEZvcm1Hcm91cCAtIFRoaXMgd2lsbCBiZSBjcmVhdGVkIGJ5IHlvdXIgY29tcG9uZW50XG4gKlxuICogQGNsYXNzIEJhc2VEYXRhRW50cnlDb21wb25lbnQ+XG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEYXRhRW50cnlDb21wb25lbnQ8XG4gIEZBQ0FERSBleHRlbmRzIElCYXNlRGF0YUVudHJ5RmFjYWRlLFxuICA+IGltcGxlbWVudHMgT25EZXN0cm95LCBTdWJzY3JpYmFibGUge1xuICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6IHN0cmluZyB8IG51bWJlciA9IDgwMDsgLy9OT1NPTkFSXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9IDYwMDsgLy9OT1NPTkFSXG4gIHB1YmxpYyByZWFkb25seSBNaW5MZW5ndGhFcnJvciA9ICdtaW5sZW5ndGgnO1xuICBwdWJsaWMgcmVhZG9ubHkgUmVxdWlyZWRFcnJvciA9ICdyZXF1aXJlZCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX0RJU1BMQVlfVEVYVCA9ICdkaXNwbGF5VGV4dCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX05BTUUgPSAnbmFtZSc7XG4gIHB1YmxpYyBhbGxTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbnMoKTtcbiAgcHVibGljIGFic3RyYWN0IGRpYWxvZ1RpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBwcm9wczogdW5rbm93bjtcbiAgcHVibGljIGFic3RyYWN0IGFkZEVkaXRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3VibWl0dGVkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBmYWxzZSBhcyBib29sZWFuLFxuICApO1xuXG4gIHB1YmxpYyBnZXQgc3VibWl0dGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3VibWl0dGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEZBQ0FERSkgcHVibGljIHJlYWRvbmx5IGZhY2FkZTogRkFDQURFKSB7XG4gICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuZmFjYWRlLmxvYWRpbmckO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmVBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMuZmFjYWRlLmNsZWFyQ3VycmVudEVudGl0eSgpO1xuICAgIHRoaXMuX3N1Ym1pdHRlZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdCgpOiBib29sZWFuIHtcbiAgICB0aGlzLl9zdWJtaXR0ZWQkLm5leHQodHJ1ZSk7XG5cbiAgICAvLyBzdG9wIGhlcmUgaWYgZm9ybSBpcyBpbnZhbGlkXG4gICAgaWYgKCF0aGlzLmFkZEVkaXRGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmb3JtIHZhbGlkYXRpb24gZXJyb3JzLicpOyAvL05PU09OQVJcbiAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRGb3JtRXJyb3JzKCkpKTsgLy9OT1NPTkFSXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc2F2ZSgpO1xuICAgIHRoaXMuY2xvc2VGb3JtKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgaXNEYXRhSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRFZGl0Rm9ybS5pbnZhbGlkO1xuICB9XG5cbiAgLy8gY29udmVuaWVuY2UgZ2V0dGVyIGZvciBlYXN5IGFjY2VzcyB0byBmb3JtIGZpZWxkc1xuICBwdWJsaWMgZm9ybUNvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZywgY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sOyB9ID0gdGhpcy5hZGRFZGl0Rm9ybS5jb250cm9scyk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIGNvbnRyb2xzW2NvbnRyb2xOYW1lXTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtQ29udHJvbEVycm9ycyhjb250cm9sOiBzdHJpbmcgfCBBYnN0cmFjdENvbnRyb2wsIGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbDsgfSB8IEFic3RyYWN0Q29udHJvbFtdID0gdGhpcy5hZGRFZGl0Rm9ybS5jb250cm9scyk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHRlbXBDb250cm9sID0gdHlwZW9mIGNvbnRyb2wgPT09ICdzdHJpbmcnID8gKGNvbnRyb2xzIGFzIGFueSlbY29udHJvbF0gOiBjb250cm9sO1xuICAgIGlmICh0ZW1wQ29udHJvbD8udmFsaWQgJiYgIXRlbXBDb250cm9sPy5lcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcENvbnRyb2w/LmVycm9ycztcbiAgfVxuICBwdWJsaWMgZm9ybU1pbkxlbmd0aEVycm9yKFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICk6IHsgcmVxdWlyZWRMZW5ndGg6IG51bWJlcjsgYWN0dWFsTGVuZ3RoOiBudW1iZXI7IH0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbEVycm9ycyhjb250cm9sTmFtZSk/Llt0aGlzLk1pbkxlbmd0aEVycm9yXTtcbiAgfVxuICBwdWJsaWMgZ2V0Rm9ybUVycm9ycyhjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2w7IH0gfCBBYnN0cmFjdENvbnRyb2xbXSA9IHRoaXMuYWRkRWRpdEZvcm0uY29udHJvbHMsIHBhcmVudENvbnRyb2xOYW1lPzogc3RyaW5nKTogeyBjb250cm9sTmFtZTogc3RyaW5nOyBlcnJvcjogVmFsaWRhdGlvbkVycm9yczsgfVtdIHtcbiAgICBjb25zdCBlcnJvcnM6IHsgY29udHJvbE5hbWU6IHN0cmluZzsgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnM7IH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXMoY29udHJvbHMpKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gKGNvbnRyb2xzIGFzIG5ldmVyKVtjb250cm9sTmFtZV07XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZm9ybUNvbnRyb2xFcnJvcnMoY29udHJvbCwgY29udHJvbHMpO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHsgY29udHJvbE5hbWU6IHBhcmVudENvbnRyb2xOYW1lID8gYCR7cGFyZW50Q29udHJvbE5hbWV9LiR7Y29udHJvbE5hbWV9YCA6IGNvbnRyb2xOYW1lLCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICAgIGlmICgoY29udHJvbCBhcyBGb3JtQXJyYXkpPy5jb250cm9scykge1xuXG4gICAgICAgIGVycm9ycy5wdXNoKC4uLnRoaXMuZ2V0Rm9ybUVycm9ycygoY29udHJvbCBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLCBwYXJlbnRDb250cm9sTmFtZSA/IGAke3BhcmVudENvbnRyb2xOYW1lfS4ke2NvbnRyb2xOYW1lfWAgOiBjb250cm9sTmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGluaXRGb3JtKCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBzYXZlKCk6IHZvaWQ7XG59XG4iXX0=
@@ -1,18 +1,24 @@
1
1
  export function updateStateCollectionItem(collection, item) {
2
- const items = [...collection];
3
2
  const index = collection.findIndex((val) => val.id === item.id);
4
- items.splice(index, 1, item);
5
- return items;
3
+ if (index > -1) {
4
+ const items = [...collection];
5
+ items.splice(index, 1, item);
6
+ return items;
7
+ }
8
+ return collection;
6
9
  }
7
10
  export function removeStateCollectionItem(collection, item) {
8
- const items = [...collection];
9
11
  const index = collection.findIndex((val) => val.id === item.id);
10
- items.splice(index, 1);
11
- return items;
12
+ if (index > -1) {
13
+ const items = [...collection];
14
+ items.splice(index, 1);
15
+ return items;
16
+ }
17
+ return collection;
12
18
  }
13
19
  export function addStateCollectionItem(collection, item) {
14
20
  const items = [...collection];
15
21
  items.unshift(item);
16
22
  return items;
17
23
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlci1jb2xsZWN0aW9uLWxvZ2ljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pbW5nLWtlbmRvLWRhdGEtZW50cnkvc3JjL2xpYi9yZWR1Y2VyLWNvbGxlY3Rpb24tbG9naWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxVQUFvQixFQUNwQixJQUFZO0lBRVosTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLFVBQW9CLEVBQ3BCLElBQVk7SUFFWixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDOUIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxVQUFvQixFQUNwQixJQUFZO0lBRVosTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQzlCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsdWVUeXBlIH0gZnJvbSAnaW1uZy1ucnNyeC1jbGllbnQtdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlQ29sbGVjdGlvbkl0ZW08RW50aXR5IGV4dGVuZHMgeyBpZD86IFZhbHVlVHlwZSB9PihcbiAgY29sbGVjdGlvbjogRW50aXR5W10sXG4gIGl0ZW06IEVudGl0eVxuKTogRW50aXR5W10ge1xuICBjb25zdCBpdGVtcyA9IFsuLi5jb2xsZWN0aW9uXTtcbiAgY29uc3QgaW5kZXggPSBjb2xsZWN0aW9uLmZpbmRJbmRleCgodmFsKSA9PiB2YWwuaWQgPT09IGl0ZW0uaWQpO1xuICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEsIGl0ZW0pO1xuICByZXR1cm4gaXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTdGF0ZUNvbGxlY3Rpb25JdGVtPEVudGl0eSBleHRlbmRzIHsgaWQ/OiBWYWx1ZVR5cGUgfT4oXG4gIGNvbGxlY3Rpb246IEVudGl0eVtdLFxuICBpdGVtOiBFbnRpdHlcbik6IEVudGl0eVtdIHtcbiAgY29uc3QgaXRlbXMgPSBbLi4uY29sbGVjdGlvbl07XG4gIGNvbnN0IGluZGV4ID0gY29sbGVjdGlvbi5maW5kSW5kZXgoKHZhbCkgPT4gdmFsLmlkID09PSBpdGVtLmlkKTtcbiAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgcmV0dXJuIGl0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkU3RhdGVDb2xsZWN0aW9uSXRlbTxFbnRpdHkgZXh0ZW5kcyB7IGlkPzogVmFsdWVUeXBlIH0+KFxuICBjb2xsZWN0aW9uOiBFbnRpdHlbXSxcbiAgaXRlbTogRW50aXR5XG4pOiBFbnRpdHlbXSB7XG4gIGNvbnN0IGl0ZW1zID0gWy4uLmNvbGxlY3Rpb25dO1xuICBpdGVtcy51bnNoaWZ0KGl0ZW0pO1xuICByZXR1cm4gaXRlbXM7XG59XG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlci1jb2xsZWN0aW9uLWxvZ2ljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pbW5nLWtlbmRvLWRhdGEtZW50cnkvc3JjL2xpYi9yZWR1Y2VyLWNvbGxlY3Rpb24tbG9naWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxVQUFvQixFQUNwQixJQUFZO0lBRVosTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDZCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxVQUFvQixFQUNwQixJQUFZO0lBRVosTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDZCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFVBQW9CLEVBQ3BCLElBQVk7SUFFWixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWx1ZVR5cGUgfSBmcm9tICdpbW5nLW5yc3J4LWNsaWVudC11dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVDb2xsZWN0aW9uSXRlbTxFbnRpdHkgZXh0ZW5kcyB7IGlkPzogVmFsdWVUeXBlOyB9PihcbiAgY29sbGVjdGlvbjogRW50aXR5W10sXG4gIGl0ZW06IEVudGl0eVxuKTogRW50aXR5W10ge1xuICBjb25zdCBpbmRleCA9IGNvbGxlY3Rpb24uZmluZEluZGV4KCh2YWwpID0+IHZhbC5pZCA9PT0gaXRlbS5pZCk7XG4gIGlmIChpbmRleCA+IC0xKSB7XG4gICAgY29uc3QgaXRlbXMgPSBbLi4uY29sbGVjdGlvbl07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxLCBpdGVtKTtcbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTdGF0ZUNvbGxlY3Rpb25JdGVtPEVudGl0eSBleHRlbmRzIHsgaWQ/OiBWYWx1ZVR5cGU7IH0+KFxuICBjb2xsZWN0aW9uOiBFbnRpdHlbXSxcbiAgaXRlbTogRW50aXR5XG4pOiBFbnRpdHlbXSB7XG4gIGNvbnN0IGluZGV4ID0gY29sbGVjdGlvbi5maW5kSW5kZXgoKHZhbCkgPT4gdmFsLmlkID09PSBpdGVtLmlkKTtcbiAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi5jb2xsZWN0aW9uXTtcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICByZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN0YXRlQ29sbGVjdGlvbkl0ZW08RW50aXR5IGV4dGVuZHMgeyBpZD86IFZhbHVlVHlwZTsgfT4oXG4gIGNvbGxlY3Rpb246IEVudGl0eVtdLFxuICBpdGVtOiBFbnRpdHlcbik6IEVudGl0eVtdIHtcbiAgY29uc3QgaXRlbXMgPSBbLi4uY29sbGVjdGlvbl07XG4gIGl0ZW1zLnVuc2hpZnQoaXRlbSk7XG4gIHJldHVybiBpdGVtcztcbn1cbiJdfQ==
@@ -195,32 +195,41 @@ class BaseDataEntryComponent {
195
195
  if (!this.addEditForm.valid) {
196
196
  console.error('form validation errors.'); //NOSONAR
197
197
  console.error(JSON.stringify(this.getFormErrors())); //NOSONAR
198
- return;
198
+ return false;
199
199
  }
200
200
  this.save();
201
201
  this.closeForm();
202
+ return true;
202
203
  }
203
204
  isDataInvalid() {
204
205
  return this.addEditForm.invalid;
205
206
  }
206
207
  // convenience getter for easy access to form fields
207
- formControl(controlName) {
208
- return this.addEditForm.controls[controlName];
208
+ formControl(controlName, controls = this.addEditForm.controls) {
209
+ return controls[controlName];
209
210
  }
210
- formControlErrors(controlName) {
211
- var _a;
212
- return (_a = this.formControl(controlName)) === null || _a === void 0 ? void 0 : _a.errors;
211
+ formControlErrors(control, controls = this.addEditForm.controls) {
212
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
213
+ const tempControl = typeof control === 'string' ? controls[control] : control;
214
+ if ((tempControl === null || tempControl === void 0 ? void 0 : tempControl.valid) && !(tempControl === null || tempControl === void 0 ? void 0 : tempControl.errors)) {
215
+ return null;
216
+ }
217
+ return tempControl === null || tempControl === void 0 ? void 0 : tempControl.errors;
213
218
  }
214
219
  formMinLengthError(controlName) {
215
220
  var _a;
216
221
  return (_a = this.formControlErrors(controlName)) === null || _a === void 0 ? void 0 : _a[this.MinLengthError];
217
222
  }
218
- getFormErrors() {
223
+ getFormErrors(controls = this.addEditForm.controls, parentControlName) {
219
224
  const errors = [];
220
- for (const control of Object.keys(this.addEditForm.controls)) {
221
- const error = this.formControlErrors(control);
225
+ for (const controlName of Object.keys(controls)) {
226
+ const control = controls[controlName];
227
+ const error = this.formControlErrors(control, controls);
222
228
  if (error) {
223
- errors.push({ control, error });
229
+ errors.push({ controlName: parentControlName ? `${parentControlName}.${controlName}` : controlName, error });
230
+ }
231
+ if (control === null || control === void 0 ? void 0 : control.controls) {
232
+ errors.push(...this.getFormErrors(control.controls, parentControlName ? `${parentControlName}.${controlName}` : controlName));
224
233
  }
225
234
  }
226
235
  return errors;
@@ -242,16 +251,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
242
251
  }] } });
243
252
 
244
253
  function updateStateCollectionItem(collection, item) {
245
- const items = [...collection];
246
254
  const index = collection.findIndex((val) => val.id === item.id);
247
- items.splice(index, 1, item);
248
- return items;
255
+ if (index > -1) {
256
+ const items = [...collection];
257
+ items.splice(index, 1, item);
258
+ return items;
259
+ }
260
+ return collection;
249
261
  }
250
262
  function removeStateCollectionItem(collection, item) {
251
- const items = [...collection];
252
263
  const index = collection.findIndex((val) => val.id === item.id);
253
- items.splice(index, 1);
254
- return items;
264
+ if (index > -1) {
265
+ const items = [...collection];
266
+ items.splice(index, 1);
267
+ return items;
268
+ }
269
+ return collection;
255
270
  }
256
271
  function addStateCollectionItem(collection, item) {
257
272
  const items = [...collection];
@@ -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 } 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{\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(): void {\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;\n }\n this.save();\n this.closeForm();\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): AbstractControl {\n return this.addEditForm.controls[controlName];\n }\n public formControlErrors(controlName: string): ValidationErrors | null {\n return this.formControl(controlName)?.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(): { control: string; error: ValidationErrors }[] {\n const errors: { control: string; error: ValidationErrors }[] = [];\n for (const control of Object.keys(this.addEditForm.controls)) {\n const error = this.formControlErrors(control);\n if (error) {\n errors.push({ control, error });\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 items = [...collection];\n const index = collection.findIndex((val) => val.id === item.id);\n items.splice(index, 1, item);\n return items;\n}\n\nexport function removeStateCollectionItem<Entity extends { id?: ValueType }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const items = [...collection];\n const index = collection.findIndex((val) => val.id === item.id);\n items.splice(index, 1);\n return items;\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
+ {"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":"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"}
@@ -55,30 +55,40 @@ class BaseDataEntryComponent {
55
55
  if (!this.addEditForm.valid) {
56
56
  console.error('form validation errors.'); //NOSONAR
57
57
  console.error(JSON.stringify(this.getFormErrors())); //NOSONAR
58
- return;
58
+ return false;
59
59
  }
60
60
  this.save();
61
61
  this.closeForm();
62
+ return true;
62
63
  }
63
64
  isDataInvalid() {
64
65
  return this.addEditForm.invalid;
65
66
  }
66
67
  // convenience getter for easy access to form fields
67
- formControl(controlName) {
68
- return this.addEditForm.controls[controlName];
68
+ formControl(controlName, controls = this.addEditForm.controls) {
69
+ return controls[controlName];
69
70
  }
70
- formControlErrors(controlName) {
71
- return this.formControl(controlName)?.errors;
71
+ formControlErrors(control, controls = this.addEditForm.controls) {
72
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
+ const tempControl = typeof control === 'string' ? controls[control] : control;
74
+ if (tempControl?.valid && !tempControl?.errors) {
75
+ return null;
76
+ }
77
+ return tempControl?.errors;
72
78
  }
73
79
  formMinLengthError(controlName) {
74
80
  return this.formControlErrors(controlName)?.[this.MinLengthError];
75
81
  }
76
- getFormErrors() {
82
+ getFormErrors(controls = this.addEditForm.controls, parentControlName) {
77
83
  const errors = [];
78
- for (const control of Object.keys(this.addEditForm.controls)) {
79
- const error = this.formControlErrors(control);
84
+ for (const controlName of Object.keys(controls)) {
85
+ const control = controls[controlName];
86
+ const error = this.formControlErrors(control, controls);
80
87
  if (error) {
81
- errors.push({ control, error });
88
+ errors.push({ controlName: parentControlName ? `${parentControlName}.${controlName}` : controlName, error });
89
+ }
90
+ if (control?.controls) {
91
+ errors.push(...this.getFormErrors(control.controls, parentControlName ? `${parentControlName}.${controlName}` : controlName));
82
92
  }
83
93
  }
84
94
  return errors;
@@ -235,16 +245,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
235
245
  }] });
236
246
 
237
247
  function updateStateCollectionItem(collection, item) {
238
- const items = [...collection];
239
248
  const index = collection.findIndex((val) => val.id === item.id);
240
- items.splice(index, 1, item);
241
- return items;
249
+ if (index > -1) {
250
+ const items = [...collection];
251
+ items.splice(index, 1, item);
252
+ return items;
253
+ }
254
+ return collection;
242
255
  }
243
256
  function removeStateCollectionItem(collection, item) {
244
- const items = [...collection];
245
257
  const index = collection.findIndex((val) => val.id === item.id);
246
- items.splice(index, 1);
247
- return items;
258
+ if (index > -1) {
259
+ const items = [...collection];
260
+ items.splice(index, 1);
261
+ return items;
262
+ }
263
+ return collection;
248
264
  }
249
265
  function addStateCollectionItem(collection, item) {
250
266
  const items = [...collection];
@@ -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 } 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{\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(): void {\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;\n }\n this.save();\n this.closeForm();\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): AbstractControl {\n return this.addEditForm.controls[controlName];\n }\n public formControlErrors(controlName: string): ValidationErrors | null {\n return this.formControl(controlName)?.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(): { control: string; error: ValidationErrors }[] {\n const errors: { control: string; error: ValidationErrors }[] = [];\n for (const control of Object.keys(this.addEditForm.controls)) {\n const error = this.formControlErrors(control);\n if (error) {\n errors.push({ control, error });\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 items = [...collection];\n const index = collection.findIndex((val) => val.id === item.id);\n items.splice(index, 1, item);\n return items;\n}\n\nexport function removeStateCollectionItem<Entity extends { id?: ValueType }>(\n collection: Entity[],\n item: Entity\n): Entity[] {\n const items = [...collection];\n const index = collection.findIndex((val) => val.id === item.id);\n items.splice(index, 1);\n return items;\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
+ {"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":"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"}
@@ -35,16 +35,22 @@ export declare abstract class BaseDataEntryComponent<FACADE extends IBaseDataEnt
35
35
  ngOnDestroy(): void;
36
36
  closeForm(): void;
37
37
  onCancel(): void;
38
- onSubmit(): void;
38
+ onSubmit(): boolean;
39
39
  isDataInvalid(): boolean;
40
- formControl(controlName: string): AbstractControl;
41
- formControlErrors(controlName: string): ValidationErrors | null;
40
+ formControl(controlName: string, controls?: {
41
+ [key: string]: AbstractControl;
42
+ }): AbstractControl;
43
+ formControlErrors(control: string | AbstractControl, controls?: {
44
+ [key: string]: AbstractControl;
45
+ } | AbstractControl[]): ValidationErrors | null;
42
46
  formMinLengthError(controlName: string): {
43
47
  requiredLength: number;
44
48
  actualLength: number;
45
49
  } | null;
46
- getFormErrors(): {
47
- control: string;
50
+ getFormErrors(controls?: {
51
+ [key: string]: AbstractControl;
52
+ } | AbstractControl[], parentControlName?: string): {
53
+ controlName: string;
48
54
  error: ValidationErrors;
49
55
  }[];
50
56
  abstract initForm(): void;
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": "5.224.2",
4
+ "version": "5.224.5",
5
5
  "peerDependencies": {
6
6
  "@angular/common": ">=13.x",
7
7
  "@angular/core": ">=13.x",