UNPKG

tdesign-vue-next

Version:
1 lines 26.6 kB
{"version":3,"file":"useInputNumber.mjs","sources":["../../../../components/input-number/hooks/useInputNumber.tsx"],"sourcesContent":["import { computed, ComputedRef, ref, toRefs, watch } from 'vue';\nimport { useVModel, useReadonly, useDisabled, useCommonClassName } from '@tdesign/shared-hooks';\n\nimport { InputNumberValue, TdInputNumberProps } from '../type';\n\n// 计算逻辑,统一到 common 中,方便各框架复用(如超过 16 位的大数处理)\nimport {\n canAddNumber,\n canInputNumber,\n canReduceNumber,\n getMaxOrMinValidateResult,\n getStepValue,\n formatThousandths,\n canSetValue,\n formatUnCompleteNumber,\n largeNumberToFixed,\n} from '@tdesign/common-js/input-number/number';\n\nimport { StrInputProps } from '../../input';\n\n/**\n * 独立一个组件 Hook 方便用户直接使用相关逻辑 自定义任何样式的数字输入框\n */\nexport default function useInputNumber(props: TdInputNumberProps) {\n const { classPrefix, SIZE, STATUS } = useCommonClassName();\n const { value, modelValue, max, min } = toRefs(props);\n // 统一处理受控、非受控、语法糖 v-model 等\n const [tValue, setTValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n const inputRef = ref();\n const userInput = ref('');\n\n const tDisabled = useDisabled() as ComputedRef<boolean>;\n\n const isReadonly = useReadonly();\n\n const isError = ref<'exceed-maximum' | 'below-minimum'>();\n\n const disabledReduce = computed(\n () => tDisabled.value || !canReduceNumber(tValue.value, props.min, props.largeNumber),\n );\n\n const disabledAdd = computed(() => tDisabled.value || !canAddNumber(tValue.value, props.max, props.largeNumber));\n\n const wrapClasses = computed(() => [\n `${classPrefix.value}-input-number`,\n SIZE.value[props.size],\n {\n [STATUS.value.disabled]: tDisabled.value,\n [`${classPrefix.value}-is-controls-right`]: props.theme === 'column',\n [`${classPrefix.value}-input-number--${props.theme}`]: props.theme,\n [`${classPrefix.value}-input-number--auto-width`]: props.autoWidth,\n },\n ]);\n\n const reduceClasses = computed(() => [\n `${classPrefix.value}-input-number__decrease`,\n { [STATUS.value.disabled]: disabledReduce.value },\n ]);\n\n const addClasses = computed(() => [\n `${classPrefix.value}-input-number__increase`,\n { [STATUS.value.disabled]: disabledAdd.value },\n ]);\n\n const getUserInput = (value: InputNumberValue) => {\n if (!value && value !== 0) return '';\n let inputStr = value || value === 0 ? String(value) : '';\n if (!inputRef.value?.inputRef?.contains(document.activeElement)) {\n const num = formatUnCompleteNumber(inputStr, {\n decimalPlaces: props.decimalPlaces,\n largeNumber: props.largeNumber,\n isToFixed: true,\n });\n inputStr = num || num === 0 ? String(num) : '';\n if (props.format) {\n inputStr = String(props.format(value, { fixedNumber: inputStr }));\n }\n }\n return inputStr;\n };\n\n watch(\n tValue,\n (val) => {\n const { largeNumber, decimalPlaces } = props;\n const inputValue = [undefined, null].includes(val) ? '' : String(val);\n // userInput.value 为非合法数字,则表示用户正在输入,此时无需处理\n if (!largeNumber && !Number.isNaN(userInput.value)) {\n if (parseFloat(userInput.value) !== val) {\n userInput.value = getUserInput(inputValue);\n }\n const fixedNumber = Number(largeNumberToFixed(inputValue, decimalPlaces, largeNumber));\n if (\n decimalPlaces !== undefined &&\n ![undefined, null].includes(val) &&\n Number(fixedNumber) !== Number(tValue.value)\n ) {\n setTValue(fixedNumber, { type: 'props', e: undefined });\n }\n }\n if (largeNumber) {\n userInput.value = getUserInput(inputValue);\n\n if (decimalPlaces !== undefined && largeNumberToFixed(inputValue, decimalPlaces, largeNumber) !== val) {\n let completeValue = inputValue;\n if (!inputRef.value?.inputRef?.contains(document.activeElement)) {\n // isToFixed为true 只可能是string\n completeValue = formatUnCompleteNumber(completeValue, {\n decimalPlaces: props.decimalPlaces,\n largeNumber: props.largeNumber,\n isToFixed: true,\n }) as string;\n }\n setTValue(completeValue, { type: 'props', e: undefined });\n }\n }\n },\n { immediate: true },\n );\n\n watch(\n [tValue, max, min],\n () => {\n // @ts-ignore 没有输入完成,则无需校验\n if ([undefined, '', null].includes(tValue.value)) return;\n const { max, min, largeNumber } = props;\n const error = getMaxOrMinValidateResult({\n value: tValue.value,\n largeNumber,\n max,\n min,\n });\n isError.value = error;\n props.onValidate?.({ error });\n },\n { immediate: true },\n );\n\n const handleStepValue = (op: 'add' | 'reduce') => {\n const newValue = getStepValue({\n op,\n step: props.step,\n max: props.max,\n min: props.min,\n lastValue: tValue.value,\n largeNumber: props.largeNumber,\n });\n const { largeNumber, max, min } = props;\n const overLimit = getMaxOrMinValidateResult({\n value: newValue,\n largeNumber,\n max,\n min,\n });\n return {\n overLimit,\n newValue,\n };\n };\n\n const handleReduce = (e: KeyboardEvent | MouseEvent) => {\n if (disabledReduce.value || isReadonly.value) return;\n const r = handleStepValue('reduce');\n if (r.overLimit && !props.allowInputOverLimit) return;\n setTValue(r.newValue, { type: 'reduce', e });\n };\n\n const handleAdd = (e: KeyboardEvent | MouseEvent) => {\n if (disabledAdd.value || isReadonly.value) return;\n const r = handleStepValue('add');\n if (r.overLimit && !props.allowInputOverLimit) return;\n setTValue(r.newValue, { type: 'add', e });\n };\n\n const onInnerInputChange: StrInputProps['onChange'] = (inputValue, { e }) => {\n // 千分位处理\n const val = formatThousandths(inputValue);\n if (!canInputNumber(val, props.largeNumber)) return;\n\n // 先处理小数位数限制,然后再更新显示值和实际值\n let processedVal = val;\n if (props.decimalPlaces !== undefined && val !== '' && val.includes('.')) {\n const parts = val.split('.');\n // 获取实际小数位数限制\n const decimalLimit = typeof props.decimalPlaces === 'number' ? props.decimalPlaces : props.decimalPlaces.places;\n\n if (parts[1] && parts[1].length > decimalLimit) {\n // 直接截断为指定小数位数\n processedVal = `${parts[0]}.${parts[1].substring(0, decimalLimit)}`;\n }\n }\n\n // 更新显示值\n userInput.value = processedVal;\n\n if (props.largeNumber) {\n setTValue(processedVal, { type: 'input', e });\n return;\n }\n\n // 当处理后的值与当前值不同时,才更新\n const newNumber = processedVal === '' ? undefined : Number(processedVal);\n if (canSetValue(processedVal, Number(tValue.value))) {\n setTValue(newNumber, { type: 'input', e });\n }\n };\n const isValidNumber = (val: any) => {\n return typeof val === 'number' && !Number.isNaN(val);\n };\n const handleBlur = (value: string, ctx: { e: FocusEvent }) => {\n const { largeNumber, max, min, decimalPlaces } = props;\n if (!props.allowInputOverLimit) {\n // 当值为 undefined 或 null 且最小值不为默认值 -Infinity 时,设置为最小值\n if ([undefined, null].includes(tValue.value) && min !== -Infinity) {\n // 空值不处理,只在非法输入时修正\n if (isValidNumber(tValue.value) && tValue.value < min) {\n setTValue(min, { type: 'blur', e: ctx.e });\n props.onBlur?.(min, ctx);\n } else {\n props.onBlur?.(tValue.value, ctx);\n }\n\n return;\n }\n // 当值不为 undefined 时,进行范围检查\n if (tValue.value !== undefined) {\n const r = getMaxOrMinValidateResult({ value: tValue.value, largeNumber, max, min });\n if (r === 'below-minimum') {\n if (isValidNumber(tValue.value) && tValue.value < min) {\n setTValue(min, { type: 'blur', e: ctx.e });\n props.onBlur?.(min, ctx);\n } else {\n props.onBlur?.(tValue.value, ctx);\n }\n return;\n }\n if (r === 'exceed-maximum') {\n setTValue(max, { type: 'blur', e: ctx.e });\n props.onBlur?.(max, ctx);\n return;\n }\n }\n }\n const newValue = formatUnCompleteNumber(value, {\n decimalPlaces,\n largeNumber,\n });\n userInput.value = getUserInput(newValue);\n\n if (newValue !== tValue.value) {\n setTValue(newValue, { type: 'blur', e: ctx.e });\n }\n props.onBlur?.(newValue, ctx);\n };\n\n const handleFocus = (value: string, ctx: { e: FocusEvent }) => {\n userInput.value = tValue.value || tValue.value === 0 ? String(tValue.value) : '';\n props.onFocus?.(value, ctx);\n };\n\n const handleKeydown = (value: string, ctx: { e: KeyboardEvent }) => {\n if (tDisabled.value) return;\n const { e } = ctx;\n const keyEvent = {\n ArrowUp: handleAdd,\n ArrowDown: handleReduce,\n };\n const code = (e.code || e.key) as keyof typeof keyEvent;\n if (keyEvent[code] !== undefined) {\n keyEvent[code](e);\n }\n props.onKeydown?.(value, ctx);\n };\n\n const handleKeyup = (value: string, ctx: { e: KeyboardEvent }) => {\n props.onKeyup?.(value, ctx);\n };\n\n const handleKeypress = (value: string, ctx: { e: KeyboardEvent }) => {\n props.onKeypress?.(value, ctx);\n };\n\n const handleEnter = (value: string, ctx: { e: KeyboardEvent }) => {\n userInput.value = getUserInput(value);\n const newValue = formatUnCompleteNumber(value, {\n decimalPlaces: props.decimalPlaces,\n largeNumber: props.largeNumber,\n });\n if (newValue !== value && String(newValue) !== value) {\n setTValue(newValue, { type: 'enter', e: ctx.e });\n }\n props.onEnter?.(newValue, ctx);\n };\n\n const focus = () => {\n if (tDisabled.value || isReadonly.value) return;\n (inputRef.value as any).focus();\n };\n\n const blur = () => {\n (inputRef.value as any).blur();\n };\n\n const listeners = {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onKeydown: handleKeydown,\n onKeyup: handleKeyup,\n onKeypress: handleKeypress,\n onEnter: handleEnter,\n onClick: focus,\n };\n\n return {\n classPrefix,\n wrapClasses,\n reduceClasses,\n addClasses,\n tDisabled,\n isError,\n listeners,\n userInput,\n tValue,\n inputRef,\n focus,\n blur,\n handleReduce,\n handleAdd,\n onInnerInputChange,\n isReadonly,\n };\n}\n"],"names":["useInputNumber","props","_useCommonClassName","useCommonClassName","classPrefix","SIZE","STATUS","_toRefs","toRefs","value","modelValue","max","min","_useVModel","useVModel","defaultValue","onChange","_useVModel2","_slicedToArray","tValue","setTValue","inputRef","ref","userInput","tDisabled","useDisabled","isReadonly","useReadonly","isError","disabledReduce","computed","canReduceNumber","largeNumber","disabledAdd","canAddNumber","wrapClasses","concat","size","_defineProperty","disabled","theme","autoWidth","reduceClasses","addClasses","getUserInput","_inputRef$value","inputStr","String","contains","document","activeElement","num","formatUnCompleteNumber","decimalPlaces","isToFixed","format","fixedNumber","watch","val","inputValue","includes","Number","isNaN","parseFloat","largeNumberToFixed","type","e","_inputRef$value2","completeValue","immediate","_props$onValidate","error","getMaxOrMinValidateResult","onValidate","call","handleStepValue","op","newValue","getStepValue","step","lastValue","overLimit","handleReduce","r","allowInputOverLimit","handleAdd","onInnerInputChange","_ref4","formatThousandths","canInputNumber","processedVal","parts","split","decimalLimit","places","length","substring","newNumber","canSetValue","isValidNumber","handleBlur","ctx","_props$onBlur6","Infinity","_props$onBlur","onBlur","_props$onBlur2","_props$onBlur3","_props$onBlur4","_props$onBlur5","handleFocus","_props$onFocus","onFocus","handleKeydown","_props$onKeydown","keyEvent","ArrowUp","ArrowDown","code","key","onKeydown","handleKeyup","_props$onKeyup","onKeyup","handleKeypress","_props$onKeypress","onKeypress","handleEnter","_props$onEnter","onEnter","focus","blur","listeners","onClick"],"mappings":"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"}