mmhglobal-dynamicform 2.12.2 → 2.12.4

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.
@@ -1618,7 +1618,7 @@ class ZformComponent {
1618
1618
  this.fieldService.incrementComponentCounter(field.FieldElementName);
1619
1619
  }
1620
1620
  if (isFormControl === true) {
1621
- const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
1621
+ const validators = ZComponentHelper.getValidators(field, isVisible, isRequired, this.group);
1622
1622
  formControls[field.Value] = new FormControl(this.group.zModel[field.Value], validators);
1623
1623
  if (ZComponentHelper.hasCCField(field.Type)) {
1624
1624
  const ccValidators = ZComponentHelper.getCCValidators(field, isVisible, isRequired);
@@ -1923,7 +1923,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
1923
1923
  // import { ZComponentHelper, ZComponentOutputEvent, ModalPageParams, ZGrid } from '../dynamicform/zcomponent.model';
1924
1924
  // import { ZGroup, ZField } from '../model/zgroup.model';
1925
1925
  class MainService {
1926
- constructor(router, activatedRoute, modalCtrl, navController, alertService, cacheService, fieldService, resourceApiService, componentErrorHandlerService, webApiService, zcoreService, modalService, storageService, debugService, translationService, signalrService, dialogService, oauth2Service, sharepointService, toastService) {
1926
+ constructor(router, activatedRoute, modalCtrl, navController, alertService, cacheService, fieldService, resourceApiService, componentErrorHandlerService, webApiService, zcoreService, modalService, storageService, debugService, translationService, signalrService, dialogService, oauth2Service, toastService, authService) {
1927
1927
  this.router = router;
1928
1928
  this.activatedRoute = activatedRoute;
1929
1929
  this.modalCtrl = modalCtrl;
@@ -1942,8 +1942,8 @@ class MainService {
1942
1942
  this.signalrService = signalrService;
1943
1943
  this.dialogService = dialogService;
1944
1944
  this.oauth2Service = oauth2Service;
1945
- this.sharepointService = sharepointService;
1946
1945
  this.toastService = toastService;
1946
+ this.authService = authService;
1947
1947
  this.backNavigationPath = [];
1948
1948
  this.routeParam = [];
1949
1949
  this.currentUrl = '';
@@ -2994,63 +2994,69 @@ class MainService {
2994
2994
  }
2995
2995
  }
2996
2996
  alertFormModified(formId, group, resp, eventName) {
2997
- // TODO: 20230830: need to further enhance handling data refresh if there linked child/Id at same page. currently unsure how to pull the linked child record.
2998
2997
  if (!resp) {
2999
2998
  return false;
3000
2999
  }
3001
3000
  const respResult = JSON.parse(resp);
3001
+ if (!respResult.UserName) {
3002
+ return false;
3003
+ }
3002
3004
  if (formId === respResult.Id?.toString() && eventName === window.location.href) {
3003
- if (respResult.Action === ActionType.Delete) {
3004
- this.alertService.show("Record Deleted by Another User", "The current record has been deleted by another user.", [
3005
- { text: "OK", cssClass: "primary" }
3006
- ], ["col-6"], undefined, true).pipe(switchMap((reply) => {
3007
- if (reply === "OK") {
3008
- this.navigateBackToPreviousPage(group);
3009
- return of(true);
3010
- }
3011
- })).subscribe();
3012
- }
3013
- else if (respResult.Action === ActionType.Update) {
3014
- this.webApiService.httpGet$(`${this.group.resourceURL}/${formId}`, null).subscribe(resp => {
3015
- if (resp && resp.RowVersion) {
3016
- // Find properties starting with 'zworkflowbuttons_'
3017
- const workflowButtons = [];
3018
- for (const key in this.group.zComponents) {
3019
- if (key.startsWith("zworkflowbuttons_")) {
3020
- workflowButtons.push(this.group.zComponents[key]);
3021
- }
3022
- }
3023
- if (resp.RowVersion !== this.group.zModel?.RowVersion) {
3024
- this.alertService.show("The current page has been modified by other users.", "Would you like to refresh the page data?", [
3025
- { text: "No", cssClass: "secondary" },
3026
- { text: "Yes", cssClass: "primary" }
3027
- ], ["col-6"], undefined, true).pipe(switchMap((reply) => {
3028
- if (reply === "Yes") {
3029
- this.group.zModel = resp;
3030
- const fg = this.group.form;
3031
- fg.patchValue(this.group.zModel);
3032
- fg.markAsPristine();
3033
- //reload workflow buttons
3034
- workflowButtons.forEach(buttons => {
3035
- buttons.loadButton();
3036
- });
3037
- return of(true);
3038
- }
3039
- workflowButtons.forEach(buttons => {
3040
- buttons.removeGotoButton();
3041
- });
3042
- this.toastService.showPermanently('The data on the current page is not up to date, as it has been saved and overwritten by another user. Please refresh the page.', 'top', 'warning');
3043
- return of(false);
3044
- })).subscribe();
3005
+ if (respResult.UserName === this.authService.e1Token.myProfile.UserName) {
3006
+ if (respResult.Action === ActionType.Update) {
3007
+ this.reloadDataAndWorkflowButton(resp);
3008
+ }
3009
+ }
3010
+ else {
3011
+ if (respResult.Action === ActionType.Delete) {
3012
+ this.alertService.show("Record Deleted by Another User", "The current record has been deleted by another user.", [
3013
+ { text: "OK", cssClass: "primary" }
3014
+ ], ["col-6"], undefined, true).pipe(switchMap((reply) => {
3015
+ if (reply === "OK") {
3016
+ this.navigateBackToPreviousPage(group);
3017
+ return of(true);
3045
3018
  }
3046
- else {
3047
- console.log(`Alert received regarding form modification, RowVersion remains unaltered. No further action has been taken.`);
3019
+ })).subscribe();
3020
+ }
3021
+ else if (respResult.Action === ActionType.Update) {
3022
+ this.webApiService.httpGet$(`${this.group.resourceURL}/${formId}`, null).subscribe(resp => {
3023
+ if (resp && resp.RowVersion) {
3024
+ if (resp.RowVersion !== this.group.zModel?.RowVersion) {
3025
+ this.alertService.show("The current page has been modified by other users.", "Would you like to refresh the page data?", [
3026
+ { text: "No", cssClass: "secondary" },
3027
+ { text: "Yes", cssClass: "primary" }
3028
+ ], ["col-6"], undefined, true).pipe(switchMap((reply) => {
3029
+ if (reply === "Yes") {
3030
+ this.reloadDataAndWorkflowButton(resp);
3031
+ return of(true);
3032
+ }
3033
+ this.toastService.showPermanently('The data on the current page is not up to date, as it has been saved and overwritten by another user. Please refresh the page.', 'top', 'warning');
3034
+ return of(false);
3035
+ })).subscribe();
3036
+ }
3037
+ else {
3038
+ console.log(`Alert received regarding form modification, RowVersion remains unaltered. No further action has been taken.`);
3039
+ }
3048
3040
  }
3049
- }
3050
- });
3041
+ });
3042
+ }
3051
3043
  }
3052
3044
  }
3053
3045
  }
3046
+ reloadDataAndWorkflowButton(zModel) {
3047
+ this.group.zModel = zModel;
3048
+ const fg = this.group.form;
3049
+ fg.patchValue(this.group.zModel);
3050
+ fg.markAsPristine();
3051
+ // Capture all workflow buttons
3052
+ const workflowButtons = Object.keys(this.group.zComponents)
3053
+ .filter(key => key.startsWith("zworkflowbuttons_"))
3054
+ .map(key => this.group.zComponents[key]);
3055
+ // Reload workflow buttons
3056
+ workflowButtons.forEach(button => {
3057
+ button.loadButton();
3058
+ });
3059
+ }
3054
3060
  //#endregion
3055
3061
  // #region DEC
3056
3062
  async loadContainerView(elementContainer, containerPage, data, group) {
@@ -3100,14 +3106,14 @@ class MainService {
3100
3106
  }
3101
3107
  }
3102
3108
  }
3103
- MainService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MainService, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2$1.ModalController }, { token: i2$1.NavController }, { token: i2.AlertService }, { token: i2.CacheService }, { token: i2.FieldService }, { token: i2.ResourceApiService }, { token: i2.ComponentErrorHandlerService }, { token: i2.WebApiService }, { token: i2.ZCoreService }, { token: i3.ModalService }, { token: i2.StorageSessionService }, { token: ZComponentDebugService }, { token: i2.TranslationService }, { token: i2.SignalrService }, { token: i1$2.DialogService }, { token: i2.OAuth2Service }, { token: i2.SharePointService }, { token: i2.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
3109
+ MainService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MainService, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2$1.ModalController }, { token: i2$1.NavController }, { token: i2.AlertService }, { token: i2.CacheService }, { token: i2.FieldService }, { token: i2.ResourceApiService }, { token: i2.ComponentErrorHandlerService }, { token: i2.WebApiService }, { token: i2.ZCoreService }, { token: i3.ModalService }, { token: i2.StorageSessionService }, { token: ZComponentDebugService }, { token: i2.TranslationService }, { token: i2.SignalrService }, { token: i1$2.DialogService }, { token: i2.OAuth2Service }, { token: i2.ToastService }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
3104
3110
  MainService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MainService, providedIn: 'root' });
3105
3111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MainService, decorators: [{
3106
3112
  type: Injectable,
3107
3113
  args: [{
3108
3114
  providedIn: 'root',
3109
3115
  }]
3110
- }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2$1.ModalController }, { type: i2$1.NavController }, { type: i2.AlertService }, { type: i2.CacheService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i2.ComponentErrorHandlerService }, { type: i2.WebApiService }, { type: i2.ZCoreService }, { type: i3.ModalService }, { type: i2.StorageSessionService }, { type: ZComponentDebugService }, { type: i2.TranslationService }, { type: i2.SignalrService }, { type: i1$2.DialogService }, { type: i2.OAuth2Service }, { type: i2.SharePointService }, { type: i2.ToastService }]; } });
3116
+ }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2$1.ModalController }, { type: i2$1.NavController }, { type: i2.AlertService }, { type: i2.CacheService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i2.ComponentErrorHandlerService }, { type: i2.WebApiService }, { type: i2.ZCoreService }, { type: i3.ModalService }, { type: i2.StorageSessionService }, { type: ZComponentDebugService }, { type: i2.TranslationService }, { type: i2.SignalrService }, { type: i1$2.DialogService }, { type: i2.OAuth2Service }, { type: i2.ToastService }, { type: i2.AuthService }]; } });
3111
3117
  function refreshGrid(group) {
3112
3118
  const zgridControl = group["gridOptions"];
3113
3119
  if (zgridControl) {
@@ -3168,16 +3174,7 @@ class ZGridBindingDirective extends DataBindingDirective {
3168
3174
  }
3169
3175
  return;
3170
3176
  }
3171
- const array = this.resourceURL.split("/api/");
3172
- if (!!array[1]) {
3173
- array[1] = "Page" + array[1];
3174
- this.paginationApiPostUrl = array.join("/api/");
3175
- }
3176
- else {
3177
- const arr = this.resourceURL.split("/");
3178
- arr[arr.length - 2] = "Page" + arr[arr.length - 2];
3179
- this.paginationApiPostUrl = arr.join("/");
3180
- }
3177
+ this.setResourceUrl(this.resourceURL);
3181
3178
  this.setFilterParamsByParentRefId();
3182
3179
  }
