ALwrity Version 0.5.0 (Fastapi + React )

This commit is contained in:
ajaysi
2025-08-06 12:48:02 +05:30
parent f28a919caa
commit 32f97fa6b3
476 changed files with 115544 additions and 28747 deletions

View File

@@ -0,0 +1,167 @@
# Zustand Store Implementation
This directory contains Zustand stores for managing state across the Alwrity dashboard components.
## Overview
Zustand has been implemented to replace the previous state management approach using custom hooks and local state. This provides:
- **Centralized state management** across components
- **Automatic persistence** with Zustand's persist middleware
- **Better performance** with selective re-renders
- **Simpler state updates** with immer-like syntax
- **Better debugging** with Redux DevTools support
## Stores
### 1. `dashboardStore.ts` - Main Dashboard Store
Manages state for the main dashboard including:
- Search and filter state
- Favorites management
- Snackbar notifications
- Loading and error states
**Key Features:**
- Automatic persistence of favorites and filter preferences
- Snackbar management with automatic hiding
- Optimized re-renders with selective state subscriptions
**Usage:**
```typescript
import { useDashboardStore } from '../stores/dashboardStore';
const {
loading,
error,
searchQuery,
favorites,
toggleFavorite,
setSearchQuery,
showSnackbar,
} = useDashboardStore();
```
### 2. `seoDashboardStore.ts` - SEO Dashboard Store
Manages state for the SEO dashboard including:
- Dashboard data fetching and caching
- Loading and error states
- Data refresh functionality
**Key Features:**
- Automatic data fetching on component mount
- Error handling with retry functionality
- Data caching with last updated timestamp
- DevTools integration for debugging
**Usage:**
```typescript
import { useSEODashboardStore } from '../stores/seoDashboardStore';
const {
loading,
error,
data,
fetchDashboardData,
refreshData,
} = useSEODashboardStore();
```
### 3. `sharedDashboardStore.ts` - Shared Dashboard Store
Manages common functionality across all dashboards:
- Sidebar state
- Theme management
- Global notifications
**Key Features:**
- Theme switching with system preference detection
- Notification management with auto-cleanup
- Sidebar state management
**Usage:**
```typescript
import { useSharedDashboardStore } from '../stores/sharedDashboardStore';
const {
isSidebarOpen,
currentTheme,
notifications,
toggleSidebar,
setTheme,
addNotification,
} = useSharedDashboardStore();
```
## Benefits Over Previous Implementation
### Before (Custom Hooks + Local State)
```typescript
// MainDashboard - Custom hook with manual localStorage
const useDashboardState = () => {
const [state, setState] = useState<DashboardState>({...});
// Manual localStorage handling
// Complex state updates
// No cross-component communication
};
// SEODashboard - Local state
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const [data, setData] = useState<SEODashboardData | null>(null);
```
### After (Zustand Stores)
```typescript
// Centralized, persistent, and optimized
const {
loading,
error,
data,
fetchDashboardData,
} = useSEODashboardStore();
// Automatic persistence
const {
favorites,
searchQuery,
toggleFavorite,
} = useDashboardStore();
```
## Performance Improvements
1. **Selective Re-renders**: Components only re-render when their specific state changes
2. **Automatic Persistence**: No manual localStorage management needed
3. **Optimized Updates**: Zustand's internal optimizations reduce unnecessary renders
4. **DevTools Integration**: Better debugging and state inspection
## Migration Notes
- The old `useDashboardState` hook can be removed after confirming the new implementation works correctly
- All localStorage operations are now handled automatically by Zustand's persist middleware
- Error handling is more robust with centralized error states
- Snackbar management is simplified with automatic cleanup
## Future Enhancements
1. **Real-time Updates**: Can easily add WebSocket integration for live data updates
2. **Offline Support**: Zustand's persistence can be extended for offline functionality
3. **State Synchronization**: Multiple tabs can share state through storage events
4. **Advanced Caching**: Can implement more sophisticated caching strategies
## Testing
The stores can be tested independently:
```typescript
import { renderHook, act } from '@testing-library/react';
import { useDashboardStore } from './dashboardStore';
test('should toggle favorite', () => {
const { result } = renderHook(() => useDashboardStore());
act(() => {
result.current.toggleFavorite('test-tool');
});
expect(result.current.favorites).toContain('test-tool');
});
```