@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 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 = (_c = model.ɵControlsMetadata) !== null && _c !== void 0 ? _c : {};
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 = (_d = modelMetadata[propertyName]) !== null && _d !== void 0 ? _d : ɵDefaultPropertyMetadata;
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":"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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 validators: model.ɵValidators?.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()(args) : validator).filter(itm => !!itm),\n asyncValidators: model.ɵAsyncValidators?.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()(args) : validator).filter(itm => !!itm)\n });\n }\n\n const modelMetadata: Dictionary<any> = model.ɵControlsMetadata ?? {};\n const properties = Object.keys(model);\n const formGroup: FormGroup = new FormGroup({});\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
+ {"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, Injector } from '@angular/core';
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(injector, globalErrorMessages) {
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: i0.Injector }, { token: VALIDATION_ERROR_MESSAGES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
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: i0.Injector }, { type: undefined, decorators: [{
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
  }, {
@@ -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,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAErE,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,0EAA0E;AAC1E,qGAAqG;AAErG;;GAEG;AAEH,MAAM,OAAO,sBAAsB;IAc/B,iEAAiE;IACjE,YAAY,QAAkB,EAC6B,mBAAsC;QAE7F,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;QAClF,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjE,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;;mHApEQ,sBAAsB,0CAgBX,yBAAyB;uHAhBpC,sBAAsB,cADV,MAAM;2FAClB,sBAAsB;kBADlC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAiBf,MAAM;2BAAC,yBAAyB;;0BAAG,QAAQ","sourcesContent":["import {Injectable, Inject, Optional, Injector} 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: move string localization service into constructor, breaking change\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 /**\n * String localization service\n */\n protected _stringLocalization: StringLocalization;\n\n //######################### constructor #########################\n constructor(injector: Injector,\n @Inject(VALIDATION_ERROR_MESSAGES) @Optional() globalErrorMessages?: StringDictionary)\n {\n this._errorMessages = extend(true, {}, defaultErrorMessages, globalErrorMessages);\n this._stringLocalization = injector.get(STRING_LOCALIZATION);\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
+ {"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":"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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 validators: model.ɵValidators?.map(validator => validator instanceof ValidatorFnFactory ? validator.valueOf()(args) : validator).filter(itm => !!itm),\n asyncValidators: model.ɵAsyncValidators?.map(validator => validator instanceof AsyncValidatorFnFactory ? validator.valueOf()(args) : validator).filter(itm => !!itm)\n });\n }\n\n const modelMetadata: Dictionary<any> = model.ɵControlsMetadata ?? {};\n const properties = Object.keys(model);\n const formGroup: FormGroup = new FormGroup({});\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
+ {"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, Injector } from '@angular/core';
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(injector, globalErrorMessages) {
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: i0.Injector }, { token: VALIDATION_ERROR_MESSAGES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
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: i0.Injector }, { type: undefined, decorators: [{
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
  }, {
@@ -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,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAErE,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,0EAA0E;AAC1E,qGAAqG;AAErG;;GAEG;AAEH,MAAM,OAAO,sBAAsB;IAc/B,iEAAiE;IACjE,YAAY,QAAkB,EAC6B,mBAAsC;QAE7F,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;QAClF,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjE,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;;mHApEQ,sBAAsB,0CAgBX,yBAAyB;uHAhBpC,sBAAsB,cADV,MAAM;2FAClB,sBAAsB;kBADlC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAiBf,MAAM;2BAAC,yBAAyB;;0BAAG,QAAQ","sourcesContent":["import {Injectable, Inject, Optional, Injector} 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: move string localization service into constructor, breaking change\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 /**\n * String localization service\n */\n protected _stringLocalization: StringLocalization;\n\n //######################### constructor #########################\n constructor(injector: Injector,\n @Inject(VALIDATION_ERROR_MESSAGES) @Optional() globalErrorMessages?: StringDictionary)\n {\n this._errorMessages = extend(true, {}, defaultErrorMessages, globalErrorMessages);\n this._stringLocalization = injector.get(STRING_LOCALIZATION);\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
+ {"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;AAE7D,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;IAEhD;;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;CACtE"}
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;AA8HlF;;;;;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
+ {"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":"AAAA,OAAO,EAA+B,QAAQ,EAAC,MAAM,eAAe,CAAC;AACrE,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;;AAmB1E;;GAEG;AACH,qBACa,sBAAsB;IAI/B;;OAEG;IACH,SAAS,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAE3C;;OAEG;IACH,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;gBAGtC,QAAQ,EAAE,QAAQ,EAC6B,mBAAmB,CAAC,EAAE,gBAAgB;IAQjG;;;;OAIG;IACI,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,sBAAsB;yCA7BlF,sBAAsB;6CAAtB,sBAAsB;CAqElC"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anglr/common",
3
- "version": "12.0.0-beta.20220413104159",
3
+ "version": "12.0.0-beta.20220413111906",
4
4
  "description": "Angular module for common angular stuff",
5
5
  "type": "module",
6
6
  "sideEffects": false,
package/version.bak CHANGED
@@ -1 +1 @@
1
- 12.0.0-beta.20220413104159
1
+ 12.0.0-beta.20220413111906