3183
3180
  // this.gridSubject.next(this);
@@ -3198,6 +3195,18 @@ class ZGridBindingDirective extends DataBindingDirective {
3198
3195
  this.generateGridColumns();
3199
3196
  }
3200
3197
  }
3198
+ setResourceUrl(resourceUrl) {
3199
+ const array = resourceUrl.split("/api/");
3200
+ if (!!array[1]) {
3201
+ array[1] = "Page" + array[1];
3202
+ this.paginationApiPostUrl = array.join("/api/");
3203
+ }
3204
+ else {
3205
+ const arr = this.resourceURL.split("/");
3206
+ arr[arr.length - 2] = "Page" + arr[arr.length - 2];
3207
+ this.paginationApiPostUrl = arr.join("/");
3208
+ }
3209
+ }
3201
3210
  setFilterParamsByParentRefId() {
3202
3211
  // Use field own referenceId if available
3203
3212
  const refId = this.getFieldReferenceId() || this.grp.referenceId;
@@ -4438,7 +4447,7 @@ class UipageComponent {
4438
4447
  this.setupRouteParams(routeParam);
4439
4448
  }
4440
4449
  else {
4441
- console.warn("Error in uipage init.");
4450
+ console.warn("routeParam is undefined.");
4442
4451
  }
4443
4452
  }), switchMap(() => {
4444
4453
  const formType = isListForm ? FieldType.listField : FieldType.formField;
@@ -9147,7 +9156,7 @@ class ZgridComponent extends DataListingFieldBase {
9147
9156
  gridCols.forEach(c => {
9148
9157
  const isVisible = ZComponentHelper.isVisibleFormControl(this, c.field);
9149
9158
  const isRequired = ZComponentHelper.isRequiredFormControl(this, c.field);
9150
- const validators = ZComponentHelper.getValidators(c.field, isVisible, isRequired);
9159
+ const validators = ZComponentHelper.getValidators(c.field, isVisible, isRequired, this.group);
9151
9160
  items[c.field] = new FormControl(d[c.field], validators);
9152
9161
  });
9153
9162
  const formGroup = new FormGroup(items);
@@ -10478,7 +10487,7 @@ class ZtabComponent extends ContainerFieldBase {
10478
10487
  Label: field.Label,
10479
10488
  Icon: field.Icon ? field.Icon : null,
10480
10489
  Visible: ZComponentHelper.getGroupValue(field.Visible, this.group),
10481
- Counter: typeof (field["Counter"]) === "string" ? ZComponentHelper.getGroupValue(field["Counter"], this.group) : field["Counter"],
10490
+ Counter: typeof (field.Counter) === "string" ? ZComponentHelper.getGroupValue(field.Counter, this.group) : field.Counter,
10482
10491
  Index: ind++
10483
10492
  });
10484
10493
  }
@@ -10538,7 +10547,7 @@ class ZtabComponent extends ContainerFieldBase {
10538
10547
  }
10539
10548
  }
