imng-kendo-data-entry 6.140.2 → 6.140.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/esm2022/lib/base-data-entry.component.mjs +114 -0
  2. package/esm2022/lib/data-entry-dialog.component.mjs +127 -0
  3. package/esm2022/lib/dialog-buttons.directive.mjs +15 -0
  4. package/esm2022/lib/imng-kendo-data-entry.module.mjs +21 -0
  5. package/{fesm2020 → fesm2022}/imng-kendo-data-entry.mjs +17 -17
  6. package/{fesm2020 → fesm2022}/imng-kendo-data-entry.mjs.map +1 -1
  7. package/lib/base-data-entry.component.d.ts +1 -1
  8. package/lib/data-entry-dialog.component.d.ts +1 -1
  9. package/package.json +14 -22
  10. package/esm2020/lib/base-data-entry.component.mjs +0 -113
  11. package/esm2020/lib/data-entry-dialog.component.mjs +0 -126
  12. package/esm2020/lib/dialog-buttons.directive.mjs +0 -14
  13. package/esm2020/lib/imng-kendo-data-entry.module.mjs +0 -20
  14. package/fesm2015/imng-kendo-data-entry-testing.mjs +0 -178
  15. package/fesm2015/imng-kendo-data-entry-testing.mjs.map +0 -1
  16. package/fesm2015/imng-kendo-data-entry.mjs +0 -304
  17. package/fesm2015/imng-kendo-data-entry.mjs.map +0 -1
  18. /package/{esm2020 → esm2022}/imng-kendo-data-entry.mjs +0 -0
  19. /package/{esm2020 → esm2022}/index.mjs +0 -0
  20. /package/{esm2020 → esm2022}/lib/data-delete-facade.mjs +0 -0
  21. /package/{esm2020 → esm2022}/lib/data-entry-facade.mjs +0 -0
  22. /package/{esm2020 → esm2022}/lib/form-group-patcher.mjs +0 -0
  23. /package/{esm2020 → esm2022}/lib/reducer-collection-logic.mjs +0 -0
  24. /package/{esm2020 → esm2022}/testing/data-delete-facade-http-tests.mjs +0 -0
  25. /package/{esm2020 → esm2022}/testing/data-delete-mock.facade.mjs +0 -0
  26. /package/{esm2020 → esm2022}/testing/data-entry-facade-http-tests.mjs +0 -0
  27. /package/{esm2020 → esm2022}/testing/data-entry-facade-tests.mjs +0 -0
  28. /package/{esm2020 → esm2022}/testing/data-entry-mock.facade.mjs +0 -0
  29. /package/{esm2020 → esm2022}/testing/imng-kendo-data-entry-testing.mjs +0 -0
  30. /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
  31. /package/{esm2020 → esm2022}/testing/mock-data-entry-dialog.component.mjs +0 -0
  32. /package/{esm2020 → esm2022}/testing/test-trigger-event-helpers.mjs +0 -0
  33. /package/{fesm2020 → fesm2022}/imng-kendo-data-entry-testing.mjs +0 -0
  34. /package/{fesm2020 → fesm2022}/imng-kendo-data-entry-testing.mjs.map +0 -0
