@ragrabbit/mcp

by madarco
Verified
import type { Meta, StoryObj } from "@storybook/react"; import { useFieldArray, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { EasyForm, EasyFormFieldSwitch, EasyFormFieldText, EasyFormMultiTextField, EasyFormSubmit } from "./easy-form"; import React from "react"; const formSchema = z.object({ name: z.string().min(2, "Name must be at least 2 characters"), email: z.string().email("Invalid email address"), multiField: z.array(z.object({ value: z.string() })), }); type FormValues = z.infer<typeof formSchema>; const EasyFormExample = () => { const form = useForm<FormValues>({ resolver: zodResolver(formSchema), defaultValues: { name: "", email: "", multiField: [{ value: "" }], }, }); const field = useFieldArray({ control: form.control, name: "multiField" }); const onSubmit = async (data: FormValues) => { console.log("Form submitted:", data); // Simulate API call await new Promise((resolve) => setTimeout(resolve, 1000)); }; return ( <EasyForm form={form} onSubmit={onSubmit} message="Form submitted successfully"> <EasyFormFieldText form={form} name="name" title="Name" description="Please enter your full name" placeholder="John Doe" /> <EasyFormFieldText form={form} name="email" title="Email" description="Enter your email address" placeholder="john@example.com" /> <EasyFormMultiTextField form={form} field={field} name="multiField" title="Multi Field" description="This is a multi EasyFormFieldText component" placeholder="Enter some text" /> <EasyFormFieldSwitch form={form} name="switch" title="Switch" label="Switch Label" /> <EasyFormSubmit form={form} isExecuting={false} /> </EasyForm> ); }; const meta: Meta<typeof EasyFormExample> = { title: "UI/Custom/EasyForm", component: EasyFormExample, tags: ["autodocs"], }; export default meta; type Story = StoryObj<typeof EasyFormExample>; export const Default: Story = {}; export const Loading: Story = { render: () => { const form = useForm<FormValues>({ resolver: zodResolver(formSchema), }); return ( <EasyForm form={form} onSubmit={async () => {}} message="Form submitted"> <EasyFormFieldText form={form} name="name" title="Name" description="Please enter your full name" /> <EasyFormFieldText form={form} name="email" title="Email" description="Enter your email address" /> <EasyFormSubmit form={form} isExecuting={true} /> </EasyForm> ); }, }; export const FieldText: Story = { render: () => { const form = useForm<{ singleField: string }>({ resolver: zodResolver(z.object({ singleField: z.string().min(1) })), }); return ( <EasyForm form={form} onSubmit={async () => {}} message="Form submitted"> <EasyFormFieldText form={form} name="singleField" title="Single Field" description="This is a single EasyFormFieldText component" placeholder="Enter some text" /> </EasyForm> ); }, }; export const FormSubmit: Story = { render: () => { const form = useForm(); return <EasyFormSubmit form={form} isExecuting={false} />; }, }; export const MultiTextField: Story = { render: () => { const form = useForm<any>({ defaultValues: { multiField: [{ value: "" }] } }); const field = useFieldArray({ control: form.control, name: "multiField" }); return ( <EasyForm form={form} onSubmit={async () => {}} message="Form submitted"> <EasyFormMultiTextField form={form} field={field} name="multiField" title="Multi Field" description="This is a multi EasyFormFieldText component" placeholder="Enter some text" /> </EasyForm> ); }, }; export const FieldSwitch: Story = { render: () => { const form = useForm<{ singleField: boolean }>({ resolver: zodResolver(z.object({ singleField: z.boolean() })), }); return ( <EasyForm form={form} onSubmit={async () => {}} message="Form submitted"> <EasyFormFieldSwitch form={form} name="singleField" title="Single Field" label="Switch Label" description="This is a single EasyFormFieldSwitch component" /> </EasyForm> ); }, };