imng-kendo-data-entry 6.140.2 → 6.140.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.
- package/esm2022/lib/base-data-entry.component.mjs +114 -0
- package/esm2022/lib/data-entry-dialog.component.mjs +127 -0
- package/esm2022/lib/dialog-buttons.directive.mjs +15 -0
- package/esm2022/lib/imng-kendo-data-entry.module.mjs +21 -0
- package/{fesm2020 → fesm2022}/imng-kendo-data-entry.mjs +17 -17
- package/{fesm2020 → fesm2022}/imng-kendo-data-entry.mjs.map +1 -1
- package/lib/base-data-entry.component.d.ts +1 -1
- package/lib/data-entry-dialog.component.d.ts +1 -1
- package/package.json +14 -22
- package/esm2020/lib/base-data-entry.component.mjs +0 -113
- package/esm2020/lib/data-entry-dialog.component.mjs +0 -126
- package/esm2020/lib/dialog-buttons.directive.mjs +0 -14
- package/esm2020/lib/imng-kendo-data-entry.module.mjs +0 -20
- package/fesm2015/imng-kendo-data-entry-testing.mjs +0 -178
- package/fesm2015/imng-kendo-data-entry-testing.mjs.map +0 -1
- package/fesm2015/imng-kendo-data-entry.mjs +0 -304
- package/fesm2015/imng-kendo-data-entry.mjs.map +0 -1
- /package/{esm2020 → esm2022}/imng-kendo-data-entry.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-delete-facade.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-entry-facade.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/form-group-patcher.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/reducer-collection-logic.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/data-delete-facade-http-tests.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/data-delete-mock.facade.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/data-entry-facade-http-tests.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/data-entry-facade-tests.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/data-entry-mock.facade.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/imng-kendo-data-entry-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/mock-data-entry-dialog.component.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/test-trigger-event-helpers.mjs +0 -0
- /package/{fesm2020 → fesm2022}/imng-kendo-data-entry-testing.mjs +0 -0
- /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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"}
|