mmhglobal-dynamicform 2.7.3 → 2.9.0

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.
Files changed (29) hide show
  1. package/README.md +8 -0
  2. package/esm2020/lib/components/fieldbase.component.mjs +5 -3
  3. package/esm2020/lib/input-error-message/input-error-message.component.mjs +9 -10
  4. package/esm2020/lib/services/main.service.mjs +10 -11
  5. package/esm2020/lib/services/zcomponent.debug.service.mjs +7 -8
  6. package/esm2020/lib/zinput-container/zinput-container.component.mjs +2 -2
  7. package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +13 -14
  8. package/esm2020/lib/zmodal/zmodal.component.mjs +12 -13
  9. package/esm2020/lib/znumeric/znumeric.component.mjs +51 -3
  10. package/esm2020/lib/zudf/zudf.component.mjs +9 -10
  11. package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +11 -25
  12. package/esm2020/public-api.mjs +1 -2
  13. package/fesm2015/mmhglobal-dynamicform.mjs +189 -270
  14. package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
  15. package/fesm2020/mmhglobal-dynamicform.mjs +189 -270
  16. package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
  17. package/lib/components/fieldbase.component.d.ts +4 -1
  18. package/lib/input-error-message/input-error-message.component.d.ts +3 -4
  19. package/lib/services/main.service.d.ts +3 -4
  20. package/lib/services/zcomponent.debug.service.d.ts +3 -4
  21. package/lib/zmodal/zmodal-mobile.component.d.ts +3 -4
  22. package/lib/zmodal/zmodal.component.d.ts +3 -4
  23. package/lib/znumeric/znumeric.component.d.ts +8 -2
  24. package/lib/zudf/zudf.component.d.ts +1 -2
  25. package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +3 -4
  26. package/package.json +1 -1
  27. package/public-api.d.ts +0 -1
  28. package/esm2020/lib/services/component-error-handler.service.mjs +0 -121
  29. package/lib/services/component-error-handler.service.d.ts +0 -19
