NeoScan_Physician/app/store/hooks.ts
2025-08-05 18:01:36 +05:30

307 lines
8.2 KiB
TypeScript

/*
* File: hooks.ts
* Description: Custom Redux hooks for easy store access
* Design & Developed by Tech4Biz Solutions
* Copyright (c) Spurrin Innovations. All rights reserved.
*/
import { useDispatch, useSelector, TypedUseSelectorHook } from 'react-redux';
import { RootState, AppDispatch } from './index';
// ============================================================================
// TYPED HOOKS
// ============================================================================
/**
* Typed Use Dispatch Hook
*
* Purpose: Provide typed dispatch function
*
* Features:
* - Type-safe dispatch function
* - Proper TypeScript support
* - Consistent with Redux Toolkit patterns
*/
export const useAppDispatch = () => useDispatch<AppDispatch>();
/**
* Typed Use Selector Hook
*
* Purpose: Provide typed selector function
*
* Features:
* - Type-safe selector function
* - Proper TypeScript support
* - Consistent with Redux Toolkit patterns
*/
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
// ============================================================================
// AUTH HOOKS
// ============================================================================
/**
* Use Auth Hook
*
* Purpose: Get authentication state and actions
*
* @returns Authentication state and actions
*/
export const useAuth = () => {
const auth = useAppSelector((state) => state.auth);
const dispatch = useAppDispatch();
return {
// State
user: auth.user,
isAuthenticated: auth.isAuthenticated,
isLoading: auth.isLoading,
isLoggingIn: auth.isLoggingIn,
isLoggingOut: auth.isLoggingOut,
error: auth.error,
loginError: auth.loginError,
// Actions
dispatch,
};
};
/**
* Use User Hook
*
* Purpose: Get current user information
*
* @returns Current user data
*/
export const useUser = () => {
const user = useAppSelector((state) => state.auth.user);
return {
user,
isLoggedIn: !!user,
hasPermission: (permission: string) => user?.permissions?.includes(permission) || false,
};
};
// ============================================================================
// DASHBOARD HOOKS
// ============================================================================
/**
* Use Dashboard Hook
*
* Purpose: Get dashboard state and actions
*
* @returns Dashboard state and actions
*/
export const useDashboard = () => {
const dashboard = useAppSelector((state) => state.dashboard);
const dispatch = useAppDispatch();
return {
// State
dashboard: dashboard.dashboard,
isLoading: dashboard.isLoading,
isRefreshing: dashboard.isRefreshing,
error: dashboard.error,
lastUpdated: dashboard.lastUpdated,
isConnected: dashboard.isConnected,
selectedFilter: dashboard.selectedFilter,
sortBy: dashboard.sortBy,
sortOrder: dashboard.sortOrder,
// Actions
dispatch,
};
};
// ============================================================================
// ALERTS HOOKS
// ============================================================================
/**
* Use Alerts Hook
*
* Purpose: Get alerts state and actions
*
* @returns Alerts state and actions
*/
export const useAlerts = () => {
const alerts = useAppSelector((state) => state.alerts);
const dispatch = useAppDispatch();
return {
// State
alerts: alerts.alerts,
isLoading: alerts.isLoading,
isRefreshing: alerts.isRefreshing,
error: alerts.error,
lastUpdated: alerts.lastUpdated,
unreadCount: alerts.unreadCount,
criticalCount: alerts.criticalCount,
selectedFilter: alerts.selectedFilter,
sortBy: alerts.sortBy,
sortOrder: alerts.sortOrder,
// Computed values
criticalAlerts: alerts.alerts.filter(alert => alert.priority === 'CRITICAL'),
unreadAlerts: alerts.alerts.filter(alert => !alert.isRead),
acknowledgedAlerts: alerts.alerts.filter(alert => alert.isAcknowledged),
// Actions
dispatch,
};
};
// ============================================================================
// PATIENT CARE HOOKS
// ============================================================================
/**
* Use Patient Care Hook
*
* Purpose: Get patient care state and actions
*
* @returns Patient care state and actions
*/
export const usePatientCare = () => {
const patientCare = useAppSelector((state) => state.patientCare);
const dispatch = useAppDispatch();
return {
// State
patients: patientCare.patients,
currentPatient: patientCare.currentPatient,
isLoading: patientCare.isLoading,
isRefreshing: patientCare.isRefreshing,
isLoadingPatientDetails: patientCare.isLoadingPatientDetails,
error: patientCare.error,
searchQuery: patientCare.searchQuery,
selectedFilter: patientCare.selectedFilter,
sortBy: patientCare.sortBy,
sortOrder: patientCare.sortOrder,
currentPage: patientCare.currentPage,
itemsPerPage: patientCare.itemsPerPage,
totalItems: patientCare.totalItems,
lastUpdated: patientCare.lastUpdated,
// Computed values
activePatients: patientCare.patients.filter(patient => patient.status === 'ACTIVE'),
criticalPatients: patientCare.patients.filter(patient => patient.priority === 'CRITICAL'),
dischargedPatients: patientCare.patients.filter(patient => patient.status === 'DISCHARGED'),
// Actions
dispatch,
};
};
// ============================================================================
// SETTINGS HOOKS
// ============================================================================
/**
* Use Settings Hook
*
* Purpose: Get settings state and actions
*
* @returns Settings state and actions
*/
export const useSettings = () => {
const settings = useAppSelector((state) => state.settings);
const dispatch = useAppDispatch();
return {
// State
userProfile: settings.userProfile,
userPreferences: settings.userPreferences,
isLoading: settings.isLoading,
isUpdatingProfile: settings.isUpdatingProfile,
isUpdatingPreferences: settings.isUpdatingPreferences,
error: settings.error,
isProfileValid: settings.isProfileValid,
isPreferencesValid: settings.isPreferencesValid,
profileLastUpdated: settings.profileLastUpdated,
preferencesLastUpdated: settings.preferencesLastUpdated,
// Actions
dispatch,
};
};
// ============================================================================
// UI HOOKS
// ============================================================================
/**
* Use UI Hook
*
* Purpose: Get UI state and actions
*
* @returns UI state and actions
*/
export const useUI = () => {
const ui = useAppSelector((state) => state.ui);
const dispatch = useAppDispatch();
return {
// State
isLoading: ui.isLoading,
loadingMessage: ui.loadingMessage,
isModalOpen: ui.isModalOpen,
modalType: ui.modalType,
modalData: ui.modalData,
isOverlayVisible: ui.isOverlayVisible,
overlayType: ui.overlayType,
currentScreen: ui.currentScreen,
navigationStack: ui.navigationStack,
isDarkMode: ui.isDarkMode,
fontSize: ui.fontSize,
highContrast: ui.highContrast,
isRefreshing: ui.isRefreshing,
isScrolling: ui.isScrolling,
lastInteraction: ui.lastInteraction,
hasError: ui.hasError,
errorMessage: ui.errorMessage,
errorType: ui.errorType,
// Actions
dispatch,
};
};
// ============================================================================
// UTILITY HOOKS
// ============================================================================
/**
* Use Store Hook
*
* Purpose: Get access to the entire store state
*
* @returns Entire store state
*/
export const useStore = () => {
return useAppSelector((state) => state);
};
/**
* Use Persistence Status Hook
*
* Purpose: Get Redux Persist status
*
* @returns Persistence status
*/
export const usePersistenceStatus = () => {
// This would need to be implemented with a custom selector
// that accesses the persistor state
return {
isRehydrated: true, // Placeholder
isPersisting: false, // Placeholder
};
};
/*
* End of File: hooks.ts
* Design & Developed by Tech4Biz Solutions
* Copyright (c) Spurrin Innovations. All rights reserved.
*/