import { useState } from 'react'; import type { Meta, StoryObj } from '@storybook/react'; import Form from './Form'; import validationRules from './validation.json'; import { FormValues } from './types'; import Typography from '../Typography'; const meta: Meta = { title: 'Components/Form', component: Form, parameters: { layout: 'centered', }, tags: ['autodocs'], }; type Story = StoryObj; export const WithControlledState: Story = { render: () => { const initialFormState: FormValues = { username: '', email: '', password: '', gender: '', language: '', }; const [formData, setFormData] = useState(initialFormState); const handleSubmit = (data: FormValues) => { setFormData(data); alert('Form submitted with: ' + JSON.stringify(data)); }; const handleReset = ( setValue: (field: keyof FormValues, value: any) => void ) => { Object.keys(initialFormState).forEach((field) => { setValue( field as keyof FormValues, initialFormState[field as keyof FormValues] ); }); setFormData(initialFormState); }; return (
onSubmit={handleSubmit}> {( { register, errors, handleBlur, setValue } // Include setValue here ) => ( <> {['username', 'email', 'password'].map((field) => (
{field.charAt(0).toUpperCase() + field.slice(1)} { const value = e.target.value; setFormData((prev) => ({ ...prev, [field]: value, })); if (errors[field as keyof FormValues]?.message) { handleBlur(field as keyof FormValues); } }, })} className={ errors[field as keyof FormValues] ? 'ff-error' : '' } onBlur={() => handleBlur(field as keyof FormValues)} /> {errors[field as keyof FormValues]?.message && ( {String(errors[field as keyof FormValues]?.message)} )}
))} {/* Gender Radio Input */}
Gender
{['Male', 'Female', 'Other'].map((gender) => (
setFormData((prev) => ({ ...prev, gender })) } onBlur={() => handleBlur('gender')} /> {gender}
))} {errors.gender?.message && ( {String(errors.gender.message)} )}
{/* Language Select Dropdown */}
Programming Language {errors.language?.message && ( {String(errors.language.message)} )}
)}
          Payload Data:
        
{JSON.stringify(formData, null, 2)}
); }, }; export default meta;