feat: Implement typed error contracts in generic hooks
Introduce discriminated FetchError union type to replace weak string error handling in API calls and hooks. Enables actionable error diagnostics. Changes: - Create types/api.ts with FetchError discriminated union (api_error, network_error, abort_error) - Export type guards: isAuthError, isAbortError, isNetworkError, isApiError - Update useListData and usePolledData to expose typed FetchError instead of string - Add getErrorMessage() helper to extract displayable messages from FetchError - Add createStringErrorAdapter() for backward compatibility with string error state - Update handleFetchError() to work with both FetchError and string setters - Update all consumer hooks to expose typed errors - Update components to use getErrorMessage() when displaying errors - Update tests to mock FetchError instead of strings - Add comprehensive typed error model documentation to Web-Development.md This enables better error handling patterns: - Check error.type to distinguish between API, network, and abort errors - Extract status codes for specific handling (401/403 auth, 50x server errors) - Maintain backward compatibility with existing string-based error states All TypeScript compilation passes with no errors. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -13,12 +13,13 @@ import {
|
||||
} from "../api/jails";
|
||||
import { useListData } from "./useListData";
|
||||
import type { JailSummary, JailListResponse } from "../types/jail";
|
||||
import type { FetchError } from "../types/api";
|
||||
|
||||
export interface UseJailsResult {
|
||||
jails: JailSummary[];
|
||||
total: number;
|
||||
loading: boolean;
|
||||
error: string | null;
|
||||
error: FetchError | null;
|
||||
refresh: () => void;
|
||||
startJail: (name: string) => Promise<void>;
|
||||
stopJail: (name: string) => Promise<void>;
|
||||
|
||||
Reference in New Issue
Block a user