2025-12-25 12:56:44 +00:00
|
|
|
# State Debugging Guide
|
|
|
|
|
|
|
|
|
|
## FE-STATE-007: Add state debugging tools
|
|
|
|
|
|
|
|
|
|
This document outlines how to use Redux DevTools for debugging Zustand stores in the Veza frontend application.
|
|
|
|
|
|
|
|
|
|
## Overview
|
|
|
|
|
|
|
|
|
|
All Zustand stores in the application are configured with Redux DevTools middleware, which allows you to:
|
2026-01-13 18:47:57 +00:00
|
|
|
|
2025-12-25 12:56:44 +00:00
|
|
|
- Inspect state changes in real-time
|
|
|
|
|
- Time-travel through state history
|
|
|
|
|
- Export/import state snapshots
|
|
|
|
|
- Monitor action dispatches and their effects
|
|
|
|
|
|
|
|
|
|
## Setup
|
|
|
|
|
|
|
|
|
|
Redux DevTools is automatically enabled for all stores in development mode. The middleware is configured with:
|
2026-01-13 18:47:57 +00:00
|
|
|
|
2025-12-25 12:56:44 +00:00
|
|
|
- Store names for easy identification in DevTools
|
|
|
|
|
- Development-only activation (disabled in production)
|
|
|
|
|
|
|
|
|
|
## Stores Available for Debugging
|
|
|
|
|
|
|
|
|
|
The following stores are configured with DevTools:
|
|
|
|
|
|
2026-01-11 17:04:42 +00:00
|
|
|
1. **AuthStore** (`apps/web/src/features/auth/store/authStore.ts`)
|
2025-12-25 12:56:44 +00:00
|
|
|
- Manages user authentication state
|
|
|
|
|
- Tracks login/logout actions
|
|
|
|
|
- Monitors user profile updates
|
2026-01-11 17:04:42 +00:00
|
|
|
- **Note**: Contains `user` field (domain data - will migrate to React Query per Action 4.1.1.x)
|
2025-12-25 12:56:44 +00:00
|
|
|
|
|
|
|
|
2. **UIStore** (`apps/web/src/stores/ui.ts`)
|
|
|
|
|
- Manages UI preferences (theme, language, sidebar)
|
|
|
|
|
- Tracks notification state
|
|
|
|
|
- Monitors UI state changes
|
2026-01-11 17:04:42 +00:00
|
|
|
- **Category**: UI State (appropriate for Zustand)
|
2025-12-25 12:56:44 +00:00
|
|
|
|
|
|
|
|
3. **LibraryStore** (`apps/web/src/stores/library.ts`)
|
|
|
|
|
- Manages library items and favorites
|
|
|
|
|
- Tracks filter changes
|
|
|
|
|
- Monitors item uploads and deletions
|
2026-01-11 17:04:42 +00:00
|
|
|
- **Note**: Contains domain data (will migrate to React Query per Epic 4.1)
|
2025-12-25 12:56:44 +00:00
|
|
|
|
2026-01-15 18:31:40 +00:00
|
|
|
4. **ChatStore** (`apps/web/src/features/chat/store/chatStore.ts`) - Action 4.5.1.5: Moved from stores/chat.ts
|
2025-12-25 12:56:44 +00:00
|
|
|
- Manages chat conversations and messages
|
|
|
|
|
- Tracks WebSocket connection state
|
|
|
|
|
- Monitors message operations
|
2026-01-11 17:04:42 +00:00
|
|
|
- **Note**: ⚠️ **DUPLICATE** - Also exists at `features/chat/store/chatStore.ts` (needs consolidation per Action 4.5.1.5)
|
|
|
|
|
|
|
|
|
|
5. **CartStore** (`apps/web/src/stores/cartStore.ts`)
|
|
|
|
|
- Manages shopping cart items
|
|
|
|
|
- Tracks cart operations (add, remove, update quantity)
|
|
|
|
|
- **Category**: UI State (client-side cart before checkout)
|
|
|
|
|
|
|
|
|
|
6. **PlayerStore** (`apps/web/src/features/player/store/playerStore.ts`)
|
|
|
|
|
- Manages audio player state (current track, playback state, queue)
|
|
|
|
|
- Tracks player controls and settings
|
|
|
|
|
- **Category**: UI State (audio player state)
|
2025-12-25 12:56:44 +00:00
|
|
|
|
|
|
|
|
## Using Redux DevTools
|
|
|
|
|
|
|
|
|
|
### Installation
|
|
|
|
|
|
|
|
|
|
1. Install the [Redux DevTools Extension](https://github.com/reduxjs/redux-devtools-extension) for your browser:
|
|
|
|
|
- [Chrome/Edge](https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd)
|
|
|
|
|
- [Firefox](https://addons.mozilla.org/en-US/firefox/addon/reduxdevtools/)
|
|
|
|
|
|
|
|
|
|
### Usage
|
|
|
|
|
|
|
|
|
|
1. **Open DevTools**: Press `F12` or right-click → Inspect
|
|
|
|
|
2. **Navigate to Redux Tab**: Click on the "Redux" tab in DevTools
|
2026-01-11 17:04:42 +00:00
|
|
|
3. **Select Store**: Use the dropdown to select which store to inspect (AuthStore, UIStore, LibraryStore, ChatStore, CartStore, PlayerStore)
|
2025-12-25 12:56:44 +00:00
|
|
|
4. **Inspect State**: View the current state tree
|
|
|
|
|
5. **Time Travel**: Use the slider or buttons to navigate through state history
|
|
|
|
|
6. **Action Details**: Click on any action to see its payload and resulting state changes
|
|
|
|
|
|
|
|
|
|
### Features
|
|
|
|
|
|
|
|
|
|
#### State Inspection
|
2026-01-13 18:47:57 +00:00
|
|
|
|
2025-12-25 12:56:44 +00:00
|
|
|
- View the complete state tree
|
|
|
|
|
- Search for specific state properties
|
|
|
|
|
- Expand/collapse nested objects
|
|
|
|
|
|
|
|
|
|
#### Action Monitoring
|
2026-01-13 18:47:57 +00:00
|
|
|
|
2025-12-25 12:56:44 +00:00
|
|
|
- See all dispatched actions in chronological order
|
|
|
|
|
- View action payloads
|
|
|
|
|
- See state diffs for each action
|
|
|
|
|
|
|
|
|
|
#### Time Travel Debugging
|
2026-01-13 18:47:57 +00:00
|
|
|
|
2025-12-25 12:56:44 +00:00
|
|
|
- Jump to any previous state
|
|
|
|
|
- Replay actions from a specific point
|
|
|
|
|
- Export state snapshots for sharing
|
|
|
|
|
|
|
|
|
|
#### State Export/Import
|
2026-01-13 18:47:57 +00:00
|
|
|
|
2025-12-25 12:56:44 +00:00
|
|
|
- Export current state as JSON
|
|
|
|
|
- Import state to restore a previous state
|
|
|
|
|
- Useful for reproducing bugs
|
|
|
|
|
|
|
|
|
|
## Example Workflow
|
|
|
|
|
|
|
|
|
|
### Debugging a State Issue
|
|
|
|
|
|
|
|
|
|
1. **Reproduce the Issue**: Perform the action that causes the problem
|
|
|
|
|
2. **Inspect Actions**: Look at the Redux DevTools action log to see what actions were dispatched
|
|
|
|
|
3. **Check State Changes**: Review the state diff to see what changed
|
|
|
|
|
4. **Time Travel**: Go back to before the issue occurred
|
|
|
|
|
5. **Export State**: Export the problematic state for further analysis
|
|
|
|
|
|
|
|
|
|
### Testing State Changes
|
|
|
|
|
|
|
|
|
|
1. **Record Actions**: Perform a series of actions
|
|
|
|
|
2. **Export State**: Export the final state
|
|
|
|
|
3. **Reset**: Clear the store or reload the page
|
|
|
|
|
4. **Import State**: Import the exported state to restore it
|
|
|
|
|
5. **Verify**: Confirm the state is restored correctly
|
|
|
|
|
|
|
|
|
|
## Best Practices
|
|
|
|
|
|
|
|
|
|
1. **Use Descriptive Store Names**: Store names in DevTools help identify which store you're debugging
|
|
|
|
|
2. **Monitor in Development**: DevTools is only enabled in development mode for performance
|
|
|
|
|
3. **Export Problematic States**: When reporting bugs, export the state snapshot to help developers reproduce the issue
|
|
|
|
|
4. **Time Travel Carefully**: Be aware that time-traveling can cause side effects (e.g., API calls won't be replayed)
|
|
|
|
|
|
|
|
|
|
## Troubleshooting
|
|
|
|
|
|
|
|
|
|
### DevTools Not Showing Stores
|
|
|
|
|
|
|
|
|
|
- Ensure you're in development mode (`import.meta.env.DEV === true`)
|
|
|
|
|
- Check that the Redux DevTools extension is installed and enabled
|
|
|
|
|
- Refresh the page after installing the extension
|
|
|
|
|
|
|
|
|
|
### Stores Not Appearing in Dropdown
|
|
|
|
|
|
|
|
|
|
- Verify that the stores are being used in the application
|
|
|
|
|
- Check that the `devtools` middleware is properly configured
|
|
|
|
|
- Ensure store names are unique and descriptive
|
|
|
|
|
|
|
|
|
|
### Performance Issues
|
|
|
|
|
|
|
|
|
|
- DevTools can impact performance in development
|
|
|
|
|
- Disable DevTools for specific stores if needed by setting `enabled: false`
|
|
|
|
|
- Use the "Skip" feature in DevTools to ignore certain actions
|
|
|
|
|
|
|
|
|
|
## Advanced Configuration
|
|
|
|
|
|
|
|
|
|
### Custom DevTools Configuration
|
|
|
|
|
|
|
|
|
|
You can customize DevTools behavior per store:
|
|
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
|
devtools(
|
|
|
|
|
// ... store implementation
|
|
|
|
|
{
|
|
|
|
|
name: 'MyStore',
|
|
|
|
|
enabled: import.meta.env.DEV,
|
|
|
|
|
// Additional options:
|
|
|
|
|
// trace: true, // Enable stack traces
|
|
|
|
|
// traceLimit: 25, // Limit stack trace depth
|
|
|
|
|
},
|
2026-01-13 18:47:57 +00:00
|
|
|
);
|
2025-12-25 12:56:44 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Disabling DevTools for Specific Stores
|
|
|
|
|
|
|
|
|
|
If you need to disable DevTools for a specific store:
|
|
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
|
devtools(
|
|
|
|
|
// ... store implementation
|
|
|
|
|
{
|
|
|
|
|
name: 'MyStore',
|
|
|
|
|
enabled: false, // Disable DevTools
|
|
|
|
|
},
|
2026-01-13 18:47:57 +00:00
|
|
|
);
|
2025-12-25 12:56:44 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Related Documentation
|
|
|
|
|
|
|
|
|
|
- [Zustand DevTools Middleware](https://github.com/pmndrs/zustand#devtools)
|
|
|
|
|
- [Redux DevTools Extension](https://github.com/reduxjs/redux-devtools-extension)
|
|
|
|
|
- [Zustand Documentation](https://zustand-demo.pmnd.rs/)
|