xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 11.5 kB
Source Map (JSON)
{"version":3,"file":"auto-complete.mjs","sources":["../../src/auto-complete/auto-complete.tsx"],"sourcesContent":["import { computed, ref, defineComponent, toRefs, nextTick } from 'vue';\nimport props from './props';\nimport { TdAutoCompleteProps } from './type';\nimport Input, { InputProps, TdInputProps } from '../input';\nimport Popup, { PopupProps } from '../popup';\nimport useCommonClassName from '../hooks/useCommonClassName';\nimport AutoCompleteOptionList from './option-list';\nimport useVModel from '../hooks/useVModel';\nimport { useConfig } from '../config-provider/useConfig';\nimport { ClassName } from '../common';\nimport { useContent, useTNodeJSX } from '../hooks';\n\nexport default defineComponent({\n name: 'XAutoComplete',\n\n props,\n\n setup(props: TdAutoCompleteProps, { slots }) {\n const { value, modelValue } = toRefs(props);\n const [tValue, setTValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n const renderContent = useContent();\n const renderTNodeJSX = useTNodeJSX();\n const { classPrefix, sizeClassNames } = useCommonClassName();\n const { globalConfig: global } = useConfig('input');\n\n const popupVisible = ref();\n const optionListRef = ref();\n\n const getOverlayStyle = (trigger: HTMLElement, popupElement: HTMLElement) => {\n const triggerWidth = trigger.getBoundingClientRect().width || trigger.offsetWidth || trigger.clientWidth;\n const popupWidth =\n popupElement.getBoundingClientRect().width || popupElement.offsetWidth || popupElement.clientWidth;\n return {\n width: triggerWidth >= popupWidth ? `${triggerWidth}px` : 'auto',\n ...props.popupProps?.overlayInnerStyle,\n };\n };\n\n const classes = computed(() => [`${classPrefix.value}-auto-complete`]);\n const popupClasses = computed(() => {\n let classes: ClassName = [`${classPrefix.value}-select__dropdown`];\n if (props.popupProps?.overlayClassName) {\n classes = classes.concat(props.popupProps.overlayClassName);\n }\n return classes;\n });\n const popupInnerClasses = computed(() => {\n let classes: ClassName = [`${classPrefix.value}-select__dropdown-inner`];\n if (props.popupProps?.overlayInnerClassName) {\n classes = classes.concat(props.popupProps.overlayInnerClassName);\n }\n return classes;\n });\n\n const onInputChange: TdInputProps['onChange'] = (value, context) => {\n setTValue(value, context);\n };\n\n const innerInputProps = computed(() => {\n const tProps: InputProps = {\n value: tValue.value,\n size: props.size,\n ...props.inputProps,\n };\n return tProps;\n });\n\n const onInnerFocus: InputProps['onFocus'] = (value, context) => {\n popupVisible.value = true;\n props.onFocus?.({ ...context, value });\n nextTick(() => {\n optionListRef.value?.addKeyboardListener();\n });\n };\n\n const onInnerBlur: InputProps['onBlur'] = (value, context) => {\n props.onBlur?.({ ...context, value });\n };\n\n const onInnerCompositionend: InputProps['onCompositionend'] = (value, context) => {\n props.onCompositionend?.({ ...context, value });\n };\n\n const onInnerCompositionstart: InputProps['onCompositionstart'] = (value, context) => {\n props.onCompositionstart?.({ ...context, value });\n };\n\n const onInnerEnter: InputProps['onEnter'] = (value, context) => {\n props.onEnter?.({ ...context, value });\n };\n\n const onInnerSelect: TdAutoCompleteProps['onSelect'] = (value, context) => {\n if (props.readonly || props.disabled) return;\n popupVisible.value = false;\n setTValue(value, context);\n props.onSelect?.(value, context);\n };\n\n const onPopupVisibleChange: PopupProps['onVisibleChange'] = (visible, { trigger }) => {\n if (trigger !== 'trigger-element-click') {\n popupVisible.value = visible;\n }\n };\n\n return () => {\n // 触发元素\n const triggerNode = renderContent('default', 'triggerElement') || (\n <Input\n placeholder={props.placeholder ?? global.value.placeholder}\n tips={props.tips}\n status={props.status}\n readonly={props.readonly}\n disabled={props.disabled}\n autofocus={props.autofocus}\n clearable={props.clearable}\n onChange={onInputChange}\n onFocus={onInnerFocus}\n onBlur={onInnerBlur}\n onClear={props.onClear}\n onCompositionend={onInnerCompositionend}\n onCompositionstart={onInnerCompositionstart}\n onEnter={onInnerEnter}\n {...innerInputProps.value}\n v-slots={slots}\n />\n );\n // 联想词列表\n const listContent = (\n <AutoCompleteOptionList\n ref={optionListRef}\n value={tValue.value}\n options={props.options}\n size={props.size}\n sizeClassNames={sizeClassNames}\n onSelect={onInnerSelect}\n popupVisible={popupVisible.value}\n highlightKeyword={props.highlightKeyword}\n filterable={props.filterable}\n filter={props.filter}\n v-slots={{ option: slots.option }}\n />\n );\n const topContent = renderTNodeJSX('panelTopContent');\n const bottomContent = renderTNodeJSX('panelBottomContent');\n const panelContent = Boolean(topContent || props.options?.length || bottomContent) ? (\n <div class={`${classPrefix.value}-autocomplete__panel`}>\n {topContent}\n {listContent}\n {bottomContent}\n </div>\n ) : null;\n const popupProps = {\n ...props.popupProps,\n overlayInnerStyle: getOverlayStyle,\n overlayInnerClassName: popupInnerClasses.value,\n overlayClassName: popupClasses.value,\n };\n return (\n <div class={classes.value}>\n <Popup\n visible={popupVisible.value}\n onVisibleChange={onPopupVisibleChange}\n trigger=\"focus\"\n placement=\"bottom-left\"\n hideEmptyPopup={true}\n content={panelContent ? () => panelContent : null}\n {...popupProps}\n >\n {triggerNode}\n </Popup>\n </div>\n );\n };\n },\n});\n"],"names":["_isVNode","name","props","setup","tValue","setTValue","classes","value","nextTick","_createVNode","_mergeProps","overlayInnerStyle"],"mappings":"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"}