feat(admin): vista respuestas mejorada + vista detallada [admin]
/admin/responses: filtro survey dinámico (select, no hardcodeado), paginación 50/página, link a vista detallada, conteos consistentes con el filtro de preguntas permitidas (evita página fantasma al final). /admin/responses/[id]: respuestas agrupadas por sección (derivado de type='section', igual que el wizard — no existen section_number/ section_title, ver TECH-DEBT-011), instancias bajo "Familiar N". RLS y exclusión de sensibles intactos en ambas vistas. Fixes de revisión antes de cerrar: toggle expandir/colapsar movido a un <button> real (evita anidar el link "Ver" dentro de un role=button), formatDate/renderValue unificados en admin-format.ts, queries independientes en paralelo (Promise.all).
This commit is contained in:
31
app/admin/responses/survey-select.tsx
Normal file
31
app/admin/responses/survey-select.tsx
Normal file
@@ -0,0 +1,31 @@
|
||||
'use client'
|
||||
|
||||
import { useRouter } from 'next/navigation'
|
||||
|
||||
interface SurveyOption {
|
||||
id: string
|
||||
title: string
|
||||
}
|
||||
|
||||
export function SurveySelect({ surveys, value }: { surveys: SurveyOption[]; value: string }) {
|
||||
const router = useRouter()
|
||||
|
||||
return (
|
||||
<select
|
||||
className="admin-survey-select"
|
||||
aria-label="Selección de encuesta"
|
||||
value={value}
|
||||
onChange={(e) => {
|
||||
const id = e.target.value
|
||||
router.push(id ? `/admin/responses?survey_id=${id}` : '/admin/responses')
|
||||
}}
|
||||
>
|
||||
<option value="">Todos los surveys</option>
|
||||
{surveys.map((s) => (
|
||||
<option key={s.id} value={s.id}>
|
||||
{s.title}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user