10540
10549
  }
10541
- let tabSelections = "tabSelections" in this.group ? this.group['tabSelections'] : null;
10550
+ let tabSelections = ("tabSelections" in this.group ? this.group['tabSelections'] : null);
10542
10551
  if (tabSelections !== null && tabSelections.has(this.data.Name)) { // subsequent loads
10543
10552
  this.state.lastSelectedTabIndex = tabSelections.get(this.data.Name);
10544
10553
  }
@@ -11668,7 +11677,7 @@ class ZudfComponent extends ContainerFieldBase {
11668
11677
  this.toastService = toastService;
11669
11678
  this.componentErrorHandlerService = componentErrorHandlerService;
11670
11679
  this.cdr = cdr;
11671
- // formFields: any[]; // populate using field element.
11680
+ // formFields: any[]; // populate using field element.
11672
11681
  this.componentProperties = new ZComponentProperties();
11673
11682
  this.prefixValueOption = '_zudfmvgOptions';
11674
11683
  this.prefixDataSourceName = '_zudfmvgDataSource';
@@ -12025,7 +12034,7 @@ class ZudfComponent extends ContainerFieldBase {
12025
12034
  });
12026
12035
  }
12027
12036
  // validator for the component
12028
- const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
12037
+ const validators = ZComponentHelper.getValidators(field, isVisible, isRequired, this.group);
12029
12038
  formControls[field.Value] = new FormControl(zudfGroup.zModel[field.Value], validators);
