"use client" import * as React from "react" import Form from "next/form" import { toast } from "sonner" import { Button } from "@/registry/new-york-v4/ui/button" import { Card, CardContent, CardFooter } from "@/registry/new-york-v4/ui/card" import { Checkbox } from "@/registry/new-york-v4/ui/checkbox" import { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, } from "@/registry/new-york-v4/ui/field" import { RadioGroup, RadioGroupItem, } from "@/registry/new-york-v4/ui/radio-group" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/registry/new-york-v4/ui/select" import { Spinner } from "@/registry/new-york-v4/ui/spinner" import { Switch } from "@/registry/new-york-v4/ui/switch" import { complexFormAction } from "./form-next-complex-action" import { addons, type FormState } from "./form-next-complex-schema" export default function FormNextComplex() { const [formState, formAction, pending] = React.useActionState< FormState, FormData >(complexFormAction, { values: { plan: "basic", billingPeriod: "monthly", addons: [], emailNotifications: false, }, errors: null, success: false, }) React.useEffect(() => { if (formState.success) { toast.success("Preferences saved", { description: "Your subscription plan has been updated.", }) } }, [formState.success]) return (
Subscription Plan Choose your subscription plan. Basic For individuals and small teams Pro For businesses with higher demands {formState.errors?.plan && ( {formState.errors.plan[0]} )}
Billing Period Choose how often you want to be billed. {formState.errors?.billingPeriod && ( {formState.errors.billingPeriod[0]} )}
Add-ons Select additional features you'd like to include. {addons.map((addon) => ( {addon.title} {addon.description} ))} {formState.errors?.addons && ( {formState.errors.addons[0]} )}
Email Notifications Receive email updates about your subscription
) }