@@ -15,7 +15,7 @@ export declare class FieldBase {
15
15
  componentProperties: ZComponentProperties;
16
16
  isLoading: boolean;
17
17
  constructor(componentService: ZComponentService);
18
- initComponent(): Observable<any>;
18
+ initComponent(options?: FieldSetupOption): Observable<any>;
19
19
  setupInnerField(): void;
20
20
  isMobileScreen(): boolean;
21
21
  getClass(form: FormGroup, data: ZField): string;
@@ -32,3 +32,6 @@ export declare class FieldBase {
32
32
  static ɵfac: i0.ɵɵFactoryDeclaration<FieldBase, never>;
33
33
  static ɵcmp: i0.ɵɵComponentDeclaration<FieldBase, "ng-component", never, { "data": "data"; "group": "group"; "form": "form"; "containerField": "containerField"; "componentProperties": "componentProperties"; }, {}, never, never>;
34
34
  }
35
+ export interface FieldSetupOption {
36
+ isRegisterComponent?: boolean;
37
+ }
@@ -3,15 +3,14 @@ import { OnInit } from "@angular/core";
3
3
  /********** Component & Service **********/
4
4
  import { FieldBase } from "../components/fieldbase.component";
5
5
  import { ZComponentService } from "../services/zcomponent.service";
6
- import { ComponentErrorHandlerService } from "../services/component-error-handler.service";
7
- import { FontAweSomeService, TranslationService, ZComponent } from 'mmhglobal-zcore';
6
+ import { FontAweSomeService, TranslationService, ComponentErrorHandlerService, ZComponent } from 'mmhglobal-zcore';
8
7
  import * as i0 from "@angular/core";
9
8
  export declare class InputErrorMessageComponent extends FieldBase implements ZComponent, OnInit {
10
9
  componentService: ZComponentService;
11
10
  fontAweSomeService: FontAweSomeService;
12
- private componentErrorHandler;
11
+ private componentErrorHandlerService;
13
12
  private translationService;
14
- constructor(componentService: ZComponentService, fontAweSomeService: FontAweSomeService, componentErrorHandler: ComponentErrorHandlerService, translationService: TranslationService);
13
+ constructor(componentService: ZComponentService, fontAweSomeService: FontAweSomeService, componentErrorHandlerService: ComponentErrorHandlerService, translationService: TranslationService);
15
14
  errMsgList: any[];
16
15
  ngOnInit(): void;
17
16
  IsShow(): boolean;
@@ -7,9 +7,8 @@ import { Observable, Subscription } from 'rxjs';
7
7
  import { DialogRef, DialogService, DialogSettings } from '@progress/kendo-angular-dialog';
8
8
  /********** Component & Service **********/
9
9
  import { ZComponentDebugService } from './zcomponent.debug.service';
10
- import { ComponentErrorHandlerService } from './component-error-handler.service';
11
10
  import { ModalService, ModalResponse } from 'mmhglobal-zmodal';
12
- import { AlertService, CacheService, FieldService, ResourceApiService, TranslationService, WebApiService, StorageSessionService, OAuth2Service, SignalrService, ZComponentOutputEvent, ZComponentSize, ZCoreService, ZField, ZGroup, PushChangeEvent } from 'mmhglobal-zcore';
11
+ import { AlertService, CacheService, FieldService, ResourceApiService, TranslationService, WebApiService, StorageSessionService, OAuth2Service, SignalrService, ComponentErrorHandlerService, ZComponentOutputEvent, ZComponentSize, ZCoreService, ZField, ZGroup, PushChangeEvent } from 'mmhglobal-zcore';
13
12
  import * as i0 from "@angular/core";
14
13
  export declare class MainService {
15
14
  private router;
@@ -20,7 +19,7 @@ export declare class MainService {
20
19
  private cacheService;
21
20
  private fieldService;
22
21
  private resourceApiService;
23
- private componentErrorHandler;
22
+ private componentErrorHandlerService;
24
23
  private webApiService;
25
24
  private zcoreService;
26
25
  private modalService;
@@ -42,7 +41,7 @@ export declare class MainService {
42
41
  private NAVIGATED_RELOAD_GRID_STORAGE_KEY;
43
42
  private CLONE_NEW_MODEL_CACHE_KEY;
44
43
  private readonly secretKey;
45
- constructor(router: Router, activatedRoute: ActivatedRoute, modalCtrl: ModalController, navController: NavController, alertService: AlertService, cacheService: CacheService, fieldService: FieldService, resourceApiService: ResourceApiService, componentErrorHandler: ComponentErrorHandlerService, webApiService: WebApiService, zcoreService: ZCoreService, modalService: ModalService, storageService: StorageSessionService, debugService: ZComponentDebugService, translationService: TranslationService, signalr: SignalrService, dialogService: DialogService, oauth2Service: OAuth2Service);
44
+ constructor(router: Router, activatedRoute: ActivatedRoute, modalCtrl: ModalController, navController: NavController, alertService: AlertService, cacheService: CacheService, fieldService: FieldService, resourceApiService: ResourceApiService, componentErrorHandlerService: ComponentErrorHandlerService, webApiService: WebApiService, zcoreService: ZCoreService, modalService: ModalService, storageService: StorageSessionService, debugService: ZComponentDebugService, translationService: TranslationService, signalr: SignalrService, dialogService: DialogService, oauth2Service: OAuth2Service);
46
45
  getListFieldName: (fieldName: string) => Observable<string>;
47
46
  clearFormListFields: () => void;
48
47
  signalrGetEvent(): Observable<PushChangeEvent>;
@@ -2,9 +2,8 @@ import { Router } from '@angular/router';
2
2
  /********** Plugin **********/
3
3
  import { Observable } from 'rxjs';
4
4
  /********** Component & Service **********/
5
- import { AlertService, AuthService, FieldService, ResourceApiService, ToastService, WebApiService, ZComponentOutputEvent, ZField, ZGroup } from "mmhglobal-zcore";
5
+ import { AlertService, AuthService, ComponentErrorHandlerService, FieldService, ResourceApiService, ToastService, WebApiService, ZComponentOutputEvent, ZField, ZGroup } from "mmhglobal-zcore";
6
6
  import { ModalService } from 'mmhglobal-zmodal';
7
- import { ComponentErrorHandlerService } from "./component-error-handler.service";
8
7
  import * as i0 from "@angular/core";
9
8
  export declare class ZComponentDebugService {
10
9
  private router;
@@ -12,11 +11,11 @@ export declare class ZComponentDebugService {
12
11
  private authService;
13
12
  private fieldService;
14
13
  private resourceApiService;
15
- private componentErrorHandler;
14
+ private componentErrorHandlerService;
16
15
  private toastService;
17
16
  private modalService;
18
17
  private webApiService;
19
- constructor(router: Router, alertService: AlertService, authService: AuthService, fieldService: FieldService, resourceApiService: ResourceApiService, componentErrorHandler: ComponentErrorHandlerService, toastService: ToastService, modalService: ModalService, webApiService: WebApiService);
18
+ constructor(router: Router, alertService: AlertService, authService: AuthService, fieldService: FieldService, resourceApiService: ResourceApiService, componentErrorHandlerService: ComponentErrorHandlerService, toastService: ToastService, modalService: ModalService, webApiService: WebApiService);
20
19
  private scope;
21
20
  get debug(): any;
22
21
  get group(): ZGroup;
@@ -4,19 +4,18 @@ import { OnInit, OnDestroy } from "@angular/core";
4
4
  /********** Plugin **********/
5
5
  import { Subscription, Observable } from "rxjs";
6
6
  /********** Component & Service **********/
7
- import { WebApiService, ModalPageParams, ZGroup, ZCoreService, ZComponentOutputEvent, FieldService } from "mmhglobal-zcore";
8
- import { ComponentErrorHandlerService } from "../services/component-error-handler.service";
7
+ import { WebApiService, ModalPageParams, ZGroup, ZCoreService, ZComponentOutputEvent, FieldService, ComponentErrorHandlerService } from "mmhglobal-zcore";
9
8
  import * as i0 from "@angular/core";
10
9
  export declare class ZmodalMobileComponent implements OnInit, OnDestroy {
11
10
  private webApiService;
12
11
  private zcoreService;
13
- private componentErrorHandler;
12
+ private componentErrorHandlerService;
14
13
  private fieldService;
15
14
  modalParams: ModalPageParams;
16
15
  group: ZGroup;
17
16
  subscription: Subscription;
18
17
  backButtonSubscription: Subscription;
19
- constructor(webApiService: WebApiService, zcoreService: ZCoreService, componentErrorHandler: ComponentErrorHandlerService, // Use in mmhglobal-zmodal.helper
18
+ constructor(webApiService: WebApiService, zcoreService: ZCoreService, componentErrorHandlerService: ComponentErrorHandlerService, // Use in mmhglobal-zmodal.helper
20
19
  fieldService: FieldService);
21
20
  ngOnInit(): void;
22
21
  ngOnDestroy(): void;
@@ -6,8 +6,7 @@ import { ModalController, Platform } from "@ionic/angular";
6
6
  import { Subscription, Observable } from "rxjs";
7
7
  import { DialogContentBase, DialogRef } from '@progress/kendo-angular-dialog';
8
8
  /********** Component & Service **********/
9
- import { ZGroup, ModalPageParams, WebApiService, AlertService, ZCoreService, FieldService, ResourceApiService, ZComponentOutputEvent } from "mmhglobal-zcore";
10
- import { ComponentErrorHandlerService } from "../services/component-error-handler.service";
9
+ import { ZGroup, ModalPageParams, WebApiService, AlertService, ZCoreService, FieldService, ResourceApiService, ZComponentOutputEvent, ComponentErrorHandlerService } from "mmhglobal-zcore";
11
10
  import * as i0 from "@angular/core";
12
11
  export declare class ZmodalComponent extends DialogContentBase implements OnInit, OnDestroy {
13
12
  dialog: DialogRef;
@@ -15,7 +14,7 @@ export declare class ZmodalComponent extends DialogContentBase implements OnInit
15
14
  private zcoreService;
16
15
  private webApiService;
17
16
  private resourceApiService;
18
- private componentErrorHandler;
17
+ private componentErrorHandlerService;
19
18
  private fieldService;
20
19
  private platform;
21
20
  private alertService;
@@ -23,7 +22,7 @@ export declare class ZmodalComponent extends DialogContentBase implements OnInit
23
22
  group: ZGroup;
24
23
  subscription: Subscription;
25
24
  backButtonSubscription: Subscription;
26
- constructor(dialog: DialogRef, modalCtrl: ModalController, zcoreService: ZCoreService, webApiService: WebApiService, resourceApiService: ResourceApiService, componentErrorHandler: ComponentErrorHandlerService, // Use in mmhglobal-zmodal.helper
25
+ constructor(dialog: DialogRef, modalCtrl: ModalController, zcoreService: ZCoreService, webApiService: WebApiService, resourceApiService: ResourceApiService, componentErrorHandlerService: ComponentErrorHandlerService, // Use in mmhglobal-zmodal.helper
27
26
  fieldService: FieldService, platform: Platform, alertService: AlertService);
28
27
  ngOnInit(): void;
29
28
  ngOnDestroy(): void;
@@ -1,5 +1,5 @@
1
1
  /********** Angular **********/
2
- import { OnInit } from '@angular/core';
2
+ import { OnDestroy, OnInit } from '@angular/core';
3
3
  /********** Ionic **********/
4
4
  /********** Plugin **********/
5
5
  import { NumericTextBoxComponent } from '@progress/kendo-angular-inputs';
@@ -8,18 +8,24 @@ import { InputFieldBase } from '../components/inputfieldbase.component';
8
8
  import { ZComponentService } from '../services/zcomponent.service';
9
9
  import { ZComponent } from "mmhglobal-zcore";
10
10
  import * as i0 from "@angular/core";
11
- export declare class ZnumericComponent extends InputFieldBase implements ZComponent, OnInit {
11
+ export declare class ZnumericComponent extends InputFieldBase implements ZComponent, OnInit, OnDestroy {
12
12
  componentService: ZComponentService;
13
13
  numeric: NumericTextBoxComponent;
14
14
  inputMode: string;
15
15
  minValue: number;
16
16
  maxValue: number;
17
+ private minValidator;
18
+ private maxValidator;
17
19
  constructor(componentService: ZComponentService);
18
20
  ngOnInit(): void;
21
+ ngOnDestroy(): void;
19
22
  ngAfterViewInit(): void;
20
23
  setMinValue(newValue: number): void;
21
24
  setMaxValue(newValue: number): void;
22
25
  focus(): boolean;
26
+ private setInitMinAndMaxValue;
27
+ private addMinAndMaxValidator;
28
+ private removeMinAndMaxValidator;
23
29
  static ɵfac: i0.ɵɵFactoryDeclaration<ZnumericComponent, never>;
24
30
  static ɵcmp: i0.ɵɵComponentDeclaration<ZnumericComponent, "app-znumeric", never, {}, {}, never, never>;
25
31
  }
@@ -2,8 +2,7 @@
2
2
  import { OnInit, ChangeDetectorRef } from "@angular/core";
3
3
  import { FormGroup } from "@angular/forms";
4
4
  /********** Component & Service **********/
5
- import { ZComponent, ZField, FieldService, ToastService, ZGroup, ZComponentProperties } from 'mmhglobal-zcore';
6
- import { ComponentErrorHandlerService } from "../services/component-error-handler.service";
5
+ import { ZComponent, ZField, FieldService, ToastService, ZGroup, ZComponentProperties, ComponentErrorHandlerService } from 'mmhglobal-zcore';
7
6
  import { ContainerFieldBase } from "../components/containerfieldbase.component";
8
7
  import { ZComponentService } from "../services/zcomponent.service";
9
8
  import * as i0 from "@angular/core";
@@ -3,15 +3,14 @@ import { OnInit } from '@angular/core';
3
3
  /********** Component & Service **********/
4
4
  import { ButtonFieldBase } from '../components/buttonfieldbase.component';
5
5
  import { ZComponentService } from '../services/zcomponent.service';
6
- import { ComponentErrorHandlerService } from '../services/component-error-handler.service';
7
- import { WebApiService, ResourceApiService, WorkflowService, FontAweSomeService, ZComponent } from 'mmhglobal-zcore';
6
+ import { WebApiService, ResourceApiService, WorkflowService, FontAweSomeService, ComponentErrorHandlerService, ZComponent } from 'mmhglobal-zcore';
8
7
  import * as i0 from "@angular/core";
9
8
  export declare class ZworkflowbuttonsComponent extends ButtonFieldBase implements ZComponent, OnInit {
10
9
  componentService: ZComponentService;
11
10
  fontAweSomeService: FontAweSomeService;
12
11
  private webApiService;
13
12
  private resourceApiService;
14
- private componentErrorHandler;
13
+ private componentErrorHandlerService;
15
14
  private workflowService;
16
15
  e1wfs_wfcGetWorkflowButtonURL: any;
17
16
  e1wfs_wfc_getWorkflowInitialStatusURL: any;
@@ -19,7 +18,7 @@ export declare class ZworkflowbuttonsComponent extends ButtonFieldBase implement
19
18
  dataFormFields: any;
20
19
  isLoading: boolean;
21
20
  isLocalHostAPI: boolean;
22
- constructor(componentService: ZComponentService, fontAweSomeService: FontAweSomeService, webApiService: WebApiService, resourceApiService: ResourceApiService, componentErrorHandler: ComponentErrorHandlerService, workflowService: WorkflowService);
21
+ constructor(componentService: ZComponentService, fontAweSomeService: FontAweSomeService, webApiService: WebApiService, resourceApiService: ResourceApiService, componentErrorHandlerService: ComponentErrorHandlerService, workflowService: WorkflowService);
23
22
  ngOnInit(): void;
24
23
  ngAfterViewInit(): void;
25
24
  loadButton(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mmhglobal-dynamicform",
3
- "version": "2.7.3",
3
+ "version": "2.9.0",
4
4
  "peerDependencies": {},
5
5
  "dependencies": {
6
6
  "tslib": "^2.3.1"
package/public-api.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  /********** Service **********/
2
2
  export * from './lib/services/main.service';
3
- export * from './lib/services/component-error-handler.service';
4
3
  /********** Directive **********/
5
4
  export * from './lib/directives/scrollbar.theme.directive';
6
5
  export * from './lib/directives/fieldelement.directive';
@@ -1,121 +0,0 @@
1
- /********** Angular **********/
2
- import { Injectable } from '@angular/core';
3
- import { ZComponentHelper } from 'mmhglobal-zcore';
4
- import { forkJoin, of, tap, switchMap } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "mmhglobal-zcore";
7
- export class ComponentErrorHandlerService {
8
- constructor(alertService, translationService) {
9
- this.alertService = alertService;
10
- this.translationService = translationService;
11
- }
12
- showFormGroupErrorMessage(group, formGroup) {
13
- formGroup = formGroup || group.form;
14
- of(this.getErrorMessageForInvalidInput(group, formGroup)).pipe(switchMap((errMessageTranslationInput) => {
15
- const obs = new Array();
16
- errMessageTranslationInput.forEach(data => {
17
- obs.push(this.translationService.$translateText(data.errorMessage, { translationVariables: data.translationVariables }));
18
- });
19
- return forkJoin(obs);
20
- }), tap(fieldErrorMessages => {
21
- const errorMessage = fieldErrorMessages.join("<br/>");
22
- this.alertService.showOkay('Form validation failed', errorMessage, ['col-4']);
23
- console.warn("Form Validation got error(s):", errorMessage);
24
- })).subscribe();
25
- }
26
- getErrorMessageForInvalidInput(group, formGroup, controlName) {
27
- formGroup = formGroup || group.form;
28
- if (controlName) {
29
- return this.extractErrorMessageFromControl(formGroup, controlName, group);
30
- }
31
- let allFormControlErrorMessages = new Array();
32
- for (const key of Object.keys(formGroup.controls)) {
33
- const formControlErrorMessages = this.extractErrorMessageFromControl(formGroup, key, group);
34
- allFormControlErrorMessages = allFormControlErrorMessages.concat(formControlErrorMessages);
35
- }
36
- return allFormControlErrorMessages;
37
- }
38
- extractErrorMessageFromControl(formGroup, key, group) {
39
- const errorMsgArr = new Array();
40
- const control = formGroup.get(key);
41
- const controlErrors = control?.errors;
42
- if (control && controlErrors) {
43
- const errorTypes = Object.keys(controlErrors);
44
- for (const errorType of errorTypes) {
45
- let errMessage = null;
46
- if (key.includes('zudf_')) {
47
- const zudf = ZComponentHelper.getZudfByComponent(group, key);
48
- errMessage = this.getErrorMessageByErrorType(errorType, key, zudf['data']['Value'], controlErrors);
49
- }
50
- else {
51
- errMessage = this.getErrorMessageByErrorType(errorType, key, group.fields, controlErrors);
52
- }
53
- if (errMessage.errorMessage) {
54
- errorMsgArr.push(errMessage);
55
- }
56
- }
57
- ;
58
- }
59
- return errorMsgArr;
60
- }
61
- getErrorMessageByErrorType(errorType, controlName, fields, errorDetail) {
62
- const field = ZComponentHelper.getFieldFromFieldsByValue(fields, controlName);
63
- let errorMessage = "";
64
- const translationVariables = { T_FieldName: ZComponentHelper.getFieldLabel(fields, controlName) };
65
- switch (errorType) {
66
- case 'required':
67
- errorMessage = `${this.getErrorMsgAction_Required(field.Type)} the {{T_FieldName}}`;
68
- break;
69
- case 'minlength':
70
- errorMessage = `{{T_FieldName}} must be more than {{T_MinLength}} characters`;
71
- Object.assign(translationVariables, { T_MinLength: errorDetail[errorType].requiredLength });
72
- break;
73
- case 'maxlength':
74
- errorMessage = `{{T_FieldName}} must be less than {{T_MaxLength}} characters`;
75
- Object.assign(translationVariables, { T_MaxLength: errorDetail[errorType].requiredLength });
76
- break;
77
- case 'email':
78
- errorMessage = `Enter a valid email address for {{T_FieldName}}`;
79
- break;
80
- case 'min':
81
- case 'max':
82
- errorMessage = '';
83
- break;
84
- case 'minError':
85
- errorMessage = `{{T_FieldName}} must be equal or more than {{T_MinValue}}`;
86
- Object.assign(translationVariables, { T_MinValue: errorDetail[errorType].minValue });
87
- break;
88
- case 'maxError':
89
- errorMessage = `{{T_FieldName}} must be equal or less than {{T_MaxValue}}`;
90
- Object.assign(translationVariables, { T_MaxValue: errorDetail[errorType].maxValue });
91
- break;
92
- default:
93
- console.warn(`Field Error is not properly handled : ${ZComponentHelper.getFieldLabel(fields, controlName)}`);
94
- errorMessage = `Invalid Field: {{T_FieldName}}`;
95
- break;
96
- }
97
- return {
98
- errorMessage,
99
- translationVariables
100
- };
101
- }
102
- getErrorMsgAction_Required(type) {
103
- switch (type) {
104
- case 'zuiselectmultiple':
105
- case 'zuiselectmultiple_button':
106
- case 'select':
107
- return "Choose";
108
- default:
109
- return "Enter";
110
- }
111
- }
112
- }
113
- ComponentErrorHandlerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ComponentErrorHandlerService, deps: [{ token: i1.AlertService }, { token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Injectable });
114
- ComponentErrorHandlerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ComponentErrorHandlerService, providedIn: 'root' });
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ComponentErrorHandlerService, decorators: [{
116
- type: Injectable,
117
- args: [{
118
- providedIn: 'root',
119
- }]
120
- }], ctorParameters: function () { return [{ type: i1.AlertService }, { type: i1.TranslationService }]; } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWVycm9yLWhhbmRsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3NlcnZpY2VzL2NvbXBvbmVudC1lcnJvci1oYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFvRCxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUtoRSxNQUFNLE9BQU8sNEJBQTRCO0lBRXZDLFlBQW9CLFlBQTBCLEVBQVUsa0JBQXNDO1FBQTFFLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFJLENBQUM7SUFFNUYseUJBQXlCLENBQUMsS0FBYSxFQUFFLFNBQXFCO1FBQ25FLFNBQVMsR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztRQUVwQyxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDNUQsU0FBUyxDQUFDLENBQUMsMEJBQTBCLEVBQUUsRUFBRTtZQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBbUIsQ0FBQztZQUN6QywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMs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QUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRixNQUFLO1lBQ1A7Z0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdHLFlBQVksR0FBRyxnQ0FBZ0MsQ0FBQztnQkFDaEQsTUFBTTtTQUNUO1FBRUQsT0FBTztZQUNMLFlBQVk7WUFDWixvQkFBb0I7U0FDRCxDQUFDO0lBQ3hCLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxJQUFZO1FBQzdDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxtQkFBbUIsQ0FBQztZQUN6QixLQUFLLDBCQUEwQixDQUFDO1lBQ2hDLEtBQUssUUFBUTtnQkFDWCxPQUFPLFFBQVEsQ0FBQztZQUNsQjtnQkFDRSxPQUFPLE9BQU8sQ0FBQztTQUNsQjtJQUNILENBQUM7O3lIQXBIVSw0QkFBNEI7NkhBQTVCLDRCQUE0QixjQUYzQixNQUFNOzJGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIFRyYW5zbGF0aW9uU2VydmljZSwgWkZpZWxkLCBaR3JvdXAsIFpDb21wb25lbnRIZWxwZXIgfSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIHRhcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UpIHsgfVxyXG5cclxuICBwdWJsaWMgc2hvd0Zvcm1Hcm91cEVycm9yTWVzc2FnZShncm91cDogWkdyb3VwLCBmb3JtR3JvdXA/OiBGb3JtR3JvdXApIHtcclxuICAgIGZvcm1Hcm91cCA9IGZvcm1Hcm91cCB8fCBncm91cC5mb3JtO1xyXG5cclxuICAgIG9mKHRoaXMuZ2V0RXJyb3JNZXNzYWdlRm9ySW52YWxpZElucHV0KGdyb3VwLCBmb3JtR3JvdXApKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKGVyck1lc3NhZ2VUcmFuc2xhdGlvbklucHV0KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb2JzID0gbmV3IEFycmF5PE9ic2VydmFibGU8YW55Pj4oKTtcclxuICAgICAgICBlcnJNZXNzYWdlVHJhbnNsYXRpb25JbnB1dC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgb2JzLnB1c2godGhpcy50cmFuc2xhdGlvblNlcnZpY2UuJHRyYW5zbGF0ZVRleHQoZGF0YS5lcnJvck1lc3NhZ2UsIHsgdHJhbnNsYXRpb25WYXJpYWJsZXM6IGRhdGEudHJhbnNsYXRpb25WYXJpYWJsZXMgfSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9icyk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoZmllbGRFcnJvck1lc3NhZ2VzID0+IHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBmaWVsZEVycm9yTWVzc2FnZXMuam9pbihcIjxici8+XCIpO1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dPa2F5KCdGb3JtIHZhbGlkYXRpb24gZmFpbGVkJywgZXJyb3JNZXNzYWdlLCBbJ2NvbC00J10pO1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIkZvcm0gVmFsaWRhdGlvbiBnb3QgZXJyb3Iocyk6XCIsIGVycm9yTWVzc2FnZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEVycm9yTWVzc2FnZUZvckludmFsaWRJbnB1dChncm91cDogWkdyb3VwLCBmb3JtR3JvdXA/OiBGb3JtR3JvdXAsIGNvbnRyb2xOYW1lPzogc3RyaW5nKTogQXJyYXk8VHJhbnNsYXRpb25JbnB1dD4ge1xyXG4gICAgZm9ybUdyb3VwID0gZm9ybUdyb3VwIHx8IGdyb3VwLmZvcm07XHJcblxyXG4gICAgaWYgKGNvbnRyb2xOYW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RFcnJvck1lc3NhZ2VGcm9tQ29udHJvbChmb3JtR3JvdXAsIGNvbnRyb2xOYW1lLCBncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGFsbEZvcm1Db250cm9sRXJyb3JNZXNzYWdlcyA9IG5ldyBBcnJheTxUcmFuc2xhdGlvbklucHV0PigpO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKSkge1xyXG4gICAgICBjb25zdCBmb3JtQ29udHJvbEVycm9yTWVzc2FnZXMgPSB0aGlzLmV4dHJhY3RFcnJvck1lc3NhZ2VGcm9tQ29udHJvbChmb3JtR3JvdXAsIGtleSwgZ3JvdXApO1xyXG4gICAgICBhbGxGb3JtQ29udHJvbEVycm9yTWVzc2FnZXMgPSBhbGxGb3JtQ29udHJvbEVycm9yTWVzc2FnZXMuY29uY2F0KGZvcm1Db250cm9sRXJyb3JNZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxsRm9ybUNvbnRyb2xFcnJvck1lc3NhZ2VzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0RXJyb3JNZXNzYWdlRnJvbUNvbnRyb2woZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGtleTogc3RyaW5nLCBncm91cDogWkdyb3VwKTogQXJyYXk8VHJhbnNsYXRpb25JbnB1dD4ge1xyXG4gICAgY29uc3QgZXJyb3JNc2dBcnIgPSBuZXcgQXJyYXk8VHJhbnNsYXRpb25JbnB1dD4oKTtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGtleSk7XHJcbiAgICBjb25zdCBjb250cm9sRXJyb3JzID0gY29udHJvbD8uZXJyb3JzO1xyXG5cclxuICAgIGlmIChjb250cm9sICYmIGNvbnRyb2xFcnJvcnMpIHtcclxuICAgICAgY29uc3QgZXJyb3JUeXBlcyA9IE9iamVjdC5rZXlzKGNvbnRyb2xFcnJvcnMpO1xyXG4gICAgICBmb3IgKGNvbnN0IGVycm9yVHlwZSBvZiBlcnJvclR5cGVzKSB7XHJcbiAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSBudWxsO1xyXG4gICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3p1ZGZfJykpIHtcclxuICAgICAgICAgIGNvbnN0IHp1ZGYgPSBaQ29tcG9uZW50SGVscGVyLmdldFp1ZGZCeUNvbXBvbmVudChncm91cCwga2V5KTtcclxuICAgICAgICAgIGVyck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZUJ5RXJyb3JUeXBlKGVycm9yVHlwZSwga2V5LCB6dWRmWydkYXRhJ11bJ1ZhbHVlJ10sIGNvbnRyb2xFcnJvcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGVyck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZUJ5RXJyb3JUeXBlKGVycm9yVHlwZSwga2V5LCBncm91cC5maWVsZHMsIGNvbnRyb2xFcnJvcnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVyck1lc3NhZ2UuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICBlcnJvck1zZ0Fyci5wdXNoKGVyck1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXJyb3JNc2dBcnI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZUJ5RXJyb3JUeXBlKGVycm9yVHlwZTogYW55LCBjb250cm9sTmFtZTogc3RyaW5nLCBmaWVsZHM6IFpGaWVsZFtdLCBlcnJvckRldGFpbDogYW55KTogVHJhbnNsYXRpb25JbnB1dCB7XHJcbiAgICBjb25zdCBmaWVsZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0RmllbGRGcm9tRmllbGRzQnlWYWx1ZShmaWVsZHMsIGNvbnRyb2xOYW1lKTtcclxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgY29uc3QgdHJhbnNsYXRpb25WYXJpYWJsZXMgPSB7IFRfRmllbGROYW1lOiBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkTGFiZWwoZmllbGRzLCBjb250cm9sTmFtZSkgfTtcclxuICAgIHN3aXRjaCAoZXJyb3JUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHt0aGlzLmdldEVycm9yTXNnQWN0aW9uX1JlcXVpcmVkKGZpZWxkLlR5cGUpfSB0aGUge3tUX0ZpZWxkTmFtZX19YDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBge3tUX0ZpZWxkTmFtZX19IG11c3QgYmUgbW9yZSB0aGFuIHt7VF9NaW5MZW5ndGh9fSBjaGFyYWN0ZXJzYDtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRyYW5zbGF0aW9uVmFyaWFibGVzLCB7IFRfTWluTGVuZ3RoOiBlcnJvckRldGFpbFtlcnJvclR5cGVdLnJlcXVpcmVkTGVuZ3RoIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtYXhsZW5ndGgnOlxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGB7e1RfRmllbGROYW1lfX0gbXVzdCBiZSBsZXNzIHRoYW4ge3tUX01heExlbmd0aH19IGNoYXJhY3RlcnNgO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odHJhbnNsYXRpb25WYXJpYWJsZXMsIHsgVF9NYXhMZW5ndGg6IGVycm9yRGV0YWlsW2Vycm9yVHlwZV0ucmVxdWlyZWRMZW5ndGggfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VtYWlsJzpcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzIGZvciB7e1RfRmllbGROYW1lfX1gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtaW4nOlxyXG4gICAgICBjYXNlICdtYXgnOlxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ21pbkVycm9yJzpcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBge3tUX0ZpZWxkTmFtZX19IG11c3QgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHt7VF9NaW5WYWx1ZX19YDtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRyYW5zbGF0aW9uVmFyaWFibGVzLCB7IFRfTWluVmFsdWU6IGVycm9yRGV0YWlsW2Vycm9yVHlwZV0ubWluVmFsdWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21heEVycm9yJzpcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBge3tUX0ZpZWxkTmFtZX19IG11c3QgYmUgZXF1YWwgb3IgbGVzcyB0aGFuIHt7VF9NYXhWYWx1ZX19YDtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRyYW5zbGF0aW9uVmFyaWFibGVzLCB7IFRfTWF4VmFsdWU6IGVycm9yRGV0YWlsW2Vycm9yVHlwZV0ubWF4VmFsdWUgfSk7XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oYEZpZWxkIEVycm9yIGlzIG5vdCBwcm9wZXJseSBoYW5kbGVkIDogJHtaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkTGFiZWwoZmllbGRzLCBjb250cm9sTmFtZSl9YCk7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEludmFsaWQgRmllbGQ6IHt7VF9GaWVsZE5hbWV9fWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXJyb3JNZXNzYWdlLFxyXG4gICAgICB0cmFuc2xhdGlvblZhcmlhYmxlc1xyXG4gICAgfSBhcyBUcmFuc2xhdGlvbklucHV0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFcnJvck1zZ0FjdGlvbl9SZXF1aXJlZCh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3p1aXNlbGVjdG11bHRpcGxlJzpcclxuICAgICAgY2FzZSAnenVpc2VsZWN0bXVsdGlwbGVfYnV0dG9uJzpcclxuICAgICAgY2FzZSAnc2VsZWN0JzpcclxuICAgICAgICByZXR1cm4gXCJDaG9vc2VcIjtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gXCJFbnRlclwiO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvbklucHV0IHtcclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICB0cmFuc2xhdGlvblZhcmlhYmxlcz86IGFueTtcclxufVxyXG4iXX0=
@@ -1,19 +0,0 @@
1
- import { FormGroup } from '@angular/forms';
2
- import { AlertService, TranslationService, ZGroup } from 'mmhglobal-zcore';
3
- import * as i0 from "@angular/core";
4
- export declare class ComponentErrorHandlerService {
5
- private alertService;
6
- private translationService;
7
- constructor(alertService: AlertService, translationService: TranslationService);
8
- showFormGroupErrorMessage(group: ZGroup, formGroup?: FormGroup): void;
9
- getErrorMessageForInvalidInput(group: ZGroup, formGroup?: FormGroup, controlName?: string): Array<TranslationInput>;
10
- private extractErrorMessageFromControl;
11
- private getErrorMessageByErrorType;
12
- private getErrorMsgAction_Required;
13
- static ɵfac: i0.ɵɵFactoryDeclaration<ComponentErrorHandlerService, never>;
14
- static ɵprov: i0.ɵɵInjectableDeclaration<ComponentErrorHandlerService>;
15
- }
16
- export interface TranslationInput {
17
- errorMessage: string;
18
- translationVariables?: any;
19
- }