{"version":3,"file":"widgets-auto-complete.mjs","sources":["../../../../packages/form/widgets/autocomplete/widget.ts","../../../../packages/form/widgets/autocomplete/module.ts","../../../../packages/form/widgets/autocomplete/index.ts","../../../../packages/form/widgets/autocomplete/widgets-auto-complete.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { Component, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { Observable, of, debounceTime, map, mergeMap, startWith, takeUntil } from 'rxjs';\n\nimport { ControlUIWidget, DelonFormModule, SFSchemaEnum, SFValue, getCopyEnum, getEnum, toBool } from '@delon/form';\nimport { NzAutocompleteModule, NzAutocompleteOptionComponent } from 'ng-zorro-antd/auto-complete';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { NzInputModule } from 'ng-zorro-antd/input';\n\nimport type { SFAutoCompleteWidgetSchema } from './schema';\n\n@Component({\n  selector: 'sf-autocomplete',\n  template: `<sf-item-wrap\n    [id]=\"id\"\n    [schema]=\"schema\"\n    [ui]=\"ui\"\n    [showError]=\"showError\"\n    [error]=\"error\"\n    [showTitle]=\"schema.title\"\n  >\n    <input\n      nz-input\n      [nzAutocomplete]=\"auto\"\n      [attr.id]=\"id\"\n      [disabled]=\"disabled\"\n      [attr.disabled]=\"disabled\"\n      [nzSize]=\"ui.size!\"\n      [ngModel]=\"typing\"\n      (ngModelChange)=\"_setValue($event)\"\n      [attr.maxLength]=\"schema.maxLength ?? null\"\n      [attr.placeholder]=\"ui.placeholder\"\n      autocomplete=\"off\"\n    />\n    <nz-autocomplete\n      #auto\n      [nzBackfill]=\"i.backfill\"\n      [nzDefaultActiveFirstOption]=\"i.defaultActiveFirstOption\"\n      [nzWidth]=\"i.width\"\n      [nzOverlayStyle]=\"ui.overlayStyle ?? {}\"\n      [nzOverlayClassName]=\"ui.overlayClassName ?? ''\"\n      [compareWith]=\"i.compareWith\"\n      (selectionChange)=\"updateValue($event)\"\n    >\n      @for (i of list | async; track i) {\n        <nz-auto-option [nzValue]=\"i\" [nzLabel]=\"i.label\"> {{ i.label }} </nz-auto-option>\n      }\n    </nz-autocomplete>\n  </sf-item-wrap>`,\n  encapsulation: ViewEncapsulation.None,\n  imports: [AsyncPipe, FormsModule, DelonFormModule, NzInputModule, NzAutocompleteModule]\n})\nexport class AutoCompleteWidget extends ControlUIWidget<SFAutoCompleteWidgetSchema> {\n  static readonly KEY = 'autocomplete';\n\n  i: NzSafeAny = {};\n  list!: Observable<SFSchemaEnum[]>;\n  typing: string = '';\n  @ViewChild(NgModel, { static: false }) private ngModel!: NgModel;\n  private filterOption!: (input: string, option: SFSchemaEnum) => boolean;\n  private isAsync = false;\n  private fixData: SFSchemaEnum[] = [];\n\n  updateValue(item: NzAutocompleteOptionComponent): void {\n    this.typing = item.nzLabel!;\n    const data: SFSchemaEnum = item.nzValue;\n    this.setValue(data.value);\n    if (this.ui.change) {\n      this.ui.change(item, data);\n    }\n  }\n\n  _setValue(item: SFSchemaEnum): void {\n    let val = item.toString();\n    if (typeof item !== 'string') {\n      val = item.value;\n    }\n    this.setValue(val);\n  }\n\n  afterViewInit(): void {\n    const { backfill, defaultActiveFirstOption, nzWidth, filterOption, asyncData, compareWith } = this.ui;\n    this.i = {\n      backfill: toBool(backfill, false),\n      defaultActiveFirstOption: toBool(defaultActiveFirstOption, true),\n      width: nzWidth ?? undefined,\n      compareWith: compareWith ?? ((o1, o2) => o1 === o2)\n    };\n\n    let filterOptionValue = filterOption == null ? true : filterOption;\n    if (typeof filterOptionValue === 'boolean') {\n      filterOptionValue = (input: string, option: SFSchemaEnum) =>\n        option.label.toLowerCase().indexOf((input ?? '').toLowerCase()) > -1;\n    }\n    this.filterOption = filterOptionValue;\n\n    this.isAsync = !!asyncData;\n    const orgTime = +(this.ui.debounceTime ?? 0);\n    const time = Math.max(0, this.isAsync ? Math.max(50, orgTime) : orgTime);\n\n    this.list = this.ngModel.valueChanges!.pipe(\n      debounceTime(time),\n      startWith(''),\n      mergeMap(input => (this.isAsync ? asyncData!(input) : this.filterData(input))),\n      map(res => getEnum(res, null, this.schema.readOnly!))\n    );\n  }\n\n  reset(value: SFValue): void {\n    if (this.isAsync) {\n      this.ui.asyncData!(value)\n        .pipe(\n          takeUntil(this.sfItemComp!.destroy$),\n          map(res => getEnum(res, null, this.schema.readOnly!))\n        )\n        .subscribe(data => {\n          this.typing = data.find(w => w.value === this.value)?.label ?? '';\n        });\n      return;\n    }\n\n    this.typing = value;\n    switch (this.ui.type) {\n      case 'email':\n        this.fixData = getCopyEnum(\n          this.schema.enum! ?? this.formProperty.options.uiEmailSuffixes,\n          null,\n          this.schema.readOnly!\n        );\n        break;\n      default:\n        this.fixData = getCopyEnum(this.schema.enum!, value, this.schema.readOnly!);\n        break;\n    }\n  }\n\n  private filterData(input: string): Observable<SFSchemaEnum[]> | Observable<string[]> {\n    switch (this.ui.type) {\n      case 'email':\n        return this.addEmailSuffix(input);\n      default:\n        return of(this.fixData.filter(option => this.filterOption(input, option)));\n    }\n  }\n\n  private addEmailSuffix(value: string): Observable<string[]> {\n    const res =\n      !value || typeof value !== 'string' || value?.indexOf('@') !== -1\n        ? []\n        : this.fixData.map(domain => `${value}@${domain.label}`);\n    return of(res);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { DelonFormModule, WidgetRegistry } from '@delon/form';\nimport { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete';\nimport { NzInputModule } from 'ng-zorro-antd/input';\n\nimport { AutoCompleteWidget } from './widget';\n\n@NgModule({\n  imports: [FormsModule, DelonFormModule, CommonModule, NzInputModule, NzAutocompleteModule, AutoCompleteWidget]\n})\nexport class AutoCompleteWidgetModule {\n  constructor(widgetRegistry: WidgetRegistry) {\n    widgetRegistry.register(AutoCompleteWidget.KEY, AutoCompleteWidget);\n  }\n}\n","import type { SFWidgetProvideConfig } from '@delon/form';\n\nimport { AutoCompleteWidget } from './widget';\n\nexport * from './widget';\nexport * from './schema';\nexport * from './module';\n\nexport function withAutoCompleteWidget(): SFWidgetProvideConfig {\n  return { KEY: AutoCompleteWidget.KEY, type: AutoCompleteWidget };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1"],"mappings":"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"}