167 lines
6.9 KiB
Markdown
167 lines
6.9 KiB
Markdown
|
|
# State Utilities Categorization
|
||
|
|
|
||
|
|
**Date**: 2026-01-11
|
||
|
|
**Action**: 4.6.1.2 - Determine which utilities are still needed
|
||
|
|
**Status**: ✅ Complete
|
||
|
|
|
||
|
|
## Summary
|
||
|
|
|
||
|
|
This document categorizes all state utility files into: **Needed**, **Redundant**, and **Obsolete** based on actual usage analysis.
|
||
|
|
|
||
|
|
## Categorization Results
|
||
|
|
|
||
|
|
### ✅ **NEEDED** - Actively Used (6 utilities)
|
||
|
|
|
||
|
|
#### 1. `broadcastSync.ts`
|
||
|
|
- **Category**: ✅ **NEEDED** - Will remain useful
|
||
|
|
- **Usage**: Used by UI Store (`stores/ui.ts`), Auth Store (`features/auth/store/authStore.ts`)
|
||
|
|
- **Purpose**: Synchronize Zustand stores across browser tabs/windows
|
||
|
|
- **Future**: Will remain useful for UI state synchronization
|
||
|
|
- **Action**: Keep
|
||
|
|
|
||
|
|
#### 2. `storeSelectors.ts`
|
||
|
|
- **Category**: ✅ **NEEDED** - Will remain useful
|
||
|
|
- **Usage**: Used by various components (`DashboardPage.tsx`, etc.)
|
||
|
|
- **Purpose**: Optimized selectors for Zustand stores to prevent unnecessary re-renders
|
||
|
|
- **Future**: Will remain useful for optimized Zustand selectors
|
||
|
|
- **Action**: Keep
|
||
|
|
|
||
|
|
#### 3. `stateInvalidation.ts`
|
||
|
|
- **Category**: ✅ **NEEDED** - Useful during migration period
|
||
|
|
- **Usage**: Used by `api/client.ts` for mutation invalidation
|
||
|
|
- **Purpose**: Unified state invalidation for Zustand stores and React Query
|
||
|
|
- **Future**: Useful during migration period, may need updates for React Query
|
||
|
|
- **Action**: Keep, update for React Query (Action 4.6.1.5)
|
||
|
|
|
||
|
|
#### 4. `stateMiddleware.ts`
|
||
|
|
- **Category**: ⚠️ **NEEDED** - Will become obsolete after Library Store migration
|
||
|
|
- **Usage**: Used by Library Store (`stores/library.ts`)
|
||
|
|
- **Purpose**: Zustand middleware for analytics tracking and error handling
|
||
|
|
- **Future**: Will become obsolete when Library Store migrates to React Query
|
||
|
|
- **Action**: Keep until Library Store migration, then remove
|
||
|
|
|
||
|
|
#### 5. `stateNormalization.ts`
|
||
|
|
- **Category**: ⚠️ **NEEDED** - Will become obsolete after Library Store migration
|
||
|
|
- **Usage**: Used by Library Store (`stores/library.ts`), storeSelectors (`utils/storeSelectors.ts`)
|
||
|
|
- **Purpose**: Utilities for normalized state management (entities by ID)
|
||
|
|
- **Future**: Will become obsolete when Library Store migrates to React Query
|
||
|
|
- **Action**: Keep until Library Store migration, then remove
|
||
|
|
|
||
|
|
#### 6. `undoRedo.ts`
|
||
|
|
- **Category**: ⚠️ **NEEDED** - Will become obsolete after Library Store migration
|
||
|
|
- **Usage**: Used by Library Store (`stores/library.ts`)
|
||
|
|
- **Purpose**: Undo/redo functionality for Zustand stores
|
||
|
|
- **Future**: Will become obsolete when Library Store migrates to React Query
|
||
|
|
- **Action**: Keep until Library Store migration, then remove
|
||
|
|
|
||
|
|
#### 7. `stateHydration.ts`
|
||
|
|
- **Category**: ⚠️ **NEEDED** - Will become obsolete after store migrations
|
||
|
|
- **Usage**: Used by `App.tsx` for app initialization
|
||
|
|
- **Purpose**: Hydrate Zustand stores from API on app load
|
||
|
|
- **Future**: Will become obsolete when stores migrate to React Query (React Query handles hydration)
|
||
|
|
- **Action**: Keep until store migrations complete, then remove
|
||
|
|
|
||
|
|
### ❌ **OBSOLETE** - Not Used (3 utilities)
|
||
|
|
|
||
|
|
#### 8. `stateCleanup.ts`
|
||
|
|
- **Category**: ❌ **OBSOLETE** - Not used in codebase
|
||
|
|
- **Usage**: Only imported in test file (`stateCleanup.test.ts`), NOT used in actual code
|
||
|
|
- **Purpose**: Cleanup utilities for Zustand stores (size/age-based)
|
||
|
|
- **Future**: Not needed
|
||
|
|
- **Action**: **DELETE** (Action 4.6.1.3)
|
||
|
|
|
||
|
|
#### 9. `stateVersioning.ts`
|
||
|
|
- **Category**: ❌ **OBSOLETE** - Not used in codebase
|
||
|
|
- **Usage**: Only imported in test file (`stateVersioning.test.ts`) and example file (`stateVersioning.example.ts`), NOT used in actual code
|
||
|
|
- **Purpose**: State versioning and migration utilities for Zustand stores
|
||
|
|
- **Future**: Not needed (Zustand persist middleware handles versioning)
|
||
|
|
- **Action**: **DELETE** (Action 4.6.1.3)
|
||
|
|
|
||
|
|
#### 10. `statePersistence.ts`
|
||
|
|
- **Category**: ❌ **OBSOLETE** - Not used in codebase
|
||
|
|
- **Usage**: `createPersistentStorage` function exists but is NOT imported anywhere
|
||
|
|
- **Purpose**: Persistence utilities for Zustand stores
|
||
|
|
- **Future**: Not needed (Zustand's `persist` middleware is used directly)
|
||
|
|
- **Action**: **DELETE** (Action 4.6.1.3)
|
||
|
|
|
||
|
|
## Summary Statistics
|
||
|
|
|
||
|
|
- **Total Utilities**: 10
|
||
|
|
- **Needed (Active)**: 7 (70%)
|
||
|
|
- Will remain useful: 2 (broadcastSync, storeSelectors)
|
||
|
|
- Useful during migration: 1 (stateInvalidation)
|
||
|
|
- Will become obsolete after migrations: 4 (stateMiddleware, stateNormalization, undoRedo, stateHydration)
|
||
|
|
- **Obsolete (Unused)**: 3 (30%)
|
||
|
|
- stateCleanup
|
||
|
|
- stateVersioning
|
||
|
|
- statePersistence
|
||
|
|
|
||
|
|
## Migration Timeline
|
||
|
|
|
||
|
|
### Phase 1: Immediate Cleanup (Now)
|
||
|
|
- Delete obsolete utilities: `stateCleanup.ts`, `stateVersioning.ts`, `statePersistence.ts`
|
||
|
|
- **Risk**: LOW (not used)
|
||
|
|
|
||
|
|
### Phase 2: After Library Store Migration
|
||
|
|
- Delete: `stateMiddleware.ts`, `stateNormalization.ts`, `undoRedo.ts`
|
||
|
|
- **Risk**: MEDIUM (verify Library Store fully migrated)
|
||
|
|
|
||
|
|
### Phase 3: After All Store Migrations
|
||
|
|
- Delete: `stateHydration.ts`
|
||
|
|
- Update: `stateInvalidation.ts` to work with React Query only
|
||
|
|
- **Risk**: MEDIUM (verify all stores migrated)
|
||
|
|
|
||
|
|
### Phase 4: Long-term Keepers
|
||
|
|
- Keep: `broadcastSync.ts` (for UI state sync)
|
||
|
|
- Keep: `storeSelectors.ts` (for optimized selectors)
|
||
|
|
- Keep: `stateInvalidation.ts` (updated for React Query)
|
||
|
|
|
||
|
|
## Recommendations
|
||
|
|
|
||
|
|
### High Priority
|
||
|
|
1. ✅ **Action 4.6.1.2**: Categorization complete
|
||
|
|
2. **Action 4.6.1.3**: Delete obsolete utilities (`stateCleanup`, `stateVersioning`, `statePersistence`)
|
||
|
|
3. **Action 4.6.1.4**: Simplify `stateMiddleware` (or plan removal after Library Store migration)
|
||
|
|
|
||
|
|
### Medium Priority
|
||
|
|
1. Plan removal of utilities after Library Store migration
|
||
|
|
2. Update `stateInvalidation` for React Query (Action 4.6.1.5)
|
||
|
|
|
||
|
|
### Low Priority
|
||
|
|
1. Document migration path for utilities that will become obsolete
|
||
|
|
2. Add tests for utilities that will remain (if missing)
|
||
|
|
|
||
|
|
## Files to Delete (Action 4.6.1.3)
|
||
|
|
|
||
|
|
1. `apps/web/src/utils/stateCleanup.ts` - Not used
|
||
|
|
2. `apps/web/src/utils/stateCleanup.test.ts` - Test for unused utility
|
||
|
|
3. `apps/web/src/utils/stateVersioning.ts` - Not used
|
||
|
|
4. `apps/web/src/utils/stateVersioning.test.ts` - Test for unused utility
|
||
|
|
5. `apps/web/src/utils/stateVersioning.example.ts` - Example for unused utility
|
||
|
|
6. `apps/web/src/utils/statePersistence.ts` - Not used
|
||
|
|
|
||
|
|
**Total files to delete**: 6
|
||
|
|
|
||
|
|
## Verification
|
||
|
|
|
||
|
|
### Obsolete Utilities - Import Check Results
|
||
|
|
- ✅ `stateCleanup` - Only in test file
|
||
|
|
- ✅ `stateVersioning` - Only in test and example files
|
||
|
|
- ✅ `statePersistence` - No imports found
|
||
|
|
|
||
|
|
### Needed Utilities - Import Check Results
|
||
|
|
- ✅ `broadcastSync` - Used by 2 stores
|
||
|
|
- ✅ `storeSelectors` - Used by multiple components
|
||
|
|
- ✅ `stateInvalidation` - Used by api/client.ts
|
||
|
|
- ✅ `stateMiddleware` - Used by Library Store
|
||
|
|
- ✅ `stateNormalization` - Used by Library Store and storeSelectors
|
||
|
|
- ✅ `undoRedo` - Used by Library Store
|
||
|
|
- ✅ `stateHydration` - Used by App.tsx
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
1. ✅ **Action 4.6.1.2**: Categorization complete
|
||
|
|
2. **Action 4.6.1.3**: Delete obsolete utilities (6 files)
|
||
|
|
3. **Action 4.6.1.4**: Simplify or plan removal of stateMiddleware
|
||
|
|
4. **Action 4.6.1.5**: Update stateInvalidation for React Query
|