{"version":3,"file":"useMultiple.mjs","sources":["../../../../components/select-input/hooks/useMultiple.tsx"],"sourcesContent":["import { SetupContext, computed, ref, toRefs, Ref } from 'vue';\nimport { isObject } from 'lodash-es';\nimport { TdSelectInputProps, SelectInputChangeContext, SelectInputKeys } from '../type';\nimport { SelectInputCommonProperties } from '../types';\nimport TagInput, { TagInputValue, TagInputProps } from '../../tag-input';\nimport Loading from '../../loading';\nimport { useDisabled, useReadonly, usePrefixClass, useDefaultValue, useEventForward } from '@tdesign/shared-hooks';\n\nimport { PopupInstanceFunctions } from '../../popup';\n\nexport interface RenderSelectMultipleParams {\n  commonInputProps: SelectInputCommonProperties;\n  onInnerClear: (context: { e: MouseEvent }) => void;\n  popupVisible: boolean;\n  allowInput: boolean;\n}\n\nconst DEFAULT_KEYS = {\n  label: 'label',\n  key: 'key',\n  children: 'children',\n};\n\nexport function useMultiple(props: TdSelectInputProps, context: SetupContext, popupRef: Ref<PopupInstanceFunctions>) {\n  const { inputValue } = toRefs(props);\n  const classPrefix = usePrefixClass();\n  const tagInputRef = ref();\n  const isMultipleFocus = ref(props.autofocus);\n  const [tInputValue, setTInputValue] = useDefaultValue(\n    inputValue,\n    props.defaultInputValue,\n    props.onInputChange,\n    'inputValue',\n  );\n  const disable = useDisabled();\n  const isReadonly = useReadonly();\n\n  const iKeys = computed<SelectInputKeys>(() => ({ ...DEFAULT_KEYS, ...props.keys }));\n  const tags = computed<TagInputValue>(() => {\n    if (!(props.value instanceof Array)) {\n      // TODO: replace isObject as isPlainObject\n      return isObject(props.value) ? [(props.value as Record<string, any>)[iKeys.value.label]] : [props.value];\n    }\n    return props.value.map((item) => (isObject(item) ? (item as Record<string, any>)[iKeys.value.label] : item));\n  });\n\n  const tPlaceholder = computed<string>(() => (!tags.value || !tags.value.length ? props.placeholder : ''));\n\n  const onTagInputChange = (val: TagInputValue, context: SelectInputChangeContext) => {\n    // 避免触发浮层的显示或隐藏\n    if (context.trigger === 'tag-remove') {\n      context.e?.stopPropagation();\n    }\n    props.onTagChange?.(val, context);\n  };\n\n  const onInputChange: TagInputProps['onInputChange'] = (val, ctx) => {\n    if (ctx.trigger === 'enter' || ctx.trigger === 'blur') return;\n    setTInputValue(val, { trigger: ctx.trigger, e: ctx.e });\n  };\n\n  /**\n   * 筛选器统一特性：\n   * 1. 筛选器按下回车时不清空输入框;\n   * 2. SelectInput 的失焦不等于 TagInput。如点击下拉面板时，TagInput 失去焦点，但 SelectInput 依旧保持聚焦，允许继续选择。\n   */\n  const onBlur: TagInputProps['onBlur'] = (val, ctx) => {\n    const overlayState = popupRef.value?.getOverlayState();\n    if (overlayState?.hover) return;\n    isMultipleFocus.value = false;\n    props.onBlur?.(props.value, { ...ctx, tagInputValue: val });\n  };\n\n  const onFocus: TagInputProps['onFocus'] = (val, ctx) => {\n    const overlayState = popupRef.value?.getOverlayState();\n    if (isMultipleFocus.value || overlayState?.hover) return;\n    isMultipleFocus.value = true;\n    const params = { ...ctx, tagInputValue: val };\n    props.onFocus?.(props.value, params);\n  };\n\n  const onEnter: TagInputProps['onEnter'] = (val, ctx) => {\n    const params = { ...ctx, tagInputValue: val };\n    props.onEnter?.(props.value, params);\n  };\n\n  const renderSelectMultiple = (p: RenderSelectMultipleParams) => {\n    const tagInputProps = {\n      ...p.commonInputProps,\n      tagProps: props.tagProps,\n      label: props.label,\n      autoWidth: props.autoWidth,\n      readonly: isReadonly.value,\n      placeholder: tPlaceholder.value,\n      minCollapsedNum: props.minCollapsedNum,\n      collapsedItems: props.collapsedItems,\n      tag: props.tag,\n      value: tags.value,\n      valueDisplay: props.valueDisplay,\n      inputValue: p.popupVisible && p.allowInput ? tInputValue.value : '',\n      inputProps: {\n        readonly: !props.allowInput || isReadonly.value,\n        inputClass: {\n          [`${classPrefix.value}-input--focused`]: p.popupVisible,\n        },\n        ...props.inputProps,\n      },\n      suffixIcon: !disable.value && props.loading ? () => <Loading loading size=\"small\" /> : props.suffixIcon,\n      ...props.tagInputProps,\n    };\n\n    const tagInputEvents = useEventForward(tagInputProps, {\n      onInputChange: onInputChange,\n      onChange: onTagInputChange,\n      onClear: p.onInnerClear,\n      onBlur: onBlur,\n      onEnter: onEnter,\n      onFocus: onFocus,\n    });\n\n    const { tips: _tips, ...slots } = context.slots;\n    return <TagInput ref={tagInputRef} v-slots={slots} {...tagInputEvents.value} />;\n  };\n\n  return {\n    tags,\n    tPlaceholder,\n    tagInputRef,\n    isMultipleFocus,\n    multipleInputValue: tInputValue,\n    renderSelectMultiple,\n  };\n}\n"],"names":["DEFAULT_KEYS","label","key","children","useMultiple","props","context","popupRef","_toRefs","toRefs","inputValue","classPrefix","usePrefixClass","tagInputRef","ref","isMultipleFocus","autofocus","_useDefaultValue","useDefaultValue","defaultInputValue","onInputChange","_useDefaultValue2","_slicedToArray","tInputValue","setTInputValue","disable","useDisabled","isReadonly","useReadonly","iKeys","computed","_objectSpread","keys","tags","value","Array","isObject","map","item","tPlaceholder","length","placeholder","onTagInputChange","val","_props$onTagChange","trigger","_context2$e","e","stopPropagation","onTagChange","call","ctx","onBlur","_popupRef$value","_props$onBlur","overlayState","getOverlayState","hover","tagInputValue","onFocus","_popupRef$value2","_props$onFocus","params","onEnter","_props$onEnter","renderSelectMultiple","p","tagInputProps","commonInputProps","tagProps","autoWidth","readonly","minCollapsedNum","collapsedItems","tag","valueDisplay","popupVisible","allowInput","inputProps","inputClass","_defineProperty","concat","suffixIcon","loading","_createVNode","Loading","tagInputEvents","useEventForward","onChange","onClear","onInnerClear","_context$slots","slots","_tips","tips","_objectWithoutProperties","_excluded","TagInput","_mergeProps","multipleInputValue"],"mappings":"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"}