From 3fc04ee8d580f2712d0ac12d7c0d8753a69891fd Mon Sep 17 00:00:00 2001 From: chihlasm Date: Mon, 16 Mar 2026 01:09:09 -0400 Subject: [PATCH] feat: add useTicketContext hook for PSA ticket context fetching Accepts psaTicketId and psaConnectionId, fetches context on mount when both IDs are present, and exposes refresh() for manual re-fetch. Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/hooks/useTicketContext.ts | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 frontend/src/hooks/useTicketContext.ts diff --git a/frontend/src/hooks/useTicketContext.ts b/frontend/src/hooks/useTicketContext.ts new file mode 100644 index 00000000..523c8d71 --- /dev/null +++ b/frontend/src/hooks/useTicketContext.ts @@ -0,0 +1,40 @@ +import { useState, useEffect, useCallback } from 'react' +import { psaContextApi, type TicketContext } from '@/api/psaContext' + +interface UseTicketContextResult { + context: TicketContext | null + loading: boolean + error: string | null + refresh: () => void +} + +export function useTicketContext( + psaTicketId: string | null | undefined, + psaConnectionId: string | null | undefined +): UseTicketContextResult { + const [context, setContext] = useState(null) + const [loading, setLoading] = useState(false) + const [error, setError] = useState(null) + + const fetchContext = useCallback(async () => { + if (!psaTicketId || !psaConnectionId) return + + setLoading(true) + setError(null) + try { + const data = await psaContextApi.getTicketContext(psaTicketId) + setContext(data) + } catch (err) { + const message = err instanceof Error ? err.message : 'Failed to load ticket context' + setError(message) + } finally { + setLoading(false) + } + }, [psaTicketId, psaConnectionId]) + + useEffect(() => { + fetchContext() + }, [fetchContext]) + + return { context, loading, error, refresh: fetchContext } +}