{"version":3,"file":"imng-ngxb-typeahead.mjs","sources":["../../../../libs/imng-ngxb-typeahead/src/lib/type-ahead.directive.ts","../../../../libs/imng-ngxb-typeahead/src/lib/ngxb-typeahead.module.ts","../../../../libs/imng-ngxb-typeahead/src/lib/type-ahead-facade.ts","../../../../libs/imng-ngxb-typeahead/src/lib/type-ahead-match.ts","../../../../libs/imng-ngxb-typeahead/src/lib/form-group-extensions.ts","../../../../libs/imng-ngxb-typeahead/src/lib/match-selected-event.ts","../../../../libs/imng-ngxb-typeahead/src/imng-ngxb-typeahead.ts"],"sourcesContent":["import {\n  Directive,\n  ChangeDetectorRef,\n  ElementRef,\n  Renderer2,\n  ViewContainerRef,\n  OnInit,\n  OnDestroy,\n  Input,\n  EventEmitter,\n  Output,\n  inject,\n} from '@angular/core';\nimport {\n  TypeaheadDirective,\n  TypeaheadConfig,\n  TypeaheadMatch,\n} from 'ngx-bootstrap/typeahead';\nimport { ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\nimport { ImngTypeAheadFacade } from './type-ahead-facade';\nimport { Subscribable, Subscriptions } from 'imng-ngrx-utils';\nimport { debounceTime, filter, switchMap, tap } from 'rxjs/operators';\nimport { NgControl } from '@angular/forms';\nimport { ImngTypeaheadMatch } from './type-ahead-match';\nimport { ImngMatchSelectedEvent } from './match-selected-event';\nimport { of } from 'rxjs';\n\n/*\n * ### Example markup\n * <input [imngTypeahead]=\"myTypeAheadFacade\" formControlName=\"myFormControl\" (typeaheadOnSelect)=\"typeaheadOnSelect($event)\" />\n *\n * ### Note:\n * imngTypeahead must be set to a class that implements the ITypeAheadFacade interface\n *\n * typeaheadOnSelect return type is TypeaheadMatch\n */\n@Directive({\n  selector: '[imngTypeahead]',\n  standalone: false,\n})\nexport class ImngTypeaheadDirective<T>\n  extends TypeaheadDirective\n  implements OnInit, OnDestroy, Subscribable\n{\n  private _typeAheadFacade?: ImngTypeAheadFacade<T>;\n  public readonly allSubscriptions = new Subscriptions();\n\n  constructor() {\n    const cis = inject(ComponentLoaderFactory);\n    const changeDetection = inject(ChangeDetectorRef);\n    const element = inject(ElementRef);\n    const ngControl = inject(NgControl);\n    const renderer = inject(Renderer2);\n    const viewContainerRef = inject(ViewContainerRef);\n\n    super(\n      cis,\n      {\n        isAnimated: true,\n        hideResultsOnBlur: true,\n        minLength: 1,\n      } as TypeaheadConfig,\n      changeDetection,\n      element,\n      ngControl,\n      renderer,\n      viewContainerRef,\n    );\n    this.typeaheadOnSelect = new EventEmitter<\n      TypeaheadMatch | ImngMatchSelectedEvent<T>\n    >(false);\n    this.typeaheadAsync = true;\n\n    //These are default values to avoid overtaxing the data endpoint\n    this.typeaheadMinLength = 1;\n    this.typeaheadWaitMs = 100;\n  }\n\n  @Input('imngTypeahead')\n  set facade(typeAheadFacade: ImngTypeAheadFacade<T>) {\n    this.typeahead = typeAheadFacade.matches$;\n    this._typeAheadFacade = typeAheadFacade;\n  }\n  public override activeDescendant?: string;\n\n  @Output()\n  public override typeaheadOnSelect: EventEmitter<\n    ImngMatchSelectedEvent<T> | TypeaheadMatch\n  >;\n\n  public override ngOnDestroy(): void {\n    super.ngOnDestroy();\n    this.allSubscriptions.unsubscribeAll();\n  }\n\n  protected override asyncActions(): void {\n    this.allSubscriptions.push(\n      this.keyUpEventEmitter\n        .pipe(\n          debounceTime(this.typeaheadWaitMs),\n          filter(() => !!this._typeAheadFacade),\n          tap((t) => this._typeAheadFacade?.loadMatches(t)),\n          switchMap(\n            () => (this._typeAheadFacade || { matches$: of() }).matches$,\n          ),\n        )\n        .subscribe((matches: ImngTypeaheadMatch<T>[]) => {\n          this.finalizeAsyncCall(matches);\n        }),\n    );\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ImngTypeaheadDirective } from './type-ahead.directive';\nimport { TypeaheadModule } from 'ngx-bootstrap/typeahead';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    TypeaheadModule.forRoot()],\n  declarations: [ImngTypeaheadDirective],\n  exports: [ImngTypeaheadDirective]\n})\nexport class ImngNgxbTypeaheadModule { }\n","import { Observable } from 'rxjs';\nimport { ImngTypeaheadMatch } from './type-ahead-match';\nimport { FilterDescriptor, CompositeFilterDescriptor } from '@progress/kendo-data-query';\n\nexport interface ImngTypeAheadFacade<T> {\n  matches$: Observable<ImngTypeaheadMatch<T>[]>;\n  loadMatches(filterCriteria: string): void;\n}\n\nexport function createTypeaheadFilters(fields: string[], filterCriteria: string): CompositeFilterDescriptor {\n  const filterSegments = filterCriteria.split(' ').filter(t => t !== '');\n  const filters: FilterDescriptor[] = [];\n  fields.forEach(field =>\n    filterSegments.forEach(segment => filters.push({ field, operator: 'contains', value: segment })),\n  );\n  return {\n    logic: 'or',\n    filters,\n  };\n}\n","import { TypeaheadMatch } from 'ngx-bootstrap/typeahead';\n\nexport class ImngTypeaheadMatch<T> extends TypeaheadMatch {\n  constructor(\n    public override readonly item: T,\n    public override readonly value: string,\n    protected override readonly header = false\n  ) {\n    super(item, value, header);\n  }\n}\n","import { FormControl, FormGroup } from '@angular/forms';\n\ndeclare module '@angular/forms' {\n  export interface FormGroup {\n    addTypeAheadControl(\n      controlName?: string,\n      initialValue?: string,\n    ): FormControl;\n  }\n}\nFormGroup.prototype.addTypeAheadControl = function (\n  controlName = 'typeAhead',\n  initialValue = '',\n): FormControl<string | null> {\n  return addTypeAheadControl(this, controlName, initialValue);\n};\n\nexport function addTypeAheadControl(\n  formGroup: FormGroup,\n  controlName = 'typeAhead',\n  initialValue = '',\n): FormControl<string | null> {\n  const formControl = new FormControl<string>(initialValue);\n  formGroup.addControl(controlName, formControl);\n  return formControl;\n}\n","import { TypeaheadMatch } from 'ngx-bootstrap/typeahead';\nimport { ImngTypeaheadMatch } from './type-ahead-match';\n\nexport class ImngMatchSelectedEvent<T> extends TypeaheadMatch {\n  constructor(\n    public override readonly item: ImngTypeaheadMatch<T>,\n    public override readonly value: string,\n    public override readonly header = false\n  ) {\n    super(item, value, header);\n    this.value = value || item.value;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}