UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 8.21 kB
{"version":3,"file":"useSingle.mjs","sources":["../../src/select-input/useSingle.tsx"],"sourcesContent":["import { SetupContext, ref, computed, toRefs } from 'vue';\nimport isObject from 'lodash/isObject';\nimport pick from 'lodash/pick';\nimport { SelectInputCommonProperties } from './interface';\nimport { TdSelectInputProps } from './type';\nimport Input, { InputValue, TdInputProps } from '../input';\nimport Loading from '../loading';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport useDefaultValue from '../hooks/useDefaultValue';\nimport { useFormDisabled } from '../form/hooks';\n\n// single 和 multiple 共有特性\nconst COMMON_PROPERTIES = [\n 'status',\n 'clearable',\n 'disabled',\n 'label',\n 'placeholder',\n 'readonly',\n 'suffix',\n 'suffixIcon',\n 'onPaste',\n 'onMouseenter',\n 'onMouseleave',\n];\n\nconst DEFAULT_KEYS = {\n label: 'label',\n value: 'value',\n children: 'children',\n};\n\nfunction getInputValue(value: TdSelectInputProps['value'], keys: TdSelectInputProps['keys']) {\n const iKeys = { ...DEFAULT_KEYS, ...keys };\n return isObject(value) ? value[iKeys.label] : value;\n}\n\nexport default function useSingle(props: TdSelectInputProps, context: SetupContext) {\n const { value, keys, inputValue: propsInputValue } = toRefs(props);\n const classPrefix = usePrefixClass();\n const inputRef = ref();\n const [inputValue, setInputValue] = useDefaultValue(\n propsInputValue,\n props.defaultInputValue ?? '',\n props.onInputChange,\n 'inputValue',\n );\n const renderTNode = useTNodeJSX();\n const disable = useFormDisabled();\n\n const commonInputProps = computed<SelectInputCommonProperties>(() => ({\n ...pick(props, COMMON_PROPERTIES),\n disabled: disable.value,\n }));\n\n const onInnerClear = (context: { e: MouseEvent }) => {\n context?.e?.stopPropagation();\n props.onClear?.(context);\n setInputValue('', { trigger: 'clear' });\n };\n\n const onInnerInputChange: TdInputProps['onChange'] = (value, context) => {\n if (props.allowInput) {\n setInputValue(value, { ...context, trigger: context.trigger || 'input' });\n }\n };\n\n const renderSelectSingle = (popupVisible: boolean) => {\n const singleValueDisplay = renderTNode('valueDisplay');\n const displayedValue = popupVisible && props.allowInput ? inputValue.value : getInputValue(value.value, keys.value);\n const prefixContent = [renderTNode('label'), singleValueDisplay];\n const inputProps = {\n ...commonInputProps.value,\n value: singleValueDisplay ? undefined : displayedValue,\n label: prefixContent.length ? () => prefixContent : undefined,\n autoWidth: props.autoWidth,\n readonly: !props.allowInput || props.readonly,\n placeholder: singleValueDisplay ? '' : props.placeholder,\n suffixIcon: !disable.value && props.loading ? () => <Loading loading size=\"small\" /> : props.suffixIcon,\n showClearIconOnEmpty: Boolean(\n props.clearable && (inputValue.value || displayedValue) && !disable.value && !props.readonly,\n ),\n allowTriggerBlur: props.allowInput && !props.readonly,\n ...props.inputProps,\n };\n\n // eslint-disable-next-line\n const { tips, ...slots } = context.slots;\n\n const inputClassProps = popupVisible\n ? [`${classPrefix.value}-input--focused`, `${classPrefix.value}-is-focused`, inputProps?.inputClass]\n : inputProps?.inputClass;\n\n return (\n <Input\n ref=\"inputRef\"\n style={context.attrs?.style}\n v-slots={slots}\n {...{\n onChange: onInnerInputChange,\n onClear: onInnerClear,\n onBlur: (val: InputValue, context: { e: MouseEvent }) => {\n props.onBlur?.(value.value, { ...context, inputValue: val });\n },\n onEnter: (val: InputValue, context: { e: KeyboardEvent }) => {\n props.onEnter?.(value.value, { ...context, inputValue: val });\n },\n onFocus: (val, context) => {\n props.onFocus?.(value.value, { ...context, inputValue: val });\n //删除,下面这行代码不允许恢复!不符合正常逻辑,也会造成 defaultInputValue 无效;树形结构搜索功能异常等问题\n // !popupVisible && setInputValue(getInputValue(value.value, keys.value), { ...context, trigger: 'input' }); // 聚焦时拿到value\n },\n ...inputProps,\n }}\n inputClass={inputClassProps}\n />\n );\n };\n\n return {\n inputRef,\n commonInputProps,\n onInnerClear,\n renderSelectSingle,\n };\n}\n"],"names":["label","value","children","isObject","inputValue","setInputValue","context","trigger","placeholder","allowTriggerBlur","slots","_createVNode","_mergeProps","onChange","onClear","onBlur","onEnter","onFocus","inputRef","commonInputProps","onInnerClear","renderSelectSingle"],"mappings":"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"}