ng-devui
Version:
DevUI components based on Angular
1 lines • 58.9 kB
Source Map (JSON)
{"version":3,"file":"ng-devui-auto-complete.mjs","sources":["../../devui/auto-complete/auto-complete-config.ts","../../devui/auto-complete/auto-complete-popup.component.ts","../../devui/auto-complete/auto-complete-popup.component.html","../../devui/auto-complete/auto-complete.directive.ts","../../devui/auto-complete/auto-complete.module.ts","../../devui/auto-complete/ng-devui-auto-complete.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AutoCompleteConfig {\n autoComplete = {\n delay: 300,\n minLength: 1,\n itemTemplate: null,\n noResultItemTemplate: null,\n formatter: (item) => (item ? item.label || item.toString() : ''),\n valueParser: (item) => (item ? item.label || item.toString() : ''),\n };\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedOverlayPositionChange,\n ConnectedPosition,\n ScrollStrategy,\n VerticalConnectionPos\n} from '@angular/cdk/overlay';\nimport { Component, ElementRef, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { fadeInOut } from 'ng-devui/utils';\nimport { AutoCompleteConfig } from './auto-complete-config';\n\n@Component({\n selector: 'd-auto-complete-popup',\n templateUrl: './auto-complete-popup.component.html',\n styleUrls: ['auto-complete-popup.component.scss'],\n animations: [fadeInOut],\n preserveWhitespaces: false,\n})\nexport class AutoCompletePopupComponent implements ControlValueAccessor {\n @Input() width: number;\n @Input() cssClass: string;\n @Input() maxHeight = 300;\n @Input() disabled = false;\n @Input() disabledKey: string;\n @Input() source: any[];\n @Input() position: any;\n @Input() isOpen: boolean;\n @Input() term: string;\n @Input() popTipsText: string;\n /**\n * @deprecated\n */\n @Input() overview: string;\n @Input() itemTemplate: TemplateRef<any>;\n @Input() noResultItemTemplate: TemplateRef<any>;\n @Input() customViewTemplate: TemplateRef<any>;\n @Input() customViewDirection: 'bottom' | 'right' | 'left' | 'top' = 'bottom';\n @Input() searchingTemplate: TemplateRef<any>;\n @Input() isSearching = false;\n @Input() formatter: (item: any) => string;\n @Input() dropdown: boolean;\n @Input() selectWidth: any;\n @Input() enableLazyLoad: boolean;\n @Input() appendToBody = false;\n @Input() cdkOverlayOffsetY = 0;\n @Input() origin: CdkOverlayOrigin | undefined;\n @Input() showAnimation = true;\n @Output() hoverItem: EventEmitter<any> = new EventEmitter();\n @ViewChild('selectMenuElement') selectMenuElement: ElementRef;\n @ViewChild('dropdownUl') dropdownUl: ElementRef;\n @ViewChild(CdkConnectedOverlay) connectedOverlay: CdkConnectedOverlay;\n activeIndex = 0;\n hoverIndex = 0;\n labelMinHeight = 20; // position.top小于20px时候,表示光标在第一行\n showLoading = false;\n overlayPositions: Array<ConnectedPosition>;\n popPosition: VerticalConnectionPos = 'bottom';\n popDirection: 'top' | 'bottom';\n scrollStrategy: ScrollStrategy;\n\n private value: any;\n private onChange = (_: any) => null;\n private onTouched = () => null;\n\n constructor(private autoCompleteConfig: AutoCompleteConfig, public elementRef: ElementRef) {\n this.formatter = this.autoCompleteConfig.autoComplete.formatter;\n }\n\n writeValue(obj): void {\n this.value = obj;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n registerOnChange(fn): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn): void {\n this.onTouched = fn;\n }\n\n onSelect(event, item) {\n if (this.disabledKey && item && item[this.disabledKey]) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (this.overview === 'single') {\n // 单选场景和单行场景不需要冒泡\n event.preventDefault();\n event.stopPropagation();\n }\n\n this.value = item;\n this.onTouched();\n this.onChange({ type: 'select', value: this.value });\n }\n\n selectCurrentItem(event) {\n this.activeIndex = this.hoverIndex;\n this.onSelect(event, this.source[this.hoverIndex]);\n }\n\n onActiveIndexChange(index) {\n this.activeIndex = index;\n }\n\n reset() {\n this.activeIndex = 0;\n this.hoverIndex = 0;\n }\n\n scrollToActive(index?): void {\n const that = this;\n setTimeout(() => {\n const scrollIndex = index === undefined ? this.activeIndex : index;\n const selectIndex = scrollIndex;\n const scrollPane: any = that.dropdownUl.nativeElement.children[selectIndex];\n if (scrollPane.scrollIntoViewIfNeeded) {\n scrollPane.scrollIntoViewIfNeeded(false);\n } else {\n const containerInfo = that.dropdownUl.nativeElement.getBoundingClientRect();\n const elementInfo = scrollPane.getBoundingClientRect();\n if (elementInfo.bottom > containerInfo.bottom || elementInfo.top < containerInfo.top) {\n scrollPane.scrollIntoView(false);\n }\n }\n });\n }\n\n next() {\n if (this.isOpen && this.source && this.source.length) {\n if (this.hoverIndex === this.source.length - 1) {\n this.hoverIndex = 0;\n this.scrollToActive(this.hoverIndex);\n return;\n }\n this.hoverIndex = this.hoverIndex + 1;\n this.scrollToActive(this.hoverIndex);\n }\n }\n\n prev() {\n if (this.isOpen && this.source && this.source.length) {\n if (this.hoverIndex === 0) {\n this.hoverIndex = this.source.length - 1;\n this.scrollToActive(this.hoverIndex);\n return;\n }\n this.hoverIndex = this.hoverIndex - 1;\n this.scrollToActive(this.hoverIndex);\n }\n }\n\n trackByFn(index, item) {\n return index;\n }\n\n animationEnd($event) {\n if (!this.isOpen && this.selectMenuElement) {\n const targetElement = this.selectMenuElement.nativeElement;\n setTimeout(() => {\n targetElement.style.display = 'none';\n });\n }\n }\n\n loadMoreEvent($event) {\n this.showLoading = true;\n this.onChange({ type: 'loadMore', value: this });\n }\n\n loadFinish($event) {\n this.showLoading = false;\n }\n\n onPositionChange(position: ConnectedOverlayPositionChange) {\n this.popPosition = position.connectionPair.originY;\n }\n\n onMouseOver(event: MouseEvent, item: any) {\n this.hoverItem.emit(item);\n }\n\n hidePopup() {}\n}\n","<ng-container *ngIf=\"appendToBody\">\n <ng-template\n cdk-connected-overlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayWidth]=\"width\"\n [cdkConnectedOverlayOpen]=\"isOpen && !disabled\"\n [cdkConnectedOverlayOffsetY]=\"cdkOverlayOffsetY\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n (positionChange)=\"onPositionChange($event)\"\n (detach)=\"isOpen && hidePopup()\"\n >\n <ng-template [ngTemplateOutlet]=\"popTpl\"> </ng-template>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"!appendToBody\">\n <ng-template [ngTemplateOutlet]=\"popTpl\"> </ng-template>\n</ng-container>\n\n<ng-template #popTpl>\n <div\n class=\"devui-dropdown-menu\"\n [ngClass]=\"{\n 'devui-dropdown-menu-cdk': appendToBody,\n 'devui-custom-right': customViewTemplate && customViewDirection === 'right',\n 'devui-custom-left': customViewTemplate && customViewDirection === 'left',\n 'devui-custom-top': customViewTemplate && customViewDirection === 'top'\n }\"\n [style.display]=\"isOpen && (source?.length || noResultItemTemplate) && !disabled ? 'inline-block' : 'none'\"\n [style.top]=\"overview === 'multiline' ? (position?.top < labelMinHeight ? '50%' : '100%') : '100%'\"\n [style.left]=\"overview === 'multiline' ? position?.left + 'px' : '0'\"\n [@fadeInOut]=\"isOpen && !disabled ? (appendToBody ? popPosition : 'bottom') : 'void'\"\n (@fadeInOut.done)=\"animationEnd($event)\"\n [@.disabled]=\"!showAnimation\"\n #selectMenuElement\n dLoading\n [showLoading]=\"showLoading\"\n [backdrop]=\"true\"\n >\n <ul\n class=\"devui-list-unstyled devui-scrollbar scroll-height devui-dropdown-menu-wrap devui-auto-complete-list\"\n [style.maxHeight]=\"maxHeight + 'px'\"\n dLazyLoad\n [enableLazyLoad]=\"enableLazyLoad\"\n (loadMore)=\"loadMoreEvent($event)\"\n #dropdownUl\n >\n <ng-container *ngIf=\"!isSearching || !searchingTemplate\">\n <li *ngIf=\"popTipsText && popTipsText.length > 0\" class=\"devui-popup-tips\">\n {{ popTipsText }}\n </li>\n <li\n *ngFor=\"let item of source; let $index = index; trackBy: trackByFn\"\n class=\"devui-dropdown-item\"\n [title]=\"formatter(item)\"\n [ngClass]=\"{\n selected: $index == activeIndex,\n 'devui-dropdown-bg': $index == hoverIndex,\n disabled: disabledKey && item[disabledKey]\n }\"\n (click)=\"onSelect($event, item)\"\n (mouseover)=\"onMouseOver($event, item)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{\n formatter: formatter,\n term: term,\n source: source,\n item: item,\n $index: $index\n }\"\n >\n </ng-template>\n </li>\n <div class=\"devui-no-data-tip\" *ngIf=\"!source?.length && noResultItemTemplate\">\n <ng-template [ngTemplateOutlet]=\"noResultItemTemplate\" [ngTemplateOutletContext]=\"{ term: term, source: source }\"> </ng-template>\n </div>\n </ng-container>\n <div class=\"devui-no-data-tip\" *ngIf=\"isSearching && searchingTemplate\">\n <ng-template [ngTemplateOutlet]=\"searchingTemplate\" [ngTemplateOutletContext]=\"{ term: term }\"> </ng-template>\n </div>\n </ul>\n <ng-container *ngIf=\"customViewTemplate\">\n <div class=\"devui-select-custom-area\">\n <ng-template [ngTemplateOutlet]=\"customViewTemplate\" [ngTemplateOutletContext]=\"{ $implicit: this }\"></ng-template>\n </div>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #defaultItemTemplate let-item=\"item\" let-term=\"term\">\n <d-highlight [value]=\"formatter(item)\" [term]=\"term\"></d-highlight>\n</ng-template>\n","import { CdkOverlayOrigin, ConnectedPosition, ScrollStrategy, ScrollStrategyOptions } from '@angular/cdk/overlay';\r\nimport {\r\n ChangeDetectorRef,\r\n ComponentFactoryResolver,\r\n ComponentRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n HostListener,\r\n Injector,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { I18nInterface, I18nService } from 'ng-devui/i18n';\r\nimport { PositionService } from 'ng-devui/position';\r\nimport {\r\n addClassToOrigin,\r\n AppendToBodyDirection,\r\n AppendToBodyDirectionsConfig,\r\n AppendToBodyScrollStrategyType,\r\n DevConfigService,\r\n removeClassFromOrigin,\r\n WithConfig\r\n} from 'ng-devui/utils';\r\nimport { fromEvent, Observable, of, Subject, Subscription } from 'rxjs';\r\nimport { debounceTime, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\r\nimport { AutoCompleteConfig } from './auto-complete-config';\r\nimport { AutoCompletePopupComponent } from './auto-complete-popup.component';\r\n\r\n// select(下拉框) select-extend(editable-select用,下拉聚焦时不搜索,变更inputValue后手动搜索) suggest(联想)\r\nexport type autoCompleteSceneType = '' | 'select' | 'select-extend' | 'suggest';\r\n\r\n@Directive({\r\n selector: '[dAutoComplete]',\r\n exportAs: 'autoComplete',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteDirective),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class AutoCompleteDirective implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {\r\n @HostBinding('attr.autocomplete') autocomplete = 'off';\r\n @HostBinding('attr.autocapitalize') autocapitalize = 'off';\r\n @HostBinding('attr.autocorrect') autocorrect = 'off';\r\n @Input() disabled: boolean;\r\n /**\r\n * @deprecated\r\n */\r\n @Input() cssClass: string;\r\n @Input() delay = 300;\r\n @Input() @WithConfig() showGlowStyle = true;\r\n @HostBinding('class.devui-glow-style') get hasGlowStyle() {\r\n return this.showGlowStyle;\r\n }\r\n /**\r\n * @deprecated\r\n */\r\n @Input() minLength: number;\r\n @Input() itemTemplate: TemplateRef<any>;\r\n @Input() noResultItemTemplate: TemplateRef<any>;\r\n @Input() searchingTemplate: TemplateRef<any>;\r\n @Input() set isSearching(isSearching) {\r\n if (this.popupRef && this.searchingTemplate) {\r\n const pop = this.popupRef.instance;\r\n pop.isSearching = isSearching;\r\n pop.searchingTemplate = this.searchingTemplate;\r\n if (isSearching) {\r\n pop.isOpen = true;\r\n }\r\n }\r\n }\r\n\r\n @Input() appendToBody = false;\r\n @Input() appendToBodyDirections: Array<AppendToBodyDirection | ConnectedPosition> = ['rightDown', 'leftDown', 'rightUp', 'leftUp'];\r\n @Input() @WithConfig() appendToBodyScrollStrategy: AppendToBodyScrollStrategyType;\r\n @Input() cdkOverlayOffsetY = 0; // 内部使用不开放\r\n @Input() dAutoCompleteWidth: number;\r\n @Input() formatter: (item: any) => string;\r\n @Input() sceneType: autoCompleteSceneType = '';\r\n @Input() tipsText = ''; // 提示文字\r\n /*\r\n overview: border none multiline single\r\n */\r\n @Input() overview: string;\r\n @Input() latestSource: any[]; // 最近输入\r\n @Input() source: any[];\r\n @Input() valueParser: (item: any) => any;\r\n @Input() searchFn: (term: string, target?: AutoCompleteDirective) => Observable<any[]>;\r\n /**\r\n * @deprecated\r\n */\r\n @Input() dropdown: boolean;\r\n @Input() maxHeight = 300;\r\n @Input() disabledKey: string;\r\n @Input() @WithConfig() showAnimation = true;\r\n /**\r\n * 【可选】启用数据懒加载,默认不启用\r\n */\r\n @Input() enableLazyLoad = false;\r\n @Input() retainInputValue = false;\r\n @Input() allowEmptyValueSearch = false; // 在value为空时,是否允许进行搜索\r\n @Input() customViewTemplate: TemplateRef<any>;\r\n @Input() customViewDirection: 'bottom' | 'right' | 'left' | 'top' = 'bottom';\r\n @Output() loadMore = new EventEmitter<any>();\r\n @Output() selectValue = new EventEmitter<any>();\r\n @Output() transInputFocusEmit = new EventEmitter<any>(); // input状态传给父组件函数\r\n /**\r\n * @deprecated\r\n */\r\n @Output() changeDropDownStatus = new EventEmitter<any>();\r\n @Output() toggleChange = new EventEmitter<boolean>();\r\n @Output() hoverItem: EventEmitter<any> = new EventEmitter();\r\n KEYBOARD_EVENT_NOT_REFRESH = ['escape', 'enter', 'arrowup', 'arrowdown', /* ie 10 edge */ 'esc', 'up', 'down'];\r\n popupRef: ComponentRef<AutoCompletePopupComponent>;\r\n i18nText: I18nInterface['autoComplete'];\r\n popTipsText = '';\r\n position: any;\r\n focus = false;\r\n scrollStrategy: ScrollStrategy;\r\n SELECT_TYPES = ['select', 'select-extend'];\r\n\r\n private destroy$ = new Subject<void>();\r\n private valueChanges: Observable<any[]>;\r\n private value: any;\r\n private subscription: Subscription;\r\n private onChange = (_: any) => null;\r\n private onTouched = () => null;\r\n\r\n constructor(\r\n private autoCompleteConfig: AutoCompleteConfig,\r\n private elementRef: ElementRef,\r\n private viewContainerRef: ViewContainerRef,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private renderer: Renderer2,\r\n private injector: Injector,\r\n private positionService: PositionService,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private i18n: I18nService,\r\n private devConfigService: DevConfigService,\r\n private scrollStrategyOption: ScrollStrategyOptions\r\n ) {\r\n this.scrollStrategy = this.scrollStrategyOption.reposition();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.setI18nText();\r\n this.valueChanges = this.registerInputEvent(this.elementRef);\r\n // 调用时机:input keyup\r\n this.subscription = this.valueChanges.subscribe((source) => this.onSourceChange(source));\r\n\r\n // 动态的创建了popup组件,\r\n const factory = this.componentFactoryResolver.resolveComponentFactory(AutoCompletePopupComponent);\r\n this.popupRef = this.viewContainerRef.createComponent(factory, this.viewContainerRef.length, this.injector);\r\n this.popupRef.instance.hoverItem.subscribe((item) => this.hoverItem.emit(item));\r\n this.fillPopup(this.source);\r\n\r\n if (!this.searchFn) {\r\n this.searchFn = (term) => {\r\n return of(this.source.filter((item) => this.formatter(item).toLowerCase().indexOf(term.toLowerCase()) !== -1));\r\n };\r\n }\r\n\r\n // 调用时机:选中回车或者鼠标单击下拉选项\r\n this.popupRef.instance.registerOnChange((item) => {\r\n if (item.type === 'loadMore') {\r\n this.loadMore.emit(item.value);\r\n return;\r\n }\r\n this.writeValue(item.value);\r\n this.onChange(item.value);\r\n this.hidePopup();\r\n this.selectValue.emit(item.value);\r\n if (this.overview && this.overview !== 'single') {\r\n setTimeout(() => {\r\n // 这里稍微延迟一下,等待光标的位置发生变化,好重新获取光标的位置\r\n this.restLatestSource();\r\n }, 0);\r\n }\r\n });\r\n\r\n this.setPositions();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const { appendToBodyDirections, appendToBodyScrollStrategy, source } = changes;\r\n const globalScrollStrategy = this.devConfigService.getConfigForApi('appendToBodyScrollStrategy');\r\n if (source && this.popupRef) {\r\n this.fillPopup(this.source);\r\n }\r\n if (appendToBodyDirections) {\r\n this.setPositions();\r\n }\r\n if (this.appendToBodyScrollStrategy && (appendToBodyScrollStrategy || globalScrollStrategy)) {\r\n const func = this.scrollStrategyOption[this.appendToBodyScrollStrategy];\r\n this.scrollStrategy = func();\r\n if (this.popupRef) {\r\n this.popupRef.instance.scrollStrategy = this.scrollStrategy;\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.minLength = this.minLength ?? this.autoCompleteConfig.autoComplete.minLength;\r\n this.itemTemplate = this.itemTemplate || this.autoCompleteConfig.autoComplete.itemTemplate;\r\n this.noResultItemTemplate = this.noResultItemTemplate || this.autoCompleteConfig.autoComplete.noResultItemTemplate;\r\n this.formatter = this.formatter || this.autoCompleteConfig.autoComplete.formatter;\r\n this.valueParser = this.valueParser || this.autoCompleteConfig.autoComplete.valueParser;\r\n }\r\n\r\n setPositions() {\r\n if (this.popupRef) {\r\n this.popupRef.instance.overlayPositions =\r\n this.appendToBodyDirections && this.appendToBodyDirections.length > 0\r\n ? this.appendToBodyDirections\r\n .map((position) => {\r\n if (typeof position === 'string') {\r\n return AppendToBodyDirectionsConfig[position];\r\n } else {\r\n return position;\r\n }\r\n })\r\n .filter((position) => position !== undefined)\r\n : undefined;\r\n }\r\n }\r\n\r\n setI18nText() {\r\n this.i18nText = this.i18n.getI18nText().autoComplete;\r\n this.i18n\r\n .langChange()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((data) => {\r\n this.i18nText = data.autoComplete;\r\n });\r\n }\r\n\r\n restLatestSource() {\r\n if (this.latestSource && this.latestSource.length > 0) {\r\n this.writeValue('');\r\n this.clearInputValue();\r\n this.showLatestSource();\r\n }\r\n }\r\n\r\n // 调用时机:input keyup\r\n onSourceChange(source) {\r\n if (!this.elementRef.nativeElement.value) {\r\n if (!this.SELECT_TYPES.includes(this.sceneType) && !this.allowEmptyValueSearch) {\r\n // 下拉场景不展示最近输入\r\n this.showLatestSource();\r\n } else {\r\n this.showSource(source, true, true);\r\n }\r\n } else {\r\n this.showSource(source, true, true);\r\n }\r\n }\r\n\r\n private showLatestSource() {\r\n let tempSource = [];\r\n if (this.latestSource && this.latestSource.length > 0) {\r\n this.searchFn('').subscribe((source) => {\r\n const t = this.latestSource;\r\n tempSource = t.filter((data) => {\r\n if (!data.label) {\r\n return source.find((item) => item === data);\r\n } else {\r\n return source.find((item) => item.label === data.label);\r\n }\r\n });\r\n\r\n const pop = this.popupRef.instance;\r\n pop.reset();\r\n this.popTipsText = this.i18nText.latestInput;\r\n this.fillPopup(tempSource);\r\n this.openPopup();\r\n this.changeDetectorRef.markForCheck();\r\n this.updatePosition();\r\n });\r\n }\r\n\r\n if (tempSource.length <= 0) {\r\n this.hidePopup();\r\n }\r\n }\r\n\r\n private showSource(source, setOpen, isReset) {\r\n if ((source && source.length) || this.noResultItemTemplate) {\r\n const pop = this.popupRef.instance;\r\n if (isReset) {\r\n pop.reset();\r\n }\r\n this.popTipsText = this.tipsText || '';\r\n this.fillPopup(source, this.value);\r\n if (setOpen) {\r\n this.openPopup(isReset ? 0 : -1);\r\n }\r\n this.changeDetectorRef.markForCheck();\r\n this.updatePosition();\r\n } else {\r\n this.hidePopup();\r\n }\r\n }\r\n\r\n private updatePosition() {\r\n if (this.appendToBody) {\r\n setTimeout(() => {\r\n if (this.popupRef.instance.connectedOverlay && this.popupRef.instance.connectedOverlay.overlayRef) {\r\n this.popupRef.instance.connectedOverlay.overlayRef.updatePosition();\r\n }\r\n });\r\n }\r\n }\r\n\r\n public openPopup(activeIndex?: number) {\r\n const index = activeIndex >= 0 ? activeIndex : this.popupRef.instance.activeIndex;\r\n this.popupRef.instance.activeIndex = index;\r\n this.popupRef.instance.hoverIndex = index;\r\n this.popupRef.instance.disabled = this.disabled;\r\n if (!this.popupRef.instance.isOpen) {\r\n this.popupRef.instance.isOpen = true;\r\n addClassToOrigin(this.elementRef);\r\n this.changeDropDownStatus.emit(true);\r\n this.toggleChange.emit(true);\r\n }\r\n }\r\n\r\n writeValue(obj): void {\r\n this.value = this.valueParser(obj) || '';\r\n if (!this.retainInputValue) {\r\n this.writeInputValue(this.value);\r\n }\r\n }\r\n\r\n registerOnChange(fn): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\r\n if (this.popupRef) {\r\n this.popupRef.instance.setDisabledState(isDisabled);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unSubscription();\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n @HostListener('focus', ['$event'])\r\n onFocus($event) {\r\n this.focus = true;\r\n this.transInputFocusEmit.emit({\r\n focus: true,\r\n popupRef: this.popupRef,\r\n });\r\n if (this.sceneType === 'select') {\r\n this.searchValue(this.value ?? '', false);\r\n }\r\n }\r\n\r\n @HostListener('blur', ['$event'])\r\n onBlur($event) {\r\n this.focus = false;\r\n this.onTouched();\r\n }\r\n\r\n @HostListener('keydown.esc', ['$event'])\r\n onEscKeyup($event) {\r\n this.hidePopup();\r\n }\r\n\r\n @HostListener('keydown.Enter', ['$event'])\r\n onEnterKeyDown($event) {\r\n if (!this.popupRef.instance.source?.length || !this.popupRef.instance.isOpen) {\r\n return;\r\n }\r\n if (this.popupRef) {\r\n this.popupRef.instance.selectCurrentItem($event);\r\n }\r\n }\r\n\r\n @HostListener('keydown.ArrowUp', ['$event'])\r\n onArrowUpKeyDown($event) {\r\n if (this.popupRef) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n this.popupRef.instance.prev();\r\n }\r\n }\r\n\r\n @HostListener('keydown.ArrowDown', ['$event'])\r\n onArrowDownKeyDown($event) {\r\n if (this.popupRef) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n this.popupRef.instance.next();\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick($event: Event) {\r\n if (this.focus) {\r\n this.transInputFocusEmit.emit({\r\n focus: this.focus,\r\n popupRef: this.popupRef,\r\n });\r\n }\r\n\r\n // TODO: sceneType为'select'时,自定义了太多处理,十分不优雅,需要合一化\r\n const hostElement = this.elementRef.nativeElement;\r\n const isInside = hostElement.contains($event.target);\r\n const isSelect = this.SELECT_TYPES.includes(this.sceneType);\r\n const value = this.elementRef.nativeElement.value;\r\n if (this.popupRef && this.popupRef.instance.isOpen) {\r\n if ((!isInside && isSelect) || !isSelect) {\r\n this.hidePopup();\r\n }\r\n if (!isInside) {\r\n this.transInputFocusEmit.emit({\r\n focus: false,\r\n popupRef: this.popupRef,\r\n });\r\n }\r\n } else if (isInside && !isSelect) {\r\n if (!value && !this.allowEmptyValueSearch) {\r\n this.showLatestSource();\r\n } else {\r\n this.searchValue(value, true);\r\n }\r\n }\r\n }\r\n\r\n searchValue(value: any, isOpen: boolean) {\r\n this.searchFn(value).subscribe((source) => {\r\n const searchStr = this.formatter(value) ?? '';\r\n if (searchStr) {\r\n const activeIndex = source.map((item) => this.formatter(item).toLowerCase()).indexOf(searchStr.toLowerCase());\r\n this.popupRef.instance.activeIndex = activeIndex > -1 ? activeIndex : 0;\r\n }\r\n this.showSource(source, isOpen, false);\r\n });\r\n }\r\n\r\n hidePopup = () => {\r\n if (this.popupRef) {\r\n this.popupRef.instance.isOpen = false;\r\n removeClassFromOrigin(this.elementRef);\r\n this.changeDropDownStatus.emit(false);\r\n this.toggleChange.emit(false);\r\n }\r\n };\r\n\r\n private fillPopup(source?, term?: string) {\r\n this.position = this.positionService.position(this.elementRef.nativeElement);\r\n const pop = this.popupRef.instance;\r\n pop.source = source;\r\n pop.maxHeight = this.maxHeight;\r\n pop.term = term;\r\n pop.disabledKey = this.disabledKey;\r\n pop.enableLazyLoad = this.enableLazyLoad;\r\n pop.disabled = this.disabled;\r\n pop.scrollStrategy = this.scrollStrategy;\r\n pop.hidePopup = this.hidePopup;\r\n if (this.appendToBody) {\r\n pop.appendToBody = true;\r\n pop.origin = new CdkOverlayOrigin(this.elementRef);\r\n pop.width = this.dAutoCompleteWidth ? this.dAutoCompleteWidth : this.elementRef.nativeElement.offsetWidth;\r\n pop.cdkOverlayOffsetY = this.cdkOverlayOffsetY;\r\n } else {\r\n pop.appendToBody = false;\r\n }\r\n [\r\n 'formatter',\r\n 'itemTemplate',\r\n 'noResultItemTemplate',\r\n 'cssClass',\r\n 'dropdown',\r\n 'popTipsText',\r\n 'position',\r\n 'overview',\r\n 'showAnimation',\r\n 'customViewTemplate',\r\n 'customViewDirection',\r\n ].forEach((key) => {\r\n if (this[key] !== undefined) {\r\n pop[key] = this[key];\r\n }\r\n });\r\n }\r\n\r\n private writeInputValue(value) {\r\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\r\n }\r\n\r\n private clearInputValue() {\r\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', '');\r\n }\r\n\r\n private unSubscription() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n this.subscription = null;\r\n }\r\n }\r\n\r\n onTermChange(term) {\r\n this.value = term;\r\n if (this.popupRef) {\r\n this.popupRef.instance.term = term;\r\n }\r\n this.onChange(term);\r\n }\r\n\r\n private registerInputEvent(elementRef: ElementRef) {\r\n return fromEvent(elementRef.nativeElement, 'input').pipe(\r\n map((e: any) => e.target.value),\r\n filter((term) => !this.disabled && this.searchFn && term.length >= 0),\r\n debounceTime(this.delay),\r\n tap((term) => this.onTermChange(term)),\r\n switchMap((term) => this.searchFn(term, this))\r\n );\r\n }\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LoadingModule } from 'ng-devui/loading';\nimport { PositioningModule } from 'ng-devui/position';\nimport { HighlightModule, LazyLoadModule } from 'ng-devui/utils';\nimport { AutoCompleteConfig } from './auto-complete-config';\nimport { AutoCompletePopupComponent } from './auto-complete-popup.component';\nimport { AutoCompleteDirective } from './auto-complete.directive';\n\n@NgModule({\n imports: [CommonModule, FormsModule, OverlayModule, LazyLoadModule, LoadingModule, PositioningModule, HighlightModule],\n exports: [AutoCompleteDirective, AutoCompletePopupComponent],\n declarations: [AutoCompleteDirective, AutoCompletePopupComponent],\n providers: [AutoCompleteConfig],\n\n})\nexport class AutoCompleteModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AutoCompleteConfig","i3","i5","i2"],"mappings":"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