Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 39 additions & 7 deletions src/api/responses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,13 +143,45 @@ export const responsesApi = {
},

// GET /responses/received - Get all responses RECEIVED for forms owned by the user
getAllReceived: async (): Promise<Array<ReceivedResponse>> => {
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<string>): Promise<Array<ReceivedResponse>> => {
try {
const response = await fetch(`${API_URL}/responses/received`, {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
credentials: 'include',
})
if (response.ok) {
return handleResponse<Array<ReceivedResponse>>(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<Array<ReceivedResponse>>(response)
const results: Array<ReceivedResponse> = []
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
},
}
7 changes: 4 additions & 3 deletions src/routes/_layout.analytics.index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
})

Expand Down
7 changes: 4 additions & 3 deletions src/routes/_layout.analytics.responses.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
})

Expand Down
Loading