Files
low-code-react-app-b/docs/history/REFACTORING_PLAN.md
2026-01-17 00:33:02 +00:00

165 lines
4.4 KiB
Markdown

# Comprehensive Refactoring Plan
## Overview
CodeForge has grown to include 44 iterations of features, resulting in component files exceeding 150 LOC and duplicated logic. This plan establishes a systematic refactoring approach to create a maintainable, scalable architecture.
## Goals
1. ✅ All components < 150 LOC
2. ✅ Custom hooks library for shared logic
3. ✅ JSON-driven page orchestration
4. ✅ Atomic component design pattern
5. ✅ Type-safe architecture
6. ✅ Zero breaking changes to existing features
## Phase 1: Hook Extraction Library
### Core Hooks to Extract
- `use-feature-ideas.ts` - Feature idea CRUD + state management
- `use-idea-connections.ts` - Edge/connection validation & 1:1 mapping
- `use-reactflow-integration.ts` - ReactFlow nodes/edges state
- `use-idea-groups.ts` - Group management logic
- `use-ai-generation.ts` - AI-powered generation
- `use-form-dialog.ts` - Generic form dialog state
- `use-node-positions.ts` - Node position persistence
### Hook Organization
```
src/hooks/
├── feature-ideas/
│ ├── use-feature-ideas.ts
│ ├── use-idea-connections.ts
│ ├── use-idea-groups.ts
│ └── index.ts
├── reactflow/
│ ├── use-reactflow-integration.ts
│ ├── use-node-positions.ts
│ ├── use-connection-validation.ts
│ └── index.ts
├── dialogs/
│ ├── use-form-dialog.ts
│ ├── use-confirmation-dialog.ts
│ └── index.ts
└── ai/
├── use-ai-generation.ts
├── use-ai-suggestions.ts
└── index.ts
```
## Phase 2: Atomic Component Breakdown
### FeatureIdeaCloud Component Tree
Current: 1555 LOC → Target: Multiple components < 150 LOC each
```
FeatureIdeaCloud/ (orchestrator - 80 LOC)
├── nodes/
│ ├── IdeaNode.tsx (120 LOC)
│ ├── GroupNode.tsx (80 LOC)
│ └── NodeHandles.tsx (60 LOC)
├── dialogs/
│ ├── IdeaEditDialog.tsx (140 LOC)
│ ├── IdeaViewDialog.tsx (100 LOC)
│ ├── GroupEditDialog.tsx (120 LOC)
│ ├── EdgeEditDialog.tsx (90 LOC)
│ └── DebugPanel.tsx (140 LOC)
├── panels/
│ ├── ToolbarPanel.tsx (80 LOC)
│ ├── HelpPanel.tsx (60 LOC)
│ └── DebugPanel.tsx (moved above)
└── utils/
├── connection-validator.ts (100 LOC)
└── constants.ts (50 LOC)
```
## Phase 3: JSON Page Configuration
### Configuration Format
```json
{
"pages": [
{
"id": "dashboard",
"title": "Dashboard",
"icon": "ChartBar",
"component": "ProjectDashboard",
"enabled": true,
"shortcut": "ctrl+1"
},
{
"id": "ideas",
"title": "Feature Ideas",
"icon": "Lightbulb",
"component": "FeatureIdeaCloud",
"enabled": true,
"toggleKey": "ideaCloud",
"shortcut": "ctrl+i"
}
]
}
```
### Page Orchestrator
```typescript
// src/config/pages.json - Configuration
// src/lib/page-loader.ts - Dynamic loader
// src/components/PageOrchestrator.tsx - Runtime renderer
```
## Phase 4: Component Size Audit
### Components Requiring Refactoring
1. **FeatureIdeaCloud.tsx** - 1555 LOC → 8 components
2. **App.tsx** - 826 LOC → Split orchestration
3. **CodeEditor.tsx** - Check size
4. **ComponentTreeBuilder.tsx** - Check size
5. **WorkflowDesigner.tsx** - Check size
## Phase 5: Type Safety
### Centralized Types
```
src/types/
├── feature-ideas.ts
├── projects.ts
├── components.ts
├── workflows.ts
└── common.ts
```
## Implementation Order
### Step 1: Create Hook Library (This Session)
- Extract all FeatureIdeaCloud hooks
- Extract generic dialog hooks
- Test in isolation
### Step 2: Break Down FeatureIdeaCloud (This Session)
- Create atomic components
- Maintain feature parity
- Test all features work
### Step 3: JSON Page Config (This Session)
- Define page schema
- Create loader utilities
- Wire up to App.tsx
### Step 4: Verify & Test (This Session)
- All components < 150 LOC ✓
- All features functional ✓
- Performance maintained ✓
## Success Metrics
- ✅ No component > 150 LOC
- ✅ No duplicated logic
- ✅ All features work identically
- ✅ Type safety maintained
- ✅ Performance improved
- ✅ Developer velocity increased
## Notes
- Preserve all existing functionality
- Maintain backward compatibility
- Keep user experience identical
- Improve developer experience
- Enable future scalability