Advertisement
coffeecode12

Untitled

May 1st, 2023
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. import { Component, OnInit, ChangeDetectionStrategy, Output, EventEmitter, Input, HostListener, ElementRef, forwardRef, OnChanges, SimpleChanges } from '@angular/core';
  2. import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
  3.  
  4. @Component({
  5. selector: 'shared-autocomplete',
  6. templateUrl: './autocomplete.component.html',
  7. styleUrls: ['./autocomplete.component.scss'],
  8. providers: [{
  9. provide: NG_VALUE_ACCESSOR,
  10. multi: true,
  11. useExisting: forwardRef(() => AutocompleteComponent)
  12. }],
  13. // changeDetection: ChangeDetectionStrategy.OnPush
  14. })
  15. export class AutocompleteComponent implements OnChanges, ControlValueAccessor {
  16. @Output() blur: EventEmitter<any> = new EventEmitter();
  17. @Output() change: EventEmitter<any> = new EventEmitter();
  18. @Output() onKeyup: EventEmitter<any> = new EventEmitter();
  19. @Output() onSelect: EventEmitter<any> = new EventEmitter();
  20. @Output() onClickClose: EventEmitter<any> = new EventEmitter();
  21. @Input() placeholder: string = '';
  22. @Input() img: boolean = true;
  23. @Input() iconDelete: boolean = true;
  24. @Input() dataSource: any[] = [];
  25. @Input() options;
  26. showList: boolean = false;
  27. regionList;
  28. onChange: (_: any) => void;
  29. onTouched: () => void;
  30.  
  31. form: FormGroup = this._formBuilder.group({
  32. searchAutoComplete: ['', [Validators.required]]
  33. })
  34.  
  35. get value() { return this.form.get('searchAutoComplete').value }
  36. set value(e: string) { this.form.get('searchAutoComplete').setValue(e) }
  37.  
  38.  
  39. selectedList: any;
  40. @HostListener('document:click', ['$event'])
  41. clickout(event) {
  42. if (!this.elemetRef.nativeElement.contains(event.target)) {
  43. this.showList = false;
  44. }
  45. }
  46. constructor(
  47. public elemetRef: ElementRef,
  48. private _formBuilder: FormBuilder,
  49. ) { }
  50.  
  51. ngOnChanges(changes: SimpleChanges): void { }
  52.  
  53. writeValue(value): void {
  54. this.selectedList = value;
  55. }
  56.  
  57. registerOnChange(fn: any): void {
  58. this.onChange = fn;
  59. }
  60.  
  61. registerOnTouched(fn: any): void {
  62. this.onTouched = fn;
  63. }
  64.  
  65. blurHandler(e: any) {
  66. this.blur.emit(e.target.value)
  67. }
  68.  
  69. selectList(e) {
  70. this.selectedList = e.name;
  71. this.onSelect.emit(e);
  72. this.showList = false;
  73. }
  74.  
  75. keyupHandler(event) {
  76. this.onKeyup.emit(event.target.value);
  77. }
  78.  
  79. showListDropdown() {
  80. this.showList = true;
  81. }
  82.  
  83.  
  84. filter(e) {
  85. let query = e.target.value.toLowerCase();
  86. let filtered = this.options.filter(
  87. item => item.name
  88. .toLowerCase()
  89. .indexOf(query) >= 0
  90. );
  91.  
  92. this.dataSource = filtered;
  93. }
  94.  
  95. deleteValue(e) {
  96. console.log(e);
  97. this.value = '';
  98. this.onClickClose.emit(e);
  99. this.onChange(this.value)
  100. }
  101.  
  102.  
  103.  
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement