UNPKG

@tapsellorg/angular-material-library

Version:

Angular library for Tapsell

1 lines 18.7 kB
{"version":3,"file":"tapsellorg-angular-material-library-src-lib-auto-complete.mjs","sources":["../../projects/pegah-library/src/lib/auto-complete/auto-complete.component.ts","../../projects/pegah-library/src/lib/auto-complete/auto-complete.component.html","../../projects/pegah-library/src/lib/auto-complete/auto-complete.module.ts","../../projects/pegah-library/src/lib/auto-complete/tapsellorg-angular-material-library-src-lib-auto-complete.ts"],"sourcesContent":["import { ENTER } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n Component,\n ContentChild,\n ElementRef,\n Input,\n input,\n model,\n OnChanges,\n OnInit,\n output,\n signal,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport {\n MatAutocompleteSelectedEvent,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport {\n AnyObject,\n ArrayUtils,\n ObjectUtils,\n withDestroy,\n} from '@tapsellorg/angular-material-library/src/lib/common';\nimport { takeUntil } from 'rxjs/operators';\nimport { PghAutoCompleteSelectionChange } from './model';\n\n@Component({\n selector: 'pgh-auto-complete',\n templateUrl: './auto-complete.component.html',\n styleUrls: ['./auto-complete.component.scss'],\n standalone: false,\n})\nexport class PghAutoCompleteComponent<T = any>\n extends withDestroy()\n implements OnInit, OnChanges, AfterViewInit\n{\n readonly SEPARATOR_KEYS_CODES: number[] = [ENTER];\n label = input<string>();\n placeholder = input('');\n maxCount = input<number>();\n onlyDistinctValues = input(true);\n hideOptions = input<boolean>(false);\n hint = input<string>('');\n isLoadingOptions = input<boolean>(false);\n allowCustomValues = input(false);\n allowChipInputAddOnBlur = input(false);\n allValues = input<T[]>([]);\n selectedValues = model<T[]>([]);\n selectedValuesChange = output<T[]>();\n selectionChange = output<PghAutoCompleteSelectionChange<T>>();\n selectedValuesControl = input<UntypedFormControl>();\n inputCtrl = input(new UntypedFormControl());\n\n filteredValues = signal<T[]>([]);\n @ViewChild('inputElm') inputElm?: ElementRef<HTMLInputElement>;\n @ViewChild('matAutocompleteTrigger') matAutocompleteTrigger?: MatAutocompleteTrigger;\n hasAutoComplete: boolean = false;\n\n valueProperty = input<string>();\n nameProperty = input<string>();\n @Input() valueGetter: (x: T) => string | T = (x: any) =>\n this.valueProperty() ? x[this.valueProperty()!] : x;\n @Input() nameGetter: (x: T) => string = (x: any) =>\n this.nameProperty() ? x[this.nameProperty()!] : x;\n @ContentChild('optionTemplate') templateRef?: TemplateRef<any>;\n\n constructor() {\n super();\n }\n\n private emit(changedEvent: Pick<PghAutoCompleteSelectionChange<T>, 'changedItems' | 'type'>) {\n this.selectedValuesChange.emit(this.selectedValues());\n this.selectionChange.emit({ ...changedEvent, selectedValues: this.selectedValues() });\n this.selectedValuesControl()?.setValue?.(this.selectedValues());\n }\n\n ngOnInit() {\n this.inputCtrl().valueChanges.subscribe((val: string) => {\n this._filter(val);\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.allValues) {\n this.hasAutoComplete = this.allValues()?.length > 0;\n this._filter();\n\n if (this.selectedValues().some(o => !this.findEligibleValue(o))) {\n setTimeout(() => {\n const previousSelectedValues = this.selectedValues().slice();\n this.selectedValues.set([]);\n this.emit({ changedItems: previousSelectedValues, type: 'remove' });\n });\n }\n }\n if (changes.selectedValuesControl && this.selectedValuesControl()) {\n this.addAlreadyExistedValues(this.selectedValuesControl()!.value);\n this.selectedValuesControl()!.valueChanges.subscribe((data: T[]) => {\n if (ArrayUtils.arraysAreSame(data, this.selectedValues())) return;\n this.addAlreadyExistedValues(data);\n });\n }\n }\n\n ngAfterViewInit() {\n this.handleClosePanel();\n }\n\n private handleClosePanel() {\n if (!this.matAutocompleteTrigger) return;\n\n this.matAutocompleteTrigger.panelClosingActions\n .pipe(takeUntil(this._destroyed$))\n .subscribe(data => {\n if (data?.isUserInput) {\n setTimeout(() => {\n this.matAutocompleteTrigger!.openPanel();\n });\n }\n });\n }\n\n private addAlreadyExistedValues(values: T[]) {\n if (!values?.length) return;\n this.selectedValues.set(values);\n }\n\n add(event: MatChipInputEvent): void {\n const { input, value } = event;\n if (!(value || '').trim()) return;\n\n this.pushToSelectedValues(value.trim());\n\n if (input) {\n input.value = '';\n }\n\n this.inputCtrl().setValue(null);\n }\n\n remove(val: T): void {\n if (!this.selectedValues().includes(val)) return;\n\n this.selectedValues.set(\n this.selectedValues().filter(o => this.valueGetter(o) !== this.valueGetter(val)),\n );\n this.emit({ changedItems: [val], type: 'remove' });\n this._filter();\n }\n\n private findEligibleValue(value: string | T): T | undefined {\n if (!value) return;\n if (this.allowCustomValues()) {\n if (this.onlyDistinctValues() && this.selectedValues().includes(value as T)) {\n return;\n }\n return value as T;\n }\n const possibleValues = this.allValues();\n return possibleValues.find(o => {\n if (typeof value === 'string') {\n return this.nameGetter(o) === value;\n }\n const objValue = this.valueGetter(o);\n const selectedVale = this.valueGetter(value);\n\n return (\n objValue === selectedVale ||\n ObjectUtils.isEqualObject(objValue as AnyObject, selectedVale as AnyObject)\n );\n });\n }\n\n private pushToSelectedValues(name: string | T) {\n if (this.selectedValues().length === this.maxCount()) return;\n const value = this.findEligibleValue(name);\n if (!value) return;\n\n this.selectedValues().push(value);\n this._filter();\n this.emit({ changedItems: [value], type: 'add' });\n }\n\n onSelectOption(event: MatAutocompleteSelectedEvent): void {\n this.pushToSelectedValues(event.option.value);\n if (this.inputElm) {\n this.inputElm.nativeElement.value = '';\n }\n this.inputCtrl().setValue(null);\n }\n\n private _filter(value?: string | null) {\n const allValues = this.calculatePossibleValues();\n this.filteredValues.set(\n value ? allValues.filter((val: any) => this.nameGetter(val).includes(value)) : allValues,\n );\n }\n\n private calculatePossibleValues() {\n return this.onlyDistinctValues()\n ? this.allValues()?.filter(\n val => !this.selectedValues().find(x => this.valueGetter(x) === this.valueGetter(val)),\n )\n : this.allValues()?.slice();\n }\n}\n","<mat-form-field class=\"w-100\">\n <mat-label>{{ label() }}</mat-label>\n <mat-chip-grid #chipList>\n <!-- TODO: v17 removed from this element [selectable]=\"false\" -->\n @for (item of selectedValues(); track item) {\n <mat-chip-row color=\"primary\" [removable]=\"true\" (removed)=\"remove(item)\">\n <mat-icon class=\"ms-0 me-2\" matChipRemove svgIcon=\"clear\"></mat-icon>\n <span class=\"pgh-chips-text\">{{ nameGetter(item) }}</span>\n </mat-chip-row>\n }\n <input\n [placeholder]=\"placeholder()\"\n #inputElm\n #matAutocompleteTrigger=\"matAutocompleteTrigger\"\n [formControl]=\"inputCtrl()\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"SEPARATOR_KEYS_CODES\"\n [matChipInputAddOnBlur]=\"allowChipInputAddOnBlur()\"\n (matChipInputTokenEnd)=\"add($event)\"\n />\n </mat-chip-grid>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelectOption($event)\">\n @if (!hideOptions()) { @if (isLoadingOptions()) {\n <mat-option>در حال جست‌و‌جو...</mat-option>\n } @for (item of filteredValues(); track item) {\n <mat-option [value]=\"item\">\n @if (templateRef) {\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-template>\n } @else {\n <span>{{ nameGetter(item) }}</span>\n }\n </mat-option>\n } }\n </mat-autocomplete>\n <mat-hint>{{ hint() }}</mat-hint>\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PghAutoCompleteComponent } from './auto-complete.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatAutocompleteModule,\n MatChipsModule,\n MatIconModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n FormsModule,\n ],\n exports: [PghAutoCompleteComponent],\n declarations: [PghAutoCompleteComponent],\n})\nexport class PghAutoCompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}