import React, {useCallback, useMemo} from 'react'; import classNames from 'classnames'; import {useDerivedState} from '@huse/derived-state'; import Button from '@osui/button'; import Input from '@osui/input'; import {useBrandContext} from '@osui/brand-provider'; import InputNumber, {InputNumberProps} from './InputNumber'; import './inputNumber.less'; const clsPrefix = 'osui-input-number-compact'; type ValueType = string | number; export interface InputNumberCompactProps extends InputNumberProps { inputNumberClassName?: string; plusIcon?: React.ReactNode; minusIcon?: React.ReactNode; } function InputNumberCompact( { className, inputNumberClassName, defaultValue, value, onChange, step = 1, disabled, tailLabel, plusIcon, minusIcon, max, min, size, ...props }: React.PropsWithChildren>, ref: React.ForwardedRef ) { const brandContext = useBrandContext(); const initValue: T = defaultValue === undefined ? (value || 0 as T) : defaultValue; const [inputValue, setInputValue] = useDerivedState(initValue); const handleChange = useCallback( (value: any) => { setInputValue(value); onChange?.(value); }, [onChange, setInputValue] ); const handleMinus = useCallback( () => { handleChange((Number(inputValue) - Number(step)) as T); }, [handleChange, inputValue, step] ); const handlePlus = useCallback( () => { handleChange((Number(inputValue) + Number(step)) as T); }, [handleChange, inputValue, step] ); const plusDisabled = useMemo( () => { return Number(inputValue) >= Number(max); }, [inputValue, max] ); const minusDisabled = useMemo( () => { return Number(inputValue) <= Number(min); }, [inputValue, min] ); const borderRadius = brandContext.designToken?.token?.borderRadius; return ( <>