import { FormLayout } from '@/constants/form'; import { cn } from '@/lib/utils'; import { ReactNode, useMemo } from 'react'; import { useFormContext } from 'react-hook-form'; import { SingleFormSlider } from './ui/dual-range-slider'; import { FormControl, FormField, FormItem, FormLabel, FormMessage, } from './ui/form'; import { NumberInput } from './ui/input'; export type FormLayoutType = { layout?: FormLayout; }; type SliderInputFormFieldProps = { max?: number; min?: number; step?: number; name: string; label: string; tooltip?: ReactNode; defaultValue?: number; className?: string; numberInputClassName?: string; percentage?: boolean; } & FormLayoutType; export function SliderInputFormField({ max, min, step, label, name, tooltip, defaultValue, className, numberInputClassName, layout = FormLayout.Horizontal, percentage = false, }: SliderInputFormFieldProps) { const form = useFormContext(); const isHorizontal = useMemo(() => layout !== FormLayout.Vertical, [layout]); const displayMax = percentage ? (max || 1) * 100 : max; const displayMin = percentage ? (min || 0) * 100 : min; const displayStep = percentage ? (step || 0.01) * 100 : step; return ( ( {label}
field.onChange(percentage ? value / 100 : value) } max={displayMax} min={displayMin} step={displayStep} > { const value = Number(val || 0); if (!isNaN(value)) { field.onChange( percentage ? (value / 100).toFixed(0) : value, ); } }} >
)} /> ); }