UNPKG

tdesign-vue-next

Version:
1 lines 13.8 kB
{"version":3,"file":"option.mjs","sources":["../../../components/select/option.tsx"],"sourcesContent":["import { defineComponent, ref, computed, inject, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';\n\nimport props from './option-props';\nimport Checkbox from '../checkbox/index';\n\n// hooks\nimport { useRipple, useContent, useDisabled, usePrefixClass, useCommonClassName } from '@tdesign/shared-hooks';\n\nimport { getNewMultipleValue } from './utils';\nimport { selectInjectKey } from './consts';\nimport { SelectValue } from './type';\n\nexport default defineComponent({\n name: 'TOption',\n props: {\n ...props,\n createAble: Boolean,\n multiple: Boolean,\n index: Number,\n rowIndex: Number,\n trs: Map,\n scrollType: String,\n isVirtual: Boolean,\n bufferSize: Number,\n checkAll: Boolean,\n },\n emits: ['row-mounted'],\n\n setup(props, context) {\n const selectProvider = inject(selectInjectKey);\n const formDisabled = useDisabled();\n const { vnode } = getCurrentInstance();\n\n const isReachMax = computed(\n () =>\n selectProvider.value.max !== 0 &&\n selectProvider.value.max <= (selectProvider.value.selectValue as SelectValue[]).length,\n );\n const disabled = computed(\n () =>\n formDisabled.value ||\n (props.multiple && isReachMax.value && !isSelected.value && !selectProvider.value.isCheckAll),\n );\n\n const renderContent = useContent();\n\n const selectName = usePrefixClass('select');\n const { STATUS, SIZE } = useCommonClassName();\n const liRef = ref<HTMLElement>();\n\n const isHover = ref(false);\n\n const isSelected = computed(() => {\n if (selectProvider.value.isCheckAll && !props.disabled) return true;\n return !props.multiple\n ? selectProvider.value.selectValue === props.value\n : (selectProvider.value.selectValue as SelectValue[]).includes(props.value);\n });\n\n const isIndeterminate = computed(() => {\n if (!props.checkAll) return false;\n return selectProvider.value.indeterminate;\n });\n\n const classes = computed(() => [\n `${selectName.value}-option`,\n [SIZE.value[selectProvider.value.size]],\n {\n [STATUS.value.disabled]: disabled.value,\n [STATUS.value.selected]: isSelected.value,\n [`${selectName.value}-option__hover`]:\n (isHover.value || selectProvider.value.hoverIndex === props.index) && !disabled.value,\n },\n ]);\n\n const labelText = computed(() => props.label || props.value);\n\n const handleClick = (e: MouseEvent | KeyboardEvent) => {\n if (props.disabled || disabled.value) return;\n if (props.multiple) {\n handleCheckboxClick(!isSelected.value, { e });\n e.preventDefault();\n return;\n }\n\n if (props.createAble) {\n selectProvider.value.handleCreate?.(props.value);\n if (selectProvider.value.multiple) {\n selectProvider.value.handleValueChange(\n [...(selectProvider.value.selectValue as SelectValue[]), props.value],\n {\n selectedOptions: selectProvider.value.getSelectedOptions(),\n trigger: 'check',\n e,\n },\n );\n return;\n }\n }\n const selectedOptions = selectProvider.value.getSelectedOptions(props.value);\n selectProvider.value.handleValueChange(props.value, {\n option: selectedOptions?.[0],\n selectedOptions: selectedOptions,\n trigger: 'check',\n e,\n });\n selectProvider.value.handlePopupVisibleChange(false, { e });\n selectProvider.value.emitBlur(e);\n };\n\n const handleCheckboxClick = (val: boolean, context: { e: MouseEvent | KeyboardEvent }) => {\n if (props.checkAll) {\n selectProvider.value.onCheckAllChange(val);\n return;\n }\n const newValue = getNewMultipleValue(selectProvider.value.selectValue as SelectValue[], props.value);\n const selectedOptions = selectProvider.value.getSelectedOptions(newValue.value);\n\n const currentOption = selectProvider.value.getSelectedOptions(props.value)?.[0];\n selectProvider.value.handleValueChange(newValue.value, {\n option: currentOption,\n selectedOptions,\n trigger: val ? 'check' : 'uncheck',\n e: context.e,\n });\n };\n\n const renderTitle = () => {\n const vProps = vnode.props || {};\n // 如果设置了title 说明希望自己控制title的展示\n if (Reflect.has(vProps, 'title')) {\n return props.title;\n }\n if (typeof labelText.value === 'string') return labelText.value;\n\n return null;\n };\n\n // 处理虚拟滚动节点挂载\n onMounted(() => {\n const { trs, rowIndex, isVirtual } = props;\n if (isVirtual) {\n trs.set(rowIndex, liRef.value);\n context.emit('row-mounted');\n }\n });\n\n // 处理虚拟滚动节点移除\n onBeforeUnmount(() => {\n if (props.isVirtual) {\n const { trs, rowIndex } = props;\n trs.delete(rowIndex);\n }\n });\n\n useRipple(liRef);\n\n return () => {\n const optionChild = renderContent('default', 'content') || labelText.value;\n\n return (\n <li\n ref={liRef}\n class={classes.value}\n title={renderTitle()}\n onMouseenter={() => (isHover.value = true)}\n onMouseleave={() => (isHover.value = false)}\n onClick={handleClick}\n >\n {selectProvider && props.multiple ? (\n <Checkbox\n checked={isSelected.value}\n disabled={disabled.value}\n onChange={handleCheckboxClick}\n indeterminate={isIndeterminate.value}\n >\n {optionChild}\n </Checkbox>\n ) : (\n <span>{optionChild}</span>\n )}\n </li>\n );\n };\n },\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","props","_objectSpread","createAble","Boolean","multiple","index","Number","rowIndex","trs","Map","scrollType","String","isVirtual","bufferSize","checkAll","emits","setup","context","selectProvider","inject","selectInjectKey","formDisabled","useDisabled","_getCurrentInstance","getCurrentInstance","vnode","isReachMax","computed","value","max","selectValue","length","disabled","isSelected","isCheckAll","renderContent","useContent","selectName","usePrefixClass","_useCommonClassName","useCommonClassName","STATUS","SIZE","liRef","ref","isHover","includes","isIndeterminate","indeterminate","classes","concat","size","_defineProperty","selected","hoverIndex","labelText","label","handleClick","e","handleCheckboxClick","preventDefault","_selectProvider$value","_selectProvider$value2","handleCreate","handleValueChange","_toConsumableArray","selectedOptions","getSelectedOptions","trigger","option","handlePopupVisibleChange","emitBlur","val","_selectProvider$value3","onCheckAllChange","newValue","getNewMultipleValue","currentOption","renderTitle","vProps","Reflect","has","title","onMounted","set","emit","onBeforeUnmount","useRipple","optionChild","_createVNode","onMouseenter","onMouseleave","Checkbox"],"mappings":"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"}