import { createClient } from '@/lib/supabase' import type { BrandConfig, Question, Survey } from '@/lib/types' import { SurveyForm } from '@/components/survey-form' // Force dynamic rendering — page fetches from Supabase at request time. export const dynamic = 'force-dynamic' // In Next.js 15, searchParams is a Promise and must be awaited. interface PageProps { searchParams: Promise<{ s?: string }> } export default async function Page({ searchParams }: PageProps) { const { s: surveyId } = await searchParams const supabase = createClient() // 1. Fetch survey — by ?s=UUID if provided, otherwise first live survey const surveyQuery = supabase .from('surveys') .select('id, org_id, title, status, is_anonymous, k_threshold, consent_version_id, brand_config') const { data: surveyRow, error: surveyError } = surveyId ? await surveyQuery.eq('id', surveyId).maybeSingle() : await surveyQuery.eq('status', 'live').maybeSingle() if (surveyError) { return (

Error al cargar la encuesta

No fue posible conectarse a la base de datos. Revisá las variables de entorno.

{surveyError.message}
) } if (!surveyRow) { return (

No hay encuesta activa

Para ver el formulario, la encuesta debe estar en estado live, o pasá el UUID por parámetro: ?s=UUID.

          {`-- Activar en Supabase Cloud:\nUPDATE surveys SET status = 'live'\nWHERE id = '30000000-0000-0000-0000-000000000001';`}
        
) } // 2. Fetch questions ordered by position const { data: questionRows, error: questionsError } = await supabase .from('questions') .select( 'id, survey_id, code, type, prompt, position, is_sensitive, required, max_select, options, conditional_rules' ) .eq('survey_id', surveyRow.id) .order('position', { ascending: true }) if (questionsError || !questionRows) { return (

Error al cargar las preguntas

{questionsError?.message ?? 'Respuesta vacía del servidor.'}

) } const questions = questionRows as Question[] console.log(`[2B] Survey loaded: id=${surveyRow.id} | questions=${questions.length}`) const survey: Survey = { id: surveyRow.id, org_id: surveyRow.org_id, title: surveyRow.title, status: surveyRow.status, is_anonymous: surveyRow.is_anonymous, k_threshold: surveyRow.k_threshold, consent_version_id: surveyRow.consent_version_id, brand_config: (surveyRow.brand_config as BrandConfig) ?? null, questions, } return }