ng-tailwind 5.2.4 → 5.2.6
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/README.md +24 -24
- package/animations/ngt-angular-animations.d.ts +5 -5
- package/base/ngt-base-ng-model.d.ts +32 -32
- package/components/ngt-action/ngt-action.component.d.ts +30 -30
- package/components/ngt-action/ngt-action.module.d.ts +10 -10
- package/components/ngt-button/ngt-button.component.d.ts +35 -35
- package/components/ngt-button/ngt-button.module.d.ts +10 -10
- package/components/ngt-checkbox/ngt-checkbox.component.d.ts +53 -53
- package/components/ngt-checkbox/ngt-checkbox.module.d.ts +10 -10
- package/components/ngt-content/ngt-content.component.d.ts +12 -12
- package/components/ngt-content/ngt-content.module.d.ts +8 -8
- package/components/ngt-context-menu/ngt-context-menu.component.d.ts +20 -20
- package/components/ngt-context-menu/ngt-context-menu.directive.d.ts +25 -25
- package/components/ngt-context-menu/ngt-context-menu.module.d.ts +10 -10
- package/components/ngt-datatable/ngt-datatable.component.d.ts +125 -125
- package/components/ngt-datatable/ngt-datatable.module.d.ts +25 -25
- package/components/ngt-datatable/ngt-tbody/ngt-tbody.component.d.ts +14 -14
- package/components/ngt-datatable/ngt-td/ngt-td.component.d.ts +14 -14
- package/components/ngt-datatable/ngt-td-check/ngt-td-check.component.d.ts +29 -29
- package/components/ngt-datatable/ngt-th/ngt-th.component.d.ts +55 -55
- package/components/ngt-datatable/ngt-th-check/ngt-th-check.component.d.ts +32 -32
- package/components/ngt-datatable/ngt-thead/ngt-thead.component.d.ts +13 -13
- package/components/ngt-datatable/ngt-tr/ngt-tr.component.d.ts +20 -20
- package/components/ngt-date/ngt-date.component.d.ts +85 -85
- package/components/ngt-date/ngt-date.module.d.ts +13 -13
- package/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.d.ts +8 -8
- package/components/ngt-dropdown/ngt-dropdown.component.d.ts +53 -53
- package/components/ngt-dropdown/ngt-dropdown.module.d.ts +9 -9
- package/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.d.ts +14 -14
- package/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.d.ts +25 -25
- package/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.d.ts +35 -35
- package/components/ngt-dropzone/ngt-dropzone.component.d.ts +95 -95
- package/components/ngt-dropzone/ngt-dropzone.meta.d.ts +27 -27
- package/components/ngt-dropzone/ngt-dropzone.module.d.ts +17 -17
- package/components/ngt-floating-button/ngt-floating-button.component.d.ts +35 -35
- package/components/ngt-floating-button/ngt-floating-button.module.d.ts +10 -10
- package/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.d.ts +10 -10
- package/components/ngt-form/ngt-form.component.d.ts +60 -60
- package/components/ngt-form/ngt-form.module.d.ts +9 -9
- package/components/ngt-header-nav/ngt-header-nav.component.d.ts +14 -14
- package/components/ngt-header-nav/ngt-header-nav.module.d.ts +8 -8
- package/components/ngt-helper/ngt-helper.component.d.ts +25 -25
- package/components/ngt-helper/ngt-helper.module.d.ts +10 -10
- package/components/ngt-input/ngt-input.component.d.ts +129 -129
- package/components/ngt-input/ngt-input.module.d.ts +14 -14
- package/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.d.ts +17 -17
- package/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.d.ts +12 -12
- package/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.d.ts +15 -15
- package/components/ngt-modal/ngt-modal.component.d.ts +31 -31
- package/components/ngt-modal/ngt-modal.module.d.ts +11 -11
- package/components/ngt-multi-select/ngt-multi-select.component.d.ts +116 -116
- package/components/ngt-multi-select/ngt-multi-select.module.d.ts +15 -15
- package/components/ngt-pagination/ngt-pagination.component.d.ts +43 -43
- package/components/ngt-pagination/ngt-pagination.module.d.ts +12 -12
- package/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.d.ts +21 -21
- package/components/ngt-popover/ngt-popover.component.d.ts +31 -31
- package/components/ngt-popover/ngt-popover.directive.d.ts +31 -31
- package/components/ngt-popover/ngt-popover.module.d.ts +11 -11
- package/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.d.ts +12 -12
- package/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.d.ts +12 -12
- package/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.d.ts +18 -18
- package/components/ngt-portlet/ngt-portlet.component.d.ts +20 -20
- package/components/ngt-portlet/ngt-portlet.module.d.ts +13 -13
- package/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.d.ts +9 -9
- package/components/ngt-radio-button/ngt-radio-button.component.d.ts +45 -45
- package/components/ngt-radio-button/ngt-radio-button.module.d.ts +11 -11
- package/components/ngt-section/ngt-section.component.d.ts +38 -38
- package/components/ngt-section/ngt-section.module.d.ts +11 -11
- package/components/ngt-select/ngt-select.component.d.ts +154 -154
- package/components/ngt-select/ngt-select.directive.d.ts +20 -20
- package/components/ngt-select/ngt-select.module.d.ts +16 -16
- package/components/ngt-shining/ngt-shining.component.d.ts +19 -19
- package/components/ngt-shining/ngt-shining.module.d.ts +8 -8
- package/components/ngt-sidenav/ngt-sidenav.component.d.ts +32 -32
- package/components/ngt-sidenav/ngt-sidenav.module.d.ts +8 -8
- package/components/ngt-slider/ngt-slider.component.d.ts +36 -36
- package/components/ngt-slider/ngt-slider.module.d.ts +9 -9
- package/components/ngt-svg/ngt-svg.component.d.ts +13 -13
- package/components/ngt-svg/ngt-svg.module.d.ts +10 -10
- package/components/ngt-tag/ngt-tag.component.d.ts +13 -13
- package/components/ngt-tag/ngt-tag.module.d.ts +9 -9
- package/components/ngt-textarea/ngt-textarea.component.d.ts +49 -49
- package/components/ngt-textarea/ngt-textarea.module.d.ts +13 -13
- package/components/ngt-validation/ngt-validation.component.d.ts +13 -13
- package/components/ngt-validation/ngt-validation.module.d.ts +8 -8
- package/directives/ngt-stylizable/ngt-stylizable.directive.d.ts +70 -68
- package/directives/ngt-stylizable/ngt-stylizable.module.d.ts +8 -8
- package/enums/size.enum.d.ts +8 -8
- package/esm2020/animations/ngt-angular-animations.mjs +34 -34
- package/esm2020/base/ngt-base-ng-model.mjs +90 -90
- package/esm2020/components/ngt-action/ngt-action.component.mjs +96 -96
- package/esm2020/components/ngt-action/ngt-action.module.mjs +28 -28
- package/esm2020/components/ngt-button/ngt-button.component.mjs +142 -142
- package/esm2020/components/ngt-button/ngt-button.module.mjs +28 -28
- package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +192 -192
- package/esm2020/components/ngt-checkbox/ngt-checkbox.module.mjs +28 -28
- package/esm2020/components/ngt-content/ngt-content.component.mjs +32 -32
- package/esm2020/components/ngt-content/ngt-content.module.mjs +20 -20
- package/esm2020/components/ngt-context-menu/ngt-context-menu.component.mjs +25 -25
- package/esm2020/components/ngt-context-menu/ngt-context-menu.directive.mjs +89 -89
- package/esm2020/components/ngt-context-menu/ngt-context-menu.module.mjs +33 -33
- package/esm2020/components/ngt-datatable/ngt-datatable.component.mjs +470 -470
- package/esm2020/components/ngt-datatable/ngt-datatable.module.mjs +99 -99
- package/esm2020/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +57 -57
- package/esm2020/components/ngt-datatable/ngt-td/ngt-td.component.mjs +62 -62
- package/esm2020/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +113 -113
- package/esm2020/components/ngt-datatable/ngt-th/ngt-th.component.mjs +228 -228
- package/esm2020/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +127 -127
- package/esm2020/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +55 -55
- package/esm2020/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +86 -86
- package/esm2020/components/ngt-date/ngt-date.component.mjs +435 -435
- package/esm2020/components/ngt-date/ngt-date.module.mjs +40 -40
- package/esm2020/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +19 -19
- package/esm2020/components/ngt-dropdown/ngt-dropdown.component.mjs +204 -204
- package/esm2020/components/ngt-dropdown/ngt-dropdown.module.mjs +21 -21
- package/esm2020/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +54 -54
- package/esm2020/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +66 -66
- package/esm2020/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +94 -94
- package/esm2020/components/ngt-dropzone/ngt-dropzone.component.mjs +496 -496
- package/esm2020/components/ngt-dropzone/ngt-dropzone.meta.mjs +24 -24
- package/esm2020/components/ngt-dropzone/ngt-dropzone.module.mjs +55 -55
- package/esm2020/components/ngt-floating-button/ngt-floating-button.component.mjs +119 -119
- package/esm2020/components/ngt-floating-button/ngt-floating-button.module.mjs +28 -28
- package/esm2020/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +22 -22
- package/esm2020/components/ngt-form/ngt-form.component.mjs +207 -207
- package/esm2020/components/ngt-form/ngt-form.module.mjs +29 -29
- package/esm2020/components/ngt-header-nav/ngt-header-nav.component.mjs +39 -39
- package/esm2020/components/ngt-header-nav/ngt-header-nav.module.mjs +20 -20
- package/esm2020/components/ngt-helper/ngt-helper.component.mjs +69 -68
- package/esm2020/components/ngt-helper/ngt-helper.module.mjs +28 -28
- package/esm2020/components/ngt-input/ngt-input.component.mjs +844 -844
- package/esm2020/components/ngt-input/ngt-input.module.mjs +47 -47
- package/esm2020/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +46 -46
- package/esm2020/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +33 -33
- package/esm2020/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +40 -40
- package/esm2020/components/ngt-modal/ngt-modal.component.mjs +122 -122
- package/esm2020/components/ngt-modal/ngt-modal.module.mjs +39 -39
- package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +503 -503
- package/esm2020/components/ngt-multi-select/ngt-multi-select.module.mjs +52 -52
- package/esm2020/components/ngt-pagination/ngt-pagination.component.mjs +162 -162
- package/esm2020/components/ngt-pagination/ngt-pagination.module.mjs +36 -36
- package/esm2020/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +58 -58
- package/esm2020/components/ngt-popover/ngt-popover.component.mjs +85 -85
- package/esm2020/components/ngt-popover/ngt-popover.directive.mjs +126 -126
- package/esm2020/components/ngt-popover/ngt-popover.module.mjs +36 -36
- package/esm2020/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +34 -34
- package/esm2020/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +35 -35
- package/esm2020/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +57 -57
- package/esm2020/components/ngt-portlet/ngt-portlet.component.mjs +74 -74
- package/esm2020/components/ngt-portlet/ngt-portlet.module.mjs +47 -47
- package/esm2020/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +19 -19
- package/esm2020/components/ngt-radio-button/ngt-radio-button.component.mjs +153 -153
- package/esm2020/components/ngt-radio-button/ngt-radio-button.module.mjs +29 -29
- package/esm2020/components/ngt-section/ngt-section.component.mjs +151 -151
- package/esm2020/components/ngt-section/ngt-section.module.mjs +32 -32
- package/esm2020/components/ngt-select/ngt-select.component.mjs +670 -670
- package/esm2020/components/ngt-select/ngt-select.directive.mjs +36 -36
- package/esm2020/components/ngt-select/ngt-select.module.mjs +65 -65
- package/esm2020/components/ngt-shining/ngt-shining.component.mjs +40 -40
- package/esm2020/components/ngt-shining/ngt-shining.module.mjs +20 -20
- package/esm2020/components/ngt-sidenav/ngt-sidenav.component.mjs +132 -132
- package/esm2020/components/ngt-sidenav/ngt-sidenav.module.mjs +20 -20
- package/esm2020/components/ngt-slider/ngt-slider.component.mjs +100 -100
- package/esm2020/components/ngt-slider/ngt-slider.module.mjs +24 -24
- package/esm2020/components/ngt-svg/ngt-svg.component.mjs +53 -53
- package/esm2020/components/ngt-svg/ngt-svg.module.mjs +28 -28
- package/esm2020/components/ngt-tag/ngt-tag.component.mjs +37 -37
- package/esm2020/components/ngt-tag/ngt-tag.module.mjs +24 -24
- package/esm2020/components/ngt-textarea/ngt-textarea.component.mjs +238 -238
- package/esm2020/components/ngt-textarea/ngt-textarea.module.mjs +43 -43
- package/esm2020/components/ngt-validation/ngt-validation.component.mjs +26 -26
- package/esm2020/components/ngt-validation/ngt-validation.module.mjs +20 -20
- package/esm2020/directives/ngt-stylizable/ngt-stylizable.directive.mjs +299 -290
- package/esm2020/directives/ngt-stylizable/ngt-stylizable.module.mjs +20 -20
- package/esm2020/enums/size.enum.mjs +11 -11
- package/esm2020/helpers/enum/enum.mjs +7 -7
- package/esm2020/helpers/form/form.mjs +14 -14
- package/esm2020/helpers/input-mask/input-mask.helper.mjs +26 -26
- package/esm2020/helpers/promise/promise-helper.mjs +4 -4
- package/esm2020/helpers/routing/route.mjs +11 -11
- package/esm2020/helpers/uuid.mjs +10 -10
- package/esm2020/ng-tailwind.mjs +4 -4
- package/esm2020/public-api.mjs +127 -127
- package/esm2020/services/http/ngt-attachment-http.service.mjs +3 -3
- package/esm2020/services/http/ngt-http-form.service.mjs +3 -3
- package/esm2020/services/http/ngt-http-resource.service.mjs +3 -3
- package/esm2020/services/http/ngt-http-validation.service.mjs +3 -3
- package/esm2020/services/http/ngt-http.service.mjs +3 -3
- package/esm2020/services/http/ngt-translate.service.mjs +3 -3
- package/esm2020/services/ngt-stylizable/ngt-stylizable.service.mjs +279 -273
- package/esm2020/services/validation/ngt-ability-validation.service.mjs +3 -3
- package/fesm2015/ng-tailwind.mjs +8669 -8653
- package/fesm2015/ng-tailwind.mjs.map +1 -1
- package/fesm2020/ng-tailwind.mjs +8494 -8478
- package/fesm2020/ng-tailwind.mjs.map +1 -1
- package/helpers/enum/enum.d.ts +1 -1
- package/helpers/form/form.d.ts +4 -4
- package/helpers/input-mask/input-mask.helper.d.ts +20 -20
- package/helpers/promise/promise-helper.d.ts +1 -1
- package/helpers/routing/route.d.ts +2 -2
- package/helpers/uuid.d.ts +1 -1
- package/index.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +87 -87
- package/services/http/ngt-attachment-http.service.d.ts +9 -9
- package/services/http/ngt-http-form.service.d.ts +5 -5
- package/services/http/ngt-http-resource.service.d.ts +12 -12
- package/services/http/ngt-http-validation.service.d.ts +12 -12
- package/services/http/ngt-http.service.d.ts +27 -27
- package/services/http/ngt-translate.service.d.ts +33 -33
- package/services/ngt-stylizable/ngt-stylizable.service.d.ts +99 -96
- package/services/validation/ngt-ability-validation.service.d.ts +5 -5
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { Component, Input, Optional } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../../../services/http/ngt-translate.service";
|
|
4
|
-
import * as i2 from "@angular/common";
|
|
5
|
-
export class NgtFormValidationMessageComponent {
|
|
6
|
-
constructor(ngtTranslateService) {
|
|
7
|
-
this.ngtTranslateService = ngtTranslateService;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
NgtFormValidationMessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormValidationMessageComponent, deps: [{ token: i1.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
11
|
-
NgtFormValidationMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtFormValidationMessageComponent, selector: "ngt-form-validation-message", inputs: { canShowValidationMessage: "canShowValidationMessage", message: "message" }, ngImport: i0, template: "<div *ngIf=\"canShowValidationMessage\" class=\"mb-5 p-2 rounded bg-red-500 text-white text-xs\">\
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormValidationMessageComponent, decorators: [{
|
|
13
|
-
type: Component,
|
|
14
|
-
args: [{ selector: 'ngt-form-validation-message', template: "<div *ngIf=\"canShowValidationMessage\" class=\"mb-5 p-2 rounded bg-red-500 text-white text-xs\">\
|
|
15
|
-
}], ctorParameters: function () { return [{ type: i1.NgtTranslateService, decorators: [{
|
|
16
|
-
type: Optional
|
|
17
|
-
}] }]; }, propDecorators: { canShowValidationMessage: [{
|
|
18
|
-
type: Input
|
|
19
|
-
}], message: [{
|
|
20
|
-
type: Input
|
|
21
|
-
}] } });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Component, Input, Optional } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../../services/http/ngt-translate.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class NgtFormValidationMessageComponent {
|
|
6
|
+
constructor(ngtTranslateService) {
|
|
7
|
+
this.ngtTranslateService = ngtTranslateService;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
NgtFormValidationMessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormValidationMessageComponent, deps: [{ token: i1.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
11
|
+
NgtFormValidationMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtFormValidationMessageComponent, selector: "ngt-form-validation-message", inputs: { canShowValidationMessage: "canShowValidationMessage", message: "message" }, ngImport: i0, template: "<div *ngIf=\"canShowValidationMessage\" class=\"mb-5 p-2 rounded bg-red-500 text-white text-xs\">\n {{ message || ngtTranslateService.ngtFormDefaultValidationMessage }}\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormValidationMessageComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{ selector: 'ngt-form-validation-message', template: "<div *ngIf=\"canShowValidationMessage\" class=\"mb-5 p-2 rounded bg-red-500 text-white text-xs\">\n {{ message || ngtTranslateService.ngtFormDefaultValidationMessage }}\n</div>\n" }]
|
|
15
|
+
}], ctorParameters: function () { return [{ type: i1.NgtTranslateService, decorators: [{
|
|
16
|
+
type: Optional
|
|
17
|
+
}] }]; }, propDecorators: { canShowValidationMessage: [{
|
|
18
|
+
type: Input
|
|
19
|
+
}], message: [{
|
|
20
|
+
type: Input
|
|
21
|
+
}] } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1mb3JtL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS9uZ3QtZm9ybS12YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRM0QsTUFBTSxPQUFPLGlDQUFpQztJQUkxQyxZQUVXLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQy9DLENBQUM7OzhIQVBJLGlDQUFpQztrSEFBakMsaUNBQWlDLHlKQ1I5Qyx1TEFHQTsyRkRLYSxpQ0FBaUM7a0JBSjdDLFNBQVM7K0JBQ0ksNkJBQTZCOzswQkFRbEMsUUFBUTs0Q0FKRyx3QkFBd0I7c0JBQXZDLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5ndFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwL25ndC10cmFuc2xhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Rm9ybVZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FuU2hvd1ZhbGlkYXRpb25NZXNzYWdlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7IH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJjYW5TaG93VmFsaWRhdGlvbk1lc3NhZ2VcIiBjbGFzcz1cIm1iLTUgcC0yIHJvdW5kZWQgYmctcmVkLTUwMCB0ZXh0LXdoaXRlIHRleHQteHNcIj5cbiAgICB7eyBtZXNzYWdlIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0Rm9ybURlZmF1bHRWYWxpZGF0aW9uTWVzc2FnZSB9fVxuPC9kaXY+XG4iXX0=
|
|
@@ -1,207 +1,207 @@
|
|
|
1
|
-
import { Component, EventEmitter, Host, Input, Optional, Output, } from '@angular/core';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
import { isValidNgForm } from '../../helpers/form/form';
|
|
4
|
-
import { getIdFromUri } from '../../helpers/routing/route';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/router";
|
|
7
|
-
import * as i2 from "@angular/forms";
|
|
8
|
-
import * as i3 from "../../services/http/ngt-http-form.service";
|
|
9
|
-
import * as i4 from "../../services/validation/ngt-ability-validation.service";
|
|
10
|
-
import * as i5 from "@angular/common";
|
|
11
|
-
import * as i6 from "./ngt-form-validation-message/ngt-form-validation-message.component";
|
|
12
|
-
;
|
|
13
|
-
export class NgtFormComponent {
|
|
14
|
-
constructor(router, route, formContainer, ngForm, changeDetector, ngtHttpFormService, ngtAbilityValidationService) {
|
|
15
|
-
this.router = router;
|
|
16
|
-
this.route = route;
|
|
17
|
-
this.formContainer = formContainer;
|
|
18
|
-
this.ngForm = ngForm;
|
|
19
|
-
this.changeDetector = changeDetector;
|
|
20
|
-
this.ngtHttpFormService = ngtHttpFormService;
|
|
21
|
-
this.ngtAbilityValidationService = ngtAbilityValidationService;
|
|
22
|
-
this.guessFormState = true;
|
|
23
|
-
this.message = '';
|
|
24
|
-
this.routeIdentifier = 'id';
|
|
25
|
-
this.onCreating = new EventEmitter;
|
|
26
|
-
this.onEditing = new EventEmitter;
|
|
27
|
-
this.onLoadingChange = new EventEmitter;
|
|
28
|
-
this.onShiningChange = new EventEmitter;
|
|
29
|
-
this.setupComponent = new EventEmitter;
|
|
30
|
-
this.onResourceLoadingError = new EventEmitter;
|
|
31
|
-
this.subscriptions = [];
|
|
32
|
-
}
|
|
33
|
-
ngOnInit() {
|
|
34
|
-
if (this.guessFormState) {
|
|
35
|
-
this.subscriptions.push(this.determineFormState().subscribe(() => {
|
|
36
|
-
this.setupComponent.emit();
|
|
37
|
-
}));
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
this.setupComponent.emit();
|
|
41
|
-
}
|
|
42
|
-
this.subscriptions.push(this.ngForm.ngSubmit.subscribe(() => {
|
|
43
|
-
if (!this.ngForm.valid) {
|
|
44
|
-
NgtFormComponent.onSubmitInvalidForm.emit(this.ngForm);
|
|
45
|
-
}
|
|
46
|
-
}));
|
|
47
|
-
}
|
|
48
|
-
async ngAfterViewInit() {
|
|
49
|
-
if (this.isDisabled === undefined && this.ngtAbilityValidationService) {
|
|
50
|
-
this.isDisabled = !(await this.ngtAbilityValidationService.hasManagePermission());
|
|
51
|
-
this.changeDetector.detectChanges();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
ngOnDestroy() {
|
|
55
|
-
this.destroySubscriptions();
|
|
56
|
-
}
|
|
57
|
-
isCreating() {
|
|
58
|
-
return this.formState === NgtFormState.CREATING;
|
|
59
|
-
}
|
|
60
|
-
isEditing() {
|
|
61
|
-
return this.formState === NgtFormState.EDITING;
|
|
62
|
-
}
|
|
63
|
-
isLoading() {
|
|
64
|
-
return this.loading;
|
|
65
|
-
}
|
|
66
|
-
isShining() {
|
|
67
|
-
return this.shining;
|
|
68
|
-
}
|
|
69
|
-
canShowValidationMessage() {
|
|
70
|
-
return this.formContainer &&
|
|
71
|
-
this.formContainer['submitted'] &&
|
|
72
|
-
this.formContainer.status != 'VALID' &&
|
|
73
|
-
this.formContainer.status != 'DISABLED';
|
|
74
|
-
}
|
|
75
|
-
setShining(shining) {
|
|
76
|
-
this.shining = shining;
|
|
77
|
-
this.onShiningChange.emit(this.shining);
|
|
78
|
-
}
|
|
79
|
-
setLoading(loading) {
|
|
80
|
-
this.loading = loading;
|
|
81
|
-
this.onLoadingChange.emit(this.loading);
|
|
82
|
-
}
|
|
83
|
-
setFormState(state, triggerChange = true) {
|
|
84
|
-
this.formState = state;
|
|
85
|
-
if (triggerChange) {
|
|
86
|
-
this.triggerFormStateChange();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
getFormState() {
|
|
90
|
-
return this.formState;
|
|
91
|
-
}
|
|
92
|
-
triggerFormStateChange() {
|
|
93
|
-
if (this.isEditing()) {
|
|
94
|
-
this.triggerFormEditing();
|
|
95
|
-
}
|
|
96
|
-
else if (this.isCreating()) {
|
|
97
|
-
this.triggerFormCreating();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
formHasChanges() {
|
|
101
|
-
return this.ngForm.dirty;
|
|
102
|
-
}
|
|
103
|
-
saveResource() {
|
|
104
|
-
return new Observable((observer) => {
|
|
105
|
-
if (isValidNgForm(this.ngForm)) {
|
|
106
|
-
this.setLoading(true);
|
|
107
|
-
this.subscriptions.push(this.ngtHttpFormService.saveResource(this.resource)
|
|
108
|
-
.subscribe((response) => {
|
|
109
|
-
this.setLoading(false);
|
|
110
|
-
observer.next(response);
|
|
111
|
-
observer.complete();
|
|
112
|
-
}));
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
observer.error();
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
triggerFormCreating() {
|
|
120
|
-
this.onCreating.emit();
|
|
121
|
-
}
|
|
122
|
-
triggerFormEditing() {
|
|
123
|
-
if (this.uriId && this.resource) {
|
|
124
|
-
this.setLoading(true);
|
|
125
|
-
this.setShining(true);
|
|
126
|
-
this.subscriptions.push(this.ngtHttpFormService.loadResourceById(this.resource, this.uriId)
|
|
127
|
-
.subscribe((resource) => {
|
|
128
|
-
this.setLoading(false);
|
|
129
|
-
this.setShining(false);
|
|
130
|
-
this.onEditing.emit(resource);
|
|
131
|
-
setTimeout(() => this.ngForm.form.markAsPristine(), 1500);
|
|
132
|
-
}, (error) => {
|
|
133
|
-
this.setLoading(false);
|
|
134
|
-
this.setShining(false);
|
|
135
|
-
this.onResourceLoadingError.emit(error);
|
|
136
|
-
}));
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
this.onEditing.emit(null);
|
|
140
|
-
}
|
|
141
|
-
determineFormState() {
|
|
142
|
-
return new Observable((observer) => {
|
|
143
|
-
this.subscriptions.push(getIdFromUri(this.route, this.routeIdentifier).subscribe((id) => {
|
|
144
|
-
this.uriId = id;
|
|
145
|
-
if (this.uriId) {
|
|
146
|
-
this.setFormState(NgtFormState.EDITING);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
this.setFormState(NgtFormState.CREATING);
|
|
150
|
-
}
|
|
151
|
-
observer.next();
|
|
152
|
-
}));
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
destroySubscriptions() {
|
|
156
|
-
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
157
|
-
this.subscriptions = [];
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
NgtFormComponent.onSubmitInvalidForm = new EventEmitter;
|
|
161
|
-
NgtFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ControlContainer, host: true, optional: true }, { token: i2.NgForm, host: true, optional: true }, { token: i0.ChangeDetectorRef }, { token: i3.NgtHttpFormService }, { token: i4.NgtAbilityValidationService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
162
|
-
NgtFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtFormComponent, selector: "ngt-form", inputs: { guessFormState: "guessFormState", message: "message", routeIdentifier: "routeIdentifier", resource: "resource", customLayout: "customLayout", isDisabled: "isDisabled" }, outputs: { onCreating: "onCreating", onEditing: "onEditing", onLoadingChange: "onLoadingChange", onShiningChange: "onShiningChange", setupComponent: "setupComponent", onResourceLoadingError: "onResourceLoadingError" }, ngImport: i0, template: "<ngt-form-validation-message *ngIf='!customLayout' [canShowValidationMessage]=\"canShowValidationMessage()\"\
|
|
163
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormComponent, decorators: [{
|
|
164
|
-
type: Component,
|
|
165
|
-
args: [{ selector: 'ngt-form', template: "<ngt-form-validation-message *ngIf='!customLayout' [canShowValidationMessage]=\"canShowValidationMessage()\"\
|
|
166
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ControlContainer, decorators: [{
|
|
167
|
-
type: Optional
|
|
168
|
-
}, {
|
|
169
|
-
type: Host
|
|
170
|
-
}] }, { type: i2.NgForm, decorators: [{
|
|
171
|
-
type: Optional
|
|
172
|
-
}, {
|
|
173
|
-
type: Host
|
|
174
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i3.NgtHttpFormService }, { type: i4.NgtAbilityValidationService, decorators: [{
|
|
175
|
-
type: Optional
|
|
176
|
-
}] }]; }, propDecorators: { guessFormState: [{
|
|
177
|
-
type: Input
|
|
178
|
-
}], message: [{
|
|
179
|
-
type: Input
|
|
180
|
-
}], routeIdentifier: [{
|
|
181
|
-
type: Input
|
|
182
|
-
}], resource: [{
|
|
183
|
-
type: Input
|
|
184
|
-
}], customLayout: [{
|
|
185
|
-
type: Input
|
|
186
|
-
}], isDisabled: [{
|
|
187
|
-
type: Input
|
|
188
|
-
}], onCreating: [{
|
|
189
|
-
type: Output
|
|
190
|
-
}], onEditing: [{
|
|
191
|
-
type: Output
|
|
192
|
-
}], onLoadingChange: [{
|
|
193
|
-
type: Output
|
|
194
|
-
}], onShiningChange: [{
|
|
195
|
-
type: Output
|
|
196
|
-
}], setupComponent: [{
|
|
197
|
-
type: Output
|
|
198
|
-
}], onResourceLoadingError: [{
|
|
199
|
-
type: Output
|
|
200
|
-
}] } });
|
|
201
|
-
export var NgtFormState;
|
|
202
|
-
(function (NgtFormState) {
|
|
203
|
-
NgtFormState["CREATING"] = "CREATING";
|
|
204
|
-
NgtFormState["EDITING"] = "EDITING";
|
|
205
|
-
})(NgtFormState || (NgtFormState = {}));
|
|
206
|
-
;
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7O0FBRTRDLENBQUM7QUFNeEcsTUFBTSxPQUFPLGdCQUFnQjtJQXdCekIsWUFDVyxNQUFjLEVBQ2QsS0FBcUIsRUFHckIsYUFBK0IsRUFHL0IsTUFBYyxFQUViLGNBQWlDLEVBQ2pDLGtCQUFzQyxFQUd0QywyQkFBd0Q7UUFiekQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBR3JCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUcvQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRWIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFHdEMsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QjtRQXJDcEQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixvQkFBZSxHQUFXLElBQUksQ0FBQztRQU85QixlQUFV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QU07O0FBaU1YLE1BQU0sQ0FBTixJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDcEIscUNBQXFCLENBQUE7SUFDckIsbUNBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQUhXLFlBQVksS0FBWixZQUFZLFFBR3ZCO0FBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBpc1ZhbGlkTmdGb3JtIH0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3JtL2Zvcm0nO1xyXG5pbXBvcnQgeyBnZXRJZEZyb21VcmkgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JvdXRpbmcvcm91dGUnO1xyXG5pbXBvcnQgeyBOZ3RIdHRwRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLWZvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IE5ndEFiaWxpdHlWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vbmd0LWFiaWxpdHktdmFsaWRhdGlvbi5zZXJ2aWNlJzs7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbmd0LWZvcm0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5ndEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ3Vlc3NGb3JtU3RhdGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIHJvdXRlSWRlbnRpZmllcjogc3RyaW5nID0gJ2lkJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZXNvdXJjZTogYW55O1xyXG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbUxheW91dDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgc3RhdGljIG9uU3VibWl0SW52YWxpZEZvcm06IEV2ZW50RW1pdHRlcjxOZ0Zvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjtcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ3JlYXRpbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25FZGl0aW5nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uTG9hZGluZ0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25TaGluaW5nQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzZXR1cENvbXBvbmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblJlc291cmNlTG9hZGluZ0Vycm9yOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI7XHJcblxyXG4gICAgcHVibGljIGZvcm1TdGF0ZTogTmd0Rm9ybVN0YXRlO1xyXG4gICAgcHVibGljIHVyaUlkOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBzaGluaW5nOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG5cclxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXHJcbiAgICAgICAgcHVibGljIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcblxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcclxuICAgICAgICBwdWJsaWMgbmdGb3JtOiBOZ0Zvcm0sXHJcblxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbmd0SHR0cEZvcm1TZXJ2aWNlOiBOZ3RIdHRwRm9ybVNlcnZpY2UsXHJcblxyXG4gICAgICAgIEBPcHRpb25hbCgpXHJcbiAgICAgICAgcHJpdmF0ZSBuZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2U6IE5ndEFiaWxpdHlWYWxpZGF0aW9uU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3Vlc3NGb3JtU3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGVybWluZUZvcm1TdGF0ZSgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMubmdGb3JtLm5nU3VibWl0LnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubmdGb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTmd0Rm9ybUNvbXBvbmVudC5vblN1Ym1pdEludmFsaWRGb3JtLmVtaXQodGhpcy5uZ0Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQgJiYgdGhpcy5uZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gIShhd2FpdCB0aGlzLm5ndEFiaWxpdHlWYWxpZGF0aW9uU2VydmljZS5oYXNNYW5hZ2VQZXJtaXNzaW9uKCkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3JlYXRpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVN0YXRlID09PSBOZ3RGb3JtU3RhdGUuQ1JFQVRJTkc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRWRpdGluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtU3RhdGUgPT09IE5ndEZvcm1TdGF0ZS5FRElUSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaGluaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNoaW5pbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhblNob3dWYWxpZGF0aW9uTWVzc2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29udGFpbmVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udGFpbmVyLnN0YXR1cyAhPSAnVkFMSUQnICYmXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRhaW5lci5zdGF0dXMgIT0gJ0RJU0FCTEVEJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2hpbmluZyhzaGluaW5nOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcclxuICAgICAgICB0aGlzLm9uU2hpbmluZ0NoYW5nZS5lbWl0KHRoaXMuc2hpbmluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGxvYWRpbmc7XHJcbiAgICAgICAgdGhpcy5vbkxvYWRpbmdDaGFuZ2UuZW1pdCh0aGlzLmxvYWRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRGb3JtU3RhdGUoc3RhdGU6IE5ndEZvcm1TdGF0ZSwgdHJpZ2dlckNoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLmZvcm1TdGF0ZSA9IHN0YXRlO1xyXG5cclxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJGb3JtU3RhdGVDaGFuZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZvcm1TdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtU3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRyaWdnZXJGb3JtU3RhdGVDaGFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nKCkpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRm9ybUVkaXRpbmcoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckZvcm1DcmVhdGluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybUhhc0NoYW5nZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdGb3JtLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUmVzb3VyY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5nRm9ybSh0aGlzLm5nRm9ybSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ndEh0dHBGb3JtU2VydmljZS5zYXZlUmVzb3VyY2UodGhpcy5yZXNvdXJjZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHRyaWdnZXJGb3JtQ3JlYXRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNyZWF0aW5nLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdHJpZ2dlckZvcm1FZGl0aW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnVyaUlkICYmIHRoaXMucmVzb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNoaW5pbmcodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cEZvcm1TZXJ2aWNlLmxvYWRSZXNvdXJjZUJ5SWQodGhpcy5yZXNvdXJjZSwgdGhpcy51cmlJZClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzb3VyY2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2hpbmluZyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVkaXRpbmcuZW1pdChyZXNvdXJjZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nRm9ybS5mb3JtLm1hcmtBc1ByaXN0aW5lKCksIDE1MDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNoaW5pbmcoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SZXNvdXJjZUxvYWRpbmdFcnJvci5lbWl0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25FZGl0aW5nLmVtaXQobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXRlcm1pbmVGb3JtU3RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIGdldElkRnJvbVVyaSh0aGlzLnJvdXRlLCB0aGlzLnJvdXRlSWRlbnRpZmllcikuc3Vic2NyaWJlKChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmlJZCA9IGlkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51cmlJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1TdGF0ZShOZ3RGb3JtU3RhdGUuRURJVElORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtU3RhdGUoTmd0Rm9ybVN0YXRlLkNSRUFUSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBOZ3RGb3JtU3RhdGUge1xyXG4gICAgQ1JFQVRJTkcgPSAnQ1JFQVRJTkcnLFxyXG4gICAgRURJVElORyA9ICdFRElUSU5HJ1xyXG59O1xyXG4iLCI8bmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlICpuZ0lmPSchY3VzdG9tTGF5b3V0JyBbY2FuU2hvd1ZhbGlkYXRpb25NZXNzYWdlXT1cImNhblNob3dWYWxpZGF0aW9uTWVzc2FnZSgpXCJcclxuICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj5cclxuPC9uZ3QtZm9ybS12YWxpZGF0aW9uLW1lc3NhZ2U+XHJcblxyXG48ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBzdHlsZT1cIm1pbi1pbmxpbmUtc2l6ZTogMTAwJSAhaW1wb3J0YW50XCI+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvZmllbGRzZXQ+Il19
|
|
1
|
+
import { Component, EventEmitter, Host, Input, Optional, Output, } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { isValidNgForm } from '../../helpers/form/form';
|
|
4
|
+
import { getIdFromUri } from '../../helpers/routing/route';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "../../services/http/ngt-http-form.service";
|
|
9
|
+
import * as i4 from "../../services/validation/ngt-ability-validation.service";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
import * as i6 from "./ngt-form-validation-message/ngt-form-validation-message.component";
|
|
12
|
+
;
|
|
13
|
+
export class NgtFormComponent {
|
|
14
|
+
constructor(router, route, formContainer, ngForm, changeDetector, ngtHttpFormService, ngtAbilityValidationService) {
|
|
15
|
+
this.router = router;
|
|
16
|
+
this.route = route;
|
|
17
|
+
this.formContainer = formContainer;
|
|
18
|
+
this.ngForm = ngForm;
|
|
19
|
+
this.changeDetector = changeDetector;
|
|
20
|
+
this.ngtHttpFormService = ngtHttpFormService;
|
|
21
|
+
this.ngtAbilityValidationService = ngtAbilityValidationService;
|
|
22
|
+
this.guessFormState = true;
|
|
23
|
+
this.message = '';
|
|
24
|
+
this.routeIdentifier = 'id';
|
|
25
|
+
this.onCreating = new EventEmitter;
|
|
26
|
+
this.onEditing = new EventEmitter;
|
|
27
|
+
this.onLoadingChange = new EventEmitter;
|
|
28
|
+
this.onShiningChange = new EventEmitter;
|
|
29
|
+
this.setupComponent = new EventEmitter;
|
|
30
|
+
this.onResourceLoadingError = new EventEmitter;
|
|
31
|
+
this.subscriptions = [];
|
|
32
|
+
}
|
|
33
|
+
ngOnInit() {
|
|
34
|
+
if (this.guessFormState) {
|
|
35
|
+
this.subscriptions.push(this.determineFormState().subscribe(() => {
|
|
36
|
+
this.setupComponent.emit();
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.setupComponent.emit();
|
|
41
|
+
}
|
|
42
|
+
this.subscriptions.push(this.ngForm.ngSubmit.subscribe(() => {
|
|
43
|
+
if (!this.ngForm.valid) {
|
|
44
|
+
NgtFormComponent.onSubmitInvalidForm.emit(this.ngForm);
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
async ngAfterViewInit() {
|
|
49
|
+
if (this.isDisabled === undefined && this.ngtAbilityValidationService) {
|
|
50
|
+
this.isDisabled = !(await this.ngtAbilityValidationService.hasManagePermission());
|
|
51
|
+
this.changeDetector.detectChanges();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this.destroySubscriptions();
|
|
56
|
+
}
|
|
57
|
+
isCreating() {
|
|
58
|
+
return this.formState === NgtFormState.CREATING;
|
|
59
|
+
}
|
|
60
|
+
isEditing() {
|
|
61
|
+
return this.formState === NgtFormState.EDITING;
|
|
62
|
+
}
|
|
63
|
+
isLoading() {
|
|
64
|
+
return this.loading;
|
|
65
|
+
}
|
|
66
|
+
isShining() {
|
|
67
|
+
return this.shining;
|
|
68
|
+
}
|
|
69
|
+
canShowValidationMessage() {
|
|
70
|
+
return this.formContainer &&
|
|
71
|
+
this.formContainer['submitted'] &&
|
|
72
|
+
this.formContainer.status != 'VALID' &&
|
|
73
|
+
this.formContainer.status != 'DISABLED';
|
|
74
|
+
}
|
|
75
|
+
setShining(shining) {
|
|
76
|
+
this.shining = shining;
|
|
77
|
+
this.onShiningChange.emit(this.shining);
|
|
78
|
+
}
|
|
79
|
+
setLoading(loading) {
|
|
80
|
+
this.loading = loading;
|
|
81
|
+
this.onLoadingChange.emit(this.loading);
|
|
82
|
+
}
|
|
83
|
+
setFormState(state, triggerChange = true) {
|
|
84
|
+
this.formState = state;
|
|
85
|
+
if (triggerChange) {
|
|
86
|
+
this.triggerFormStateChange();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
getFormState() {
|
|
90
|
+
return this.formState;
|
|
91
|
+
}
|
|
92
|
+
triggerFormStateChange() {
|
|
93
|
+
if (this.isEditing()) {
|
|
94
|
+
this.triggerFormEditing();
|
|
95
|
+
}
|
|
96
|
+
else if (this.isCreating()) {
|
|
97
|
+
this.triggerFormCreating();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
formHasChanges() {
|
|
101
|
+
return this.ngForm.dirty;
|
|
102
|
+
}
|
|
103
|
+
saveResource() {
|
|
104
|
+
return new Observable((observer) => {
|
|
105
|
+
if (isValidNgForm(this.ngForm)) {
|
|
106
|
+
this.setLoading(true);
|
|
107
|
+
this.subscriptions.push(this.ngtHttpFormService.saveResource(this.resource)
|
|
108
|
+
.subscribe((response) => {
|
|
109
|
+
this.setLoading(false);
|
|
110
|
+
observer.next(response);
|
|
111
|
+
observer.complete();
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
observer.error();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
triggerFormCreating() {
|
|
120
|
+
this.onCreating.emit();
|
|
121
|
+
}
|
|
122
|
+
triggerFormEditing() {
|
|
123
|
+
if (this.uriId && this.resource) {
|
|
124
|
+
this.setLoading(true);
|
|
125
|
+
this.setShining(true);
|
|
126
|
+
this.subscriptions.push(this.ngtHttpFormService.loadResourceById(this.resource, this.uriId)
|
|
127
|
+
.subscribe((resource) => {
|
|
128
|
+
this.setLoading(false);
|
|
129
|
+
this.setShining(false);
|
|
130
|
+
this.onEditing.emit(resource);
|
|
131
|
+
setTimeout(() => this.ngForm.form.markAsPristine(), 1500);
|
|
132
|
+
}, (error) => {
|
|
133
|
+
this.setLoading(false);
|
|
134
|
+
this.setShining(false);
|
|
135
|
+
this.onResourceLoadingError.emit(error);
|
|
136
|
+
}));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.onEditing.emit(null);
|
|
140
|
+
}
|
|
141
|
+
determineFormState() {
|
|
142
|
+
return new Observable((observer) => {
|
|
143
|
+
this.subscriptions.push(getIdFromUri(this.route, this.routeIdentifier).subscribe((id) => {
|
|
144
|
+
this.uriId = id;
|
|
145
|
+
if (this.uriId) {
|
|
146
|
+
this.setFormState(NgtFormState.EDITING);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.setFormState(NgtFormState.CREATING);
|
|
150
|
+
}
|
|
151
|
+
observer.next();
|
|
152
|
+
}));
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
destroySubscriptions() {
|
|
156
|
+
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
157
|
+
this.subscriptions = [];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
NgtFormComponent.onSubmitInvalidForm = new EventEmitter;
|
|
161
|
+
NgtFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ControlContainer, host: true, optional: true }, { token: i2.NgForm, host: true, optional: true }, { token: i0.ChangeDetectorRef }, { token: i3.NgtHttpFormService }, { token: i4.NgtAbilityValidationService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
162
|
+
NgtFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtFormComponent, selector: "ngt-form", inputs: { guessFormState: "guessFormState", message: "message", routeIdentifier: "routeIdentifier", resource: "resource", customLayout: "customLayout", isDisabled: "isDisabled" }, outputs: { onCreating: "onCreating", onEditing: "onEditing", onLoadingChange: "onLoadingChange", onShiningChange: "onShiningChange", setupComponent: "setupComponent", onResourceLoadingError: "onResourceLoadingError" }, ngImport: i0, template: "<ngt-form-validation-message *ngIf='!customLayout' [canShowValidationMessage]=\"canShowValidationMessage()\"\n [message]=\"message\">\n</ngt-form-validation-message>\n\n<fieldset [disabled]=\"isDisabled\" style=\"min-inline-size: 100% !important\">\n <ng-content></ng-content>\n</fieldset>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.NgtFormValidationMessageComponent, selector: "ngt-form-validation-message", inputs: ["canShowValidationMessage", "message"] }] });
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormComponent, decorators: [{
|
|
164
|
+
type: Component,
|
|
165
|
+
args: [{ selector: 'ngt-form', template: "<ngt-form-validation-message *ngIf='!customLayout' [canShowValidationMessage]=\"canShowValidationMessage()\"\n [message]=\"message\">\n</ngt-form-validation-message>\n\n<fieldset [disabled]=\"isDisabled\" style=\"min-inline-size: 100% !important\">\n <ng-content></ng-content>\n</fieldset>" }]
|
|
166
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ControlContainer, decorators: [{
|
|
167
|
+
type: Optional
|
|
168
|
+
}, {
|
|
169
|
+
type: Host
|
|
170
|
+
}] }, { type: i2.NgForm, decorators: [{
|
|
171
|
+
type: Optional
|
|
172
|
+
}, {
|
|
173
|
+
type: Host
|
|
174
|
+
}] }, { type: i0.ChangeDetectorRef }, { type: i3.NgtHttpFormService }, { type: i4.NgtAbilityValidationService, decorators: [{
|
|
175
|
+
type: Optional
|
|
176
|
+
}] }]; }, propDecorators: { guessFormState: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], message: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], routeIdentifier: [{
|
|
181
|
+
type: Input
|
|
182
|
+
}], resource: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}], customLayout: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], isDisabled: [{
|
|
187
|
+
type: Input
|
|
188
|
+
}], onCreating: [{
|
|
189
|
+
type: Output
|
|
190
|
+
}], onEditing: [{
|
|
191
|
+
type: Output
|
|
192
|
+
}], onLoadingChange: [{
|
|
193
|
+
type: Output
|
|
194
|
+
}], onShiningChange: [{
|
|
195
|
+
type: Output
|
|
196
|
+
}], setupComponent: [{
|
|
197
|
+
type: Output
|
|
198
|
+
}], onResourceLoadingError: [{
|
|
199
|
+
type: Output
|
|
200
|
+
}] } });
|
|
201
|
+
export var NgtFormState;
|
|
202
|
+
(function (NgtFormState) {
|
|
203
|
+
NgtFormState["CREATING"] = "CREATING";
|
|
204
|
+
NgtFormState["EDITING"] = "EDITING";
|
|
205
|
+
})(NgtFormState || (NgtFormState = {}));
|
|
206
|
+
;
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7O0FBRTRDLENBQUM7QUFNeEcsTUFBTSxPQUFPLGdCQUFnQjtJQXdCekIsWUFDVyxNQUFjLEVBQ2QsS0FBcUIsRUFHckIsYUFBK0IsRUFHL0IsTUFBYyxFQUViLGNBQWlDLEVBQ2pDLGtCQUFzQyxFQUd0QywyQkFBd0Q7UUFiekQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBR3JCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUcvQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRWIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFHdEMsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QjtRQXJDcEQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixvQkFBZSxHQUFXLElBQUksQ0FBQztRQU85QixlQUFVLEdBQXNCLElBQUksWUFBWSxDQUFDO1FBQ2pELGNBQVMsR0FBc0IsSUFBSSxZQUFZLENBQUM7UUFDaEQsb0JBQWUsR0FBMEIsSUFBSSxZQUFZLENBQUM7UUFDMUQsb0JBQWUsR0FBMEIsSUFBSSxZQUFZLENBQUM7UUFDMUQsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLENBQUM7UUFDckQsMkJBQXNCLEdBQXlCLElBQUksWUFBWSxDQUFDO1FBT3pFLGtCQUFhLEdBQXdCLEVBQUUsQ0FBQztJQWlCNUMsQ0FBQztJQUVFLFFBQVE7UUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQ0wsQ0FBQztTQUNMO2FBQU07WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNwQixnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzFEO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7WUFFbEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLFVBQVU7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBRU0sU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ25ELENBQUM7SUFFTSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSx3QkFBd0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsYUFBYTtZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxPQUFPO1lBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQztJQUNoRCxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQWdCO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQWdCO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQW1CLEVBQUUsZ0JBQXlCLElBQUk7UUFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFFdkIsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFTSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTSxzQkFBc0I7UUFDekIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFTSxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVNLFlBQVk7UUFDZixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUM5QyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtvQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FDVCxDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3BCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRVMsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVTLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzlELFNBQVMsQ0FDTixDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU5QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUQsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQ0osQ0FDUixDQUFDO1lBRUYsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRTtnQkFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBRWhCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzVDO2dCQUVELFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7QUFyTXVCLG9DQUFtQixHQUF5QixJQUFJLFlBQVksQ0FBQzs2R0FSNUUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsK2JDekI3Qix5U0FNVzsyRkRtQkUsZ0JBQWdCO2tCQUo1QixTQUFTOytCQUNJLFVBQVU7OzBCQStCZixRQUFROzswQkFBSSxJQUFJOzswQkFHaEIsUUFBUTs7MEJBQUksSUFBSTs7MEJBTWhCLFFBQVE7NENBcENHLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUlXLFVBQVU7c0JBQTFCLE1BQU07Z0JBQ1UsU0FBUztzQkFBekIsTUFBTTtnQkFDVSxlQUFlO3NCQUEvQixNQUFNO2dCQUNVLGVBQWU7c0JBQS9CLE1BQU07Z0JBQ1UsY0FBYztzQkFBOUIsTUFBTTtnQkFDVSxzQkFBc0I7c0JBQXRDLE1BQU07O0FBaU1YLE1BQU0sQ0FBTixJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDcEIscUNBQXFCLENBQUE7SUFDckIsbUNBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQUhXLFlBQVksS0FBWixZQUFZLFFBR3ZCO0FBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgaXNWYWxpZE5nRm9ybSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybS9mb3JtJztcbmltcG9ydCB7IGdldElkRnJvbVVyaSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcm91dGluZy9yb3V0ZSc7XG5pbXBvcnQgeyBOZ3RIdHRwRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLWZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uL25ndC1hYmlsaXR5LXZhbGlkYXRpb24uc2VydmljZSc7O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIEBJbnB1dCgpIHB1YmxpYyBndWVzc0Zvcm1TdGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByb3V0ZUlkZW50aWZpZXI6IHN0cmluZyA9ICdpZCc7XG4gICAgQElucHV0KCkgcHVibGljIHJlc291cmNlOiBhbnk7XG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbUxheW91dDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgc3RhdGljIG9uU3VibWl0SW52YWxpZEZvcm06IEV2ZW50RW1pdHRlcjxOZ0Zvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DcmVhdGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25FZGl0aW5nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkxvYWRpbmdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNoaW5pbmdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBzZXR1cENvbXBvbmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25SZXNvdXJjZUxvYWRpbmdFcnJvcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyO1xuXG4gICAgcHVibGljIGZvcm1TdGF0ZTogTmd0Rm9ybVN0YXRlO1xuICAgIHB1YmxpYyB1cmlJZDogYW55O1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgc2hpbmluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcbiAgICAgICAgcHVibGljIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgbmdGb3JtOiBOZ0Zvcm0sXG5cbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgbmd0SHR0cEZvcm1TZXJ2aWNlOiBOZ3RIdHRwRm9ybVNlcnZpY2UsXG5cbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2U6IE5ndEFiaWxpdHlWYWxpZGF0aW9uU2VydmljZVxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmd1ZXNzRm9ybVN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmRldGVybWluZUZvcm1TdGF0ZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudC5lbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMubmdGb3JtLm5nU3VibWl0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICBOZ3RGb3JtQ29tcG9uZW50Lm9uU3VibWl0SW52YWxpZEZvcm0uZW1pdCh0aGlzLm5nRm9ybSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQgJiYgdGhpcy5uZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9ICEoYXdhaXQgdGhpcy5uZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2UuaGFzTWFuYWdlUGVybWlzc2lvbigpKTtcblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDcmVhdGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVN0YXRlID09PSBOZ3RGb3JtU3RhdGUuQ1JFQVRJTkc7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRWRpdGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVN0YXRlID09PSBOZ3RGb3JtU3RhdGUuRURJVElORztcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNMb2FkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1NoaW5pbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNoaW5pbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGNhblNob3dWYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRhaW5lciAmJlxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSAmJlxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udGFpbmVyLnN0YXR1cyAhPSAnVkFMSUQnICYmXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250YWluZXIuc3RhdHVzICE9ICdESVNBQkxFRCc7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNoaW5pbmcoc2hpbmluZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICB0aGlzLm9uU2hpbmluZ0NoYW5nZS5lbWl0KHRoaXMuc2hpbmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBsb2FkaW5nO1xuICAgICAgICB0aGlzLm9uTG9hZGluZ0NoYW5nZS5lbWl0KHRoaXMubG9hZGluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZvcm1TdGF0ZShzdGF0ZTogTmd0Rm9ybVN0YXRlLCB0cmlnZ2VyQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmZvcm1TdGF0ZSA9IHN0YXRlO1xuXG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJGb3JtU3RhdGVDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1TdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlckZvcm1TdGF0ZUNoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckZvcm1FZGl0aW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckZvcm1DcmVhdGluZygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1IYXNDaGFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ0Zvcm0uZGlydHk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmVSZXNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWROZ0Zvcm0odGhpcy5uZ0Zvcm0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cEZvcm1TZXJ2aWNlLnNhdmVSZXNvdXJjZSh0aGlzLnJlc291cmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyaWdnZXJGb3JtQ3JlYXRpbmcoKSB7XG4gICAgICAgIHRoaXMub25DcmVhdGluZy5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyaWdnZXJGb3JtRWRpdGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMudXJpSWQgJiYgdGhpcy5yZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zZXRTaGluaW5nKHRydWUpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEh0dHBGb3JtU2VydmljZS5sb2FkUmVzb3VyY2VCeUlkKHRoaXMucmVzb3VyY2UsIHRoaXMudXJpSWQpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTaGluaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FZGl0aW5nLmVtaXQocmVzb3VyY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nRm9ybS5mb3JtLm1hcmtBc1ByaXN0aW5lKCksIDE1MDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTaGluaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SZXNvdXJjZUxvYWRpbmdFcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVkaXRpbmcuZW1pdChudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRldGVybWluZUZvcm1TdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgZ2V0SWRGcm9tVXJpKHRoaXMucm91dGUsIHRoaXMucm91dGVJZGVudGlmaWVyKS5zdWJzY3JpYmUoKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmlJZCA9IGlkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVyaUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1TdGF0ZShOZ3RGb3JtU3RhdGUuRURJVElORyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1TdGF0ZShOZ3RGb3JtU3RhdGUuQ1JFQVRJTkcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIE5ndEZvcm1TdGF0ZSB7XG4gICAgQ1JFQVRJTkcgPSAnQ1JFQVRJTkcnLFxuICAgIEVESVRJTkcgPSAnRURJVElORydcbn07XG4iLCI8bmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlICpuZ0lmPSchY3VzdG9tTGF5b3V0JyBbY2FuU2hvd1ZhbGlkYXRpb25NZXNzYWdlXT1cImNhblNob3dWYWxpZGF0aW9uTWVzc2FnZSgpXCJcbiAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCI+XG48L25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZT5cblxuPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgc3R5bGU9XCJtaW4taW5saW5lLXNpemU6IDEwMCUgIWltcG9ydGFudFwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZmllbGRzZXQ+Il19
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { NgtFormValidationMessageComponent } from './ngt-form-validation-message/ngt-form-validation-message.component';
|
|
4
|
-
import { NgtFormComponent } from './ngt-form.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class NgtFormModule {
|
|
7
|
-
}
|
|
8
|
-
NgtFormModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
-
NgtFormModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, declarations: [NgtFormComponent,
|
|
10
|
-
NgtFormValidationMessageComponent], imports: [CommonModule], exports: [NgtFormComponent,
|
|
11
|
-
NgtFormValidationMessageComponent] });
|
|
12
|
-
NgtFormModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, imports: [CommonModule] });
|
|
13
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, decorators: [{
|
|
14
|
-
type: NgModule,
|
|
15
|
-
args: [{
|
|
16
|
-
imports: [
|
|
17
|
-
CommonModule
|
|
18
|
-
],
|
|
19
|
-
declarations: [
|
|
20
|
-
NgtFormComponent,
|
|
21
|
-
NgtFormValidationMessageComponent
|
|
22
|
-
],
|
|
23
|
-
exports: [
|
|
24
|
-
NgtFormComponent,
|
|
25
|
-
NgtFormValidationMessageComponent
|
|
26
|
-
]
|
|
27
|
-
}]
|
|
28
|
-
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { NgtFormValidationMessageComponent } from './ngt-form-validation-message/ngt-form-validation-message.component';
|
|
4
|
+
import { NgtFormComponent } from './ngt-form.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class NgtFormModule {
|
|
7
|
+
}
|
|
8
|
+
NgtFormModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
+
NgtFormModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, declarations: [NgtFormComponent,
|
|
10
|
+
NgtFormValidationMessageComponent], imports: [CommonModule], exports: [NgtFormComponent,
|
|
11
|
+
NgtFormValidationMessageComponent] });
|
|
12
|
+
NgtFormModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, imports: [CommonModule] });
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, decorators: [{
|
|
14
|
+
type: NgModule,
|
|
15
|
+
args: [{
|
|
16
|
+
imports: [
|
|
17
|
+
CommonModule
|
|
18
|
+
],
|
|
19
|
+
declarations: [
|
|
20
|
+
NgtFormComponent,
|
|
21
|
+
NgtFormValidationMessageComponent
|
|
22
|
+
],
|
|
23
|
+
exports: [
|
|
24
|
+
NgtFormComponent,
|
|
25
|
+
NgtFormValidationMessageComponent
|
|
26
|
+
]
|
|
27
|
+
}]
|
|
28
|
+
}] });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQWdCeEQsTUFBTSxPQUFPLGFBQWE7OzBHQUFiLGFBQWE7MkdBQWIsYUFBYSxpQkFUbEIsZ0JBQWdCO1FBQ2hCLGlDQUFpQyxhQUpqQyxZQUFZLGFBT1osZ0JBQWdCO1FBQ2hCLGlDQUFpQzsyR0FJNUIsYUFBYSxZQVpsQixZQUFZOzJGQVlQLGFBQWE7a0JBZHpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7cUJBQ2Y7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLGdCQUFnQjt3QkFDaEIsaUNBQWlDO3FCQUNwQztvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsZ0JBQWdCO3dCQUNoQixpQ0FBaUM7cUJBQ3BDO2lCQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5ndEZvcm1WYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbmd0LWZvcm0uY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZVxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIE5ndEZvcm1Db21wb25lbnQsXG4gICAgICAgIE5ndEZvcm1WYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBOZ3RGb3JtQ29tcG9uZW50LFxuICAgICAgICBOZ3RGb3JtVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnRcbiAgICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgTmd0Rm9ybU1vZHVsZSB7IH1cbiJdfQ==
|