{"version":3,"file":"mat-select-search-advanced.mjs","sources":["../../../projects/mat-select-search-advanced/src/lib/mat-select-search-advanced.service.ts","../../../projects/mat-select-search-advanced/src/lib/mat-select-search-advanced.component.ts","../../../projects/mat-select-search-advanced/src/lib/mat-select-advanced.component.html","../../../projects/mat-select-search-advanced/src/lib/mat-select-search-advanced.module.ts","../../../projects/mat-select-search-advanced/src/public-api.ts","../../../projects/mat-select-search-advanced/src/mat-select-search-advanced.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class MatSelectSearchAdvancedService {\r\n\r\n  constructor() { }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  forwardRef,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n  UntypedFormBuilder,\r\n  UntypedFormGroup,\r\n  ControlValueAccessor,\r\n  NG_VALUE_ACCESSOR,\r\n  Validators,\r\n} from '@angular/forms';\r\nimport {\r\n  A,\r\n  END,\r\n  ESCAPE,\r\n  HOME,\r\n  NINE,\r\n  SPACE,\r\n  Z,\r\n  ZERO,\r\n} from '@angular/cdk/keycodes';\r\nimport { ReplaySubject, Subject } from 'rxjs';\r\nimport { take, takeUntil } from 'rxjs/operators';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\n@Component({\r\n  selector: 'mat-select-search-advanced',\r\n  templateUrl: './mat-select-advanced.component.html',\r\n  styleUrls: ['./mat-select-advanced.component.scss'],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => MatSelectSearchAdvancedComponent),\r\n      multi: true,\r\n    },\r\n  ],\r\n})\r\nexport class MatSelectSearchAdvancedComponent<TObject extends object>\r\n  implements OnInit, AfterViewInit, OnDestroy, OnChanges, ControlValueAccessor\r\n{\r\n  // Start define variable for mat-select-search***************************************************************\r\n  /** list of objects */\r\n\r\n  @Input()\r\n  objects!: TObject[];\r\n  @Input()\r\n  searchProperties: (keyof TObject)[] = [];\r\n  @Input()\r\n  indexKey!: keyof TObject;\r\n  @Input()\r\n  viewKey!: (keyof TObject)[];\r\n  @Input() tooltipMessage = 'Select all / Deselect all';\r\n  @Input() placeholderSearchLabel = 'Search';\r\n  @Input() noEntriesFoundLabel = 'No results found';\r\n  @Input() label = '';\r\n  @Input() selectAllViewLabel = 'All';\r\n  @Input() showToggleAllCheckbox = true;\r\n  @Input()\r\n  multiple!: boolean;\r\n  disabled!: boolean;\r\n  @Input() messageErrorRequired = `Can't be null`;\r\n  @Input() appearance: MatFormFieldAppearance = 'fill';\r\n  @Input() tooltipPosition: 'below' | 'above' | 'left' | 'right' = 'above';\r\n  @Input() required = true;\r\n  /** Form Group */\r\n  fg!: UntypedFormGroup;\r\n  /** list of objects filtered by search keyword */\r\n  public filteredObjectsMulti: ReplaySubject<TObject[]> = new ReplaySubject<\r\n    TObject[]\r\n  >(1);\r\n  @ViewChild('multiSelect')\r\n  multiSelect!: MatSelect;\r\n  @Output() optionSelected$ = new EventEmitter<any>();\r\n  /** Subject that emits when the component has been destroyed. */\r\n  protected _onDestroy = new Subject<void>();\r\n  isCheckAll = false;\r\n  // End define variable for mat-select-search*****************************************************************\r\n  // define customForm\r\n  objectSelected: any;\r\n  onChange!: (objectSelected: any) => void;\r\n  onTouched!: () => void;\r\n  // cva\r\n  writeValue(obj: any): void {\r\n    if (obj !== undefined) {\r\n      this.objectSelected = obj;\r\n    }\r\n    this.fg?.controls?.selectCtrl?.patchValue(this.objectSelected);\r\n  }\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n    if (this.disabled) {\r\n      this.fg?.controls?.selectCtrl?.disable();\r\n    } else {\r\n      this.fg?.controls?.selectCtrl?.enable();\r\n    }\r\n  }\r\n  //end cva\r\n  constructor(\r\n    private fb: UntypedFormBuilder,\r\n    private cdref: ChangeDetectorRef\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.fg = this.fb.group({\r\n      selectCtrl: [],\r\n      inputSearchCtrl: [''],\r\n    });\r\n    this.checkSelectCtrl();\r\n    this.checkSelectAll(this.fg.controls.selectCtrl.value, this.objects);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if ('objects' in changes) {\r\n      const o = changes['objects'].currentValue;\r\n      this.objects = o;\r\n      this.filteredObjectsMulti.next(this.objects.slice());\r\n    }\r\n    if ('required' in changes) {\r\n      const required = changes['required'].currentValue;\r\n      if (required) {\r\n        this.fg?.controls?.selectCtrl?.setValidators(Validators.required);\r\n      } else {\r\n        this.fg?.controls?.selectCtrl?.removeValidators(Validators.required);\r\n      }\r\n    }\r\n  }\r\n\r\n  // Select with search and select all ****************************************************************************\r\n\r\n  ngAfterViewInit(): void {\r\n    this.cdref.detectChanges();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._onDestroy.next();\r\n    this._onDestroy.complete();\r\n  }\r\n\r\n  toggleSelectAll(event: any): void {\r\n    this.isCheckAll = event.checked;\r\n    this.filteredObjectsMulti\r\n      .pipe(take(1), takeUntil(this._onDestroy))\r\n      .subscribe((val) => {\r\n        let listObjs = val.map((obj) => obj[this.indexKey]);\r\n        if (event.checked) {\r\n          this.objectSelected = this.objectSelected.concat(\r\n            listObjs.filter((x: any) => !this.objectSelected.includes(x))\r\n          );\r\n          this.updateData(this.objectSelected);\r\n        } else {\r\n          if (this.fg.value.inputSearchCtrl === '') {\r\n            this.objectSelected = [];\r\n            this.updateData(this.objectSelected);\r\n          } else {\r\n            this.objectSelected = this.objectSelected\r\n              .filter((x: any) => !listObjs.includes(x))\r\n              .concat(listObjs.filter((x) => !this.objectSelected.includes(x)));\r\n            this.updateData(this.objectSelected);\r\n          }\r\n        }\r\n      });\r\n  }\r\n\r\n  filterObjectsMulti(): void {\r\n    // get the search keyword\r\n    let search = this.fg.controls.inputSearchCtrl.value;\r\n    if (!search) {\r\n      this.filteredObjectsMulti.next(this.objects.slice());\r\n    } else {\r\n      search = search.toLowerCase();\r\n      // filter the objects with code\r\n    }\r\n    this.filteredObjectsMulti.next(\r\n      this.objects.filter((object) => {\r\n        let isTrue = false;\r\n        this.searchProperties.forEach((properties) => {\r\n          if (\r\n            Boolean(object[properties]) &&\r\n            String(object[properties]).toLowerCase().indexOf(search) > -1\r\n          ) {\r\n            isTrue = true;\r\n          }\r\n        });\r\n        return isTrue;\r\n      })\r\n    );\r\n  }\r\n\r\n  clearAllSelected() {\r\n    this.isCheckAll = false;\r\n    this.fg?.controls?.selectCtrl?.patchValue([]);\r\n  }\r\n  updateData(data: any): void {\r\n    this.writeValue(data);\r\n    this.onChange(data);\r\n    this.onTouched();\r\n    this.fg.controls.selectCtrl.patchValue(data);\r\n    this.checkSelectAll(data, this.objects);\r\n  }\r\n  checkSelectCtrl(): void {\r\n    if (this.required) {\r\n      this.fg?.controls?.selectCtrl?.setValidators(Validators.required);\r\n    } else {\r\n      this.fg?.controls?.selectCtrl?.removeValidators(Validators.required);\r\n    }\r\n  }\r\n  onOpened(): void {\r\n    this.resetInputSearch();\r\n    this.checkSelectAll(this.fg?.controls?.selectCtrl.value, this.objects);\r\n  }\r\n  onClosed(): void {\r\n    this.resetInputSearch();\r\n    this.checkSelectAll(this.fg?.controls?.selectCtrl.value, this.objects);\r\n  }\r\n  resetInputSearch(): void {\r\n    this.fg.controls?.inputSearchCtrl?.patchValue('');\r\n    this.filteredObjectsMulti.next(this.objects.slice());\r\n  }\r\n  makePreviewTrigger(id: any): any {\r\n    // for show Selected value text\r\n    if (this.multiple) {\r\n      return this.objects\r\n        .filter((obj) => id?.includes(obj[this.indexKey]))\r\n        .map((val) => val[this.viewKey[0]]);\r\n    } else {\r\n      return this.objects[id];\r\n    }\r\n  }\r\n\r\n  checkSelectAll(selectedArray: any, initalArray: any): void {\r\n    if (selectedArray && initalArray) {\r\n      if (selectedArray?.length !== initalArray?.length) {\r\n        this.isCheckAll = false;\r\n      } else {\r\n        this.isCheckAll = true;\r\n      }\r\n    }\r\n  }\r\n\r\n  selectOption(data: any) {\r\n    if (this.multiple) {\r\n      if (data._selected === true) {\r\n        this.objectSelected.push(data.value);\r\n        this.updateData(this.objectSelected);\r\n      } else {\r\n        this.objectSelected.splice(\r\n          this.objectSelected.findIndex((x: any) => x === data.value),\r\n          1\r\n        );\r\n        this.updateData(this.objectSelected);\r\n      }\r\n      this.optionSelected$.emit({ value: data.value, status: data._selected });\r\n    } else {\r\n      this.optionSelected$.emit({ value: data.value });\r\n      this.updateData(data.value);\r\n    }\r\n  }\r\n\r\n  initSelect(): void {\r\n    // listen for search field value changes\r\n    this.fg.controls?.inputSearchCtrl?.valueChanges\r\n      .pipe(takeUntil(this._onDestroy))\r\n      .subscribe((value) => {\r\n        this.filterObjectsMulti();\r\n      });\r\n    // load the initial object list\r\n    this.filteredObjectsMulti.next(this.objects.slice());\r\n  }\r\n  // End Select with search and select all ****************************************************************************\r\n\r\n  catchErrorMessage(controlName?: any): string {\r\n    const errors = this.fg?.get(controlName)?.errors;\r\n    if (errors?.required) {\r\n      return this.messageErrorRequired;\r\n    }\r\n    return '';\r\n  }\r\n  _handleKeydown(event: KeyboardEvent) {\r\n    // Prevent propagation for all alphanumeric characters in order to avoid selection issues\r\n    if (\r\n      (event.key && event.key.length === 1) ||\r\n      (event.keyCode >= A && event.keyCode <= Z) ||\r\n      (event.keyCode >= ZERO && event.keyCode <= NINE) ||\r\n      event.keyCode === SPACE ||\r\n      event.keyCode === HOME ||\r\n      event.keyCode === END\r\n    ) {\r\n      event.stopPropagation();\r\n    }\r\n    // Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field\r\n    if (event.keyCode === ESCAPE) {\r\n      event.stopPropagation();\r\n    }\r\n  }\r\n}\r\n","<div [formGroup]=\"fg\">\n    <mat-form-field [appearance]=\"appearance\">\n        <mat-label> {{ label }} </mat-label>\n        <mat-select formControlName=\"selectCtrl\" [multiple]=\"multiple\" #multiSelect (opened)=\"onOpened()\"\n            (closed)=\"onClosed()\">\n            <!-- search -->\n            <div class=\"mat-search-container flex-row-center-center\">\n                <mat-checkbox\n                    *ngIf=\"(multiple ? showToggleAllCheckbox : false) && !fg?.controls?.inputSearchCtrl?.value\"\n                    style=\"margin-left: 6px;\" [checked]=\"isCheckAll\" (change)=\"toggleSelectAll($event)\"\n                    [matTooltip]=\"tooltipMessage\" [matTooltipPosition]=\"tooltipPosition\" color=\"primary\"></mat-checkbox>\n                <input formControlName=\"inputSearchCtrl\" style=\"margin-left: 10px; margin-top: 2px;\" matInput\n                    [placeholder]=\"placeholderSearchLabel\" (keydown)=\"_handleKeydown($event)\"\n                    (keyup)=\"filterObjectsMulti()\" />\n            </div>\n            <!--end search -->\n            <div style=\"height: 30px;\" *ngIf=\"(filteredObjectsMulti | async)?.length === 0\">\n                <div style=\"margin-left: 40px; margin-top: 10px;\">\n                    {{ noEntriesFoundLabel }}\n                </div>\n            </div>\n            <mat-option *ngFor=\"let obj of filteredObjectsMulti | async\" [value]=\"obj[indexKey]\" #matOption\n                (click)=\"selectOption(matOption)\">\n                <span *ngFor=\"let key of viewKey; let i = index\">\n                    {{ obj[key] }}\n                    <span *ngIf=\"i >= 0 && i !== viewKey.length - 1\"> - </span>\n                </span>\n                <mat-divider></mat-divider>\n            </mat-option>\n            <div *ngIf=\"!filteredObjectsMulti\">{{ noEntriesFoundLabel }}</div>\n            <mat-select-trigger *ngIf=\"multiple === true\">\n                {{\n                isCheckAll\n                ? selectAllViewLabel\n                : makePreviewTrigger(fg.controls.selectCtrl.value)\n                }}\n            </mat-select-trigger>\n        </mat-select>\n        <mat-error>{{ catchErrorMessage('selectCtrl') }} </mat-error>\n    </mat-form-field>\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatSelectSearchAdvancedComponent } from './mat-select-search-advanced.component';\r\nimport {MatDividerModule} from '@angular/material/divider';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatInputModule } from '@angular/material/input';\r\n@NgModule({\r\n  declarations: [\r\n    MatSelectSearchAdvancedComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    MatFormFieldModule,\r\n    MatSelectModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    MatDividerModule,\r\n    MatCheckboxModule,\r\n    MatTooltipModule,\r\n    MatInputModule,\r\n  ],\r\n  exports: [\r\n    MatSelectSearchAdvancedComponent\r\n  ]\r\n})\r\nexport class MatSelectSearchAdvancedModule { }\r\n","/*\r\n * Public API Surface of mat-select-search-advanced\r\n */\r\n\r\nexport * from './lib/mat-select-search-advanced.service';\r\nexport * from './lib/mat-select-search-advanced.component';\r\nexport * from './lib/mat-select-search-advanced.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}