ngx-render-material-forms 1.5.0 → 1.5.1

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.
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Component, Input, ViewChild, ViewContainerRef, ViewChildren, EventEmitter, Output, forwardRef, Directive, Inject, Optional, NgModule } from '@angular/core';
3
- import * as i1$2 from '@angular/common/http';
3
+ import * as i1$1 from '@angular/common/http';
4
4
  import { HttpHeaders, HttpClientModule } from '@angular/common/http';
5
5
  import * as i1 from '@angular/common';
6
6
  import { CommonModule } from '@angular/common';
7
7
  import * as i2 from '@angular/forms';
8
- import { FormControl, NG_VALUE_ACCESSOR, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
8
+ import { FormControl, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
9
9
  import * as i4$2 from '@angular/material/input';
10
10
  import { MAT_INPUT_VALUE_ACCESSOR, MatInputModule } from '@angular/material/input';
11
11
  import * as i3$2 from '@angular/material/button';
@@ -27,20 +27,18 @@ import * as i4 from '@angular/material/card';
27
27
  import { MatCardModule } from '@angular/material/card';
28
28
  import * as i2$2 from '@angular/material/tabs';
29
29
  import { MatTabsModule } from '@angular/material/tabs';
30
- import * as i10 from '@angular/material/table';
30
+ import * as i4$7 from '@angular/material/table';
31
31
  import { MatTableDataSource, MatTableModule } from '@angular/material/table';
32
32
  import * as i5$2 from '@angular/material/datepicker';
33
33
  import { MatDatepickerModule } from '@angular/material/datepicker';
34
- import * as i11 from '@angular/material/progress-spinner';
34
+ import * as i3$4 from '@angular/material/progress-spinner';
35
35
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
36
36
  import * as i4$1 from '@angular/material/icon';
37
37
  import { MatIconModule } from '@angular/material/icon';
38
38
  import * as i5$1 from '@angular/material/core';
39
39
  import { MatNativeDateModule } from '@angular/material/core';
40
- import * as i1$1 from '@angular/material/dialog';
40
+ import * as i1$2 from '@angular/material/dialog';
41
41
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
42
- import * as i14 from '@angular/material/autocomplete';
43
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
44
42
  import Webform from 'formiojs/Webform.js';
45
43
  import FormioComponent$2 from 'formiojs/components/_classes/component/Component.js';
46
44
  import TextFieldComponent from 'formiojs/components/textfield/TextField.js';
@@ -83,24 +81,23 @@ import RadioComponent from 'formiojs/components/radio/Radio.js';
83
81
  import SelectBoxesComponent from 'formiojs/components/selectboxes/SelectBoxes.js';
84
82
  import SelectComponent from 'formiojs/components/select/Select.js';
85
83
  import { Subject } from 'rxjs';
86
- import { debounceTime, distinctUntilChanged, takeUntil, startWith, map } from 'rxjs/operators';
84
+ import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
87
85
  import * as CryptoJS from 'crypto-js';
88
86
  import { isNullOrUndefined } from 'util';
89
87
  import * as i9 from 'ngx-mat-select-search';
90
88
  import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
91
89
  import WellComponent from 'formiojs/components/well/Well.js';
92
90
  import DataGridComponent from 'formiojs/components/datagrid/DataGrid.js';
93
- import * as i9$1 from '@angular/cdk/drag-drop';
91
+ import * as i8 from '@angular/cdk/drag-drop';
94
92
  import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
95
- import { SelectionModel } from '@angular/cdk/collections';
96
- import * as i13 from '@angular/material/stepper';
97
- import { MatStepperModule } from '@angular/material/stepper';
98
93
  import EditGridComponent from 'formiojs/components/editgrid/EditGrid.js';
99
94
  import Components$2 from 'formiojs/components/Components';
100
95
  import isString from 'lodash/isString';
101
96
  import TableComponent from 'formiojs/components/table/Table.js';
102
97
  import Wizard from 'formiojs/Wizard';
103
98
  import Displays from 'formiojs/displays/Displays';
99
+ import * as i3$3 from '@angular/material/stepper';
100
+ import { MatStepperModule } from '@angular/material/stepper';
104
101
  import * as i1$3 from '@formio/angular';
105
102
  import { FormioBaseComponent } from '@formio/angular';
106
103
  import { FlexLayoutModule } from '@angular/flex-layout';
@@ -979,11 +976,8 @@ var AngularButtonsThemes;
979
976
  })(AngularButtonsThemes || (AngularButtonsThemes = {}));
980
977
 
