xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 9.99 kB
Source Map (JSON)
{"version":3,"file":"option.mjs","sources":["../../src/select/option.tsx"],"sourcesContent":["import { defineComponent, ref, computed, inject, onMounted, onBeforeUnmount } from 'vue';\n\nimport props from './option-props';\nimport Checkbox from '../checkbox/index';\n\n// hooks\nimport { useFormDisabled } from '../form/hooks';\nimport useRipple from '../hooks/useRipple';\nimport { useContent } from '../hooks/tnode';\nimport { usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport { selectInjectKey, getNewMultipleValue } from './helper';\nimport { SelectValue } from './type';\n\nexport default defineComponent({\n name: 'XOption',\n\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 = useFormDisabled();\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 && !isSelected.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 e.stopPropagation();\n\n if (props.createAble) {\n selectProvider.value.handleCreate?.(props.value);\n if (selectProvider.value.multiple) {\n (selectProvider.value.selectValue as SelectValue[]).push(props.value);\n selectProvider.value.handleValueChange(selectProvider.value.selectValue, {\n selectedOptions: selectProvider.value.getSelectedOptions(),\n trigger: 'check',\n e,\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 };\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 selectProvider.value.handleValueChange(newValue.value, {\n option: selectedOptions.find((v) => v.value === props.value),\n selectedOptions,\n trigger: val ? 'check' : 'uncheck',\n e: context.e,\n });\n if (!selectProvider.value.reserveKeyword) {\n selectProvider.value.handlerInputChange('');\n }\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={props.title || `${labelText.value}`}\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":["_isVNode","name","props","createAble","multiple","index","rowIndex","trs","scrollType","isVirtual","bufferSize","checkAll","setup","handleCheckboxClick","e","selectedOptions","trigger","selectProvider","option","onMounted","context","onBeforeUnmount","_createVNode"],"mappings":"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"}