import cx from 'clsx'; import { isEqual, isNil } from 'lodash-es'; import { useEffect, useState } from 'react'; import styles from './LabeledPicker.module.css'; type LabeledPickerProps = { title?: string; value?: number; unit?: string; onChange: (value: number) => void; min?: number; max?: number; step?: number; disabled?: boolean; }; export function LabeledPicker({ title, value, unit, onChange, min = 0, max = 100, step = 1, disabled = false, }: LabeledPickerProps) { const [pickerValue, setPickerValue] = useState(value ?? min); const handlePickerChange = (event: React.ChangeEvent) => { const value = event.target.value as number; setPickerValue(value); onChange?.(value); }; useEffect(() => { if (!isEqual(value, pickerValue)) { setPickerValue(value); } }, [value]); return (
{!isNil(title) && }
{pickerValue} {unit}
); }