981
978
  class MaterialButtonComponent extends MaterialComponent {
982
- constructor(element, ref, dialog) {
983
- super(element, ref);
984
- this.element = element;
985
- this.ref = ref;
986
- this.dialog = dialog;
979
+ constructor() {
980
+ super(...arguments);
987
981
  this.loading = false;
988
982
  this.done = false;
989
983
  this.error = false;
@@ -1054,12 +1048,12 @@ class MaterialButtonComponent extends MaterialComponent {
1054
1048
  return retVal;
1055
1049
  }
1056
1050
  }
1057
- MaterialButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1058
- MaterialButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MaterialButtonComponent, selector: "mat-formio-button", usesInheritance: true, ngImport: i0, template: "<button *ngIf=\"instance && instance.component.label != 'Click to add Products'\"\r\n [ngClass]=\"buttonClass\"\r\n type=\"{{ instance.component.action }}\"\r\n mat-raised-button [color]=\"color\"\r\n [disabled]=\"disabled\"\r\n (click)=\"instance.onClick($event)\"\r\n>\r\n\r\n\r\n <mat-icon *ngIf=\"instance.component.leftIcon\">{{instance.component.leftIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"done\">done</mat-icon>\r\n <mat-icon *ngIf=\"error\">close</mat-icon>\r\n <mat-icon class=\"mat-icon-spin\" *ngIf=\"loading\">autorenew</mat-icon>\r\n {{ instance.component.label }}\r\n <mat-icon *ngIf=\"instance.component.rightIcon\">{{instance.component.rightIcon}}</mat-icon>\r\n</button>\r\n", styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host .mat-icon-spin{-webkit-animation-name:spin;animation-name:spin;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mat-formio-theme-success{background-color:#63d644!important}.mat-formio-theme-info{background-color:#49d9f4!important}.mat-formio-button-sm{font-size:14px;padding:8px 12px}.mat-formio-button-xs{font-size:14px;padding:4px 6px}.mat-formio-button-md{font-size:15px;padding:8px 12px}.mat-formio-button-lg{font-size:19px;padding:16px 20px}.mat-formio-button-block{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.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"] }] });
1051
+ MaterialButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1052
+ MaterialButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MaterialButtonComponent, selector: "mat-formio-button", usesInheritance: true, ngImport: i0, template: "<button *ngIf=\"instance\"\r\n [ngClass]=\"buttonClass\"\r\n type=\"{{ instance.component.action }}\"\r\n mat-raised-button [color]=\"color\"\r\n [disabled]=\"disabled\"\r\n (click)=\"instance.onClick($event)\"\r\n>\r\n <mat-icon *ngIf=\"instance.component.leftIcon\">{{instance.component.leftIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"done\">done</mat-icon>\r\n <mat-icon *ngIf=\"error\">close</mat-icon>\r\n <mat-icon class=\"mat-icon-spin\" *ngIf=\"loading\">autorenew</mat-icon>\r\n {{ instance.component.label }}\r\n <mat-icon *ngIf=\"instance.component.rightIcon\">{{instance.component.rightIcon}}</mat-icon>\r\n</button>\r\n", styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host .mat-icon-spin{-webkit-animation-name:spin;animation-name:spin;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mat-formio-theme-success{background-color:#63d644!important}.mat-formio-theme-info{background-color:#49d9f4!important}.mat-formio-button-sm{font-size:14px;padding:8px 12px}.mat-formio-button-xs{font-size:14px;padding:4px 6px}.mat-formio-button-md{font-size:15px;padding:8px 12px}.mat-formio-button-lg{font-size:19px;padding:16px 20px}.mat-formio-button-block{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.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"] }] });
1059
1053
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialButtonComponent, decorators: [{
1060
1054
  type: Component,
1061
- args: [{ selector: 'mat-formio-button', template: "<button *ngIf=\"instance && instance.component.label != 'Click to add Products'\"\r\n [ngClass]=\"buttonClass\"\r\n type=\"{{ instance.component.action }}\"\r\n mat-raised-button [color]=\"color\"\r\n [disabled]=\"disabled\"\r\n (click)=\"instance.onClick($event)\"\r\n>\r\n\r\n\r\n <mat-icon *ngIf=\"instance.component.leftIcon\">{{instance.component.leftIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"done\">done</mat-icon>\r\n <mat-icon *ngIf=\"error\">close</mat-icon>\r\n <mat-icon class=\"mat-icon-spin\" *ngIf=\"loading\">autorenew</mat-icon>\r\n {{ instance.component.label }}\r\n <mat-icon *ngIf=\"instance.component.rightIcon\">{{instance.component.rightIcon}}</mat-icon>\r\n</button>\r\n", styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host .mat-icon-spin{-webkit-animation-name:spin;animation-name:spin;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mat-formio-theme-success{background-color:#63d644!important}.mat-formio-theme-info{background-color:#49d9f4!important}.mat-formio-button-sm{font-size:14px;padding:8px 12px}.mat-formio-button-xs{font-size:14px;padding:4px 6px}.mat-formio-button-md{font-size:15px;padding:8px 12px}.mat-formio-button-lg{font-size:19px;padding:16px 20px}.mat-formio-button-block{display:block;width:100%}\n"] }]
1062
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.MatDialog }]; } });
1055
+ args: [{ selector: 'mat-formio-button', template: "<button *ngIf=\"instance\"\r\n [ngClass]=\"buttonClass\"\r\n type=\"{{ instance.component.action }}\"\r\n mat-raised-button [color]=\"color\"\r\n [disabled]=\"disabled\"\r\n (click)=\"instance.onClick($event)\"\r\n>\r\n <mat-icon *ngIf=\"instance.component.leftIcon\">{{instance.component.leftIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"done\">done</mat-icon>\r\n <mat-icon *ngIf=\"error\">close</mat-icon>\r\n <mat-icon class=\"mat-icon-spin\" *ngIf=\"loading\">autorenew</mat-icon>\r\n {{ instance.component.label }}\r\n <mat-icon *ngIf=\"instance.component.rightIcon\">{{instance.component.rightIcon}}</mat-icon>\r\n</button>\r\n", styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host .mat-icon-spin{-webkit-animation-name:spin;animation-name:spin;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mat-formio-theme-success{background-color:#63d644!important}.mat-formio-theme-info{background-color:#49d9f4!important}.mat-formio-button-sm{font-size:14px;padding:8px 12px}.mat-formio-button-xs{font-size:14px;padding:4px 6px}.mat-formio-button-md{font-size:15px;padding:8px 12px}.mat-formio-button-lg{font-size:19px;padding:16px 20px}.mat-formio-button-block{display:block;width:100%}\n"] }]
1056
+ }] });
1063
1057
  ButtonComponent.MaterialComponent = MaterialButtonComponent;
1064
1058
 
1065
1059
  class MaterialTextareaComponent extends MaterialComponent {
@@ -2600,7 +2594,7 @@ class MaterialSelectComponent extends MaterialComponent {
2600
2594
  });
2601
2595
  }
2602
2596
  registerPanelScrollEvent(selectElem) {
2603
- const panelElement = selectElem.panel.nativeElement;
2597
+ const panelElement = selectElem?.panel?.nativeElement;
2604
2598
  panelElement.addEventListener('scroll', this.onScroll.bind(this));
2605
2599
  }
2606
2600
  onScroll(event) {
@@ -2697,7 +2691,7 @@ class MaterialSelectComponent extends MaterialComponent {
2697
2691
  this.searching = false;
2698
2692
  this.productsloadingFlag = true;
2699
2693
  setTimeout(() => {
2700
- const ele = this.selectElem.panel.nativeElement;
2694
+ const ele = this.selectElem?.panel?.nativeElement;
2701
2695
  const trackHeight = ele.scrollHeight - ele.offsetHeight;
2702
2696
  const middlePosition = trackHeight / 2 - 50;
2703
2697
  ele.scrollTo({ top: middlePosition, behavior: 'auto' });
@@ -2756,7 +2750,7 @@ class MaterialSelectComponent extends MaterialComponent {
2756
2750
  if (this.instance.component.key.toLowerCase() === 'vendorproductid') {
2757
2751
  this.selectElem.openedChange.subscribe((isOpen) => {
2758
2752
  if (isOpen) {
2759
- this.pageNumber = 2;
2753
+ this.pageNumber = 1;
2760
2754
  this.pageSize = 20;
2761
2755
  this.searchQuery = '';
2762
2756
  this.searching = false;
@@ -2767,8 +2761,11 @@ class MaterialSelectComponent extends MaterialComponent {
2767
2761
  this.removePanelScrollEvent();
2768
2762
  this.searching = false;
2769
2763
  let selectedValue = this.getValue();
2770
- if (selectedValue.toString().length == 0 && this.searchQuery == '') {
2764
+ if ((selectedValue.toString().length == 0 && this.searchQuery == '') || this.productList?.length === 0) {
2771
2765
  this.productList = [];
2766
+ this.pageNumber = 1;
2767
+ this.pageSize = 20;
2768
+ this.searchQuery = '';
2772
2769
  this.loadData(this.pageNumber, this.pageSize, this.searchQuery);
2773
2770
  }
2774
2771
  }
@@ -2795,6 +2792,7 @@ class MaterialSelectComponent extends MaterialComponent {
2795
2792
  this.pageSize = 20;
2796
2793
  this.productList = [];
2797
2794
  this.searching = true;
2795
+ this.searchQuery = searchQuery;
2798
2796
  this.loadData(this.pageNumber, this.pageSize, searchQuery);
2799
2797
  }
2800
2798
  });
@@ -2815,11 +2813,37 @@ class MaterialSelectComponent extends MaterialComponent {
2815
2813
  });
2816
2814
  this.filteredOptions = this.selectOptions;
2817
2815
  }
2816
+ isError() {
2817
+ if (this.instance.error) {
2818
+ this.control.setErrors(this.instance.component.validate);
2819
+ return true;
2820
+ }
2821
+ else {
2822
+ return false;
2823
+ }
2824
+ }
2825
+ getErrorMessage() {
2826
+ if (this.instance.error && this.instance.error.messages) {
2827
+ const { messages } = this.instance.error;
2828
+ if (messages.length) {
2829
+ for (const msg of messages) {
2830
+ if (msg.context) {
2831
+ if (this.instance && this.instance.parent && this.instance.parent._data) {
2832
+ if (this.instance.parent._data.submit) {
2833
+ this.control.markAllAsTouched();
2834
+ }
2835
+ }
2836
+ return this.instance.error ? this.instance.error.message : '';
2837
+ }
2838
+ }
2839
+ }
2840
+ }
2841
+ }
2818
2842
  compareObjects(o1, o2) {
2819
2843
  return _.isEqual(o1, o2);
2820
2844
  }
2821
2845
  }
2822
- MaterialSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
2846
+ MaterialSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
2823
2847
  MaterialSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MaterialSelectComponent, selector: "mat-formio-select", viewQueries: [{ propertyName: "multiSelect", first: true, predicate: ["multiSelect"], descendants: true, static: true }, { propertyName: "selectElem", first: true, predicate: ["productSelect"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
2824
2848
  <mat-formio-form-field [instance]="instance" [componentTemplate]="componentTemplate"></mat-formio-form-field>
2825
2849
  <ng-template #componentTemplate let-hasLabel>
@@ -2857,7 +2881,7 @@ MaterialSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
2857
2881
  <span *ngIf="instance.component.suffix" matSuffix>
2858
2882
  {{ instance.component.suffix }}
2859
2883
  </span>
2860
- <mat-error *ngIf="instance.error">{{ instance.error.message }}</mat-error>
2884
+ <mat-error *ngIf="isError()" >{{ getErrorMessage() }}</mat-error>
2861
2885
  </mat-form-field>
2862
2886
  </ng-template>
2863
2887
  `, isInline: true, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i4$3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i9.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i9.MatSelectSearchClearDirective, selector: "[ngxMatSelectSearchClear]" }, { kind: "component", type: FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
@@ -2900,11 +2924,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
2900
2924
  <span *ngIf="instance.component.suffix" matSuffix>
2901
2925
  {{ instance.component.suffix }}
2902
2926
  </span>
2903
- <mat-error *ngIf="instance.error">{{ instance.error.message }}</mat-error>
2927
+ <mat-error *ngIf="isError()" >{{ getErrorMessage() }}</mat-error>
2904
2928
  </mat-form-field>
2905
2929
  </ng-template>
2906
2930
  `, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}\n"] }]
2907
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$2.HttpClient }]; }, propDecorators: { multiSelect: [{
2931
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.HttpClient }]; }, propDecorators: { multiSelect: [{
2908
2932
  type: ViewChild,
2909
2933
  args: ['multiSelect', { static: true }]
2910
2934
  }], selectElem: [{
@@ -2963,468 +2987,30 @@ class ConfirmationDialogComponent {
2963
2987
  ngOnInit() {
2964
2988
  }
2965
2989
  }
2966
- ConfirmationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ConfirmationDialogComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
2967
- ConfirmationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: ConfirmationDialogComponent, selector: "NgxMat-confirmation-dialog", ngImport: i0, template: "<div class=\"dialog-container\">\r\n<h2 mat-dialog-title class=\"data-grid-alert\">Alert</h2>\r\n<mat-dialog-content class=\"data-grid-popup-body\">\r\n {{data.message}}\r\n</mat-dialog-content>\r\n<mat-dialog-actions class=\"data-grid-popup-footer\">\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"warn\" *ngIf=\"data.buttonStatus\">Delete</button>\r\n <button mat-button [mat-dialog-close]=\"false\" [ngClass]=\"{'data-grid-closed-btn': !data.buttonStatus}\">{{data.buttonStatus ? 'Cancel': 'Close'}}</button>\r\n</mat-dialog-actions>\r\n</div>", styles: ["::ng-deep .data-grid-closed-btn .mat-button-focus-overlay{background-color:transparent}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.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"] }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
2990
+ ConfirmationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ConfirmationDialogComponent, deps: [{ token: i1$2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
2991
+ ConfirmationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: ConfirmationDialogComponent, selector: "NgxMat-confirmation-dialog", ngImport: i0, template: "<div class=\"dialog-container\">\r\n<h2 mat-dialog-title class=\"data-grid-alert\">Alert</h2>\r\n<mat-dialog-content class=\"data-grid-popup-body\">\r\n {{data.message}}\r\n</mat-dialog-content>\r\n<mat-dialog-actions class=\"data-grid-popup-footer\">\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"warn\" *ngIf=\"data.buttonStatus\">Delete</button>\r\n <button mat-button [mat-dialog-close]=\"false\" [ngClass]=\"{'data-grid-closed-btn': !data.buttonStatus}\">{{data.buttonStatus ? 'Cancel': 'Close'}}</button>\r\n</mat-dialog-actions>\r\n</div>", styles: ["::ng-deep .data-grid-closed-btn .mat-button-focus-overlay{background-color:transparent}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.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"] }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
2968
2992
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
2969
2993
  type: Component,
2970
2994
  args: [{ selector: 'NgxMat-confirmation-dialog', template: "<div class=\"dialog-container\">\r\n<h2 mat-dialog-title class=\"data-grid-alert\">Alert</h2>\r\n<mat-dialog-content class=\"data-grid-popup-body\">\r\n {{data.message}}\r\n</mat-dialog-content>\r\n<mat-dialog-actions class=\"data-grid-popup-footer\">\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"warn\" *ngIf=\"data.buttonStatus\">Delete</button>\r\n <button mat-button [mat-dialog-close]=\"false\" [ngClass]=\"{'data-grid-closed-btn': !data.buttonStatus}\">{{data.buttonStatus ? 'Cancel': 'Close'}}</button>\r\n</mat-dialog-actions>\r\n</div>", styles: ["::ng-deep .data-grid-closed-btn .mat-button-focus-overlay{background-color:transparent}\n"] }]
2971
- }], ctorParameters: function () { return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
2995
+ }], ctorParameters: function () { return [{ type: i1$2.MatDialogRef }, { type: undefined, decorators: [{
2972
2996
  type: Inject,
2973
2997
  args: [MAT_DIALOG_DATA]
2974
2998
  }] }]; } });
2975
2999
 
2976
- class CommonService {
2977
- constructor(http) {
2978
- this.http = http;
2979
- this.holy = '';
2980
- this.grail = '';
2981
- this.holy = CryptoJS.enc.Base64.parse('8F/2+T2NXqUBQERR12R4sw==');
2982
- this.grail = CryptoJS.enc.Base64.parse('yE0CgQbYzK5wqeoKTVzhOQ==');
2983
- this.paramsData = JSON.parse(localStorage.getItem('productPickerParams'));
2984
- this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
2985
- }
2986
- scrumble(msg) {
2987
- if (!isNullOrUndefined(msg)) {
2988
- var conceal = this.getcampaign(msg, this.holy, this.grail);
2989
- var sha256 = CryptoJS.HmacSHA256(CryptoJS.enc.Base64.stringify(this.grail) + conceal.toString(), CryptoJS.enc.Base64.stringify(this.holy));
2990
- var hashInBase64 = CryptoJS.enc.Base64.stringify(sha256);
2991
- let keyValue = {
2992
- "value": conceal.toString(),
2993
- "mac": hashInBase64
2994
- };
2995
- var result = JSON.stringify(keyValue);
2996
- var jumbled = CryptoJS.enc.Utf8.parse(result);
2997
- return CryptoJS.enc.Base64.stringify(jumbled);
2998
- }
2999
- }
3000
- getcampaign(data, holy, grail) {
3001
- return CryptoJS.AES.encrypt(data.toString(), holy, {
3002
- blockSize: 128,
3003
- iv: grail,
3004
- mode: CryptoJS.mode.CBC,
3005
- padding: CryptoJS.pad.Pkcs7
3006
- });
3007
- }
3008
- getBaseApiUrl() {
3009
- const baseUrlMapping = {
3010
- 'localhost': 'http://localhost:58504',
3011
- 'lincoln.vartopia.com': 'https://lincoln-api.vartopia.com',
3012
- 'stage.vartopia.com': 'https://stage-api.vartopia.com',
3013
- 'my.vartopia.com': 'https://reagan-api.vartopia.com',
3014
- 'jackson.vartopia.com': 'https://jackson-api.vartopia.com'
3015
- };
3016
- // Get the current hostname
3017
- const hostname = window.location.hostname;
3018
- return baseUrlMapping[hostname] || null;
3019
- }
3020
- listProductCategory() {
3021
- const vendorId = this.getValueByKey(this.paramsData, 'vendorId');
3022
- const baseApiUrl = this.getBaseApiUrl();
3023
- return this.http.get(`${baseApiUrl}/api/VendorFormBuilder/GetProductsCategory?vendorId=${vendorId}`);
3024
- }
3025
- listSubCategory(category) {
3026
- const vendorId = this.getValueByKey(this.paramsData, 'vendorId');
3027
- const baseApiUrl = this.getBaseApiUrl();
3028
- return this.http.get(`${baseApiUrl}/api/VendorFormBuilder/GetProductsSubCategory?vendorId=${vendorId}&categoryName=${category}`);
3029
- }
3030
- // Function to get value by key from the array
3031
- getValueByKey(data, key) {
3032
- if (!data || data.length === 0) {
3033
- return null; // Return null if data is empty or undefined
3034
- }
3035
- const item = data.find(kv => kv.key.toLowerCase() === key.toLowerCase());
3036
- return item ? item.value : null;
3037
- }
3038
- // this.http.get<VendorProductsResponse>(`${baseApiUrl}/api/VendorFormBuilder/GetVendorProducts?vendorId=${envendorId}&pageNumber=${enpageNumber}&pageSize=${enpageSize}&search=${ensearchQuery}&onlyActive=${enactive}&includeDescription=${endescription}`, { headers }).subscribe(response => {
3039
- loadProducts(pageNumber, pazeSize, search = '', onlyActive = true, description = false, category, subCategory) {
3040
- const baseApiUrl = this.getBaseApiUrl();
3041
- const vendorId = this.getValueByKey(this.paramsData, 'vendorId');
3042
- const encodeCat = encodeURIComponent(category);
3043
- const encodeSubCat = encodeURIComponent(subCategory);
3044
- return this.http.get(`${baseApiUrl}/api/VendorFormBuilder/GetVendorProducts?vendorId=${vendorId}&pageNumber=${pageNumber}&pageSize=${pazeSize}&search=${search}&onlyActive=${onlyActive}&includeDescription=${description}&category=${encodeCat}&subCategory=${encodeSubCat}`);
3045
- }
3046
- }
3047
- CommonService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, deps: [{ token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
3048
- CommonService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, providedIn: 'root' });
3049
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, decorators: [{
3050
- type: Injectable,
3051
- args: [{
3052
- providedIn: 'root'
3053
- }]
3054
- }], ctorParameters: function () { return [{ type: i1$2.HttpClient }]; } });
3055
-
3056
- class AddOnProductsComponent {
3057
- constructor(matDialogRef, data, fb, dialog, commonSevice) {
3058
- this.matDialogRef = matDialogRef;
3059
- this.fb = fb;
3060
- this.dialog = dialog;
3061
- this.commonSevice = commonSevice;
3062
- this.category = [];
3063
- this.subCategory = [];
3064
- this.filteredCategories = [];
3065
- this.filteredSubCategories = [];
3066
- this.addProductsColumns = ['select', 'productName', 'price'];
3067
- this.showAllproductsColumns = ['delete', 'productName', 'categoryName', 'subCategory', 'Quantity', 'price'];
3068
- this.quantityList = [5, 10, 15, 20, 25];
3069
- this.ELEMENT_DATA = [];
3070
- this.dataSource = new MatTableDataSource();
3071
- this.selection = new SelectionModel(true, []);
3072
- this.selectedDataSource = new MatTableDataSource([]);
3073
- this.selectedCategory = null;
3074
- this.selectedSubCategory = null;
3075
- this.showCategory = false;
3076
- this.showSubcategory = false;
3077
- this.showPrice = true;
3078
- this.showQuantity = true;
3079
- this.showNewProductPicker = true;
3080
- this.setCategory = '';
3081
- this.setSubCategory = '';
3082
- this.loadingFlag = false;
3083
- this.pageNumber = 1;
3084
- this.pageSize = 20;
3085
- this.totalPages = 0;
3086
- this.searchQuery = '';
3087
- this.itemList = [];
3088
- this.prevScrollPosition = 0; // Track the previous scroll position
3089
- this.spinnerFlag = false;
3090
- this.showCategory = data.attributesFlag.showCategory;
3091
- this.showSubcategory = data.attributesFlag.showSubcategory;
3092
- this.showPrice = data.attributesFlag.showPrice;
3093
- this.showQuantity = data.attributesFlag.showQuantity;
3094
- this.showNewProductPicker = data.showNewProductPicker;
3095
- this.setCategory = data.category || '';
3096
- this.setSubCategory = data.subCategory || '';
3097
- this.selection = new SelectionModel(true, data.selectedProducts || []);
3098
- this.form = this.fb.group({
3099
- productCategory: [''],
3100
- productSubcategory: [''],
3101
- selectedProducts: this.fb.array([])
3102
- });
3103
- this.initializeFormArray();
3104
- if (!this.showCategory) {
3105
- this.removeColumn('categoryName');
3106
- }
3107
- if (!this.showPrice) {
3108
- this.removeColumn('price');
3109
- }
3110
- if (!this.showSubcategory) {
3111
- this.removeColumn('subCategory');
3112
- }
3113
- if (!this.showQuantity) {
3114
- this.removeColumn('Quantity');
3115
- }
3116
- }
3117
- removeColumn(columnName) {
3118
- this.showAllproductsColumns = this.showAllproductsColumns.filter(column => column !== columnName);
3119
- this.addProductsColumns = this.addProductsColumns.filter(column => column !== columnName);
3120
- }
3121
- initializeFormArray() {
3122
- const selectedProductsArray = this.form.get('selectedProducts');
3123
- this.selection.selected.forEach(product => {
3124
- selectedProductsArray.push(this.fb.group({
3125
- price: [product.price || '', Validators.required],
3126
- text: [product.text || ''],
3127
- quantity: [product.quantity || '', Validators.required],
3128
- category: [product?.category || ''],
3129
- subCategory: [product?.subCategory || ''],
3130
- value: [product?.value || '']
3131
- }));
3132
- });
3133
- this.selectedDataSource.data = [...this.selection.selected];
3134
- }
3135
- initializeDataSources() {
3136
- // Ensure selected items are marked in the main data source
3137
- if (this.selection?.selected?.length) {
3138
- this.selection?.selected?.forEach(selectedProduct => {
3139
- const index = this.dataSource.data.findIndex(product => product.value === selectedProduct.value);
3140
- if (index >= 0) {
3141
- this.dataSource.data[index] = selectedProduct;
3142
- }
3143
- });
3144
- this.selectedDataSource.data = [...this.selection.selected];
3145
- }
3146
- else {
3147
- console.warn('No selected products found.');
3148
- }
3149
- }
3150
- ngAfterViewInit() {
3151
- }
3152
- ngOnInit() {
3153
- this.loadProductCategory();
3154
- this.form.get('productCategory').valueChanges
3155
- .pipe(startWith(''), map(value => this.filterProducts(value, 'category1'))).subscribe(filterCat => {
3156
- this.filteredCategories = filterCat;
3157
- });
3158
- this.form.get('productSubcategory').valueChanges
3159
- .pipe(startWith(''), map(value => this.filterProducts(value, 'subCategory'))).subscribe(subCat => {
3160
- this.filteredSubCategories = subCat;
3161
- });
3162
- }
3163
- loadProductCategory() {
3164
- this.spinnerFlag = true;
3165
- this.commonSevice.listProductCategory().subscribe(response => {
3166
- this.spinnerFlag = false;
3167
- if (response && response.code === 200) {
3168
- this.category = response.data;
3169
- this.filteredCategories = this.filterProducts(this.setCategory, 'category1');
3170
- this.form.get('productCategory').setValue(this.setCategory);
3171
- if (this.setCategory !== '') {
3172
- this.onOptionSelected(this.setCategory, 'category1');
3173
- this.form.get('productSubcategory').setValue(this.setSubCategory);
3174
- }
3175
- }
3176
- });
3177
- }
3178
- filterProducts(value, cat) {
3179
- const filterValue = value.toLowerCase();
3180
- const data = cat === 'category1' ? this.category : this.subCategory;
3181
- if (!filterValue) {
3182
- return data;
3183
- }
3184
- else {
3185
- return data.filter(option => option.toLowerCase().includes(filterValue));
3186
- }
3187
- }
3188
- onSubmit() {
3189
- if (this.form.valid) {
3190
- this.matDialogRef.close({
3191
- data: {
3192
- status: true,
3193
- items: this.form.value
3194
- }
3195
- });
3196
- }
3197
- }
3198
- isAllSelected() {
3199
- const numSelected = this.selection.selected.length;
3200
- const numRows = this.dataSource.data.length;
3201
- return numSelected === numRows;
3202
- }
3203
- isIndeterminate() {
3204
- const numSelected = this.selection.selected.length;
3205
- const numRows = this.dataSource.data.length;
3206
- return numSelected > 0 && numSelected < numRows;
3207
- }
3208
- masterToggle() {
3209
- this.isAllSelected()
3210
- ? this.selection.clear()
3211
- : this.dataSource.data.forEach(row => this.selection.select(row));
3212
- this.updateSelectedProducts();
3213
- }
3214
- toggleSelection(row) {
3215
- this.selection.toggle(row);
3216
- this.updateSelectedProducts();
3217
- }
3218
- // Getter for the FormArray
3219
- get selectedProducts() {
3220
- return this.form.get('selectedProducts');
3221
- }
3222
- updateSelectedProducts() {
3223
- if (Array.isArray(this.selection.selected)) {
3224
- this.selectedDataSource.data = [...this.selection.selected];
3225
- const selectedProductsArray = this.selectedProducts;
3226
- selectedProductsArray.clear();
3227
- this.selection?.selected?.forEach(product => {
3228
- selectedProductsArray?.push(this.fb.group({
3229
- price: [product?.price ?? '', this.showPrice ? Validators.required : []],
3230
- text: [product?.text || ''],
3231
- quantity: [product?.quantity ?? '', this.showQuantity ? Validators.required : []],
3232
- category: [product?.category || ''],
3233
- subCategory: [product?.subCategory || ''],
3234
- value: [product?.value || '']
3235
- }));
3236
- });
3237
- }
3238
- else {
3239
- console.error('Selection.selected is not an array:', this.selection.selected);
3240
- }
3241
- }
3242
- getTotalRows() {
3243
- return this.dataSource.data.length;
3244
- }
3245
- getSelectedRowsCount() {
3246
- return this.selection.selected.length;
3247
- }
3248
- onOptionSelected(event, category) {
3249
- let selectedValue;
3250
- if (event && event.option && event.option.value !== undefined) {
3251
- selectedValue = event.option.value;
3252
- }
3253
- else {
3254
- selectedValue = event;
3255
- }
3256
- if (category === 'category1') {
3257
- this.selectedCategory = selectedValue;
3258
- this.spinnerFlag = true;
3259
- this.commonSevice.listSubCategory(selectedValue).subscribe(response => {
3260
- this.spinnerFlag = false;
3261
- if (response && response.code === 200) {
3262
- this.subCategory = response.data;
3263
- this.filteredSubCategories = this.filterProducts(this.setCategory, 'subCategory');
3264
- if (this.setSubCategory !== '') {
3265
- this.selectedSubCategory = this.setSubCategory;
3266
- this.getProducts();
3267
- }
3268
- }
3269
- });
3270
- }
3271
- else {
3272
- if (category === 'subCategory') {
3273
- this.selectedSubCategory = event.option.value;
3274
- this.getProducts();
3275
- }
3276
- }
3277
- }
3278
- getProducts() {
3279
- this.spinnerFlag = true;
3280
- this.commonSevice.loadProducts(this.pageNumber, this.pageSize, '', true, false, this.selectedCategory, this.selectedSubCategory).subscribe(response => {
3281
- this.spinnerFlag = false;
3282
- if (response && response.code === 200) {
3283
- //this.dataSource.data = response.data.dataSource;
3284
- this.totalPages = response?.data?.totalPages;
3285
- const data = response.data.dataSource;
3286
- if (this.dataSource.data.length > 0) {
3287
- data.forEach(item => this.dataSource.data.push(item));
3288
- this.dataSource.data = [...this.dataSource.data];
3289
- }
3290
- else {
3291
- this.dataSource.data = data;
3292
- }
3293
- this.loadingFlag = true;
3294
- setTimeout(() => {
3295
- const middlePosition = this.trackHeight / 2 - 50;
3296
- if (this.firstscrollableDiv && this.firstscrollableDiv.nativeElement) {
3297
- this.firstscrollableDiv.nativeElement.scrollTo({ top: middlePosition, behavior: 'auto' });
3298
- }
3299
- }, 250);
3300
- this.initializeDataSources();
3301
- }
3302
- });
3303
- }
3304
- removeRow(event, element) {
3305
- event.stopPropagation();
3306
- event.preventDefault();
3307
- let message = 'Are you sure you want to delete this product?';
3308
- let showButton = true;
3309
- const index = this.selectedDataSource.data.indexOf(element);
3310
- if (index >= 0) {
3311
- if (this.selectedDataSource.data.length === 1) {
3312
- message = 'Please select at least one product.';
3313
- showButton = false;
3314
- }
3315
- const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
3316
- disableClose: true,
3317
- width: '90%',
3318
- maxWidth: '400px',
3319
- data: { message: message, buttonStatus: showButton }
3320
- });
3321
- dialogRef.afterClosed().subscribe(result => {
3322
- if (result) {
3323
- this.selectedDataSource.data.splice(index, 1);
3324
- this.selectedDataSource._updateChangeSubscription();
3325
- this.selection.deselect(element);
3326
- const selectedProductsArray = this.form.get('selectedProducts');
3327
- const productIndex = selectedProductsArray.controls.findIndex(control => control.value.productName === element.productName);
3328
- if (productIndex >= 0) {
3329
- selectedProductsArray.removeAt(productIndex);
3330
- }
3331
- }
3332
- });
3333
- }
3334
- }
3335
- onScroll(event) {
3336
- this.trackHeight = event.target.scrollHeight - event.target.offsetHeight;
3337
- if (this.loadingFlag && (Math.floor(event.target.scrollTop / this.trackHeight * 100) > 50)) {
3338
- this.loadingFlag = false;
3339
- if (this.pageNumber < this.totalPages) {
3340
- this.pageNumber = this.pageNumber + 1;
3341
- this.getProducts();
3342
- }
3343
- else {
3344
- this.loadingFlag = true;
3345
- }
3346
- }
3347
- this.prevScrollPosition = event.target.scrollTop;
3348
- }
3349
- }
3350
- AddOnProductsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AddOnProductsComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormBuilder }, { token: i1$1.MatDialog }, { token: CommonService }], target: i0.ɵɵFactoryTarget.Component });
3351
- AddOnProductsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: AddOnProductsComponent, selector: "ngx-mat-add-on-products", viewQueries: [{ propertyName: "firstscrollableDiv", first: true, predicate: ["firstscrollableDiv"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"spinnerFlag\" class=\"OverlayDiv\">\r\n <div class=\"OverlayDivContent\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n</div>\r\n<div class=\"product-selector\">\r\n <mat-stepper labelPosition=\"bottom\" #stepper>\r\n <mat-step [stepControl]=\"form\">\r\n <form [formGroup]=\"form\">\r\n <ng-template matStepLabel>Select Products</ng-template>\r\n <div class=\"dropdown-selection\">\r\n <div class=\"row-one\">\r\n <mat-form-field>\r\n <mat-label>Product Category</mat-label>\r\n <input type=\"text\" matInput formControlName=\"productCategory\" [matAutocomplete]=\"auto3\">\r\n <mat-autocomplete #auto3=\"matAutocomplete\"\r\n (optionSelected)=\"onOptionSelected($event, 'category1')\">\r\n <mat-option *ngFor=\"let option of filteredCategories\"\r\n [value]=\"option\">{{option}}</mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>&nbsp;&nbsp;\r\n\r\n <mat-form-field>\r\n <mat-label>Subcategory</mat-label>\r\n <input type=\"text\" matInput formControlName=\"productSubcategory\" [matAutocomplete]=\"auto4\">\r\n <mat-autocomplete #auto4=\"matAutocomplete\"\r\n (optionSelected)=\"onOptionSelected($event, 'subCategory')\">\r\n <mat-option *ngFor=\"let option of filteredSubCategories\"\r\n [value]=\"option\">{{option}}</mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div #firstscrollableDiv id=\"firstscrollableDiv\" class=\"new-class mat-elevation-z8 first-div\" (scroll)=\"onScroll($event)\">\r\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-table abc\"\r\n *ngIf=\"dataSource && dataSource.data.length > 0; else noData\">\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <!-- <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"isIndeterminate()\"></mat-checkbox> -->\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox color=\"primary\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? toggleSelection(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"></mat-checkbox>\r\n </td> \r\n </ng-container> \r\n\r\n <ng-container matColumnDef=\"productName\">\r\n <th mat-header-cell *matHeaderCellDef> Product Name </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.text}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"price\" *ngIf=\"showPrice\">\r\n <th mat-header-cell *matHeaderCellDef> Price </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.price}} </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"addProductsColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: addProductsColumns;\"></tr>\r\n </table>\r\n <ng-template #noData>\r\n <div class=\"no-data-message\">\r\n No data found.\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"row-summary\">\r\n <p>Rows: {{ getTotalRows() }} Selected: {{ getSelectedRowsCount() }}</p>\r\n </div>\r\n <div>\r\n <button mat-button [mat-dialog-close]=\"false\">Close</button>\r\n <button mat-button matStepperNext [disabled]=\"selection.selected.length ? false : true\">Next</button>\r\n </div>\r\n </form>\r\n </mat-step>\r\n <mat-step [stepControl]=\"form\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <ng-template matStepLabel>Edit/Save</ng-template>\r\n <div class=\"new-class mat-elevation-z8\">\r\n <table mat-table [dataSource]=\"selectedDataSource\"\r\n *ngIf=\"selectedDataSource && selectedDataSource.data.length > 0; else showBlank\">\r\n <ng-container matColumnDef=\"delete\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-button (click)=\"$event.stopPropagation();removeRow($event, element)\">\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Remove row\">delete</mat-icon>\r\n </button>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"productName\">\r\n <th mat-header-cell *matHeaderCellDef> Product Name </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.text}} </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"categoryName\" *ngIf=\"showCategory\">\r\n <th mat-header-cell *matHeaderCellDef> Category Name </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.category}} </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"subCategory\" *ngIf=\"subCategory\">\r\n <th mat-header-cell *matHeaderCellDef>Sub Category </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.subCategory}} </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"price\" *ngIf=\"showPrice\">\r\n <th mat-header-cell *matHeaderCellDef>Price</th>\r\n <td mat-cell *matCellDef=\"let element; let i = index\">\r\n <mat-form-field class=\"example-full-width select-price\">\r\n <mat-label>Price</mat-label>\r\n <input matInput [formControl]=\"selectedProducts.at(i).get('price')\"\r\n placeholder=\"Please enter price\">\r\n <mat-error *ngIf=\"selectedProducts.at(i).get('price').hasError('required')\">\r\n Price is required\r\n </mat-error>\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"Quantity\" *ngIf=\"showQuantity\">\r\n <th mat-header-cell *matHeaderCellDef> Quantity </th>\r\n <td mat-cell *matCellDef=\"let element; let i = index\">\r\n <mat-form-field class=\"example-full-width select-qunatity\">\r\n <mat-label>Select quantity</mat-label>\r\n <input matInput [formControl]=\"selectedProducts.at(i).get('quantity')\"\r\n placeholder=\"Please enter quantity\">\r\n <mat-error *ngIf=\"selectedProducts.at(i).get('quantity').hasError('required')\">\r\n Quantity is required\r\n </mat-error>\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"showAllproductsColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: showAllproductsColumns;\"></tr>\r\n </table>\r\n <ng-template #showBlank>\r\n <div class=\"no-data-message\">\r\n No data found.\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div>\r\n <button mat-button matStepperPrevious>Back</button>\r\n <button mat-button matStepperNext type=\"submit\">Add products</button>\r\n </div>\r\n </form>\r\n </mat-step>\r\n</mat-stepper>\r\n</div>", styles: [".dropdown-section{display:flex;flex-direction:column;gap:16px}.form-row{display:flex;gap:16px}mat-form-field{flex:1}.new-class.mat-elevation-z8{margin-top:20px;max-height:350px;overflow-y:auto;margin-bottom:20px}.mat-column-select{width:50px;text-align:center}.mat-header-cell,.mat-cell{text-align:center}button{align-self:flex-end;margin-top:20px}.row-summary{margin-top:20px;font-weight:700}.new-class td{border:1px solid #ddd;padding:10px}.new-class th{background-color:#f2f2f2;position:-webkit-sticky;position:sticky;top:0;transform:none;z-index:99;padding:10px}table{width:100%;border-collapse:collapse}.select-qunatity,.select-price{width:110px}.no-data-message{text-align:center;margin:20px 0;font-size:18px;color:#888}.mat-step-header.cdk-keyboard-focused,mat-step-header.cdk-program-focused,.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:transparent}.OverlayDiv{position:fixed;display:block;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:#00000080;z-index:500;cursor:pointer}.OverlayDivContent{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4$5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i10.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i10.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i13.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i13.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i13.MatStepperNext, selector: "button[matStepperNext]", inputs: ["type"] }, { kind: "directive", type: i13.MatStepperPrevious, selector: "button[matStepperPrevious]", inputs: ["type"] }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: i14.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i14.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }] });
3352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AddOnProductsComponent, decorators: [{
3353
- type: Component,
3354
- args: [{ selector: 'ngx-mat-add-on-products', template: "<div *ngIf=\"spinnerFlag\" class=\"OverlayDiv\">\r\n <div class=\"OverlayDivContent\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n</div>\r\n<div class=\"product-selector\">\r\n <mat-stepper labelPosition=\"bottom\" #stepper>\r\n <mat-step [stepControl]=\"form\">\r\n <form [formGroup]=\"form\">\r\n <ng-template matStepLabel>Select Products</ng-template>\r\n <div class=\"dropdown-selection\">\r\n <div class=\"row-one\">\r\n <mat-form-field>\r\n <mat-label>Product Category</mat-label>\r\n <input type=\"text\" matInput formControlName=\"productCategory\" [matAutocomplete]=\"auto3\">\r\n <mat-autocomplete #auto3=\"matAutocomplete\"\r\n (optionSelected)=\"onOptionSelected($event, 'category1')\">\r\n <mat-option *ngFor=\"let option of filteredCategories\"\r\n [value]=\"option\">{{option}}</mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>&nbsp;&nbsp;\r\n\r\n <mat-form-field>\r\n <mat-label>Subcategory</mat-label>\r\n <input type=\"text\" matInput formControlName=\"productSubcategory\" [matAutocomplete]=\"auto4\">\r\n <mat-autocomplete #auto4=\"matAutocomplete\"\r\n (optionSelected)=\"onOptionSelected($event, 'subCategory')\">\r\n <mat-option *ngFor=\"let option of filteredSubCategories\"\r\n [value]=\"option\">{{option}}</mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div #firstscrollableDiv id=\"firstscrollableDiv\" class=\"new-class mat-elevation-z8 first-div\" (scroll)=\"onScroll($event)\">\r\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-table abc\"\r\n *ngIf=\"dataSource && dataSource.data.length > 0; else noData\">\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <!-- <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"isIndeterminate()\"></mat-checkbox> -->\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox color=\"primary\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? toggleSelection(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"></mat-checkbox>\r\n </td> \r\n </ng-container> \r\n\r\n <ng-container matColumnDef=\"productName\">\r\n <th mat-header-cell *matHeaderCellDef> Product Name </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.text}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"price\" *ngIf=\"showPrice\">\r\n <th mat-header-cell *matHeaderCellDef> Price </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.price}} </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"addProductsColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: addProductsColumns;\"></tr>\r\n </table>\r\n <ng-template #noData>\r\n <div class=\"no-data-message\">\r\n No data found.\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"row-summary\">\r\n <p>Rows: {{ getTotalRows() }} Selected: {{ getSelectedRowsCount() }}</p>\r\n </div>\r\n <div>\r\n <button mat-button [mat-dialog-close]=\"false\">Close</button>\r\n <button mat-button matStepperNext [disabled]=\"selection.selected.length ? false : true\">Next</button>\r\n </div>\r\n </form>\r\n </mat-step>\r\n <mat-step [stepControl]=\"form\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <ng-template matStepLabel>Edit/Save</ng-template>\r\n <div class=\"new-class mat-elevation-z8\">\r\n <table mat-table [dataSource]=\"selectedDataSource\"\r\n *ngIf=\"selectedDataSource && selectedDataSource.data.length > 0; else showBlank\">\r\n <ng-container matColumnDef=\"delete\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-button (click)=\"$event.stopPropagation();removeRow($event, element)\">\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Remove row\">delete</mat-icon>\r\n </button>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"productName\">\r\n <th mat-header-cell *matHeaderCellDef> Product Name </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.text}} </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"categoryName\" *ngIf=\"showCategory\">\r\n <th mat-header-cell *matHeaderCellDef> Category Name </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.category}} </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"subCategory\" *ngIf=\"subCategory\">\r\n <th mat-header-cell *matHeaderCellDef>Sub Category </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.subCategory}} </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"price\" *ngIf=\"showPrice\">\r\n <th mat-header-cell *matHeaderCellDef>Price</th>\r\n <td mat-cell *matCellDef=\"let element; let i = index\">\r\n <mat-form-field class=\"example-full-width select-price\">\r\n <mat-label>Price</mat-label>\r\n <input matInput [formControl]=\"selectedProducts.at(i).get('price')\"\r\n placeholder=\"Please enter price\">\r\n <mat-error *ngIf=\"selectedProducts.at(i).get('price').hasError('required')\">\r\n Price is required\r\n </mat-error>\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"Quantity\" *ngIf=\"showQuantity\">\r\n <th mat-header-cell *matHeaderCellDef> Quantity </th>\r\n <td mat-cell *matCellDef=\"let element; let i = index\">\r\n <mat-form-field class=\"example-full-width select-qunatity\">\r\n <mat-label>Select quantity</mat-label>\r\n <input matInput [formControl]=\"selectedProducts.at(i).get('quantity')\"\r\n placeholder=\"Please enter quantity\">\r\n <mat-error *ngIf=\"selectedProducts.at(i).get('quantity').hasError('required')\">\r\n Quantity is required\r\n </mat-error>\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"showAllproductsColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: showAllproductsColumns;\"></tr>\r\n </table>\r\n <ng-template #showBlank>\r\n <div class=\"no-data-message\">\r\n No data found.\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div>\r\n <button mat-button matStepperPrevious>Back</button>\r\n <button mat-button matStepperNext type=\"submit\">Add products</button>\r\n </div>\r\n </form>\r\n </mat-step>\r\n</mat-stepper>\r\n</div>", styles: [".dropdown-section{display:flex;flex-direction:column;gap:16px}.form-row{display:flex;gap:16px}mat-form-field{flex:1}.new-class.mat-elevation-z8{margin-top:20px;max-height:350px;overflow-y:auto;margin-bottom:20px}.mat-column-select{width:50px;text-align:center}.mat-header-cell,.mat-cell{text-align:center}button{align-self:flex-end;margin-top:20px}.row-summary{margin-top:20px;font-weight:700}.new-class td{border:1px solid #ddd;padding:10px}.new-class th{background-color:#f2f2f2;position:-webkit-sticky;position:sticky;top:0;transform:none;z-index:99;padding:10px}table{width:100%;border-collapse:collapse}.select-qunatity,.select-price{width:110px}.no-data-message{text-align:center;margin:20px 0;font-size:18px;color:#888}.mat-step-header.cdk-keyboard-focused,mat-step-header.cdk-program-focused,.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:transparent}.OverlayDiv{position:fixed;display:block;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:#00000080;z-index:500;cursor:pointer}.OverlayDivContent{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}\n"] }]
3355
- }], ctorParameters: function () { return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
3356
- type: Inject,
3357
- args: [MAT_DIALOG_DATA]
3358
- }] }, { type: i2.FormBuilder }, { type: i1$1.MatDialog }, { type: CommonService }]; }, propDecorators: { firstscrollableDiv: [{
3359
- type: ViewChild,
3360
- args: ['firstscrollableDiv']
3361
- }] } });
3362
-
3363
- const ELEMENT_DATA = [];
3364
3000
  class MaterialDataGridComponent extends MaterialNestedComponent {
3365
- constructor(element, ref, dialog, commonService) {
3001
+ constructor(element, ref, dialog) {
3366
3002
  super(element, ref);
3367
3003
  this.element = element;
3368
3004
  this.ref = ref;
3369
3005
  this.dialog = dialog;
3370
- this.commonService = commonService;
3371
3006
  this.dataSource = new MatTableDataSource();
3372
- this.dataSourceNew = ELEMENT_DATA;
3373
- this.displayedColumnsNew = ['productName', 'category', 'subCategory', 'quantity', 'price'];
3374
- this.showNewProductPicker = false;
3375
- this.showCategory = false;
3376
- this.showSubcategory = false;
3377
- this.showPrice = true;
3378
- this.showQuantity = true;
3379
- this.category = '';
3380
- this.subCategory = '';
3381
- this.hasInitialized = false;
3382
3007
  }
3383
3008
  getColumnLabel(column) {
3384
3009
  return column.label || column.key;
3385
3010
  }
3386
- checkIsAttributeTrue(newProductPickerFlag, attributeName) {
3387
- return newProductPickerFlag && Object.keys(newProductPickerFlag).some(key => key.toLocaleLowerCase() === attributeName.toLowerCase() &&
3388
- newProductPickerFlag[key].toLowerCase() === "true");
3389
- }
3390
- // ngOnInit(): void {
3391
- // }
3392
3011
  setInstance(instance) {
3393
- const newProductPickerFlag = instance?.component?.attributes;
3394
- this.showNewProductPicker = this.checkIsAttributeTrue(newProductPickerFlag, "newproductpicker");
3395
- this.showCategory = this.checkIsAttributeTrue(newProductPickerFlag, "showCategory");
3396
- this.showSubcategory = this.checkIsAttributeTrue(newProductPickerFlag, "showSubcategory");
3397
- this.showPrice = this.checkIsAttributeTrue(newProductPickerFlag, "showPrice");
3398
- this.showQuantity = this.checkIsAttributeTrue(newProductPickerFlag, "showQuantity");
3399
3012
  super.setInstance(instance);
3400
- if (this.showNewProductPicker && !this.hasInitialized) {
3401
- if (!this.showCategory) {
3402
- this.removeColumn('category');
3403
- }
3404
- if (!this.showQuantity) {
3405
- this.removeColumn('quantity');
3406
- }
3407
- if (!this.showPrice) {
3408
- this.removeColumn('price');
3409
- }
3410
- if (!this.showSubcategory) {
3411
- this.removeColumn('subCategory');
3412
- }
3413
- const checkProducts = JSON.parse(localStorage.getItem('dealData')) || [];
3414
- const dealId = checkProducts?.dealId;
3415
- const storedData = localStorage.getItem(`selectedProducts-${dealId}`);
3416
- if (storedData?.length) {
3417
- this.dataSourceNew = JSON.parse(storedData);
3418
- }
3419
- else {
3420
- this.dataSourceNew = [];
3421
- }
3422
- // Set flag to true to prevent further execution
3423
- this.hasInitialized = true;
3424
- }
3425
- else {
3426
- this.dataSource.data = instance.dataValue;
3427
- }
3013
+ this.dataSource.data = instance.dataValue;
3428
3014
  this.columns = {};
3429
3015
  this.displayedColumns = [];
3430
3016
  this.formColumns = [];
@@ -3452,10 +3038,7 @@ class MaterialDataGridComponent extends MaterialNestedComponent {
3452
3038
  return viewContainer ? viewContainer : null;
3453
3039
  };
3454
3040
  }
3455
- removeColumn(columnName) {
3456
- this.displayedColumnsNew = this.displayedColumnsNew.filter(column => column !== columnName);
3457
- }
3458
- addAnotherOld() {
3041
+ addAnother() {
3459
3042
  this.checkRowsNumber();
3460
3043
  this.instance.addRow();
3461
3044
  if (this.dataSource.data.length < this.instance.rows.length) {
@@ -3463,58 +3046,6 @@ class MaterialDataGridComponent extends MaterialNestedComponent {
3463
3046
  }
3464
3047
  this.dataSource.data = [...this.dataSource.data];
3465
3048
  }
3466
- addAnother() {
3467
- if (this.showNewProductPicker) {
3468
- const savedData = JSON.parse(localStorage.getItem('saveCat'));
3469
- const checkProducts = JSON.parse(localStorage.getItem('dealData')) || [];
3470
- // Use optional chaining and nullish coalescing to set the values
3471
- this.category = savedData?.category ?? this.category;
3472
- this.subCategory = savedData?.subCategory ?? this.subCategory;
3473
- const diologeRef = this.dialog.open(AddOnProductsComponent, {
3474
- disableClose: true,
3475
- width: '90%',
3476
- maxWidth: '900px',
3477
- autoFocus: false,
3478
- data: { attributesFlag: { showNewProductPicker: this.showNewProductPicker, showCategory: this.showCategory, showSubcategory: this.showSubcategory, showPrice: this.showPrice, showQuantity: this.showQuantity }, selectedProducts: this.dataSourceNew, category: this.category, subCategory: this.subCategory }
3479
- })
3480
- .afterClosed().subscribe(response => {
3481
- if (response?.data?.status) {
3482
- if (!this.showCategory) {
3483
- this.removeColumn('category');
3484
- }
3485
- if (!this.showQuantity) {
3486
- this.removeColumn('quantity');
3487
- }
3488
- if (!this.showPrice) {
3489
- this.removeColumn('price');
3490
- }
3491
- if (!this.showSubcategory) {
3492
- this.removeColumn('subCategory');
3493
- }
3494
- //localStorage.setItem('selectedProducts', JSON.stringify(response.data.items.selectedProducts))
3495
- const dealId = checkProducts?.dealId;
3496
- localStorage.setItem(`selectedProducts-${dealId}`, JSON.stringify(response.data.items.selectedProducts));
3497
- this.dataSourceNew = response.data.items.selectedProducts;
3498
- this.category = response.data.items.productCategory;
3499
- this.subCategory = response.data.items.productSubcategory;
3500
- const catObject = {
3501
- category: this.category,
3502
- subCategory: this.subCategory
3503
- };
3504
- localStorage.setItem('saveCat', JSON.stringify(catObject));
3505
- this.instance.component.defaultValue = response.data.items.selectedProducts;
3506
- }
3507
- });
3508
- }
3509
- else {
3510
- this.checkRowsNumber();
3511
- this.instance.addRow();
3512
- if (this.dataSource.data.length < this.instance.rows.length) {
3513
- this.dataSource.data.push({});
3514
- }
3515
- this.dataSource.data = [...this.dataSource.data];
3516
- }
3517
- }
3518
3049
  checkRowsNumber() {
3519
3050
  while (this.instance.rows.length < this.dataSource.data.length) {
3520
3051
  this.instance.addRow();
@@ -3564,7 +3095,7 @@ class MaterialDataGridComponent extends MaterialNestedComponent {
3564
3095
  super.setValue(value);
3565
3096
  }
3566
3097
  }
3567
- MaterialDataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialDataGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.MatDialog }, { token: CommonService }], target: i0.ɵɵFactoryTarget.Component });
3098
+ MaterialDataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialDataGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
3568
3099
  MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MaterialDataGridComponent, selector: "mat-formio-datagrid", usesInheritance: true, ngImport: i0, template: `
3569
3100
  <mat-formio-form-field [instance]="instance"
3570
3101
  [componentTemplate]="componentTemplate"
@@ -3583,8 +3114,6 @@ MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
3583
3114
  {{instance.component.addAnother || 'Add Another'}}
3584
3115
  </button>
3585
3116
  </mat-card-actions>
3586
- <ng-container *ngIf="!showNewProductPicker">
3587
- <div class="mat-elevation-z8">
3588
3117
  <table
3589
3118
  mat-table
3590
3119
  [dataSource]="dataSource"
@@ -3593,8 +3122,7 @@ MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
3593
3122
  cdkDropList
3594
3123
  [cdkDropListData]="dataSource"
3595
3124
  (cdkDropListDropped)="dropTable($event)">
3596
-
3597
-
3125
+ >
3598
3126
  <ng-container *ngFor="let column of formColumns" [matColumnDef]="column">
3599
3127
  <th mat-header-cell *matHeaderCellDef>{{ getColumnLabel(columns[column]) }}</th>
3600
3128
  <td mat-cell *matCellDef="let i = index;" [attr.rowIndex]="i" [attr.component]="column">
@@ -3624,51 +3152,6 @@ MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
3624
3152
  <tr class="datagrid-row" mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
3625
3153
  </div>
3626
3154
  </table>
3627
- </div>
3628
- </ng-container>
3629
-
3630
- <table mat-table [dataSource]="dataSourceNew" class="mat-table" *ngIf="dataSourceNew.length > 0 && showNewProductPicker; else noData" >
3631
- <!-- Product Name Column -->
3632
- <ng-container matColumnDef="productName">
3633
- <th mat-header-cell *matHeaderCellDef> Product Name </th>
3634
- <td mat-cell *matCellDef="let element"> {{element.text}} </td>
3635
- </ng-container>
3636
-
3637
- <!-- Quantity Column -->
3638
- <ng-container matColumnDef="quantity" *ngIf="showQuantity">
3639
- <th mat-header-cell *matHeaderCellDef> Quantity </th>
3640
- <td mat-cell *matCellDef="let element"> {{element.quantity}} </td>
3641
- </ng-container>
3642
-
3643
- <!-- Price Column -->
3644
- <ng-container matColumnDef="price" *ngIf="showPrice">
3645
- <th mat-header-cell *matHeaderCellDef> Price </th>
3646
- <td mat-cell *matCellDef="let element"> {{element.price}} </td>
3647
- </ng-container>
3648
-
3649
- <!-- Category Column -->
3650
- <ng-container matColumnDef="category" *ngIf="showCategory">
3651
- <th mat-header-cell *matHeaderCellDef> Category </th>
3652
- <td mat-cell *matCellDef="let element"> {{element.category}} </td>
3653
- </ng-container>
3654
-
3655
- <!-- Category Column -->
3656
- <ng-container matColumnDef="subCategory" *ngIf="showSubcategory">
3657
- <th mat-header-cell *matHeaderCellDef> Sub Category </th>
3658
- <td mat-cell *matCellDef="let element"> {{element.subCategory}} </td>
3659
- </ng-container>
3660
-
3661
- <tr mat-header-row *matHeaderRowDef="displayedColumnsNew"></tr>
3662
- <tr mat-row *matRowDef="let row; columns: displayedColumnsNew;"></tr>
3663
- </table>
3664
- <ng-template #noData>
3665
- <div class="no-data-message" *ngIf="showNewProductPicker">
3666
- No product found please add some products.
3667
- </div>
3668
- </ng-template>
3669
-
3670
-
3671
-
3672
3155
  </mat-card-content>
3673
3156
  <mat-card-actions *ngIf="instance.hasAddButton() && instance.component.addAnotherPosition !== 'top'">
3674
3157
  <button mat-raised-button color="primary" (click)="addAnother()">
@@ -3684,7 +3167,7 @@ MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
3684
3167
  <span [instance]="instance" matFormioLabel></span>
3685
3168
  </mat-card-title>
3686
3169
  </ng-template>
3687
- `, isInline: true, styles: [".datagrid-row{height:auto}.mat-table{width:100%}.mat-header-cell,.mat-cell{padding:8px}.no-data-message{text-align:center;margin:20px 0;font-size:18px;color:#888}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i10.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i10.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i4.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i9$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i9$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i9$1.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }] });
3170
+ `, isInline: true, styles: [".datagrid-row{height:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4$7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$7.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4$7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4$7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i4.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }] });
3688
3171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialDataGridComponent, decorators: [{
3689
3172
  type: Component,
3690
3173
  args: [{ selector: 'mat-formio-datagrid', template: `
@@ -3705,8 +3188,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
3705
3188
  {{instance.component.addAnother || 'Add Another'}}
3706
3189
  </button>
3707
3190
  </mat-card-actions>
3708
- <ng-container *ngIf="!showNewProductPicker">
3709
- <div class="mat-elevation-z8">
3710
3191
  <table
3711
3192
  mat-table
3712
3193
  [dataSource]="dataSource"
@@ -3715,8 +3196,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
3715
3196
  cdkDropList
3716
3197
  [cdkDropListData]="dataSource"
3717
3198
  (cdkDropListDropped)="dropTable($event)">
3718
-
3719
-
3199
+ >
3720
3200
  <ng-container *ngFor="let column of formColumns" [matColumnDef]="column">
3721
3201
  <th mat-header-cell *matHeaderCellDef>{{ getColumnLabel(columns[column]) }}</th>
3722
3202
  <td mat-cell *matCellDef="let i = index;" [attr.rowIndex]="i" [attr.component]="column">
@@ -3746,51 +3226,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
3746
3226
  <tr class="datagrid-row" mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
3747
3227
  </div>
3748
3228
  </table>
3749
- </div>
3750
- </ng-container>
3751
-
3752
- <table mat-table [dataSource]="dataSourceNew" class="mat-table" *ngIf="dataSourceNew.length > 0 && showNewProductPicker; else noData" >
3753
- <!-- Product Name Column -->
3754
- <ng-container matColumnDef="productName">
3755
- <th mat-header-cell *matHeaderCellDef> Product Name </th>
3756
- <td mat-cell *matCellDef="let element"> {{element.text}} </td>
3757
- </ng-container>
3758
-
3759
- <!-- Quantity Column -->
3760
- <ng-container matColumnDef="quantity" *ngIf="showQuantity">
3761
- <th mat-header-cell *matHeaderCellDef> Quantity </th>
3762
- <td mat-cell *matCellDef="let element"> {{element.quantity}} </td>
3763
- </ng-container>
3764
-
3765
- <!-- Price Column -->
3766
- <ng-container matColumnDef="price" *ngIf="showPrice">
3767
- <th mat-header-cell *matHeaderCellDef> Price </th>
3768
- <td mat-cell *matCellDef="let element"> {{element.price}} </td>
3769
- </ng-container>
3770
-
3771
- <!-- Category Column -->
3772
- <ng-container matColumnDef="category" *ngIf="showCategory">
3773
- <th mat-header-cell *matHeaderCellDef> Category </th>
3774
- <td mat-cell *matCellDef="let element"> {{element.category}} </td>
3775
- </ng-container>
3776
-
3777
- <!-- Category Column -->
3778
- <ng-container matColumnDef="subCategory" *ngIf="showSubcategory">
3779
- <th mat-header-cell *matHeaderCellDef> Sub Category </th>
3780
- <td mat-cell *matCellDef="let element"> {{element.subCategory}} </td>
3781
- </ng-container>
3782
-
3783
- <tr mat-header-row *matHeaderRowDef="displayedColumnsNew"></tr>
3784
- <tr mat-row *matRowDef="let row; columns: displayedColumnsNew;"></tr>
3785
- </table>
3786
- <ng-template #noData>
3787
- <div class="no-data-message" *ngIf="showNewProductPicker">
3788
- No product found please add some products.
3789
- </div>
3790
- </ng-template>
3791
-
3792
-
3793
-
3794
3229
  </mat-card-content>
3795
3230
  <mat-card-actions *ngIf="instance.hasAddButton() && instance.component.addAnotherPosition !== 'top'">
3796
3231
  <button mat-raised-button color="primary" (click)="addAnother()">
@@ -3806,8 +3241,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
3806
3241
  <span [instance]="instance" matFormioLabel></span>
3807
3242
  </mat-card-title>
3808
3243
  </ng-template>
3809
- `, styles: [".datagrid-row{height:auto}.mat-table{width:100%}.mat-header-cell,.mat-cell{padding:8px}.no-data-message{text-align:center;margin:20px 0;font-size:18px;color:#888}\n"] }]
3810
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.MatDialog }, { type: CommonService }]; } });
3244
+ `, styles: [".datagrid-row{height:auto}\n"] }]
3245
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$2.MatDialog }]; } });
3811
3246
  DataGridComponent.MaterialComponent = MaterialDataGridComponent;
