tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 13.9 kB
Source Map (JSON)
{"version":3,"file":"option-list.mjs","sources":["../../../../components/auto-complete/components/option-list.tsx"],"sourcesContent":["import { ref, computed, defineComponent, PropType, h, watch, onBeforeUnmount } from 'vue';\nimport { isString, isFunction, escapeRegExp } from 'lodash-es';\nimport HighlightOption from './highlight-option';\nimport { useConfig, usePrefixClass, CommonClassNameType } from '@tdesign/shared-hooks';\nimport { AutoCompleteOptionObj, TdAutoCompleteProps } from '../type';\nimport log from '@tdesign/common-js/log/index';\n\nimport { on, off } from '@tdesign/shared-utils';\n\nimport { ARROW_UP_REG, ARROW_DOWN_REG, ENTER_REG } from '@tdesign/common-js/common';\n\nexport default defineComponent({\n name: 'AutoCompleteOptionList',\n props: {\n sizeClassNames: Object as PropType<CommonClassNameType['SIZE']>,\n value: String,\n size: String as PropType<TdAutoCompleteProps['size']>,\n options: Array as PropType<TdAutoCompleteProps['options']>,\n popupVisible: Boolean,\n highlightKeyword: Boolean,\n filterable: Boolean,\n filter: Function as PropType<TdAutoCompleteProps['filter']>,\n empty: [String, Function] as PropType<TdAutoCompleteProps['empty']>,\n },\n emits: ['select'],\n setup(props, { emit, slots, expose }) {\n const active = ref('');\n const classPrefix = usePrefixClass();\n const { globalConfig } = useConfig('autoComplete');\n\n const classes = computed(() => `${classPrefix.value}-select__list`);\n const optionClasses = computed(() => [\n `${classPrefix.value}-select-option`,\n {\n [props.sizeClassNames.value[props.size]]: props.size,\n },\n ]);\n\n // 整理数据格式\n const tOptions = computed<AutoCompleteOptionObj[]>(() => {\n let options = (props.options || []).map((item) => {\n let option: AutoCompleteOptionObj = {};\n if (isString(item)) {\n option = { text: item, label: item };\n } else {\n if (item.text && !isString(item.text)) {\n log.warn('AutoComplete', '`text` must be a string.');\n }\n if (!item.text) {\n if (isString(item.label)) {\n option = { ...item, text: item.label };\n } else {\n log.warn('AutoComplete', 'one of `label` and `text` must be a existed string.');\n }\n } else {\n option = item;\n }\n }\n return option;\n });\n // 自定义过滤规则\n if (props.filter) {\n options = options.filter((option) => props.filter(props.value, option));\n } else if (props.filterable) {\n // 默认过滤规则\n const regExp = new RegExp(escapeRegExp(props.value), 'i');\n options = options.filter((item) => regExp.test(item.text));\n }\n return options;\n });\n\n const onOptionClick = (e: MouseEvent) => {\n let liNode = e.target as HTMLElement;\n while (liNode && liNode.tagName !== 'LI') {\n liNode = liNode.parentNode as HTMLElement;\n }\n const keyword = liNode.getAttribute('title');\n active.value = keyword;\n emit('select', keyword, { e });\n };\n\n // 键盘事件,上下选择\n const onKeyInnerPress = (e: KeyboardEvent) => {\n if (ARROW_UP_REG.test(e.code) || ARROW_UP_REG.test(e.key)) {\n const index = tOptions.value.findIndex((item) => item.text === active.value);\n const newIndex = index - 1 < 0 ? tOptions.value.length - 1 : index - 1;\n active.value = tOptions.value[newIndex]?.text;\n } else if (ARROW_DOWN_REG.test(e.code) || ARROW_DOWN_REG.test(e.key)) {\n const index = tOptions.value.findIndex((item) => item.text === active.value);\n const newIndex = index + 1 >= tOptions.value.length ? 0 : index + 1;\n active.value = tOptions.value[newIndex]?.text;\n } else if (ENTER_REG.test(e.code) || ENTER_REG.test(e.key)) {\n if (active.value) {\n emit('select', active.value, { e });\n }\n }\n };\n\n const addKeyboardListener = () => {\n on(document, 'keydown', onKeyInnerPress);\n };\n\n const removeKeyboardListener = () => {\n off(document, 'keydown', onKeyInnerPress);\n };\n\n expose({\n addKeyboardListener,\n removeKeyboardListener,\n });\n\n watch(\n () => props.popupVisible,\n () => {\n if (props.popupVisible) {\n addKeyboardListener();\n } else {\n removeKeyboardListener();\n }\n },\n { immediate: true },\n );\n\n watch(\n () => props.value,\n () => {\n if (!props.value) {\n active.value = '';\n }\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => {\n removeKeyboardListener();\n });\n\n return () => {\n if (!tOptions.value.length) {\n return (\n <div class={`${classPrefix.value}-auto-complete__panel--empty`}>\n {props.empty || globalConfig.value.empty}\n </div>\n );\n }\n\n return (\n <ul class={classes.value}>\n {tOptions.value.map((item) => {\n const cls = [...optionClasses.value];\n if (item.text === active.value) {\n cls.push(`${classPrefix.value}-select-option--hover`);\n }\n let labelNode: any = item.label;\n if (isFunction(item.label)) {\n labelNode = item.label(h);\n } else if (slots.option) {\n labelNode = slots.option?.({ option: item });\n }\n const content = labelNode || item.text;\n return (\n <li key={item.text} class={cls} title={item.text} onClick={onOptionClick}>\n {isString(content) && props.highlightKeyword ? (\n <HighlightOption content={content} keyword={props.value} />\n ) : (\n content\n )}\n </li>\n );\n })}\n </ul>\n );\n };\n },\n});\n"],"names":["defineComponent","name","props","sizeClassNames","Object","value","String","size","options","Array","popupVisible","Boolean","highlightKeyword","filterable","filter","Function","empty","emits","setup","_ref","emit","slots","expose","active","ref","classPrefix","usePrefixClass","_useConfig","useConfig","globalConfig","classes","computed","concat","optionClasses","_defineProperty","tOptions","map","item","option","isString","text","label","log","warn","_objectSpread","regExp","RegExp","escapeRegExp","test","onOptionClick","e","liNode","target","tagName","parentNode","keyword","getAttribute","onKeyInnerPress","ARROW_UP_REG","code","key","_tOptions$value$newIn","index","findIndex","newIndex","length","ARROW_DOWN_REG","_tOptions$value$_newI","ENTER_REG","addKeyboardListener","on","document","removeKeyboardListener","off","watch","immediate","onBeforeUnmount","_createVNode","cls","_toConsumableArray","push","labelNode","isFunction","h","_slots$option","call","content","HighlightOption"],"mappings":"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"}