tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 13.4 kB
Source Map (JSON)
{"version":3,"file":"select-input.mjs","sources":["../../../components/select-input/select-input.tsx"],"sourcesContent":["import { computed, defineComponent, onBeforeUnmount, onMounted, PropType, ref, SetupContext, toRefs, watch } from 'vue';\nimport Popup, { PopupInstanceFunctions, PopupProps, PopupVisibleChangeContext } from '../popup';\nimport props from './props';\nimport { TdSelectInputProps } from './type';\nimport { useMultiple, useSingle, useOverlayInnerStyle } from './hooks';\nimport type { SelectInputValueDisplayOptions } from './hooks';\nimport { useTNodeJSX, usePrefixClass } from '@tdesign/shared-hooks';\n\nconst useComponentClassName = () => {\n return {\n NAME_CLASS: usePrefixClass('select-input'),\n BASE_CLASS_BORDERLESS: usePrefixClass('select-input--borderless'),\n BASE_CLASS_MULTIPLE: usePrefixClass('select-input--multiple'),\n BASE_CLASS_POPUP_VISIBLE: usePrefixClass('select-input--popup-visible'),\n BASE_CLASS_EMPTY: usePrefixClass('select-input--empty'),\n };\n};\n\nexport default defineComponent({\n name: 'TSelectInput',\n props: {\n ...props,\n /**\n * 非公开 API,请勿使用(后续即将删除)\n * 自定义值呈现的选项\n * useInputDisplay 表示在使用时仍然使用组件自带的输入回显实现,\n * usePlaceholder 表示在使用时仍然使用自带的占位符实现\n * */\n valueDisplayOptions: {\n type: Object as PropType<SelectInputValueDisplayOptions>,\n },\n },\n\n setup(props: TdSelectInputProps & { valueDisplayOptions: SelectInputValueDisplayOptions }, context: SetupContext) {\n const { NAME_CLASS, BASE_CLASS_BORDERLESS, BASE_CLASS_MULTIPLE, BASE_CLASS_POPUP_VISIBLE, BASE_CLASS_EMPTY } =\n useComponentClassName();\n const classPrefix = usePrefixClass();\n const renderTNodeJSX = useTNodeJSX();\n\n const selectInputRef = ref();\n const popupRef = ref<PopupInstanceFunctions>();\n const { multiple, value, popupVisible, borderless, popupProps, panel, allowInput, status } = toRefs(props);\n\n const { tOverlayInnerStyle, innerPopupVisible, onInnerPopupVisibleChange } = useOverlayInnerStyle(props);\n\n const { isSingleFocus, commonInputProps, onInnerClear, renderSelectSingle } = useSingle(props, context, popupRef);\n\n const { isMultipleFocus, tagInputRef, renderSelectMultiple } = useMultiple(props, context, popupRef);\n\n const isFocus = computed(() => (props.multiple ? isMultipleFocus.value : isSingleFocus.value));\n\n const classes = computed(() => [\n `${NAME_CLASS.value}`,\n {\n [BASE_CLASS_MULTIPLE.value]: multiple.value,\n [BASE_CLASS_BORDERLESS.value]: borderless.value,\n [BASE_CLASS_POPUP_VISIBLE.value]: popupVisible.value ?? innerPopupVisible.value,\n [BASE_CLASS_EMPTY.value]: value.value instanceof Array ? !value.value.length : !value.value,\n },\n ]);\n\n const addKeyboardEventListener = (e: KeyboardEvent) => {\n const code = e.code || e.key?.trim();\n if (/(ArrowDown|ArrowUp)/.test(code) && !popupVisible.value) {\n const ctx: PopupVisibleChangeContext = { ...context, trigger: 'trigger-element-focus' };\n props.onPopupVisibleChange?.(true, ctx);\n }\n };\n\n watch([isFocus], ([isFocus]) => {\n if (popupVisible.value) return;\n if (isFocus) {\n selectInputRef.value.addEventListener('keydown', addKeyboardEventListener);\n } else {\n selectInputRef.value.removeEventListener('keydown', addKeyboardEventListener);\n }\n });\n\n onMounted(() => {\n if (!popupVisible.value && isFocus) {\n selectInputRef.value.addEventListener('keydown', addKeyboardEventListener);\n }\n });\n\n onBeforeUnmount(() => {\n selectInputRef.value?.removeEventListener('keydown', addKeyboardEventListener);\n });\n\n const onOverlayClick: PopupProps['onOverlayClick'] = (ctx) => {\n ctx.e?.stopPropagation();\n // do not set focus if target can be focused\n if ((ctx.e.target as HTMLElement).tabIndex >= 0) return;\n if (props.multiple) tagInputRef.value?.focus?.();\n };\n\n context.expose({\n popupRef,\n allowInput,\n });\n\n return () => {\n // 浮层显示的受控与非受控\n const visibleProps = { visible: popupVisible.value ?? innerPopupVisible.value };\n\n const mainContent = (\n <Popup\n ref={popupRef}\n trigger={popupProps.value?.trigger || 'click'}\n placement=\"bottom-left\"\n {...visibleProps}\n content={panel.value}\n v-slots={{ ...context.slots, content: context.slots.panel }}\n hideEmptyPopup={true}\n {...{\n onVisibleChange: onInnerPopupVisibleChange,\n onOverlayClick: onOverlayClick,\n ...popupProps.value,\n overlayInnerStyle: tOverlayInnerStyle.value,\n }}\n >\n {multiple.value\n ? renderSelectMultiple({\n commonInputProps: commonInputProps.value,\n onInnerClear: onInnerClear,\n popupVisible: visibleProps.visible,\n allowInput: allowInput.value,\n })\n : renderSelectSingle(visibleProps.visible)}\n </Popup>\n );\n\n const tipsNode = renderTNodeJSX('tips');\n\n const tipsClasses = [\n `${classPrefix.value}-input__tips`,\n `${classPrefix.value}-tips`,\n `${classPrefix.value}-is-${status.value}`,\n ];\n\n return (\n <div ref={selectInputRef} class={classes.value}>\n {mainContent}\n {tipsNode && <div class={tipsClasses}>{tipsNode}</div>}\n </div>\n );\n };\n },\n});\n"],"names":["useComponentClassName","NAME_CLASS","usePrefixClass","BASE_CLASS_BORDERLESS","BASE_CLASS_MULTIPLE","BASE_CLASS_POPUP_VISIBLE","BASE_CLASS_EMPTY","defineComponent","name","props","_objectSpread","valueDisplayOptions","type","Object","setup","context","_useComponentClassNam","classPrefix","renderTNodeJSX","useTNodeJSX","selectInputRef","ref","popupRef","_toRefs","toRefs","multiple","value","popupVisible","borderless","popupProps","panel","allowInput","status","_useOverlayInnerStyle","useOverlayInnerStyle","tOverlayInnerStyle","innerPopupVisible","onInnerPopupVisibleChange","_useSingle","useSingle","isSingleFocus","commonInputProps","onInnerClear","renderSelectSingle","_useMultiple","useMultiple","isMultipleFocus","tagInputRef","renderSelectMultiple","isFocus","computed","classes","_popupVisible$value","concat","_defineProperty","Array","length","addKeyboardEventListener","e","_e$key","code","key","trim","test","_props2$onPopupVisibl","ctx","trigger","onPopupVisibleChange","watch","_ref2","_ref3","_slicedToArray","addEventListener","removeEventListener","onMounted","onBeforeUnmount","_selectInputRef$value","onOverlayClick","_ctx$e","_tagInputRef$value","_tagInputRef$value$fo","stopPropagation","target","tabIndex","focus","call","expose","_popupVisible$value2","_popupProps$value","visibleProps","visible","mainContent","_createVNode","Popup","_mergeProps","onVisibleChange","overlayInnerStyle","_default","slots","content","tipsNode","tipsClasses"],"mappings":"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"}