Frontend Context Providers Documentation
This document provides comprehensive documentation for all React Context providers in the STO Education Platform.Context Architecture Overview
The application uses React Context API for state management, providing a centralized way to share state across components without prop drilling. Each context is designed for specific functionality and user roles.Context Providers
1. AdminContext
Location: src/context/AdminContext.tsx
Purpose
Manages admin authentication and role-based access control throughout the application.Features
- Admin Status Checking: Verifies if the current user has admin privileges
- Authentication Integration: Works with Supabase authentication
- Real-time Updates: Automatically updates when authentication state changes
- Role Validation: Checks user role from the profiles table
Context Interface
Implementation Details
- Provider Component:
AdminProvider - Custom Hook:
useAdmin() - Error Handling: Throws error if used outside provider
- Auto-subscription: Listens to Supabase auth state changes
Usage Example
Dependencies
- Supabase: For authentication and user data
- React: Core React hooks and context
Security Features
- Row Level Security: Leverages Supabase RLS policies
- Server-side Validation: Admin status verified on backend
- Session Management: Automatic session validation
2. CartContext
Location: src/context/CartContext.tsx
Purpose
Manages shopping cart state for teacher mark schemes and other purchasable items.Features
- Cart Management: Add, remove, and manage cart items
- Total Calculation: Automatic total price calculation
- Currency Support: Multi-currency support (defaults to EGP)
- Duplicate Prevention: Prevents duplicate items in cart
- State Persistence: Cart state management with reducer pattern
Context Interface
Implementation Details
- Provider Component:
CartProvider - Custom Hook:
useCart() - Reducer Pattern: Uses useReducer for complex state management
- Action Types: ADD_ITEM, REMOVE_ITEM, CLEAR_CART, UPDATE_QUANTITY
Usage Example
Cart Actions
- ADD_ITEM: Adds item to cart (prevents duplicates)
- REMOVE_ITEM: Removes item by ID
- CLEAR_CART: Empties entire cart
- UPDATE_QUANTITY: Updates item quantity (not used for mark schemes)
Business Logic
- Mark Scheme Focus: Optimized for teacher mark scheme purchases
- Quantity Limitation: Each item has quantity of 1
- Price Calculation: Automatic total calculation
- Currency Handling: Default EGP currency support
3. LayoutContext
Location: src/context/LayoutContext.tsx
Purpose
Manages UI layout state, particularly sidebar visibility and collapse states across the application.Features
- Sidebar Management: Controls sidebar visibility and collapse state
- Responsive Design: Adapts to different screen sizes
- State Synchronization: Keeps layout state consistent across components
- Toggle Functionality: Smart toggle behavior for sidebar
Context Interface
Implementation Details
- Provider Component:
LayoutProvider - Custom Hook:
useLayout() - State Management: Uses useState for simple state
- Smart Toggle: Intelligent toggle behavior based on current state
Usage Example
Toggle Logic
Layout States
- Visible + Expanded: Normal sidebar state
- Visible + Collapsed: Sidebar visible but minimized
- Hidden: Sidebar completely hidden
4. PageContentContext
Location: src/context/PageContentContext.tsx
Purpose
Manages dynamic page content for the Content Management System (CMS), allowing administrators to edit page content in real-time.Features
- Dynamic Content: Editable page content management
- Auto-initialization: Automatically initializes content if none exists
- Real-time Updates: Live content updates without page refresh
- Admin-only Editing: Content editing restricted to admin users
- Content Persistence: Automatic saving to Supabase database
- Loading States: Proper loading state management
Context Interface
Implementation Details
- Provider Component:
PageContentProvider - Custom Hook:
usePageContent() - Page-specific: Each page has its own content context
- Auto-save: Background saving of content changes
Usage Example
Content Management Features
- DOM Scanning: Automatically scans page for content elements
- Data Attributes: Uses
data-content-keyfor content identification - Image Support: Supports editable images with
data-image-key - Batch Operations: Can save all content at once
Content Initialization Process
- Load Existing Content: Fetches content from database
- Check for Empty State: Detects if no content exists
- Auto-initialization: Creates default content if needed
- DOM Scanning: Scans page for content elements
- Content Mapping: Maps DOM elements to content keys
- Database Save: Saves content to Supabase
Loading State Management
Content Saving Strategy
- Immediate Update: Local state updated immediately
- Background Save: Database save happens in background
- Error Handling: Graceful error handling for save failures
- Optimistic Updates: UI updates before database confirmation
Context Integration Patterns
1. Provider Hierarchy
2. Conditional Context Usage
3. Context Composition
Context Best Practices
1. Performance Optimization
- Context Splitting: Separate contexts for different concerns
- Memoization: Use useMemo for expensive context values
- Selective Subscriptions: Only subscribe to needed context values
- Lazy Loading: Load context data only when needed
2. Error Handling
- Error Boundaries: Wrap context providers with error boundaries
- Fallback Values: Provide sensible default values
- Validation: Validate context data before use
- Error Recovery: Graceful error recovery mechanisms
3. Type Safety
- TypeScript Interfaces: Strong typing for context interfaces
- Generic Types: Use generics for reusable context patterns
- Type Guards: Runtime type checking for context data
- Documentation: Clear type documentation
4. Testing Strategy
- Context Testing: Test context providers in isolation
- Hook Testing: Test custom hooks independently
- Integration Testing: Test context integration with components
- Mock Contexts: Mock contexts for component testing
Context Security Considerations
1. Data Validation
- Input Sanitization: Sanitize all context data
- Type Validation: Runtime type checking
- Access Control: Role-based access to context data
- Audit Logging: Log context data changes
2. State Management Security
- Sensitive Data: Avoid storing sensitive data in context
- Session Management: Proper session handling
- Token Management: Secure token storage and refresh
- Permission Checks: Regular permission validation
Context Performance Monitoring
1. Performance Metrics
- Render Count: Monitor context-related re-renders
- Memory Usage: Track context memory consumption
- Update Frequency: Monitor context update patterns
- Bundle Size: Track context-related bundle size
2. Optimization Strategies
- Context Splitting: Split large contexts into smaller ones
- Memoization: Memoize context values and selectors
- Lazy Loading: Load context data on demand
- Caching: Implement context data caching
Future Context Enhancements
1. Planned Features
- Context Persistence: Local storage integration
- Context Synchronization: Multi-tab context sync
- Context Middleware: Context action middleware
- Context DevTools: Development debugging tools
2. Advanced Patterns
- Context Composition: Advanced context composition patterns
- Context Providers: Provider factory patterns
- Context Hooks: Advanced custom hook patterns
- Context Testing: Enhanced testing utilities
3. Performance Improvements
- Context Optimization: Advanced optimization strategies
- Memory Management: Better memory management
- Update Batching: Batched context updates
- Selective Rendering: Selective component rendering
Context Documentation Standards
1. Code Documentation
- JSDoc Comments: Comprehensive context documentation
- Type Definitions: Clear TypeScript interfaces
- Usage Examples: Practical usage examples
- API Reference: Complete API documentation
2. User Documentation
- Context Purpose: Clear purpose and use cases
- Integration Guide: Step-by-step integration guide
- Best Practices: Context usage best practices
- Troubleshooting: Common issues and solutions
3. Developer Documentation
- Architecture Overview: Context architecture explanation
- Implementation Details: Technical implementation details
- Extension Guide: How to extend existing contexts
- Migration Guide: Context migration strategies