3812
3247
 
3813
3248
  var EditRowState;
@@ -4193,7 +3628,7 @@ MaterialWizardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
4193
3628
  <button *ngIf="instance.hasButton('submit')" mat-raised-button color="primary" (click)="submit()">Submit</button>
4194
3629
  </div>
4195
3630
  </mat-step>
4196
- </mat-horizontal-stepper>`, isInline: true, styles: [":host .navigation-button-row{margin-top:8px}\n", ":host .navigation-button-row button{margin-right:8px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "component", type: i13.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }] });
3631
+ </mat-horizontal-stepper>`, isInline: true, styles: [":host .navigation-button-row{margin-top:8px}\n", ":host .navigation-button-row button{margin-right:8px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$3.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "component", type: i3$3.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }] });
4197
3632
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialWizardComponent, decorators: [{
4198
3633
  type: Component,
4199
3634
  args: [{ selector: 'mat-formio-wizard', template: `
@@ -4363,7 +3798,7 @@ FormioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
4363
3798
  <div fxLayout="column" fxLayoutGap="1em">
4364
3799
  <ng-template #formio></ng-template>
4365
3800
  </div>
4366
- `, isInline: true, styles: [".alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:.5rem;border:1px solid transparent;border-radius:.25rem}::ng-deep mat-card{box-sizing:border-box;-moz-box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }] });
3801
+ `, isInline: true, styles: [".alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:.5rem;border:1px solid transparent;border-radius:.25rem}::ng-deep mat-card{box-sizing:border-box;-moz-box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }] });
4367
3802
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: FormioComponent, decorators: [{
4368
3803
  type: Component,
4369
3804
  args: [{ selector: 'mat-formio', template: `
@@ -4433,8 +3868,7 @@ NgxRenderMaterialFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.
4433
3868
  FormioFormFieldComponent,
4434
3869
  LabelComponent,
4435
3870
  MaskDirective,
4436
- ConfirmationDialogComponent,
4437
- AddOnProductsComponent], imports: [CommonModule,
3871
+ ConfirmationDialogComponent], imports: [CommonModule,
4438
3872
  FormsModule,
4439
3873
  ReactiveFormsModule,
4440
3874
  MatInputModule,
@@ -4462,9 +3896,7 @@ NgxRenderMaterialFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.
4462
3896
  ScrollingModule,
4463
3897
  NgxMatSelectSearchModule,
4464
3898
  MatDialogModule,
4465
- HttpClientModule,
4466
- MatAutocompleteModule], exports: [MatAutocompleteModule,
4467
- NgxRenderMaterialFormsComponent,
3899
+ HttpClientModule], exports: [NgxRenderMaterialFormsComponent,
4468
3900
  FormioComponent,
4469
3901
  MatInputModule,
4470
3902
  MatFormFieldModule,
@@ -4518,9 +3950,7 @@ NgxRenderMaterialFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.
4518
3950
  ScrollingModule,
4519
3951
  NgxMatSelectSearchModule,
4520
3952
  MatDialogModule,
4521
- HttpClientModule,
4522
- MatAutocompleteModule, MatAutocompleteModule,
4523
- MatInputModule,
3953
+ HttpClientModule, MatInputModule,
4524
3954
  MatFormFieldModule,
4525
3955
  MatCheckboxModule,
4526
3956
  MatRadioModule,
@@ -4588,8 +4018,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
4588
4018
  FormioFormFieldComponent,
4589
4019
  LabelComponent,
4590
4020
  MaskDirective,
4591
- ConfirmationDialogComponent,
4592
- AddOnProductsComponent
4021
+ ConfirmationDialogComponent
4593
4022
  ],
4594
4023
  imports: [
4595
4024
  CommonModule,
@@ -4620,11 +4049,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
4620
4049
  ScrollingModule,
4621
4050
  NgxMatSelectSearchModule,
4622
4051
  MatDialogModule,
4623
- HttpClientModule,
4624
- MatAutocompleteModule
4052
+ HttpClientModule
4625
4053
  ],
4626
4054
  exports: [
4627
- MatAutocompleteModule,
4628
4055
  NgxRenderMaterialFormsComponent,
4629
4056
  FormioComponent,
4630
4057
  MatInputModule,