{"version":3,"file":"select.mjs","sources":["../../src/select/select.tsx"],"sourcesContent":["import { defineComponent, provide, computed, toRefs, watch, ref, nextTick } from 'vue';\nimport picker from 'lodash/pick';\nimport isArray from 'lodash/isArray';\nimport isFunction from 'lodash/isFunction';\nimport debounce from 'lodash/debounce';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport intersection from 'lodash/intersection';\n\nimport FakeArrow from '../common-components/fake-arrow';\nimport SelectInput from '../select-input';\nimport SelectPanel from './select-panel';\n\nimport props from './props';\nimport { TdSelectProps, SelectValue } from './type';\nimport { PopupVisibleChangeContext } from '../popup';\n\n// hooks\nimport { useFormDisabled } from '../form/hooks';\nimport useDefaultValue from '../hooks/useDefaultValue';\nimport useVModel from '../hooks/useVModel';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { useConfig, usePrefixClass } from '../hooks/useConfig';\nimport { selectInjectKey, getSingleContent, getMultipleContent, getNewMultipleValue } from './helper';\nimport { useSelectOptions } from './hooks/useSelectOptions';\n\nexport default defineComponent({\n  name: 'XSelect',\n  props: { ...props },\n  setup(props: TdSelectProps, { slots }) {\n    const classPrefix = usePrefixClass();\n    const disabled = useFormDisabled();\n    const renderTNodeJSX = useTNodeJSX();\n    const COMPONENT_NAME = usePrefixClass('select');\n    const { globalConfig, t } = useConfig('select');\n    const { popupVisible, inputValue, modelValue, value } = toRefs(props);\n    const [innerInputValue, setInputValue] = useDefaultValue(\n      inputValue,\n      props.defaultInputValue,\n      props.onInputChange,\n      'inputValue',\n    );\n    const [orgValue, setOrgValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n    const selectPanelRef = ref(null);\n    const selectInputRef = ref(null);\n    const keys = computed(() => ({\n      label: props.keys?.label || 'label',\n      value: props.keys?.value || 'value',\n      disabled: props.keys?.disabled || 'disabled',\n    }));\n    const { options, optionsMap, optionsList, optionsCache, displayOptions } = useSelectOptions(\n      props,\n      keys,\n      innerInputValue,\n    );\n\n    // 内部数据,格式化过的\n    const innerValue = computed(() => {\n      if (orgValue.value === undefined) {\n        return props.multiple ? [] : undefined;\n      }\n      if (props.valueType === 'object') {\n        return !props.multiple\n          ? orgValue.value[keys.value.value]\n          : (orgValue.value as SelectValue[]).map((option) => option[keys.value.value]);\n      }\n      return orgValue.value;\n    });\n    const setInnerValue: TdSelectProps['onChange'] = (newVal: SelectValue | SelectValue[], context) => {\n      if (props.valueType === 'object') {\n        const { value, label } = keys.value;\n        const getOption = (val: SelectValue) => {\n          if (val === undefined) {\n            return undefined;\n          }\n          const option = optionsMap.value.get(val);\n          return {\n            [value]: get(option, value),\n            [label]: get(option, label),\n          };\n        };\n        newVal = props.multiple ? (newVal as SelectValue[]).map((val) => getOption(val)) : getOption(newVal);\n      }\n      if (newVal === orgValue.value) return;\n      setOrgValue(newVal, {\n        selectedOptions: getSelectedOptions(newVal),\n        ...context,\n      });\n    };\n\n    const [innerPopupVisible, setInnerPopupVisible] = useDefaultValue(\n      popupVisible,\n      false,\n      (visible: boolean, context: PopupVisibleChangeContext) => {\n        props.onPopupVisibleChange?.(visible, context);\n      },\n      'popupVisible',\n    );\n\n    const placeholderText = computed(\n      () =>\n        ((!props.multiple && innerPopupVisible.value && getSingleContent(innerValue.value, optionsMap)) ||\n          props.placeholder) ??\n        t(globalConfig.value.placeholder),\n    );\n\n    // selectInput 展示值\n    const displayText = computed(() =>\n      props.multiple\n        ? getMultipleContent(innerValue.value as SelectValue[], optionsMap)\n        : getSingleContent(innerValue.value, optionsMap),\n    );\n\n    // valueDisplayParams参数\n    const valueDisplayParams = computed(() => {\n      const val =\n        props.multiple && isArray(innerValue.value)\n          ? (innerValue.value as SelectValue[]).map((value) => ({\n              value,\n              label: optionsMap.value.get(value)?.label,\n            }))\n          : innerValue.value;\n\n      const params = {\n        value: val,\n        onClose: props.multiple ? (index: number) => removeTag(index) : () => {},\n      };\n\n      if (props.minCollapsedNum && props.multiple) {\n        return {\n          ...params,\n          displayValue: val?.slice?.(0, props.minCollapsedNum),\n        };\n      }\n      return params;\n    });\n\n    const isFilterable = computed(() => {\n      return Boolean(props.filterable || globalConfig.value.filterable || isFunction(props.filter));\n    });\n\n    // 移除tag\n    const removeTag = (index: number, e?: MouseEvent) => {\n      e && e.stopPropagation();\n      const selectValue = cloneDeep(innerValue.value) as SelectValue[];\n      const value = selectValue[index];\n      selectValue.splice(index, 1);\n      setInnerValue(selectValue, { selectedOptions: getSelectedOptions(selectValue), trigger: 'tag-remove', e });\n      props.onRemove?.({\n        value: value as string | number,\n        data: optionsMap.value.get(value),\n        e,\n      });\n    };\n\n    const handleCreate = () => {\n      if (!innerInputValue.value) return;\n      props.onCreate?.(innerInputValue.value);\n      setInputValue('');\n    };\n\n    // 键盘操作逻辑\n    const hoverIndex = ref(-1);\n    const handleKeyDown = (e: KeyboardEvent) => {\n      const optionsListLength = displayOptions.value.length;\n      let newIndex = hoverIndex.value;\n      switch (e.code) {\n        case 'ArrowUp':\n          e.preventDefault();\n          if (hoverIndex.value === -1) {\n            newIndex = 0;\n          } else if (hoverIndex.value === 0) {\n            newIndex = optionsListLength - 1;\n          } else {\n            newIndex--;\n          }\n          if (optionsList.value[newIndex]?.disabled) {\n            newIndex--;\n          }\n          hoverIndex.value = newIndex;\n          break;\n        case 'ArrowDown':\n          e.preventDefault();\n          if (hoverIndex.value === -1 || hoverIndex.value === optionsListLength - 1) {\n            newIndex = 0;\n          } else {\n            newIndex++;\n          }\n          if (optionsList.value[newIndex]?.disabled) {\n            newIndex++;\n          }\n          hoverIndex.value = newIndex;\n          break;\n        case 'Enter':\n          if (hoverIndex.value === -1) break;\n          if (!innerPopupVisible.value) {\n            setInnerPopupVisible(true, { e });\n            break;\n          }\n          if (!props.multiple) {\n            const selectedOptions = getSelectedOptions(optionsList.value[hoverIndex.value].value);\n            setInnerValue(optionsList.value[hoverIndex.value].value, {\n              option: selectedOptions?.[0],\n              selectedOptions: getSelectedOptions(optionsList.value[hoverIndex.value].value),\n              trigger: 'check',\n              e,\n            });\n            setInnerPopupVisible(false, { e });\n          } else {\n            if (hoverIndex.value === -1) return;\n            const optionValue = optionsList.value[hoverIndex.value]?.value;\n            if (!optionValue) return;\n            const newValue = getNewMultipleValue(innerValue.value, optionValue);\n            const selectedOptions = getSelectedOptions(newValue.value);\n            setInnerValue(newValue.value, {\n              option: selectedOptions.find((v) => v.value == optionValue),\n              selectedOptions,\n              trigger: newValue.isCheck ? 'check' : 'uncheck',\n              e,\n            });\n          }\n          break;\n        case 'Escape':\n          setInnerPopupVisible(false, { e });\n          break;\n      }\n    };\n\n    const popupContentRef = computed(() => selectInputRef.value?.popupRef.getOverlay() as HTMLElement);\n\n    /**\n     * 可选选项的列表\n     * 排除已禁用和全选的选项\n     */\n    const optionalList = computed(() =>\n      optionsList.value.filter((item) => {\n        return !item.disabled && !item['check-all'] && !item.checkAll;\n      }),\n    );\n\n    const getSelectedOptions = (selectValue: SelectValue[] | SelectValue = innerValue.value) => {\n      return optionsList.value.filter((option) => {\n        if (option.checkAll) return;\n        if (isArray(selectValue)) return selectValue.includes(option.value);\n        return selectValue === option.value;\n      });\n    };\n\n    const onCheckAllChange = (checked: boolean) => {\n      if (!props.multiple) return;\n      const value = checked ? optionalList.value.map((option) => option.value) : [];\n      setInnerValue(value, { selectedOptions: getSelectedOptions(value), trigger: checked ? 'check' : 'clear' });\n    };\n\n    // 已选的长度\n    const intersectionLen = computed<number>(() => {\n      const values = optionalList.value.map((item) => item.value);\n      const n = intersection(innerValue.value, values);\n      return n.length;\n    });\n\n    // 全选\n    const isCheckAll = computed<boolean>(() => {\n      return intersectionLen.value === optionalList.value.length;\n    });\n\n    // 半选\n    const indeterminate = computed<boolean>(() => !isCheckAll.value && intersectionLen.value !== 0);\n\n    const SelectProvide = computed(() => ({\n      max: props.max,\n      multiple: props.multiple,\n      hoverIndex: hoverIndex.value,\n      selectValue: innerValue.value,\n      reserveKeyword: props.reserveKeyword,\n      handleValueChange: setInnerValue,\n      handlerInputChange: setInputValue,\n      handlePopupVisibleChange: setInnerPopupVisible,\n      handleCreate,\n      size: props.size,\n      popupContentRef,\n      indeterminate: indeterminate.value,\n      isCheckAll: isCheckAll.value,\n      onCheckAllChange,\n      getSelectedOptions,\n      displayOptions: displayOptions.value,\n    }));\n\n    provide(selectInjectKey, SelectProvide);\n\n    const checkValueInvalid = () => {\n      // 参数类型检测与修复\n      if (!props.multiple && isArray(orgValue.value)) {\n        setOrgValue(undefined, { selectedOptions: [], trigger: 'default' });\n      }\n      if (props.multiple && !isArray(orgValue.value)) {\n        setOrgValue([], { selectedOptions: [], trigger: 'default' });\n      }\n    };\n    const handleSearch = debounce((value: string, { e }: { e: KeyboardEvent }) => {\n      props.onSearch?.(`${value}`, { e });\n    }, 300);\n\n    const addCache = (val: SelectValue) => {\n      if (props.multiple) {\n        const newCache = [];\n        for (const item of (val as SelectValue[]) || []) {\n          const option = optionsMap.value.get(item);\n          if (option) {\n            newCache.push(option);\n          }\n        }\n        optionsCache.value = Array.from(new Set([...newCache, ...optionsCache.value]));\n      } else {\n        const option = optionsMap.value.get(val);\n        if (option) {\n          optionsCache.value = Array.from(new Set([option, ...optionsCache.value]));\n        }\n      }\n    };\n\n    watch(\n      orgValue,\n      (val) => {\n        checkValueInvalid();\n        nextTick(() => {\n          addCache(val);\n        });\n      },\n      {\n        immediate: true,\n      },\n    );\n    watch(\n      () => props.multiple,\n      () => {\n        checkValueInvalid();\n      },\n    );\n    watch(innerPopupVisible, (value) => {\n      if (value) {\n        // 显示\n        hoverIndex.value = -1;\n      } else {\n        // 隐藏\n        // eslint-disable-next-line no-lonely-if\n        if (innerInputValue.value) {\n          setInputValue('');\n        }\n      }\n    });\n\n    // 列表展开时定位置选中项\n    const updateScrollTop = (content: HTMLDivElement) => {\n      if (!selectPanelRef.value) {\n        return;\n      }\n      const firstSelectedNode: HTMLDivElement = (selectPanelRef.value?.innerRef as HTMLDivElement)?.querySelector(\n        `.${classPrefix.value}-is-selected`,\n      );\n      // 此处需要等待渲染后进行计算\n      nextTick(() => {\n        if (firstSelectedNode && content) {\n          const { paddingBottom } = getComputedStyle(firstSelectedNode);\n          const { marginBottom } = getComputedStyle(content);\n          const elementBottomHeight = parseInt(paddingBottom, 10) + parseInt(marginBottom, 10);\n          // 小于0时不需要特殊处理，会被设为0\n          const updateValue =\n            firstSelectedNode.offsetTop -\n            content.offsetTop -\n            (content.clientHeight - firstSelectedNode.clientHeight) +\n            elementBottomHeight;\n          // eslint-disable-next-line no-param-reassign\n          content.scrollTop = updateValue;\n        }\n      });\n    };\n    provide('updateScrollTop', updateScrollTop);\n    return () => {\n      const { overlayClassName, ...restPopupProps } = (props.popupProps || {}) as TdSelectProps['popupProps'];\n      return (\n        <div class={`${COMPONENT_NAME.value}__wrap`}>\n          <SelectInput\n            {...{\n              autoWidth: props.autoWidth,\n              readonly: props.readonly,\n              borderless: props.borderless,\n              multiple: props.multiple,\n              clearable: props.clearable,\n              loading: props.loading,\n              status: props.status,\n              tips: props.tips,\n              minCollapsedNum: props.minCollapsedNum,\n              autofocus: props.autofocus,\n              suffix: props.suffix,\n            }}\n            ref={selectInputRef}\n            class={COMPONENT_NAME.value}\n            value={displayText.value}\n            disabled={disabled.value}\n            popupVisible={innerPopupVisible.value}\n            inputValue={innerPopupVisible.value ? innerInputValue.value : ''}\n            placeholder={`${placeholderText.value}`}\n            allowInput={isFilterable.value}\n            collapsed-items={props.collapsedItems}\n            inputProps={{\n              size: props.size,\n              autofocus: props.autofocus,\n              ...(props.inputProps as TdSelectProps['inputProps']),\n              onkeydown: handleKeyDown,\n            }}\n            tagInputProps={{\n              size: props.size,\n              ...(props.tagInputProps as TdSelectProps['tagInputProps']),\n            }}\n            onTagChange={(val, ctx) => {\n              removeTag(ctx.index);\n            }}\n            tagProps={{ ...(props.tagProps as TdSelectProps['tagProps']) }}\n            popupProps={{\n              overlayClassName: [`${COMPONENT_NAME.value}__dropdown`, overlayClassName],\n              ...restPopupProps,\n            }}\n            label={props.label}\n            prefixIcon={props.prefixIcon}\n            suffix={props.suffix}\n            suffixIcon={() => {\n              if (props.suffixIcon || slots.suffixIcon) {\n                return renderTNodeJSX('suffixIcon');\n              }\n\n              return (\n                props.showArrow && (\n                  <FakeArrow\n                    overlayClassName={`${COMPONENT_NAME.value}__right-icon`}\n                    isActive={innerPopupVisible.value}\n                  />\n                )\n              );\n            }}\n            valueDisplay={() =>\n              renderTNodeJSX('valueDisplay', {\n                params: valueDisplayParams.value,\n              })\n            }\n            onPopupVisibleChange={(val: boolean, context) => {\n              setInnerPopupVisible(val, context);\n            }}\n            onInputChange={(value, context) => {\n              if (value) {\n                setInnerPopupVisible(true, { e: context.e as KeyboardEvent });\n              }\n              setInputValue(value);\n              handleSearch(`${value}`, { e: context.e as KeyboardEvent });\n            }}\n            onClear={({ e }) => {\n              setInnerValue(props.multiple ? [] : undefined, {\n                option: null,\n                selectedOptions: getSelectedOptions(props.multiple ? [] : undefined),\n                trigger: 'clear',\n                e,\n              });\n              props.onClear?.({ e });\n            }}\n            onEnter={(inputValue, { e }) => {\n              props.onEnter?.({ inputValue: `${innerInputValue.value}`, e, value: innerValue.value });\n              handleCreate();\n            }}\n            onBlur={(inputValue, { e }) => {\n              props.onBlur?.({ e, value: innerValue.value });\n            }}\n            onFocus={(inputValue, { e }) => {\n              props.onFocus?.({ e, value: innerValue.value });\n            }}\n            {...(props.selectInputProps as TdSelectProps['selectInputProps'])}\n            v-slots={{\n              label: slots.label,\n              prefixIcon: slots.prefixIcon,\n              suffix: slots.suffix,\n              panel: () => (\n                <SelectPanel\n                  ref={selectPanelRef}\n                  {...picker(props, [\n                    'size',\n                    'multiple',\n                    'empty',\n                    'loading',\n                    'loadingText',\n                    'filterable',\n                    'creatable',\n                    'panelTopContent',\n                    'panelBottomContent',\n                    'filter',\n                    'scroll',\n                  ])}\n                  options={options.value}\n                  inputValue={innerInputValue.value}\n                  v-slots={slots}\n                />\n              ),\n              collapsedItems: slots.collapsedItems,\n            }}\n          />\n        </div>\n      );\n    };\n  },\n});\n"],"names":["name","props","setup","innerInputValue","setInputValue","orgValue","setOrgValue","label","value","disabled","get","innerPopupVisible","setInnerPopupVisible","onClose","isFunction","e","cloneDeep","selectValue","selectedOptions","trigger","newIndex","setInnerValue","option","isArray","handleValueChange","handlerInputChange","handlePopupVisibleChange","handleCreate","popupContentRef","onCheckAllChange","getSelectedOptions","provide","newCache","_iterator","watch","checkValueInvalid","nextTick","immediate","hoverIndex","restPopupProps","_createVNode","_mergeProps","onkeydown","removeTag","handleSearch","inputValue"],"mappings":"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"}