xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 17.7 kB
Source Map (JSON)
{"version":3,"file":"useInputNumber.mjs","sources":["../../src/input-number/useInputNumber.tsx"],"sourcesContent":["import { computed, ref, toRefs, watch } from 'vue';\nimport useCommonClassName from '../hooks/useCommonClassName';\nimport useVModel from '../hooks/useVModel';\nimport { InputNumberValue, TdInputNumberProps } from './type';\n// 计算逻辑,统一到 common 中,方便各框架复用(如超过 16 位的大数处理)\nimport {\n canAddNumber,\n canInputNumber,\n canReduceNumber,\n getMaxOrMinValidateResult,\n getStepValue,\n formatThousandths,\n canSetValue,\n formatUnCompleteNumber,\n largeNumberToFixed,\n} from '../_common/js/input-number/number';\nimport { useFormDisabled } from '../form/hooks';\nimport { TdInputProps } from '../input';\n\n/**\n * 独立一个组件 Hook 方便用户直接使用相关逻辑 自定义任何样式的数字输入框\n */\nexport default function useInputNumber(props: TdInputNumberProps) {\n const { classPrefix, sizeClassNames, statusClassNames } = 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 = useFormDisabled();\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 sizeClassNames[props.size],\n {\n [statusClassNames.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 { [statusClassNames.disabled]: disabledReduce.value },\n ]);\n\n const addClasses = computed(() => [\n `${classPrefix.value}-input-number__increase`,\n { [statusClassNames.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 if (decimalPlaces !== undefined && largeNumberToFixed(inputValue, decimalPlaces, largeNumber) !== val) {\n setTValue(userInput.value, { 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 || props.readonly) 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 || props.readonly) 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: TdInputProps['onChange'] = (inputValue, { e }) => {\n // 千分位处理\n const val = formatThousandths(inputValue);\n\n if (!canInputNumber(val, props.largeNumber)) return;\n\n userInput.value = val;\n\n if (props.largeNumber) {\n setTValue(val, { type: 'input', e });\n return;\n }\n\n if (canSetValue(String(val), Number(tValue.value))) {\n const newVal = val === '' ? undefined : Number(val);\n setTValue(newVal, { type: 'input', e });\n }\n };\n\n const handleBlur = (value: string, ctx: { e: FocusEvent }) => {\n const { largeNumber, max, min, decimalPlaces } = props;\n if (!props.allowInputOverLimit && tValue.value !== undefined) {\n const r = getMaxOrMinValidateResult({ value: tValue.value, largeNumber, max, min });\n if (r === 'below-minimum') {\n setTValue(min, { type: 'blur', e: ctx.e });\n return;\n }\n if (r === 'exceed-maximum') {\n setTValue(max, { type: 'blur', e: ctx.e });\n return;\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;\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 (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 };\n}\n"],"names":["tValue","setTValue","isToFixed","inputStr","fixedNumber","watch","userInput","type","e","immediate","largeNumber","max","min","error","op","value","overLimit","newValue","decimalPlaces","ArrowUp","ArrowDown","keyEvent","inputRef","onBlur","onFocus","onKeydown","onKeyup","onKeypress","onEnter","onClick","classPrefix","wrapClasses","reduceClasses","addClasses","tDisabled","isError","listeners","focus","blur","handleReduce","handleAdd","onInnerInputChange"],"mappings":"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"}