{"version":3,"file":"search-multiselect-dropdown.mjs","sources":["../../../projects/search-multiselect-dropdown/src/lib/search-multiselect-dropdown.service.ts","../../../projects/search-multiselect-dropdown/src/lib/pipes/filter-by.pipe.ts","../../../projects/search-multiselect-dropdown/src/lib/search-multiselect-config.class.ts","../../../projects/search-multiselect-dropdown/src/lib/search-multiselect-dropdown.component.ts","../../../projects/search-multiselect-dropdown/src/lib/search-multiselect-dropdown.component.html","../../../projects/search-multiselect-dropdown/src/lib/pipes/limit-to.pipe.ts","../../../projects/search-multiselect-dropdown/src/lib/search-multiselect-dropdown.module.ts","../../../projects/search-multiselect-dropdown/src/public-api.ts","../../../projects/search-multiselect-dropdown/src/search-multiselect-dropdown.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SearchMultiselectDropdownService {\n\n  constructor() { }\n}\n","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","export class DropDownConfig {\r\n    multiple: boolean = false;\r\n    displayKey: string = '';\r\n    height: string = '';\r\n    search: boolean = false;\r\n    filterBlankData?: boolean = false;\r\n    placeholder: string = '';\r\n    searchPlaceholder?: string = '';\r\n    limitTo?: number = 0;\r\n    customComparator?: any = undefined;\r\n    noResultsFound: string = '';\r\n    moreText?: string = '';\r\n    searchOnKey?: any = null;\r\n    clearOnSelection?: boolean = false;\r\n    inputDirection?: string = '';\r\n    disabled?: boolean = false;\r\n    showSelectedAtDropdown?: boolean = false;\r\n    theme?: ConfigTheme = new ConfigTheme();\r\n}\r\n\r\nclass ConfigTheme {\r\n    inputBackground?: string = '';\r\n    inputColor?: string = '';\r\n    containerListBackground?: string = '';\r\n    ContainerListColor?: string = '';\r\n    selectedItemColor?: string = '';\r\n    selectedItemBackground?: string = '';\r\n    listHoverBackground?: string = '';\r\n    listHoverColor?: string = '';\r\n    searchInputColor?: string = '';\r\n}","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnChanges, OnInit, Output, QueryList, SimpleChanges, ViewChildren } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FilterByPipe } from './pipes/filter-by.pipe';\nimport { DropDownConfig } from './search-multiselect-config.class';\n\n@Component({\n  selector: 'search-multiselect-dropdown',\n  templateUrl: './search-multiselect-dropdown.component.html',\n  styleUrls: ['./search-multiselect-dropdown.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => SearchMultiselectDropdownComponent),\n      multi: true,\n    },\n  ],\n})\nexport class SearchMultiselectDropdownComponent implements OnInit, OnChanges, AfterViewInit, ControlValueAccessor {\n  @ViewChildren('availableOption')\n  public availableOptions!: QueryList<ElementRef>;\n  @Input() public config: DropDownConfig | any = new DropDownConfig();\n  @Input() public options: any[] = [];\n  @Input() public _value: any;\n  @Output() public change: EventEmitter<any> = new EventEmitter();\n  @Output() public searchChange: EventEmitter<any> = new EventEmitter();\n\n  public toggleDropdown = false;\n  public modelList: any = [];\n  public selectedItems: any;\n  public selectedDisplayText = 'Select';\n  public searchText: any;\n  public clickedInside = false;\n  public insideKeyPress = false;\n  public focusedItemIndex: any = null;\n  public showNotFound = false;\n  public hover: string = '';\n\n  constructor(\n    private cdref: ChangeDetectorRef,\n    public _elementRef: ElementRef\n  ) {\n    this.config.multiple = false;\n  }\n\n  propagateChange = (_: any) => { };\n\n  registerOnChange(fn: any): void {\n    this.propagateChange = fn;\n  }\n  registerOnTouched(fn: any): void {\n  }\n  setDisabledState?(isDisabled: boolean): void {\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    this.selectedItems = [];\n    this.options = this.options || [];\n    if (changes['options']) {\n      if (this.config.filterBlankData) {\n        this.modelList = [\n          ...this.options.filter(x => this.config.displayKey ? !!x[this.config.displayKey] : !!x)\n        ];\n      } else {\n        this.modelList = [\n          ...this.options.sort(this.config.customComparator),\n        ];\n      }\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.availableOptions.changes.subscribe(this.setNotFoundState.bind(this));\n  }\n\n  ngOnInit(): void {\n    if (typeof this.options !== 'undefined' && Array.isArray(this.options)) {\n      if (this.config.filterBlankData) {\n        this.modelList = [\n          ...this.options.filter(x => this.config.displayKey ? !!x[this.config.displayKey] : !!x)\n        ];\n      } else {\n        this.modelList = [\n          ...this.options.sort(this.config.customComparator),\n        ];\n      }\n      this.initDropdownValuesAndOptions();\n    }\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();\n  }\n\n  public onChange: any = () => {\n  }\n  public onTouched: any = () => {\n  }\n\n  public toggleSelectDropdown(): void {\n    this.toggleDropdown = !this.toggleDropdown;\n    if (this.toggleDropdown) {\n      // this.open.emit();\n      if (this.config.search) {\n        let t1 = setTimeout(() => {\n          document.getElementById('input-search-text')!.focus();\n          clearTimeout(t1);\n        }, 150);\n      }\n\n    } else {\n      this.searchText = null;\n      // this.close.emit();\n    }\n    this.resetArrowKeyActiveElement();\n  }\n\n  private resetArrowKeyActiveElement() {\n    this.focusedItemIndex = null;\n  }\n\n  public changeSearchText($event: any) {\n    $event.stopPropagation();\n  }\n\n  public searchTextChanged() {\n    this.searchChange.emit(this.searchText);\n  }\n\n  public setNotFoundState() {\n    if (this.availableOptions.length === 0) {\n      this.showNotFound = true;\n    } else {\n      this.showNotFound = false;\n    }\n    this.cdref.detectChanges();\n  }\n\n  public selectItem(item: string, index?: number) {\n    if (!this.config.multiple) {\n      this.selectedItems = item;\n      this.toggleDropdown = false;\n    } else {\n      this.modelList.forEach((element: any, i: number) => {\n        if (item === element) {\n          this.selectedItems.push(item);\n          this.modelList.splice(i, 1);\n        }\n      });\n      this.selectedItems = [...this.selectedItems];\n      this.modelList = [...this.modelList];\n      this.selectedItems.sort(this.config.customComparator);\n    }\n    if (this.config.clearOnSelection) {\n      this.searchText = null;\n    }\n    this.modelList.sort(this.config.customComparator);\n    this.valueChanged();\n    this.resetArrowKeyActiveElement();\n  }\n\n  public valueChanged() {\n    this.writeValue(this.selectedItems, true);\n    this.change.emit({ value: this.value });\n    this.setSelectedDisplayText();\n  }\n\n  public writeValue(value: any, internal?: boolean) {\n    if (value) {\n      if (Array.isArray(value)) {\n        if (this.config.multiple) {\n          this.value = value;\n        } else if (value.length > 0) {\n          this.value = value[0];\n        }\n      } else {\n        this.value = value;\n      }\n      if (this.selectedItems.length === 0) {\n        if (Array.isArray(value)) {\n          this.selectedItems = value;\n        } else {\n          this.selectedItems.push(value);\n        }\n        this.initDropdownValuesAndOptions();\n      }\n    } else {\n      this.value = [];\n      if (!internal) {\n        this.reset();\n      }\n    }\n    if (!internal) {\n      this.reset();\n    }\n  }\n\n  public reset() {\n    this.selectedItems = [];\n    if (this.config.filterBlankData) {\n      this.modelList = [\n        ...this.options.filter(x => this.config.displayKey ? !!x[this.config.displayKey] : !!x)\n      ];\n    } else {\n      this.modelList = [\n        ...this.options.sort(this.config.customComparator),\n      ];\n    }\n    this.initDropdownValuesAndOptions();\n  }\n\n  private initDropdownValuesAndOptions() {\n    const config: DropDownConfig | any = {\n      multiple: false,\n      displayKey: 'value',\n      height: 'auto',\n      search: false,\n      placeholder: 'Select Item',\n      searchPlaceholder: 'Search...',\n      limitTo: 0,\n      customComparator: undefined,\n      noResultsFound: 'No results found!',\n      moreText: 'more',\n      searchOnKey: null,\n      clearOnSelection: false,\n      inputDirection: 'ltr',\n      disabled: false,\n      filterBlankData: false,\n      theme: {\n        inputBackground: '#fff',\n        inputColor: '#000',\n        containerListBackground: '#fff',\n        ContainerListColor: '#000',\n        selectedItemColor: '#fff',\n        selectedItemBackground: '#0085dd',\n        listHoverBackground: '#0085dd',\n        listHoverColor: '#fff',\n        searchInputColor: '#000',\n      }\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') {\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[key] ? this.config[key] : config[key];\n      }\n\n    }\n    this.config = { ...this.config };\n    this.selectedDisplayText = this.config['placeholder'];\n    if (this.value !== '' && typeof this.value !== 'undefined') {\n      if (Array.isArray(this.value)) {\n        this.selectedItems = this.value;\n      } else if (this.value !== '' && this.value !== null) {\n        this.selectedItems[0] = this.value;\n      } else {\n        this.selectedItems = [];\n        this.value = [];\n      }\n\n      this.selectedItems.forEach((item: any) => {\n        const ind = this.modelList.findIndex(\n          (aItem: any) => JSON.stringify(item) === JSON.stringify(aItem)\n        );\n        if (ind !== -1) {\n          this.modelList.splice(ind, 1);\n        }\n      });\n    }\n    this.setSelectedDisplayText();\n  }\n\n  private setSelectedDisplayText() {\n    if (!this.config.multiple && this.selectedItems) {\n      this.selectedDisplayText = this.selectedItems[this.config.displayKey];\n    } else {\n      let text: string = this.selectedItems[0];\n      if (typeof this.selectedItems[0] === 'object') {\n        text = this.selectedItems[0][this.config.displayKey];\n      }\n      if (this.config.multiple && this.selectedItems.length > 0) {\n        this.selectedDisplayText =\n          this.selectedItems.length === 1\n            ? text\n            : text +\n            ` + ${this.selectedItems.length - 1} ${this.config.moreText}`;\n      } else {\n        this.selectedDisplayText =\n          this.selectedItems.length === 0 ? this.config.placeholder : text;\n      }\n    }\n  }\n\n  public deselectItem(item: any, index: number) {\n    this.selectedItems.forEach((element: any, i: number) => {\n      if (item === element) {\n        this.selectedItems.splice(i, 1);\n      }\n    });\n    let sortedItems = [...this.modelList];\n    if (!this.modelList.includes(item)) {\n      this.modelList.push(item);\n      sortedItems = this.modelList.sort(this.config.customComparator);\n    }\n    this.selectedItems = [...this.selectedItems];\n    this.modelList = [...sortedItems];\n    if (!Array.isArray(this.value)) {\n      this.value = [];\n    }\n    this.valueChanged();\n    this.resetArrowKeyActiveElement();\n  }\n\n  @HostListener('click')\n  public clickInsideComponent() {\n    this.clickedInside = true;\n  }\n\n  @HostListener('blur') public blur() {\n    this.toggleDropdown = false;\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.toggleDropdown = false;\n      this.resetArrowKeyActiveElement();\n      this.searchText = null;\n      // this.close.emit();\n    }\n    this.clickedInside = false;\n  }\n\n  @HostListener('keydown', ['$event'])\n  public handleKeyboardEvent($event: KeyboardEvent) {\n    this.insideKeyPress = true;\n    if ($event.keyCode === 27 || this.config.disabled) {\n      this.toggleDropdown = false;\n      this.insideKeyPress = false;\n      return;\n    }\n    const avaOpts = this.availableOptions.toArray();\n    if ($event.keyCode !== 9 && avaOpts.length === 0 && !this.toggleDropdown) {\n      this.toggleDropdown = true;\n    }\n    // Arrow Down\n    if ($event.keyCode === 40 && avaOpts.length > 0) {\n      this.onArrowKeyDown();\n      if (this.focusedItemIndex >= avaOpts.length) {\n        this.focusedItemIndex = 0;\n      }\n      avaOpts[this.focusedItemIndex].nativeElement.focus();\n      $event.preventDefault();\n    }\n    // Arrow Up\n    if ($event.keyCode === 38 && 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.keyCode === 13 && this.focusedItemIndex !== null) {\n      const filteredItems = new FilterByPipe().transform(\n        this.modelList,\n        this.searchText,\n        this.config.searchOnKey\n      );\n      this.selectItem(\n        filteredItems[this.focusedItemIndex],\n        this.modelList.indexOf(filteredItems[this.focusedItemIndex])\n      );\n      this.focusedItemIndex = 0;\n      avaOpts[this.focusedItemIndex].nativeElement.focus();\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","<div class=\"auto-search-container\" tabindex=\"0\">\n    <div class=\"auto-search-button\" [class.remove-rdius]=\"toggleDropdown\" [style.color]=\"config.theme.inputColor\"\n        [style.background]=\"config.theme.inputBackground\" (click)=\"toggleSelectDropdown()\"\n        *ngIf=\"config.showSelectedAtDropdown\">\n        <span [ngClass]=\"{'angle-up': toggleDropdown , 'angle-down': !toggleDropdown }\"></span>\n        <div class=\"searched-selected-items\"\n            *ngIf=\"config.multiple && selectedItems.length > 0 && config.showSelectedAtDropdown\">\n            <span class=\"badge badge-danger\" [style.color]=\"config.theme.selectedItemColor\"\n                [style.background]=\"config.theme.selectedItemBackground\" tabindex=\"-1\"\n                *ngFor=\"let selected of selectedItems; let i = index\">\n                <span>\n                    {{config.displayKey ? selected[config.displayKey] : selected}}\n                    <span style=\"cursor: pointer;\" (click)=\"deselectItem(selected, i)\"><i\n                            class=\"ml-2 fas fa-times closef\"></i></span>\n                </span>\n            </span>\n        </div>\n        <span class=\"search-text\"\n            *ngIf=\"(config.showSelectedAtDropdown && config.multiple && selectedItems.length === 0) || !config.showSelectedAtDropdown\">\n            {{ selectedDisplayText }} </span>\n    </div>\n    <button *ngIf=\"!config.showSelectedAtDropdown\" type=\"button\" tabindex=\"-1\" class=\"auto-search-button\"\n        [class.remove-rdius]=\"toggleDropdown\" [style.color]=\"config.theme.inputColor\"\n        [style.background]=\"config.theme.inputBackground\" (click)=\"toggleSelectDropdown()\">\n        <span class=\"search-text\">{{selectedDisplayText }} </span>\n        <span [ngClass]=\"{'angle-up': toggleDropdown , 'angle-down': !toggleDropdown }\"></span>\n    </button>\n    <div class=\"auto-search-dropdown-list-container\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\"\n        [style.color]=\"config.theme.ContainerListColor\" [style.background]=\"config.theme.containerListBackground\">\n        <div class=\"search-container\" *ngIf=\"config.search\">\n            <input name=\"search-text\" tabindex=\"-1\" autocomplete=\"off\" (change)=\"changeSearchText($event)\"\n                [style.direction]=\"config.inputDirection\" id=\"input-search-text\" (input)=\"searchTextChanged()\"\n                [(ngModel)]=\"searchText\" [style.color]=\"config.theme.searchInputColor\" />\n            <label>\n                Search\n            </label>\n        </div>\n        <div class=\"searched-selected-items\"\n            *ngIf=\"config.multiple && selectedItems.length > 0 && !config.showSelectedAtDropdown\">\n            <span class=\"badge badge-danger\" [style.color]=\"config.theme.selectedItemColor\"\n                [style.background]=\"config.theme.selectedItemBackground\" tabindex=\"-1\"\n                *ngFor=\"let selected of selectedItems; let i = index\">\n                <span>\n                    {{config.displayKey ? selected[config.displayKey] : selected}}\n                    <span style=\"cursor: pointer;\" (click)=\"deselectItem(selected, i)\"><i\n                            class=\"ml-2 fas fa-times closef\"></i></span>\n                </span>\n            </span>\n        </div>\n        <ul class=\"all-items\">\n            <li *ngFor=\"let item of modelList | filterBy: searchText:config.searchOnKey;let i = index\" #availableOption\n                tabindex=\"-1\" [ngClass]=\"{ active: focusedItemIndex == i && !item?.disabled, disabled: item?.disabled }\"\n                (click)=\"selectItem(item, i)\" [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                {{config.displayKey ? item[config.displayKey] : item}}\n            </li>\n            <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n        </ul>\n    </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'limitTo'\n})\nexport class LimitToPipe implements PipeTransform {\n  public transform(array: any[], itemsCount: number, startIndex: number = 0) {\n    if (!Array.isArray(array) || itemsCount === 0) {\n      return array;\n    }\n    return array.slice(startIndex, startIndex + itemsCount);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { SearchMultiselectDropdownComponent } from './search-multiselect-dropdown.component';\nimport { FilterByPipe } from './pipes/filter-by.pipe';\nimport { LimitToPipe } from './pipes/limit-to.pipe';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n\n\n@NgModule({\n  declarations: [\n    SearchMultiselectDropdownComponent,\n    FilterByPipe,\n    LimitToPipe\n  ],\n  imports: [\n    CommonModule,\n    FormsModule\n  ],\n  exports: [\n    SearchMultiselectDropdownComponent,\n    FilterByPipe,\n    LimitToPipe\n  ]\n})\nexport class SearchMultiselectDropdownModule { }\n","/*\n * Public API Surface of search-multiselect-dropdown\n */\n\nexport * from './lib/search-multiselect-dropdown.service';\nexport * from './lib/search-multiselect-dropdown.component';\nexport * from './lib/search-multiselect-dropdown.module';\nexport * from './lib/pipes/filter-by.pipe';\nexport * from './lib/pipes/limit-to.pipe';\nexport * from './lib/search-multiselect-config.class';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.FilterByPipe"],"mappings":"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"}