import React, { useState } from 'react'; import { FormField, useForm, useFormWithHelpers, type ValidationRules } from './index'; import { Button } from '@/components/ui/Button'; import { Card, CardBody, CardHeader } from '@/components/ui/Card'; import { Container } from '@/components/ui/Container'; /** * Form Examples * Comprehensive examples showing all form patterns and usage */ // Example 1: Simple Contact Form export const ContactFormExample: React.FC = () => { const form = useForm({ initialValues: { name: '', email: '', message: '', }, validationRules: { name: { required: 'Name is required', minLength: { value: 2, message: 'Name must be at least 2 characters' } }, email: { required: 'Email is required', email: true }, message: { required: 'Message is required', minLength: { value: 10, message: 'Message must be at least 10 characters' } }, }, onSubmit: async (values) => { console.log('Form submitted:', values); // Simulate API call await new Promise(resolve => setTimeout(resolve, 1000)); alert('Form submitted successfully!'); form.reset(); }, }); return (

Contact Form

Simple contact form with validation

form.setFieldValue('name', e.target.value)} /> form.setFieldValue('email', e.target.value)} /> form.setFieldValue('message', e.target.value)} />
); }; // Example 2: Registration Form with Multiple Field Types export const RegistrationFormExample: React.FC = () => { const form = useForm({ initialValues: { firstName: '', lastName: '', email: '', password: '', confirmPassword: '', country: '', interests: [] as string[], newsletter: false, terms: false, }, validationRules: { firstName: { required: true, minLength: { value: 2, message: 'Too short' } }, lastName: { required: true, minLength: { value: 2, message: 'Too short' } }, email: { required: true, email: true }, password: { required: true, minLength: { value: 8, message: 'Password must be at least 8 characters' }, pattern: { value: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/, message: 'Must contain uppercase, lowercase, and number' } }, confirmPassword: { required: true, custom: (value) => value === form.values.password ? null : 'Passwords do not match' }, country: { required: 'Please select your country' }, interests: { required: 'Select at least one interest' }, newsletter: {}, terms: { required: 'You must accept the terms', custom: (value) => value ? null : 'You must accept the terms' }, }, onSubmit: async (values) => { console.log('Registration:', values); await new Promise(resolve => setTimeout(resolve, 1500)); alert('Registration successful!'); form.reset(); }, }); const countryOptions = [ { value: 'de', label: 'Germany' }, { value: 'us', label: 'United States' }, { value: 'uk', label: 'United Kingdom' }, { value: 'fr', label: 'France' }, ]; const interestOptions = [ { value: 'technology', label: 'Technology' }, { value: 'business', label: 'Business' }, { value: 'innovation', label: 'Innovation' }, { value: 'sustainability', label: 'Sustainability' }, ]; return (

Registration Form

Complete registration with multiple field types

form.setFieldValue('firstName', e.target.value)} /> form.setFieldValue('lastName', e.target.value)} />
form.setFieldValue('email', e.target.value)} />
form.setFieldValue('password', e.target.value)} /> form.setFieldValue('confirmPassword', e.target.value)} />
form.setFieldValue('country', e.target.value)} /> form.setFieldValue('interests', values)} />
form.setFieldValue('newsletter', values.length > 0)} /> form.setFieldValue('terms', values.length > 0)} />
); }; // Example 3: Search and Filter Form export const SearchFormExample: React.FC = () => { const form = useForm({ initialValues: { search: '', category: '', status: '', sortBy: 'name', }, validationRules: { search: {}, category: {}, status: {}, sortBy: {}, }, onSubmit: async (values) => { console.log('Search filters:', values); // Handle search/filter logic }, }); const categoryOptions = [ { value: '', label: 'All Categories' }, { value: 'cables', label: 'Cables' }, { value: 'connectors', label: 'Connectors' }, { value: 'accessories', label: 'Accessories' }, ]; const statusOptions = [ { value: '', label: 'All Status' }, { value: 'active', label: 'Active' }, { value: 'inactive', label: 'Inactive' }, ]; const sortOptions = [ { value: 'name', label: 'Name (A-Z)' }, { value: 'name-desc', label: 'Name (Z-A)' }, { value: 'date', label: 'Date (Newest)' }, { value: 'date-asc', label: 'Date (Oldest)' }, ]; return (

Search & Filter

