import React, { useState } from "react"; import { Form, Field, FieldRenderProps } from "react-final-form"; import Slider from "@mui/material/Slider"; interface FormValues { age?: number; height?: number; weight?: number; } const UserMetricsForm: React.FC = () => { const [stage, setStage] = useState(1); const next = () => setStage((prev) => prev + 1); const previous = () => setStage((prev) => prev - 1); const onSubmit = (values: FormValues) => { console.log("Form submitted:", values); }; // Helper function to select emoji based on value const selectEmoji = (value: number | undefined, thresholds: number[], emojis: (string | JSX.Element)[]) => { if (value === undefined) return null; if (value <= thresholds[0]) return emojis[0]; if (value <= thresholds[1]) return emojis[1]; return emojis[2]; }; return (

User Metrics Form

onSubmit={onSubmit} render={({ handleSubmit, values }) => (
{/* Stage 1: Age */} {stage === 1 && (

Stage 1: Age

{selectEmoji(values.age, [17, 50], ["👶", "🧑", "👴"])}
name="age" parse={(value) => (value === undefined ? 0 : Number(value))} // Changed to return 0 instead of undefined > {({ input, meta }) => (
{meta.touched && meta.error && ( {meta.error} )}
)}
)} {/* Stage 2: Height */} {stage === 2 && (

Stage 2: Height

{selectEmoji(values.height, [150, 175], ["🌼", "🧍🏻", "🦒"])}
name="height" parse={(value) => (value === undefined ? 0 : Number(value))} // Changed to return 0 instead of undefined > {({ input, meta }) => (
{meta.touched && meta.error && ( {meta.error} )}
)}
)} {/* Stage 3: Weight */} {stage === 3 && (

Stage 3: Weight

{selectEmoji(values.weight, [70, 99], ["🐭", "🐱", "🐘"])}
name="weight"> {({ input, meta }: FieldRenderProps) => (
{ const newValue = Array.isArray(value) ? value[0] : value; input.onChange(newValue); }} min={0} max={200} className="text-indigo-500" />
Weight: {input.value || 0} kg
{meta.touched && meta.error && ( {meta.error} )}
)}
)}
)} />
); }; export default UserMetricsForm;