@anglr/common 12.0.0-beta.20220413104159 → 12.0.0-beta.20220413111906
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 +10 -0
- package/es2015/forms/src/misc/formModel/interfaces/modelDecoratorMetadata.js.map +1 -1
- package/es2015/forms/src/misc/formModel/misc/utils.js +11 -8
- package/es2015/forms/src/misc/formModel/misc/utils.js.map +1 -1
- package/es2015/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js +8 -6
- package/es2015/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js.map +1 -1
- package/es2020/forms/src/misc/formModel/interfaces/modelDecoratorMetadata.js.map +1 -1
- package/es2020/forms/src/misc/formModel/misc/utils.js +8 -5
- package/es2020/forms/src/misc/formModel/misc/utils.js.map +1 -1
- package/es2020/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js +8 -6
- package/es2020/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.js.map +1 -1
- package/forms/src/misc/formModel/interfaces/modelDecoratorMetadata.d.ts +6 -1
- package/forms/src/misc/formModel/interfaces/modelDecoratorMetadata.d.ts.map +1 -1
- package/forms/src/misc/formModel/misc/utils.d.ts.map +1 -1
- package/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.d.ts +2 -6
- package/forms/src/services/errorMessagesExtractor/errorMessagesExtractor.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/version.bak +1 -1
package/changelog.md
CHANGED
|
@@ -7,6 +7,14 @@
|
|
|
7
7
|
- *subpackage* `@anglr/common/forms`
|
|
8
8
|
- fixed double error displaying for validations, when submit clicked
|
|
9
9
|
- fixed `FormGroupValidator` and `FormGroupAsyncValidator`, now works correctly
|
|
10
|
+
- fixed `buildFormGroup` function, now correctly applies form group validators
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- *subpackage* `@anglr/common/forms`
|
|
15
|
+
- **Form Model Builder**
|
|
16
|
+
- updated `ModelDecoratorMetadata`
|
|
17
|
+
- property `ɵArgs` object storing additional arguments for customization
|
|
10
18
|
|
|
11
19
|
### BREAKING CHANGES
|
|
12
20
|
|
|
@@ -14,6 +22,8 @@
|
|
|
14
22
|
- `update` method, has now only one parameter
|
|
15
23
|
- `ValidationErrorRendererFactory` service
|
|
16
24
|
- now implements updated `ValidationErrorRenderer`
|
|
25
|
+
- `ErrorMessagesExtractor` service
|
|
26
|
+
- changed constructor parameters
|
|
17
27
|
|
|
18
28
|
## Version 11.3.1 (2022-04-13)
|
|
19
29
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelDecoratorMetadata.js","sourceRoot":"","sources":["../../../../../../forms/src/misc/formModel/interfaces/modelDecoratorMetadata.ts"],"names":[],"mappings":"","sourcesContent":["import {AsyncValidatorFn, ValidatorFn} from '@angular/forms';\n\nimport {AsyncValidatorFnFactory, ValidatorFnFactory} from '../misc/validatorFactories';\nimport {ModelPropertyDecoratorMetadata} from './modelPropertyDecoratorMetadata';\n\n/**\n * Metadata describing whole model\n */\nexport interface ModelDecoratorMetadata<TModel = any>\n{\n /**\n * Array of controls metadata\n */\n ɵControlsMetadata: Partial<Record<keyof TModel, ModelPropertyDecoratorMetadata>>;\n\n /**\n * Array of validator functions\n */\n ɵValidators?: Array<ValidatorFn|ValidatorFnFactory>;\n\n /**\n * Array of async validator functions\n */\n ɵAsyncValidators?: Array<AsyncValidatorFn|AsyncValidatorFnFactory>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"modelDecoratorMetadata.js","sourceRoot":"","sources":["../../../../../../forms/src/misc/formModel/interfaces/modelDecoratorMetadata.ts"],"names":[],"mappings":"","sourcesContent":["import {AsyncValidatorFn, ValidatorFn} from '@angular/forms';\nimport {Dictionary} from '@jscrpt/common';\n\nimport {AsyncValidatorFnFactory, ValidatorFnFactory} from '../misc/validatorFactories';\nimport {ModelPropertyDecoratorMetadata} from './modelPropertyDecoratorMetadata';\n\n/**\n * Metadata describing whole model\n */\nexport interface ModelDecoratorMetadata<TModel = any, TArgs extends Dictionary<any> = any>\n{\n /**\n * Array of controls metadata\n */\n ɵControlsMetadata: Partial<Record<keyof TModel, ModelPropertyDecoratorMetadata>>;\n\n /**\n * Array of validator functions\n */\n ɵValidators?: Array<ValidatorFn|ValidatorFnFactory>;\n\n /**\n * Array of async validator functions\n */\n ɵAsyncValidators?: Array<AsyncValidatorFn|AsyncValidatorFnFactory>;\n\n /**\n * Object storing additional arguments for customization\n */\n ɵArgs?: TArgs;\n}\n"]}
|
|
@@ -8,18 +8,21 @@ import { AsyncValidatorFnFactory, ValidatorFnFactory } from './validatorFactorie
|
|
|
8
8
|
* @returns
|
|
9
9
|
*/
|
|
10
10
|
function buildFormGroup(model, args) {
|
|
11
|
-
var _a, _b, _c, _d;
|
|
11
|
+
var _a, _b, _c, _d, _e;
|
|
12
12
|
if (!model) {
|
|
13
|
-
return new FormGroup({}
|
|
14
|
-
validators: (_a = model.ɵValidators) === null || _a === void 0 ? void 0 : _a.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()(args) : validator).filter(itm => !!itm),
|
|
15
|
-
asyncValidators: (_b = model.ɵAsyncValidators) === null || _b === void 0 ? void 0 : _b.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()(args) : validator).filter(itm => !!itm)
|
|
16
|
-
});
|
|
13
|
+
return new FormGroup({});
|
|
17
14
|
}
|
|
18
|
-
const modelMetadata = (
|
|
15
|
+
const modelMetadata = (_a = model.ɵControlsMetadata) !== null && _a !== void 0 ? _a : {};
|
|
16
|
+
const groupValidators = (_b = model.ɵValidators) !== null && _b !== void 0 ? _b : [];
|
|
17
|
+
const groupAsyncValidators = (_c = model.ɵAsyncValidators) !== null && _c !== void 0 ? _c : [];
|
|
18
|
+
const groupArgs = (_d = model.ɵArgs) !== null && _d !== void 0 ? _d : {};
|
|
19
19
|
const properties = Object.keys(model);
|
|
20
|
-
const formGroup = new FormGroup({}
|
|
20
|
+
const formGroup = new FormGroup({}, {
|
|
21
|
+
validators: groupValidators === null || groupValidators === void 0 ? void 0 : groupValidators.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()(Object.assign(Object.assign({}, groupArgs), args)) : validator).filter(itm => !!itm),
|
|
22
|
+
asyncValidators: groupAsyncValidators === null || groupAsyncValidators === void 0 ? void 0 : groupAsyncValidators.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()(Object.assign(Object.assign({}, groupArgs), args)) : validator).filter(itm => !!itm)
|
|
23
|
+
});
|
|
21
24
|
for (const propertyName of properties) {
|
|
22
|
-
const metadata = (
|
|
25
|
+
const metadata = (_e = modelMetadata[propertyName]) !== null && _e !== void 0 ? _e : ɵDefaultPropertyMetadata;
|
|
23
26
|
const defaultValue = model[propertyName];
|
|
24
27
|
//Skip control creation if value is undefined
|
|
25
28
|
if (defaultValue === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../forms/src/misc/formModel/misc/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAKlF,OAAO,EAAC,wBAAwB,EAAC,MAAM,YAAY,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAE,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAEjF;;;;;GAKG;AACH,SAAS,cAAc,CAAwC,KAAuD,EAAE,IAAY;;IAEhI,IAAG,CAAC,KAAK,EACT;QACI,OAAO,IAAI,SAAS,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../forms/src/misc/formModel/misc/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {AbstractControl, FormArray, FormControl, FormGroup} from '@angular/forms';\nimport {Dictionary} from '@jscrpt/common';\n\nimport {ModelDecoratorMetadata} from '../interfaces/modelDecoratorMetadata';\nimport {ModelPropertyDecoratorMetadata} from '../interfaces/modelPropertyDecoratorMetadata';\nimport {ɵDefaultPropertyMetadata} from './defaults';\nimport {AsyncValidatorFnFactory, ValidatorFnFactory} from './validatorFactories';\n\n/**\n * Builds form group from decorated model\n * @param model - Model that can be decorated for enhancing created form group with validation and so on\n * @param args - Object storing arguments from owning component for customization\n * @returns\n */\nfunction buildFormGroup<TModel, TArgs = Record<string, never>>(model: ModelDecoratorMetadata<TModel> & Dictionary<any>, args?: TArgs): FormGroup\n{\n if(!model)\n {\n return new FormGroup({});\n }\n\n const modelMetadata: Dictionary<any> = model.ɵControlsMetadata ?? {};\n const groupValidators = model.ɵValidators ?? [];\n const groupAsyncValidators = model.ɵAsyncValidators ?? [];\n const groupArgs: Dictionary<any> = model.ɵArgs ?? {};\n const properties = Object.keys(model);\n const formGroup: FormGroup = new FormGroup({},\n {\n validators: groupValidators?.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()({...groupArgs, ...args}) : validator).filter(itm => !!itm),\n asyncValidators: groupAsyncValidators?.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()({...groupArgs, ...args}) : validator).filter(itm => !!itm)\n });\n\n for(const propertyName of properties)\n {\n const metadata: ModelPropertyDecoratorMetadata = modelMetadata[propertyName] ?? ɵDefaultPropertyMetadata;\n const defaultValue = model[propertyName];\n\n //Skip control creation if value is undefined\n if(defaultValue === undefined)\n {\n continue;\n }\n\n const validators = metadata.validators.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()({...metadata.args, ...args}) : validator).filter(itm => !!itm);\n const asyncValidators = metadata.asyncValidators.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()({...metadata.args, ...args}) : validator).filter(itm => !!itm);\n\n let control: AbstractControl;\n\n switch(metadata.type)\n {\n case FormGroup:\n {\n control = buildFormGroup(defaultValue, args);\n\n //TODO: think of setting metadata from property to model\n\n break;\n }\n case FormArray:\n {\n //TODO - enhance FormArray child definition and finish it\n control = new FormArray([],\n {\n validators: validators,\n asyncValidators: asyncValidators,\n ...metadata.controlOptions\n });\n\n if(defaultValue && Array.isArray(defaultValue))\n {\n const formArray = control as FormArray;\n\n for(const val of defaultValue)\n {\n switch(metadata.childType)\n {\n case FormGroup:\n {\n formArray.push(buildFormGroup(val, args));\n\n break;\n }\n case FormArray:\n {\n break;\n }\n default:\n //case FormControl:\n {\n formArray.push(new FormControl(val,\n {\n validators: validators,\n asyncValidators: asyncValidators,\n ...metadata.controlOptions\n }));\n\n break;\n }\n }\n }\n }\n\n break;\n }\n default:\n //case FormControl:\n {\n control = new FormControl(defaultValue,\n {\n validators: validators,\n asyncValidators: asyncValidators,\n ...metadata.controlOptions\n });\n\n break;\n }\n }\n\n if(metadata.disabled)\n {\n control.disable();\n }\n\n formGroup.addControl(propertyName, control);\n }\n\n return formGroup;\n}\n\n/**\n * Builds form from decorated model, only for properties with non `undefined` value\n * @param model - Model that can be decorated for enhancing created form group with validation and so on\n * @param args - Object storing arguments from owning component for customization\n * @returns\n */\nexport function buildFormModel<TModel, TArgs = Record<string, never>>(model: TModel, args?: TArgs): FormGroup\n{\n return buildFormGroup(model as any, args);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable, Inject, Optional
|
|
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
4
|
import { VALIDATION_ERROR_MESSAGES } from '../../misc/types';
|
|
@@ -15,16 +15,15 @@ const defaultErrorMessages = {
|
|
|
15
15
|
minlength: 'Value is short.',
|
|
16
16
|
maxlength: 'Value is too long.'
|
|
17
17
|
};
|
|
18
|
-
//TODO: move string localization service into constructor, breaking change
|
|
19
18
|
//TODO: support exceptions for error names, allow to have string value to be used as error from error
|
|
20
19
|
/**
|
|
21
20
|
* Service used for extracting error messages from form control
|
|
22
21
|
*/
|
|
23
22
|
export class ErrorMessagesExtractor {
|
|
24
23
|
//######################### constructor #########################
|
|
25
|
-
constructor(
|
|
24
|
+
constructor(_stringLocalization, globalErrorMessages) {
|
|
25
|
+
this._stringLocalization = _stringLocalization;
|
|
26
26
|
this._errorMessages = extend(true, {}, defaultErrorMessages, globalErrorMessages);
|
|
27
|
-
this._stringLocalization = injector.get(STRING_LOCALIZATION);
|
|
28
27
|
}
|
|
29
28
|
//######################### public methods #########################
|
|
30
29
|
/**
|
|
@@ -60,12 +59,15 @@ export class ErrorMessagesExtractor {
|
|
|
60
59
|
return result;
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
|
-
ErrorMessagesExtractor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, deps: [{ token:
|
|
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 });
|
|
64
63
|
ErrorMessagesExtractor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, providedIn: 'root' });
|
|
65
64
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, decorators: [{
|
|
66
65
|
type: Injectable,
|
|
67
66
|
args: [{ providedIn: 'root' }]
|
|
68
|
-
}], ctorParameters: function () { return [{ type:
|
|
67
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
68
|
+
type: Inject,
|
|
69
|
+
args: [STRING_LOCALIZATION]
|
|
70
|
+
}] }, { type: undefined, decorators: [{
|
|
69
71
|
type: Inject,
|
|
70
72
|
args: [VALIDATION_ERROR_MESSAGES]
|
|
71
73
|
}, {
|
package/es2015/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,
|
|
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,kBAAkB,CAAC;;AAG3D;;GAEG;AACH,MAAM,oBAAoB,GAC1B;IACI,QAAQ,EAAE,oBAAoB;IAC9B,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,qBAAqB;IAC/B,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,oBAAoB;CAClC,CAAC;AAEF,qGAAqG;AAErG;;GAEG;AAEH,MAAM,OAAO,sBAAsB;IAS/B,iEAAiE;IACjE,YAAmD,mBAAuC,EAC/B,mBAAsC;QAD9C,wBAAmB,GAAnB,mBAAmB,CAAoB;QAGtF,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;IACtF,CAAC;IAED,oEAAoE;IAEpE;;;;OAIG;IACI,SAAS,CAAC,OAAoB,EAAE,QAA2B;QAE9D,MAAM,aAAa,GAAqB,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAExF,yBAAyB;QACzB,IAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAC9B;YACI,OAAO,IAAI,CAAC;SACf;QAED,MAAM,MAAM,GACZ;YACI,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACnC,aAAa,EAAE,EAAE;SACpB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAE1B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAExC,oCAAoC;YACpC,IAAG,aAAa,CAAC,KAAK,CAAC,EACvB;gBACI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;aACjG;YACD,0EAA0E;iBACrE,IAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAChC;gBACI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAEzB,IAAG,QAAQ,CAAC,QAAQ,CAAC,EACrB;wBACI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;qBACrF;gBACL,CAAC,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;;mHA9DQ,sBAAsB,kBAUX,mBAAmB,aACnB,yBAAyB;uHAXpC,sBAAsB,cADV,MAAM;2FAClB,sBAAsB;kBADlC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAWf,MAAM;2BAAC,mBAAmB;;0BAC1B,MAAM;2BAAC,yBAAyB;;0BAAG,QAAQ","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 {VALIDATION_ERROR_MESSAGES} from '../../misc/types';\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//TODO: support exceptions for error names, allow to have string value to be used as error from error\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(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),\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 //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}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelDecoratorMetadata.js","sourceRoot":"","sources":["../../../../../../forms/src/misc/formModel/interfaces/modelDecoratorMetadata.ts"],"names":[],"mappings":"","sourcesContent":["import {AsyncValidatorFn, ValidatorFn} from '@angular/forms';\n\nimport {AsyncValidatorFnFactory, ValidatorFnFactory} from '../misc/validatorFactories';\nimport {ModelPropertyDecoratorMetadata} from './modelPropertyDecoratorMetadata';\n\n/**\n * Metadata describing whole model\n */\nexport interface ModelDecoratorMetadata<TModel = any>\n{\n /**\n * Array of controls metadata\n */\n ɵControlsMetadata: Partial<Record<keyof TModel, ModelPropertyDecoratorMetadata>>;\n\n /**\n * Array of validator functions\n */\n ɵValidators?: Array<ValidatorFn|ValidatorFnFactory>;\n\n /**\n * Array of async validator functions\n */\n ɵAsyncValidators?: Array<AsyncValidatorFn|AsyncValidatorFnFactory>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"modelDecoratorMetadata.js","sourceRoot":"","sources":["../../../../../../forms/src/misc/formModel/interfaces/modelDecoratorMetadata.ts"],"names":[],"mappings":"","sourcesContent":["import {AsyncValidatorFn, ValidatorFn} from '@angular/forms';\nimport {Dictionary} from '@jscrpt/common';\n\nimport {AsyncValidatorFnFactory, ValidatorFnFactory} from '../misc/validatorFactories';\nimport {ModelPropertyDecoratorMetadata} from './modelPropertyDecoratorMetadata';\n\n/**\n * Metadata describing whole model\n */\nexport interface ModelDecoratorMetadata<TModel = any, TArgs extends Dictionary<any> = any>\n{\n /**\n * Array of controls metadata\n */\n ɵControlsMetadata: Partial<Record<keyof TModel, ModelPropertyDecoratorMetadata>>;\n\n /**\n * Array of validator functions\n */\n ɵValidators?: Array<ValidatorFn|ValidatorFnFactory>;\n\n /**\n * Array of async validator functions\n */\n ɵAsyncValidators?: Array<AsyncValidatorFn|AsyncValidatorFnFactory>;\n\n /**\n * Object storing additional arguments for customization\n */\n ɵArgs?: TArgs;\n}\n"]}
|
|
@@ -9,14 +9,17 @@ import { AsyncValidatorFnFactory, ValidatorFnFactory } from './validatorFactorie
|
|
|
9
9
|
*/
|
|
10
10
|
function buildFormGroup(model, args) {
|
|
11
11
|
if (!model) {
|
|
12
|
-
return new FormGroup({}
|
|
13
|
-
validators: model.ɵValidators?.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()(args) : validator).filter(itm => !!itm),
|
|
14
|
-
asyncValidators: model.ɵAsyncValidators?.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()(args) : validator).filter(itm => !!itm)
|
|
15
|
-
});
|
|
12
|
+
return new FormGroup({});
|
|
16
13
|
}
|
|
17
14
|
const modelMetadata = model.ɵControlsMetadata ?? {};
|
|
15
|
+
const groupValidators = model.ɵValidators ?? [];
|
|
16
|
+
const groupAsyncValidators = model.ɵAsyncValidators ?? [];
|
|
17
|
+
const groupArgs = model.ɵArgs ?? {};
|
|
18
18
|
const properties = Object.keys(model);
|
|
19
|
-
const formGroup = new FormGroup({}
|
|
19
|
+
const formGroup = new FormGroup({}, {
|
|
20
|
+
validators: groupValidators?.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()({ ...groupArgs, ...args }) : validator).filter(itm => !!itm),
|
|
21
|
+
asyncValidators: groupAsyncValidators?.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()({ ...groupArgs, ...args }) : validator).filter(itm => !!itm)
|
|
22
|
+
});
|
|
20
23
|
for (const propertyName of properties) {
|
|
21
24
|
const metadata = modelMetadata[propertyName] ?? ɵDefaultPropertyMetadata;
|
|
22
25
|
const defaultValue = model[propertyName];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../forms/src/misc/formModel/misc/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAKlF,OAAO,EAAC,wBAAwB,EAAC,MAAM,YAAY,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAE,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAEjF;;;;;GAKG;AACH,SAAS,cAAc,CAAwC,KAAuD,EAAE,IAAY;IAEhI,IAAG,CAAC,KAAK,EACT;QACI,OAAO,IAAI,SAAS,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../forms/src/misc/formModel/misc/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {AbstractControl, FormArray, FormControl, FormGroup} from '@angular/forms';\nimport {Dictionary} from '@jscrpt/common';\n\nimport {ModelDecoratorMetadata} from '../interfaces/modelDecoratorMetadata';\nimport {ModelPropertyDecoratorMetadata} from '../interfaces/modelPropertyDecoratorMetadata';\nimport {ɵDefaultPropertyMetadata} from './defaults';\nimport {AsyncValidatorFnFactory, ValidatorFnFactory} from './validatorFactories';\n\n/**\n * Builds form group from decorated model\n * @param model - Model that can be decorated for enhancing created form group with validation and so on\n * @param args - Object storing arguments from owning component for customization\n * @returns\n */\nfunction buildFormGroup<TModel, TArgs = Record<string, never>>(model: ModelDecoratorMetadata<TModel> & Dictionary<any>, args?: TArgs): FormGroup\n{\n if(!model)\n {\n return new FormGroup({});\n }\n\n const modelMetadata: Dictionary<any> = model.ɵControlsMetadata ?? {};\n const groupValidators = model.ɵValidators ?? [];\n const groupAsyncValidators = model.ɵAsyncValidators ?? [];\n const groupArgs: Dictionary<any> = model.ɵArgs ?? {};\n const properties = Object.keys(model);\n const formGroup: FormGroup = new FormGroup({},\n {\n validators: groupValidators?.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()({...groupArgs, ...args}) : validator).filter(itm => !!itm),\n asyncValidators: groupAsyncValidators?.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()({...groupArgs, ...args}) : validator).filter(itm => !!itm)\n });\n\n for(const propertyName of properties)\n {\n const metadata: ModelPropertyDecoratorMetadata = modelMetadata[propertyName] ?? ɵDefaultPropertyMetadata;\n const defaultValue = model[propertyName];\n\n //Skip control creation if value is undefined\n if(defaultValue === undefined)\n {\n continue;\n }\n\n const validators = metadata.validators.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()({...metadata.args, ...args}) : validator).filter(itm => !!itm);\n const asyncValidators = metadata.asyncValidators.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()({...metadata.args, ...args}) : validator).filter(itm => !!itm);\n\n let control: AbstractControl;\n\n switch(metadata.type)\n {\n case FormGroup:\n {\n control = buildFormGroup(defaultValue, args);\n\n //TODO: think of setting metadata from property to model\n\n break;\n }\n case FormArray:\n {\n //TODO - enhance FormArray child definition and finish it\n control = new FormArray([],\n {\n validators: validators,\n asyncValidators: asyncValidators,\n ...metadata.controlOptions\n });\n\n if(defaultValue && Array.isArray(defaultValue))\n {\n const formArray = control as FormArray;\n\n for(const val of defaultValue)\n {\n switch(metadata.childType)\n {\n case FormGroup:\n {\n formArray.push(buildFormGroup(val, args));\n\n break;\n }\n case FormArray:\n {\n break;\n }\n default:\n //case FormControl:\n {\n formArray.push(new FormControl(val,\n {\n validators: validators,\n asyncValidators: asyncValidators,\n ...metadata.controlOptions\n }));\n\n break;\n }\n }\n }\n }\n\n break;\n }\n default:\n //case FormControl:\n {\n control = new FormControl(defaultValue,\n {\n validators: validators,\n asyncValidators: asyncValidators,\n ...metadata.controlOptions\n });\n\n break;\n }\n }\n\n if(metadata.disabled)\n {\n control.disable();\n }\n\n formGroup.addControl(propertyName, control);\n }\n\n return formGroup;\n}\n\n/**\n * Builds form from decorated model, only for properties with non `undefined` value\n * @param model - Model that can be decorated for enhancing created form group with validation and so on\n * @param args - Object storing arguments from owning component for customization\n * @returns\n */\nexport function buildFormModel<TModel, TArgs = Record<string, never>>(model: TModel, args?: TArgs): FormGroup\n{\n return buildFormGroup(model as any, args);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable, Inject, Optional
|
|
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
4
|
import { VALIDATION_ERROR_MESSAGES } from '../../misc/types';
|
|
@@ -15,16 +15,15 @@ const defaultErrorMessages = {
|
|
|
15
15
|
minlength: 'Value is short.',
|
|
16
16
|
maxlength: 'Value is too long.'
|
|
17
17
|
};
|
|
18
|
-
//TODO: move string localization service into constructor, breaking change
|
|
19
18
|
//TODO: support exceptions for error names, allow to have string value to be used as error from error
|
|
20
19
|
/**
|
|
21
20
|
* Service used for extracting error messages from form control
|
|
22
21
|
*/
|
|
23
22
|
export class ErrorMessagesExtractor {
|
|
24
23
|
//######################### constructor #########################
|
|
25
|
-
constructor(
|
|
24
|
+
constructor(_stringLocalization, globalErrorMessages) {
|
|
25
|
+
this._stringLocalization = _stringLocalization;
|
|
26
26
|
this._errorMessages = extend(true, {}, defaultErrorMessages, globalErrorMessages);
|
|
27
|
-
this._stringLocalization = injector.get(STRING_LOCALIZATION);
|
|
28
27
|
}
|
|
29
28
|
//######################### public methods #########################
|
|
30
29
|
/**
|
|
@@ -60,12 +59,15 @@ export class ErrorMessagesExtractor {
|
|
|
60
59
|
return result;
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
|
-
ErrorMessagesExtractor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, deps: [{ token:
|
|
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 });
|
|
64
63
|
ErrorMessagesExtractor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, providedIn: 'root' });
|
|
65
64
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: ErrorMessagesExtractor, decorators: [{
|
|
66
65
|
type: Injectable,
|
|
67
66
|
args: [{ providedIn: 'root' }]
|
|
68
|
-
}], ctorParameters: function () { return [{ type:
|
|
67
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
68
|
+
type: Inject,
|
|
69
|
+
args: [STRING_LOCALIZATION]
|
|
70
|
+
}] }, { type: undefined, decorators: [{
|
|
69
71
|
type: Inject,
|
|
70
72
|
args: [VALIDATION_ERROR_MESSAGES]
|
|
71
73
|
}, {
|
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,
|
|
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,kBAAkB,CAAC;;AAG3D;;GAEG;AACH,MAAM,oBAAoB,GAC1B;IACI,QAAQ,EAAE,oBAAoB;IAC9B,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,qBAAqB;IAC/B,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,oBAAoB;CAClC,CAAC;AAEF,qGAAqG;AAErG;;GAEG;AAEH,MAAM,OAAO,sBAAsB;IAS/B,iEAAiE;IACjE,YAAmD,mBAAuC,EAC/B,mBAAsC;QAD9C,wBAAmB,GAAnB,mBAAmB,CAAoB;QAGtF,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;IACtF,CAAC;IAED,oEAAoE;IAEpE;;;;OAIG;IACI,SAAS,CAAC,OAAoB,EAAE,QAA2B;QAE9D,MAAM,aAAa,GAAqB,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAExF,yBAAyB;QACzB,IAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAC9B;YACI,OAAO,IAAI,CAAC;SACf;QAED,MAAM,MAAM,GACZ;YACI,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACnC,aAAa,EAAE,EAAE;SACpB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAE1B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAExC,oCAAoC;YACpC,IAAG,aAAa,CAAC,KAAK,CAAC,EACvB;gBACI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;aACjG;YACD,0EAA0E;iBACrE,IAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAChC;gBACI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAEzB,IAAG,QAAQ,CAAC,QAAQ,CAAC,EACrB;wBACI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;qBACrF;gBACL,CAAC,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;;mHA9DQ,sBAAsB,kBAUX,mBAAmB,aACnB,yBAAyB;uHAXpC,sBAAsB,cADV,MAAM;2FAClB,sBAAsB;kBADlC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAWf,MAAM;2BAAC,mBAAmB;;0BAC1B,MAAM;2BAAC,yBAAyB;;0BAAG,QAAQ","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 {VALIDATION_ERROR_MESSAGES} from '../../misc/types';\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//TODO: support exceptions for error names, allow to have string value to be used as error from error\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(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),\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 //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}"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { AsyncValidatorFn, ValidatorFn } from '@angular/forms';
|
|
2
|
+
import { Dictionary } from '@jscrpt/common';
|
|
2
3
|
import { AsyncValidatorFnFactory, ValidatorFnFactory } from '../misc/validatorFactories';
|
|
3
4
|
import { ModelPropertyDecoratorMetadata } from './modelPropertyDecoratorMetadata';
|
|
4
5
|
/**
|
|
5
6
|
* Metadata describing whole model
|
|
6
7
|
*/
|
|
7
|
-
export interface ModelDecoratorMetadata<TModel = any> {
|
|
8
|
+
export interface ModelDecoratorMetadata<TModel = any, TArgs extends Dictionary<any> = any> {
|
|
8
9
|
/**
|
|
9
10
|
* Array of controls metadata
|
|
10
11
|
*/
|
|
@@ -17,5 +18,9 @@ export interface ModelDecoratorMetadata<TModel = any> {
|
|
|
17
18
|
* Array of async validator functions
|
|
18
19
|
*/
|
|
19
20
|
ɵAsyncValidators?: Array<AsyncValidatorFn | AsyncValidatorFnFactory>;
|
|
21
|
+
/**
|
|
22
|
+
* Object storing additional arguments for customization
|
|
23
|
+
*/
|
|
24
|
+
ɵArgs?: TArgs;
|
|
20
25
|
}
|
|
21
26
|
//# sourceMappingURL=modelDecoratorMetadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelDecoratorMetadata.d.ts","sourceRoot":"","sources":["modelDecoratorMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"modelDecoratorMetadata.d.ts","sourceRoot":"","sources":["modelDecoratorMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAC,uBAAuB,EAAE,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,MAAM,GAAG,GAAG,EAAE,KAAK,SAAS,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG;IAErF;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,MAAM,EAAE,8BAA8B,CAAC,CAAC,CAAC;IAEjF;;OAEG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,WAAW,GAAC,kBAAkB,CAAC,CAAC;IAEpD;;OAEG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,gBAAgB,GAAC,uBAAuB,CAAC,CAAC;IAEnE;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,SAAS,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAiIlF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,SAAS,CAG5G"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Injector } from '@angular/core';
|
|
2
1
|
import { FormControl } from '@angular/forms';
|
|
3
2
|
import { StringLocalization } from '@anglr/common';
|
|
4
3
|
import { StringDictionary } from '@jscrpt/common';
|
|
@@ -8,15 +7,12 @@ import * as i0 from "@angular/core";
|
|
|
8
7
|
* Service used for extracting error messages from form control
|
|
9
8
|
*/
|
|
10
9
|
export declare class ErrorMessagesExtractor {
|
|
10
|
+
protected _stringLocalization: StringLocalization;
|
|
11
11
|
/**
|
|
12
12
|
* Dictionary with error names that have defined message
|
|
13
13
|
*/
|
|
14
14
|
protected _errorMessages: StringDictionary;
|
|
15
|
-
|
|
16
|
-
* String localization service
|
|
17
|
-
*/
|
|
18
|
-
protected _stringLocalization: StringLocalization;
|
|
19
|
-
constructor(injector: Injector, globalErrorMessages?: StringDictionary);
|
|
15
|
+
constructor(_stringLocalization: StringLocalization, globalErrorMessages?: StringDictionary);
|
|
20
16
|
/**
|
|
21
17
|
* Gets validation errors result for provided control, or null of no errors are present
|
|
22
18
|
* @param control - Form control instance that should be inspected for errors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorMessagesExtractor.service.d.ts","sourceRoot":"","sources":["errorMessagesExtractor.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errorMessagesExtractor.service.d.ts","sourceRoot":"","sources":["errorMessagesExtractor.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,kBAAkB,EAAsB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAC,gBAAgB,EAAmB,MAAM,gBAAgB,CAAC;AAGlE,OAAO,EAAC,sBAAsB,EAAC,MAAM,oCAAoC,CAAC;;AAkB1E;;GAEG;AACH,qBACa,sBAAsB;IAUU,SAAS,CAAC,mBAAmB,EAAE,kBAAkB;IAN1F;;OAEG;IACH,SAAS,CAAC,cAAc,EAAE,gBAAgB,CAAC;gBAGQ,mBAAmB,EAAE,kBAAkB,EAC/B,mBAAmB,CAAC,EAAE,gBAAgB;IAOjG;;;;OAIG;IACI,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,sBAAsB;yCAvBlF,sBAAsB;6CAAtB,sBAAsB;CA+DlC"}
|
package/package.json
CHANGED
package/version.bak
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
12.0.0-beta.
|
|
1
|
+
12.0.0-beta.20220413111906
|