# 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: - 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: - Store names for easy identification in DevTools - Development-only activation (disabled in production) ## Stores Available for Debugging The following stores are configured with DevTools: 1. **AuthStore** (`apps/web/src/features/auth/store/authStore.ts`) - Manages user authentication state - Tracks login/logout actions - Monitors user profile updates - **Note**: Contains `user` field (domain data - will migrate to React Query per Action 4.1.1.x) 2. **UIStore** (`apps/web/src/stores/ui.ts`) - Manages UI preferences (theme, language, sidebar) - Tracks notification state - Monitors UI state changes - **Category**: UI State (appropriate for Zustand) 3. **LibraryStore** (`apps/web/src/stores/library.ts`) - Manages library items and favorites - Tracks filter changes - Monitors item uploads and deletions - **Note**: Contains domain data (will migrate to React Query per Epic 4.1) 4. **ChatStore** (`apps/web/src/features/chat/store/chatStore.ts`) - Action 4.5.1.5: Moved from stores/chat.ts - Manages chat conversations and messages - Tracks WebSocket connection state - Monitors message operations - **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) ## 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 3. **Select Store**: Use the dropdown to select which store to inspect (AuthStore, UIStore, LibraryStore, ChatStore, CartStore, PlayerStore) 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 - View the complete state tree - Search for specific state properties - Expand/collapse nested objects #### Action Monitoring - See all dispatched actions in chronological order - View action payloads - See state diffs for each action #### Time Travel Debugging - Jump to any previous state - Replay actions from a specific point - Export state snapshots for sharing #### State Export/Import - 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 }, ); ``` ### 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 }, ); ``` ## 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/)