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