Advanced search with multiple filters

} showClear value={form.values.search} onChange={(e) => form.setFieldValue('search', e.target.value)} /> form.setFieldValue('category', e.target.value)} /> form.setFieldValue('status', e.target.value)} />
form.setFieldValue('sortBy', e.target.value)} containerClassName="w-48" />
); }; // Example 4: Radio Button Form export const RadioFormExample: React.FC = () => { const form = useForm({ initialValues: { paymentMethod: '', shippingMethod: '', deliveryTime: '', }, validationRules: { paymentMethod: { required: 'Please select a payment method' }, shippingMethod: { required: 'Please select a shipping method' }, deliveryTime: { required: 'Please select preferred delivery time' }, }, onSubmit: async (values) => { console.log('Selections:', values); await new Promise(resolve => setTimeout(resolve, 800)); alert('Preferences saved!'); }, }); const paymentOptions = [ { value: 'credit-card', label: 'Credit Card', description: 'Visa, Mastercard, Amex' }, { value: 'paypal', label: 'PayPal', description: 'Secure payment via PayPal' }, { value: 'bank-transfer', label: 'Bank Transfer', description: 'Direct bank transfer' }, ]; const shippingOptions = [ { value: 'standard', label: 'Standard (5-7 days)', description: 'Free shipping on orders over €50' }, { value: 'express', label: 'Express (2-3 days)', description: '€9.99 shipping fee' }, { value: 'overnight', label: 'Overnight', description: '€24.99 shipping fee' }, ]; const deliveryOptions = [ { value: 'morning', label: 'Morning (8am-12pm)' }, { value: 'afternoon', label: 'Afternoon (12pm-6pm)' }, { value: 'evening', label: 'Evening (6pm-9pm)' }, ]; return (

Preferences Selection

Radio buttons for single choice selection

form.setFieldValue('paymentMethod', value)} layout="vertical" /> form.setFieldValue('shippingMethod', value)} layout="vertical" /> form.setFieldValue('deliveryTime', value)} layout="horizontal" />
); }; // Example 5: Complete Form with All Features export const CompleteFormExample: React.FC = () => { const [submittedData, setSubmittedData] = useState(null); const form = useForm({ initialValues: { // Text inputs fullName: '', phone: '', website: '', // Textarea description: '', // Select industry: '', budget: '', // Checkbox group services: [] as string[], // Radio contactPreference: '', // Single checkbox agreeToTerms: false, }, validationRules: { fullName: { required: true, minLength: { value: 3, message: 'Minimum 3 characters' } }, phone: { required: true, pattern: { value: /^[0-9+\-\s()]+$/, message: 'Invalid phone format' } }, website: { url: 'Invalid URL format' }, description: { required: true, minLength: { value: 20, message: 'Please provide more details' } }, industry: { required: true }, budget: { required: true }, services: { required: 'Select at least one service' }, contactPreference: { required: true }, agreeToTerms: { required: 'You must accept the terms', custom: (value) => value ? null : 'Required' }, }, onSubmit: async (values) => { console.log('Complete form submitted:', values); setSubmittedData(values); await new Promise(resolve => setTimeout(resolve, 1500)); alert('Form submitted successfully! Check console for data.'); form.reset(); }, }); const industryOptions = [ { value: '', label: 'Select Industry' }, { value: 'manufacturing', label: 'Manufacturing' }, { value: 'construction', label: 'Construction' }, { value: 'energy', label: 'Energy' }, { value: 'technology', label: 'Technology' }, ]; const budgetOptions = [ { value: '', label: 'Select Budget Range' }, { value: 'small', label: '€1,000 - €5,000' }, { value: 'medium', label: '€5,000 - €20,000' }, { value: 'large', label: '€20,000+' }, ]; const serviceOptions = [ { value: 'consulting', label: 'Consulting' }, { value: 'installation', label: 'Installation' }, { value: 'maintenance', label: 'Maintenance' }, { value: 'training', label: 'Training' }, { value: 'support', label: '24/7 Support' }, ]; const contactOptions = [ { value: 'email', label: 'Email', description: 'We\'ll respond within 24 hours' }, { value: 'phone', label: 'Phone', description: 'Call us during business hours' }, { value: 'both', label: 'Both', description: 'Email and phone contact' }, ]; return (

Complete Form Example

All form components working together

{/* Personal Information */}

Personal Information

form.setFieldValue('fullName', e.target.value)} /> form.setFieldValue('phone', e.target.value)} />
form.setFieldValue('website', e.target.value)} />
{/* Business Information */}

Business Information

form.setFieldValue('description', e.target.value)} />
form.setFieldValue('industry', e.target.value)} /> form.setFieldValue('budget', e.target.value)} />
{/* Services & Preferences */}

Services & Preferences

form.setFieldValue('services', values)} /> form.setFieldValue('contactPreference', value)} layout="vertical" />
{/* Terms */}
form.setFieldValue('agreeToTerms', values.length > 0)} />
{/* Actions */}
{/* Debug Output */} {submittedData && (

Submitted Data

              {JSON.stringify(submittedData, null, 2)}
            
)}
); }; // Main Examples Page Component export const FormExamplesPage: React.FC = () => { return (

Form System Examples

Comprehensive examples of all form components and patterns

); }; export default FormExamplesPage;