Custom Hooks
The shared library provides 28+ custom React hooks at frontend/shared/src/hooks/, organized into five categories: service hooks for API integration, resilience hooks for network reliability, accessibility hooks for WCAG compliance, performance hooks for monitoring, and domain-specific hooks for lineage, caching, and export.
Service Hooks
These hooks wrap the API client modules with TanStack Query for caching, loading states, and error handling:
| Hook | API Client | Key Queries/Mutations |
|---|---|---|
useBIService | BIApiClient | Dashboard CRUD, widget management |
useQueryService | QueryApiClient | SQL execution, query history |
useSemanticService | SemanticApiClient | Semantic model operations |
useAIService | AIApiClient | Chat sessions, streaming |
useMLService | MLApiClient | Experiments, model registry |
useDataService | DataApiClient | Catalog search, asset details |
usePipelineService | PipelineApiClient | Pipeline CRUD, scheduling |
useDbtService | DbtApiClient | dbt project management |
useDataQualityService | DataQualityApiClient | Quality rules, profiles |
useGovernanceService | GovernanceApiClient | Policies, classifications |
useOntologyService | OntologyApiClient | Object type management |
useOpsAgentService | OpsAgentApiClient | Ops chat, health checks |
useApiClient Hook
The foundational hook providing access to all initialized API clients:
// frontend/shared/src/hooks/useApiClient.tsx
export function useApiClients(): ApiClients {
return getApiClients();
}
export function useApiClientStatus(): { isInitialized: boolean } {
// Returns whether API clients have been initialized
}Resilience Hooks
| Hook | Purpose |
|---|---|
useRetryFetch | Fetch wrapper with configurable retry logic |
useConnectionStatus | Network connectivity monitoring |
useOfflineDetection | Offline state detection with queue |
useRequestCancel | AbortController management for request cancellation |
useRetryFetch
const { data, error, isLoading, retry } = useRetryFetch('/api/data', {
maxRetries: 3,
retryDelay: 1000,
retryOn: [500, 502, 503],
});Accessibility Hooks
Exported from useAccessibility.ts:
| Hook | Purpose |
|---|---|
useFocusTrap | Trap focus within a modal/dialog |
useFocusManager | Programmatic focus management |
useAnnounce | ARIA live region announcements |
useArrowNavigation | Arrow key navigation for lists |
useReducedMotion | Detect reduced motion preference |
useSkipLink | Skip link navigation |
useLiveRegion | Dynamic live region management |
useId | Unique ID generation for ARIA |
useDescribedBy | ARIA describedby management |
Performance Hooks
Exported from usePerformance.tsx:
| Function | Purpose |
|---|---|
usePerformance | Component render performance tracking |
usePerformanceReporter | Performance data reporting |
withPerformance | HOC for performance wrapping |
getPerformanceMetrics | Get collected performance data |
getSlowComponents | Identify slow-rendering components |
measureTime / measureTimeAsync | Manual timing utilities |
Domain-Specific Hooks
Lineage Hooks (useLineage.ts)
const { data: lineage, isLoading } = useLineage(assetId, { depth: 3 });
const { data: upstream } = useUpstreamLineage(assetId);
const { data: downstream } = useDownstreamLineage(assetId);
const { data: impact } = useImpactAnalysis(assetId);Analytics Hooks (useAnalytics.ts)
Provides 20+ hooks for cross-tenant analytics:
usePlatformMetrics,usePlatformUsageTrendsuseTenantMetrics,useTenantUsageTrendsusePlatformCostSummary,useCostAllocationuseAlertConfigs,useActiveAlerts
Audit Hooks (useAudit.ts)
useAuditEvents,useAuditEventuseAuditTimeline,useUserActivityuseComplianceReports,useRetentionPoliciesuseExportAuditLogs
Billing Hooks (useBilling.ts)
usePlans,useSubscriptionuseInvoices,usePaymentMethodsuseCostForecast,useSpendingAlertsuseCurrentUsage,useUsageHistory
Cross-Workbench Hook (useCrossWorkbench.ts)
Provides a convenience wrapper around the crossWorkbenchStore:
const { selectedEntity, selectEntity, requestNavigation } = useCrossWorkbench();Export Hook (useExport.ts)
const { exportToPdf, exportToPng, exportToCsv, isExporting } = useExport();Semantic Cache Hook (useSemanticCache.ts)
Provides client-side caching for semantic model data with LRU eviction.