This PR introduces a comprehensive form validation system with real-time validation, custom rules, and enhanced error messaging for the Soroban Security Scanner application.
-
Validation Utilities (
frontend/utils/validation.ts)- Built-in validation rules (required, minLength, maxLength, email, URL, numeric, patterns)
- Stellar-specific rules (stellarPublicKey, xlmAmount)
- Custom validation rule support
- Async validation for network-dependent checks
- Debounced validation for performance optimization
-
Form Validation Hook (
frontend/hooks/useFormValidation.ts)- Real-time field validation with debouncing
- Form-level validation with error aggregation
- Validation state management (errors, touched, validating)
- TypeScript support with proper typing
- Form submission handling with validation
-
FormField Component (
frontend/components/form/FormField.tsx)- Unified input component for all field types
- Visual validation states (valid, invalid, validating)
- Validation icons and error display
- Accessibility support with proper ARIA labels
- Support for text, email, password, number, textarea, and select inputs
-
Form Component (
frontend/components/form/Form.tsx)- Render prop pattern for flexible form rendering
- Integration with useFormValidation hook
- Form submission handling
- Validation configuration support
-
FormErrorSummary (
frontend/components/form/FormErrorSummary.tsx)- Comprehensive error display
- Filtered error display (only touched fields)
- Accessible error navigation
-
FormProgress (
frontend/components/form/FormProgress.tsx)- Multi-step form progress tracking
- Visual step completion indicators
- Validation state integration
- EnhancedReportSubmission Component (
frontend/components/EnhancedReportSubmission.tsx)- Multi-step form with progress tracking
- Advanced validation rules for security reports
- Real-time validation feedback
- Async validation for Stellar public keys
- Comprehensive error messaging
- Enhanced user experience with validation icons
required- Field must have a valueminLength- Minimum character countmaxLength- Maximum character countemail- Email format validationurl- URL format validationnumeric- Numeric value validationmin/max- Numeric range validationpattern- Custom regex pattern validation
stellarPublicKey- Stellar public key format validationxlmAmount- XLM amount range validation (0.0000001 to 1,000,000)
- Comprehensive findings validation (requires vulnerability, impact, mitigation sections)
- Code block formatting for proof of concept
- Valid file path validation for affected files
- Numbered steps validation for reproduction steps
- Debounced validation to reduce unnecessary API calls
- Efficient validation state management
- Optimized re-rendering with proper dependency arrays
- Real-time validation feedback with visual indicators
- Comprehensive error messages with specific guidance
- Progress tracking for multi-step forms
- Loading states for async validation
- Accessible form components with proper labels
- TypeScript support throughout
- Reusable components for consistent implementation
- Comprehensive validation rule library
- Easy-to-use hook API
- Clear documentation and examples
const config = {
email: {
rules: [ValidationRules.required(), ValidationRules.email()],
validateOnChange: true
}
};
const { formData, errors, setFieldValue, handleSubmit } = useFormValidation(config);ValidationRules.custom(
(value) => value.includes('required-section'),
'Must include required section'
);ValidationRules.async(
async (value) => await validatePublicKey(value),
'Invalid public key'
);- All components include proper TypeScript typing
- Validation rules tested with various input scenarios
- Async validation properly handles loading states
- Error display tested for accessibility
- None - this is additive functionality
- Existing forms continue to work unchanged
- New validation system can be adopted incrementally
- Server-side validation integration
- Form field dependency validation
- Conditional validation rules
- Validation rule composition
- Form analytics and validation metrics
frontend/utils/validation.ts- Core validation utilitiesfrontend/hooks/useFormValidation.ts- Form validation hookfrontend/components/form/- Reusable form componentsfrontend/components/EnhancedReportSubmission.tsx- Enhanced form example
- Can be integrated with existing forms incrementally
- Compatible with current styling system (Tailwind CSS)
- Works with existing state management (Zustand)
This implementation provides a robust, scalable validation system that improves form reliability and user experience while maintaining developer productivity.