import React, { useCallback } from 'react' import { useTranslation } from 'react-i18next' import { clampTankLiters } from '../utils/tankCapacity.js' import { formatTankLiters, parseAppDecimalOrZero } from '../utils/numberFormat.js' interface TankLiterInputProps { id?: string label: string value: string onChange: (value: string) => void maxLiters?: number disabled?: boolean titleTooltip?: string } function parseInputLiters(value: string): number { if (!value.trim()) return 0 return parseAppDecimalOrZero(value) } export default function TankLiterInput({ id, label, value, onChange, maxLiters, disabled = false, titleTooltip }: TankLiterInputProps) { const { t } = useTranslation() const useSlider = maxLiters != null && maxLiters > 0 const emitValue = useCallback( (liters: number) => { const clamped = clampTankLiters(liters, useSlider ? maxLiters : undefined) const str = formatTankLiters(clamped) onChange(str) }, [onChange, maxLiters, useSlider] ) const handleNumberChange = (e: React.ChangeEvent) => { onChange(e.target.value) } const handleNumberBlur = () => { if (!useSlider) return emitValue(parseInputLiters(value)) } const handleSliderChange = (e: React.ChangeEvent) => { emitValue(Number(e.target.value)) } const numericValue = parseInputLiters(value) const sliderValue = useSlider ? clampTankLiters(numericValue, maxLiters) : 0 return (
{useSlider && ( <> )}
) }