12030
12039
  if (ZComponentHelper.hasCCField(field.Type)) {
12031
12040
  const ccValidators = ZComponentHelper.getCCValidators(field, isVisible, isRequired);
@@ -12074,7 +12083,7 @@ class ZudfComponent extends ContainerFieldBase {
12074
12083
  const patchedModelData = this.addZModelPropertyPrefix(modelData);
12075
12084
  // Update the zModel values of the form group
12076
12085
  Object.assign(group[this.componentScopeName].zModel, patchedModelData);
12077
- // Update grid values for any arrays in the model data base on kcard component.
12086
+ // Update grid values for any arrays in the model data base on kcard component.
12078
12087
  for (const model in patchedModelData) {
12079
12088
  if (Array.isArray(patchedModelData[model])) {
12080
12089
  const gridValue = `${model}${this.prefixValueOption}`;
@@ -12336,7 +12345,7 @@ class ZudfComponent extends ContainerFieldBase {
12336
12345
  });
12337
12346
  this.group[gridDataSourceName] = [];
12338
12347
  this.group[gridColumnFieldsName] = groupFieldElements;
12339
- // Create grid column based on field elements and insert them into the grid.
12348
+ // Create grid column based on field elements and insert them into the grid.
12340
12349
  this.group[`${name}${this.prefixCustomAddButtonOnClick}`] = this.captureContainerFieldValueToModel.bind(this, this.group, gridValueName, gridDataSourceName, containerName);
12341
12350
  this.group[`${name}${this.prefixCustomResetButtonOnClick}`] = this.clearContainerRelatedFieldValue.bind(this, this.group, containerName);
12342
12351
  this.group[`${name}${this.prefixCustomRemoveButtonOnClick}`] = this.removeGridRow.bind(this, gridValueName, gridDataSourceName);
@@ -13297,7 +13306,7 @@ class ZloopComponent extends ContainerFieldBase {
13297
13306
  const isVisible = ZComponentHelper.isVisibleFormControl(this, field);
13298
13307
  const isRequired = ZComponentHelper.isRequiredFormControl(this, field);
13299
13308
  if (isFormControl === true) {
13300
- const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
13309
+ const validators = ZComponentHelper.getValidators(field, isVisible, isRequired, this.group);
13301
13310
  this.group.form.addControl(field.Value, new FormControl(this.group.zModel[field.Value], validators));
13302
13311
  this.clonedFormControlList.push(field.Value);
13303
13312
  if (ZComponentHelper.hasCCField(field.Type)) {
@@ -13326,10 +13335,10 @@ class KsplitterComponent extends ContainerFieldBase {
13326
13335
  }
13327
13336
  }
13328
13337
  KsplitterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: KsplitterComponent, deps: [{ token: ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
13329
- KsplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: KsplitterComponent, selector: "app-ksplitter", usesInheritance: true, ngImport: i0, template: "<div class=\"ksplitter-container e1tag-container-style\"\r\n *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"data.Class\" [style]=\"componentProperties.containerStyle.style\" [class]=\"data.ComponentStyleType\">\r\n <kendo-splitter [orientation]=\"data.Orientation || 'horizontal'\" class=\"e1tag-container-style1\"\r\n [style]=\"componentProperties.containerStyle.style1\">\r\n <kendo-splitter-pane *ngFor=\"let item of data.TabItems; let i = index\"\r\n [resizable]=\"item.Resizable != undefined ? item.Resizable : true\"\r\n [collapsible]=\"item.AllowCollapse != undefined ? item.AllowCollapse : true\" [size]=\"item.Size\"\r\n class=\"e1tag-container-style2\" [style]=\"componentProperties.containerStyle.style2 + item.Style\"\r\n [min]=\"item.MinWidth\" [max]=\"item.MaxWidth\">\r\n <app-zdiv [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\"\r\n [data]=\"data | tabfilter: i + ''\" [form]=\"form\" [group]=\"group\" [containerField]=\"containerField\">\r\n </app-zdiv>\r\n </kendo-splitter-pane>\r\n </kendo-splitter>\r\n</div>\r\n", styles: [""], components: [{ type: i2$4.SplitterComponent, selector: "kendo-splitter", inputs: ["orientation", "resizeStep"], outputs: ["layoutChange"], exportAs: ["kendoSplitter"] }, { type: i2$4.SplitterPaneComponent, selector: "kendo-splitter-pane", inputs: ["order", "size", "separatorLabel", "min", "max", "resizable", "collapsible", "scrollable", "collapsed", "orientation", "containsSplitter", "overlayContent"], outputs: ["sizeChange", "collapsedChange"], exportAs: ["kendoSplitterPane"] }, { type: ZdivComponent, selector: "app-zdiv" }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "tabfilter": TabFilter } });
13338
+ KsplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: KsplitterComponent, selector: "app-ksplitter", usesInheritance: true, ngImport: i0, template: "<div class=\"ksplitter-container e1tag-container-style\"\r\n *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"data.Class\" [style]=\"componentProperties.containerStyle.style\" [class]=\"data.ComponentStyleType\">\r\n <kendo-splitter [orientation]=\"data.Orientation || 'horizontal'\" class=\"e1tag-container-style1\"\r\n [style]=\"componentProperties.containerStyle.style1\">\r\n <kendo-splitter-pane *ngFor=\"let item of data.PanelItems; let i = index\"\r\n [resizable]=\"item.Resizable != undefined ? item.Resizable : true\"\r\n [collapsible]=\"item.AllowCollapse != undefined ? item.AllowCollapse : true\" [size]=\"item.Size\"\r\n class=\"e1tag-container-style2\" [style]=\"componentProperties.containerStyle.style2 + item.Style\"\r\n [min]=\"item.MinWidth\" [max]=\"item.MaxWidth\">\r\n <app-zdiv [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\"\r\n [data]=\"data | tabfilter: i + ''\" [form]=\"form\" [group]=\"group\" [containerField]=\"containerField\">\r\n </app-zdiv>\r\n </kendo-splitter-pane>\r\n </kendo-splitter>\r\n</div>\r\n", styles: [""], components: [{ type: i2$4.SplitterComponent, selector: "kendo-splitter", inputs: ["orientation", "resizeStep"], outputs: ["layoutChange"], exportAs: ["kendoSplitter"] }, { type: i2$4.SplitterPaneComponent, selector: "kendo-splitter-pane", inputs: ["order", "size", "separatorLabel", "min", "max", "resizable", "collapsible", "scrollable", "collapsed", "orientation", "containsSplitter", "overlayContent"], outputs: ["sizeChange", "collapsedChange"], exportAs: ["kendoSplitterPane"] }, { type: ZdivComponent, selector: "app-zdiv" }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "tabfilter": TabFilter } });
13330
13339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: KsplitterComponent, decorators: [{
13331
13340
  type: Component,
13332
- args: [{ selector: "app-ksplitter", template: "<div class=\"ksplitter-container e1tag-container-style\"\r\n *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"data.Class\" [style]=\"componentProperties.containerStyle.style\" [class]=\"data.ComponentStyleType\">\r\n <kendo-splitter [orientation]=\"data.Orientation || 'horizontal'\" class=\"e1tag-container-style1\"\r\n [style]=\"componentProperties.containerStyle.style1\">\r\n <kendo-splitter-pane *ngFor=\"let item of data.TabItems; let i = index\"\r\n [resizable]=\"item.Resizable != undefined ? item.Resizable : true\"\r\n [collapsible]=\"item.AllowCollapse != undefined ? item.AllowCollapse : true\" [size]=\"item.Size\"\r\n class=\"e1tag-container-style2\" [style]=\"componentProperties.containerStyle.style2 + item.Style\"\r\n [min]=\"item.MinWidth\" [max]=\"item.MaxWidth\">\r\n <app-zdiv [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\"\r\n [data]=\"data | tabfilter: i + ''\" [form]=\"form\" [group]=\"group\" [containerField]=\"containerField\">\r\n </app-zdiv>\r\n </kendo-splitter-pane>\r\n </kendo-splitter>\r\n</div>\r\n", styles: [""] }]
13341
+ args: [{ selector: "app-ksplitter", template: "<div class=\"ksplitter-container e1tag-container-style\"\r\n *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"data.Class\" [style]=\"componentProperties.containerStyle.style\" [class]=\"data.ComponentStyleType\">\r\n <kendo-splitter [orientation]=\"data.Orientation || 'horizontal'\" class=\"e1tag-container-style1\"\r\n [style]=\"componentProperties.containerStyle.style1\">\r\n <kendo-splitter-pane *ngFor=\"let item of data.PanelItems; let i = index\"\r\n [resizable]=\"item.Resizable != undefined ? item.Resizable : true\"\r\n [collapsible]=\"item.AllowCollapse != undefined ? item.AllowCollapse : true\" [size]=\"item.Size\"\r\n class=\"e1tag-container-style2\" [style]=\"componentProperties.containerStyle.style2 + item.Style\"\r\n [min]=\"item.MinWidth\" [max]=\"item.MaxWidth\">\r\n <app-zdiv [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\"\r\n [data]=\"data | tabfilter: i + ''\" [form]=\"form\" [group]=\"group\" [containerField]=\"containerField\">\r\n </app-zdiv>\r\n </kendo-splitter-pane>\r\n </kendo-splitter>\r\n</div>\r\n", styles: [""] }]
13333
13342
  }], ctorParameters: function () { return [{ type: ZComponentService }]; } });
13334
13343
 
13335
13344
  /********** Angular **********/
@@ -13340,7 +13349,7 @@ class VirtualScrollComponent extends ContainerFieldBase {
13340
13349
  super(componentService);
13341
13350
  this.pageSize = 50;
13342
13351
  this.pageFetched = [];
13343
- this.footerValue = [];
13352
+ this.footerFields = [];
13344
13353
  }
13345
13354
  ngOnInit() {
13346
13355
  this.setData();
@@ -13445,15 +13454,15 @@ class VirtualScrollComponent extends ContainerFieldBase {
13445
13454
  }
13446
13455
  setupFooter() {
13447
13456
  if (this.data.Value && Array.isArray(this.data.Value)) {
13448
- this.footerValue = this.data.Value.filter(x => x.TabArea === 'footer');
13457
+ this.footerFields = this.data.Value.filter(x => x.Section === 'footer');
13449
13458
  }
13450
13459
  }
13451
13460
  }
13452
13461
  VirtualScrollComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VirtualScrollComponent, deps: [{ token: ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
13453
- VirtualScrollComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VirtualScrollComponent, selector: "app-virtual-scroll", viewQueries: [{ propertyName: "viewPort", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"container e1tag-container-style\" [style]=\"componentProperties.containerStyle.style\"\r\n [ngClass]=\"(data.ComponentStyleType || '') + ' ' + (data.Class || '')\">\r\n <cdk-virtual-scroll-viewport [itemSize]=\"options.itemSize\" [style]=\"componentProperties.containerStyle.style1\"\r\n class=\"virtual-scroll-viewport e1tag-container-style1\" [minBufferPx]=\"options.minBufferPx\"\r\n [maxBufferPx]=\"options.maxBufferPx\">\r\n <!-- <ng-container *cdkVirtualFor=\"let field of clonedFields\"> -->\r\n <ng-container *cdkVirtualFor=\"let dataItem of dataItems; let i = index\">\r\n <div [style.height.px]=\"options.itemSize\" [style.min-height.px]=\"options.itemSize\"\r\n [style.max-height.px]=\"options.itemSize\" [style]=\"componentProperties.containerStyle.style2\"\r\n class=\"e1tag-container-style2\" (click)=\"onClick($event, dataItem)\"\r\n [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n </ng-container>\r\n <app-zformcontrol *ngFor=\"let field of footerValue\" [field]=\"field\" [containerField]=\"data\" [group]=\"group\"\r\n [form]=\"form\" [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\">\r\n </app-zformcontrol>\r\n </cdk-virtual-scroll-viewport>\r\n</div>\r\n", styles: [".virtual-scroll-viewport{height:500px}\n"], components: [{ type: i2$b.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { type: ZformcontrolComponent, selector: "app-zformcontrol", inputs: ["field", "group", "form", "containerField"] }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i2$b.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i2$b.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "htmlSanitize": HtmlSanitizePipe } });
13462
+ VirtualScrollComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VirtualScrollComponent, selector: "app-virtual-scroll", viewQueries: [{ propertyName: "viewPort", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"container e1tag-container-style\" [style]=\"componentProperties.containerStyle.style\"\r\n [ngClass]=\"(data.ComponentStyleType || '') + ' ' + (data.Class || '')\">\r\n <cdk-virtual-scroll-viewport [itemSize]=\"options.itemSize\" [style]=\"componentProperties.containerStyle.style1\"\r\n class=\"virtual-scroll-viewport e1tag-container-style1\" [minBufferPx]=\"options.minBufferPx\"\r\n [maxBufferPx]=\"options.maxBufferPx\">\r\n <!-- <ng-container *cdkVirtualFor=\"let field of clonedFields\"> -->\r\n <ng-container *cdkVirtualFor=\"let dataItem of dataItems; let i = index\">\r\n <div [style.height.px]=\"options.itemSize\" [style.min-height.px]=\"options.itemSize\"\r\n [style.max-height.px]=\"options.itemSize\" [style]=\"componentProperties.containerStyle.style2\"\r\n class=\"e1tag-container-style2\" (click)=\"onClick($event, dataItem)\"\r\n [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n </ng-container>\r\n <app-zformcontrol *ngFor=\"let field of footerFields\" [field]=\"field\" [containerField]=\"data\" [group]=\"group\"\r\n [form]=\"form\" [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\">\r\n </app-zformcontrol>\r\n </cdk-virtual-scroll-viewport>\r\n</div>\r\n", styles: [".virtual-scroll-viewport{height:500px}\n"], components: [{ type: i2$b.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { type: ZformcontrolComponent, selector: "app-zformcontrol", inputs: ["field", "group", "form", "containerField"] }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i2$b.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i2$b.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "htmlSanitize": HtmlSanitizePipe } });
13454
13463
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VirtualScrollComponent, decorators: [{
13455
13464
  type: Component,
13456
- args: [{ selector: "app-virtual-scroll", template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"container e1tag-container-style\" [style]=\"componentProperties.containerStyle.style\"\r\n [ngClass]=\"(data.ComponentStyleType || '') + ' ' + (data.Class || '')\">\r\n <cdk-virtual-scroll-viewport [itemSize]=\"options.itemSize\" [style]=\"componentProperties.containerStyle.style1\"\r\n class=\"virtual-scroll-viewport e1tag-container-style1\" [minBufferPx]=\"options.minBufferPx\"\r\n [maxBufferPx]=\"options.maxBufferPx\">\r\n <!-- <ng-container *cdkVirtualFor=\"let field of clonedFields\"> -->\r\n <ng-container *cdkVirtualFor=\"let dataItem of dataItems; let i = index\">\r\n <div [style.height.px]=\"options.itemSize\" [style.min-height.px]=\"options.itemSize\"\r\n [style.max-height.px]=\"options.itemSize\" [style]=\"componentProperties.containerStyle.style2\"\r\n class=\"e1tag-container-style2\" (click)=\"onClick($event, dataItem)\"\r\n [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n </ng-container>\r\n <app-zformcontrol *ngFor=\"let field of footerValue\" [field]=\"field\" [containerField]=\"data\" [group]=\"group\"\r\n [form]=\"form\" [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\">\r\n </app-zformcontrol>\r\n </cdk-virtual-scroll-viewport>\r\n</div>\r\n", styles: [".virtual-scroll-viewport{height:500px}\n"] }]
13465
+ args: [{ selector: "app-virtual-scroll", template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"container e1tag-container-style\" [style]=\"componentProperties.containerStyle.style\"\r\n [ngClass]=\"(data.ComponentStyleType || '') + ' ' + (data.Class || '')\">\r\n <cdk-virtual-scroll-viewport [itemSize]=\"options.itemSize\" [style]=\"componentProperties.containerStyle.style1\"\r\n class=\"virtual-scroll-viewport e1tag-container-style1\" [minBufferPx]=\"options.minBufferPx\"\r\n [maxBufferPx]=\"options.maxBufferPx\">\r\n <!-- <ng-container *cdkVirtualFor=\"let field of clonedFields\"> -->\r\n <ng-container *cdkVirtualFor=\"let dataItem of dataItems; let i = index\">\r\n <div [style.height.px]=\"options.itemSize\" [style.min-height.px]=\"options.itemSize\"\r\n [style.max-height.px]=\"options.itemSize\" [style]=\"componentProperties.containerStyle.style2\"\r\n class=\"e1tag-container-style2\" (click)=\"onClick($event, dataItem)\"\r\n [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n </ng-container>\r\n <app-zformcontrol *ngFor=\"let field of footerFields\" [field]=\"field\" [containerField]=\"data\" [group]=\"group\"\r\n [form]=\"form\" [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\">\r\n </app-zformcontrol>\r\n </cdk-virtual-scroll-viewport>\r\n</div>\r\n", styles: [".virtual-scroll-viewport{height:500px}\n"] }]
13457
13466
  }], ctorParameters: function () { return [{ type: ZComponentService }]; }, propDecorators: { viewPort: [{
13458
13467
  type: ViewChild,
13459
13468
  args: [CdkVirtualScrollViewport]