diff --git a/src/api/responses.ts b/src/api/responses.ts index 438eebfb..4ddf3478 100644 --- a/src/api/responses.ts +++ b/src/api/responses.ts @@ -143,13 +143,45 @@ export const responsesApi = { }, // GET /responses/received - Get all responses RECEIVED for forms owned by the user - getAllReceived: async (): Promise> => { - const response = await fetch(`${API_URL}/responses/received`, { - method: 'GET', - headers: { 'Content-Type': 'application/json' }, - credentials: 'include', - }) + // Falls back to fetching per-form if endpoint doesn't exist on deployed backend + getAllReceived: async (formIds?: Array): Promise> => { + try { + const response = await fetch(`${API_URL}/responses/received`, { + method: 'GET', + headers: { 'Content-Type': 'application/json' }, + credentials: 'include', + }) + if (response.ok) { + return handleResponse>(response) + } + } catch { + // endpoint doesn't exist, fall through to per-form fallback + } + + // Fallback: fetch responses per form using existing endpoint + if (!formIds || formIds.length === 0) return [] - return handleResponse>(response) + const results: Array = [] + for (const formId of formIds) { + try { + const perFormResponses = await responsesApi.getForForm(formId) + for (const r of perFormResponses) { + results.push({ + id: r.id, + formId: r.formId, + formName: r.formTitle, + responder: 'Respondent', + email: '', + answers: r.answers, + isSubmitted: true, + status: 'Completed', + createdAt: new Date().toISOString(), + }) + } + } catch { + // form may have no responses, skip + } + } + return results }, } diff --git a/src/routes/_layout.analytics.index.tsx b/src/routes/_layout.analytics.index.tsx index d0fa6878..a0ad33f4 100644 --- a/src/routes/_layout.analytics.index.tsx +++ b/src/routes/_layout.analytics.index.tsx @@ -47,12 +47,13 @@ function AnalyticsOverviewPage() { queryFn: () => formsApi.getAll(), }) - // Fetch all received responses + // Fetch all received responses (with per-form fallback for deployed backend) const { data: allResponses = [], } = useQuery({ - queryKey: ['received-responses'], - queryFn: () => responsesApi.getAllReceived(), + queryKey: ['received-responses', forms?.map(f => f.id)], + queryFn: () => responsesApi.getAllReceived(forms?.map(f => f.id)), + enabled: !!forms, retry: false, }) diff --git a/src/routes/_layout.analytics.responses.tsx b/src/routes/_layout.analytics.responses.tsx index f4c62a2d..58b4bed7 100644 --- a/src/routes/_layout.analytics.responses.tsx +++ b/src/routes/_layout.analytics.responses.tsx @@ -59,13 +59,14 @@ function ResponsesPage() { queryFn: () => formsApi.getAll(), }) - // Aggregate responses for all forms + // Aggregate responses for all forms (with per-form fallback for deployed backend) const { data: allResponses = [], isLoading: isAllResponsesLoading, } = useQuery({ - queryKey: ['received-responses'], - queryFn: () => responsesApi.getAllReceived(), + queryKey: ['received-responses', forms?.map(f => f.id)], + queryFn: () => responsesApi.getAllReceived(forms?.map(f => f.id)), + enabled: !!forms, retry: false, })