{"version":3,"file":"ngvip-common-form.mjs","sources":["../../../projects/common-form/src/lib/common-control/common-group.model.ts","../../../projects/common-form/src/lib/common-control/common-control.model.ts","../../../projects/common-form/src/lib/validator/form-error-state.matcher.ts","../../../projects/common-form/src/lib/validator/validator.service.ts","../../../projects/common-form/src/lib/dynamic-form/abstract-form-component.ts","../../../projects/common-form/src/lib/dynamic-form/dynamic-form-data.service.ts","../../../projects/common-form/src/lib/input-components/common-autocomplete/select-on-tab.directive.ts","../../../projects/common-form/src/lib/input-components/common-autocomplete/common-autocomplete.component.ts","../../../projects/common-form/src/lib/input-components/common-autocomplete/common-autocomplete.html","../../../projects/common-form/src/lib/dynamic-form/dynamic-form.component.ts","../../../projects/common-form/src/lib/dynamic-form/dynamic-form.component.html","../../../projects/common-form/src/lib/dynamic-form/dynamic-form.service.ts","../../../projects/common-form/src/lib/input-components/common-autocomplete/common-autocomplete.module.ts","../../../projects/common-form/src/lib/dynamic-form/dynamic-form.module.ts","../../../projects/common-form/src/lib/validator/form.validation.ts","../../../projects/common-form/src/lib/import/import-template/import-template.model.ts","../../../projects/common-form/src/lib/import/import-template/import-template-map.model.ts","../../../projects/common-form/src/lib/import/import-data.service.ts","../../../projects/common-form/src/lib/import/import-template/import-template.component.ts","../../../projects/common-form/src/lib/import/import-template/import-template.component.html","../../../projects/common-form/src/lib/import/import.component.ts","../../../projects/common-form/src/lib/import/import.component.html","../../../projects/common-form/src/lib/import/import.service.ts","../../../projects/common-form/src/lib/import/import.module.ts","../../../projects/common-form/src/public_api.ts","../../../projects/common-form/src/ngvip-common-form.ts"],"sourcesContent":["import {\r\n  AbstractControlOptions, AsyncValidatorFn,\r\n  UntypedFormGroup,\r\n  ValidationErrors, ValidatorFn, Validators,\r\n} from '@angular/forms';\r\nimport {EventEmitter} from '@angular/core';\r\nimport {CommonFormControl} from './common-control.model';\r\n\r\n/**\r\n * Route maintenance header ->> rowWarningValidators ->> editableTable ->> refreshFormGroup ->> here\r\n * Constructor ->> Take validators and warning validators ->> raw ->> compose it ->> update value and validity\r\n */\r\nexport class CommonFormGroup extends UntypedFormGroup {\r\n  private _formWarnings: ValidationErrors | null;\r\n\r\n  private _rawWarningValidator: ValidatorFn | ValidatorFn[] | null;\r\n  private _composedWarningValidatorFn: ValidatorFn | null;\r\n\r\n  public warningChanges: EventEmitter<{[control: string]: ValidationErrors}> = new EventEmitter<{[control: string]: ValidationErrors}>();\r\n\r\n  public get warnings(): {[control: string]: ValidationErrors} {\r\n    return Object.keys(this.controls)\r\n      .reduce((result: {[control: string]: ValidationErrors}, controlName: string) => {\r\n        const controlWarning = (this.controls[controlName] as CommonFormControl).warnings;\r\n        if (controlWarning) {\r\n          result[controlName] = controlWarning;\r\n        }\r\n        return result;\r\n      }, { ...this.formWarnings });\r\n  }\r\n\r\n  get formWarnings(): ValidationErrors | null {\r\n    return this._formWarnings;\r\n  }\r\n  set formWarnings(validationErr: ValidationErrors | null) {\r\n    this._formWarnings = validationErr;\r\n  }\r\n\r\n  get warningValidator(): ValidatorFn | null {\r\n    return this._composedWarningValidatorFn;\r\n  }\r\n  set warningValidator(validatorFn: ValidatorFn | null) {\r\n    this._rawWarningValidator = this._composedWarningValidatorFn = validatorFn;\r\n  }\r\n\r\n  constructor(\r\n    formState: any = null,\r\n    validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\r\n    warningValidator?: ValidatorFn | ValidatorFn[] | null,\r\n    asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\r\n  ) {\r\n    super(formState, validatorOrOpts, asyncValidator);\r\n\r\n    this._rawWarningValidator = warningValidator;\r\n    this._composedWarningValidatorFn = Validators.compose(\r\n      this._rawWarningValidator instanceof Array ? this._rawWarningValidator : [this._rawWarningValidator]\r\n    );\r\n\r\n    this.updateValueAndValidity({onlySelf: true, emitEvent: true});\r\n  }\r\n\r\n  public hasWarnings(): boolean {\r\n    return Object.keys(this.warnings).length > 0;\r\n  }\r\n\r\n  public updateValueAndValidity(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {\r\n    super.updateValueAndValidity(opts);\r\n\r\n    if (this.enabled) {\r\n      (this as {formWarnings: ValidationErrors | null}).formWarnings = this._runWarningValidator();\r\n    }\r\n\r\n    if (opts?.emitEvent !== false ) {\r\n      this.warningChanges.emit(this.warnings);\r\n\r\n      // Keep track of ancestor warnings\r\n      if (this.parent && this.parent instanceof CommonFormGroup) {\r\n        this.parent.warningChanges.emit(this.parent.warnings);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Runs warning validator on formgroup\r\n   * @private\r\n   */\r\n  private _runWarningValidator(): ValidationErrors | null {\r\n    return this.warningValidator ? this.warningValidator(this) : null;\r\n  }\r\n}\r\n","import {\r\n  AbstractControlOptions,\r\n  AsyncValidatorFn,\r\n  FormBuilder,\r\n  UntypedFormControl,\r\n  FormGroup,\r\n  ValidationErrors,\r\n  Validators,\r\n  ValidatorFn\r\n} from '@angular/forms';\r\nimport {EventEmitter} from '@angular/core';\r\nimport {CommonFormGroup} from './common-group.model';\r\n\r\nexport class CommonFormControl extends UntypedFormControl {\r\n\r\n  readonly warnings: ValidationErrors | null;\r\n\r\n  private _rawWarningValidator: ValidatorFn | ValidatorFn[] | null;\r\n  private _composedWarningValidatorFn: ValidatorFn | null;\r\n\r\n  public warningChanges: EventEmitter<ValidationErrors> = new EventEmitter<ValidationErrors>();\r\n\r\n  get warningValidator(): ValidatorFn | null {\r\n    return this._composedWarningValidatorFn;\r\n  }\r\n  set warningValidator(validatorFn: ValidatorFn | null) {\r\n    this._rawWarningValidator = this._composedWarningValidatorFn = validatorFn;\r\n  }\r\n\r\n  constructor(\r\n    formState: any = null,\r\n    validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\r\n    warningValidator?: ValidatorFn | ValidatorFn[] | null,\r\n    asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\r\n  ) {\r\n    super(formState, validatorOrOpts, asyncValidator);\r\n\r\n    this._rawWarningValidator = warningValidator;\r\n    this._composedWarningValidatorFn = Validators.compose(\r\n      this._rawWarningValidator instanceof Array ? this._rawWarningValidator : [this._rawWarningValidator]\r\n    );\r\n\r\n    this.updateValueAndValidity({onlySelf: true, emitEvent: true});\r\n  }\r\n\r\n  public updateValueAndValidity(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {\r\n    super.updateValueAndValidity(opts);\r\n\r\n    if (this.enabled) {\r\n      (this as {warnings: ValidationErrors | null}).warnings = this._runWarningValidator();\r\n    }\r\n\r\n    if (opts?.emitEvent !== false ) {\r\n      this.warningChanges.emit(this.warnings);\r\n\r\n      if (this.parent && this.parent instanceof CommonFormGroup) {\r\n        this.parent.warningChanges.emit(this.parent.warnings);\r\n      }\r\n    }\r\n  }\r\n\r\n  public setWarningValidators(validators: ValidatorFn | ValidatorFn[] | null): void {\r\n    this._rawWarningValidator = validators;\r\n    this._composedWarningValidatorFn = this._composedWarningValidatorFn = Validators.compose(\r\n      this._rawWarningValidator instanceof Array ? this._rawWarningValidator : [this._rawWarningValidator]\r\n    );\r\n  }\r\n\r\n  private _runWarningValidator(): ValidationErrors | null {\r\n    return this.warningValidator ? this.warningValidator(this) : null;\r\n  }\r\n\r\n}\r\n","import {UntypedFormControl, FormGroupDirective, NgForm} from '@angular/forms';\r\nimport {ErrorStateMatcher} from '@angular/material/core';\r\n\r\n/** Error when invalid control is dirty or touched. */\r\nexport class FormErrorStateMatcher implements ErrorStateMatcher {\r\n  public isErrorState: (control: (UntypedFormControl | null), form: (FormGroupDirective | NgForm | null)) =>\r\n    boolean = (control: UntypedFormControl | null):\r\n    boolean => (control && control.invalid && (!!control || control.dirty || control.touched))\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {AbstractControl, ValidatorFn, Validators} from '@angular/forms';\r\nimport {FieldConfig, Validator} from '../dynamic-form/field.interface';\r\n\r\n@Injectable()\r\nexport class ValidatorService {\r\n\r\n  /**\r\n   * Transform array of validators from fieldConfig to be consumed by the formControl\r\n   * @param config Field config to retrieve validator Functions the formControl should validate the data against\r\n   * @return An array of validators.\r\n   */\r\n  static buildValidatorFromFieldConfig(config?: FieldConfig): ValidatorFn | null {\r\n    const validators = config.validators ?? [];\r\n    const requiredValidator = config?.validators?.find((validator) => validator.name === 'required');\r\n\r\n    if (config?.required && !requiredValidator) {\r\n      validators.push({\r\n        name: 'required',\r\n        validator: Validators.required,\r\n        message: `${config.label} is required.`\r\n      });\r\n    }\r\n\r\n    return ValidatorService.buildValidators(validators);\r\n  }\r\n\r\n  /**\r\n   * Build array of validators based on the passed in validation\r\n   * @param validators\r\n   */\r\n  static buildValidators(validators: Validator[]): ValidatorFn | null {\r\n    const validatorList = [];\r\n    if (validators && validators.length > 0) {\r\n      validators.forEach((validatorConfig: Validator) => {\r\n        validatorList.push(validatorConfig.validator);\r\n      });\r\n    }\r\n    return Validators.compose(validatorList);\r\n  }\r\n\r\n  /**\r\n   * Create Validator for formControl based off passed in Error Map.\r\n   * @param submitValue\r\n   * @param errorMessage\r\n   * @return ResponseError validator function with message from error map\r\n   * TODO This will not work in some instances\r\n   * TODO If two fields have errored and can be set to the same value you will see the message in a situation in which you wouldn't expect\r\n   */\r\n  static checkForErrorMessages(submitValue: string, errorMessage?: string): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: string } | null => {\r\n      if (control.value && submitValue === control.value && errorMessage) {\r\n        return {'responseError': errorMessage};\r\n      }\r\n      return null;\r\n    };\r\n  }\r\n\r\n}\r\n","import {UntypedFormGroup} from '@angular/forms';\r\nimport {take, takeUntil} from 'rxjs/operators';\r\nimport {fromEvent, Observable, Subject} from 'rxjs';\r\nimport {LocalStorageCommunicator} from '@ngvip/service';\r\nimport {ConfirmationDialogComponent, VipDialogService} from '@ngvip/ui';\r\n\r\nexport abstract class AbstractFormComponent {\r\n  protected dirty = false;\r\n  protected unsubscribe$: Subject<void> = new Subject<void>();\r\n  private keyboardEvents: Observable<Event> = fromEvent(document, 'keydown');\r\n  public dirtyInterruptOpen: boolean;\r\n\r\n  private _initialFormData: { [key: string]: any };\r\n  get initialFormData(): { [key: string]: any } {\r\n    return this._initialFormData;\r\n  }\r\n  set initialFormData(data: {[key: string]: any}) {\r\n    this._initialFormData = data;\r\n    this.dirty = false;\r\n    this.localStorageCommunicator?.setChild('dirty', this.dirty);\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param dialogService used to create dialogs in {@link transitionWithUnsavedChanges}\r\n   * @param localStorageCommunicator used for dirty interrupts\r\n   * @constructor\r\n   */\r\n  protected constructor(\r\n    protected dialogService: VipDialogService,\r\n    protected localStorageCommunicator?: LocalStorageCommunicator\r\n  ) {\r\n    /**\r\n     * Listen for Escape to cancel and Ctrl + S to save if enabled\r\n     */\r\n    this.keyboardEvents\r\n      .pipe(takeUntil(this.unsubscribe$))\r\n      .subscribe((event: KeyboardEvent) => {\r\n        if (event.code === 'Escape' && !this.dirtyInterruptOpen) {\r\n          if (!this.disableEscToClose()) {\r\n            return this.transitionWithUnsavedChanges();\r\n          }\r\n        }\r\n\r\n        if (event.ctrlKey && event.key === 's') {\r\n          event.preventDefault();\r\n          event.stopPropagation();\r\n          if (!this.disableSave() && !this.disableCtrlSToSave()) {\r\n            return this.submit();\r\n          }\r\n        }\r\n      });\r\n  }\r\n\r\n  /**\r\n   * When a change occurs iterate over the Object keys in {@link initialFormData} looking for a change\r\n   * and set the dirty flag appropriately.\r\n   * @param form FormGroup to track for changes. {@link initialFormData} is set from this.\r\n   */\r\n  protected initializeFormTracking(form: UntypedFormGroup): void {\r\n    this._initialFormData = form.getRawValue();\r\n    form.valueChanges\r\n      .pipe(takeUntil(this.unsubscribe$))\r\n      .subscribe(() => {\r\n        const oldDirty = this.isDirty();\r\n        this.dirty = Object.keys(this._initialFormData).some((key) => {\r\n          return form.get(key).value !== this._initialFormData[key];\r\n        });\r\n\r\n        if (this.isDirty() !== oldDirty) {\r\n          this.localStorageCommunicator?.setChild('dirty', this.dirty);\r\n        }\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Check if form is dirty, and create dialog if unsaved changes will be lost.\r\n   * @param [transitionHandler = this.transitionHandler()] - What should be done if not dirty, or the user wants to abandon changes.\r\n   * @param [forceDirty = false] Force the dialog to show regardless of form state.\r\n   */\r\n  public transitionWithUnsavedChanges(transitionHandler: () => void = () => this.transitionHandler(), forceDirty: boolean = false) {\r\n    if (!this.isDirty() && !forceDirty) {\r\n      transitionHandler();\r\n    } else {\r\n      // Check to make sure there are no open confirmation dialogs before presenting another\r\n      let openConfirmDialog = false;\r\n      this.dialogService.dialog.openDialogs.forEach((dialog) => {\r\n        if (dialog.componentInstance instanceof ConfirmationDialogComponent) {\r\n          openConfirmDialog = true;\r\n        }\r\n      });\r\n      if (openConfirmDialog) {\r\n        return;\r\n      }\r\n      this.dirtyInterruptOpen = true;\r\n      const dialog = this.dialogService.confirmWarning({\r\n        handler: () => transitionHandler(),\r\n        content:  `Changes will be deleted. Do you want to continue?`\r\n      }, {\r\n        hasBackdrop: true\r\n      });\r\n\r\n      dialog.afterClosed().pipe(take(1)).subscribe(() => this.dirtyInterruptOpen = false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks if the tracked form is dirty.\r\n   * @return true if the tracked form is dirty\r\n   */\r\n  public isDirty(): boolean {\r\n    return this.dirty;\r\n  }\r\n\r\n  /**\r\n   * Check if the form can be saved\r\n   * @return true if the from cannot be submitted\r\n   */\r\n  abstract disableSave(): boolean;\r\n\r\n  /**\r\n   * Action to submit the form\r\n   */\r\n  abstract submit(): void;\r\n\r\n  /**\r\n   * Default handler for {@link transitionWithUnsavedChanges}\r\n   */\r\n  abstract transitionHandler(): void;\r\n\r\n  /**\r\n   * Check if the form can call {@link transitionWithUnsavedChanges} by hitting Esc\r\n   */\r\n  abstract disableEscToClose(): boolean;\r\n\r\n  /**\r\n   * Check if the form can call {@link submit} by hitting ctrl+s\r\n   */\r\n  abstract disableCtrlSToSave(): boolean;\r\n\r\n  unsubscribe(): void {\r\n    this.unsubscribe$.next();\r\n    this.unsubscribe$.complete();\r\n  }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {BehaviorSubject, forkJoin, Observable, Subject} from 'rxjs';\r\nimport {AbstractModel, Lookup, ResponseModel} from '@ngvip/service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DynamicFormDataService {\r\n  public submitValue$: BehaviorSubject<AbstractModel> = new BehaviorSubject<AbstractModel>(null);\r\n  public submitDataBuilt$: Subject<void> = new Subject<void>();\r\n  public formValueChanges$: Subject<object> = new Subject();\r\n  constructor() { }\r\n\r\n  /**\r\n   * Use the lookup to get the value the best matches in the form control\r\n   * to ensure that the value being sent exists\r\n   *\r\n   * Note: this function was not being used, so I removed it for the angular 14 upgrade\r\n   *\r\n   * @param lookupDictionary A dictionary holding the field in the formControl and the request call associated with it.\r\n   */\r\n  // getLookUpValues(lookupDictionary: { [column: string]: Observable<ResponseModel<Lookup>> }): void {\r\n  //   const lookups = forkJoin(lookupDictionary);\r\n  //   const formData = this.submitValue$.value;\r\n  //\r\n  //   lookups.subscribe((values: { [column: string]: Observable<ResponseModel<Lookup>> }) => {\r\n  //     Object.keys(values).forEach((column: string) => {\r\n  //       if (values[column]['data'][0]?.identity) {\r\n  //         formData[column] = values[column]['data'][0]?.identity;\r\n  //       }\r\n  //     });\r\n  //     this.submitValue$.next(formData);\r\n  //     this.submitDataBuilt$.next();\r\n  //   });\r\n  // }\r\n}\r\n","import {MatAutocompleteTrigger} from '@angular/material/autocomplete';\r\nimport {Directive, HostListener} from '@angular/core';\r\n\r\n@Directive({selector: '[selectOnTab]'})\r\nexport class SelectOnTabDirective {\r\n  constructor(private autoTrigger: MatAutocompleteTrigger) {\r\n  }\r\n\r\n  @HostListener('keydown.tab') onTab() {\r\n    if (this.autoTrigger.activeOption) {\r\n      this.autoTrigger.activeOption._selectViaInteraction();\r\n      this.autoTrigger.autocomplete._emitSelectEvent(this.autoTrigger.activeOption);\r\n      this.autoTrigger['_resetActiveItem']();\r\n    }\r\n  }\r\n}\r\n","import {Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild} from '@angular/core';\r\nimport {MatAutocompleteTrigger} from '@angular/material/autocomplete';\r\nimport {ErrorStateMatcher} from '@angular/material/core';\r\nimport {debounceTime, distinctUntilChanged, take, takeUntil} from 'rxjs/operators';\r\nimport {AbstractControl, UntypedFormControl} from '@angular/forms';\r\nimport {BehaviorSubject, isObservable, Subject} from 'rxjs';\r\nimport {AbstractModel, FilterData, Lookup, ResponseModel} from '@ngvip/service';\r\nimport {FormErrorStateMatcher} from '../../validator/form-error-state.matcher';\r\nimport {FieldConfig} from '../../dynamic-form/field.interface';\r\nimport {MatInput} from '@angular/material/input';\r\n\r\n// TODO Allow providing in non-beverage api service. Add validator if no item is found in list (and it is required)\r\n\r\n@Component({\r\n  selector: 'vip-common-autocomplete',\r\n  templateUrl: 'common-autocomplete.html',\r\n  styleUrls: ['common-autocomplete.css']\r\n})\r\nexport class CommonAutocompleteComponent implements OnInit, OnChanges, OnDestroy {\r\n  @Input() public config: FieldConfig;\r\n  @Input() public data: AbstractModel[] | object[];\r\n  @Input() public name: string;\r\n  @Input() public control: AbstractControl;\r\n\r\n  @Output() private beforeChangeEvent: EventEmitter<string> = new EventEmitter<string>();\r\n  @Output() private changeEvent: EventEmitter<string> = new EventEmitter<string>();\r\n  @Output() private selectEvent: EventEmitter<AbstractModel> = new EventEmitter<AbstractModel>();\r\n  @Output() private blurEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\r\n\r\n  @ViewChild('autocompleteInput', {\r\n    read: MatAutocompleteTrigger, static: false\r\n  }) private autocompleteInput: MatAutocompleteTrigger | MatInput;\r\n\r\n  public _control: UntypedFormControl;\r\n  public selectedObject: AbstractModel | object;\r\n  public autocompleteSearch$: Subject<string> = new Subject<string>();\r\n  public autocompleteList$: BehaviorSubject<AbstractModel[] | object[]> = new BehaviorSubject<AbstractModel[] | object[]>([]);\r\n  public autocompleteErrorStateMatcher: ErrorStateMatcher;\r\n  public autocompleteWaitingForDebounce: boolean;\r\n  private unsubscribe$: Subject<void> = new Subject<void>();\r\n\r\n  constructor() {\r\n    // Clear other attributes when changed to reset lookups\r\n    this.autocompleteSearch$.pipe(\r\n      distinctUntilChanged(),\r\n      takeUntil(this.unsubscribe$) // Subscribe until component destroyed\r\n    ).subscribe((value: string) => {\r\n      this.autocompleteWaitingForDebounce = true;\r\n      this.autocompleteList$.next([]);\r\n\r\n      if (this.beforeChangeEvent) {\r\n        this.beforeChangeEvent.emit(value);\r\n      }\r\n    });\r\n\r\n    // Debounce the lookup\r\n    this.autocompleteSearch$.pipe(\r\n      distinctUntilChanged(),\r\n      debounceTime(500), // Milliseconds\r\n      takeUntil(this.unsubscribe$) // Subscribe until component destroyed\r\n    ).subscribe((value) => {\r\n      this.autocompleteWaitingForDebounce = false;\r\n      this.onAutocompleteChange(value);\r\n    });\r\n\r\n    this.autocompleteList$.pipe(\r\n      distinctUntilChanged(),\r\n      debounceTime(250),\r\n      takeUntil(this.unsubscribe$)\r\n    ).subscribe((list: AbstractModel[] | object[]) => {\r\n      if (list?.length === 1 && (this.config.requireSelection ?? true)) {\r\n        this.selectedObject = list[0];\r\n        this.control.setValue(this.selectedObject[this.config.submitField || this.config.lookupValue]);\r\n        if (!(this.autocompleteInput as MatInput)?.focused && this._control.value !== this.selectedObject[this.config.lookupValue]) {\r\n          this._control.setValue(this.selectedObject[this.config.lookupValue]);\r\n        }\r\n      } else if (!this._control.pristine) { // If a form has been initialized with a value, we don't want to mark it as invalid\r\n        this.selectedObject = null;\r\n        if (this.config.requireSelection ?? true) {\r\n          this.control.setValue(null);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  /********** ANGULAR METHODS **********/\r\n  ngOnInit(): void {\r\n    this._control = new UntypedFormControl(this.control.value, this.control.validator);\r\n\r\n    // Handle the form being reset\r\n    this.control.valueChanges.pipe(takeUntil(this.unsubscribe$)).subscribe((value: string) => {\r\n      if (this.control.pristine) {\r\n        this._control.setValue(value);\r\n        this.autocompleteSearch$.next(value);\r\n      }\r\n    });\r\n\r\n    this.checkRequiredFields();\r\n\r\n    // Disable control based on disable observable\r\n    if (!!this.config.disabled) {\r\n      this.config.disabled.pipe(takeUntil(this.unsubscribe$))\r\n        .subscribe(disabled => {\r\n          if (disabled) {\r\n            this.control.disable();\r\n            this._control.disable();\r\n          } else {\r\n            this.control.enable();\r\n            this._control.enable();\r\n          }\r\n        });\r\n    }\r\n\r\n    // if a value is supplied to the control populate the dropdown\r\n    if (this._control.value) {\r\n      this.filterData(this._control.value);\r\n      if (this.config.lookupService) {\r\n        this.config.lookupService.data$.pipe(take(1)).subscribe((data) => {\r\n          if (data && data.length > 0) {\r\n            this._control.setValue(data[0]?.[this.config.lookupValue]);\r\n          }\r\n        });\r\n      }\r\n      if (this.config.comboList) {\r\n        if (Array.isArray(this.config.comboList)) {\r\n          let item = this.config.comboList.find((listItem: object) => listItem[this.config.submitField] === this._control.value);\r\n          if (item) {\r\n            this._control.setValue((this.config.requireSelection ?? true) ? item[this.config.lookupValue] : item);\r\n          }\r\n        } else if (isObservable(this.config.comboList)) {\r\n          this.config.comboList.subscribe((data) => {\r\n            let item = data.find((listItem: object) => listItem[this.config.submitField] == this._control.value);\r\n            if (item) {\r\n              this._control.setValue((this.config.requireSelection ?? true) ? item[this.config.lookupValue]  : item);\r\n            }\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.config.initializeWithErrors) {\r\n      this.autocompleteErrorStateMatcher = new FormErrorStateMatcher();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * A callback method that is invoked immediately after the\r\n   * default change detector has checked data-bound properties\r\n   * if at least one has changed, and before the view and content\r\n   * children are checked.\r\n   * @param changes\r\n   */\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.data) {\r\n      this.filterData();\r\n    }\r\n\r\n    this.checkRequiredFields();\r\n  }\r\n\r\n  /**\r\n   * Unsubscribe to all subscribers on destruction of the component\r\n   */\r\n  public ngOnDestroy(): void {\r\n    this.unsubscribe$.next();\r\n    this.unsubscribe$.complete();\r\n  }\r\n\r\n  /**\r\n   * When the user selects an item from the dropdown, emit the selection and set the control.\r\n   * @param data The value from the dropdown.\r\n   */\r\n  public onAutocompleteSelect(data: AbstractModel): void {\r\n    this.control.setValue(data[this.config.submitField ? this.config.submitField : this.config.lookupValue]);\r\n    this._control.setValue((this.config.requireSelection ?? true) ? data[this.config.lookupValue] : data);\r\n    this.autocompleteList$.next([data]);\r\n\r\n    if (this.selectEvent) {\r\n      this.selectEvent.emit(data);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * When the user leaves the input close the panel and emit an event to the onBlur emitter\r\n   * @param event\r\n   */\r\n  public onAutocompleteBlur(event: FocusEvent): void {\r\n    if (!event || !event.relatedTarget || (<HTMLElement>event.relatedTarget).tagName !== 'MAT-OPTION') {\r\n      (this.autocompleteInput as MatAutocompleteTrigger).closePanel();\r\n\r\n      if (this.selectedObject) {\r\n        if (this.config.requireSelection ?? true) {\r\n          this._control.setValue(this.selectedObject[this.config.lookupValue]);\r\n        } else {\r\n          this._control.setValue(this.selectedObject);\r\n        }\r\n        if (this.config.submitField) { this.control.setValue(this.selectedObject[this.config.submitField]); }\r\n      }\r\n    }\r\n\r\n    if (this.blurEvent) {\r\n      this.blurEvent.emit(event);\r\n    }\r\n  }\r\n\r\n  /********** PUBLICLY ACCESSIBLE METHODS **********/\r\n  /**\r\n   * Focuses the input.\r\n   */\r\n  public focusInput(): void {\r\n    this.autocompleteInput['_element'].nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * Set the value of the input\r\n   * @param data\r\n   */\r\n  public setInput(data: AbstractModel): void {\r\n    this.autocompleteInput['_setTriggerValue'](data);\r\n  }\r\n\r\n  /**\r\n   * Set the dropdown list to an empty array\r\n   */\r\n  public resetAutocompleteList(): void {\r\n    this.autocompleteList$.next([]);\r\n  }\r\n\r\n  /**\r\n   * Determine if a formControl has an error\r\n   * @param error\r\n   */\r\n  public getFormControlErrors(error: string): boolean {\r\n    return this._control\r\n      && this._control.errors\r\n      && this._control.errors[error];\r\n  }\r\n\r\n  /**\r\n   * Retrive the selected value if there is one\r\n   */\r\n  public getSelectedObject(): AbstractModel | object {\r\n    return this.selectedObject;\r\n  }\r\n\r\n  /********** ALERT METHODS **********/\r\n  /**\r\n   * Notify developer that a config needs to be passed to the autoconfig if one wasn't given.\r\n   */\r\n  private checkRequiredFields() {\r\n    if (!this.config) {\r\n      throw new Error('CommonAutocompleteConfig must be provided to CommonAutocompleteComponent');\r\n    }\r\n  }\r\n\r\n  /********** DATA MANIPULATION METHODS **********/\r\n  /**\r\n   * As the user types filter value against the data provided\r\n   * or use the lookup call to retrieve data using the input as the search value\r\n   * @param filterValue\r\n   */\r\n  private filterData(filterValue?: string): void {\r\n    const value: string = filterValue || this._control?.value || '';\r\n    if (this.data) {\r\n      this.autocompleteList$.next(this.data.filter((data: AbstractModel) => {\r\n        return (this.config.localLookupFields || Object.keys(data)).some((field: string) => {\r\n          return data[field].toString().toUpperCase().includes(value.toString().toUpperCase());\r\n        });\r\n      }));\r\n    } else if (this.config.lookupService) {\r\n      const filter: FilterData[] = value ? [{field: 'search', value: `${value}`, type: 'string'}] : this.config.lookupDefaultFilter;\r\n      this.config.lookupService.list({\r\n          filter: filter,\r\n          sort: this.config.lookupDefaultSort || [],\r\n          start: 0, limit: 25\r\n        }\r\n      ).pipe(take(1)).subscribe((response: ResponseModel<Lookup>) => {\r\n        this.autocompleteList$.next(response.data);\r\n      });\r\n    }\r\n  }\r\n\r\n  /********** INPUT EVENT METHODS **********/\r\n  /**\r\n   * Perform the filter on change events coming from the input\r\n   * @param filterValue Value from the input\r\n   */\r\n  private onAutocompleteChange(filterValue: string): void {\r\n    this.filterData(filterValue);\r\n\r\n    // Only update the control value if requireSelection is false, otherwise wait until the user selects an item from the dropdown\r\n    if (!(this.config.requireSelection ?? true)) {\r\n      this.control.setValue(filterValue);\r\n    }\r\n\r\n    if (this.changeEvent) {\r\n      this.changeEvent.emit(filterValue);\r\n    }\r\n  }\r\n}\r\n","<!----- The user input form field ----->\r\n<mat-form-field [ngClass]=\"{'mat-form-field-warning': _control.getError('responseWarning')}\" [ngStyle]=\"config.styles\">\r\n  <mat-label>\r\n    {{config.label}}<span *ngIf=\"config.required\">*</span>\r\n  </mat-label>\r\n\r\n  <input #autocompleteInput (blur)=\"onAutocompleteBlur($event)\" (focusin)=\"$event.target.select()\"\r\n         (input)=\"autocompleteSearch$.next($event.target['value'])\"\r\n         [attr.cdkFocusInitial]=\"config.autoFocus || null\" [errorStateMatcher]=\"autocompleteErrorStateMatcher\"\r\n         [formControl]=\"_control\"\r\n         [matAutocomplete]=\"autoComplete\" [id]=\"name\" [name]=\"name\"\r\n         autocomplete=\"off\"\r\n         matInput selectOnTab title=\"\">\r\n\r\n  <mat-hint *ngIf=\"config.required\">Required</mat-hint>\r\n\r\n  <!----- Validation Error Display ----->\r\n  <ng-container *ngFor=\"let validator of config.validators\" ngProjectAs=\"mat-error\">\r\n    <mat-error *ngIf=\"getFormControlErrors(validator.name)\" matTooltipShowDelay=\"500\" [matTooltip]=\"validator.message\">{{validator.message}}</mat-error>\r\n  </ng-container>\r\n\r\n  <mat-error *ngIf=\"_control.getError('responseWarning')\" [matTooltip]=\"_control.getError('responseWarning')\"\r\n             class=\"mat-warning\" matTooltipShowDelay=\"500\">\r\n    {{_control.getError('responseWarning')}}\r\n  </mat-error>\r\n\r\n  <mat-error *ngIf=\"_control.getError('responseError')\"\r\n             [matTooltip]=\"_control.getError('responseError')\" matTooltipShowDelay=\"500\">\r\n    {{_control.getError('responseError')}}\r\n  </mat-error>\r\n</mat-form-field>\r\n\r\n\r\n<!---------- The autocomplete dropdown associated with the input ---------->\r\n<mat-autocomplete #autoComplete=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event.option.value)\"\r\n                  [displayWith]=\"config.triggerDisplay\" class=\"{{config.inputOnly ? 'hidden' : ''}}\">\r\n\r\n  <!----- Empty state (Effectively no auto-complete dropdown) ----->\r\n  <ng-container *ngIf=\"!autocompleteList$.value; else listData\"></ng-container>\r\n\r\n  <!----- List of the data returned ----->\r\n  <ng-template #listData>\r\n    <ng-container *ngIf=\"(!config.lookupService || !config.lookupService.listInProgress()) && autocompleteList$.value.length; else noData\">\r\n      <mat-option *ngFor=\"let item of autocompleteList$.value\" [ngStyle]=\"config.lookupStyle && config.lookupStyle(item)\"\r\n                  [value]=\"item\" class=\"smallish\">\r\n        <!----- Options  ----->\r\n        <div class=\"medium-options\">\r\n          {{item[config.lookupValue]}}\r\n          {{(config.lookupSecondaryValue && item[config.lookupSecondaryValue]) ? ' - ' + item[config.lookupSecondaryValue] : ''}}\r\n        </div>\r\n        <div *ngIf=\"config.lookupSmallValue && item[config.lookupSmallValue] && item[config.lookupSmallValue] !== '0'\"\r\n             class=\"small-options\">\r\n          {{config.lookupSmallText ? config.lookupSmallText + ': ' : ''}}\r\n          {{item[config.lookupSmallValue]}}\r\n        </div>\r\n        <ng-content></ng-content>\r\n      </mat-option>\r\n    </ng-container>\r\n  </ng-template>\r\n\r\n  <!----- No data returned ----->\r\n  <ng-template #noData>\r\n    <ng-container *ngIf=\"(!config.lookupService || !config.lookupService.listInProgress()) && !autocompleteList$.value.length && !autocompleteWaitingForDebounce; else loadingData\">\r\n      <mat-option class=\"smallish\" disabled>No items found</mat-option>\r\n    </ng-container>\r\n  </ng-template>\r\n\r\n  <!----- Loading the data ----->\r\n  <ng-template #loadingData>\r\n    <mat-option class=\"smallish loading\" disabled>\r\n      <mat-spinner [diameter]=\"30\" color=\"accent\" strokeWidth=\"3\"></mat-spinner>\r\n    </mat-option>\r\n  </ng-template>\r\n</mat-autocomplete>\r\n","import {Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Optional, Output, ViewChild} from '@angular/core';\r\nimport {FieldConfig, FieldGroupConfig, ListSet, Validator} from './field.interface';\r\nimport {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {FormErrorStateMatcher} from '../validator/form-error-state.matcher';\r\nimport {AbstractModel, LocalStorageCommunicator} from '@ngvip/service';\r\nimport {DynamicFormDataService} from './dynamic-form-data.service';\r\nimport {debounceTime, map, takeUntil} from 'rxjs/operators';\r\nimport {ValidatorService} from '../validator/validator.service';\r\nimport {VipDialogService} from '@ngvip/ui';\r\nimport {AbstractFormComponent} from './abstract-form-component';\r\nimport {combineLatest, merge, Subject} from 'rxjs';\r\nimport {CommonFormControl} from '../common-control/common-control.model';\r\nimport {CommonFormGroup} from '../common-control/common-group.model';\r\nimport {DatePipe} from '@angular/common';\r\n\r\n/**\r\n * @title Title of the add form defaults to Add\r\n * @fieldConfigs Array of configs used to build the formControls and the form.\r\n * @initializeWithErrors Whither the form should show errors on open.\r\n * @formData To prepopulate the form with values.\r\n * @errors To populate the form with errors.\r\n */\r\nexport interface DynamicFormConfig {\r\n  title?: string;\r\n  hideTitle?: boolean;\r\n  hideActionRow?: boolean;\r\n  disableFieldPlusNavigation?: boolean;\r\n  fieldConfigs: FieldConfig[];\r\n  fieldGroupConfigs?: { [key: string]: FieldGroupConfig };\r\n  formGroupValidators?: Validator[];\r\n  formGroupWarningValidators?: Validator[];\r\n  initializeWithErrors?: boolean;\r\n  initializeAsDirty?: boolean;\r\n  formData?: AbstractModel;\r\n  errors?: {\r\n    message?: string,\r\n    fieldErrors?: Map<string, string>\r\n  };\r\n  warning?: {\r\n    message?: string\r\n  };\r\n}\r\n\r\n@Component({\r\n  selector: 'vip-dynamic-form',\r\n  templateUrl: './dynamic-form.component.html',\r\n  styleUrls: ['./dynamic-form.component.css']\r\n})\r\nexport class DynamicFormComponent extends AbstractFormComponent implements OnInit, OnDestroy {\r\n  @ViewChild('saveButton') private saveButton;\r\n  // This is to handle the ability to use the dynamic form as a component outside a dialog\r\n  @Input() set config(config: DynamicFormConfig) {\r\n    if (config) {\r\n      this.initialize(config);\r\n      this._config = config;\r\n    }\r\n  }\r\n  get config(): DynamicFormConfig {\r\n    return this._config;\r\n  }\r\n  @Input() set dialogRef(dialogRef: MatDialogRef<any>) {\r\n    if (dialogRef) {\r\n      this.initializeDialog(dialogRef);\r\n    }\r\n  }\r\n  get dialogRef(): MatDialogRef<any> {\r\n    return this._dialogRef;\r\n  }\r\n  @Output() public swapView: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() public save: EventEmitter<object> = new EventEmitter<object>();\r\n  @Output() public formChanged: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  private _dialogRef: MatDialogRef<any>;\r\n  private _config: DynamicFormConfig;\r\n  public fieldConfigs: FieldConfig[];\r\n  public formGroupValidators: Validator[];\r\n  public formGroupWarningValidators: Validator[];\r\n  public dynamicAddForm: CommonFormGroup;\r\n  public formData: AbstractModel;\r\n  public errorStateMatcher: FormErrorStateMatcher;\r\n  public errorMessage: string;\r\n  public warningMessage: string;\r\n  public formGroupErrorMessage: string;\r\n  public formGroupWarningMessage: string;\r\n  public fieldErrors: Map<string, string> = new Map<string, string>();\r\n  public fieldGroupMap: Map<string, FieldConfig[]> = new Map<string, FieldConfig[]>();\r\n  public hintMap: Map<string, {warning?: boolean, hint: string}> = new Map<string, {warning?: boolean, hint: string}>();\r\n\r\n  constructor(\r\n    @Optional() private matDialogRef: MatDialogRef<DynamicFormComponent>,\r\n    @Optional() @Inject(MAT_DIALOG_DATA) public data: DynamicFormConfig,\r\n    private dynamicFormDataService: DynamicFormDataService,\r\n    protected localStorageCommunicator: LocalStorageCommunicator,\r\n    protected dialogService: VipDialogService,\r\n    private datePipe: DatePipe\r\n  ) {\r\n    super(dialogService, localStorageCommunicator);\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (this.data) {\r\n      this.config = this.data;\r\n    }\r\n    if (this.matDialogRef && this.matDialogRef.componentInstance instanceof DynamicFormComponent) {\r\n      this.dialogRef = this.matDialogRef;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set all the information required for the component to render and function\r\n   * @param data\r\n   */\r\n  initialize(data: DynamicFormConfig): void {\r\n    // If using fieldGroupConfigs add a group for the configs that have none\r\n    if (data.fieldGroupConfigs) {\r\n      data.fieldGroupConfigs['no-group'] = {\r\n        title: '',\r\n        expanded: true\r\n      };\r\n    }\r\n    if (data.initializeWithErrors) {\r\n      this.errorMessage = data.errors?.message || this.errorMessage;\r\n      this.fieldErrors = data.errors?.fieldErrors || this.fieldErrors;\r\n      this.errorStateMatcher = new FormErrorStateMatcher();\r\n      data.fieldConfigs.forEach((config) => config.initializeWithErrors = true);\r\n    }\r\n\r\n    this.warningMessage = data.warning?.message || this.warningMessage;\r\n    this.fieldConfigs = data.fieldConfigs;\r\n    this.formGroupValidators = data.formGroupValidators || [];\r\n    this.formGroupWarningValidators = data.formGroupWarningValidators || [];\r\n    this.dynamicAddForm = new CommonFormGroup(\r\n      this.buildFormControls(),\r\n      {validators: this.formGroupValidators ? ValidatorService.buildValidators(this.formGroupValidators) : []},\r\n      ValidatorService.buildValidators(this.formGroupWarningValidators)\r\n      );\r\n\r\n    if (data.initializeAsDirty) {\r\n      this.initializeFormTracking(this.dynamicAddForm);\r\n    }\r\n\r\n    this.initializeDependentFields(data);\r\n\r\n    if (data.formData) {\r\n      this.formData = data.formData;\r\n      for (const formDataKey in data.formData) {\r\n        if (data.formData.hasOwnProperty(formDataKey) && this.dynamicAddForm.controls.hasOwnProperty(formDataKey)) {\r\n          const config = data.fieldConfigs.find((fieldConfig) => fieldConfig.controlName === formDataKey);\r\n          if (config?.controlType === 'date') {\r\n            // Convert it to a date for the Mat Date Picker because it comes back as a string\r\n            const formattedDate = this.datePipe.transform(data.formData[formDataKey]);\r\n            if (!!formattedDate) { // Don't display date if null\r\n              this.dynamicAddForm.get(formDataKey).setValue(new Date(formattedDate));\r\n            }\r\n          } else {\r\n            this.dynamicAddForm.get(formDataKey).setValue(data.formData[formDataKey]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!data.initializeAsDirty) {\r\n      this.initializeFormTracking(this.dynamicAddForm);\r\n    }\r\n\r\n    this.dynamicAddForm.valueChanges.pipe(\r\n      debounceTime(500),\r\n      takeUntil(this.unsubscribe$)\r\n    ).subscribe(() => this.formChanged.emit());\r\n\r\n    // The form only supports one importTemplate at a time\r\n    if (this.fieldConfigs.filter(value => value.controlType === 'importTemplate').length > 1) {\r\n      throw new Error('Dynamic form cannot accept more than one importTemplate field');\r\n    }\r\n    this.dynamicAddForm.valueChanges.subscribe((values) => {\r\n      this.dynamicFormDataService.formValueChanges$.next(values);\r\n\r\n      this.formGroupErrorMessage = undefined;\r\n      if (this.formGroupValidators) {\r\n        this.formGroupErrorMessage = this.getFormGroupErrorMessage();\r\n      }\r\n    });\r\n\r\n    // Listen to warnings for changes to keep the form up to date\r\n    this.dynamicAddForm.warningChanges.subscribe((warnings) => {\r\n      this.formGroupWarningMessage = undefined;\r\n      if (this.formGroupWarningValidators) {\r\n        this.formGroupWarningMessage = this.getFormGroupWarningMessage();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Initializes the dialog ref and listener for when a user clicks the backdrop behind the dialog\r\n   * @param matDialogRef\r\n   */\r\n  initializeDialog(matDialogRef: MatDialogRef<any>): void {\r\n    this._dialogRef = matDialogRef;\r\n    this.dialogRef.backdropClick().pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\r\n      this.transitionWithUnsavedChanges();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Builds formControls based off the field configs supplied to the form\r\n   * @return {[key: string]: CommonFormControl} A dictionary of key, FormControl\r\n   */\r\n  public buildFormControls(): { [key: string]: CommonFormControl } {\r\n    const formControls: { [key: string]: CommonFormControl } = {};\r\n    // For each field config build a form control\r\n    this.fieldConfigs.forEach((config) => {\r\n      const controlName = config.controlName,\r\n        validatorFn: ValidatorFn = ValidatorService.buildValidatorFromFieldConfig(config),\r\n        validators: ValidatorFn[] = validatorFn ? [validatorFn] : [],\r\n        warningValidatorFn: ValidatorFn = ValidatorService.buildValidators(config.warningValidators),\r\n        warningValidators: ValidatorFn[] = warningValidatorFn ? [warningValidatorFn] : [];\r\n\r\n      validators.push(this.checkForErrorMessages(config.controlName));\r\n\r\n      // Create the form control with the initial value and validators\r\n      formControls[controlName] = new CommonFormControl(config?.initialValue ?? '', validators, warningValidators);\r\n      config.group = config.group || 'no-group';\r\n      if (this.fieldGroupMap.has(config.group)) {\r\n        this.fieldGroupMap.get(config.group).push(config);\r\n      } else {\r\n        this.fieldGroupMap.set(config.group, [config]);\r\n      }\r\n\r\n      // Setup disabled observer\r\n      if (!!config.disabled) {\r\n        config.disabled.pipe(takeUntil(this.unsubscribe$))\r\n          .subscribe((disabled) => {\r\n            disabled ? formControls[controlName].disable() : formControls[controlName].enable();\r\n          });\r\n      }\r\n\r\n      this.setControlHint(config);\r\n      merge(formControls[controlName].valueChanges, formControls[controlName].warningChanges)\r\n        .pipe(takeUntil(this.unsubscribe$))\r\n        .subscribe(() => this.setControlHint(config));\r\n    });\r\n    return formControls;\r\n  }\r\n\r\n  /**\r\n   * Initialize links between dependent fields. When the 'parent' field changes, the disableDependents function\r\n   * is called to determine whether to disable the 'child' field.\r\n   * @param data the config passed into this.initialize\r\n   * @private\r\n   */\r\n  private initializeDependentFields(data: DynamicFormConfig): void {\r\n    // Get any configs that have dependent fields\r\n    const parentFields = data.fieldConfigs.filter(value => value.dependentFields);\r\n    if (parentFields.length >= 1) {\r\n      parentFields.forEach((parent => {\r\n        // Can't disable a parent's children that doesn't exist\r\n        if (!!parent.hidden) {\r\n          return;\r\n        }\r\n        if (!parent.dependentFields.disableTracker) {\r\n          parent.dependentFields.disableTracker = new Subject<boolean>();\r\n        }\r\n        // Track value of parent field\r\n        this.dynamicAddForm.get(parent.controlName).valueChanges\r\n          .pipe(takeUntil(this.unsubscribe$))\r\n          .subscribe(value => {\r\n            parent.dependentFields.disableTracker.next(parent.dependentFields.disableDependents(value));\r\n          });\r\n\r\n        // Get the child fields\r\n        const children = data.fieldConfigs.filter(config => parent.dependentFields.fieldNames.includes(config.controlName));\r\n        if (children.length >= 1) {\r\n          children.forEach(child => {\r\n            // Can't disable a child that doesn't exist\r\n            if (!!child.hidden) {\r\n              return;\r\n            }\r\n            // if disabled already exists, then merge their latest results\r\n            if (child.disabled) {\r\n              child.disabled = combineLatest([child.disabled, parent.dependentFields.disableTracker.asObservable()])\r\n                .pipe(map(([b1, b2]) => b1 && b2));\r\n            } else {\r\n              child.disabled = parent.dependentFields.disableTracker.asObservable();\r\n            }\r\n\r\n            // Set state on child field\r\n            child.disabled.pipe(takeUntil(this.unsubscribe$))\r\n              .subscribe((disabled) => {\r\n                const control = this.dynamicAddForm.get(child.controlName);\r\n                disabled ? control.disable() : control.enable();\r\n              });\r\n          });\r\n        }\r\n      }));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Builds an array of keys from the field group map\r\n   * @return Array of keys\r\n   */\r\n  public getKeys(): string[] {\r\n    return Array.from(this.fieldGroupMap.keys());\r\n  }\r\n\r\n  /**\r\n   * @return A FormControl casted to the type of CommonFormControl\r\n   */\r\n  public getCommonFormControl(path: Array<string | number> | string): CommonFormControl | null {\r\n    return this.dynamicAddForm?.get(path) as CommonFormControl;\r\n  }\r\n\r\n  /**\r\n   * Get the current warnings that exist on the form control\r\n   * @param config\r\n   * @return string Return warnings present on control\r\n   */\r\n  public getControlWarning(config: FieldConfig): string {\r\n    const control: CommonFormControl = this.getCommonFormControl(config.controlName);\r\n\r\n    if (control) {\r\n      const warnings: string[] = Object.keys(control.warnings ?? []);\r\n\r\n      if (!!warnings && warnings.length) {\r\n        const validator = config.warningValidators.find(v => v.name === warnings[0]);\r\n        return validator.message;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set the hint that is displayed underneath the input depending on warning, required\r\n   * ,or an optional hint message was passed into the config\r\n   * @param config\r\n   */\r\n  public setControlHint(config: FieldConfig): void {\r\n    const warning: string = this.getControlWarning(config);\r\n    let hint;\r\n\r\n    if (warning) {\r\n      hint = { warning: true, hint: warning };\r\n    } else if (config.required) {\r\n      hint = { hint: 'Required' };\r\n    }\r\n\r\n    if (hint) {\r\n      this.hintMap.set(config.controlName, hint);\r\n    } else if (this.hintMap.has(config.controlName)) {\r\n      this.hintMap.delete(config.controlName);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * On save if the form is valid close the dialog and build the submit data\r\n   */\r\n  public submit(): void {\r\n    if (this.dynamicAddForm.valid) {\r\n      const values = this.dynamicAddForm.getRawValue();\r\n      Object.keys(values).forEach((key) => {\r\n        // Format Date Objects as yyyy-mm-dd\r\n        if (values[key] instanceof Date) {\r\n          values[key] = this.formatDate(values[key]);\r\n        }\r\n      });\r\n      this.dialogRef?.close(values);\r\n      this.save.emit(values);\r\n      this.dynamicFormDataService.submitValue$.next(values);\r\n    }\r\n  }\r\n\r\n  disableSave(): boolean {\r\n    return this.dynamicAddForm.invalid;\r\n  }\r\n\r\n  disableEscToClose(): boolean {\r\n    return !this.dialogRef;\r\n  }\r\n\r\n  disableCtrlSToSave(): boolean {\r\n    return !this.dialogRef;\r\n  }\r\n\r\n  public transitionHandler(): void {\r\n    this.dynamicFormDataService.submitValue$.next(null);\r\n    this.dialogRef?.close();\r\n  }\r\n\r\n  /**\r\n   * Evaluates if a formControl has an error or not\r\n   * @param field Current formControl.\r\n   * @param error The error from the formControl.\r\n   */\r\n  public getFormControlErrors(field: string, error: string): boolean {\r\n    return !!this.dynamicAddForm.get(field)\r\n      && !!this.dynamicAddForm.get(field).errors\r\n      && !!this.dynamicAddForm.get(field).errors[error];\r\n  }\r\n\r\n  /**\r\n   * Evaluates if a formGroup validator is attached to a specific form control\r\n   * @param field Current formControl\r\n   * @param error The error from the formGroupValidators array\r\n   */\r\n  public getFormGroupControlErrors(field: string, error: string): boolean {\r\n    // TODO fix this to be able to support group level indicators and apply the error to a formControl if one is defined\r\n    const hasError: boolean = this.dynamicAddForm.errors && this.dynamicAddForm.errors[field] &&\r\n      !!this.formGroupValidators.find((validator) => validator.name === error);\r\n    if (hasError) {\r\n      const errorObject = {};\r\n      errorObject[error] = true;\r\n      setTimeout(() => this.dynamicAddForm.controls[field].setErrors(errorObject));\r\n    }\r\n    return hasError;\r\n  }\r\n\r\n  /**\r\n   * Create Validator for formControl based off passed in Error Map.\r\n   * @param field Current field being checked for error messages\r\n   * @return ResponseError validator function with message from error map\r\n   */\r\n  private checkForErrorMessages(field: string): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: string } | null => {\r\n      if (control.value && this.formData?.[field] === control.value && this.fieldErrors.has(field)) {\r\n        return {'responseError': this.fieldErrors.get(field)};\r\n      }\r\n      return null;\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Get any error that is associated with form level validators\r\n   * * @return string Error message that is displayed\r\n   */\r\n  public getFormGroupErrorMessage(): string {\r\n    let errorMessage = '';\r\n    const formGroupErrors = this.dynamicAddForm.errors;\r\n\r\n    if (formGroupErrors && this.formGroupValidators?.length) {\r\n      this.formGroupValidators.forEach(validator => {\r\n        if (formGroupErrors[validator.name]) {\r\n          errorMessage += validator.message + '\\n';\r\n        }\r\n      });\r\n    }\r\n\r\n    return errorMessage;\r\n  }\r\n\r\n  /**\r\n   * Get any warning that is associated with form level validators\r\n   * @return string Warning message that is displayed\r\n   */\r\n  public getFormGroupWarningMessage(): string {\r\n    let warningMessage = '';\r\n    const formGroupWarnings = this.dynamicAddForm.warnings;\r\n\r\n    if (formGroupWarnings && this.formGroupWarningValidators?.length) {\r\n      this.formGroupWarningValidators.forEach(validator => {\r\n        if (formGroupWarnings[validator.name]) {\r\n          if (!!warningMessage) {\r\n            warningMessage += ' \\n';\r\n          }\r\n\r\n          warningMessage += validator.message;\r\n        }\r\n      });\r\n    }\r\n\r\n    return warningMessage;\r\n  }\r\n\r\n  /**\r\n   * When a file is selected from the hidden input set the formControl value to the selected file/files\r\n   * @param $event Event from the file input that has the selected files\r\n   * @param formControlName Form Control associated with the file input\r\n   * @param multiple If the file input supports selecting multiple files\r\n   */\r\n  onFileChange($event, formControlName: string, multiple: boolean): void {\r\n    this.dynamicAddForm.get(formControlName).setValue(multiple ? $event.target.files : $event.target.files[0]);\r\n  }\r\n\r\n  /**\r\n   * Value to be displayed to the user when they select a file/files\r\n   * @param file Current selected file/files\r\n   */\r\n  public formatFileName(file: File | File[]): string {\r\n    if (!file) {\r\n      return '';\r\n    }\r\n    if (Array.isArray(file)) {\r\n      return file.map((item: File) => item.name).join(',');\r\n    } else {\r\n      return file.name;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if variable is an array (since angular does not allow typeof in ngif)\r\n   * @param variable to check\r\n   */\r\n  public isArray(variable: any): boolean {\r\n    return Array.isArray(variable);\r\n  }\r\n\r\n  /**\r\n   * Get selection text because we want the value to remain id, but want the ability to use icons in the options list\r\n   * @param config FieldConfig\r\n   */\r\n  getSelectedText(config: FieldConfig): string {\r\n    const options: ListSet[] = this.isArray(config.options) ? config.options : config.options['getValue']();\r\n    const option: ListSet = options.find((item) => item.id === this.dynamicAddForm.get(config.controlName).value);\r\n    return option?.text ?? 'Error occurred getting text.';\r\n  }\r\n\r\n  closeExpansionPanel(groupKey: string): void {\r\n    if (this.config?.fieldGroupConfigs && this.config?.fieldGroupConfigs[groupKey]) {\r\n      this.config.fieldGroupConfigs[groupKey].expanded = false;\r\n    }\r\n  }\r\n\r\n  openExpansionPanel(groupKey: string): void {\r\n    if (this.config?.fieldGroupConfigs && this.config?.fieldGroupConfigs[groupKey]) {\r\n      this.config.fieldGroupConfigs[groupKey].expanded = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Take a date value and format it as yyyy-mm-dd\r\n   * @param value\r\n   * @return string\r\n   */\r\n  formatDate(value): string {\r\n    const padZero = (dateValue) => ('0' + dateValue.toString()).slice(-2);\r\n    const date = new Date(value);\r\n    const utcDate = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\r\n\r\n    return `${utcDate.getFullYear()}-${padZero(utcDate.getMonth() + 1)}-${padZero(utcDate.getDate())}`;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    // TODO is there a better way of handling this?\r\n    this.unsubscribe();\r\n    this.localStorageCommunicator.setChild('dirty', false);\r\n  }\r\n}\r\n","<div class=\"title\" *ngIf=\"!config?.hideTitle\">\r\n  <span mat-dialog-title>{{config?.title ? config.title : 'Add'}}</span>\r\n  <mat-divider></mat-divider>\r\n</div>\r\n<form (keydown.enter)=\"submit()\" [formGroup]=\"dynamicAddForm\" fieldPlus [fieldPlusDisabled]=\"config?.disableFieldPlusNavigation\"\r\n      [style.height]=\"config.hideActionRow ? '100%' : 'calc(100% - 90px)'\">\r\n  <mat-dialog-content>\r\n    <ng-container *ngFor=\"let key of getKeys()\">\r\n      <mat-expansion-panel *ngIf=\"config?.fieldGroupConfigs && config?.fieldGroupConfigs[key] as fieldGroup; else noPanel\"\r\n                           [expanded]=\"fieldGroup.expanded === true || fieldGroup.expanded === undefined\"\r\n                           hideToggle=\"true\"\r\n                           (opened)=\"openExpansionPanel(key)\"\r\n                           (closed)=\"closeExpansionPanel(key)\"\r\n                           class=\"form-expansion-panel\"\r\n                           style=\"box-shadow: none\">\r\n        <mat-expansion-panel-header>\r\n          <mat-panel-title>\r\n            {{config.fieldGroupConfigs[key].title}}\r\n          </mat-panel-title>\r\n          <mat-panel-description class=\"form-expansion-panel-desc\">\r\n            <span>{{config.fieldGroupConfigs[key].description}}</span>\r\n            <mat-icon *ngIf=\"!config.fieldGroupConfigs[key].expanded\">add_circle</mat-icon>\r\n            <mat-icon *ngIf=\"config.fieldGroupConfigs[key].expanded\">remove_circle</mat-icon>\r\n          </mat-panel-description>\r\n        </mat-expansion-panel-header>\r\n        <ng-container *ngFor=\"let input of fieldGroupMap.get(key)\"\r\n                      [ngTemplateOutlet]=\"formContent\"\r\n                      [ngTemplateOutletContext]=\"{input: input}\">\r\n\r\n        </ng-container>\r\n      </mat-expansion-panel>\r\n      <ng-template #noPanel>\r\n        <div>\r\n          <ng-container *ngFor=\"let input of fieldGroupMap.get(key)\"\r\n                        [ngTemplateOutlet]=\"formContent\"\r\n                        [ngTemplateOutletContext]=\"{input: input}\">\r\n\r\n          </ng-container>\r\n        </div>\r\n      </ng-template>\r\n    </ng-container>\r\n  </mat-dialog-content>\r\n  <ng-template #formContent let-input=\"input\">\r\n    <!--Build inputs based off the passed field configs-->\r\n    <ng-container *ngIf=\"!(input.hidden | async)\" [ngSwitch]=\"input.controlType\">\r\n\r\n            <!--String, Number, Date ,and Text inputs-->\r\n            <mat-form-field *ngSwitchDefault [ngStyle]=\"input.styles\"\r\n                            [ngClass]=\"{'mat-form-field-warning': getCommonFormControl(input.controlName).warnings && !getCommonFormControl(input.controlName).errors}\">\r\n              <mat-label>\r\n                {{input.label}}<span *ngIf=\"input.required\">*</span>\r\n              </mat-label>\r\n              <input [errorStateMatcher]=\"errorStateMatcher\"\r\n                     [formControlName]=\"input.controlName\" [id]=\"input.controlName\" [max]=\"input?.max\"\r\n                     [min]=\"input?.min\" [placeholder]=\"input.placeholder\" [type]=\"input.controlType\" autocomplete=\"off\"\r\n                     matInput\r\n                     title=\"\">\r\n              <mat-icon *ngIf=\"input.suffix\" matSuffix\r\n                        [matTooltipDisabled]=\"!input.suffixTooltip\" [matTooltip]=\"input.suffixTooltip\">\r\n                {{input.suffix}}\r\n              </mat-icon>\r\n\r\n              <mat-hint *ngIf=\"hintMap.has(input.controlName)\" [ngClass]=\"{'mat-warning': hintMap.get(input.controlName).warning}\">\r\n                {{hintMap.get(input.controlName).hint}}\r\n              </mat-hint>\r\n              <ng-container *ngFor=\"let validator of input.validators\" ngProjectAs=\"mat-error\">\r\n                <mat-error *ngIf=\"getFormControlErrors(input.controlName, validator.name)\"\r\n                           [matTooltip]=\"validator.message\" matTooltipShowDelay=\"500\">\r\n                  {{validator.message}}\r\n                </mat-error>\r\n              </ng-container>\r\n              <mat-error *ngIf=\"dynamicAddForm.get(input.controlName).getError('responseError')\"\r\n                [matTooltip]=\"dynamicAddForm.get(input.controlName).getError('responseError')\"\r\n                matTooltipShowDelay=\"500\"\r\n              >\r\n                {{dynamicAddForm.get(input.controlName).getError('responseError')}}\r\n              </mat-error>\r\n            </mat-form-field>\r\n\r\n      <!--Date-->\r\n      <mat-form-field *ngSwitchCase=\"'date'\">\r\n        <mat-label>\r\n          {{input.label}}<span *ngIf=\"input.required\">*</span>\r\n        </mat-label>\r\n        <input [errorStateMatcher]=\"errorStateMatcher\" [min]=\"input.min\" [max]=\"input.max\"\r\n               [formControlName]=\"input.controlName\" [id]=\"input.controlName\" [matDatepicker]=\"picker\" [placeholder]=\"input.placeholder\"\r\n               autocomplete=\"off\" matInput\r\n               title=\"\">\r\n        <mat-datepicker-toggle [for]=\"picker\" matSuffix></mat-datepicker-toggle>\r\n        <mat-datepicker #picker></mat-datepicker>\r\n        <mat-hint *ngIf=\"hintMap.has(input.controlName)\"\r\n                  [ngClass]=\"{'mat-warning': hintMap.get(input.controlName).warning}\">\r\n          {{hintMap.get(input.controlName).hint}}\r\n        </mat-hint>\r\n        <ng-container *ngFor=\"let validator of input.validators\" ngProjectAs=\"mat-error\">\r\n          <mat-error *ngIf=\"getFormControlErrors(input.controlName, validator.name)\"\r\n                     [matTooltip]=\"validator.message\" matTooltipShowDelay=\"500\">\r\n            {{validator.message}}\r\n          </mat-error>\r\n        </ng-container>\r\n        <mat-error *ngIf=\"dynamicAddForm.get(input.controlName).getError('responseError')\"\r\n                   [matTooltip]=\"dynamicAddForm.get(input.controlName).getError('responseError')\"\r\n                   matTooltipShowDelay=\"500\"\r\n        >\r\n          {{dynamicAddForm.get(input.controlName).getError('responseError')}}\r\n        </mat-error>\r\n      </mat-form-field>\r\n      <!--Combobox input-->\r\n      <vip-common-autocomplete *ngSwitchCase=\"'combobox'\" [config]=\"input\"\r\n                               [control]=\"dynamicAddForm.get(input.controlName)\"\r\n                               [data]=\"isArray(input.comboList) ? input.comboList : (input.comboList | async)\" [name]=\"input.controlName\"\r\n                               class=\"margin-right\">\r\n      </vip-common-autocomplete>\r\n\r\n      <!--Boolean input-->\r\n      <ng-container *ngSwitchCase=\"'boolean'\">\r\n        <mat-checkbox [formControlName]=\"input.controlName\" [id]=\"input.controlName\" [ngStyle]=\"input.styles\"\r\n                      class=\"margin-right\">\r\n          <mat-label>{{input.label}}</mat-label>\r\n        </mat-checkbox>\r\n      </ng-container>\r\n\r\n      <!--Selection List-->\r\n      <ng-container *ngSwitchCase=\"'select'\">\r\n        <mat-form-field>\r\n          <mat-label>\r\n            {{input.label}}<span *ngIf=\"input.required\">*</span>\r\n          </mat-label>\r\n          <mat-select [formControlName]=\"input.controlName\" [id]=\"input.controlName\">\r\n            <mat-select-trigger *ngIf=\"dynamicAddForm.get(input.controlName).value\">\r\n              {{getSelectedText(input)}}\r\n            </mat-select-trigger>\r\n            <mat-option *ngIf=\"!input.required\"></mat-option>\r\n            <mat-option *ngFor=\"let option of isArray(input.options) ? input.options: input.options | async\"\r\n                        [value]=\"option.id\">\r\n              {{option.text}}\r\n              <mat-icon *ngIf=\"option.suffix\" class=\"suffix\"\r\n                        [matTooltipDisabled]=\"!option.suffixTooltip\" [matTooltip]=\"option.suffixTooltip\">\r\n                {{option.suffix}}\r\n              </mat-icon>\r\n            </mat-option>\r\n          </mat-select>\r\n\r\n          <mat-hint *ngIf=\"hintMap.has(input.controlName)\" [ngClass]=\"{'mat-warning': hintMap.get(input.controlName).warning}\">\r\n            {{hintMap.get(input.controlName).hint}}\r\n          </mat-hint>\r\n          <mat-error *ngIf=\"dynamicAddForm.get(input.controlName).getError('required')\"\r\n                     [matTooltip]=\"input.label + ' is required.'\" matTooltipShowDelay=\"500\">\r\n            {{input.label + ' is required.'}}\r\n          </mat-error>\r\n          <ng-container *ngFor=\"let validator of input.validators\" ngProjectAs=\"mat-error\">\r\n            <mat-error *ngIf=\"getFormControlErrors(input.controlName, validator.name)\"\r\n                       [matTooltip]=\"validator.message\" matTooltipShowDelay=\"500\">\r\n              {{validator.message}}\r\n            </mat-error>\r\n          </ng-container>\r\n          <mat-error\r\n            *ngIf=\"dynamicAddForm.get(input.controlName).getError('selectionError')\"\r\n            [matTooltip]=\"dynamicAddForm.get(input.controlName).getError('selectionError')\">\r\n            {{dynamicAddForm.get(input.controlName).getError('selectionError')}}\r\n          </mat-error>\r\n        </mat-form-field>\r\n      </ng-container>\r\n\r\n      <!--File Selector-->\r\n      <ng-container *ngSwitchCase=\"'file'\">\r\n        <input type=\"file\" id=\"file\"\r\n               [multiple]=\"input.multiple\" (click)=\"fileInput.value = null\"\r\n               (change)=\"onFileChange($event, input.controlName, input.multiple)\"\r\n               [accept]=\"input.acceptedFileTypes?.join(',')\" #fileInput hidden>\r\n        <mat-form-field [ngStyle]=\"input.styles\">\r\n          <input matInput placeholder=\"Choose a file\" readonly\r\n                 aria-invalid=\"false\" aria-required=\"false\" type=\"text\"\r\n                 [value]=\"formatFileName(dynamicAddForm.get(input.controlName)?.value)\">\r\n          <button mat-icon-button (click)=\"fileInput.click()\" matSuffix color=\"primary\" type=\"button\">\r\n            <mat-icon>attach_file</mat-icon>\r\n          </button>\r\n        </mat-form-field>\r\n      </ng-container>\r\n\r\n      <!--Template Selection List-->\r\n      <ng-container *ngSwitchCase=\"'importTemplate'\">\r\n        <mat-form-field>\r\n          <mat-label style=\"display: flex; flex-direction: row; justify-content: space-between\">\r\n            <span>{{input.label}}</span>\r\n            <mat-spinner *ngIf=\"input.disabled | async\" diameter=\"20\" color=\"accent\"></mat-spinner>\r\n          </mat-label>\r\n          <mat-select [formControlName]=\"input.controlName\" [id]=\"input.controlName\">\r\n            <mat-option *ngFor=\"let option of isArray(input.options) ? input.options: input.options | async\"\r\n                        [value]=\"option.id\">{{option.text}}</mat-option>\r\n          </mat-select>\r\n          <mat-error *ngIf=\"dynamicAddForm.get(input.controlName).getError('required')\"\r\n                     [matTooltip]=\"input.label + ' is required.'\" matTooltipShowDelay=\"500\">\r\n            {{input.label + ' is required.'}}\r\n          </mat-error>\r\n\r\n          <mat-hint *ngIf=\"hintMap.has(input.controlName)\" [ngClass]=\"{'mat-warning': hintMap.get(input.controlName).warning}\">\r\n            {{hintMap.get(input.controlName).hint}}\r\n          </mat-hint>\r\n          <button (click)=\"swapView.emit()\" [disabled]=\"input.disabled | async\" matTooltip=\"Manage Import Templates\"\r\n                  mat-icon-button matSuffix type=\"button\">\r\n            <mat-icon>settings</mat-icon>\r\n          </button>\r\n        </mat-form-field>\r\n      </ng-container>\r\n    </ng-container>\r\n  </ng-template>\r\n</form>\r\n<mat-dialog-actions *ngIf=\"!config?.hideActionRow\">\r\n  <span *ngIf=\"warningMessage\" id=\"warning-icon\" class=\"error-icon\">\r\n    <mat-icon [matTooltip]=\"warningMessage\"\r\n              [ngStyle]=\"{'color':'#ffcc00'}\"\r\n              inline>\r\n      warning\r\n    </mat-icon>\r\n  </span>\r\n  <span *ngIf=\"errorMessage\" class=\"error-icon\">\r\n    <mat-icon [matTooltip]=\"errorMessage\" color=\"warn\" inline\r\n              matTooltipClass=\"error-tooltip\">\r\n      error\r\n    </mat-icon>\r\n  </span>\r\n  <span style=\"flex: 1\"></span>\r\n  <span *ngIf=\"formGroupErrorMessage\" class=\"error-icon\">\r\n    <mat-icon [matTooltip]=\"formGroupErrorMessage\" color=\"warn\" inline matTooltipClass=\"error-tooltip\">\r\n      error\r\n    </mat-icon>\r\n  </span>\r\n  <span *ngIf=\"formGroupWarningMessage\" class=\"error-icon\">\r\n    <mat-icon [matTooltip]=\"formGroupWarningMessage\" [ngStyle]=\"{'color':'#ffcc00'}\"\r\n              inline matTooltipClass=\"error-tooltip\">\r\n      warning\r\n    </mat-icon>\r\n  </span>\r\n  <button (click)=\"transitionWithUnsavedChanges()\" mat-flat-button type=\"button\">Cancel</button>\r\n  <button #saveButton (click)=\"submit()\" [disabled]=\"this.disableSave()\" color=\"primary\" mat-flat-button\r\n          type=\"submit\">Save\r\n  </button>\r\n</mat-dialog-actions>\r\n\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {MatDialog, MatDialogConfig} from '@angular/material/dialog';\r\nimport {DynamicFormComponent, DynamicFormConfig} from './dynamic-form.component';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DynamicFormService {\r\n  constructor(\r\n    public dialog: MatDialog\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Opens a modal dialog using the fieldConfigs supplied to the method.\r\n   * @param formConfig See DynamicFormConfig\r\n   * @param config Extra configuration options.\r\n   */\r\n  open(formConfig: DynamicFormConfig, config?: MatDialogConfig) {\r\n    return this.dialog.open(DynamicFormComponent, {\r\n      ...config,\r\n      autoFocus: true,\r\n      hasBackdrop: true,\r\n      disableClose: true,\r\n      width: 'auto',\r\n      height: 'auto',\r\n      maxWidth: '600px',\r\n      maxHeight: '600px',\r\n      data: {\r\n        ...formConfig\r\n      }\r\n    });\r\n  }\r\n}\r\n","import {CommonModule} from '@angular/common';\r\nimport {NgModule} from '@angular/core';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {CommonAutocompleteComponent} from './common-autocomplete.component';\r\nimport {SelectOnTabDirective} from './select-on-tab.directive';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    CommonAutocompleteComponent,\r\n    SelectOnTabDirective\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    MatAutocompleteModule,\r\n    MatFormFieldModule,\r\n    MatInputModule,\r\n    MatProgressSpinnerModule,\r\n    MatTooltipModule,\r\n    ReactiveFormsModule\r\n  ],\r\n  exports: [\r\n    CommonAutocompleteComponent\r\n  ],\r\n\r\n})\r\nexport class CommonAutocompleteModule {\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule, DatePipe} from '@angular/common';\r\nimport {DynamicFormComponent} from './dynamic-form.component';\r\nimport {DynamicFormService} from './dynamic-form.service';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {ReactiveFormsModule} from '@angular/forms';\r\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {CommonAutocompleteModule} from '../input-components/common-autocomplete/common-autocomplete.module';\r\nimport {MatCardModule} from '@angular/material/card';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {MatDividerModule} from '@angular/material/divider';\r\nimport {DynamicFormDataService} from './dynamic-form-data.service';\r\nimport {MatSelectModule} from '@angular/material/select';\r\nimport {UiModule} from '@ngvip/ui';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {LocalStorageCommunicator} from '@ngvip/service';\r\nimport {MatExpansionModule} from '@angular/material/expansion';\r\nimport {MatDatepickerModule} from '@angular/material/datepicker';\r\n\r\n\r\n@NgModule({\r\n    declarations: [DynamicFormComponent],\r\n    providers: [DynamicFormService, DynamicFormDataService, LocalStorageCommunicator, DatePipe],\r\n    imports: [\r\n        CommonModule,\r\n        MatDialogModule,\r\n        MatFormFieldModule,\r\n        MatIconModule,\r\n        MatTooltipModule,\r\n        ReactiveFormsModule,\r\n        MatInputModule,\r\n        MatAutocompleteModule,\r\n        MatButtonModule,\r\n        CommonAutocompleteModule,\r\n        UiModule,\r\n        MatCheckboxModule,\r\n        MatCardModule,\r\n        MatDividerModule,\r\n        MatSelectModule,\r\n        MatProgressSpinnerModule,\r\n        MatExpansionModule,\r\n        MatDatepickerModule\r\n    ],\r\n    exports: [\r\n        DynamicFormComponent\r\n    ]\r\n})\r\nexport class DynamicFormModule {\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {UntypedFormControl, UntypedFormGroup, ValidatorFn} from '@angular/forms';\r\n\r\n@Injectable()\r\nexport class FormValidation {\r\n\r\n  // =========================== NOT EQUAL CONDITIONALS =========================== //\r\n\r\n  static notAllowedString(str: string): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (control.value && control.value.toString() === str) {\r\n        return {\r\n            invalidString: str\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n\r\n  static notAllowedNumber(num: number): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (!!control && parseFloat(control.value) === num) {\r\n        return {\r\n          invalidNumber: num\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  static invalidNumber(): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (control.value && isNaN(control.value) ) {\r\n        return {\r\n          notANumber: true\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  // =========================== NUMBER BOUNDS =========================== //\r\n\r\n  static minimumNumber(min: number): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if ((isNaN(control.value) ? NaN : parseFloat(control.value)) < min) {\r\n        return {\r\n          invalidMin: min\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  static maximumNumber(max: number): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if ((isNaN(control.value) ? NaN : parseFloat(control.value)) > max) {\r\n        return {\r\n          invalidMax: max\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  // =========================== STRING LENGTH =========================== //\r\n\r\n  static minimumStringLength(minLength: number): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (control.value && control.value.length < minLength) {\r\n        return {\r\n          minLength: minLength\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  static maximumStringLength(maxLength: number): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (control.value && `${control.value}`.length > maxLength) {\r\n        return {\r\n          maxLength: maxLength\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  // =========================== Date Validation =========================== //\r\n\r\n  static minimumDate(minDate: Date): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (control.value && control.value < minDate) {\r\n        return {\r\n          minDate: minDate\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  static maximumDate(maxDate: Date): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (control.value && control.value > maxDate) {\r\n        return {\r\n          maxDate: maxDate\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  static relativeMinimumDate(field: string): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (control.parent && control.parent.get(field) && control.value && control.value < control.parent.get(field).value) {\r\n        return {\r\n          relativeMinDate: control.parent.get(field).value\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  static relativeMaximumDate(field: string): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (control.parent && control.parent.get(field) && control.value && control.value > control.parent.get(field).value) {\r\n        return {\r\n          relativeMinDate: control.parent.get(field).value\r\n        };\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Helper method for validatorFn's checking a date range.\r\n   * @param startDate Start of range string date\r\n   * @param endDate End of range string date\r\n   * @param maxMonths Maximum allowed months (exclusive)\r\n   */\r\n  static checkRangeValid(startDate: Date | string , endDate: Date | string, maxMonths: number): boolean {\r\n    if (!startDate || !endDate) {\r\n      return true;\r\n    }\r\n    const stringStartDate = startDate instanceof Date ? `${startDate.getFullYear()}-${startDate.getMonth() + 1}-${startDate.getDate()}` : startDate;\r\n    const stringEndDate = endDate instanceof Date ? `${endDate.getFullYear()}-${endDate.getMonth() + 1}-${endDate.getDate()}` : endDate;\r\n    const dArray: number[] = stringStartDate.split('-').map(Number);\r\n    const maxEndDate: string = dArray[1] <= 12 - maxMonths ?\r\n      [dArray[0], (dArray[1] + maxMonths), dArray[2]].join('-') :\r\n      [(dArray[0] + 1), (dArray[1] + maxMonths) % 12, dArray[2]].join('-');\r\n    return Date.parse(stringEndDate) < Date.parse(maxEndDate);\r\n  }\r\n\r\n  /* TODO figure out a way to preserve DRY principles for these two ValidatorFns\r\n   * Unfortunately angular does not allow you to use the same validatorfn with different\r\n   * parameters to check different cases.\r\n   */\r\n  /**\r\n   * Validates that two dates are at most a certain time length apart in months.\r\n   * @param startDateControlName\r\n   * @param endDateControlName\r\n   * @param maxMonths Number representing how far apart two dates can be.\r\n   */\r\n  static maxRange(startDateControlName: string, endDateControlName: string, maxMonths: number): ValidatorFn {\r\n    return (control: UntypedFormControl | UntypedFormGroup): {[key: string]: any} | null => {\r\n      const group: UntypedFormGroup = control instanceof UntypedFormGroup ? <UntypedFormGroup>control : <UntypedFormGroup>control?.parent;\r\n      const startDate: Date = group?.get(startDateControlName)?.value;\r\n      const endDate: Date = group?.get(endDateControlName)?.value;\r\n      return FormValidation.checkRangeValid(startDate, endDate, maxMonths) ? null : {maxDateRange: true};\r\n    };\r\n  }\r\n\r\n  // =========================== Changed Validation =========================== //\r\n  static validateIfChanged(validatorFn: ValidatorFn, originalValue: any): ValidatorFn {\r\n    return (control: UntypedFormControl): {[key: string]: any} | null => {\r\n      if (!control.value || !originalValue || control.value !== originalValue) {\r\n        return validatorFn(control);\r\n      }\r\n    };\r\n  }\r\n}\r\n","import {AbstractModel} from '@ngvip/service';\r\nimport {ImportTemplateMap} from './import-template-map.model';\r\n\r\nexport class ImportTemplate extends AbstractModel {\r\n  public identity: string;\r\n  public description: string;\r\n  public titleRow: string;\r\n  public actionId: string;\r\n  public application: string;\r\n  public fieldMap: ImportTemplateMap[];\r\n\r\n  getId(): string | number {\r\n    return this.identity;\r\n  }\r\n\r\n  serialize(oldValues?: any): any {\r\n    const out = [];\r\n\r\n    for (const field in this) {\r\n      if (this.hasOwnProperty(field) && field !== 'state') {\r\n        out.push({\r\n          field: field,\r\n          value: this[field],\r\n          oldvalue: oldValues?.hasOwnProperty(field) ? oldValues[field] : ''\r\n        });\r\n      }\r\n    }\r\n\r\n    return out;\r\n  }\r\n\r\n}\r\n","import {AbstractModel} from '@ngvip/service';\r\n\r\nexport class ImportTemplateMap extends AbstractModel {\r\n  public identity: string;\r\n  public ssColumn: string;\r\n  public vipColumn: string;\r\n  public templateId: string;\r\n\r\n  getId(): string | number {\r\n    return this.identity;\r\n  }\r\n\r\n  serialize(oldValues?: any): any {\r\n    const out = [];\r\n\r\n    for (const field in this) {\r\n      if (this.hasOwnProperty(field) && field !== 'state') {\r\n        out.push({\r\n          field: field,\r\n          value: this[field],\r\n          oldvalue: oldValues?.hasOwnProperty(field) ? oldValues[field] : ''\r\n        });\r\n      }\r\n    }\r\n\r\n    return out;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {BehaviorSubject} from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ImportDataService {\r\n\r\n  private _selectedTemplateID: BehaviorSubject<{identity: string}> = new BehaviorSubject({identity: null});\r\n  public selectedTemplateID$ = this._selectedTemplateID.asObservable();\r\n\r\n  constructor() { }\r\n\r\n  selectTemplate(id: {identity: string}) {\r\n    if (this._selectedTemplateID.value.identity !== id.identity) {\r\n      this._selectedTemplateID.next(id);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Return an object consisting of only changed properties\r\n   * @param record\r\n   * @param originalRecord\r\n   * @param exclude Properties you do not want to be checked\r\n   */\r\n  public buildChangedObject(record: object, originalRecord: object, exclude?: string[]): object {\r\n    const changesObj = {};\r\n    Object.keys(record).forEach(key => {\r\n      if (record[key] !== originalRecord[key] && !exclude?.includes(key)) {\r\n        changesObj[key] = record[key];\r\n      }\r\n    });\r\n\r\n    return {...changesObj};\r\n  }\r\n\r\n  /**\r\n   * Return an array of changed properties\r\n   * @param object1\r\n   * @param object2\r\n   */\r\n  compareObjects(object1: object, object2: object): string[] {\r\n    const changedProperties = [];\r\n      Object.keys(object1).forEach((key) => {\r\n        if ((object1.hasOwnProperty(key) && object2.hasOwnProperty(key)) && (object1[key] !== object2[key])) {\r\n          changedProperties.push(key);\r\n        }\r\n      });\r\n    return changedProperties;\r\n  }\r\n}\r\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild} from '@angular/core';\r\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\r\nimport {\r\n  AbstractModel,\r\n  AbstractStateModel,\r\n  FilterData,\r\n  LocalStorageCommunicator,\r\n  MetaData,\r\n  ResponseModel,\r\n  VipErrorResponse\r\n} from '@ngvip/service';\r\nimport {ImportTemplate} from './import-template.model';\r\nimport {FieldConfig, ListSet} from '../../dynamic-form/field.interface';\r\nimport {DynamicFormComponent, DynamicFormConfig} from '../../dynamic-form/dynamic-form.component';\r\nimport {AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators} from '@angular/forms';\r\nimport * as XLSX from 'xlsx';\r\nimport {WorkBook} from 'xlsx';\r\nimport {ImportTemplateMap} from './import-template-map.model';\r\nimport {VipDialogService, VipSnackbarService} from '@ngvip/ui';\r\nimport {ImportDataService} from '../import-data.service';\r\nimport {debounceTime, filter, take, takeUntil} from 'rxjs/operators';\r\nimport {AbstractFormComponent} from '../../dynamic-form/abstract-form-component';\r\nimport {DynamicFormDataService} from '../../dynamic-form/dynamic-form-data.service';\r\nimport {MatDialogRef} from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n  selector: 'vip-import-template',\r\n  templateUrl: './import-template.component.html',\r\n  styleUrls: ['./import-template.component.scss']\r\n})\r\nexport class ImportTemplateComponent extends AbstractFormComponent implements OnInit, OnDestroy {\r\n  @Input() public templates$: BehaviorSubject<ImportTemplate[]> = new BehaviorSubject([]);\r\n  @Input() public config: TemplateConfig;\r\n  @Input() set dialogRef(dialogRef: MatDialogRef<any>) {\r\n    if (dialogRef) {\r\n      this.initializeDialog(dialogRef);\r\n    }\r\n  }\r\n  get dialogRef(): MatDialogRef<any> {\r\n    return this._dialogRef;\r\n  }\r\n  @Output() backPressed: EventEmitter<ImportTemplate> = new EventEmitter();\r\n  @ViewChild('dynamicForm') public dynamicForm: DynamicFormComponent;\r\n\r\n  public metaData: MetaData[];\r\n  public columnList: ListSet[];\r\n  public dynamicFormConfig: DynamicFormConfig;\r\n  public create: boolean;\r\n  public importForm: UntypedFormGroup;\r\n  public columnHeaders: BehaviorSubject<ListSet[]> = new BehaviorSubject([]);\r\n  public previousColumnHeaders: ListSet[];\r\n  public selectedFormData: object;\r\n  public operationInProgress$: Subject<boolean> = new Subject<boolean>();\r\n  public disableSaveButton = true;\r\n\r\n  public selectedTemplate: ImportTemplate;\r\n  public nextTemplate: ImportTemplate;\r\n  public oldTemplate: ImportTemplate;\r\n  public templateListCollapsed: boolean;\r\n  public deleteMap: Map<string, boolean> = new Map();\r\n\r\n  private _dialogRef: MatDialogRef<any>;\r\n  private fileColumnHeaders: ListSet[];\r\n\r\n  constructor(\r\n    private formBuilder: UntypedFormBuilder,\r\n    private snackBarService: VipSnackbarService,\r\n    private importDataService: ImportDataService,\r\n    private dynamicFormDataService: DynamicFormDataService,\r\n    protected localStorageCommunicator: LocalStorageCommunicator,\r\n    protected dialogService: VipDialogService\r\n  ) {\r\n    super(dialogService, localStorageCommunicator);\r\n    this.importForm = formBuilder.group({\r\n      'description': [null, [Validators.required, this.checkForDuplicates()]],\r\n      'firstRowHeaders': [],\r\n      'file': [null]\r\n    });\r\n    this.initializeFormTracking(this.importForm);\r\n  }\r\n\r\n  /**\r\n   * Validate that two select fields do not have the same selection\r\n   */\r\n  static duplicateMappingValidator(): ValidatorFn {\r\n    return (group: UntypedFormGroup): {[key: string]: any} | null => {\r\n      const values = new Map();\r\n      let duplicatesFound = false;\r\n\r\n      Object.keys(group.controls).forEach((key) => {\r\n        const control = group.controls[key];\r\n        if (values.has(control.value)) {\r\n          duplicatesFound = true;\r\n\r\n          const error = { 'selectionError': `${control.value} is used more than once` };\r\n          group.controls[key]?.setErrors(error);\r\n          group.controls[values.get(control.value)]?.setErrors(error);\r\n        } else if (!!control.value) {\r\n          values.set(control.value, key);\r\n\r\n          if (group.controls[values.get(control.value)].getError('selectionError')) {\r\n            group.controls[values.get(control.value)].setErrors(null);\r\n          }\r\n        }\r\n      });\r\n\r\n      if (duplicatesFound) {\r\n        group.markAllAsTouched();\r\n      }\r\n\r\n      return;\r\n    };\r\n  }\r\n\r\n  checkForDuplicates(): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n      if (control.value !== undefined) {\r\n        if (this.templates$.getValue().some((template: ImportTemplate) => {\r\n          return this.selectedTemplate?.getId() !== template.getId() && template.description === control.value;\r\n        })) {\r\n          return { 'duplicate': true };\r\n        }\r\n      }\r\n      return null;\r\n    };\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    // Handle MetaData input as either Observable or an Array\r\n    if (this.config.metaData instanceof Observable) {\r\n      this.config.metaData.subscribe(value => this.parseMetaData(value));\r\n    } else {\r\n      this.parseMetaData(this.config.metaData);\r\n    }\r\n\r\n    this.importDataService.selectedTemplateID$.pipe(\r\n      filter(template => !this.selectedTemplate || template.identity !== this.selectedTemplate.identity),\r\n      takeUntil(this.unsubscribe$)\r\n    )\r\n      .subscribe({\r\n        next: (value) => {\r\n          const selected = this.templates$.getValue().find(template => template.identity === value.identity);\r\n          if (selected) {\r\n            this.templateSelected(selected);\r\n          }\r\n        }\r\n      });\r\n\r\n    this.importForm.valueChanges.subscribe(() => this.disableSaveButton = this.disableSave());\r\n    // Update the options list with the selection icon and tooltip\r\n    this.dynamicFormDataService.formValueChanges$\r\n      .pipe(debounceTime(250))\r\n      .subscribe((changes) => {\r\n      const values = Array.from(Object.values(changes));\r\n      this.columnHeaders.getValue().forEach((item) => {\r\n        item.suffix = values.includes(item.id) ? 'done' : null;\r\n        item.suffixTooltip = values.includes(item.id) ? 'In Use' : null;\r\n      });\r\n      this.columnHeaders.getValue().sort((a, b) => !!a.suffix ? 1 : !!b.suffix ? -1 : 0);\r\n      this.disableSaveButton = this.disableSave();\r\n    });\r\n  }\r\n\r\n  private initializeDialog(matDialogRef: MatDialogRef<any>): void {\r\n    this._dialogRef = matDialogRef;\r\n\r\n    this.dialogRef.updateSize('700px', '95%');\r\n    this.dialogRef.backdropClick().pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\r\n      this.transitionWithUnsavedChanges();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Turn the column MetaData into ListSets to be consumed by the dynamic form.\r\n   * @param metaData\r\n   */\r\n  parseMetaData(metaData: MetaData[]): void {\r\n    this.columnList = metaData.map((data: MetaData) => {\r\n      return {\r\n        id: data.columnName,\r\n        text: data.columnText\r\n      };\r\n    });\r\n    this.metaData = metaData;\r\n  }\r\n\r\n  /**\r\n   * On template selection clear the current template and if dirty alert the user\r\n   * @param template\r\n   */\r\n  templateSelected(template: ImportTemplate): void {\r\n    if (template.identity === this.selectedTemplate?.identity) {\r\n      return;\r\n    }\r\n    this.nextTemplate = template;\r\n    this.transitionWithUnsavedChanges(() => this.selectNextTemplate());\r\n    this.oldTemplate = template;\r\n  }\r\n\r\n  /**\r\n   * Clear the current form configs and then build the new configs off the newly selected template\r\n   */\r\n  selectNextTemplate(): void {\r\n    this.clearForm();\r\n    this.create = false;\r\n    this.selectedTemplate = this.nextTemplate ?? this.selectedTemplate;\r\n    this.importDataService.selectTemplate(this.nextTemplate);\r\n    this.importForm.reset({\r\n      description: this.selectedTemplate.description,\r\n      firstRowHeaders: this.selectedTemplate.titleRow === 'Y'\r\n    }, {emitEvent: false});\r\n    this.initialFormData = this.importForm.getRawValue();\r\n    this.columnHeaders.next(this.selectedTemplate.fieldMap\r\n      .filter((field) => !!field.ssColumn)\r\n      .map((field) => {\r\n        const map = {\r\n          id: field.ssColumn,\r\n          text: field.ssColumn,\r\n          suffix: 'done',\r\n          suffixTooltip: 'In Use'\r\n        };\r\n        this.selectedFormData[field.vipColumn] = field.ssColumn;\r\n        return map;\r\n      }));\r\n    this.previousColumnHeaders = this.columnHeaders.value;\r\n    this.dynamicFormConfig = {\r\n      fieldConfigs: this.convertToFieldConfigs(this.metaData),\r\n      hideTitle: true,\r\n      hideActionRow: true,\r\n      disableFieldPlusNavigation: true,\r\n      formData: this.selectedFormData as AbstractModel,\r\n      formGroupValidators: [{\r\n        name: 'duplicate',\r\n        validator: ImportTemplateComponent.duplicateMappingValidator(),\r\n        message: 'Mapping has Duplicates'\r\n      }]\r\n    };\r\n    if (this.dynamicForm) {\r\n      this.dynamicForm.initialFormData = this.dynamicForm.dynamicAddForm.getRawValue();\r\n    }\r\n  }\r\n\r\n  transitionHandler() {\r\n    this.dynamicFormDataService.submitValue$.next(null);\r\n    this.dialogRef?.close();\r\n  }\r\n\r\n  /**\r\n   * Delete sent template\r\n   * @param event MouseEvent to halt any DOM events\r\n   * @param template Template to deleted\r\n   */\r\n  deleteTemplate(event: MouseEvent, template: ImportTemplate) {\r\n    this.haltEvent(event);\r\n    this.operationInProgress$.next(true);\r\n    template.state = AbstractStateModel.Interstitial;\r\n    this.config.delete(template).subscribe({\r\n      next: () => {\r\n        this.importDataService.selectTemplate({identity: null});\r\n        this.templates$.next(this.templates$.getValue().filter(value => value !== template));\r\n        this.clearForm();\r\n        this.operationInProgress$.next(false);\r\n        this.deleteMap.delete(template.identity);\r\n      },\r\n      error: (error: VipErrorResponse) => {\r\n        this.snackBarService.addError(error.error);\r\n        this.operationInProgress$.next(false);\r\n        template.state = AbstractStateModel.Error;\r\n      },\r\n      complete: () => {\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Convert the column MetaData into fieldConfigs to be consumed by the Dynamic Form\r\n   * @param metaData\r\n   */\r\n  convertToFieldConfigs(metaData: MetaData[]): FieldConfig[] {\r\n    return metaData.map((meta: MetaData) => {\r\n      return {\r\n        controlName: meta.columnName,\r\n        label: meta.columnText,\r\n        controlType: 'select',\r\n        options: this.columnHeaders,\r\n        required: meta.allowNulls === 'N'\r\n      };\r\n    });\r\n  }\r\n\r\n  /**\r\n   * On File Selection loop through the file and parse out the headers and then\r\n   * create the dynamic form config based on the parsed headers\r\n   * @param $event\r\n   */\r\n  onFileChange($event): void {\r\n    if (!$event.target.files[0]) {\r\n      return;\r\n    }\r\n    if (this.dynamicForm?.fieldGroupMap) {\r\n      this.dynamicForm.fieldGroupMap.clear();\r\n    }\r\n    this.operationInProgress$.next(true);\r\n    this.importForm.get('file').setValue($event.target.files[0]);\r\n\r\n    const reader: FileReader = new FileReader();\r\n    reader.onload = (e: ProgressEvent<FileReader>) => {\r\n      // TODO Test absurdly large excel file to see if this overloads it\r\n      const data = new Uint8Array(e.target.result as ArrayBuffer);\r\n      const workbook: WorkBook = XLSX.read(data, {type: 'array', sheetRows: 1});\r\n      const sheets = Object.keys(workbook.Sheets);\r\n      this.fileColumnHeaders = Object\r\n        .keys(workbook.Sheets[sheets[0]])\r\n        .filter((key) => !key.includes('!'))\r\n        .map((key) => {\r\n          return {\r\n            id: this.importForm.get('firstRowHeaders').value ? workbook.Sheets[sheets[0]][key]['v'] : key,\r\n            text: this.importForm.get('firstRowHeaders').value ? workbook.Sheets[sheets[0]][key]['v'] : key\r\n          };\r\n        });\r\n      this.columnHeaders.next([...this.fileColumnHeaders]);\r\n\r\n      this.dynamicFormConfig = {\r\n        fieldConfigs: this.convertToFieldConfigs(this.metaData),\r\n        hideTitle: true,\r\n        hideActionRow: true,\r\n        disableFieldPlusNavigation: true,\r\n        formGroupValidators: [{\r\n          name: 'duplicate',\r\n          validator: ImportTemplateComponent.duplicateMappingValidator(),\r\n          message: 'Mapping has Duplicates'\r\n        }]\r\n      };\r\n    };\r\n\r\n    reader.onerror = () => {\r\n      console.error(reader.error);\r\n      this.operationInProgress$.next(false);\r\n    };\r\n    reader.onloadend = () => {\r\n      this.operationInProgress$.next(false);\r\n    };\r\n    reader.readAsArrayBuffer($event.target.files[0]);\r\n  }\r\n\r\n  /**\r\n   * Return the FileName to be used in the Seleciton Input\r\n   * @param file\r\n   */\r\n  public formatFileName(file: File): string {\r\n    return file?.name ?? '';\r\n  }\r\n\r\n  /**\r\n   * Create an empty template and set it as the current template\r\n   */\r\n  createTemplate(): void {\r\n    this.clearForm();\r\n    this.create = true;\r\n    this.selectedTemplate = new ImportTemplate({description: '', identity: 'new'});\r\n  }\r\n\r\n  /**\r\n   * Clear both the Import Template Form and the Dynamic Form\r\n   */\r\n  clearForm(): void {\r\n    this.selectedTemplate = null;\r\n    this.selectedFormData = {};\r\n    this.dynamicForm?.fieldGroupMap.clear();\r\n    this.dynamicFormConfig = null;\r\n    this.columnHeaders.next([]);\r\n    this.importForm.reset(\r\n      {\r\n        description: '',\r\n        firstRowHeaders: ''\r\n      }, {emitEvent: false});\r\n    this.initialFormData = this.importForm.getRawValue();\r\n  }\r\n\r\n  /**\r\n   * Send the Form Information off to the supplied create or update functions from the template config\r\n   */\r\n  submit(): void {\r\n    const templates: ImportTemplate[] = [].concat(this.templates$.getValue());\r\n    const importHeader = this.importForm.getRawValue(),\r\n      columns = this.dynamicForm.dynamicAddForm.getRawValue(),\r\n      importMap: ImportTemplateMap[] = Object\r\n        .keys(columns)\r\n        .map((column) => {\r\n          return new ImportTemplateMap({\r\n            ssColumn: columns[column],\r\n            vipColumn: column,\r\n            templateId: 'new'\r\n          });\r\n        });\r\n\r\n    let importTemplate = new ImportTemplate({\r\n      application: this.config.application,\r\n      description: importHeader.description,\r\n      titleRow: importHeader.firstRowHeaders ? 'Y' : 'N',\r\n      fieldMap: importMap.map((mapping) => mapping.serialize())\r\n    });\r\n\r\n    this.operationInProgress$.next(true);\r\n    if (this.create) {\r\n      this.config.create(importTemplate).pipe(take(1)).subscribe({\r\n        next: (template: ImportTemplate) => {\r\n          templates.unshift(template);\r\n          this.templates$.next(templates);\r\n          this.create = false;\r\n          this.nextTemplate = template;\r\n          this.selectNextTemplate();\r\n          this.snackBarService.addSuccess(`Successfully created ${template.description}.`, 250);\r\n          this.operationInProgress$.next(false);\r\n        },\r\n        error: (error: VipErrorResponse) => {\r\n          this.showErrorMessage(error);\r\n          this.operationInProgress$.next(false);\r\n        }\r\n      });\r\n    } else {\r\n      // Only get the properties that have changed\r\n      this.selectedTemplate.state = AbstractStateModel.Interstitial;\r\n      importTemplate = new ImportTemplate({\r\n        ...this.importDataService.buildChangedObject(importTemplate, this.selectedTemplate), ...{\r\n          identity: this.selectedTemplate.identity\r\n        }\r\n      });\r\n\r\n      // Only get the mappings that have changed\r\n      const changedMap = [];\r\n      importMap.forEach((fieldMap) => {\r\n        const oldMap = this.oldTemplate.fieldMap.find((mapping) => mapping.vipColumn === fieldMap.vipColumn);\r\n        if (oldMap && this.importDataService.compareObjects(fieldMap, oldMap).includes('ssColumn')) {\r\n          const map = new ImportTemplateMap({\r\n            ...this.importDataService.buildChangedObject(fieldMap, oldMap,\r\n              ['filtered', 'updating', 'templateId', 'identity']), ...{identity: oldMap.identity}\r\n          });\r\n          if (!oldMap.ssColumn) {\r\n            oldMap.ssColumn = null;\r\n          }\r\n          changedMap.push(map.serialize(oldMap));\r\n        }\r\n      });\r\n      importTemplate.fieldMap = changedMap.length > 0 ? changedMap : null;\r\n\r\n      this.config.update(importTemplate, Object.assign({}, this.oldTemplate)).pipe(take(1)).subscribe({\r\n        next: (template: ImportTemplate) => {\r\n          this.operationInProgress$.next(false);\r\n          this.snackBarService.addSuccess(`Successfully updated ${importTemplate.description}.`, 250);\r\n          this.nextTemplate = template;\r\n          this.selectNextTemplate();\r\n          this.oldTemplate = template;\r\n          const index = templates.findIndex((item) => item.identity === template.identity);\r\n          templates[index] = template;\r\n          this.templates$.next(templates);\r\n        },\r\n        error: (error: VipErrorResponse) => {\r\n          this.operationInProgress$.next(false);\r\n          this.showErrorMessage(error);\r\n          this.selectedTemplate.state = AbstractStateModel.Error;\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  public disableSave(): boolean {\r\n    return this.importForm.invalid\r\n      || this.dynamicForm?.disableSave()\r\n      || !this.dynamicForm?.dynamicAddForm\r\n      || !this.isDirty();\r\n  }\r\n\r\n  public disableEscToClose(): boolean {\r\n    return true;\r\n  }\r\n\r\n  public disableCtrlSToSave(): boolean {\r\n    return true;\r\n  }\r\n\r\n  public isDirty(): boolean {\r\n    return this.dirty || this.dynamicForm?.isDirty();\r\n  }\r\n\r\n  public reset(): void {\r\n    if (!this.create) {\r\n      this.selectNextTemplate();\r\n    } else {\r\n      this.columnHeaders.next(this.fileColumnHeaders);\r\n      this.dynamicForm?.dynamicAddForm.reset(this.selectedFormData);\r\n      this.importForm.reset({\r\n        description: null,\r\n        firstRowHeaders: null\r\n      });\r\n    }\r\n    this.disableSaveButton = true;\r\n  }\r\n\r\n  public showErrorMessage(error: VipErrorResponse): void {\r\n    let errorMessage = `${error.error}`;\r\n\r\n    if (error?.data?.['fieldMessages']) {\r\n      const fieldErrors = error?.data?.['fieldMessages'];\r\n      for (const fieldErrorsKey in fieldErrors) {\r\n        errorMessage += `\\n${fieldErrorsKey} - ${fieldErrors[fieldErrorsKey]}`;\r\n      }\r\n    }\r\n    this.snackBarService.addError(errorMessage);\r\n  }\r\n\r\n  public haltEvent(event: MouseEvent): void {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  public back(): void {\r\n    this.transitionWithUnsavedChanges(() => this.backPressed.emit(this.selectedTemplate));\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this.unsubscribe();\r\n  }\r\n}\r\n\r\nexport interface TemplateConfig {\r\n  application: string;\r\n  metaData: MetaData[] | Observable<MetaData[]>;\r\n  list: (params?: any) => Observable<ResponseModel<ImportTemplate>>;\r\n  update?: (model: ImportTemplate, oldModel: ImportTemplate) => Observable<ImportTemplate>;\r\n  read?: (options?: FilterData[]) => Observable<ResponseModel<ImportTemplate>>;\r\n  create: (model: ImportTemplate) => Observable<ImportTemplate>;\r\n  delete: (model: ImportTemplate) => Observable<ImportTemplate>;\r\n  defaultDownloadHandler?: () => void;\r\n  canDelete?: (model: ImportTemplate) => boolean;\r\n}\r\n","<mat-dialog-content class=\"content\">\r\n  <div class=\"left\">\r\n    <mat-toolbar class=\"header\">\r\n      <button mat-button (click)=\"createTemplate()\" [disabled]=\"create\" *ngIf=\"!templateListCollapsed\">\r\n        <mat-icon color=\"accent\" aria-label=\"Add a new template.\" class=\"add\">add</mat-icon>\r\n        <span class=\"add-text\">Add a new template...</span>\r\n      </button>\r\n    </mat-toolbar>\r\n\r\n    <mat-divider></mat-divider>\r\n    <div class=\"template-selection-list\">\r\n      <div *ngFor=\"let template of templates$ | async\"\r\n           class=\"template-item mat-list-option\"\r\n           [class.selected]=\"template === selectedTemplate\"\r\n           (click)=\"templateSelected(template)\">\r\n        <span>{{template.description}}</span>\r\n        <ng-container\r\n          [ngTemplateOutlet]=\"deleteMap.get(template.identity) && deleteMap.has(template.identity) ? deleteConfirmation : deleteButton\"\r\n          [ngTemplateOutletContext]=\"{template: template}\">\r\n        </ng-container>\r\n        <div class=\"in-progress\" *ngIf=\"(operationInProgress$ | async) && template.isInterstitial()\">\r\n          <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <mat-divider vertical></mat-divider>\r\n  <div class=\"right\">\r\n    <div class=\"right-content\">\r\n      <div class=\"template-form\">\r\n        <form [formGroup]=\"importForm\" *ngIf=\"selectedTemplate; else noTemplate\">\r\n          <div class=\"template-header-form\">\r\n\r\n            <mat-form-field>\r\n              <mat-label>Template Name</mat-label>\r\n              <input matInput formControlName=\"description\">\r\n              <mat-error *ngIf=\"importForm.get('description').getError('duplicate')\">\r\n                Template Name already in use.\r\n              </mat-error>\r\n              <mat-error *ngIf=\"importForm.get('description').getError('required')\">\r\n                Template Name is required.\r\n              </mat-error>\r\n            </mat-form-field>\r\n\r\n            <mat-checkbox formControlName=\"firstRowHeaders\">\r\n              First Row Header\r\n            </mat-checkbox>\r\n\r\n            <input type=\"file\" id=\"file\"\r\n                   (click)=\"fileInput.value = null\"\r\n                   (change)=\"onFileChange($event)\"\r\n                   accept=\".xlsx\" #fileInput hidden>\r\n            <mat-form-field>\r\n              <input matInput placeholder=\"Choose a file\" readonly\r\n                     aria-invalid=\"false\" aria-required=\"false\" type=\"text\"\r\n                     [value]=\"formatFileName(importForm.get('file')?.value)\">\r\n              <button mat-icon-button (click)=\"fileInput.click()\" matSuffix color=\"primary\">\r\n                <mat-icon>attach_file</mat-icon>\r\n              </button>\r\n            </mat-form-field>\r\n\r\n          </div>\r\n        </form>\r\n      </div>\r\n\r\n      <mat-divider></mat-divider>\r\n\r\n      <div class=\"mapping-form\">\r\n        <vip-dynamic-form #dynamicForm *ngIf=\"dynamicFormConfig\" [config]=\"dynamicFormConfig\"></vip-dynamic-form>\r\n      </div>\r\n    </div>\r\n\r\n    <ng-container *ngIf=\"operationInProgress$ | async; then loading\"></ng-container>\r\n  </div>\r\n</mat-dialog-content>\r\n\r\n<mat-divider></mat-divider>\r\n<mat-dialog-actions class=\"footer\">\r\n  <button mat-flat-button [disabled]=\"(operationInProgress$ | async)\" (click)=\"back()\">Back</button>\r\n  <button mat-flat-button *ngIf=\"config.defaultDownloadHandler\" (click)=\"config.defaultDownloadHandler()\" matTooltip=\"Download default import template.\">\r\n    <mat-icon>download</mat-icon>\r\n  </button>\r\n\r\n  <span style=\"flex: 1;\"></span>\r\n\r\n  <button mat-flat-button (click)=\"reset()\" [disabled]=\"(operationInProgress$ | async) || !isDirty()\">Reset</button>\r\n  <button mat-flat-button color=\"primary\" (click)=\"submit()\"\r\n          [disabled]=\"disableSaveButton || (operationInProgress$ | async)\">Save\r\n  </button>\r\n</mat-dialog-actions>\r\n\r\n<ng-template #noTemplate>\r\n  <h2 class=\"empty-message\">Select or Create a Template</h2>\r\n</ng-template>\r\n\r\n<ng-template #loading>\r\n  <div class=\"loading-spinner\">\r\n    <mat-spinner></mat-spinner>\r\n  </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #deleteButton let-template=\"template\">\r\n  <button *ngIf=\"!config.canDelete || config.canDelete(template)\" class=\"delete-button\" mat-button [disabled]=\"(operationInProgress$ | async)\" matTooltip=\"Delete\"\r\n          (click)=\"haltEvent($event); deleteMap.set(template.identity, true)\" color=\"warn\">\r\n    <mat-icon>delete</mat-icon>\r\n  </button>\r\n</ng-template>\r\n<ng-template #deleteConfirmation let-template=\"template\">\r\n  <button (click)=\"haltEvent($event); deleteMap.set(template.identity, false)\" matTooltip=\"No\" mat-icon-button\r\n          color=\"warn\" [disabled]=\"(operationInProgress$ | async)\">\r\n    <mat-icon>close</mat-icon>\r\n  </button>\r\n\r\n  <button (click)=\"deleteTemplate($event, template)\" matTooltip=\"Yes\" mat-icon-button color=\"primary\"\r\n          [disabled]=\"(operationInProgress$ | async)\">\r\n    <mat-icon>check</mat-icon>\r\n  </button>\r\n</ng-template>\r\n","import {AfterViewInit, Component, Input, OnDestroy, Optional, QueryList, ViewChild, ViewChildren} from '@angular/core';\r\nimport {MatDialogRef} from '@angular/material/dialog';\r\nimport {DynamicFormComponent, DynamicFormConfig} from '../dynamic-form/dynamic-form.component';\r\nimport {ImportTemplateComponent, TemplateConfig} from './import-template/import-template.component';\r\nimport {ImportDataService} from './import-data.service';\r\nimport {BehaviorSubject, Subject} from 'rxjs';\r\nimport {skipWhile, takeUntil} from 'rxjs/operators';\r\nimport {VipDialogService} from '@ngvip/ui';\r\nimport {ImportTemplate} from './import-template/import-template.model';\r\nimport {FieldConfig, ListSet} from '../dynamic-form/field.interface';\r\nimport {AbstractModel} from '@ngvip/service';\r\n\r\nexport interface ImportConfig {\r\n  formConfig: DynamicFormConfig;\r\n  ignoreDialogData?: boolean;\r\n  templateConfig: TemplateConfig;\r\n}\r\n\r\n@Component({\r\n  selector: 'vip-import',\r\n  templateUrl: './import.component.html',\r\n  styleUrls: ['./import.component.scss'],\r\n  providers: [ImportDataService]\r\n})\r\nexport class ImportComponent implements OnDestroy, AfterViewInit {\r\n  @ViewChild('dynamicFormComponent') public dynamicFormComponent: DynamicFormComponent;\r\n  @ViewChild('importTemplateComponent') public importTemplateComponent: ImportTemplateComponent;\r\n  @ViewChildren('importForm')\r\n  private importForm: QueryList<any>;\r\n  public importTemplateView = false;\r\n  public formConfig: DynamicFormConfig;\r\n  public templates$: BehaviorSubject<ImportTemplate[]> = new BehaviorSubject([]);\r\n  public unsubscribe$ = new Subject<void>();\r\n  public disabled = new BehaviorSubject<boolean>(true);\r\n  public listSet$ = new BehaviorSubject<ListSet[]>([]);\r\n  private importFormData: AbstractModel;\r\n\r\n  private defaultFieldConfigs: FieldConfig[] =  [\r\n    {\r\n      controlName: 'importTemplate',\r\n      controlType: 'importTemplate',\r\n      label: 'Import Template',\r\n      group: 'import',\r\n      required: true,\r\n      options: this.listSet$,\r\n      disabled: this.disabled,\r\n      styles: {\r\n        'width': '40%'\r\n      }\r\n    },\r\n    {\r\n      controlName: 'importFile',\r\n      controlType: 'file',\r\n      group: 'import',\r\n      required: true,\r\n      label: 'Select Excel File',\r\n      acceptedFileTypes: ['.xlsx'],\r\n      styles: {\r\n        'width': '40%'\r\n      }\r\n    }\r\n  ];\r\n\r\n  constructor(\r\n    @Optional() public dialogRef: MatDialogRef<ImportComponent>,\r\n    private importDataService: ImportDataService,\r\n    private dialogService: VipDialogService\r\n  ) {\r\n    this.dialogRef?.backdropClick().pipe(\r\n        takeUntil(this.unsubscribe$),\r\n        skipWhile(() => this.importTemplateView))\r\n      .subscribe(() => {\r\n      if (this.dynamicFormComponent?.isDirty() || this.importTemplateComponent?.isDirty()) {\r\n        this.dialogService.confirmWarning({\r\n          handler: () => this.dialogRef.close(),\r\n          content: `Changes will be deleted. Do you want to continue?`\r\n        }, {\r\n          hasBackdrop: true\r\n        });\r\n      } else {\r\n        this.dialogRef.close();\r\n      }\r\n    });\r\n    // Keep Choose Template list up to date\r\n    this.templates$.subscribe((data) => {\r\n      const listSet: ListSet[] = data.map((template) => {\r\n        return {id: template.identity, text: template.description};\r\n      });\r\n      this.listSet$.next(listSet);\r\n    });\r\n  }\r\n\r\n  private _config: ImportConfig;\r\n\r\n  get config(): ImportConfig {\r\n    return this._config;\r\n  }\r\n\r\n  @Input() set config(config: ImportConfig) {\r\n    if (config) {\r\n      config.formConfig.fieldConfigs = [\r\n        ...config.formConfig.fieldConfigs,\r\n        ...this.defaultFieldConfigs\r\n      ];\r\n      this.initialize(config);\r\n      this._config = config;\r\n    }\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    // Listen to when the import form is removed and put back into the dom so we can set the choose template value\r\n    this.importForm.changes.pipe(\r\n      takeUntil(this.unsubscribe$),\r\n    ).subscribe((data) => {\r\n      if (data.length > 0) {\r\n        this.importDataService.selectedTemplateID$.pipe(\r\n          takeUntil(this.unsubscribe$),\r\n        ).subscribe({\r\n          next: (identity) => {\r\n              setTimeout(() => this.dynamicFormComponent?.dynamicAddForm?.get('importTemplate').setValue(identity.identity, {emitEvent: false}));\r\n          }\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  public formUpdated() {\r\n    const newValue = this.dynamicFormComponent.dynamicAddForm?.get('importTemplate')?.value;\r\n    this.importDataService.selectTemplate({identity: newValue});\r\n    this.importFormData = this.dynamicFormComponent.dynamicAddForm.getRawValue();\r\n    this.formConfig.formData = this.importFormData;\r\n    this.formConfig.initializeAsDirty = true;\r\n  }\r\n\r\n  private initialize(config: ImportConfig): void {\r\n    config.templateConfig.list().subscribe(data => {\r\n      this.disabled.next(false);\r\n      this.templates$.next(data.data);\r\n    });\r\n    this.formConfig = config.formConfig;\r\n    this.importDataService.selectedTemplateID$.pipe(\r\n      takeUntil(this.unsubscribe$),\r\n    ).subscribe({\r\n      next: (identity) => {\r\n        this.dynamicFormComponent?.dynamicAddForm?.get('importTemplate').setValue(identity.identity, {emitEvent: false});\r\n      }\r\n    });\r\n  }\r\n\r\n  public backPressed(): void {\r\n    this.importTemplateView = !this.importTemplateView;\r\n    this.dialogRef?.updateSize('500px', 'auto');\r\n  }\r\n\r\n  public ngOnDestroy() {\r\n    this.unsubscribe();\r\n  }\r\n\r\n  public unsubscribe(): void {\r\n    this.unsubscribe$.next();\r\n    this.unsubscribe$.complete();\r\n  }\r\n\r\n}\r\n","<div class=\"import-form\" *ngIf=\"!importTemplateView\" #importForm>\r\n  <vip-dynamic-form #dynamicFormComponent [config]=\"formConfig\" [dialogRef]=\"dialogRef\"\r\n                    (swapView)=\"importTemplateView = true\" (formChanged)=\"formUpdated()\">\r\n  </vip-dynamic-form>\r\n</div>\r\n\r\n<vip-import-template #importTemplateComponent *ngIf=\"importTemplateView\" [dialogRef]=\"dialogRef\"\r\n                     [config]=\"config.templateConfig\" [templates$]=\"templates$\" (backPressed)=\"backPressed()\">\r\n</vip-import-template>\r\n","import { Injectable } from '@angular/core';\r\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\r\nimport {ImportComponent, ImportConfig} from './import.component';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ImportService {\r\n\r\n  constructor(\r\n    public dialog: MatDialog\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Opens a modal dialog using the fieldConfigs supplied to the method.\r\n   * @param importConfig See ImportConfig\r\n   * @param config Extra Dialog specific configuration options.\r\n   */\r\n  open(importConfig: ImportConfig, config?: MatDialogConfig): MatDialogRef<ImportComponent> {\r\n    const dialogRef = this.dialog.open(ImportComponent, {\r\n      ...config,\r\n      autoFocus: true,\r\n      hasBackdrop: true,\r\n      disableClose: true,\r\n      width: '500px',\r\n      height: 'auto',\r\n      panelClass: ['import-container', 'mat-dialog-height-transition']\r\n    });\r\n    dialogRef.componentInstance.config = importConfig;\r\n\r\n    return dialogRef;\r\n  }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatDividerModule} from '@angular/material/divider';\r\nimport {MatToolbarModule} from '@angular/material/toolbar';\r\nimport {ImportTemplateComponent} from './import-template/import-template.component';\r\nimport {ImportComponent} from './import.component';\r\nimport {ImportService} from './import.service';\r\nimport {MatListModule} from '@angular/material/list';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {DynamicFormModule} from '../dynamic-form/dynamic-form.module';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {MatBadgeModule} from '@angular/material/badge';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {UiModule} from '@ngvip/ui';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\r\n\r\n\r\n@NgModule({\r\n    declarations: [\r\n        ImportTemplateComponent,\r\n        ImportComponent\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        MatButtonModule,\r\n        MatDividerModule,\r\n        MatToolbarModule,\r\n        DynamicFormModule,\r\n        MatListModule,\r\n        MatIconModule,\r\n        MatMenuModule,\r\n        MatTooltipModule,\r\n        MatBadgeModule,\r\n        MatFormFieldModule,\r\n        MatInputModule,\r\n        ReactiveFormsModule,\r\n        MatCheckboxModule,\r\n        MatDialogModule,\r\n        UiModule,\r\n        MatProgressSpinnerModule,\r\n        MatProgressBarModule\r\n    ],\r\n    providers: [\r\n        ImportService\r\n    ],\r\n    exports: [\r\n        ImportTemplateComponent,\r\n        ImportComponent\r\n    ]\r\n})\r\nexport class ImportModule {\r\n}\r\n","/*\r\n * Public API Surface of common-form\r\n */\r\n\r\n/**\r\n * Common Control\r\n */\r\nexport * from './lib/common-control/public_api';\r\n\r\n/**\r\n * Dynamic Form exports\r\n */\r\nexport {DynamicFormModule} from './lib/dynamic-form/dynamic-form.module';\r\nexport {DynamicFormConfig} from './lib/dynamic-form/dynamic-form.component';\r\nexport {DynamicFormComponent} from './lib/dynamic-form/dynamic-form.component';\r\nexport {FieldConfig, DependentFields, FieldGroupConfig} from './lib/dynamic-form/field.interface';\r\nexport {DynamicFormService} from './lib/dynamic-form/dynamic-form.service';\r\nexport {DynamicFormDataService} from './lib/dynamic-form/dynamic-form-data.service';\r\n\r\n/**\r\n * Custom Inputs\r\n */\r\nexport * from './lib/input-components/public_api';\r\n\r\n/**\r\n * Validator\r\n */\r\nexport * from './lib/validator/public_api';\r\n\r\n/**\r\n * Import Form\r\n */\r\nexport * from './lib/import/public_api';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i5","i6","i7","i9.SelectOnTabDirective","i2.DynamicFormDataService","i4","i9","i10","i11","i13.CommonAutocompleteComponent","i3.ImportDataService","i4.DynamicFormDataService","i8","i10.DynamicFormComponent","i12","i13","i14","i15","i16","i18","i2.ImportDataService","i5.DynamicFormComponent","i6.ImportTemplateComponent"],"mappings":"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"}