React Hooks API Reference
This document provides API documentation for the custom React hooks in the Kuviq application.
Overview
Custom hooks encapsulate reusable stateful logic and provide clean interfaces for components. They follow React conventions and handle:
- Data fetching and caching
- Form management
- Authentication state
- Permission checks
- Real-time updates
Data Fetching Hooks
useInspections
Fetches and manages inspection data with filtering, sorting, and pagination.
import { useInspections } from '@/hooks/useInspections'
Parameters
interface UseInspectionsParams {
filters?: Record<string, string | string[]>
search?: string
sortField?: string
sortDirection?: 'asc' | 'desc'
page?: number
pageSize?: number
}
Returns
{
inspections: Inspection[]
loading: boolean
error: ContextError | null
totalCount: number
}
Example
const { inspections, loading, error } = useInspections({
filters: { status: 'pending' },
sortField: 'dueDate',
sortDirection: 'asc',
pageSize: 25,
})
useItems
Fetches and manages item data.
import { useItems } from '@/hooks/useItems'
Returns
{
items: Item[]
loading: boolean
error: ContextError | null
refetch: () => Promise<void>
createItem: (item: Partial<Item>) => Promise<Item>
updateItem: (id: string, updates: Partial<Item>) => Promise<void>
deleteItem: (id: string) => Promise<void>
}
useInspectionTemplates
Manages inspection templates.
import { useInspectionTemplates } from '@/hooks/useInspectionTemplates'
Returns
{
templates: InspectionTemplate[]
loading: boolean
error: ContextError | null
createTemplate: (template: Partial<InspectionTemplate>) => Promise<InspectionTemplate>
updateTemplate: (id: string, updates: Partial<InspectionTemplate>) => Promise<void>
deleteTemplate: (id: string) => Promise<void>
}
useInspectionSchedules
Manages inspection schedules.
import { useInspectionSchedules } from '@/hooks/useInspectionSchedules'
Returns
{
schedules: InspectionSchedule[]
loading: boolean
error: ContextError | null
createSchedule: (schedule: Partial<InspectionSchedule>) => Promise<InspectionSchedule>
updateSchedule: (id: string, updates: Partial<InspectionSchedule>) => Promise<void>
deleteSchedule: (id: string) => Promise<void>
}
useGroups
Manages item groups.
import { useGroups } from '@/hooks/useGroups'
Returns
{
groups: ItemGroup[]
loading: boolean
error: ContextError | null
createGroup: (group: Partial<ItemGroup>) => Promise<ItemGroup>
updateGroup: (id: string, updates: Partial<ItemGroup>) => Promise<void>
deleteGroup: (id: string) => Promise<void>
}
Authentication & Authorization Hooks
useAuth
Provides authentication state and methods.
import { useAuth } from '@/hooks/useAuth'
Returns
{
user: User | null
loading: boolean
error: Error | null
signIn: (email: string, password: string) => Promise<void>
signOut: () => Promise<void>
signUp: (email: string, password: string, displayName: string) => Promise<void>
resetPassword: (email: string) => Promise<void>
updateProfile: (updates: Partial<User>) => Promise<void>
}
usePermissions
Checks user permissions for actions.
import { usePermissions } from '@/hooks/usePermissions'
Returns
{
hasPermission: (permission: Permission) => boolean
hasAnyPermission: (permissions: Permission[]) => boolean
hasAllPermissions: (permissions: Permission[]) => boolean
userRole: UserRole
isAdmin: boolean
isSuperAdmin: boolean
}
Example
const { hasPermission, isAdmin } = usePermissions()
if (hasPermission('items.create')) {
// Show create button
}
useSession
Manages user session with timeout warnings.
import { useSession } from '@/hooks/useSession'
Returns
{
isSessionValid: boolean
timeRemaining: number // seconds
showWarning: boolean
extendSession: () => void
endSession: () => void
}
useFeatureGate
Checks if features are available for the current subscription.
import { useFeatureGate } from '@/hooks/useFeatureGate'
Parameters
useFeatureGate(featureName: string)
Returns
{
hasAccess: boolean
loading: boolean
feature: FeatureConfig | null
}
Example
const { hasAccess } = useFeatureGate('advanced_reports')
if (!hasAccess) {
return <UpgradePrompt feature="Advanced Reports" />
}
Form Hooks
useFormManagement
Provides form state management with validation.
import { useFormManagement } from '@/hooks/useFormManagement'
Parameters
interface UseFormManagementParams<T> {
initialValues: T
validationSchema?: ValidationSchema<T>
onSubmit: (values: T) => Promise<void>
}
Returns
{
values: T
errors: Record<string, string>
touched: Record<string, boolean>
isSubmitting: boolean
isValid: boolean
isDirty: boolean
handleChange: (field: string, value: any) => void
handleBlur: (field: string) => void
handleSubmit: (e?: FormEvent) => Promise<void>
resetForm: () => void
setFieldValue: (field: string, value: any) => void
setFieldError: (field: string, error: string) => void
}
useFormSubmission
Handles form submission with loading and error states.
import { useFormSubmission } from '@/hooks/useFormSubmission'
Returns
{
isSubmitting: boolean
error: Error | null
submit: <T>(fn: () => Promise<T>) => Promise<T | undefined>
reset: () => void
}
useFormOptimization
Optimizes form performance for large forms.
import { useFormOptimization } from '@/hooks/useFormOptimization'
Returns
{
debouncedValue: <T>(value: T, delay?: number) => T
memoizedCallback: <T extends Function>(callback: T, deps: any[]) => T
}
useMemoizedValidation
Memoizes validation results for performance.
import { useMemoizedValidation } from '@/hooks/useMemoizedValidation'
Utility Hooks
useDebounce
Debounces a value.
import { useDebounce } from '@/hooks/useDebounce'
Parameters
useDebounce<T>(value: T, delay: number): T
Example
const [searchTerm, setSearchTerm] = useState('')
const debouncedSearch = useDebounce(searchTerm, 300)
// Use debouncedSearch for API calls
useNetwork
Monitors network connectivity.
import { useNetwork } from '@/hooks/useNetwork'
Returns
{
isOnline: boolean
wasOffline: boolean // was offline since mount
connectionType: string | null // 'wifi', '4g', etc.
}
useNotification
Shows toast notifications.
import { useNotification } from '@/hooks/useNotification'
Returns
{
showSuccess: (message: string) => void
showError: (message: string | Error) => void
showWarning: (message: string) => void
showInfo: (message: string) => void
}
Example
const { showSuccess, showError } = useNotification()
try {
await saveItem(item)
showSuccess('Item saved successfully')
} catch (error) {
showError(error)
}
useInfiniteScroll
Implements infinite scroll pagination.
import { useInfiniteScroll } from '@/hooks/useInfiniteScroll'
Parameters
interface UseInfiniteScrollParams {
fetchMore: () => Promise<void>
hasMore: boolean
threshold?: number // pixels from bottom
}
Returns
{
ref: RefObject<HTMLElement> // attach to scroll container
isLoading: boolean
}
Export Hooks
useExport
Handles data export functionality.
import { useExport } from '@/hooks/useExport'
Returns
{
exportToExcel: (data: any[], filename: string) => Promise<void>
exportToCsv: (data: any[], filename: string) => Promise<void>
exportToPdf: (data: any[], config: PdfConfig) => Promise<void>
isExporting: boolean
error: Error | null
}
useDashboardExport
Exports dashboard data and charts.
import { useDashboardExport } from '@/hooks/useDashboardExport'
Returns
{
exportDashboard: (format: 'pdf' | 'png') => Promise<void>
isExporting: boolean
}
useUnifiedImportExport
Unified import/export operations.
import { useUnifiedImportExport } from '@/hooks/useUnifiedImportExport'
Returns
{
importData: (entityType: string, file: File) => Promise<ImportResult>
exportData: (entityType: string, format: string) => Promise<void>
isImporting: boolean
isExporting: boolean
importProgress: number
exportProgress: number
error: Error | null
}
Performance Hooks
usePerformanceMonitoring
Monitors component performance.
import { usePerformanceMonitoring } from '@/hooks/usePerformanceMonitoring'
Parameters
usePerformanceMonitoring(componentName: string)
Returns
{
trackRender: () => void
trackInteraction: (name: string) => void
}
useMonitoring
Application-level monitoring integration.
import { useMonitoring } from '@/hooks/useMonitoring'
Returns
{
trackError: (error: Error, context?: object) => void
trackEvent: (name: string, properties?: object) => void
startSpan: (name: string) => Span
}
useImagePreloader
Preloads images for better UX.
import { useImagePreloader } from '@/hooks/useImagePreloader'
Parameters
useImagePreloader(urls: string[])
Returns
{
loaded: boolean
progress: number // 0-100
errors: string[] // failed URLs
}
Inspection Execution Hooks
useInspectionExecution
Manages inspection execution workflow.
import { useInspectionExecution } from '@/hooks/useInspectionExecution'
Returns
{
currentInspection: Inspection | null
inspectionData: InspectionData
isExecuting: boolean
startInspection: (inspectionId: string) => Promise<void>
pauseInspection: () => Promise<void>
resumeInspection: () => Promise<void>
completeInspection: (results: InspectionResults) => Promise<void>
cancelInspection: () => Promise<void>
updateResponse: (elementId: string, value: any) => void
}
useInspectionTracking
Tracks inspection progress and time.
import { useInspectionTracking } from '@/hooks/useInspectionTracking'
Returns
{
startTime: Date | null
elapsedTime: number // seconds
completedElements: number
totalElements: number
progress: number // 0-100
}
useInspectionFilters
URL-based inspection filtering.
import { useInspectionFilters } from '@/hooks/useInspectionFilters'
Returns
{
filters: Record<string, string>
activeView: string | null
getViewTitle: () => string
setFilter: (key: string, value: string) => void
clearFilters: () => void
hasActiveFilters: boolean
}
Upload Hooks
useUploadProgress
Tracks file upload progress.
import { useUploadProgress } from '@/hooks/useUploadProgress'
Returns
{
progress: number // 0-100
isUploading: boolean
error: Error | null
upload: (file: File, path: string) => Promise<string> // returns URL
cancel: () => void
}
Best Practices
Error Handling
All hooks that fetch data include error states:
const { data, loading, error } = useSomeHook()
if (error) {
return <ErrorDisplay error={error} />
}
if (loading) {
return <LoadingSpinner />
}
Cleanup
Hooks automatically handle cleanup on unmount. No manual cleanup needed.
Memoization
Use hooks with useMemo and useCallback when passing to child components:
const filters = useMemo(() => ({ status: 'active' }), [])
const { items } = useItems(filters)
Context Dependencies
Many hooks require context providers:
// App.tsx
<AuthProvider>
<OrganizationProvider>
<FirestoreProvider>
{children}
</FirestoreProvider>
</OrganizationProvider>
</AuthProvider>