@@ -1,113 +0,0 @@
1
- import { Component, Inject, InjectionToken, Input, } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { Subscriptions } from 'imng-ngrx-utils';
4
- import * as i0 from "@angular/core";
5
- const FACADE = new InjectionToken('imng-data-entry-facade');
6
- /**
7
- * The extending class has to implement the following properties on ngInit
8
- * dialogTitle: string - This will be the text displayed at the top of the modal title bar
9
- * props: enum - This is a helper property to make the html markup type safe
10
- *
11
- * Along with the requirements above, the extending class has to set values to the
12
- * following properties on ngInit
13
- * active$: Observable<boolean> - This typically would be assigned to the isNewActive$ or isEditActive on the facade
14
- * addEditForm: FormGroup - This will be created by your component
15
- *
16
- * @class BaseDataEntryComponent>
17
- */
18
- export class BaseDataEntryComponent {
19
- constructor(facade) {
20
- this.facade = facade;
21
- this.width = 800; //NOSONAR
22
- this.height = 600; //NOSONAR
23
- this.formId = 'imng-form';
24
- this.saveButtonText = 'Save';
25
- this.MinLengthError = 'minlength';
26
- this.RequiredError = 'required';
27
- this.ENUM_DISPLAY_TEXT = 'displayText';
28
- this.ENUM_NAME = 'name';
29
- this.allSubscriptions = new Subscriptions();
30
- this.submitted$ = new BehaviorSubject(false);
31
- this.loading$ = this.facade.loading$;
32
- this.initForm();
33
- }
34
- ngOnDestroy() {
35
- this.allSubscriptions.unsubscribeAll();
36
- }
37
- closeForm() {
38
- this.initForm();
39
- this.facade.clearCurrentEntity();
40
- this.submitted$.next(false);
41
- }
42
- onCancel() {
43
- this.closeForm();
44
- }
45
- onSubmit() {
46
- this.submitted$.next(true);
47
- // stop here if form is invalid
48
- if (!this.addEditForm.valid) {
49
- console.error('form validation errors.'); //NOSONAR
50
- console.error(JSON.stringify(this.getFormErrors())); //NOSONAR
51
- return false;
52
- }
53
- this.save();
54
- this.closeForm();
55
- return true;
56
- }
57
- isDataInvalid() {
58
- return this.addEditForm.invalid;
59
- }
60
- // convenience getter for easy access to form fields
61
- formControl(controlName, controls = this.addEditForm.controls) {
62
- return controls[controlName];
63
- }
64
- formControlErrors(control, controls = this
65
- .addEditForm.controls) {
66
- const tempControl =
67
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
- typeof control === 'string' ? controls[control] : control;
69
- if (tempControl?.valid && !tempControl?.errors) {
70
- return null;
71
- }
72
- return tempControl?.errors;
73
- }
74
- formMinLengthError(controlName) {
75
- return this.formControlErrors(controlName)?.[this.MinLengthError];
76
- }
77
- getFormErrors(controls = this
78
- .addEditForm.controls, parentControlName) {
79
- const errors = [];
80
- for (const controlName of Object.keys(controls)) {
81
- const control = controls[controlName];
82
- const error = this.formControlErrors(control, controls);
83
- if (error) {
84
- errors.push({
85
- controlName: parentControlName
86
- ? `${parentControlName}.${controlName}`
87
- : controlName,
88
- error,
89
- });
90
- }
91
- if (control?.controls) {
92
- errors.push(...this.getFormErrors(control.controls, parentControlName
93
- ? `${parentControlName}.${controlName}`
94
- : controlName));
95
- }
96
- }
97
- return errors;
98
- }
99
- }
100
- BaseDataEntryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: BaseDataEntryComponent, deps: [{ token: FACADE }], target: i0.ɵɵFactoryTarget.Component });
101
- BaseDataEntryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: BaseDataEntryComponent, selector: "ng-component", inputs: { width: "width", height: "height" }, ngImport: i0, template: '', isInline: true });
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: BaseDataEntryComponent, decorators: [{
103
- type: Component,
104
- args: [{ template: '' }]
105
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
106
- type: Inject,
107
- args: [FACADE]
108
- }] }]; }, propDecorators: { width: [{
109
- type: Input
110
- }], height: [{
111
- type: Input
112
- }] } });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvaW1uZy1rZW5kby1kYXRhLWVudHJ5L3NyYy9saWIvYmFzZS1kYXRhLWVudHJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRbkQsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQy9CLHdCQUF3QixDQUN6QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLE9BQWdCLHNCQUFzQjtJQXNCMUMsWUFBNEMsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFsQjFDLFVBQUssR0FBb0IsR0FBRyxDQUFDLENBQUMsU0FBUztRQUN2QyxXQUFNLEdBQW9CLEdBQUcsQ0FBQyxDQUFDLFNBQVM7UUFFakQsV0FBTSxHQUFHLFdBQVcsQ0FBQztRQUNyQixtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQUNmLG1CQUFjLEdBQUcsV0FBVyxDQUFDO1FBQzdCLGtCQUFhLEdBQUcsVUFBVSxDQUFDO1FBQzNCLHNCQUFpQixHQUFHLGFBQWEsQ0FBQztRQUNsQyxjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQzVCLHFCQUFnQixHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFLOUIsZUFBVSxHQUE2QixJQUFJLGVBQWUsQ0FDeEUsS0FBZ0IsQ0FDakIsQ0FBQztRQUdBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7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R0FBRyxpQkFBaUIsSUFBSSxXQUFXLEVBQUU7b0JBQ3ZDLENBQUMsQ0FBQyxXQUFXLENBQ2hCLENBQ0YsQ0FBQzthQUNIO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzttSEFsSG1CLHNCQUFzQixrQkFzQnRCLE1BQU07dUdBdEJOLHNCQUFzQixrR0FEckIsRUFBRTsyRkFDSCxzQkFBc0I7a0JBRDNDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFOzswQkF1QlosTUFBTTsyQkFBQyxNQUFNOzRDQWxCVixLQUFLO3NCQUFwQixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUFycmF5LFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJQmFzZURhdGFFbnRyeUZhY2FkZSB9IGZyb20gJy4vZGF0YS1lbnRyeS1mYWNhZGUnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlLCBTdWJzY3JpcHRpb25zIH0gZnJvbSAnaW1uZy1uZ3J4LXV0aWxzJztcblxuY29uc3QgRkFDQURFID0gbmV3IEluamVjdGlvblRva2VuPElCYXNlRGF0YUVudHJ5RmFjYWRlPihcbiAgJ2ltbmctZGF0YS1lbnRyeS1mYWNhZGUnLFxuKTtcblxuLyoqXG4gKiBUaGUgZXh0ZW5kaW5nIGNsYXNzIGhhcyB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG9uIG5nSW5pdFxuICogZGlhbG9nVGl0bGU6IHN0cmluZyAtIFRoaXMgd2lsbCBiZSB0aGUgdGV4dCBkaXNwbGF5ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbW9kYWwgdGl0bGUgYmFyXG4gKiBwcm9wczogZW51bSAtIFRoaXMgaXMgYSBoZWxwZXIgcHJvcGVydHkgdG8gbWFrZSB0aGUgaHRtbCBtYXJrdXAgdHlwZSBzYWZlXG4gKlxuICogQWxvbmcgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIGFib3ZlLCB0aGUgZXh0ZW5kaW5nIGNsYXNzIGhhcyB0byBzZXQgdmFsdWVzIHRvIHRoZVxuICogZm9sbG93aW5nIHByb3BlcnRpZXMgb24gbmdJbml0XG4gKiBhY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+IC0gVGhpcyB0eXBpY2FsbHkgd291bGQgYmUgYXNzaWduZWQgdG8gdGhlIGlzTmV3QWN0aXZlJCBvciBpc0VkaXRBY3RpdmUgb24gdGhlIGZhY2FkZVxuICogYWRkRWRpdEZvcm06IEZvcm1Hcm91cCAtIFRoaXMgd2lsbCBiZSBjcmVhdGVkIGJ5IHlvdXIgY29tcG9uZW50XG4gKlxuICogQGNsYXNzIEJhc2VEYXRhRW50cnlDb21wb25lbnQ+XG4gKi9cbkBDb21wb25lbnQoeyB0ZW1wbGF0ZTogJycgfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YUVudHJ5Q29tcG9uZW50PFxuICBGQUNBREUgZXh0ZW5kcyBJQmFzZURhdGFFbnRyeUZhY2FkZSxcbj4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIFN1YnNjcmliYWJsZVxue1xuICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6IHN0cmluZyB8IG51bWJlciA9IDgwMDsgLy9OT1NPTkFSXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9IDYwMDsgLy9OT1NPTkFSXG5cbiAgcHVibGljIGZvcm1JZCA9ICdpbW5nLWZvcm0nO1xuICBwdWJsaWMgc2F2ZUJ1dHRvblRleHQgPSAnU2F2ZSc7XG4gIHB1YmxpYyByZWFkb25seSBNaW5MZW5ndGhFcnJvciA9ICdtaW5sZW5ndGgnO1xuICBwdWJsaWMgcmVhZG9ubHkgUmVxdWlyZWRFcnJvciA9ICdyZXF1aXJlZCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX0RJU1BMQVlfVEVYVCA9ICdkaXNwbGF5VGV4dCc7XG4gIHB1YmxpYyByZWFkb25seSBFTlVNX05BTUUgPSAnbmFtZSc7XG4gIHB1YmxpYyBhbGxTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbnMoKTtcbiAgcHVibGljIGFic3RyYWN0IGRpYWxvZ1RpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBwcm9wczogdW5rbm93bjtcbiAgcHVibGljIGFic3RyYWN0IGFkZEVkaXRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IHN1Ym1pdHRlZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgZmFsc2UgYXMgYm9vbGVhbixcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEZBQ0FERSkgcHVibGljIHJlYWRvbmx5IGZhY2FkZTogRkFDQURFKSB7XG4gICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuZmFjYWRlLmxvYWRpbmckO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmVBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMuZmFjYWRlLmNsZWFyQ3VycmVudEVudGl0eSgpO1xuICAgIHRoaXMuc3VibWl0dGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlRm9ybSgpO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuc3VibWl0dGVkJC5uZXh0KHRydWUpO1xuXG4gICAgLy8gc3RvcCBoZXJlIGlmIGZvcm0gaXMgaW52YWxpZFxuICAgIGlmICghdGhpcy5hZGRFZGl0Rm9ybS52YWxpZCkge1xuICAgICAgY29uc29sZS5lcnJvcignZm9ybSB2YWxpZGF0aW9uIGVycm9ycy4nKTsgLy9OT1NPTkFSXG4gICAgICBjb25zb2xlLmVycm9yKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Rm9ybUVycm9ycygpKSk7IC8vTk9TT05BUlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNhdmUoKTtcbiAgICB0aGlzLmNsb3NlRm9ybSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGlzRGF0YUludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkRWRpdEZvcm0uaW52YWxpZDtcbiAgfVxuXG4gIC8vIGNvbnZlbmllbmNlIGdldHRlciBmb3IgZWFzeSBhY2Nlc3MgdG8gZm9ybSBmaWVsZHNcbiAgcHVibGljIGZvcm1Db250cm9sKFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICAgY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0gPSB0aGlzLmFkZEVkaXRGb3JtLmNvbnRyb2xzLFxuICApOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV07XG4gIH1cblxuICBwdWJsaWMgZm9ybUNvbnRyb2xFcnJvcnMoXG4gICAgY29udHJvbDogc3RyaW5nIHwgQWJzdHJhY3RDb250cm9sLFxuICAgIGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9IHwgQWJzdHJhY3RDb250cm9sW10gPSB0aGlzXG4gICAgICAuYWRkRWRpdEZvcm0uY29udHJvbHMsXG4gICk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB0ZW1wQ29udHJvbCA9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgdHlwZW9mIGNvbnRyb2wgPT09ICdzdHJpbmcnID8gKGNvbnRyb2xzIGFzIGFueSlbY29udHJvbF0gOiBjb250cm9sO1xuICAgIGlmICh0ZW1wQ29udHJvbD8udmFsaWQgJiYgIXRlbXBDb250cm9sPy5lcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcENvbnRyb2w/LmVycm9ycztcbiAgfVxuICBwdWJsaWMgZm9ybU1pbkxlbmd0aEVycm9yKFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICk6IHsgcmVxdWlyZWRMZW5ndGg6IG51bWJlcjsgYWN0dWFsTGVuZ3RoOiBudW1iZXIgfSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sRXJyb3JzKGNvbnRyb2xOYW1lKT8uW3RoaXMuTWluTGVuZ3RoRXJyb3JdO1xuICB9XG4gIHB1YmxpYyBnZXRGb3JtRXJyb3JzKFxuICAgIGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9IHwgQWJzdHJhY3RDb250cm9sW10gPSB0aGlzXG4gICAgICAuYWRkRWRpdEZvcm0uY29udHJvbHMsXG4gICAgcGFyZW50Q29udHJvbE5hbWU/OiBzdHJpbmcsXG4gICk6IHsgY29udHJvbE5hbWU6IHN0cmluZzsgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfVtdIHtcbiAgICBjb25zdCBlcnJvcnM6IHsgY29udHJvbE5hbWU6IHN0cmluZzsgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfVtdID0gW107XG4gICAgZm9yIChjb25zdCBjb250cm9sTmFtZSBvZiBPYmplY3Qua2V5cyhjb250cm9scykpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSAoY29udHJvbHMgYXMgbmV2ZXIpW2NvbnRyb2xOYW1lXTtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5mb3JtQ29udHJvbEVycm9ycyhjb250cm9sLCBjb250cm9scyk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvbnRyb2xOYW1lOiBwYXJlbnRDb250cm9sTmFtZVxuICAgICAgICAgICAgPyBgJHtwYXJlbnRDb250cm9sTmFtZX0uJHtjb250cm9sTmFtZX1gXG4gICAgICAgICAgICA6IGNvbnRyb2xOYW1lLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICgoY29udHJvbCBhcyBGb3JtQXJyYXkpPy5jb250cm9scykge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi50aGlzLmdldEZvcm1FcnJvcnMoXG4gICAgICAgICAgICAoY29udHJvbCBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLFxuICAgICAgICAgICAgcGFyZW50Q29udHJvbE5hbWVcbiAgICAgICAgICAgICAgPyBgJHtwYXJlbnRDb250cm9sTmFtZX0uJHtjb250cm9sTmFtZX1gXG4gICAgICAgICAgICAgIDogY29udHJvbE5hbWUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBpbml0Rm9ybSgpOiB2b2lkO1xuICBwdWJsaWMgYWJzdHJhY3Qgc2F2ZSgpOiB2b2lkO1xufVxuIl19
@@ -1,126 +0,0 @@
1
- import { Component, Input, ChangeDetectionStrategy, TemplateRef, ContentChild, } from '@angular/core';
2
- import { BaseDataEntryComponent } from './base-data-entry.component';
3
- import { DialogButtonsDirective } from './dialog-buttons.directive';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "@progress/kendo-angular-dialog";
7
- export class DataEntryDialogComponent {
8
- constructor() {
9
- this.width = 800; //NOSONAR
10
- this.height = 600; //NOSONAR
11
- this.submitted = false;
12
- }
13
- ngOnInit() {
14
- if (!this.parentComponent) {
15
- throw new TypeError(`The input 'parentComponent' is required`);
16
- }
17
- this.dialogTitle = this.parentComponent.dialogTitle;
18
- this.loading$ = this.parentComponent.loading$;
19
- this.addEditForm = this.parentComponent.addEditForm;
20
- this.saveButtonText ?? (this.saveButtonText = this.parentComponent.saveButtonText ?? 'Save');
21
- this.formId ?? (this.formId = this.parentComponent.formId ?? 'imng-form');
22
- }
23
- close() {
24
- this.parentComponent?.closeForm();
25
- }
26
- cancel() {
27
- this.parentComponent?.onCancel();
28
- }
29
- submit() {
30
- this.parentComponent?.onSubmit();
31
- }
32
- get dialogActionBtnsCtx() {
33
- //NOSONAR
34
- return {
35
- $implicit: { cancel: () => this.cancel(), submit: () => this.submit() },
36
- };
37
- }
38
- }
39
- DataEntryDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: DataEntryDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
40
- DataEntryDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", 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
41
- [width]="width"
42
- [minWidth]="minWidth ?? width"
43
- [height]="height"
44
- (close)="close()"
45
- [autoFocusedElement]="autoFocusedElement || ''">
46
- <kendo-dialog-titlebar class="bg-primary">{{
47
- dialogTitle
48
- }}</kendo-dialog-titlebar>
49
- <ng-content></ng-content>
50
- <kendo-dialog-actions>
51
- <ng-container
52
- *ngTemplateOutlet="
53
- dialogBtnsTemplate || defaultDialogActionsTpl;
54
- context: dialogActionBtnsCtx
55
- ">
56
- </ng-container>
57
- </kendo-dialog-actions>
58
- </kendo-dialog>
59
- <ng-template #defaultDialogActionsTpl>
60
- <button kendoButton (click)="cancel()" class="btn btn-secondary btn-sm">
61
- Cancel
62
- </button>
63
- <button
64
- [attr.form]="formId"
65
- type="submit"
66
- kendoButton
67
- (click)="submit()"
68
- class="btn btn-primary btn-sm">
69
- {{ saveButtonText }}
70
- </button>
71
- </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", "themeColor"], 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 });
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: DataEntryDialogComponent, decorators: [{
73
- type: Component,
74
- args: [{
75
- selector: 'imng-data-entry-dialog[parentComponent]',
76
- template: `<kendo-dialog
77
- [width]="width"
78
- [minWidth]="minWidth ?? width"
79
- [height]="height"
80
- (close)="close()"
81
- [autoFocusedElement]="autoFocusedElement || ''">
82
- <kendo-dialog-titlebar class="bg-primary">{{
83
- dialogTitle
84
- }}</kendo-dialog-titlebar>
85
- <ng-content></ng-content>
86
- <kendo-dialog-actions>
87
- <ng-container
88
- *ngTemplateOutlet="
89
- dialogBtnsTemplate || defaultDialogActionsTpl;
90
- context: dialogActionBtnsCtx
91
- ">
92
- </ng-container>
93
- </kendo-dialog-actions>
94
- </kendo-dialog>
95
- <ng-template #defaultDialogActionsTpl>
96
- <button kendoButton (click)="cancel()" class="btn btn-secondary btn-sm">
97
- Cancel
98
- </button>
99
- <button
100
- [attr.form]="formId"
101
- type="submit"
102
- kendoButton
103
- (click)="submit()"
104
- class="btn btn-primary btn-sm">
105
- {{ saveButtonText }}
106
- </button>
107
- </ng-template>`,
108
- changeDetection: ChangeDetectionStrategy.OnPush,
109
- }]
110
- }], propDecorators: { minWidth: [{
111
- type: Input
112
- }], width: [{
113
- type: Input
114
- }], height: [{
115
- type: Input
116
- }], autoFocusedElement: [{
117
- type: Input
118
- }], parentComponent: [{
119
- type: Input
120
- }], saveButtonText: [{
121
- type: Input
122
- }], dialogBtnsTemplate: [{
123
- type: ContentChild,
124
- args: [DialogButtonsDirective, { static: true, read: TemplateRef }]
125
- }] } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1lbnRyeS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pbW5nLWtlbmRvLWRhdGEtZW50cnkvc3JjL2xpYi9kYXRhLWVudHJ5LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFzQ3BFLE1BQU0sT0FBTyx3QkFBd0I7SUFwQ3JDO1FBc0NrQixVQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUztRQUN0QixXQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUztRQXNCaEMsY0FBUyxHQUFHLEtBQUssQ0FBQztLQStCMUI7SUExQlEsUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxTQUFTLENBQUMseUNBQXlDLENBQUMsQ0FBQztTQUNoRTtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLEtBQW5CLElBQUksQ0FBQyxjQUFjLEdBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLElBQUksTUFBTSxFQUFDO1FBQ3RFLElBQUksQ0FBQyxNQUFNLEtBQVgsSUFBSSxDQUFDLE1BQU0sR0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxXQUFXLEVBQUM7SUFDN0QsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ00sTUFBTTtRQUNYLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ3JCLFNBQVM7UUFDVCxPQUFPO1lBQ0wsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO1NBQ3hFLENBQUM7SUFDSixDQUFDOztxSEF2RFUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsbVRBV3JCLHNCQUFzQiwyQkFBd0IsV0FBVywyQ0E3QzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQStCTzsyRkFHTix3QkFBd0I7a0JBcENwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5Q0FBeUM7b0JBQ25ELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErQk87b0JBQ2pCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFFaUIsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBSVUsa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUVVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFXQyxrQkFBa0I7c0JBVnhCLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBUZW1wbGF0ZVJlZixcbiAgQ29udGVudENoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VEYXRhRW50cnlDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtZGF0YS1lbnRyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlhbG9nQnV0dG9uc0RpcmVjdGl2ZSB9IGZyb20gJy4vZGlhbG9nLWJ1dHRvbnMuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaW1uZy1kYXRhLWVudHJ5LWRpYWxvZ1twYXJlbnRDb21wb25lbnRdJyxcbiAgdGVtcGxhdGU6IGA8a2VuZG8tZGlhbG9nXG4gICAgICBbd2lkdGhdPVwid2lkdGhcIlxuICAgICAgW21pbldpZHRoXT1cIm1pbldpZHRoID8/IHdpZHRoXCJcbiAgICAgIFtoZWlnaHRdPVwiaGVpZ2h0XCJcbiAgICAgIChjbG9zZSk9XCJjbG9zZSgpXCJcbiAgICAgIFthdXRvRm9jdXNlZEVsZW1lbnRdPVwiYXV0b0ZvY3VzZWRFbGVtZW50IHx8ICcnXCI+XG4gICAgICA8a2VuZG8tZGlhbG9nLXRpdGxlYmFyIGNsYXNzPVwiYmctcHJpbWFyeVwiPnt7XG4gICAgICAgIGRpYWxvZ1RpdGxlXG4gICAgICB9fTwva2VuZG8tZGlhbG9nLXRpdGxlYmFyPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPGtlbmRvLWRpYWxvZy1hY3Rpb25zPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGRpYWxvZ0J0bnNUZW1wbGF0ZSB8fCBkZWZhdWx0RGlhbG9nQWN0aW9uc1RwbDtcbiAgICAgICAgICAgIGNvbnRleHQ6IGRpYWxvZ0FjdGlvbkJ0bnNDdHhcbiAgICAgICAgICBcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2tlbmRvLWRpYWxvZy1hY3Rpb25zPlxuICAgIDwva2VuZG8tZGlhbG9nPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdERpYWxvZ0FjdGlvbnNUcGw+XG4gICAgICA8YnV0dG9uIGtlbmRvQnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFthdHRyLmZvcm1dPVwiZm9ybUlkXCJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgIGtlbmRvQnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzdWJtaXQoKVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxuICAgICAgICB7eyBzYXZlQnV0dG9uVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5gLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUVudHJ5RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIG1pbldpZHRoPzogbnVtYmVyOyAvL05PU09OQVJcbiAgQElucHV0KCkgcHVibGljIHdpZHRoID0gODAwOyAvL05PU09OQVJcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDYwMDsgLy9OT1NPTkFSXG4gIC8qKlxuICAgKiBodHRwczovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGlhbG9ncy9kaWFsb2cvaW5pdGlhbC1mb2N1cy9cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBhdXRvRm9jdXNlZEVsZW1lbnQ/OiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIEBJbnB1dCgpIHB1YmxpYyBwYXJlbnRDb21wb25lbnQ/OiBCYXNlRGF0YUVudHJ5Q29tcG9uZW50PGFueT47IC8vTk9TT05BUlxuICBASW5wdXQoKSBwdWJsaWMgc2F2ZUJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIEBDb250ZW50Q2hpbGQoRGlhbG9nQnV0dG9uc0RpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIC8qKlxuICAgKiBFeGFtcGxlIFVzYWdlOlxuICAgKiA8aW1uZy1kYXRhLWVudHJ5LWRpYWxvZz5cbiAgICogLi4uLi4uXG4gICAqICA8bmctdGVtcGxhdGUgW2ltbmdEaWFsb2dCdG5zXSBsZXQtY29yZUJ1dHRvbnM+XG4gICAqICAgIDxidXR0b24gaWQ9XCJidG5DdXN0b20xXCIgY2xhc3M9XCJrLWJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNsb3NlPC9idXR0b24+XG4gICAqICA8L25nLXRlbXBsYXRlPlxuICAgKiA8L2ltbmctZGF0YS1lbnRyeS1kaWFsb2c+XG4gICAqL1xuICBwdWJsaWMgZGlhbG9nQnRuc1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIHB1YmxpYyBsb2FkaW5nJD86IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBhZGRFZGl0Rm9ybT86IEZvcm1Hcm91cDtcbiAgcHVibGljIGZvcm1JZD86IHN0cmluZztcbiAgcHVibGljIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICBwdWJsaWMgZGlhbG9nVGl0bGU/OiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIHB1YmxpYyBjb21wb25lbnQ/OiB7fTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcmVudENvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIGlucHV0ICdwYXJlbnRDb21wb25lbnQnIGlzIHJlcXVpcmVkYCk7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nVGl0bGUgPSB0aGlzLnBhcmVudENvbXBvbmVudC5kaWFsb2dUaXRsZTtcbiAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5wYXJlbnRDb21wb25lbnQubG9hZGluZyQ7XG4gICAgdGhpcy5hZGRFZGl0Rm9ybSA9IHRoaXMucGFyZW50Q29tcG9uZW50LmFkZEVkaXRGb3JtO1xuICAgIHRoaXMuc2F2ZUJ1dHRvblRleHQgPz89IHRoaXMucGFyZW50Q29tcG9uZW50LnNhdmVCdXR0b25UZXh0ID8/ICdTYXZlJztcbiAgICB0aGlzLmZvcm1JZCA/Pz0gdGhpcy5wYXJlbnRDb21wb25lbnQuZm9ybUlkID8/ICdpbW5nLWZvcm0nO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50Q29tcG9uZW50Py5jbG9zZUZvcm0oKTtcbiAgfVxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50Q29tcG9uZW50Py5vbkNhbmNlbCgpO1xuICB9XG4gIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5wYXJlbnRDb21wb25lbnQ/Lm9uU3VibWl0KCk7XG4gIH1cbiAgZ2V0IGRpYWxvZ0FjdGlvbkJ0bnNDdHgoKTogb2JqZWN0IHwgbnVsbCB7XG4gICAgLy9OT1NPTkFSXG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogeyBjYW5jZWw6ICgpID0+IHRoaXMuY2FuY2VsKCksIHN1Ym1pdDogKCkgPT4gdGhpcy5zdWJtaXQoKSB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,14 +0,0 @@
1
- import { Directive, TemplateRef } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class DialogButtonsDirective {
4
- constructor(tpl) {
5
- this.tpl = tpl;
6
- }
7
- }
8
- DialogButtonsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: DialogButtonsDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
9
- DialogButtonsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: DialogButtonsDirective, selector: "[imngDialogBtns]", ngImport: i0 });
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: DialogButtonsDirective, decorators: [{
11
- type: Directive,
12
- args: [{ selector: '[imngDialogBtns]' }]
13
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWJ1dHRvbnMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pbW5nLWtlbmRvLWRhdGEtZW50cnkvc3JjL2xpYi9kaWFsb2ctYnV0dG9ucy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBR3ZELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFBbUIsR0FBeUI7UUFBekIsUUFBRyxHQUFILEdBQUcsQ0FBc0I7SUFBSSxDQUFDOzttSEFEdEMsc0JBQXNCO3VHQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFEbEMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2ltbmdEaWFsb2dCdG5zXScgfSlcbmV4cG9ydCBjbGFzcyBEaWFsb2dCdXR0b25zRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRwbDogVGVtcGxhdGVSZWY8dW5rbm93bj4pIHsgfVxufVxuIl19
@@ -1,20 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { DataEntryDialogComponent } from './data-entry-dialog.component';
4
- import { DialogButtonsDirective } from './dialog-buttons.directive';
5
- import { DialogModule } from '@progress/kendo-angular-dialog';
6
- import * as i0 from "@angular/core";
7
- export class ImngDataEntryDialogModule {
8
- }
9
- ImngDataEntryDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: ImngDataEntryDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- ImngDataEntryDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.5", ngImport: i0, type: ImngDataEntryDialogModule, declarations: [DataEntryDialogComponent, DialogButtonsDirective], imports: [CommonModule, DialogModule], exports: [DataEntryDialogComponent, DialogButtonsDirective] });
11
- ImngDataEntryDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: ImngDataEntryDialogModule, imports: [CommonModule, DialogModule] });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: ImngDataEntryDialogModule, decorators: [{
13
- type: NgModule,
14
- args: [{
15
- imports: [CommonModule, DialogModule],
16
- declarations: [DataEntryDialogComponent, DialogButtonsDirective],
17
- exports: [DataEntryDialogComponent, DialogButtonsDirective],
18
- }]
19
- }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1uZy1rZW5kby1kYXRhLWVudHJ5Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvaW1uZy1rZW5kby1kYXRhLWVudHJ5L3NyYy9saWIvaW1uZy1rZW5kby1kYXRhLWVudHJ5Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBTzlELE1BQU0sT0FBTyx5QkFBeUI7O3NIQUF6Qix5QkFBeUI7dUhBQXpCLHlCQUF5QixpQkFIckIsd0JBQXdCLEVBQUUsc0JBQXNCLGFBRHJELFlBQVksRUFBRSxZQUFZLGFBRTFCLHdCQUF3QixFQUFFLHNCQUFzQjt1SEFFL0MseUJBQXlCLFlBSjFCLFlBQVksRUFBRSxZQUFZOzJGQUl6Qix5QkFBeUI7a0JBTHJDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztvQkFDckMsWUFBWSxFQUFFLENBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUM7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixFQUFFLHNCQUFzQixDQUFDO2lCQUM1RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGF0YUVudHJ5RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhLWVudHJ5LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlhbG9nQnV0dG9uc0RpcmVjdGl2ZSB9IGZyb20gJy4vZGlhbG9nLWJ1dHRvbnMuZGlyZWN0aXZlJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRpYWxvZyc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERpYWxvZ01vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW0RhdGFFbnRyeURpYWxvZ0NvbXBvbmVudCwgRGlhbG9nQnV0dG9uc0RpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtEYXRhRW50cnlEaWFsb2dDb21wb25lbnQsIERpYWxvZ0J1dHRvbnNEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBJbW5nRGF0YUVudHJ5RGlhbG9nTW9kdWxlIHt9XG4iXX0=
@@ -1,178 +0,0 @@
1
- import { of } from 'rxjs';
2
- import { __awaiter } from 'tslib';
3
- import { readFirst } from 'imng-ngrx-utils/testing';
4
- import { By } from '@angular/platform-browser';
5
- import { FormGroup, FormControl } from '@angular/forms';
6
- import { BaseDataEntryComponent } from 'imng-kendo-data-entry';
7
-
8
- // eslint-disable-next-line @typescript-eslint/ban-types
9
- class DataEntryMockFacade {
10
- constructor() {
11
- this.loading$ = of(false);
12
- // eslint-disable-next-line @typescript-eslint/ban-types
13
- this.currentEntity$ = of(null);
14
- this.isEditActive$ = of(false);
15
- this.isNewActive$ = of(false);
16
- this.setCurrentEntity = jest.fn();
17
- this.clearCurrentEntity = jest.fn();
18
- this.saveNewEntity = jest.fn();
19
- this.updateExistingEntity = jest.fn();
20
- }
21
- }
22
- function createDataEntryMockFacade(
23
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
- mockFacade) {
25
- const localFacade = new DataEntryMockFacade();
26
- if (!mockFacade) {
27
- return localFacade;
28
- }
29
- mockFacade.loading$ = mockFacade.loading$ || localFacade.loading$;
30
- mockFacade.currentEntity$ =
31
- mockFacade.currentEntity$ || localFacade.currentEntity$;
32
- mockFacade.isEditActive$ =
33
- mockFacade.isEditActive$ || localFacade.isEditActive$;
34
- mockFacade.isNewActive$ = mockFacade.isNewActive$ || localFacade.isNewActive$;
35
- mockFacade.setCurrentEntity = mockFacade.setCurrentEntity || jest.fn();
36
- mockFacade.clearCurrentEntity = mockFacade.clearCurrentEntity || jest.fn();
37
- mockFacade.saveNewEntity = mockFacade.saveNewEntity || jest.fn();
38
- mockFacade.updateExistingEntity =
39
- mockFacade.updateExistingEntity || jest.fn();
40
- return mockFacade;
41
- }
42
-
43
- function testAddSetAndClearCurrentEntity(facade) {
44
- return __awaiter(this, void 0, void 0, function* () {
45
- const entity = { name: '🆕' };
46
- yield validateInitialState(facade);
47
- facade.setCurrentEntity(entity, { name: 'parentEntity' });
48
- let status = yield getEntityStatus(facade);
49
- expect(status.currentEntity).toStrictEqual(entity);
50
- expect(status.isEditActive).toBeFalsy();
51
- expect(status.isNewActive).toBeTruthy();
52
- facade.clearCurrentEntity();
53
- status = yield getEntityStatus(facade);
54
- expect(status.currentEntity).toBeFalsy();
55
- expect(status.isEditActive).toBeFalsy();
56
- expect(status.isNewActive).toBeFalsy();
57
- });
58
- }
59
- function testEditSetAndClearCurrentEntity(facade) {
60
- return __awaiter(this, void 0, void 0, function* () {
61
- const entity = { id: '💃', name: '🧓👴👵' };
62
- yield validateInitialState(facade);
63
- facade.setCurrentEntity(entity, { name: 'parentEntity' });
64
- let status = yield getEntityStatus(facade);
65
- expect(status.currentEntity).toStrictEqual(entity);
66
- expect(status.isEditActive).toBeTruthy();
67
- expect(status.isNewActive).toBeFalsy();
68
- facade.clearCurrentEntity();
69
- status = yield getEntityStatus(facade);
70
- expect(status.currentEntity).toBeFalsy();
71
- expect(status.isEditActive).toBeFalsy();
72
- expect(status.isNewActive).toBeFalsy();
73
- });
74
- }
75
- function validateInitialState(facade) {
76
- return __awaiter(this, void 0, void 0, function* () {
77
- const status = yield getEntityStatus(facade);
78
- expect(status.currentEntity).toBeFalsy();
79
- expect(status.isEditActive).toBeFalsy();
80
- expect(status.isNewActive).toBeFalsy();
81
- });
82
- }
83
- function getEntityStatus(facade) {
84
- return __awaiter(this, void 0, void 0, function* () {
85
- return {
86
- currentEntity: yield readFirst(facade.currentEntity$),
87
- isEditActive: yield readFirst(facade.isEditActive$),
88
- isNewActive: yield readFirst(facade.isNewActive$),
89
- };
90
- });
91
- }
92
-
93
- function testSaveCurrentEntity(facade, httpClient) {
94
- return __awaiter(this, void 0, void 0, function* () {
95
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
- const entity = { name: '🆕' };
97
- httpClient.post = jest.fn(() => of(entity));
98
- httpClient.put = jest.fn(() => of(entity));
99
- httpClient.delete = jest.fn(() => of(entity));
100
- facade.saveNewEntity(entity);
101
- expect(httpClient.post).toBeCalledTimes(1);
102
- expect(httpClient.put).toBeCalledTimes(0);
103
- expect(httpClient.delete).toBeCalledTimes(0);
104
- });
105
- }
106
- function testUpdateCurrentEntity(facade, httpClient) {
107
- return __awaiter(this, void 0, void 0, function* () {
108
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
- const entity = { id: '💃', name: '🧓👴👵' };
110
- httpClient.post = jest.fn(() => of(entity));
111
- httpClient.put = jest.fn(() => of(entity));
112
- httpClient.delete = jest.fn(() => of(entity));
113
- facade.updateExistingEntity(entity);
114
- expect(httpClient.put).toBeCalledTimes(1);
115
- expect(httpClient.post).toBeCalledTimes(0);
116
- expect(httpClient.delete).toBeCalledTimes(0);
117
- });
118
- }
119
-
120
- function testDeleteCurrentEntity(facade, httpClient) {
121
- return __awaiter(this, void 0, void 0, function* () {
122
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
123
- const entity = { id: '💃', name: '🧓👴👵' };
124
- httpClient.post = jest.fn();
125
- httpClient.put = jest.fn();
126
- httpClient.delete = jest.fn(() => of(entity));
127
- facade.deleteExistingEntity(entity);
128
- expect(httpClient.put).toBeCalledTimes(0);
129
- expect(httpClient.post).toBeCalledTimes(0);
130
- expect(httpClient.delete).toBeCalledTimes(1);
131
- });
132
- }
133
-
134
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
135
- class DataDeleteMockFacade {
136
- constructor() {
137
- this.deleteExistingEntity = jest.fn();
138
- }
139
- }
140
- // eslint-disable-next-line @typescript-eslint/ban-types,@typescript-eslint/no-explicit-any
141
- function createDataDeleteMockFacade(mockFacade) {
142
- const localFacade = new DataDeleteMockFacade();
143
- if (!mockFacade) {
144
- return localFacade;
145
- }
146
- mockFacade.deleteExistingEntity =
147
- mockFacade.deleteExistingEntity || jest.fn();
148
- return mockFacade;
149
- }
150
-
151
- function triggerSaveClickEvent(fixture) {
152
- const typeAhead = fixture.debugElement.query(By.css('#btnSave'));
153
- typeAhead.triggerEventHandler('click', {});
154
- }
155
- function triggerCancelClickEvent(fixture) {
156
- const typeAhead = fixture.debugElement.query(By.css('#btnCancel'));
157
- typeAhead.triggerEventHandler('click', {});
158
- }
159
-
160
- class MockDataEntryComponent extends BaseDataEntryComponent {
161
- constructor() {
162
- super(...arguments);
163
- this.dialogTitle = 'MockDataEntryComponent';
164
- this.addEditForm = new FormGroup({
165
- id: new FormControl(''),
166
- });
167
- this.props = {};
168
- this.initForm = jest.fn();
169
- this.save = () => jest.fn();
170
- }
171
- }
172
-
173
- /**
174
- * Generated bundle index. Do not edit.
175
- */
176
-
177
- export { DataDeleteMockFacade, DataEntryMockFacade, MockDataEntryComponent, createDataDeleteMockFacade, createDataEntryMockFacade, testAddSetAndClearCurrentEntity, testDeleteCurrentEntity, testEditSetAndClearCurrentEntity, testSaveCurrentEntity, testUpdateCurrentEntity, triggerCancelClickEvent, triggerSaveClickEvent };
178
- //# sourceMappingURL=imng-kendo-data-entry-testing.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"imng-kendo-data-entry-testing.mjs","sources":["../../../../libs/imng-kendo-data-entry/testing/src/data-entry-mock.facade.ts","../../../../libs/imng-kendo-data-entry/testing/src/data-entry-facade-tests.ts","../../../../libs/imng-kendo-data-entry/testing/src/data-entry-facade-http-tests.ts","../../../../libs/imng-kendo-data-entry/testing/src/data-delete-facade-http-tests.ts","../../../../libs/imng-kendo-data-entry/testing/src/data-delete-mock.facade.ts","../../../../libs/imng-kendo-data-entry/testing/src/test-trigger-event-helpers.ts","../../../../libs/imng-kendo-data-entry/testing/src/mock-data-entry-dialog.component.ts","../../../../libs/imng-kendo-data-entry/testing/src/imng-kendo-data-entry-testing.ts"],"sourcesContent":["import { Observable, of } from 'rxjs';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { IDataEntryFacade } from 'imng-kendo-data-entry';\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class DataEntryMockFacade implements IDataEntryFacade<unknown> {\n public loading$: Observable<boolean> = of(false);\n // eslint-disable-next-line @typescript-eslint/ban-types\n public currentEntity$: Observable<unknown> = of(null);\n public isEditActive$: Observable<boolean> = of(false);\n public isNewActive$: Observable<boolean> = of(false);\n public setCurrentEntity = jest.fn();\n public clearCurrentEntity = jest.fn();\n public saveNewEntity = jest.fn();\n public updateExistingEntity = jest.fn();\n}\n\nexport function createDataEntryMockFacade(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mockFacade?: IDataEntryFacade<unknown> | any,\n): IDataEntryFacade<unknown> {\n const localFacade = new DataEntryMockFacade();\n if (!mockFacade) {\n return localFacade;\n }\n mockFacade.loading$ = mockFacade.loading$ || localFacade.loading$;\n mockFacade.currentEntity$ =\n mockFacade.currentEntity$ || localFacade.currentEntity$;\n mockFacade.isEditActive$ =\n mockFacade.isEditActive$ || localFacade.isEditActive$;\n mockFacade.isNewActive$ = mockFacade.isNewActive$ || localFacade.isNewActive$;\n mockFacade.setCurrentEntity = mockFacade.setCurrentEntity || jest.fn();\n mockFacade.clearCurrentEntity = mockFacade.clearCurrentEntity || jest.fn();\n mockFacade.saveNewEntity = mockFacade.saveNewEntity || jest.fn();\n mockFacade.updateExistingEntity =\n mockFacade.updateExistingEntity || jest.fn();\n return mockFacade;\n}\n","import { readFirst } from 'imng-ngrx-utils/testing';\nimport { Observable } from 'rxjs';\n\nexport async function testAddSetAndClearCurrentEntity<\n TFacade extends TestableFacade\n>(facade: TFacade): Promise<void> {\n const entity = { name: '🆕' };\n await validateInitialState(facade);\n\n facade.setCurrentEntity(entity, { name: 'parentEntity' });\n let status = await getEntityStatus(facade);\n expect(status.currentEntity).toStrictEqual(entity);\n expect(status.isEditActive).toBeFalsy();\n expect(status.isNewActive).toBeTruthy();\n\n facade.clearCurrentEntity();\n status = await getEntityStatus(facade);\n expect(status.currentEntity).toBeFalsy();\n expect(status.isEditActive).toBeFalsy();\n expect(status.isNewActive).toBeFalsy();\n}\n\nexport async function testEditSetAndClearCurrentEntity<\n TFacade extends TestableFacade\n>(facade: TFacade): Promise<void> {\n const entity = { id: '💃', name: '🧓👴👵' };\n await validateInitialState(facade);\n\n facade.setCurrentEntity(entity, { name: 'parentEntity' });\n let status = await getEntityStatus(facade);\n expect(status.currentEntity).toStrictEqual(entity);\n expect(status.isEditActive).toBeTruthy();\n expect(status.isNewActive).toBeFalsy();\n\n facade.clearCurrentEntity();\n status = await getEntityStatus(facade);\n expect(status.currentEntity).toBeFalsy();\n expect(status.isEditActive).toBeFalsy();\n expect(status.isNewActive).toBeFalsy();\n}\nasync function validateInitialState(facade: TestableFacade): Promise<void> {\n const status = await getEntityStatus(facade);\n expect(status.currentEntity).toBeFalsy();\n expect(status.isEditActive).toBeFalsy();\n expect(status.isNewActive).toBeFalsy();\n}\n\nasync function getEntityStatus<TFacade extends TestableFacade>(\n facade: TFacade\n): Promise<{\n currentEntity: unknown;\n isEditActive: unknown;\n isNewActive: unknown;\n}> {\n return {\n currentEntity: await readFirst(facade.currentEntity$),\n isEditActive: await readFirst(facade.isEditActive$),\n isNewActive: await readFirst(facade.isNewActive$),\n };\n}\n\nexport interface TestableFacade {\n currentEntity$: Observable<unknown>;\n isEditActive$: Observable<boolean | null>;\n isNewActive$: Observable<boolean | null>;\n setCurrentEntity(entity: unknown, parentEntity?: unknown): void;\n clearCurrentEntity(): void;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { of } from 'rxjs';\n\nexport async function testSaveCurrentEntity<TFacade extends { saveNewEntity(entity: unknown): void; }>(\n facade: TFacade,\n httpClient: HttpClient,\n): Promise<void> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const entity: any = { name: '🆕' };\n httpClient.post = jest.fn(() => of(entity));\n httpClient.put = jest.fn(() => of(entity));\n httpClient.delete = jest.fn(() => of(entity));\n\n facade.saveNewEntity(entity);\n expect(httpClient.post).toBeCalledTimes(1);\n expect(httpClient.put).toBeCalledTimes(0);\n expect(httpClient.delete).toBeCalledTimes(0);\n}\n\nexport async function testUpdateCurrentEntity<TFacade extends { updateExistingEntity(entity: unknown): void; }>(\n facade: TFacade,\n httpClient: HttpClient,\n): Promise<void> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const entity: any = { id: '💃', name: '🧓👴👵' };\n\n httpClient.post = jest.fn(() => of(entity));\n httpClient.put = jest.fn(() => of(entity));\n httpClient.delete = jest.fn(() => of(entity));\n\n facade.updateExistingEntity(entity);\n expect(httpClient.put).toBeCalledTimes(1);\n expect(httpClient.post).toBeCalledTimes(0);\n expect(httpClient.delete).toBeCalledTimes(0);\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { of } from 'rxjs';\n\nexport async function testDeleteCurrentEntity<TFacade extends { deleteExistingEntity(entity: unknown): void; }>(\n facade: TFacade,\n httpClient: HttpClient,\n): Promise<void> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const entity: any = { id: '💃', name: '🧓👴👵' };\n\n httpClient.post = jest.fn();\n httpClient.put = jest.fn();\n httpClient.delete = jest.fn(() => of(entity));\n\n facade.deleteExistingEntity(entity);\n expect(httpClient.put).toBeCalledTimes(0);\n expect(httpClient.post).toBeCalledTimes(0);\n expect(httpClient.delete).toBeCalledTimes(1);\n\n}\n","// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { IDataDeleteFacade } from 'imng-kendo-data-entry';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class DataDeleteMockFacade implements IDataDeleteFacade<any> {\n deleteExistingEntity = jest.fn();\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types,@typescript-eslint/no-explicit-any\nexport function createDataDeleteMockFacade(\n mockFacade?: IDataDeleteFacade<object> | any,\n): IDataDeleteFacade<object> {\n const localFacade = new DataDeleteMockFacade();\n if (!mockFacade) {\n return localFacade;\n }\n mockFacade.deleteExistingEntity =\n mockFacade.deleteExistingEntity || jest.fn();\n return mockFacade;\n}\n","import { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\n\nexport function triggerSaveClickEvent<TComponent>(fixture: ComponentFixture<TComponent>): void {\n const typeAhead = fixture.debugElement.query(By.css('#btnSave'));\n typeAhead.triggerEventHandler('click', {});\n}\nexport function triggerCancelClickEvent<TComponent>(fixture: ComponentFixture<TComponent>): void {\n const typeAhead = fixture.debugElement.query(By.css('#btnCancel'));\n typeAhead.triggerEventHandler('click', {});\n}\n","import { FormControl, FormGroup } from '@angular/forms';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { BaseDataEntryComponent } from 'imng-kendo-data-entry';\nimport { DataEntryMockFacade } from './data-entry-mock.facade';\n\nexport class MockDataEntryComponent extends BaseDataEntryComponent<DataEntryMockFacade> {\n public dialogTitle = 'MockDataEntryComponent';\n public override addEditForm = new FormGroup({\n id: new FormControl<string>(''),\n });\n public props = {};\n public initForm = jest.fn();\n public save = () => jest.fn();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}