{"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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"}