feat: improve performance and error handling in timezone hook and wid…#271
Open
MrArvand wants to merge 1 commit intowidgetify-app:mainfrom
Conversation
…get context ## 🚀 Performance and Error Handling Improvements This PR introduces several focused improvements to enhance performance, user experience, and code maintainability. ### ✨ Changes Made #### **Enhanced Timezone Hook** - **Added `useCallback`** for `fetchTimezones` function to prevent unnecessary re-renders - **Improved error handling** with more descriptive and user-friendly error messages - **Added `refetch` function** to the hook return value for manual data refreshing - **Better error state management** by clearing previous errors on new requests #### **Optimized Widget Visibility Context** - **Added `useCallback`** for `toggleWidget`, `reorderWidgets`, and `getSortedWidgets` functions - **Added `useMemo`** for context value to prevent unnecessary re-renders of consuming components - **Improved performance** by memoizing expensive operations #### **New Error Handling Utility** - **Created `src/utils/error-handler.ts`** with standardized error handling functions - **User-friendly error messages** in Persian for better UX - **Consistent error logging** with source tracking and timestamps - **Development vs production** error handling strategies ### 🎯 Benefits - **Performance**: Reduced unnecessary re-renders through proper React memoization - **User Experience**: Better error messages and loading states - **Developer Experience**: Consistent error handling patterns across the app - **Maintainability**: Reusable error handling utilities - **Code Quality**: Better separation of concerns and React best practices ### 📊 Impact - **Bundle size**: Minimal increase (~1KB for error utilities) - **Performance**: Improved React rendering performance - **User experience**: Better error feedback and loading states - **Developer experience**: More maintainable and consistent code ### 🧪 Testing - [x] No linting errors introduced - [x] Backward compatible changes - [x] Existing functionality preserved - [x] Performance improvements verified **Files Changed:** - `src/services/hooks/timezone/getTimezones.hook.ts` - `src/context/widget-visibility.context.tsx` - `src/utils/error-handler.ts` (new file)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 Performance and Error Handling Improvements
This PR introduces several focused improvements to enhance performance, user experience, and code maintainability.
✨ Changes Made
Enhanced Timezone Hook
useCallbackforfetchTimezonesfunction to prevent unnecessary re-rendersrefetchfunction to the hook return value for manual data refreshingOptimized Widget Visibility Context
useCallbackfortoggleWidget,reorderWidgets, andgetSortedWidgetsfunctionsuseMemofor context value to prevent unnecessary re-renders of consuming componentsNew Error Handling Utility
src/utils/error-handler.tswith standardized error handling functions🎯 Benefits
📊 Impact
🧪 Testing
Files Changed:
src/services/hooks/timezone/getTimezones.hook.tssrc/context/widget-visibility.context.tsxsrc/utils/error-handler.ts(new file)