@anglr/common 12.0.0-beta.20220413111906 → 12.0.0-beta.20220414120442
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/changelog.md +51 -2
- package/es2015/forms/src/components/defaultValidationErrors/defaultValidationErrors.component.js +53 -0
- package/es2015/forms/src/components/defaultValidationErrors/defaultValidationErrors.component.js.map +1 -0
- package/es2015/forms/src/components/defaultValidationErrorsContainer/defaultValidationErrorsContainer.component.js +75 -0
- package/es2015/forms/src/components/defaultValidationErrorsContainer/defaultValidationErrorsContainer.component.js.map +1 -0
- package/es2015/forms/src/components/index.js +4 -0
- package/es2015/forms/src/components/index.js.map +1 -0
- package/es2015/forms/src/components/reservedSpaceValidationErrorsContainer/reservedSpaceValidationErrorsContainer.component.js +75 -0
- package/es2015/forms/src/components/reservedSpaceValidationErrorsContainer/reservedSpaceValidationErrorsContainer.component.js.map +1 -0
- package/es2015/forms/src/directives/groupHasErrorContainer/groupHasErrorContainer.directive.js +31 -0
- package/es2015/forms/src/directives/groupHasErrorContainer/groupHasErrorContainer.directive.js.map +1 -0
- package/es2015/forms/src/directives/hasError/hasError.directive.js +38 -8
- package/es2015/forms/src/directives/hasError/hasError.directive.js.map +1 -1
- package/es2015/forms/src/directives/index.js +3 -0
- package/es2015/forms/src/directives/index.js.map +1 -0
- package/es2015/forms/src/directives/validationErrorsContainer/validationErrorsContainer.directive.js +24 -0
- package/es2015/forms/src/directives/validationErrorsContainer/validationErrorsContainer.directive.js.map +1 -0
- package/es2015/forms/src/index.js +4 -1
- package/es2015/forms/src/index.js.map +1 -1
- package/es2015/forms/src/misc/tokens.js +14 -0
- package/es2015/forms/src/misc/tokens.js.map +1 -0
- package/es2015/forms/src/misc/validationErrorsContainerView.js +31 -0
- package/es2015/forms/src/misc/validationErrorsContainerView.js.map +1 -0
- package/es2015/forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.js +3 -2
- package/es2015/forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.js.map +1 -1
- package/es2015/forms/src/modules/errorMessage/directives/errorMessage/errorMessage.directive.js +1 -1
- package/es2015/forms/src/modules/errorMessage/directives/errorMessage/errorMessage.directive.js.map +1 -1
- package/es2015/forms/src/modules/errorMessage/pipes/withErrorMessage/withErrorMessage.pipe.js +1 -1
- package/es2015/forms/src/modules/errorMessage/pipes/withErrorMessage/withErrorMessage.pipe.js.map +1 -1
- package/es2015/forms/src/modules/hasError.module.js +27 -5
- package/es2015/forms/src/modules/hasError.module.js.map +1 -1
- package/es2015/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js +12 -5
- package/es2015/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js.map +1 -1
- package/es2015/forms/src/services/validationErrorRenderer/validationErrorRenderer.interface.js.map +1 -1
- package/es2015/forms/src/services/validationErrorRenderer/validationErrorRenderer.service.js +31 -145
- package/es2015/forms/src/services/validationErrorRenderer/validationErrorRenderer.service.js.map +1 -1
- package/es2020/forms/src/components/defaultValidationErrors/defaultValidationErrors.component.js +53 -0
- package/es2020/forms/src/components/defaultValidationErrors/defaultValidationErrors.component.js.map +1 -0
- package/es2020/forms/src/components/defaultValidationErrorsContainer/defaultValidationErrorsContainer.component.js +75 -0
- package/es2020/forms/src/components/defaultValidationErrorsContainer/defaultValidationErrorsContainer.component.js.map +1 -0
- package/es2020/forms/src/components/index.js +4 -0
- package/es2020/forms/src/components/index.js.map +1 -0
- package/es2020/forms/src/components/reservedSpaceValidationErrorsContainer/reservedSpaceValidationErrorsContainer.component.js +75 -0
- package/es2020/forms/src/components/reservedSpaceValidationErrorsContainer/reservedSpaceValidationErrorsContainer.component.js.map +1 -0
- package/es2020/forms/src/directives/groupHasErrorContainer/groupHasErrorContainer.directive.js +31 -0
- package/es2020/forms/src/directives/groupHasErrorContainer/groupHasErrorContainer.directive.js.map +1 -0
- package/es2020/forms/src/directives/hasError/hasError.directive.js +37 -8
- package/es2020/forms/src/directives/hasError/hasError.directive.js.map +1 -1
- package/es2020/forms/src/directives/index.js +3 -0
- package/es2020/forms/src/directives/index.js.map +1 -0
- package/es2020/forms/src/directives/validationErrorsContainer/validationErrorsContainer.directive.js +24 -0
- package/es2020/forms/src/directives/validationErrorsContainer/validationErrorsContainer.directive.js.map +1 -0
- package/es2020/forms/src/index.js +4 -1
- package/es2020/forms/src/index.js.map +1 -1
- package/es2020/forms/src/misc/tokens.js +14 -0
- package/es2020/forms/src/misc/tokens.js.map +1 -0
- package/es2020/forms/src/misc/validationErrorsContainerView.js +31 -0
- package/es2020/forms/src/misc/validationErrorsContainerView.js.map +1 -0
- package/es2020/forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.js +3 -2
- package/es2020/forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.js.map +1 -1
- package/es2020/forms/src/modules/errorMessage/directives/errorMessage/errorMessage.directive.js +1 -1
- package/es2020/forms/src/modules/errorMessage/directives/errorMessage/errorMessage.directive.js.map +1 -1
- package/es2020/forms/src/modules/errorMessage/pipes/withErrorMessage/withErrorMessage.pipe.js +1 -1
- package/es2020/forms/src/modules/errorMessage/pipes/withErrorMessage/withErrorMessage.pipe.js.map +1 -1
- package/es2020/forms/src/modules/hasError.module.js +27 -5
- package/es2020/forms/src/modules/hasError.module.js.map +1 -1
- package/es2020/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js +12 -5
- package/es2020/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js.map +1 -1
- package/es2020/forms/src/services/validationErrorRenderer/validationErrorRenderer.interface.js.map +1 -1
- package/es2020/forms/src/services/validationErrorRenderer/validationErrorRenderer.service.js +31 -143
- package/es2020/forms/src/services/validationErrorRenderer/validationErrorRenderer.service.js.map +1 -1
- package/forms/src/components/defaultValidationErrors/defaultValidationErrors.component.css +4 -0
- package/forms/src/components/defaultValidationErrors/defaultValidationErrors.component.d.ts +32 -0
- package/forms/src/components/defaultValidationErrors/defaultValidationErrors.component.d.ts.map +1 -0
- package/forms/src/components/defaultValidationErrors/defaultValidationErrors.component.html +3 -0
- package/forms/src/components/defaultValidationErrorsContainer/defaultValidationErrorsContainer.component.css +4 -0
- package/forms/src/components/defaultValidationErrorsContainer/defaultValidationErrorsContainer.component.d.ts +51 -0
- package/forms/src/components/defaultValidationErrorsContainer/defaultValidationErrorsContainer.component.d.ts.map +1 -0
- package/forms/src/components/index.d.ts +4 -0
- package/forms/src/components/index.d.ts.map +1 -0
- package/forms/src/components/reservedSpaceValidationErrorsContainer/reservedSpaceValidationErrorsContainer.component.css +4 -0
- package/forms/src/components/reservedSpaceValidationErrorsContainer/reservedSpaceValidationErrorsContainer.component.d.ts +53 -0
- package/forms/src/components/reservedSpaceValidationErrorsContainer/reservedSpaceValidationErrorsContainer.component.d.ts.map +1 -0
- package/forms/src/components/reservedSpaceValidationErrorsContainer/reservedSpaceValidationErrorsContainer.component.html +3 -0
- package/forms/src/directives/groupHasErrorContainer/groupHasErrorContainer.directive.d.ts +10 -0
- package/forms/src/directives/groupHasErrorContainer/groupHasErrorContainer.directive.d.ts.map +1 -0
- package/forms/src/directives/hasError/hasError.directive.d.ts +21 -6
- package/forms/src/directives/hasError/hasError.directive.d.ts.map +1 -1
- package/forms/src/directives/index.d.ts +3 -0
- package/forms/src/directives/index.d.ts.map +1 -0
- package/forms/src/directives/validationErrorsContainer/validationErrorsContainer.directive.d.ts +12 -0
- package/forms/src/directives/validationErrorsContainer/validationErrorsContainer.directive.d.ts.map +1 -0
- package/forms/src/index.d.ts +4 -1
- package/forms/src/index.d.ts.map +1 -1
- package/forms/src/misc/tokens.d.ts +16 -0
- package/forms/src/misc/tokens.d.ts.map +1 -0
- package/forms/src/misc/validationErrorsContainerView.d.ts +25 -0
- package/forms/src/misc/validationErrorsContainerView.d.ts.map +1 -0
- package/forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.d.ts.map +1 -1
- package/forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.html +1 -1
- package/forms/src/modules/hasError.module.d.ts +7 -1
- package/forms/src/modules/hasError.module.d.ts.map +1 -1
- package/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.d.ts +3 -2
- package/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.d.ts.map +1 -1
- package/forms/src/services/validationErrorRenderer/validationErrorRenderer.interface.d.ts +43 -12
- package/forms/src/services/validationErrorRenderer/validationErrorRenderer.interface.d.ts.map +1 -1
- package/forms/src/services/validationErrorRenderer/validationErrorRenderer.service.d.ts +15 -63
- package/forms/src/services/validationErrorRenderer/validationErrorRenderer.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/version.bak +1 -1
- package/es2015/forms/src/misc/types.js +0 -6
- package/es2015/forms/src/misc/types.js.map +0 -1
- package/es2020/forms/src/misc/types.js +0 -6
- package/es2020/forms/src/misc/types.js.map +0 -1
- package/forms/src/misc/types.d.ts +0 -7
- package/forms/src/misc/types.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Directive, ElementRef, Optional, SkipSelf, Inject, Input, Injector } from '@angular/core';
|
|
2
|
+
import { Directive, ElementRef, Optional, SkipSelf, Inject, Input, Injector, ViewContainerRef, Type, TemplateRef } from '@angular/core';
|
|
3
3
|
import { FormControlDirective, FormControlName, NgModel } from '@angular/forms';
|
|
4
4
|
import { STRING_LOCALIZATION } from '@anglr/common';
|
|
5
5
|
import { generateId, BindThis } from '@jscrpt/common';
|
|
@@ -7,25 +7,29 @@ import { Subscription } from 'rxjs';
|
|
|
7
7
|
import { ValidationErrorRendererFactory } from '../../services/validationErrorRenderer/validationErrorRenderer.service';
|
|
8
8
|
import { SubmittedService } from '../../services/submitted/submitted.service';
|
|
9
9
|
import { GroupHasErrorDirective } from '../groupHasError/groupHasError.directive';
|
|
10
|
+
import { ValidationErrorsContainerView } from '../../misc/validationErrorsContainerView';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
import * as i1 from "../../services/validationErrorRenderer/validationErrorRenderer.service";
|
|
12
13
|
import * as i2 from "../groupHasError/groupHasError.directive";
|
|
13
14
|
import * as i3 from "@angular/forms";
|
|
14
15
|
import * as i4 from "../../services/submitted/submitted.service";
|
|
16
|
+
import * as i5 from "../../misc/validationErrorsContainerView";
|
|
15
17
|
//TODO - add support for setting renderer factory options using input
|
|
16
18
|
/**
|
|
17
19
|
* Directive that is attached to control element and handles css classes that are added to this element
|
|
18
20
|
*/
|
|
19
21
|
export class HasErrorDirective {
|
|
20
22
|
//######################### constructor #########################
|
|
21
|
-
constructor(_element, _rendererFactory, _groupHasError, _formControl, _formControlName, _ngModel, _submittedSvc, _stringLocalization, _injector) {
|
|
23
|
+
constructor(_element, _rendererFactory, _viewContainer, _groupHasError, _formControl, _formControlName, _ngModel, _submittedSvc, _containerView, _stringLocalization, _injector) {
|
|
22
24
|
this._element = _element;
|
|
23
25
|
this._rendererFactory = _rendererFactory;
|
|
26
|
+
this._viewContainer = _viewContainer;
|
|
24
27
|
this._groupHasError = _groupHasError;
|
|
25
28
|
this._formControl = _formControl;
|
|
26
29
|
this._formControlName = _formControlName;
|
|
27
30
|
this._ngModel = _ngModel;
|
|
28
31
|
this._submittedSvc = _submittedSvc;
|
|
32
|
+
this._containerView = _containerView;
|
|
29
33
|
this._stringLocalization = _stringLocalization;
|
|
30
34
|
this._injector = _injector;
|
|
31
35
|
//######################### private fields #########################
|
|
@@ -58,15 +62,24 @@ export class HasErrorDirective {
|
|
|
58
62
|
* Initialize component
|
|
59
63
|
*/
|
|
60
64
|
ngOnInit() {
|
|
65
|
+
var _a;
|
|
66
|
+
this._containerView ?? (this._containerView = new ValidationErrorsContainerView());
|
|
67
|
+
(_a = this._containerView).viewContainer ?? (_a.viewContainer = this._viewContainer);
|
|
61
68
|
this._registerMutationObserver();
|
|
62
|
-
this.renderer = this._rendererFactory.create(this.control, this._element.nativeElement, this._injector, this._isSubmittedOrDirty, {});
|
|
63
69
|
this._subscriptions.add(this._stringLocalization.textsChange.subscribe(() => this._updateStatus()));
|
|
64
70
|
this._subscriptions.add(this.control.statusChanges.subscribe(() => this._updateStatus()));
|
|
65
|
-
this._updateStatus();
|
|
66
71
|
if (this._submittedSvc) {
|
|
67
72
|
this._subscriptions.add(this._submittedSvc.submittedChange.subscribe(() => this._isSubmittedOrDirty(() => this._updateStatus())));
|
|
68
73
|
}
|
|
69
74
|
}
|
|
75
|
+
//######################### public methods - implementation of AfterViewInit #########################
|
|
76
|
+
/**
|
|
77
|
+
* Called when view was initialized
|
|
78
|
+
*/
|
|
79
|
+
ngAfterViewInit() {
|
|
80
|
+
this.renderer = this._rendererFactory.create(this.control, this._containerView, this._injector, this._isSubmittedOrDirty);
|
|
81
|
+
this._updateStatus();
|
|
82
|
+
}
|
|
70
83
|
//######################### public methods - implementation of OnDestroy #########################
|
|
71
84
|
/**
|
|
72
85
|
* Called when component is destroyed
|
|
@@ -82,8 +95,18 @@ export class HasErrorDirective {
|
|
|
82
95
|
* Updates status of control and css classes
|
|
83
96
|
*/
|
|
84
97
|
_updateStatus() {
|
|
98
|
+
if (!this.renderer) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const opts = {};
|
|
102
|
+
if (this.errorsTemplate) {
|
|
103
|
+
opts.template = this.errorsTemplate;
|
|
104
|
+
}
|
|
105
|
+
else if (this.errorsComponent) {
|
|
106
|
+
opts.component = this.errorsComponent;
|
|
107
|
+
}
|
|
85
108
|
this._previousDirty = this.control.dirty;
|
|
86
|
-
this._hasErrors = this.renderer.update(this.errorMessages);
|
|
109
|
+
this._hasErrors = this.renderer.update(opts, this.errorMessages);
|
|
87
110
|
this._toggleGroupHasError();
|
|
88
111
|
}
|
|
89
112
|
/**
|
|
@@ -126,8 +149,8 @@ export class HasErrorDirective {
|
|
|
126
149
|
});
|
|
127
150
|
}
|
|
128
151
|
}
|
|
129
|
-
HasErrorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: HasErrorDirective, deps: [{ token: i0.ElementRef }, { token: i1.ValidationErrorRendererFactory }, { token: i2.GroupHasErrorDirective, optional: true, skipSelf: true }, { token: i3.FormControlDirective, optional: true }, { token: i3.FormControlName, optional: true }, { token: i3.NgModel, optional: true }, { token: i4.SubmittedService, optional: true }, { token: STRING_LOCALIZATION }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
130
|
-
HasErrorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.2", type: HasErrorDirective, selector: "[hasError]", inputs: { errorMessages: "errorMessages" }, ngImport: i0 });
|
|
152
|
+
HasErrorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: HasErrorDirective, deps: [{ token: i0.ElementRef }, { token: i1.ValidationErrorRendererFactory }, { token: i0.ViewContainerRef }, { token: i2.GroupHasErrorDirective, optional: true, skipSelf: true }, { token: i3.FormControlDirective, optional: true }, { token: i3.FormControlName, optional: true }, { token: i3.NgModel, optional: true }, { token: i4.SubmittedService, optional: true }, { token: i5.ValidationErrorsContainerView, optional: true }, { token: STRING_LOCALIZATION }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
153
|
+
HasErrorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.2", type: HasErrorDirective, selector: "[hasError]", inputs: { errorMessages: "errorMessages", errorsComponent: "errorsComponent", errorsTemplate: "errorsTemplate" }, ngImport: i0 });
|
|
131
154
|
__decorate([
|
|
132
155
|
BindThis,
|
|
133
156
|
__metadata("design:type", Function),
|
|
@@ -139,7 +162,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
139
162
|
args: [{
|
|
140
163
|
selector: '[hasError]'
|
|
141
164
|
}]
|
|
142
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ValidationErrorRendererFactory }, { type: i2.GroupHasErrorDirective, decorators: [{
|
|
165
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ValidationErrorRendererFactory }, { type: i0.ViewContainerRef }, { type: i2.GroupHasErrorDirective, decorators: [{
|
|
143
166
|
type: Optional
|
|
144
167
|
}, {
|
|
145
168
|
type: SkipSelf
|
|
@@ -151,10 +174,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
151
174
|
type: Optional
|
|
152
175
|
}] }, { type: i4.SubmittedService, decorators: [{
|
|
153
176
|
type: Optional
|
|
177
|
+
}] }, { type: i5.ValidationErrorsContainerView, decorators: [{
|
|
178
|
+
type: Optional
|
|
154
179
|
}] }, { type: undefined, decorators: [{
|
|
155
180
|
type: Inject,
|
|
156
181
|
args: [STRING_LOCALIZATION]
|
|
157
182
|
}] }, { type: i0.Injector }]; }, propDecorators: { errorMessages: [{
|
|
158
183
|
type: Input
|
|
184
|
+
}], errorsComponent: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], errorsTemplate: [{
|
|
187
|
+
type: Input
|
|
159
188
|
}], _isSubmittedOrDirty: [] } });
|
|
160
189
|
//# sourceMappingURL=hasError.directive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasError.directive.js","sourceRoot":"","sources":["../../../../../forms/src/directives/hasError/hasError.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {Directive, ElementRef, Optional, SkipSelf, OnInit, OnDestroy, Inject, Input, Injector} from '@angular/core';\nimport {FormControlDirective, FormControlName, FormControl, NgModel} from '@angular/forms';\nimport {StringLocalization, STRING_LOCALIZATION} from '@anglr/common';\nimport {generateId, BindThis, StringDictionary} from '@jscrpt/common';\nimport {Subscription} from 'rxjs';\n\nimport {ValidationErrorRendererFactory} from '../../services/validationErrorRenderer/validationErrorRenderer.service';\nimport {ValidationErrorRenderer} from '../../services/validationErrorRenderer/validationErrorRenderer.interface';\nimport {SubmittedService} from '../../services/submitted/submitted.service';\nimport {GroupHasErrorDirective} from '../groupHasError/groupHasError.directive';\n\n//TODO - add support for setting renderer factory options using input\n\n/**\n * Directive that is attached to control element and handles css classes that are added to this element\n */\n@Directive(\n{\n selector: '[hasError]'\n})\nexport class HasErrorDirective implements OnInit, OnDestroy\n{\n //######################### private fields #########################\n\n /**\n * Subscriptions that are destroyed with destruction of this directive\n */\n private _subscriptions: Subscription = new Subscription();\n\n /**\n * Unique generated id of control\n */\n private _id: string = generateId(10);\n\n /**\n * Last value of control pristine attribute\n */\n private _previousDirty: boolean = false;\n\n /**\n * Indication whether currently are any errors rendered\n */\n private _hasErrors: boolean = false;\n\n /**\n * Mutation observer used for observing changes on class of element\n */\n private _observer: MutationObserver;\n\n //######################### private properties #########################\n\n /**\n * Gets control which was assigned to this element\n */\n private get control(): FormControl\n {\n return this._formControl?.control || this._formControlName?.control || this._ngModel?.control;\n }\n\n //######################### public properties #########################\n\n /**\n * Instance of validation error renderer\n */\n public renderer: ValidationErrorRenderer;\n\n //######################### public propeties - inputs #########################\n\n /**\n * Customized error messages\n */\n @Input()\n public errorMessages: StringDictionary;\n\n //######################### constructor #########################\n constructor(private _element: ElementRef<HTMLElement>,\n private _rendererFactory: ValidationErrorRendererFactory,\n @Optional() @SkipSelf() private _groupHasError: GroupHasErrorDirective,\n @Optional() private _formControl: FormControlDirective,\n @Optional() private _formControlName: FormControlName,\n @Optional() private _ngModel: NgModel,\n @Optional() private _submittedSvc: SubmittedService,\n @Inject(STRING_LOCALIZATION) protected _stringLocalization: StringLocalization,\n protected _injector: Injector)\n {\n }\n\n //######################### public methods - implementation of OnInit #########################\n \n /**\n * Initialize component\n */\n public ngOnInit(): void\n {\n this._registerMutationObserver();\n\n this.renderer = this._rendererFactory.create(this.control,\n this._element.nativeElement,\n this._injector,\n this._isSubmittedOrDirty,\n {\n });\n\n this._subscriptions.add(this._stringLocalization.textsChange.subscribe(() => this._updateStatus()));\n this._subscriptions.add(this.control.statusChanges.subscribe(() => this._updateStatus()));\n\n this._updateStatus();\n\n if(this._submittedSvc)\n {\n this._subscriptions.add(this._submittedSvc.submittedChange.subscribe(() => this._isSubmittedOrDirty(() => this._updateStatus())));\n }\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n \n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this._subscriptions.unsubscribe();\n\n this._groupHasError?.unregisterControl(this._id);\n this._observer?.disconnect();\n this.renderer?.destroy();\n }\n\n //######################### private methods #########################\n\n /**\n * Updates status of control and css classes\n */\n private _updateStatus(): void\n {\n this._previousDirty = this.control.dirty;\n this._hasErrors = this.renderer.update(this.errorMessages);\n this._toggleGroupHasError();\n }\n\n /**\n * Toggles registration of control in parent group\n */\n private _toggleGroupHasError(): void\n {\n if(this._groupHasError)\n {\n this._isSubmittedOrDirty(() => this._groupHasError.registerControl(this._id),\n () => this._groupHasError.unregisterControl(this._id),\n this._hasErrors);\n }\n }\n\n /**\n * Calls action when form is submitted or control is dirty\n * @param action - Action to be called when form is submitted or control dirty\n * @param falseAction - Action to be called when form is not submitted and control is not dirty\n * @param additionalCondition - Additional condition to be evaluated\n */\n @BindThis\n private _isSubmittedOrDirty(action: () => void, falseAction: () => void = () => {}, additionalCondition: boolean = true): void\n {\n //submitted form or dirty control\n if((this._submittedSvc?.submitted ||\n this.control?.dirty) &&\n additionalCondition)\n {\n action();\n }\n else\n {\n falseAction();\n }\n }\n\n /**\n * Registers mutation observer which watch for changes of class list\n */\n private _registerMutationObserver(): void\n {\n this._observer = new MutationObserver(() =>\n {\n if(this.control.dirty != this._previousDirty)\n {\n this._updateStatus();\n }\n });\n\n this._observer.observe(this._element.nativeElement, \n {\n attributeFilter: ['class'],\n attributes: true\n });\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"hasError.directive.js","sourceRoot":"","sources":["../../../../../forms/src/directives/hasError/hasError.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {Directive, ElementRef, Optional, SkipSelf, OnInit, OnDestroy, Inject, Input, Injector, ViewContainerRef, AfterViewInit, Type, TemplateRef} from '@angular/core';\nimport {FormControlDirective, FormControlName, FormControl, NgModel} from '@angular/forms';\nimport {StringLocalization, STRING_LOCALIZATION} from '@anglr/common';\nimport {generateId, BindThis, StringDictionary} from '@jscrpt/common';\nimport {Subscription} from 'rxjs';\n\nimport {ValidationErrorRendererFactory} from '../../services/validationErrorRenderer/validationErrorRenderer.service';\nimport {ValidationErrorRenderer, ValidationErrorsComponent, ValidationErrorsRendererOptions, ValidationErrorsTemplateContext} from '../../services/validationErrorRenderer/validationErrorRenderer.interface';\nimport {SubmittedService} from '../../services/submitted/submitted.service';\nimport {GroupHasErrorDirective} from '../groupHasError/groupHasError.directive';\nimport {ValidationErrorsContainerView} from '../../misc/validationErrorsContainerView';\n\n//TODO - add support for setting renderer factory options using input\n\n/**\n * Directive that is attached to control element and handles css classes that are added to this element\n */\n@Directive(\n{\n selector: '[hasError]'\n})\nexport class HasErrorDirective implements OnInit, AfterViewInit, OnDestroy\n{\n //######################### private fields #########################\n\n /**\n * Subscriptions that are destroyed with destruction of this directive\n */\n private _subscriptions: Subscription = new Subscription();\n\n /**\n * Unique generated id of control\n */\n private _id: string = generateId(10);\n\n /**\n * Last value of control pristine attribute\n */\n private _previousDirty: boolean = false;\n\n /**\n * Indication whether currently are any errors rendered\n */\n private _hasErrors: boolean = false;\n\n /**\n * Mutation observer used for observing changes on class of element\n */\n private _observer: MutationObserver;\n\n //######################### private properties #########################\n\n /**\n * Gets control which was assigned to this element\n */\n private get control(): FormControl\n {\n return this._formControl?.control || this._formControlName?.control || this._ngModel?.control;\n }\n\n //######################### public properties #########################\n\n /**\n * Instance of validation error renderer\n */\n public renderer: ValidationErrorRenderer;\n\n //######################### public propeties - inputs #########################\n\n /**\n * Customized error messages\n */\n @Input()\n public errorMessages: StringDictionary;\n\n /**\n * Custom component used for rendering validation errors\n */\n @Input()\n public errorsComponent?: Type<ValidationErrorsComponent>;\n\n /**\n * Custom template used for rendering validation errors\n */\n @Input()\n public errorsTemplate?: TemplateRef<ValidationErrorsTemplateContext>;\n\n //######################### constructor #########################\n constructor(private _element: ElementRef<HTMLElement>,\n private _rendererFactory: ValidationErrorRendererFactory,\n private _viewContainer: ViewContainerRef,\n @Optional() @SkipSelf() private _groupHasError: GroupHasErrorDirective,\n @Optional() private _formControl: FormControlDirective,\n @Optional() private _formControlName: FormControlName,\n @Optional() private _ngModel: NgModel,\n @Optional() private _submittedSvc: SubmittedService,\n @Optional() private _containerView: ValidationErrorsContainerView,\n @Inject(STRING_LOCALIZATION) protected _stringLocalization: StringLocalization,\n protected _injector: Injector)\n {\n }\n\n //######################### public methods - implementation of OnInit #########################\n \n /**\n * Initialize component\n */\n public ngOnInit(): void\n {\n this._containerView ??= new ValidationErrorsContainerView();\n this._containerView.viewContainer ??= this._viewContainer;\n\n this._registerMutationObserver();\n\n this._subscriptions.add(this._stringLocalization.textsChange.subscribe(() => this._updateStatus()));\n this._subscriptions.add(this.control.statusChanges.subscribe(() => this._updateStatus()));\n\n if(this._submittedSvc)\n {\n this._subscriptions.add(this._submittedSvc.submittedChange.subscribe(() => this._isSubmittedOrDirty(() => this._updateStatus())));\n }\n }\n\n //######################### public methods - implementation of AfterViewInit #########################\n \n /**\n * Called when view was initialized\n */\n public ngAfterViewInit(): void\n {\n this.renderer = this._rendererFactory.create(this.control,\n this._containerView,\n this._injector,\n this._isSubmittedOrDirty);\n\n this._updateStatus();\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n \n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this._subscriptions.unsubscribe();\n\n this._groupHasError?.unregisterControl(this._id);\n this._observer?.disconnect();\n this.renderer?.destroy();\n }\n\n //######################### private methods #########################\n\n /**\n * Updates status of control and css classes\n */\n private _updateStatus(): void\n {\n if(!this.renderer)\n {\n return;\n }\n\n const opts: ValidationErrorsRendererOptions = {};\n\n if(this.errorsTemplate)\n {\n opts.template = this.errorsTemplate;\n }\n else if(this.errorsComponent)\n {\n opts.component = this.errorsComponent;\n }\n\n this._previousDirty = this.control.dirty;\n this._hasErrors = this.renderer.update(opts, this.errorMessages);\n this._toggleGroupHasError();\n }\n\n /**\n * Toggles registration of control in parent group\n */\n private _toggleGroupHasError(): void\n {\n if(this._groupHasError)\n {\n this._isSubmittedOrDirty(() => this._groupHasError.registerControl(this._id),\n () => this._groupHasError.unregisterControl(this._id),\n this._hasErrors);\n }\n }\n\n /**\n * Calls action when form is submitted or control is dirty\n * @param action - Action to be called when form is submitted or control dirty\n * @param falseAction - Action to be called when form is not submitted and control is not dirty\n * @param additionalCondition - Additional condition to be evaluated\n */\n @BindThis\n private _isSubmittedOrDirty(action: () => void, falseAction: () => void = () => {}, additionalCondition: boolean = true): void\n {\n //submitted form or dirty control\n if((this._submittedSvc?.submitted ||\n this.control?.dirty) &&\n additionalCondition)\n {\n action();\n }\n else\n {\n falseAction();\n }\n }\n\n /**\n * Registers mutation observer which watch for changes of class list\n */\n private _registerMutationObserver(): void\n {\n this._observer = new MutationObserver(() =>\n {\n if(this.control.dirty != this._previousDirty)\n {\n this._updateStatus();\n }\n });\n\n this._observer.observe(this._element.nativeElement, \n {\n attributeFilter: ['class'],\n attributes: true\n });\n }\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../forms/src/directives/index.ts"],"names":[],"mappings":"AAAA,cAAc,2DAA2D,CAAC;AAC1E,cAAc,iEAAiE,CAAC","sourcesContent":["export * from './groupHasErrorContainer/groupHasErrorContainer.directive';\nexport * from './validationErrorsContainer/validationErrorsContainer.directive';\n"]}
|
package/es2020/forms/src/directives/validationErrorsContainer/validationErrorsContainer.directive.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Directive, SkipSelf, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { ValidationErrorsContainerView } from '../../misc/validationErrorsContainerView';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../misc/validationErrorsContainerView";
|
|
5
|
+
/**
|
|
6
|
+
* Directive that sets view container for validation errors for current element
|
|
7
|
+
*/
|
|
8
|
+
export class ValidationErrorsContainerDirective {
|
|
9
|
+
//######################### constructor #########################
|
|
10
|
+
constructor(containerView, viewContainer) {
|
|
11
|
+
containerView.viewContainer = viewContainer;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
ValidationErrorsContainerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ValidationErrorsContainerDirective, deps: [{ token: i1.ValidationErrorsContainerView, skipSelf: true }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
15
|
+
ValidationErrorsContainerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.2", type: ValidationErrorsContainerDirective, selector: "[validationErrorsContainer]", ngImport: i0 });
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ValidationErrorsContainerDirective, decorators: [{
|
|
17
|
+
type: Directive,
|
|
18
|
+
args: [{
|
|
19
|
+
selector: '[validationErrorsContainer]'
|
|
20
|
+
}]
|
|
21
|
+
}], ctorParameters: function () { return [{ type: i1.ValidationErrorsContainerView, decorators: [{
|
|
22
|
+
type: SkipSelf
|
|
23
|
+
}] }, { type: i0.ViewContainerRef }]; } });
|
|
24
|
+
//# sourceMappingURL=validationErrorsContainer.directive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationErrorsContainer.directive.js","sourceRoot":"","sources":["../../../../../forms/src/directives/validationErrorsContainer/validationErrorsContainer.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAC,6BAA6B,EAAC,MAAM,0CAA0C,CAAC;;;AAEvF;;GAEG;AAKH,MAAM,OAAO,kCAAkC;IAE3C,iEAAiE;IACjE,YAAwB,aAA4C,EACxD,aAA+B;QAEvC,aAAa,CAAC,aAAa,GAAG,aAAa,CAAC;IAChD,CAAC;;+HAPQ,kCAAkC;mHAAlC,kCAAkC;2FAAlC,kCAAkC;kBAJ9C,SAAS;mBACV;oBACI,QAAQ,EAAE,6BAA6B;iBAC1C;;0BAIgB,QAAQ","sourcesContent":["import {Directive, SkipSelf, ViewContainerRef} from '@angular/core';\n\nimport {ValidationErrorsContainerView} from '../../misc/validationErrorsContainerView';\n\n/**\n * Directive that sets view container for validation errors for current element\n */\n@Directive(\n{\n selector: '[validationErrorsContainer]'\n})\nexport class ValidationErrorsContainerDirective\n{\n //######################### constructor #########################\n constructor(@SkipSelf() containerView: ValidationErrorsContainerView,\n viewContainer: ViewContainerRef,)\n {\n containerView.viewContainer = viewContainer;\n }\n}"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export * from './components';
|
|
2
|
+
export * from './directives';
|
|
1
3
|
export * from './directives/numberInput/maxValueNumberValidator.directive';
|
|
2
4
|
export * from './directives/numberInput/minValueNumberValidator.directive';
|
|
3
5
|
export * from './directives/numberInput/numberInputValidator.directive';
|
|
@@ -12,7 +14,8 @@ export * from './services/validationErrorRenderer/validationErrorRenderer.interf
|
|
|
12
14
|
export * from './services/validationErrorRenderer/validationErrorRenderer.service';
|
|
13
15
|
export * from './misc/validators';
|
|
14
16
|
export * from './misc/utils';
|
|
15
|
-
export * from './misc/
|
|
17
|
+
export * from './misc/tokens';
|
|
18
|
+
export * from './misc/validationErrorsContainerView';
|
|
16
19
|
export * from './modules/numberInput.module';
|
|
17
20
|
export * from './modules/hasError.module';
|
|
18
21
|
export * from './modules/requiredClass.module';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../forms/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4DAA4D,CAAC;AAC3E,cAAc,yDAAyD,CAAC;AACxE,cAAc,oEAAoE,CAAC;AACnF,cAAc,0CAA0C,CAAC;AACzD,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,wCAAwC,CAAC;AACvD,cAAc,oEAAoE,CAAC;AACnF,cAAc,kEAAkE,CAAC;AACjF,cAAc,sEAAsE,CAAC;AACrF,cAAc,oEAAoE,CAAC;AACnF,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../forms/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4DAA4D,CAAC;AAC3E,cAAc,yDAAyD,CAAC;AACxE,cAAc,oEAAoE,CAAC;AACnF,cAAc,0CAA0C,CAAC;AACzD,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,wCAAwC,CAAC;AACvD,cAAc,oEAAoE,CAAC;AACnF,cAAc,kEAAkE,CAAC;AACjF,cAAc,sEAAsE,CAAC;AACrF,cAAc,oEAAoE,CAAC;AACnF,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC","sourcesContent":["export * from './components';\nexport * from './directives';\nexport * from './directives/numberInput/maxValueNumberValidator.directive';\nexport * from './directives/numberInput/minValueNumberValidator.directive';\nexport * from './directives/numberInput/numberInputValidator.directive';\nexport * from './directives/numberInput/numberInputControlValueAccessor.directive';\nexport * from './directives/hasError/hasError.directive';\nexport * from './directives/groupHasError/groupHasError.directive';\nexport * from './directives/requiredClass/requiredClass.directive';\nexport * from './services/submitted/submitted.service';\nexport * from './services/errorMessagesExtractor/errorMessagesExtractor.interface';\nexport * from './services/errorMessagesExtractor/errorMessagesExtractor.service';\nexport * from './services/validationErrorRenderer/validationErrorRenderer.interface';\nexport * from './services/validationErrorRenderer/validationErrorRenderer.service';\nexport * from './misc/validators';\nexport * from './misc/utils';\nexport * from './misc/tokens';\nexport * from './misc/validationErrorsContainerView';\nexport * from './modules/numberInput.module';\nexport * from './modules/hasError.module';\nexport * from './modules/requiredClass.module';\nexport * from './modules/formPipes';\nexport * from './modules/errorMessage';\nexport * from './misc/formModel';\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* Injection token containing validation error messages
|
|
4
|
+
*/
|
|
5
|
+
export const VALIDATION_ERROR_MESSAGES = new InjectionToken('VALIDATION_ERROR_MESSAGES');
|
|
6
|
+
/**
|
|
7
|
+
* Injection token for injecting array of ignored error names when automatically processed
|
|
8
|
+
*/
|
|
9
|
+
export const IGNORED_VALIDATION_ERRORS = new InjectionToken('IGNORED_VALIDATION_ERRORS', { providedIn: 'root', factory: () => ['actual'] });
|
|
10
|
+
/**
|
|
11
|
+
* Injection token used for injecting global options for ValidationErrorRendererFactory
|
|
12
|
+
*/
|
|
13
|
+
export const VALIDATION_ERROR_RENDERER_FACTORY_OPTIONS = new InjectionToken('VALIDATION_ERROR_RENDERER_FACTORY_OPTIONS');
|
|
14
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../../forms/src/misc/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAK7C;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAqC,IAAI,cAAc,CAAmB,2BAA2B,CAAC,CAAC;AAE7I;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAA6B,IAAI,cAAc,CAAW,2BAA2B,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC;AAE9K;;GAEG;AACH,MAAM,CAAC,MAAM,yCAAyC,GAA0D,IAAI,cAAc,CAAwC,2CAA2C,CAAC,CAAC","sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {StringDictionary} from '@jscrpt/common';\n\nimport {ValidationErrorRendererFactoryOptions} from '../services/validationErrorRenderer/validationErrorRenderer.interface';\n\n/**\n * Injection token containing validation error messages\n */\nexport const VALIDATION_ERROR_MESSAGES: InjectionToken<StringDictionary> = new InjectionToken<StringDictionary>('VALIDATION_ERROR_MESSAGES');\n\n/**\n * Injection token for injecting array of ignored error names when automatically processed\n */\nexport const IGNORED_VALIDATION_ERRORS: InjectionToken<string[]> = new InjectionToken<string[]>('IGNORED_VALIDATION_ERRORS', {providedIn: 'root', factory: () => ['actual']});\n\n/**\n * Injection token used for injecting global options for ValidationErrorRendererFactory\n */\nexport const VALIDATION_ERROR_RENDERER_FACTORY_OPTIONS: InjectionToken<ValidationErrorRendererFactoryOptions> = new InjectionToken<ValidationErrorRendererFactoryOptions>('VALIDATION_ERROR_RENDERER_FACTORY_OPTIONS');\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Class that holds validation errors view container
|
|
4
|
+
*/
|
|
5
|
+
export class ValidationErrorsContainerView {
|
|
6
|
+
constructor() {
|
|
7
|
+
//######################### private fields #########################
|
|
8
|
+
/**
|
|
9
|
+
* Used for emitting viewContainer changes
|
|
10
|
+
*/
|
|
11
|
+
this._viewContainerChange = new Subject();
|
|
12
|
+
}
|
|
13
|
+
//######################### public properties #########################
|
|
14
|
+
/**
|
|
15
|
+
* Gets or sets current instance of view container
|
|
16
|
+
*/
|
|
17
|
+
get viewContainer() {
|
|
18
|
+
return this._viewContainer;
|
|
19
|
+
}
|
|
20
|
+
set viewContainer(value) {
|
|
21
|
+
this._viewContainer = value;
|
|
22
|
+
this._viewContainerChange.next();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Occurs when view container instance changes
|
|
26
|
+
*/
|
|
27
|
+
get viewContainerChange() {
|
|
28
|
+
return this._viewContainerChange.asObservable();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=validationErrorsContainerView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationErrorsContainerView.js","sourceRoot":"","sources":["../../../../forms/src/misc/validationErrorsContainerView.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,OAAO,EAAC,MAAM,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,6BAA6B;IAA1C;QAEI,oEAAoE;QAOpE;;WAEG;QACK,yBAAoB,GAAkB,IAAI,OAAO,EAAQ,CAAC;IAwBtE,CAAC;IAtBG,uEAAuE;IAEvE;;OAEG;IACH,IAAW,aAAa;QAEpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,IAAW,aAAa,CAAC,KAAuB;QAE5C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAE1B,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;IACpD,CAAC;CACJ","sourcesContent":["import {ViewContainerRef} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/**\n * Class that holds validation errors view container\n */\nexport class ValidationErrorsContainerView\n{\n //######################### private fields #########################\n \n /**\n * Current instance of view container\n */\n private _viewContainer: ViewContainerRef;\n \n /**\n * Used for emitting viewContainer changes\n */\n private _viewContainerChange: Subject<void> = new Subject<void>();\n \n //######################### public properties #########################\n \n /**\n * Gets or sets current instance of view container\n */\n public get viewContainer(): ViewContainerRef\n {\n return this._viewContainer;\n }\n public set viewContainer(value: ViewContainerRef)\n {\n this._viewContainer = value;\n this._viewContainerChange.next();\n }\n\n /**\n * Occurs when view container instance changes\n */\n public get viewContainerChange(): Observable<void>\n {\n return this._viewContainerChange.asObservable();\n }\n}"]}
|
package/es2020/forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Component, ChangeDetectionStrategy, Optional, ChangeDetectorRef, Input, ContentChild } from '@angular/core';
|
|
2
2
|
import { FormGroupDirective, FormGroupName } from '@angular/forms';
|
|
3
|
+
import { slideInOutTrigger } from '@anglr/animations';
|
|
3
4
|
import { Subscription } from 'rxjs';
|
|
4
5
|
import { GroupErrorsTemplateDirective } from '../../directives';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
@@ -55,10 +56,10 @@ export class GroupErrorsComponent {
|
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
GroupErrorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: GroupErrorsComponent, deps: [{ token: i1.FormGroupDirective, optional: true }, { token: i1.FormGroupName, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
58
|
-
GroupErrorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: GroupErrorsComponent, selector: "form-group-errors", inputs: { cssClass: "cssClass" }, queries: [{ propertyName: "template", first: true, predicate: GroupErrorsTemplateDirective, descendants: true }], ngImport: i0, template: "<ng-template #defaultTemplate let-errorName>\n <div [ngClass]=\"cssClass\" [errorMessage]=\"errorName\" [errors]=\"formGroup.errors\"></div>\n</ng-template>\n\n<ng-container *ngFor=\"let errorName of formGroup.errors | keys | withErrorMessage; let first=first; let last=last; let index=index\">\n <ng-container *ngTemplateOutlet=\"template?.template ?? defaultTemplate; context: {$implicit: errorName, first, last, index, errors: formGroup.errors}\"></ng-container>\n</ng-container>", directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.ErrorMessageDirective, selector: "[errorMessage]", inputs: ["errorMessage", "errors"], exportAs: ["errorMessage"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "withErrorMessage": i4.WithErrorMessagePipe, "keys": i5.KeysPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
59
|
+
GroupErrorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: GroupErrorsComponent, selector: "form-group-errors", inputs: { cssClass: "cssClass" }, queries: [{ propertyName: "template", first: true, predicate: GroupErrorsTemplateDirective, descendants: true }], ngImport: i0, template: "<ng-template #defaultTemplate let-errorName>\n <div [ngClass]=\"cssClass\" [errorMessage]=\"errorName\" [errors]=\"formGroup.errors\" @slideInOut></div>\n</ng-template>\n\n<ng-container *ngFor=\"let errorName of formGroup.errors | keys | withErrorMessage; let first=first; let last=last; let index=index\">\n <ng-container *ngTemplateOutlet=\"template?.template ?? defaultTemplate; context: {$implicit: errorName, first, last, index, errors: formGroup.errors}\"></ng-container>\n</ng-container>", directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.ErrorMessageDirective, selector: "[errorMessage]", inputs: ["errorMessage", "errors"], exportAs: ["errorMessage"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "withErrorMessage": i4.WithErrorMessagePipe, "keys": i5.KeysPipe }, animations: [slideInOutTrigger], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
59
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: GroupErrorsComponent, decorators: [{
|
|
60
61
|
type: Component,
|
|
61
|
-
args: [{ selector: 'form-group-errors', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #defaultTemplate let-errorName>\n <div [ngClass]=\"cssClass\" [errorMessage]=\"errorName\" [errors]=\"formGroup.errors\"></div>\n</ng-template>\n\n<ng-container *ngFor=\"let errorName of formGroup.errors | keys | withErrorMessage; let first=first; let last=last; let index=index\">\n <ng-container *ngTemplateOutlet=\"template?.template ?? defaultTemplate; context: {$implicit: errorName, first, last, index, errors: formGroup.errors}\"></ng-container>\n</ng-container>" }]
|
|
62
|
+
args: [{ selector: 'form-group-errors', animations: [slideInOutTrigger], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #defaultTemplate let-errorName>\n <div [ngClass]=\"cssClass\" [errorMessage]=\"errorName\" [errors]=\"formGroup.errors\" @slideInOut></div>\n</ng-template>\n\n<ng-container *ngFor=\"let errorName of formGroup.errors | keys | withErrorMessage; let first=first; let last=last; let index=index\">\n <ng-container *ngTemplateOutlet=\"template?.template ?? defaultTemplate; context: {$implicit: errorName, first, last, index, errors: formGroup.errors}\"></ng-container>\n</ng-container>" }]
|
|
62
63
|
}], ctorParameters: function () { return [{ type: i1.FormGroupDirective, decorators: [{
|
|
63
64
|
type: Optional
|
|
64
65
|
}] }, { type: i1.FormGroupName, decorators: [{
|
package/es2020/forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groupErrors.component.js","sourceRoot":"","sources":["../../../../../../../forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.ts","../../../../../../../forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,uBAAuB,EAAE,QAAQ,EAAqB,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACtI,OAAO,EAA+B,kBAAkB,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAC,YAAY,EAAC,MAAM,MAAM,CAAC;AAElC,OAAO,EAAC,4BAA4B,EAAC,MAAM,kBAAkB,CAAC;;;;;;;AAE9D;;GAEG;
|
|
1
|
+
{"version":3,"file":"groupErrors.component.js","sourceRoot":"","sources":["../../../../../../../forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.ts","../../../../../../../forms/src/modules/errorMessage/components/groupErrors/groupErrors.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,uBAAuB,EAAE,QAAQ,EAAqB,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACtI,OAAO,EAA+B,kBAAkB,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAC,YAAY,EAAC,MAAM,MAAM,CAAC;AAElC,OAAO,EAAC,4BAA4B,EAAC,MAAM,kBAAkB,CAAC;;;;;;;AAE9D;;GAEG;AAQH,MAAM,OAAO,oBAAoB;IA8C7B,iEAAiE;IACjE,YAAkC,kBAAsC,EACtC,aAA4B,EACxC,eAAkC;QAFtB,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,kBAAa,GAAb,aAAa,CAAe;QACxC,oBAAe,GAAf,eAAe,CAAmB;QAxCxD;;WAEG;QACO,uBAAkB,GAAiB,IAAI,YAAY,EAAE,CAAC;QAuC5D,IAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,aAAa,EAClD;YACI,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;SAC9E;IACL,CAAC;IApCD,2FAA2F;IAE3F;;;OAGG;IACH,IAAW,SAAS;QAEhB,OAAO,CAAC,IAAI,CAAC,UAAU,KAAf,IAAI,CAAC,UAAU,GAAM,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;IAChG,CAAC;IA6BD,+FAA+F;IAE/F;;OAEG;IACI,QAAQ;QAEX,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAEvE,IAAG,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,KAAK,IAAI,SAAS,EACjD;gBACI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;aACxC;QACL,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;IAED,kGAAkG;IAElG;;OAEG;IACI,WAAW;QAEd,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,CAAC;;iHAnFQ,oBAAoB;qGAApB,oBAAoB,iIA2Cf,4BAA4B,gDC5D9C,sfAMe,shBDQC,CAAC,iBAAiB,CAAC;2FAGtB,oBAAoB;kBAPhC,SAAS;+BAEI,mBAAmB,cAEjB,CAAC,iBAAiB,CAAC,mBACd,uBAAuB,CAAC,MAAM;;0BAiDlC,QAAQ;;0BACR,QAAQ;4EAZd,QAAQ;sBADd,KAAK;gBASC,QAAQ;sBADd,YAAY;uBAAC,4BAA4B","sourcesContent":["import {Component, ChangeDetectionStrategy, Optional, OnInit, OnDestroy, ChangeDetectorRef, Input, ContentChild} from '@angular/core';\nimport {FormControlStatus, FormGroup, FormGroupDirective, FormGroupName} from '@angular/forms';\nimport {slideInOutTrigger} from '@anglr/animations';\nimport {Subscription} from 'rxjs';\n\nimport {GroupErrorsTemplateDirective} from '../../directives';\n\n/**\n * Component used for rendering from group errors\n */\n@Component(\n{\n selector: 'form-group-errors',\n templateUrl: 'groupErrors.component.html',\n animations: [slideInOutTrigger],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GroupErrorsComponent implements OnInit, OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * Instance of currently used form group\n */\n protected _formGroup?: FormGroup;\n\n /**\n * Subscriptions created during initialization\n */\n protected _initSubscriptions: Subscription = new Subscription();\n\n /**\n * Last state of form control\n */\n protected _lastState?: FormControlStatus;\n\n //######################### public properties - template bindings #########################\n\n /**\n * Gets instance of currently used form group\n * @internal\n */\n public get formGroup(): FormGroup\n {\n return (this._formGroup ??= (this.formGroupDirective?.form ?? this.formGroupName?.control));\n }\n\n //######################### public properties - inputs #########################\n\n /**\n * Css classes that are applied to default rendered divs\n */\n @Input()\n public cssClass: string;\n\n //######################### public properties - children #########################\n\n /**\n * Custom template for rendering form group error\n */\n @ContentChild(GroupErrorsTemplateDirective)\n public template?: GroupErrorsTemplateDirective;\n\n //######################### constructor #########################\n constructor(@Optional() protected formGroupDirective: FormGroupDirective,\n @Optional() protected formGroupName: FormGroupName,\n protected _changeDetector: ChangeDetectorRef,)\n {\n if(!this.formGroupDirective && !this.formGroupName)\n {\n throw new Error('There is no parent formGroup or formGroupName directive');\n }\n }\n\n //######################### public methods - implementation of OnInit #########################\n \n /**\n * Initialize component\n */\n public ngOnInit(): void\n {\n this._initSubscriptions.add(this.formGroup.statusChanges.subscribe(state =>\n {\n if(this._lastState != state || state == 'INVALID')\n {\n this._lastState = state;\n this._changeDetector.detectChanges();\n }\n }));\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n \n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this._initSubscriptions?.unsubscribe();\n this._initSubscriptions = null;\n }\n}","<ng-template #defaultTemplate let-errorName>\n <div [ngClass]=\"cssClass\" [errorMessage]=\"errorName\" [errors]=\"formGroup.errors\" @slideInOut></div>\n</ng-template>\n\n<ng-container *ngFor=\"let errorName of formGroup.errors | keys | withErrorMessage; let first=first; let last=last; let index=index\">\n <ng-container *ngTemplateOutlet=\"template?.template ?? defaultTemplate; context: {$implicit: errorName, first, last, index, errors: formGroup.errors}\"></ng-container>\n</ng-container>"]}
|
package/es2020/forms/src/modules/errorMessage/directives/errorMessage/errorMessage.directive.js
CHANGED
|
@@ -2,7 +2,7 @@ import { Directive, ElementRef, Inject, Input } from '@angular/core';
|
|
|
2
2
|
import { STRING_LOCALIZATION } from '@anglr/common';
|
|
3
3
|
import { isBlank, nameof } from '@jscrpt/common';
|
|
4
4
|
import { Subscription } from 'rxjs';
|
|
5
|
-
import { VALIDATION_ERROR_MESSAGES } from '../../../../misc/
|
|
5
|
+
import { VALIDATION_ERROR_MESSAGES } from '../../../../misc/tokens';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
/**
|
|
8
8
|
* Directive used for displaying form error message
|
package/es2020/forms/src/modules/errorMessage/directives/errorMessage/errorMessage.directive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorMessage.directive.js","sourceRoot":"","sources":["../../../../../../../forms/src/modules/errorMessage/directives/errorMessage/errorMessage.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAsC,MAAM,eAAe,CAAC;AACxG,OAAO,EAAqB,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACtE,OAAO,EAAa,OAAO,EAAE,MAAM,EAAmB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,MAAM,CAAC;AAElC,OAAO,EAAC,yBAAyB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"errorMessage.directive.js","sourceRoot":"","sources":["../../../../../../../forms/src/modules/errorMessage/directives/errorMessage/errorMessage.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAsC,MAAM,eAAe,CAAC;AACxG,OAAO,EAAqB,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACtE,OAAO,EAAa,OAAO,EAAE,MAAM,EAAmB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,MAAM,CAAC;AAElC,OAAO,EAAC,yBAAyB,EAAC,MAAM,yBAAyB,CAAC;;AAElE;;GAEG;AAMH,MAAM,OAAO,qBAAqB;IAuB9B,iEAAiE;IACjE,YAAsB,QAAiC,EACJ,aAAiC,EAC3B,cAAgC;QAFnE,aAAQ,GAAR,QAAQ,CAAyB;QACJ,kBAAa,GAAb,aAAa,CAAoB;QAC3B,mBAAc,GAAd,cAAc,CAAkB;QAxBzF,0EAA0E;QAE1E;;WAEG;QACO,uBAAkB,GAAiB,IAAI,YAAY,EAAE,CAAC;QAqB5D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACrG,CAAC;IAED,kGAAkG;IAElG;;OAEG;IACI,WAAW,CAAC,OAAsB;QAErC,IAAG,MAAM,CAAwB,WAAW,CAAC,IAAI,OAAO,EACxD;YACI,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;IACL,CAAC;IAED,kGAAkG;IAElG;;OAEG;IACI,WAAW;QAEd,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,uEAAuE;IAEvE;;OAEG;IACO,YAAY;QAElB,IAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAC1B;YACI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE,CAAC;YAE3C,OAAO;SACV;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAElE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC;IACpD,CAAC;;kHAzEQ,qBAAqB,4CAyBV,mBAAmB,aACnB,yBAAyB;sGA1BpC,qBAAqB;2FAArB,qBAAqB;kBALjC,SAAS;mBACV;oBACI,QAAQ,EAAE,gBAAgB;oBAC1B,QAAQ,EAAE,cAAc;iBAC3B;;0BA0BgB,MAAM;2BAAC,mBAAmB;;0BAC1B,MAAM;2BAAC,yBAAyB;4CAXtC,SAAS;sBADf,KAAK;uBAAC,cAAc;gBAOd,MAAM;sBADZ,KAAK","sourcesContent":["import {Directive, ElementRef, Inject, Input, OnChanges, OnDestroy, SimpleChanges} from '@angular/core';\nimport {StringLocalization, STRING_LOCALIZATION} from '@anglr/common';\nimport {Dictionary, isBlank, nameof, StringDictionary} from '@jscrpt/common';\nimport {Subscription} from 'rxjs';\n\nimport {VALIDATION_ERROR_MESSAGES} from '../../../../misc/tokens';\n\n/**\n * Directive used for displaying form error message\n */\n@Directive(\n{\n selector: '[errorMessage]',\n exportAs: 'errorMessage'\n})\nexport class ErrorMessageDirective implements OnChanges, OnDestroy\n{\n //######################### protected properties #########################\n\n /**\n * Subscriptions created during initialization\n */\n protected _initSubscriptions: Subscription = new Subscription();\n\n //######################### public properties - inputs #########################\n\n /**\n * Name/code of error message to be displayed\n */\n @Input('errorMessage')\n public errorName: string;\n\n /**\n * Object storing all errors\n */\n @Input()\n public errors: Dictionary;\n\n //######################### constructor #########################\n constructor(protected _element: ElementRef<HTMLElement>,\n @Inject(STRING_LOCALIZATION) protected _localization: StringLocalization,\n @Inject(VALIDATION_ERROR_MESSAGES) protected _errorMessages: StringDictionary,)\n {\n this._initSubscriptions.add(this._localization.textsChange.subscribe(() => this._showMessage()));\n }\n\n //######################### public methods - implementation of OnChanges #########################\n \n /**\n * Called when input value changes\n */\n public ngOnChanges(changes: SimpleChanges): void\n {\n if(nameof<ErrorMessageDirective>('errorName') in changes)\n {\n this._showMessage();\n }\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n \n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this._initSubscriptions?.unsubscribe();\n this._initSubscriptions = null;\n }\n\n //######################### protected methods #########################\n\n /**\n * Shows message inside of element\n */\n protected _showMessage(): void\n {\n if(isBlank(this.errorName))\n {\n this._element.nativeElement.innerHTML = '';\n\n return;\n }\n\n const errorMessage = this._errorMessages[this.errorName];\n const message = this._localization.get(errorMessage, this.errors);\n\n this._element.nativeElement.innerHTML = message;\n }\n}"]}
|
package/es2020/forms/src/modules/errorMessage/pipes/withErrorMessage/withErrorMessage.pipe.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Inject, Pipe } from '@angular/core';
|
|
2
|
-
import { VALIDATION_ERROR_MESSAGES } from '../../../../misc/
|
|
2
|
+
import { VALIDATION_ERROR_MESSAGES } from '../../../../misc/tokens';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
/**
|
|
5
5
|
* Filters array of errors with messages
|
package/es2020/forms/src/modules/errorMessage/pipes/withErrorMessage/withErrorMessage.pipe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withErrorMessage.pipe.js","sourceRoot":"","sources":["../../../../../../../forms/src/modules/errorMessage/pipes/withErrorMessage/withErrorMessage.pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,IAAI,EAAgB,MAAM,eAAe,CAAC;AAG1D,OAAO,EAAC,yBAAyB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"withErrorMessage.pipe.js","sourceRoot":"","sources":["../../../../../../../forms/src/modules/errorMessage/pipes/withErrorMessage/withErrorMessage.pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,IAAI,EAAgB,MAAM,eAAe,CAAC;AAG1D,OAAO,EAAC,yBAAyB,EAAC,MAAM,yBAAyB,CAAC;;AAElE;;GAEG;AAEH,MAAM,OAAO,oBAAoB;IAE7B,iEAAiE;IACjE,YAAyD,cAAgC;QAAhC,mBAAc,GAAd,cAAc,CAAkB;IAEzF,CAAC;IAED,sGAAsG;IAEtG;;;OAGG;IACI,SAAS,CAAC,KAAe;QAE5B,IAAG,CAAC,KAAK,EAAE,MAAM,EACjB;YACI,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;;iHArBQ,oBAAoB,kBAGT,yBAAyB;+GAHpC,oBAAoB;2FAApB,oBAAoB;kBADhC,IAAI;mBAAC,EAAC,IAAI,EAAE,kBAAkB,EAAC;;0BAIf,MAAM;2BAAC,yBAAyB","sourcesContent":["import {Inject, Pipe, PipeTransform} from '@angular/core';\nimport {StringDictionary} from '@jscrpt/common';\n\nimport {VALIDATION_ERROR_MESSAGES} from '../../../../misc/tokens';\n\n/**\n * Filters array of errors with messages\n */\n@Pipe({name: 'withErrorMessage'})\nexport class WithErrorMessagePipe implements PipeTransform\n{\n //######################### constructor #########################\n constructor(@Inject(VALIDATION_ERROR_MESSAGES) protected _errorMessages: StringDictionary)\n {\n }\n\n //######################### public methods - implementation of PipeTransform #########################\n\n /**\n * Filters array of errors with messages\n * @param value - Array of error names\n */\n public transform(value: string[]): string[]\n {\n if(!value?.length)\n {\n return value;\n }\n\n return value.filter(itm => this._errorMessages[itm]);\n }\n}"]}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
2
3
|
import { HasErrorDirective } from '../directives/hasError/hasError.directive';
|
|
3
4
|
import { GroupHasErrorDirective } from '../directives/groupHasError/groupHasError.directive';
|
|
5
|
+
import { GroupHasErrorContainerDirective, ValidationErrorsContainerDirective } from '../directives';
|
|
6
|
+
import { DefaultValidationErrorsComponent, DefaultValidationErrorsContainerComponent, ReservedSpaceValidationErrorsContainerComponent } from '../components';
|
|
4
7
|
import * as i0 from "@angular/core";
|
|
5
8
|
/**
|
|
6
9
|
* Module for input validation directives
|
|
@@ -9,19 +12,38 @@ export class HasErrorModule {
|
|
|
9
12
|
}
|
|
10
13
|
HasErrorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: HasErrorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
14
|
HasErrorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: HasErrorModule, declarations: [HasErrorDirective,
|
|
12
|
-
GroupHasErrorDirective
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
GroupHasErrorDirective,
|
|
16
|
+
GroupHasErrorContainerDirective,
|
|
17
|
+
ValidationErrorsContainerDirective,
|
|
18
|
+
DefaultValidationErrorsComponent,
|
|
19
|
+
DefaultValidationErrorsContainerComponent,
|
|
20
|
+
ReservedSpaceValidationErrorsContainerComponent], imports: [CommonModule], exports: [HasErrorDirective,
|
|
21
|
+
GroupHasErrorDirective,
|
|
22
|
+
GroupHasErrorContainerDirective,
|
|
23
|
+
ValidationErrorsContainerDirective] });
|
|
24
|
+
HasErrorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: HasErrorModule, imports: [[
|
|
25
|
+
CommonModule,
|
|
26
|
+
]] });
|
|
15
27
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: HasErrorModule, decorators: [{
|
|
16
28
|
type: NgModule,
|
|
17
29
|
args: [{
|
|
30
|
+
imports: [
|
|
31
|
+
CommonModule,
|
|
32
|
+
],
|
|
18
33
|
declarations: [
|
|
19
34
|
HasErrorDirective,
|
|
20
|
-
GroupHasErrorDirective
|
|
35
|
+
GroupHasErrorDirective,
|
|
36
|
+
GroupHasErrorContainerDirective,
|
|
37
|
+
ValidationErrorsContainerDirective,
|
|
38
|
+
DefaultValidationErrorsComponent,
|
|
39
|
+
DefaultValidationErrorsContainerComponent,
|
|
40
|
+
ReservedSpaceValidationErrorsContainerComponent,
|
|
21
41
|
],
|
|
22
42
|
exports: [
|
|
23
43
|
HasErrorDirective,
|
|
24
|
-
GroupHasErrorDirective
|
|
44
|
+
GroupHasErrorDirective,
|
|
45
|
+
GroupHasErrorContainerDirective,
|
|
46
|
+
ValidationErrorsContainerDirective,
|
|
25
47
|
]
|
|
26
48
|
}]
|
|
27
49
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasError.module.js","sourceRoot":"","sources":["../../../../forms/src/modules/hasError.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"hasError.module.js","sourceRoot":"","sources":["../../../../forms/src/modules/hasError.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAC,iBAAiB,EAAC,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAC,sBAAsB,EAAC,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAC,+BAA+B,EAAE,kCAAkC,EAAC,MAAM,eAAe,CAAC;AAClG,OAAO,EAAC,gCAAgC,EAAE,yCAAyC,EAAE,+CAA+C,EAAC,MAAM,eAAe,CAAC;;AAE3J;;GAEG;AAyBH,MAAM,OAAO,cAAc;;2GAAd,cAAc;4GAAd,cAAc,iBAhBnB,iBAAiB;QACjB,sBAAsB;QACtB,+BAA+B;QAC/B,kCAAkC;QAClC,gCAAgC;QAChC,yCAAyC;QACzC,+CAA+C,aAV/C,YAAY,aAcZ,iBAAiB;QACjB,sBAAsB;QACtB,+BAA+B;QAC/B,kCAAkC;4GAG7B,cAAc,YArBvB;YACI,YAAY;SACf;2FAmBQ,cAAc;kBAxB1B,QAAQ;mBACT;oBACI,OAAO,EACP;wBACI,YAAY;qBACf;oBACD,YAAY,EACZ;wBACI,iBAAiB;wBACjB,sBAAsB;wBACtB,+BAA+B;wBAC/B,kCAAkC;wBAClC,gCAAgC;wBAChC,yCAAyC;wBACzC,+CAA+C;qBAClD;oBACD,OAAO,EACP;wBACI,iBAAiB;wBACjB,sBAAsB;wBACtB,+BAA+B;wBAC/B,kCAAkC;qBACrC;iBACJ","sourcesContent":["import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {HasErrorDirective} from '../directives/hasError/hasError.directive';\nimport {GroupHasErrorDirective} from '../directives/groupHasError/groupHasError.directive';\nimport {GroupHasErrorContainerDirective, ValidationErrorsContainerDirective} from '../directives';\nimport {DefaultValidationErrorsComponent, DefaultValidationErrorsContainerComponent, ReservedSpaceValidationErrorsContainerComponent} from '../components';\n\n/**\n * Module for input validation directives\n */\n@NgModule(\n{\n imports:\n [\n CommonModule,\n ],\n declarations: \n [\n HasErrorDirective,\n GroupHasErrorDirective,\n GroupHasErrorContainerDirective,\n ValidationErrorsContainerDirective,\n DefaultValidationErrorsComponent,\n DefaultValidationErrorsContainerComponent,\n ReservedSpaceValidationErrorsContainerComponent,\n ],\n exports: \n [\n HasErrorDirective,\n GroupHasErrorDirective,\n GroupHasErrorContainerDirective,\n ValidationErrorsContainerDirective,\n ]\n})\nexport class HasErrorModule\n{\n}"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injectable, Inject, Optional } from '@angular/core';
|
|
2
2
|
import { STRING_LOCALIZATION } from '@anglr/common';
|
|
3
3
|
import { extend, isString } from '@jscrpt/common';
|
|
4
|
-
import { VALIDATION_ERROR_MESSAGES } from '../../misc/
|
|
4
|
+
import { IGNORED_VALIDATION_ERRORS, VALIDATION_ERROR_MESSAGES } from '../../misc/tokens';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
/**
|
|
7
7
|
* Default error messages displayed
|
|
@@ -15,14 +15,14 @@ const defaultErrorMessages = {
|
|
|
15
15
|
minlength: 'Value is short.',
|
|
16
16
|
maxlength: 'Value is too long.'
|
|
17
17
|
};
|
|
18
|
-
//TODO: support exceptions for error names, allow to have string value to be used as error from error
|
|
19
18
|
/**
|
|
20
19
|
* Service used for extracting error messages from form control
|
|
21
20
|
*/
|
|
22
21
|
export class ErrorMessagesExtractor {
|
|
23
22
|
//######################### constructor #########################
|
|
24
|
-
constructor(_stringLocalization, globalErrorMessages) {
|
|
23
|
+
constructor(_stringLocalization, _ignoredValidationErrors, globalErrorMessages) {
|
|
25
24
|
this._stringLocalization = _stringLocalization;
|
|
25
|
+
this._ignoredValidationErrors = _ignoredValidationErrors;
|
|
26
26
|
this._errorMessages = extend(true, {}, defaultErrorMessages, globalErrorMessages);
|
|
27
27
|
}
|
|
28
28
|
//######################### public methods #########################
|
|
@@ -38,7 +38,7 @@ export class ErrorMessagesExtractor {
|
|
|
38
38
|
return null;
|
|
39
39
|
}
|
|
40
40
|
const result = {
|
|
41
|
-
errors: Object.keys(control.errors),
|
|
41
|
+
errors: Object.keys(control.errors).filter(itm => this._ignoredValidationErrors.indexOf(itm) < 0),
|
|
42
42
|
errorMessages: []
|
|
43
43
|
};
|
|
44
44
|
result.errors.forEach(error => {
|
|
@@ -47,6 +47,10 @@ export class ErrorMessagesExtractor {
|
|
|
47
47
|
if (errorMessages[error]) {
|
|
48
48
|
result.errorMessages.push(this._stringLocalization.get(errorMessages[error], control.errors));
|
|
49
49
|
}
|
|
50
|
+
//display error data if it is string and there is missing translation
|
|
51
|
+
else if (isString(errorData)) {
|
|
52
|
+
result.errorMessages.push(errorData);
|
|
53
|
+
}
|
|
50
54
|
//error data are array of strings, each string is considered error message
|
|
51
55
|
else if (Array.isArray(errorData)) {
|
|
52
56
|
errorData.forEach(errorItm => {
|
|
@@ -59,7 +63,7 @@ export class ErrorMessagesExtractor {
|
|
|
59
63
|
return result;
|
|
60
64
|
}
|
|
61
65
|
}
|
|
62
|
-
ErrorMessagesExtractor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, deps: [{ token: STRING_LOCALIZATION }, { token: VALIDATION_ERROR_MESSAGES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
66
|
+
ErrorMessagesExtractor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, deps: [{ token: STRING_LOCALIZATION }, { token: IGNORED_VALIDATION_ERRORS }, { token: VALIDATION_ERROR_MESSAGES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
63
67
|
ErrorMessagesExtractor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, providedIn: 'root' });
|
|
64
68
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, decorators: [{
|
|
65
69
|
type: Injectable,
|
|
@@ -67,6 +71,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
67
71
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
68
72
|
type: Inject,
|
|
69
73
|
args: [STRING_LOCALIZATION]
|
|
74
|
+
}] }, { type: undefined, decorators: [{
|
|
75
|
+
type: Inject,
|
|
76
|
+
args: [IGNORED_VALIDATION_ERRORS]
|
|
70
77
|
}] }, { type: undefined, decorators: [{
|
|
71
78
|
type: Inject,
|
|
72
79
|
args: [VALIDATION_ERROR_MESSAGES]
|
package/es2020/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorMessagesExtractor.service.js","sourceRoot":"","sources":["../../../../../forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAqB,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACtE,OAAO,EAAmB,MAAM,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAC,yBAAyB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"errorMessagesExtractor.service.js","sourceRoot":"","sources":["../../../../../forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {Injectable, Inject, Optional} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {StringLocalization, STRING_LOCALIZATION} from '@anglr/common';\nimport {StringDictionary, extend, isString} from '@jscrpt/common';\n\nimport {IGNORED_VALIDATION_ERRORS, VALIDATION_ERROR_MESSAGES} from '../../misc/tokens';\nimport {ValidationErrorsResult} from './errorMessagesExtractor.interface';\n\n/**\n * Default error messages displayed\n */\nconst defaultErrorMessages: StringDictionary =\n{\n required: 'Field is required.',\n number: 'Value must be number.',\n pattern: 'Value is not valid.',\n minValue: 'Value is too small.',\n maxValue: 'Value is too big.',\n minlength: 'Value is short.',\n maxlength: 'Value is too long.'\n};\n\n/**\n * Service used for extracting error messages from form control\n */\n@Injectable({providedIn: 'root'})\nexport class ErrorMessagesExtractor\n{\n //######################### protected fields #########################\n\n /**\n * Dictionary with error names that have defined message\n */\n protected _errorMessages: StringDictionary;\n\n //######################### constructor #########################\n constructor(@Inject(STRING_LOCALIZATION) protected _stringLocalization: StringLocalization,\n @Inject(IGNORED_VALIDATION_ERRORS) protected _ignoredValidationErrors: string[],\n @Inject(VALIDATION_ERROR_MESSAGES) @Optional() globalErrorMessages?: StringDictionary)\n {\n this._errorMessages = extend(true, {}, defaultErrorMessages, globalErrorMessages);\n }\n\n //######################### public methods #########################\n\n /**\n * Gets validation errors result for provided control, or null of no errors are present\n * @param control - Form control instance that should be inspected for errors\n * @param messages - Object containing error messages that should patch existing error messages\n */\n public getErrors(control: FormControl, messages?: StringDictionary): ValidationErrorsResult\n {\n const errorMessages: StringDictionary = extend(true, {}, this._errorMessages, messages);\n\n //no control or no errors\n if(!control || !control.errors)\n {\n return null;\n }\n\n const result: ValidationErrorsResult =\n {\n errors: Object.keys(control.errors).filter(itm => this._ignoredValidationErrors.indexOf(itm) < 0),\n errorMessages: []\n };\n\n result.errors.forEach(error =>\n {\n const errorData = control.errors[error];\n \n //error message is present for error\n if(errorMessages[error])\n {\n result.errorMessages.push(this._stringLocalization.get(errorMessages[error], control.errors));\n }\n //display error data if it is string and there is missing translation\n else if(isString(errorData))\n {\n result.errorMessages.push(errorData);\n }\n //error data are array of strings, each string is considered error message\n else if(Array.isArray(errorData))\n {\n errorData.forEach(errorItm =>\n {\n if(isString(errorItm))\n {\n result.errorMessages.push(this._stringLocalization.get(errorItm, control.errors));\n }\n });\n }\n });\n\n return result;\n }\n}"]}
|