UNPKG

ng-devui

Version:

DevUI components based on Angular

1 lines 41.1 kB
{"version":3,"file":"ng-devui-tags-input.mjs","sources":["../../devui/tags-input/tags.input.component.ts","../../devui/tags-input/tags.input.component.html","../../devui/tags-input/tags.input.module.ts","../../devui/tags-input/ng-devui-tags-input.ts"],"sourcesContent":["import { ConnectedPosition } from '@angular/cdk/overlay';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\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 TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { I18nInterface, I18nService } from 'ng-devui/i18n';\r\nimport { ToggleMenuContainerComponent, ToggleMenuListComponent, ToggleMenuSearchComponent } from 'ng-devui/toggle-menu';\r\nimport { AppendToBodyDirection, AppendToBodyScrollStrategyType, DevConfigService, WithConfig } from 'ng-devui/utils';\r\nimport { isEmpty } from 'lodash-es';\r\nimport { BehaviorSubject, fromEvent, Observable, of, Subscription } from 'rxjs';\r\nimport { debounceTime, map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'd-tags-input',\r\n templateUrl: './tags.input.component.html',\r\n styleUrls: ['./tags.input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TagsInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n exportAs: 'TagsInput',\r\n preserveWhitespaces: false,\r\n})\r\nexport class TagsInputComponent implements ControlValueAccessor, OnInit, OnDestroy, OnChanges, AfterViewInit {\r\n /**\r\n * 【必选】记录输入的标签\r\n */\r\n @Input() tags = [];\r\n /**\r\n * 【可选】disabled 灰化状态\r\n */\r\n @Input() disabled = false;\r\n /**\r\n * 【可选】使用的属性名\r\n */\r\n @Input() displayProperty = 'name';\r\n /**\r\n * 【可选】输入的placeholder\r\n */\r\n @Input() placeholder = '';\r\n /**\r\n * 【可选】达到最大值时可自定义placeholder\r\n */\r\n @Input() maxPlaceholder: string;\r\n /**\r\n * 【可选】输入标签的最小长度\r\n */\r\n @Input() minLength = 3;\r\n /**\r\n * 【可选】输入标签的最大长度, 524288为 input 支持最大值\r\n */\r\n @Input() maxLength = 524288;\r\n /**\r\n * 【可选】标签的最小个数\r\n */\r\n @Input() minTags = 0;\r\n /**\r\n * 【可选】标签的最大个数\r\n */\r\n @Input() maxTags: number = Number.MAX_SAFE_INTEGER;\r\n /**\r\n * 【可选】输入框的spellcheck\r\n */\r\n @Input() spellcheck = true;\r\n /**\r\n * 【可选】是否appendToBody\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 /**\r\n * 【可选】是否虚拟滚动\r\n */\r\n @Input() virtualScroll = false;\r\n /**\r\n * 【可选】是否使用下拉列表\r\n */\r\n @Input() showSuggestion = true;\r\n /**\r\n * 【可选】下拉选项\r\n */\r\n @Input() suggestionList: any = [];\r\n /**\r\n * 【可选】是否按空格添加tag\r\n */\r\n @Input() isAddBySpace = true;\r\n /**\r\n * 【可选】默认两行显示,false 则单行显示\r\n */\r\n @Input() multiline = true;\r\n /**\r\n * 【可选】已选中标签容器最大高度\r\n */\r\n @Input() maxHeight: string;\r\n @Input() generateOptionFromInput = true;\r\n /**\r\n * 【可选】大小写敏感\r\n */\r\n @Input() caseSensitivity = false;\r\n @Input() itemTemplate: TemplateRef<any>;\r\n @Input() tagTemplate: TemplateRef<any>;\r\n @Input() noResultItemTemplate: TemplateRef<any>;\r\n @Input() checkBeforeGenerate: (newTag: string) => boolean;\r\n @Input() checkBeforeAdd: (newTag: string) => boolean | Promise<boolean> | Observable<boolean>;\r\n @Input() @WithConfig() showAnimation = true;\r\n @Input() @WithConfig() styleType = 'default';\r\n /**\r\n * 输出函数,当选中某个选项项后,将会调用此函数,参数为当前选择项的值。如果需要获取所有选择状态的值,请参考(ngModelChange)方法\r\n */\r\n @Output() valueChange = new EventEmitter<any>();\r\n @Output() searchChange = new EventEmitter<any>();\r\n @ViewChild('tagsInputWrapper', { static: true }) tagsInputWrapperItem: ElementRef;\r\n @ViewChild(ToggleMenuContainerComponent) selectBoxContainer: ToggleMenuContainerComponent;\r\n @ViewChild(ToggleMenuListComponent) selectBox: ToggleMenuListComponent;\r\n @ViewChild(ToggleMenuSearchComponent) searchBox: ToggleMenuSearchComponent;\r\n\r\n get getPlaceHolder() {\r\n const maxPlaceholder =\r\n this.maxPlaceholder === undefined ? `${this.i18nTagsInputText.tagsReachMaxNumber}${this.maxTags}` : this.maxPlaceholder;\r\n return this.selectedItems.length >= this.maxTags ? maxPlaceholder : this.placeholder;\r\n }\r\n\r\n newTag = '';\r\n availableOptions = [];\r\n selectedItems = [];\r\n /**\r\n * 对于用户传入的suggestionList不做修改,数据的操作在_suggestionList上进行\r\n */\r\n _suggestionList = [];\r\n newTagValid = false;\r\n isReduce = false;\r\n isOpen = false;\r\n inputEvent: any;\r\n blurEventSubscription: Subscription;\r\n valueParser: (item: any) => any;\r\n searchFn: (term: string) => Observable<Array<{ id: string | number; option: any }>>;\r\n\r\n private DEBOUNCE_TIME = 300;\r\n private sourceSubscription: BehaviorSubject<any>;\r\n private KEYS: any = {\r\n backspace: 8,\r\n tab: 9,\r\n enter: 13,\r\n escape: 27,\r\n space: 32,\r\n up: 38,\r\n down: 40,\r\n left: 37,\r\n right: 39,\r\n delete: 46,\r\n comma: 188,\r\n };\r\n private i18nSubscription: Subscription;\r\n public i18nCommonText: I18nInterface['common'];\r\n public i18nTagsInputText: I18nInterface['tagsInput'];\r\n private onChange = (_: any) => null;\r\n private onTouch = () => null;\r\n\r\n constructor(private i18n: I18nService, private devConfigService: DevConfigService, private cdr: ChangeDetectorRef) {}\r\n\r\n private setI18nText() {\r\n this.i18nCommonText = this.i18n.getI18nText().common;\r\n this.i18nTagsInputText = this.i18n.getI18nText().tagsInput;\r\n this.i18nSubscription = this.i18n.langChange().subscribe((data) => {\r\n this.i18nCommonText = data.common;\r\n this.i18nTagsInputText = data.tagsInput;\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (!value) {\r\n return;\r\n }\r\n this.tags = value;\r\n this.isReduce = false;\r\n this.reduceSuggestionList();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n\r\n ngOnInit() {\r\n this.setI18nText();\r\n this.valueParser = (item) => {\r\n const str = String(item) ? item.toString() : '';\r\n const obj = typeof item === 'object' ? item[this.displayProperty] || '' : str;\r\n return this.tagTemplate ? item : obj;\r\n };\r\n this.newTag = '';\r\n this._suggestionList = [...this.suggestionList];\r\n this.searchFn = (term: any) => {\r\n const data = this.showSuggestion && this._suggestionList ? this._suggestionList : [];\r\n const matchItem = data.find((item) =>\r\n this.caseSensitivity ? item[this.displayProperty] === term : item[this.displayProperty].toLowerCase() === term.toLowerCase()\r\n );\r\n const result = data.filter((item) => {\r\n const str = this.caseSensitivity\r\n ? item[this.displayProperty].indexOf(term) !== -1\r\n : item[this.displayProperty].toLowerCase().indexOf(term.toLowerCase()) !== -1;\r\n return term === '' ? true : str;\r\n });\r\n return of(matchItem ? [matchItem] : result);\r\n };\r\n this.registerFilterChange();\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.searchBox) {\r\n const inputDom = this.searchBox.el.nativeElement.querySelector('input');\r\n // input失焦不冒泡,直接监听事件处理会早于list中点击事件传递到该组件,因此增加debounceTime待下拉列表关闭后判断是否插入标签\r\n this.blurEventSubscription = fromEvent(inputDom, 'blur')\r\n .pipe(debounceTime(this.DEBOUNCE_TIME))\r\n .subscribe(() => {\r\n if (this.isOpen) {\r\n return;\r\n }\r\n if (this.generateOptionFromInput && !isEmpty(this.newTag)) {\r\n this.addTag();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes && changes.suggestionList && changes.suggestionList.currentValue) {\r\n this._suggestionList = [...this.suggestionList];\r\n this.reduceSuggestionList();\r\n if (this.sourceSubscription && this.searchFn) {\r\n this.sourceSubscription.next('');\r\n }\r\n }\r\n if (changes && changes.tags && changes.tags.currentValue) {\r\n this.reduceSuggestionList();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.sourceSubscription) {\r\n this.sourceSubscription.unsubscribe();\r\n }\r\n if (this.blurEventSubscription) {\r\n this.blurEventSubscription.unsubscribe();\r\n }\r\n if (this.i18nSubscription) {\r\n this.i18nSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n registerFilterChange() {\r\n this.sourceSubscription = new BehaviorSubject<any>('');\r\n this.sourceSubscription\r\n .pipe(\r\n map((term) => {\r\n this.tagIsValid();\r\n return term;\r\n }),\r\n switchMap((term) => this.searchFn(term))\r\n )\r\n .subscribe((options) => {\r\n this.availableOptions = options;\r\n const flag = this.checkBeforeGenerate?.(this.newTag);\r\n const flags = [this.generateOptionFromInput, !!this.newTag, this.newTagValid, flag];\r\n if (!flags.includes(false)) {\r\n const obj = { isDevuiTagsInputCreated: true };\r\n obj[this.displayProperty] = this.newTag;\r\n if (this.availableOptions.length && this.availableOptions[0].isDevuiTagsInputCreated) {\r\n this.availableOptions[0] = obj;\r\n } else {\r\n this.availableOptions.unshift(obj);\r\n }\r\n }\r\n if (this.selectBoxContainer) {\r\n this.selectBoxContainer.updatePosition();\r\n }\r\n if (this.selectBox) {\r\n this.selectBox.resetIndex(!options.length);\r\n }\r\n });\r\n }\r\n\r\n checkIsIncludes(option, item, isString?) {\r\n const key = this.displayProperty;\r\n const value = isString ? item : item[key];\r\n return this.caseSensitivity ? option[key] === value : option[key].toLowerCase() === value.toLowerCase();\r\n }\r\n\r\n reduceSuggestionList() {\r\n this.selectedItems = this.tags.map((option, id) => ({ option, id }));\r\n if (this.isReduce) {\r\n return;\r\n }\r\n if (this.suggestionList.length > 0) {\r\n this.isReduce = true;\r\n // 使用用户最初传入的数据来进行过滤\r\n this._suggestionList = this.suggestionList.filter((suggestion) => {\r\n return this.selectedItems.findIndex(({ option }) => this.checkIsIncludes(option, suggestion)) === -1;\r\n });\r\n if (this.sourceSubscription && this.searchFn) {\r\n this.sourceSubscription.next('');\r\n }\r\n }\r\n }\r\n\r\n host_click() {\r\n if (!this.disabled) {\r\n const dom = this.searchBox.el.nativeElement.querySelector('input');\r\n if (dom && this.selectBox) {\r\n dom.focus();\r\n if (this.selectBox.availableOptions.length) {\r\n this.selectBox.resetIndex(false);\r\n }\r\n }\r\n }\r\n }\r\n\r\n passEvent(data) {\r\n const { event, type } = data;\r\n switch (type) {\r\n case 'keydown.enter':\r\n case 'blur':\r\n // keydown.enter 和 keydown 都接收会重复处理\r\n // 点击会聚焦input,input失焦事件不会冒泡,单独处理\r\n break;\r\n case 'keydown': {\r\n const hotkeys = [this.KEYS.enter, this.KEYS.tab];\r\n if (this.isAddBySpace) {\r\n hotkeys.push(this.KEYS.space);\r\n }\r\n if (hotkeys.includes(event.keyCode)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (this.selectBox?.selectIndex !== -1) {\r\n this.addSuggestionByIndex(this.selectBox.selectIndex, this.availableOptions[this.selectBox.selectIndex]);\r\n } else if (this.generateOptionFromInput) {\r\n this.addTag();\r\n }\r\n }\r\n break;\r\n }\r\n default:\r\n this.inputEvent = { event, type };\r\n }\r\n }\r\n\r\n addSuggestionByIndex(index, value) {\r\n if (\r\n index < 0 ||\r\n index >= this.availableOptions.length ||\r\n this.maxTags <= this.selectedItems.length ||\r\n this.selectedItems.findIndex(({ option }) => this.checkIsIncludes(option, value)) !== -1\r\n ) {\r\n return;\r\n }\r\n this.canAdd(value).then((result) => {\r\n if (!result) {\r\n return;\r\n }\r\n const tag = this.availableOptions[index];\r\n const isCreated = tag.isDevuiTagsInputCreated;\r\n delete tag.isDevuiTagsInputCreated;\r\n this.checkMaxTags(tag);\r\n this.onChange(this.selectedItems.map((tagItem) => tagItem.option));\r\n this.valueChange.emit(tag);\r\n if (!isCreated) {\r\n const suggestionListIndex = this._suggestionList.findIndex((item) => this.checkIsIncludes(item, value));\r\n this._suggestionList.splice(suggestionListIndex, 1);\r\n }\r\n this.delayResetNewTag();\r\n this.sourceSubscription.next('');\r\n });\r\n }\r\n\r\n removeTag(data) {\r\n const { index } = data;\r\n // 立即移除会导致toggle-menu-container无法判断event.target是否在容器中,从而关闭下拉菜单\r\n setTimeout(() => {\r\n if (index < 0 || index >= this.selectedItems.length) {\r\n return;\r\n }\r\n // onPush下 数组长度变化不会触发变更检测\r\n this.availableOptions = [...this.availableOptions, this.selectedItems[index]?.option];\r\n this._suggestionList = [...this._suggestionList, this.selectedItems[index]?.option];\r\n const tag = this.selectedItems[index].option;\r\n this.selectedItems.splice(index, 1);\r\n if (this.selectedItems.length === 0) {\r\n this.selectBoxContainer.updatePosition();\r\n }\r\n this.onChange(this.selectedItems.map((tagItem) => tagItem.option));\r\n this.valueChange.emit(tag);\r\n });\r\n }\r\n\r\n tagIsValid() {\r\n const tag = this.newTag;\r\n const result =\r\n tag &&\r\n tag.length >= this.minLength &&\r\n tag.length <= this.maxLength &&\r\n (this.showSuggestion ? this._suggestionList.findIndex((item) => this.checkIsIncludes(item, tag, true)) === -1 : true) &&\r\n this.selectedItems.findIndex(({ option }) => this.checkIsIncludes(option, tag, true)) === -1 &&\r\n !this.isEmptyString(tag);\r\n this.newTagValid = tag === '' || !!result;\r\n return result;\r\n }\r\n\r\n isEmptyString(tag) {\r\n const temp = tag.match(/\\s/g);\r\n if (temp) {\r\n return tag.length === temp.length;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n addTag() {\r\n this.canAdd()\r\n .then((result) => {\r\n if (result && this.maxTags > this.selectedItems.length) {\r\n if (this.tagIsValid()) {\r\n const obj = {};\r\n obj[this.displayProperty] = this.newTag;\r\n this.checkMaxTags(obj);\r\n this.onChange(this.selectedItems.map((tagItem) => tagItem.option));\r\n this.valueChange.emit(this.newTag);\r\n }\r\n } else {\r\n this.newTagValid = false;\r\n }\r\n })\r\n .finally(() => {\r\n if (this.newTag && this.newTagValid) {\r\n this.delayResetNewTag();\r\n this.sourceSubscription.next('');\r\n }\r\n });\r\n }\r\n\r\n canAdd(value?) {\r\n let checkResult = Promise.resolve(true);\r\n if (this.checkBeforeAdd) {\r\n const result: any = this.checkBeforeAdd(value || this.newTag);\r\n if (typeof result !== 'undefined') {\r\n if (result.then) {\r\n checkResult = result;\r\n } else if (result.subscribe) {\r\n checkResult = (result as Observable<boolean>).toPromise();\r\n } else {\r\n checkResult = Promise.resolve(result);\r\n }\r\n }\r\n }\r\n return checkResult;\r\n }\r\n\r\n checkMaxTags(tag) {\r\n this.selectedItems.push({ id: this.selectedItems.length, option: tag });\r\n if (this.selectedItems.length >= this.maxTags) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n setValue({ option, index }) {\r\n this.addSuggestionByIndex(index, option);\r\n }\r\n\r\n searchInputValueChange(event) {\r\n if (this.selectBox) {\r\n this.selectBox.selectIndex = -1;\r\n }\r\n this.newTag = (event || '').trim();\r\n this.searchChange.emit(this.newTag);\r\n this.sourceSubscription.next(this.newTag);\r\n }\r\n\r\n toggleChangeFn(event) {\r\n if (!event) {\r\n this.onTouch();\r\n this.cdr.detectChanges();\r\n }\r\n this.isOpen = event;\r\n }\r\n\r\n delayResetNewTag() {\r\n setTimeout(() => {\r\n // 放在timeout里是因为如果用空格添加tag,会导致添加之后输入框里有个空格。\r\n this.newTag = '';\r\n }, 50);\r\n }\r\n}\r\n","<div\r\n #tagsInputWrapper\r\n class=\"devui-tags-host {{ multiline ? 'multi-inline' : 'init-inline' }}\"\r\n [class.devui-gray-style]=\"styleType === 'gray'\"\r\n [class.disabled]=\"disabled || selectedItems?.length >= maxTags\"\r\n tabindex=\"-1\"\r\n (click)=\"host_click()\"\r\n>\r\n <d-toggle-menu-container\r\n [isOpen]=\"isOpen\"\r\n [appendToBody]=\"appendToBody\"\r\n [appendToBodyDirections]=\"appendToBodyDirections\"\r\n [appendToBodyScrollStrategy]=\"appendToBodyScrollStrategy\"\r\n [selectWrapper]=\"tagsInputWrapperItem\"\r\n [disabled]=\"disabled || selectedItems?.length >= maxTags\"\r\n [paused]=\"!showSuggestion\"\r\n [toggleOnFocus]=\"true\"\r\n [showAnimation]=\"showAnimation\"\r\n [closeScope]=\"'blank'\"\r\n (passEvent)=\"passEvent($event)\"\r\n (toggleChange)=\"toggleChangeFn($event)\"\r\n >\r\n <d-toggle-menu-label\r\n [multiItems]=\"selectedItems\"\r\n [valueParser]=\"valueParser\"\r\n [disabled]=\"disabled\"\r\n [maxHeight]=\"maxHeight\"\r\n [maxWidth]=\"'100%'\"\r\n [mode]=\"multiline ? 'multiple-line' : 'scroll-y'\"\r\n [customViewTemplate]=\"tagTemplate\"\r\n (removeChange)=\"removeTag($event)\"\r\n ></d-toggle-menu-label>\r\n <d-toggle-menu-search\r\n *ngIf=\"!disabled || selectedItems?.length === 0\"\r\n [inputValue]=\"newTag\"\r\n [maxLength]=\"maxLength\"\r\n [searchPlaceholder]=\"getPlaceHolder\"\r\n [searchFn]=\"searchFn\"\r\n [spellcheck]=\"spellcheck\"\r\n [isShowSearchIcon]=\"false\"\r\n [disabled]=\"disabled || selectedItems?.length >= maxTags\"\r\n [delay]=\"0\"\r\n (searchInputValueChange)=\"searchInputValueChange($event)\"\r\n ></d-toggle-menu-search>\r\n <d-toggle-menu-list\r\n [eventHandle]=\"inputEvent\"\r\n [options]=\"availableOptions\"\r\n [value]=\"selectedItems\"\r\n [virtualScroll]=\"virtualScroll\"\r\n [hasSelectIndex]=\"true\"\r\n [isFiltering]=\"newTag?.length > 0\"\r\n [listItemTemplate]=\"listItem\"\r\n [noResultItemTemplate]=\"noResultItemTemplate\"\r\n [closeScope]=\"'blank'\"\r\n (toggleChange)=\"toggleChangeFn($event)\"\r\n (valueChange)=\"setValue($event)\"\r\n >\r\n <ng-template #listItem let-item=\"item\" let-index=\"index\" let-selectIndex=\"selectIndex\" let-choose=\"choose\">\r\n <d-toggle-menu-list-item\r\n [item]=\"item\"\r\n [index]=\"index\"\r\n [selectIndex]=\"selectIndex\"\r\n [highlightToggle]=\"false\"\r\n [customTemplate]=\"itemTemplate\"\r\n [filterKey]=\"displayProperty\"\r\n (chooseItem)=\"choose($event)\"\r\n >\r\n <span itemSuffix *ngIf=\"index === 0 && item.option.isDevuiTagsInputCreated\" class=\"devui-tags-create-item\">\r\n {{ i18nTagsInputText?.create }}\r\n </span>\r\n </d-toggle-menu-list-item>\r\n </ng-template>\r\n </d-toggle-menu-list>\r\n </d-toggle-menu-container>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToggleMenuModule } from 'ng-devui/toggle-menu';\nimport { TagsInputComponent } from './tags.input.component';\n@NgModule({\n imports: [CommonModule, FormsModule, ToggleMenuModule],\n exports: [TagsInputComponent],\n declarations: [TagsInputComponent],\n})\nexport class TagsInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}