From 97fe2249fef6dfb619b4c87df4799248ac515725 Mon Sep 17 00:00:00 2001 From: Celes Renata Date: Wed, 29 Apr 2026 17:20:03 +0000 Subject: [PATCH] fix: extract competitive_signals array from API response wrapper The /api/patterns/{ticker}/competitive-signals endpoint returns {competitive_signals: [...], count: N} but the hook was typed as returning a raw array. The component called .map() on the object, causing 'e.map is not a function'. Now extracts the array from the response wrapper. --- frontend/src/api/hooks.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/src/api/hooks.ts b/frontend/src/api/hooks.ts index c529f79..8ff1ac6 100644 --- a/frontend/src/api/hooks.ts +++ b/frontend/src/api/hooks.ts @@ -662,12 +662,18 @@ export interface CompetitiveSignal { } export function useCompetitiveSignals(ticker: string | undefined) { - return useGet( + const result = useGet( ['competitive-signals', ticker], 'query', `/api/patterns/${ticker}/competitive-signals`, !!ticker, ); + // API returns { competitive_signals: [...] } wrapper — extract the array + const data = result.data; + const signals: CompetitiveSignal[] | undefined = data + ? (Array.isArray(data) ? data : (data as { competitive_signals: CompetitiveSignal[] }).competitive_signals ?? []) + : undefined; + return { ...result, data: signals }; } // ---------------------------------------------------------------------------