MATIH Platform is in active MVP development. Documentation reflects current implementation status.
15. Workbench Architecture
Shared Library Deep Dive
Custom Hooks

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:

HookAPI ClientKey Queries/Mutations
useBIServiceBIApiClientDashboard CRUD, widget management
useQueryServiceQueryApiClientSQL execution, query history
useSemanticServiceSemanticApiClientSemantic model operations
useAIServiceAIApiClientChat sessions, streaming
useMLServiceMLApiClientExperiments, model registry
useDataServiceDataApiClientCatalog search, asset details
usePipelineServicePipelineApiClientPipeline CRUD, scheduling
useDbtServiceDbtApiClientdbt project management
useDataQualityServiceDataQualityApiClientQuality rules, profiles
useGovernanceServiceGovernanceApiClientPolicies, classifications
useOntologyServiceOntologyApiClientObject type management
useOpsAgentServiceOpsAgentApiClientOps 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

HookPurpose
useRetryFetchFetch wrapper with configurable retry logic
useConnectionStatusNetwork connectivity monitoring
useOfflineDetectionOffline state detection with queue
useRequestCancelAbortController 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:

HookPurpose
useFocusTrapTrap focus within a modal/dialog
useFocusManagerProgrammatic focus management
useAnnounceARIA live region announcements
useArrowNavigationArrow key navigation for lists
useReducedMotionDetect reduced motion preference
useSkipLinkSkip link navigation
useLiveRegionDynamic live region management
useIdUnique ID generation for ARIA
useDescribedByARIA describedby management

Performance Hooks

Exported from usePerformance.tsx:

FunctionPurpose
usePerformanceComponent render performance tracking
usePerformanceReporterPerformance data reporting
withPerformanceHOC for performance wrapping
getPerformanceMetricsGet collected performance data
getSlowComponentsIdentify slow-rendering components
measureTime / measureTimeAsyncManual 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, usePlatformUsageTrends
  • useTenantMetrics, useTenantUsageTrends
  • usePlatformCostSummary, useCostAllocation
  • useAlertConfigs, useActiveAlerts

Audit Hooks (useAudit.ts)

  • useAuditEvents, useAuditEvent
  • useAuditTimeline, useUserActivity
  • useComplianceReports, useRetentionPolicies
  • useExportAuditLogs

Billing Hooks (useBilling.ts)

  • usePlans, useSubscription
  • useInvoices, usePaymentMethods
  • useCostForecast, useSpendingAlerts
  • useCurrentUsage, 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.