3.9 KiB
3.9 KiB
Refactoring Plan for Validation Code
Current Structure Analysis
- useValidationState.tsx: ~1650 lines - Core validation state management
- useValidation.tsx: ~425 lines - Field/data validation utility
- useUpcValidation.tsx: ~410 lines - UPC-specific validation
Proposed New Structure
1. Core Types & Utilities (150-200 lines)
File: validation/types.ts
- All interfaces and types (RowData, ValidationError, FilterState, Template, etc.)
- Shared utility functions (isEmpty, getCellKey, etc.)
File: validation/utils.ts
- Generic validation utility functions
- Caching mechanism and cache clearing helpers
- API URL helpers
2. Field Validation (300-350 lines)
File: validation/hooks/useFieldValidation.ts
validateFieldfunction- Field-level validation logic
- Required, regex, and other field validations
3. Uniqueness Validation (250-300 lines)
File: validation/hooks/useUniquenessValidation.ts
validateUniqueFieldfunctionvalidateUniqueItemNumbersfunction- All uniqueness checking logic
4. UPC Validation (300-350 lines)
File: validation/hooks/useUpcValidation.ts
fetchProductByUpcfunctionvalidateUpcfunctionapplyItemNumbersToDatafunction- UPC validation state management
5. Validation Status Management (300-350 lines)
File: validation/hooks/useValidationStatus.ts
- Error state management
- Row validation status tracking
- Validation indicators and refs
- Batch validation processing
6. Data Management (300-350 lines)
File: validation/hooks/useValidationData.ts
- Data state management
- Row updates
- Data filtering
- Initial data processing
7. Template Management (250-300 lines)
File: validation/hooks/useTemplateManagement.ts
- Template saving
- Template application
- Template loading
- Template display helpers
8. Main Validation Hook (300-350 lines)
File: validation/hooks/useValidation.ts
- Main hook that composes all other hooks
- Public API export
- Initialization logic
- Core validation flow
Function Distribution
Core Types & Utilities
- All interfaces (InfoWithSource, ValidationState, etc.)
isEmptyutilitygetApiUrlhelper
Field Validation
validateFieldvalidateRowvalidateData(partial)- All validation result caching
Uniqueness Validation
validateUniqueFieldvalidateUniqueItemNumbers- Uniqueness caching mechanisms
UPC Validation
fetchProductByUpcvalidateUpcvalidateAllUPCsapplyItemNumbersToData- UPC validation state tracking (cells, rows)
Validation Status Management
startValidatingCell/stopValidatingCellstartValidatingRow/stopValidatingRowisValidatingCell/isRowValidatingUpc- Error state management
revalidateRows
Data Management
- Initial data cleaning/processing
updateRowcopyDown- Search/filter functionality
filteredDatacalculation
Template Management
saveTemplateapplyTemplateapplyTemplateToSelectedgetTemplateDisplayTextloadTemplates/refreshTemplates
Main Validation Hook
- Composition of all other hooks
- Initialization logic
- Button/navigation handling
- Field options management
Implementation Approach
- Start with Types: Create the types file first, as all other files will depend on it
- Create Utility Functions: Move shared utilities next
- Build Core Validation: Extract the field validation and uniqueness validation
- Separate UPC Logic: Move all UPC-specific code to its own module
- Extract State Management: Move data and status management to separate files
- Move Template Logic: Extract template functionality
- Create Composition Hook: Build the main hook that uses all other hooks
This approach will give you more maintainable code with clearer separation of concerns, making it easier to understand, test, and modify each component independently.