{"version":3,"file":"input-search-select-option.mjs","sources":["../../../projects/input-search-select-option/src/lib/filter-by.pipe.ts","../../../projects/input-search-select-option/src/lib/input-search-select-option.component.ts","../../../projects/input-search-select-option/src/lib/input-search-select-option.component.html","../../../projects/input-search-select-option/src/lib/input-search-select-option.module.ts","../../../projects/input-search-select-option/src/input-search-select-option.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * filters an array based on searctext\n */\n@Pipe({\n   name: 'filterBy'\n})\nexport class FilterByPipe implements PipeTransform {\n   public transform(array: any[], searchText?: string, keyName?: string) {\n      if (!array || !searchText || !Array.isArray(array)) {\n         return array;\n      }\n      if (typeof array[0] === 'string') {\n         return array.filter((item) => item.toLowerCase().indexOf(searchText.toLowerCase()) > -1);\n      }\n      // filter array, items which match and return true will be\n      // kept, false will be filtered out\n      if (!keyName) {\n         return array.filter((item: any) => {\n            for (const key in item) {\n               if (typeof item[key] !== 'object' && item[key].toString().toLowerCase().indexOf(searchText.toLowerCase()) > -1) {\n                  return true;\n               }\n            }\n            return false;\n         });\n      } else {\n         return array.filter((item: any) => {\n            if (typeof item[keyName] !== 'object' && item[keyName].toString().toLowerCase().indexOf(searchText.toLowerCase()) > -1) {\n               return true;\n            }\n            return false;\n         });\n      }\n\n   }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, OnInit, Optional, Output, QueryList, Self, SimpleChanges, ViewChildren } from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, FormGroup, NgControl } from '@angular/forms';\nimport { FilterByPipe } from './filter-by.pipe';\nimport { InputSearchSelectConfig } from './input-search-config';\n\n@Component({\n  selector: 'input-search-select-option',\n  templateUrl: './input-search-select-option.component.html',\n  styleUrls: ['./input-search-select-option.component.scss'],\n  providers: [\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class InputSearchSelectOptionComponent implements OnInit, OnChanges, AfterViewInit, ControlValueAccessor {\n\n  @Input() public controlName: string = '';\n  @Input() public form: FormGroup;\n  @Input() public config!: InputSearchSelectConfig | any;\n  @Input() public options: any = [];\n  @Input() public _value: any;\n  @Output() public change: EventEmitter<any> = new EventEmitter();\n  @Output() public createEvent: EventEmitter<any> = new EventEmitter();\n  @Output() public updateEvent: EventEmitter<any> = new EventEmitter();\n  @ViewChildren('dropdownListOptions')\n  public dropdownListOptions!: QueryList<ElementRef>;\n  public ID = 'ID-' + inputSearchRandomID();\n  public toggleDropdown: boolean = false;\n  public modelList: any[] = [];\n  public clickedInside = false;\n  public insideKeyPress = false;\n  public focusedItemIndex: any = null;\n  public showNotFound = false;\n  public searchText: any = '';\n  public selectedItem: any;\n  public hover: string | null = '';\n  private ngValue: any;\n  public showIcon: boolean = false;\n  public isEditMode: boolean = false;\n  public ngTouched: boolean = false;\n\n  constructor(\n    fb: FormBuilder,\n    private cdref: ChangeDetectorRef,\n    public _elementRef: ElementRef,\n    @Optional() @Self() public ngControl: NgControl,\n  ) {\n    if (ngControl != null) {\n      ngControl.valueAccessor = this;\n    }\n    this.form = fb.group({});\n  }\n\n  get f(): any {\n    return this.form.controls;\n  }\n\n  public getTouchedFormEvent(): boolean {\n    if (this.form.controls[this.controlName]) {\n      if (this.form.controls[this.controlName].touched) return true;\n    }\n    else if (this.ngTouched) return true;\n    return false;\n  }\n\n  public getValidFormEvent(): boolean {\n    if (this.form.controls[this.controlName]) {\n      if (this.form.controls[this.controlName].errors) return false;\n    }\n    return true;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['config']) {\n      this.initConfiguration();\n    }\n    this.options = this.options || [];\n    if (changes['options']) {\n      this.modelList = [\n        ...this.options,\n      ];\n      if (this.isEditMode) {\n        this.isEditMode = false;\n        this.showIcon = false;\n      }\n      if (this.ngValue) {\n        const index = this.modelList.findIndex(e => e[this.config.idKey] === this.ngValue);\n        if (index > -1) if (this.modelList.length > 0) this.selectItem(this.modelList[index]);\n      }\n    }\n  }\n\n  ngOnInit(): void {\n    if (typeof this.options !== 'undefined' && Array.isArray(this.options)) {\n      this.modelList = [\n        ...this.options,\n      ];\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.dropdownListOptions.changes.subscribe(this.setNotFoundState.bind(this));\n    const control = this.ngControl && this.ngControl.control;\n  }\n\n  propagateChange = (_: any) => { };\n\n  registerOnChange(fn: any): void { this.propagateChange = fn; this.onChange = fn; }\n\n  registerOnTouched(fn: any): void { this.onTouched = fn }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.config.disabled = isDisabled;\n  }\n\n  writeValue(value: any, internal?: boolean): void {\n    if (internal) {\n      this.ngValue = '';\n      this.value = value;\n    } else {\n      this.ngValue = value;\n      if (this.config) {\n        this.showIcon = false;\n        this.toggleDropdown = false;\n        this.isEditMode = false;\n        if (this.config.clearOnSelection) {\n          this.searchText = '';\n        }\n      }\n      if (value == undefined || value == null || value == '') {\n        this.resetEverything();\n      }\n      else if (this.modelList.length > 0) {\n        const index = this.modelList.findIndex(e => e[this.config.idKey] === this.ngValue);\n        if (index > -1) this.selectItem(this.modelList[index]);\n      }\n    }\n  }\n\n  get errors() {\n    const control = this.ngControl && this.ngControl.control;\n    if (control) {\n      return control.touched && control.errors;\n    }\n    return null;\n  }\n\n  get value() {\n    return this._value;\n  }\n  set value(val) {\n    // this.propagateChange(val);\n    this._value = val;\n    this.onChange(val);\n    this.onTouched(val);\n  }\n\n  public onChange: any = () => {\n  }\n  public onTouched: any = () => {\n  }\n\n  resetEverything(): void {\n    this.searchText = '';\n    this.selectedItem = null;\n    this.focusedItemIndex = null;\n    this._value = null;\n    this.ngValue = null;\n    this.showIcon = false;\n    this.isEditMode = false;\n    this.ngTouched = false;\n    this.hover = null;\n    this.toggleDropdown = false;\n    this.cdref.detectChanges();\n  }\n\n  private initConfiguration() {\n    const config: InputSearchSelectConfig | any = {\n      displayKey: 'value',\n      idKey: 'id',\n      height: 'auto',\n      width: '100%',\n      placeholder: 'Select Item',\n      noResultsFound: 'No results found!',\n      showNoResultMessage: true,\n      searchOnKey: null,\n      clearOnSelection: false,\n      disabled: false,\n      create: false,\n      update: false,\n      theme: {\n        customValidationClass: 'invalid',\n        inputBackground: '#fff',\n        inputColor: '#000',\n        containerListBackground: '#fff',\n        ContainerListColor: '#000',\n        listHoverBackground: '#0085dd',\n        listHoverColor: '#fff',\n        listFontSize: '14px',\n        iconColor: '#0085dd',\n        iconBackground: '#fff',\n        iconBorder: '1px solid #0085dd',\n      }\n    };\n    if (!this.config) {\n      this.config = { ...config };\n    }\n    if (Object.keys(this.config).length === 0) {\n      this.config = { ...config };\n    }\n    for (const key of Object.keys(config)) {\n      if (key == 'theme' && this.config['theme']) {\n        for (const tkey of Object.keys(config[key])) {\n          this.config[key][tkey] = this.config[key][tkey] ? this.config[key][tkey] : config[key][tkey];\n        }\n      } else {\n        this.config[key] = this.config.hasOwnProperty(key) ? this.config[key] : config[key];\n      }\n    }\n    this.config = { ...this.config };\n  }\n\n  onInputFocusIn(): void {\n    if (!this.config.disabled) {\n      this.markAsTouched();\n      this.toggleDropdown = true;\n      this.focusedItemIndex = null;\n      this.hover = null;\n    }\n  }\n\n  markAsTouched() {\n    if (!this.ngTouched) {\n      this.onTouched();\n      this.ngTouched = true;\n    }\n  }\n\n  onInputfocusOutFunction(): void {\n  }\n\n  onSearchTextChange(event: any) {\n    if (!this.config.disabled) {\n      if (event) {\n        this.toggleDropdown = true;\n        this.focusedItemIndex = null;\n        this.hover = null;\n      }\n      this.change.emit(event);\n      this.propagateChange(null);\n      if (this.config?.create === true && !this.isEditMode) {\n        const find = this.modelList.findIndex(e => e[this.config.displayKey] === event);\n        if (find < 0) this.showIcon = true;\n        else this.showIcon = false;\n      }\n    }\n  }\n\n  public setNotFoundState() {\n    if (this.dropdownListOptions.length === 0) {\n      this.showNotFound = true;\n    } else {\n      this.showNotFound = false;\n    }\n    this.cdref.detectChanges();\n  }\n\n  public changeSearchText($event: any) {\n    $event.stopPropagation();\n  }\n\n  public selectItem(item: string, clicked?: boolean) {\n    const i = this.modelList.findIndex(element => item === element);\n    if (i > -1) {\n      this.selectedItem = this.modelList[i];\n      if (this.config.clearOnSelection) {\n        this.searchText = null;\n      }\n      this.valueChanged(clicked);\n      this.resetArrowKeyActiveElement();\n      this.toggleDropdown = false;\n      this.showIcon = false;\n      this.isEditMode = false;\n    }\n    this.focusedItemIndex = null;\n    this.hover = null;\n  }\n\n  public valueChanged(clicked: any) {\n    if (typeof this.form.controls[this.controlName] != 'object') {\n      this.writeValue(this.selectedItem[this.config.idKey], true);\n      this.change.emit(this.selectedItem[this.config.idKey]);\n    }\n    else if (clicked === true) {\n      this.writeValue(this.selectedItem[this.config.idKey], true);\n      this.change.emit(this.selectedItem[this.config.idKey]);\n    }\n    else if (this.selectedItem[this.config.idKey] !== this.ngValue) {\n      this.writeValue(this.selectedItem[this.config.idKey], true);\n      this.change.emit(this.selectedItem[this.config.idKey]);\n    }\n    if (!this.config.clearOnSelection) this.setSelectedDisplayText();\n  }\n\n  private setSelectedDisplayText() {\n    let text: string = this.selectedItem;\n    if (typeof this.selectedItem === 'object') {\n      text = this.config.displayFn\n        ? this.config.displayFn(this.selectedItem)\n        : this.selectedItem[this.config.displayKey];\n    }\n    this.searchText = this.selectedItem.length === 0 ? this.config.placeholder : text;\n  }\n\n  public toggleSelectDropdown(): void {\n    this.toggleDropdown = !this.toggleDropdown;\n    if (this.toggleDropdown) {\n    } else {\n      this.searchText = null;\n    }\n    this.resetArrowKeyActiveElement();\n  }\n\n  private resetArrowKeyActiveElement() {\n    this.focusedItemIndex = null;\n  }\n\n  public setEditMode(obj: any): void {\n    if (this.config.update) {\n      this.isEditMode = true;\n      this.showIcon = true;\n      this.toggleDropdown = false;\n      this.searchText = obj[this.config.displayKey];\n      this._value = obj[this.config.idKey];\n      document.getElementById(this.ID)!.focus();\n    }\n  }\n\n  public cancelUpdate(): void {\n    this.isEditMode = false;\n    this.showIcon = false;\n    this.toggleDropdown = false;\n  }\n\n  callCreateEvent(): void {\n    if (!this.config.create) return;\n    if (!this.showIcon) return;\n    if (this.isEditMode) return;\n    if (!this.searchText) return;\n    this.focusedItemIndex = null;\n    this.createEvent.emit(this.searchText);\n  }\n\n  callUpdateEvent(): void {\n    if (!this.config.update) return;\n    if (!this.showIcon) return;\n    if (!this.isEditMode) return;\n    if (!this.searchText) return;\n    if (!this._value) return;\n    this.focusedItemIndex = null;\n    this.updateEvent.emit({\n      _id: this._value,\n      value: this.searchText\n    });\n  }\n\n  @HostListener('click')\n  public clickInsideComponent() {\n    this.clickedInside = true;\n  }\n\n  @HostListener('focus') public focus() {\n    if (!this.config.disabled) {\n      this.toggleSelectDropdown();\n    }\n  }\n\n  @HostListener('document:click')\n  public clickOutsideComponent() {\n    if (!this.clickedInside) {\n      this.focusedItemIndex = null;\n      this.toggleDropdown = false;\n      this.resetArrowKeyActiveElement();\n    }\n    this.clickedInside = false;\n  }\n\n  @HostListener('keydown', ['$event'])\n  public handleKeyboardEvent($event: KeyboardEvent) {\n    this.insideKeyPress = true;\n    if ($event.key === 'Escape' || this.config.disabled) {\n      if ($event.key === 'Escape' && this.config?.update && this.searchText && this.showIcon && this.isEditMode) {\n        this.cancelUpdate();\n        $event.preventDefault();\n      }\n      this.toggleDropdown = false;\n      this.insideKeyPress = false;\n      return;\n    }\n    const avaOpts = this.dropdownListOptions.toArray();\n    // Arrow Down\n    if ($event.key === 'ArrowDown' && avaOpts.length > 0) {\n      this.onArrowKeyDown();\n      if (this.focusedItemIndex >= avaOpts.length) {\n        this.focusedItemIndex = 0;\n      }\n\n      avaOpts[this.focusedItemIndex].nativeElement.focus();\n      $event.preventDefault();\n    }\n    // Arrow Up\n    if ($event.key === 'ArrowUp' && avaOpts.length) {\n      this.onArrowKeyUp();\n      if (this.focusedItemIndex >= avaOpts.length) {\n        this.focusedItemIndex = avaOpts.length - 1;\n      }\n      avaOpts[this.focusedItemIndex].nativeElement.focus();\n      $event.preventDefault();\n    }\n    // Enter\n    if ($event.key === 'Enter') {\n      if (this.focusedItemIndex !== null && typeof this.focusedItemIndex == 'number') {\n        const filteredItems = new FilterByPipe().transform(\n          this.modelList,\n          this.searchText,\n          this.config.searchOnKey\n        );\n        this.selectItem(filteredItems[this.focusedItemIndex], true);\n        this.focusedItemIndex = null;\n        $event.preventDefault();\n      } else if (this.config?.create && this.searchText && this.showIcon && !this.isEditMode) {\n        this.callCreateEvent();\n        $event.preventDefault();\n      } else if (this.config?.update && this.searchText && this.showIcon && this.isEditMode) {\n        this.callUpdateEvent();\n        $event.preventDefault();\n      }\n    }\n  }\n\n  @HostListener('document:keydown')\n  public KeyPressOutsideComponent() {\n    if (!this.insideKeyPress) {\n      this.toggleDropdown = false;\n      this.resetArrowKeyActiveElement();\n    }\n    this.insideKeyPress = false;\n  }\n\n  private onArrowKeyUp() {\n    if (this.focusedItemIndex === 0) {\n      this.focusedItemIndex = this.modelList.length - 1;\n      return;\n    }\n    if (this.onArrowKey()) {\n      this.focusedItemIndex--;\n    }\n  }\n\n  private onArrowKeyDown() {\n    if (this.focusedItemIndex === this.modelList.length - 1) {\n      this.focusedItemIndex = 0;\n      return;\n    }\n    if (this.onArrowKey()) {\n      this.focusedItemIndex++;\n    }\n  }\n\n  private onArrowKey() {\n    if (typeof this.focusedItemIndex !== 'number') {\n      this.focusedItemIndex = 0;\n      return false;\n    }\n    return true;\n  }\n\n}\n\nfunction inputSearchRandomID() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n    return v.toString(16);\n  });\n}","<div class=\"input-search-container\" tabindex=\"0\">\n  <input type=\"text\" class=\"input-search\" (focus)=\"onInputFocusIn()\" [attr.id]=\"ID\" autocomplete=\"off\"\n      (focusout)=\"onInputfocusOutFunction()\" (ngModelChange)=\"onSearchTextChange($event)\"\n      [class.ng-touched]=\"getTouchedFormEvent()\" [class.ng-untouched]=\"!getTouchedFormEvent()\" \n      [class.ng-valid]=\"getValidFormEvent()\" [class.ng-invalid]=\"!getValidFormEvent()\" \n      [class.remove-rdius]=\"toggleDropdown\" [style.color]=\"config?.theme?.inputColor\" [style.maxWidth]=\"config?.width\"\n      [disabled]=\"config?.disabled\" [ngClass]=\"errors ? config?.theme?.customValidationClass : ''\"\n      [style.background]=\"config?.theme?.inputBackground\" [placeholder]=\"config?.placeholder\" [(ngModel)]=\"searchText\"\n      (change)=\"changeSearchText($event)\">\n  <div class=\"dropdown-list-container\" *ngIf=\"toggleDropdown && !isEditMode\" [style.maxWidth]=\"config?.width\"\n      [style.maxHeight]=\"config?.height\" [style.color]=\"config?.theme?.ContainerListColor\"\n      [style.background]=\"config?.theme?.containerListBackground\">\n      <ul class=\"all-items\">\n          <li #dropdownListOptions tabindex=\"-1\"\n              *ngFor=\"let item of modelList| filterBy: searchText:config.searchOnKey;let i = index\"\n              [ngClass]=\"{ active: focusedItemIndex == i && !item?.disabled, disabled: item?.disabled }\"\n              [style.fontSize]=\"config?.theme?.listFontSize\" (click)=\"selectItem(item, true)\" [ngStyle]=\" (hover == 'hover-active-list'+i || focusedItemIndex == i) && !item?.disabled ? \n                          {'color': config.theme.listHoverColor,\n                          'background': config.theme.listHoverBackground } :\n                          {'color': config.theme.ContainerListColor,\n                          'background': config.theme.containerListBackground  }\"\n              (mouseover)=\"hover = 'hover-active-list'+i; focusedItemIndex = 'null' \" (mouseout)=\"hover = ''\">\n              <span *ngIf=\"config?.update\" class=\"float-right searchEdit\" (click)=\"setEditMode(item)\"> <i\n                      class=\"fas fa-edit\"></i>\n              </span>\n              {{config.displayKey ? item[config.displayKey] : item}}\n          </li>\n          <li *ngIf=\"showNotFound && config?.showNoResultMessage\" [style.fontSize]=\"config?.theme?.listFontSize\">{{\n              config.noResultsFound }}\n          </li>\n      </ul>\n  </div>\n  <span title=\"Create Now.\" class=\"icon-sty\" *ngIf=\"config?.create && searchText && showIcon && !isEditMode\"\n      [style.color]=\"config?.theme?.iconColor\" [style.border]=\"config?.theme?.iconBorder\"\n      [style.background]=\"config?.theme?.iconBackground\" (click)=\"callCreateEvent()\">\n      <i class=\"fas fa-plus\"></i>\n  </span>\n  <span class=\"icon-sty\" title=\"Update Now.\" *ngIf=\"config?.update && searchText && showIcon && isEditMode\"\n      [style.color]=\"config?.theme?.iconColor\" [style.border]=\"config?.theme?.iconBorder\"\n      [style.background]=\"config?.theme?.iconBackground\" (click)=\"callUpdateEvent()\">\n      <i class=\"fas fa-check\"></i>\n  </span>\n  <span class=\"icon-sty\" style=\"margin-left: 60px;\" title=\"Cancel Update.\"\n      *ngIf=\"config?.update && searchText && showIcon && isEditMode\" [style.color]=\"config?.theme?.iconColor\"\n      [style.border]=\"config?.theme?.iconBorder\" [style.background]=\"config?.theme?.iconBackground\"\n      (click)=\"cancelUpdate()\">\n      <i class=\"fas fa-times\"></i>\n  </span>\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FilterByPipe } from './filter-by.pipe';\nimport { InputSearchSelectOptionComponent } from './input-search-select-option.component';\n\n\n\n@NgModule({\n  declarations: [InputSearchSelectOptionComponent,FilterByPipe],\n  imports: [\n    CommonModule,\n    FormsModule,\n  ],\n  exports: [InputSearchSelectOptionComponent,FilterByPipe]\n})\nexport class InputSearchSelectOptionModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.FilterByPipe"],"mappings":"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"}