UNPKG

costimize-mat-select-autocomplete

Version:

Angular material select component with autocomplete and select all features

1 lines 39.2 kB
{"version":3,"file":"costimize-mat-select-autocomplete.mjs","sources":["../../../projects/select-autocomplete/src/lib/select-autocomplete.service.ts","../../../projects/select-autocomplete/src/lib/select-autocomplete.component.ts","../../../projects/select-autocomplete/src/lib/select-autocomplete.component.html","../../../projects/select-autocomplete/src/lib/select-autocomplete.module.ts","../../../projects/select-autocomplete/src/lib/DropdownKeyValue.ts","../../../projects/select-autocomplete/src/public_api.ts","../../../projects/select-autocomplete/src/costimize-mat-select-autocomplete.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SelectAutocompleteService {\r\n\r\n constructor() { }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR, UntypedFormControl} from '@angular/forms';\r\nimport {MatButtonToggleChange, MatButtonToggleGroup} from '@angular/material/button-toggle';\r\nimport {CdkVirtualScrollViewport, ScrollDispatcher} from '@angular/cdk/scrolling';\r\nimport {MatOption, MatOptionSelectionChange} from '@angular/material/core';\r\nimport {distinctUntilChanged, filter} from 'rxjs/operators';\r\nimport {Subscription} from 'rxjs';\r\nimport {DropdownKeyValue} from './DropdownKeyValue';\r\nimport {MatCheckboxChange} from '@angular/material/checkbox';\r\n\r\n@Component({\r\n\r\n selector: 'mat-select-autocomplete',\r\n templateUrl: './select-autocomplete.component.html',\r\n styleUrls: ['./select-autocomplete.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectAutocompleteComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class SelectAutocompleteComponent implements OnInit, ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy {\r\n @Input() selectPlaceholder = 'search...';\r\n @Input() placeholder: string;\r\n @Input() options: DropdownKeyValue[] = [];\r\n @Input() errorMsg = 'Field is required';\r\n @Input() showErrorMsg = false;\r\n @Input() selectedOptions;\r\n @Input() multiple = true;\r\n @Input() favourites = false;\r\n @Input() filterButtons: Array<{ name: string, filterCallback: (key: string, value: string) => boolean }> = [];\r\n @Input() selectAll: string;\r\n @Input() appearance: 'standard' | 'fill' | 'outline' = 'standard';\r\n @ViewChild('selectElem') selectElem;\r\n @ViewChild(MatButtonToggleGroup) toggleGroup: MatButtonToggleGroup;\r\n @ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewPort: CdkVirtualScrollViewport;\r\n @ViewChildren(MatOption) matOptions: QueryList<MatOption>;\r\n\r\n filteredOptions: DropdownKeyValue[] = [];\r\n selectAllChecked = false;\r\n customSelectAllChecked = false;\r\n displayString = '';\r\n formControl: UntypedFormControl = new UntypedFormControl([]);\r\n selected: string[] | string | null;\r\n isSelectedFavourite: boolean;\r\n searchInputFormControl = new UntypedFormControl('');\r\n searchInputFormControlSubscription: Subscription;\r\n lastEmittedValue: string[] | string | null | undefined = undefined;\r\n\r\n constructor(private cd: ChangeDetectorRef, readonly sd: ScrollDispatcher) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.selectAll) {\r\n this.filterButtons.push({\r\n name: this.selectAll,\r\n filterCallback: () => true\r\n });\r\n }\r\n\r\n this.filteredOptions = this.options;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.searchInputFormControlSubscription = this.searchInputFormControl.valueChanges\r\n .pipe(distinctUntilChanged())\r\n .subscribe(newValue => {\r\n this.filterItem(newValue);\r\n });\r\n\r\n this.sd\r\n .scrolled()\r\n .pipe(filter(scrollable => this.cdkVirtualScrollViewPort === scrollable))\r\n .subscribe(() => {\r\n let needUpdate = false;\r\n\r\n this.matOptions.forEach(option => {\r\n const selected = this.multiple ? this.selected.includes(option.value) : this.selected === option.value;\r\n\r\n if (selected && !option.selected) {\r\n option.select();\r\n needUpdate = true;\r\n } else if (!selected && option.selected) {\r\n option.deselect();\r\n needUpdate = true;\r\n }\r\n });\r\n\r\n if (needUpdate) {\r\n this.cd.detectChanges();\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.options) {\r\n this.filteredOptions = changes.options.currentValue;\r\n this.writeValue(this.selected, true);\r\n }\r\n }\r\n\r\n toggleDropdown() {\r\n this.selectElem.toggle();\r\n }\r\n\r\n toggleSelectAll(event: MatCheckboxChange) {\r\n this.deselectButtons();\r\n this.customSelectAllChecked = false;\r\n if (event.checked) {\r\n this.selected = this.getFilteredOptionsValues();\r\n } else {\r\n this.selected = [];\r\n }\r\n\r\n this.patchValue(this.selected);\r\n }\r\n\r\n filterItem(value: string) {\r\n this.filteredOptions = this.options.filter(item => {\r\n let valueIndex = 0;\r\n const splitItem = item.display.split(/(?=[A-Z])|(-)|(\\.)|(\\s+)|(_)/).filter(Boolean);\r\n for (let word of splitItem) {\r\n let wordIndex = 0;\r\n word = word.charAt(0).toUpperCase() + word.slice(1);\r\n\r\n if (value.charAt(0).toUpperCase() === word.charAt(0) && valueIndex === 1) {\r\n valueIndex = 0;\r\n }\r\n\r\n while (wordIndex < word.length) {\r\n if (valueIndex < value.length && value[valueIndex].toUpperCase() === word[wordIndex]) {\r\n valueIndex++;\r\n wordIndex++;\r\n while (valueIndex < value.length && value[valueIndex].toLowerCase() === word[wordIndex]) {\r\n valueIndex++;\r\n wordIndex++;\r\n }\r\n } else {\r\n wordIndex++;\r\n }\r\n }\r\n\r\n }\r\n\r\n return valueIndex === value.length;\r\n });\r\n this.selectAllChecked = !this.customSelectAllChecked\r\n && this.multiple\r\n && this.filteredOptions.length > 0\r\n && !this.filteredOptions.some(item => !this.selected.includes(item.value));\r\n this.cdkVirtualScrollViewPort.scrollToIndex(1);\r\n this.cdkVirtualScrollViewPort.checkViewportSize();\r\n }\r\n\r\n getFilteredOptionsValues() {\r\n return this.filteredOptions.map(option => option.value);\r\n }\r\n\r\n getDisplayString(): string {\r\n if (this.customSelectAllChecked) {\r\n return this.selectAll;\r\n }\r\n let displayString = '';\r\n if (this.selected && this.selected.length) {\r\n if (this.multiple && this.selected.length === 1) {\r\n displayString = this.options.find(option => option.value === this.selected[0]).display;\r\n } else if (this.multiple) {\r\n displayString = this.selected.length + '/' + this.options.length;\r\n } else {\r\n displayString = this.options.find(option => option.value === this.selected).display;\r\n }\r\n }\r\n return displayString;\r\n }\r\n\r\n onSelectionChange(change: MatOptionSelectionChange) {\r\n if (!change.isUserInput) {\r\n return;\r\n }\r\n\r\n const value = change.source.value;\r\n if (this.multiple) {\r\n if (change.source.selected) {\r\n (this.selected as string[]).push(value);\r\n if (this.selected.length === this.options.length) {\r\n this.selectAllChecked = true;\r\n }\r\n } else {\r\n const elementIndex = this.selected.indexOf(change.source.value);\r\n (this.selected as string[]).splice(elementIndex, 1);\r\n this.selectAllChecked = false;\r\n }\r\n } else {\r\n this.selected = value;\r\n }\r\n }\r\n\r\n public trackByFn = (index, item) => item.value;\r\n\r\n public changeSelectedValues(clickedButtonEvent: MatButtonToggleChange, filterCallback: (key: string, value: string) => boolean) {\r\n this.selectedOptions = [];\r\n this.selectAllChecked = false;\r\n this.customSelectAllChecked = false;\r\n if (clickedButtonEvent.source.checked) {\r\n this.toggleGroup.value = [clickedButtonEvent.source.value];\r\n this.selectedOptions = this.filteredOptions.filter(option => filterCallback(option.value, option.display));\r\n if (clickedButtonEvent.value === this.selectAll) {\r\n this.customSelectAllChecked = true;\r\n this.selectedOptions = this.options.filter(option => filterCallback(option.value, option.display));\r\n this.filterItem('');\r\n }\r\n this.toggleDropdown();\r\n }\r\n\r\n this.selected = this.selectedOptions.map(item => item.value);\r\n this.patchValue(this.selected);\r\n }\r\n\r\n writeValue(selectedElements: string | string[] | null, clearLastEmittedValue: boolean = true): void {\r\n this.deselectButtons();\r\n const allElementsValues = this.options.map(it => it.value);\r\n if (this.multiple && selectedElements) {\r\n this.customSelectAllChecked = false;\r\n const filteredElements = (selectedElements as string[]).filter(it => allElementsValues.includes(it));\r\n this.selected = filteredElements;\r\n this.selectAllChecked = selectedElements.length === allElementsValues.length;\r\n this.patchValue(filteredElements);\r\n } else if (this.multiple && selectedElements == null) {\r\n if (this.selectAll) {\r\n this.selectAllChecked = false;\r\n this.customSelectAllChecked = true;\r\n setTimeout(() => this.toggleGroup.value = [this.selectAll]);\r\n this.selected = allElementsValues;\r\n this.patchValue(allElementsValues);\r\n } else {\r\n this.customSelectAllChecked = false;\r\n this.selected = [];\r\n this.patchValue([]);\r\n }\r\n } else if (\r\n !this.multiple\r\n && (selectedElements == null || selectedElements.length === 0 || !allElementsValues.includes(selectedElements as string))\r\n ) {\r\n this.customSelectAllChecked = false;\r\n this.selected = null;\r\n this.patchValue([]);\r\n } else {\r\n this.customSelectAllChecked = false;\r\n this.selected = selectedElements;\r\n this.patchValue(selectedElements);\r\n }\r\n\r\n this.displayString = this.getDisplayString();\r\n if (clearLastEmittedValue) {\r\n this.lastEmittedValue = undefined;\r\n }\r\n this.emitValueIfChanged();\r\n this.reorderOptionsSelectedFirst();\r\n if(this.favourites)this.reorderOptionsFavouritesFirst()\r\n }\r\n\r\n onTouch = () => {\r\n };\r\n propagateChange = (_: any) => {\r\n };\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.formControl.disable({emitEvent: false});\r\n } else {\r\n this.formControl.enable({emitEvent: false});\r\n }\r\n }\r\n\r\n onClickOpen() {\r\n try {\r\n document.getElementById('costimize-dropdown-input').focus();\r\n } catch (error) {\r\n }\r\n this.cdkVirtualScrollViewPort.scrollToIndex(0);\r\n this.cdkVirtualScrollViewPort.checkViewportSize();\r\n }\r\n\r\n onClickClose() {\r\n this.searchInputFormControl.setValue('');\r\n this.onTouch();\r\n if (this.customSelectAllChecked) {\r\n this.displayString = this.getDisplayString();\r\n this.emitValueIfChanged();\r\n } else {\r\n this.writeValue(this.selected, false);\r\n }\r\n this.cdkVirtualScrollViewPort.scrollToIndex(0);\r\n this.cdkVirtualScrollViewPort.checkViewportSize();\r\n }\r\n\r\n private emitValueIfChanged() {\r\n const valueToEmit = this.getValueToPropagate();\r\n if (this.valueChanged(valueToEmit, this.lastEmittedValue)) {\r\n this.propagateChange(valueToEmit);\r\n this.lastEmittedValue = valueToEmit;\r\n }\r\n }\r\n\r\n private deselectButtons() {\r\n if (this.toggleGroup) {\r\n this.toggleGroup.value = null;\r\n }\r\n }\r\n\r\n private reorderOptionsFavouritesFirst() {\r\n const favouriteOptions = [], notFavouriteOptions = [];\r\n this.options.forEach(option => {\r\n if (option.favourite) {\r\n favouriteOptions.push(option);\r\n } else {\r\n notFavouriteOptions.push(option);\r\n }\r\n });\r\n\r\n this.options = [...favouriteOptions, ...notFavouriteOptions];\r\n this.filteredOptions = [...this.options];\r\n }\r\n\r\n private reorderOptionsSelectedFirst() {\r\n const selectedOptions = [], notSelectedOptions = [];\r\n this.options.forEach(option => {\r\n if (this.selected && this.optionIsSelected(option, this.selected)) {\r\n selectedOptions.push(option);\r\n } else {\r\n notSelectedOptions.push(option);\r\n }\r\n });\r\n\r\n this.options = [...selectedOptions, ...notSelectedOptions];\r\n this.filteredOptions = [...this.options];\r\n }\r\n\r\n private optionIsSelected(option: DropdownKeyValue, selected: string[] | string) {\r\n return (this.multiple && (selected as string[]).some(it => it === option.value)) ||\r\n (!this.multiple && (selected as string) === option.value);\r\n }\r\n\r\n private patchValue(newValue: string | string[] | null) {\r\n if (this.multiple && newValue != null) {\r\n this.formControl.patchValue([...newValue]);\r\n } else {\r\n this.formControl.patchValue(newValue);\r\n if(this.favourites) {\r\n this.isSelectedFavourite = this.filteredOptions.find( option => option.value == newValue)?.favourite\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.searchInputFormControlSubscription.unsubscribe();\r\n }\r\n\r\n private getValueToPropagate(): string | string[] | null {\r\n if (this.customSelectAllChecked) {\r\n return null;\r\n } else {\r\n return this.multiple ? [...this.selected] : this.selected;\r\n }\r\n }\r\n\r\n private valueChanged(newValue: string | string[] | null, oldValue: string | string[] | null | undefined): boolean {\r\n return oldValue === undefined ||\r\n (!this.multiple && newValue !== oldValue) ||\r\n (this.multiple && !this.arraysHaveTheSameElements((newValue as string[] | null), (oldValue as string[] | null)));\r\n }\r\n\r\n private arraysHaveTheSameElements(array1: string[] | null, array2: string[] | null): boolean {\r\n if (array1 === array2) { // if they are both null\r\n return true;\r\n } else if (array1?.length === array2?.length) {\r\n const sortedArray2 = [...array2].sort();\r\n return ![...array1].sort().some((array1Value, index) => array1Value !== sortedArray2[index]);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n}\r\n","<mat-form-field appearance=\"{{ appearance }}\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <mat-select\r\n panelClass=\"custom-select-pane\"\r\n #selectElem\r\n [formControl]=\"formControl\"\r\n [multiple]=\"multiple\"\r\n (openedChange)=\"$event ? onClickOpen() : onClickClose()\"\r\n >\r\n <div class=\"box-search\">\r\n <mat-checkbox\r\n *ngIf=\"multiple\"\r\n color=\"primary\"\r\n class=\"box-select-all\"\r\n matTooltip=\"Select all listed items\"\r\n [(ngModel)]=\"selectAllChecked\"\r\n (change)=\"toggleSelectAll($event)\"\r\n ></mat-checkbox>\r\n <input\r\n id=\"costimize-dropdown-input\"\r\n type='text'\r\n [ngClass]=\"{ 'pl-1': !multiple }\"\r\n [formControl]=\"searchInputFormControl\"\r\n [placeholder]=\"selectPlaceholder\"\r\n autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n />\r\n <div\r\n class=\"box-search-icon\"\r\n (click)=\"searchInputFormControl.setValue('')\"\r\n >\r\n <button mat-icon-button class=\"search-button\">\r\n <mat-icon class=\"mat-24\" aria-label=\"Search icon\">clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <mat-select-trigger class=\"option-container\">\r\n <span class=\"ellipsis-text\">{{ displayString }}</span>\r\n <mat-icon *ngIf=\"favourites && isSelectedFavourite\" class=\"input-icon icon-container fav-icon\">star_border</mat-icon>\r\n </mat-select-trigger>\r\n <div *ngIf=\"multiple && filterButtons.length > 0\" class=\"filter-buttons\">\r\n <mat-button-toggle-group multiple=\"true\" class=\"filter-buttons-group\">\r\n <mat-button-toggle class=\"filter-button\" *ngFor=\"let button of filterButtons;\"\r\n [value]=\"button.name\"\r\n (change)=\"changeSelectedValues($event, button.filterCallback)\">{{button.name}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n <cdk-virtual-scroll-viewport [itemSize]=\"24\" [style.height.px]=\"240\" class=\"cdk-viewport-format\">\r\n <mat-option\r\n *cdkVirtualFor=\"let option of filteredOptions; trackBy: trackByFn\"\r\n [disabled]=\"customSelectAllChecked\"\r\n [value]=\"option.value\"\r\n (onSelectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <div class=\"option-container\">\r\n <span>{{ option.display }}</span>\r\n <span class=\"icon-container\" *ngIf=\"favourites && option?.favourite\">\r\n <mat-icon class=\"fav-icon\">star_border</mat-icon>\r\n </span>\r\n </div>\r\n </mat-option>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-select>\r\n <mat-hint style=\"color:red\" *ngIf=\"showErrorMsg\">{{ errorMsg }}</mat-hint>\r\n</mat-form-field>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatSelectModule} from '@angular/material/select';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {SelectAutocompleteComponent} from './select-autocomplete.component';\r\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {ScrollingModule} from '@angular/cdk/scrolling';\r\nimport {MatListModule} from '@angular/material/list';\r\n\r\n@NgModule({\r\n imports: [\r\n FormsModule,\r\n CommonModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatSelectModule,\r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n ReactiveFormsModule,\r\n MatButtonToggleModule,\r\n MatTooltipModule,\r\n ScrollingModule,\r\n MatListModule,\r\n ],\r\n declarations: [SelectAutocompleteComponent],\r\n exports: [SelectAutocompleteComponent]\r\n})\r\nexport class SelectAutocompleteModule {\r\n}\r\n","export class DropdownKeyValue {\r\n value: string;\r\n display: string;\r\n favourite?: boolean;\r\n\r\n constructor(id: string, name: string, favourite: boolean = false) {\r\n this.value = id;\r\n this.display = name;\r\n this.favourite = favourite;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of select-autocomplete\r\n */\r\n\r\nexport * from './lib/select-autocomplete.service';\r\nexport * from './lib/select-autocomplete.component';\r\nexport * from './lib/select-autocomplete.module';\r\nexport * from './lib/DropdownKeyValue';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}