"use client"; import { useEffect, useMemo, useState } from "react"; import { useRouter } from "next/navigation"; import { browserFetch } from "../lib/api"; type Props = { makerId: string; sourceType: "profile" | "service" | "work"; sourceId?: string; makerName: string; contextTitle: string; returnTo: string; }; type Draft = { needText: string; sizeText: string; usageText: string; materialPreference: string; quantity: number; urgency: string; deliveryType: string; hasModel: boolean; referenceNotes: string; }; const initialDraft: Draft = { needText: "", sizeText: "", usageText: "", materialPreference: "", quantity: 1, urgency: "medium", deliveryType: "shipping", hasModel: false, referenceNotes: "" }; export default function InquiryWizardClient({ makerId, sourceType, sourceId, makerName, contextTitle, returnTo }: Props) { const router = useRouter(); const [step, setStep] = useState(1); const [status, setStatus] = useState(""); const [me, setMe] = useState<{ id: string } | null>(null); const [draft, setDraft] = useState(initialDraft); const storageKey = useMemo( () => `makers3d_inquiry_draft:${makerId}:${sourceType}:${sourceId || "root"}`, [makerId, sourceId, sourceType] ); useEffect(() => { const saved = window.sessionStorage.getItem(storageKey); if (saved) { try { setDraft({ ...initialDraft, ...JSON.parse(saved) as Draft }); } catch { window.sessionStorage.removeItem(storageKey); } } void browserFetch<{ user: { id: string } | null }>("/auth/me") .then((result) => setMe(result.user)) .catch(() => setMe(null)); }, [storageKey]); useEffect(() => { window.sessionStorage.setItem(storageKey, JSON.stringify(draft)); }, [draft, storageKey]); function nextStep() { setStep((current) => Math.min(5, current + 1)); } function previousStep() { setStep((current) => Math.max(1, current - 1)); } async function submitInquiry() { if (!me) { const nextUrl = `/consultas/nueva?makerId=${encodeURIComponent(makerId)}&sourceType=${encodeURIComponent(sourceType)}&sourceId=${encodeURIComponent(sourceId || "")}&makerName=${encodeURIComponent(makerName)}&contextTitle=${encodeURIComponent(contextTitle)}`; window.location.href = `/register?returnTo=${encodeURIComponent(nextUrl)}`; return; } setStatus("Enviando consulta..."); try { await browserFetch("/inquiries", { method: "POST", body: JSON.stringify({ makerId, sourceType, sourceId, needText: `${draft.needText}\n\nUso final: ${draft.usageText}\nReferencia: ${draft.referenceNotes}`.trim(), sizeText: draft.sizeText, hasModel: draft.hasModel, materialPreference: draft.materialPreference, quantity: draft.quantity, urgency: draft.urgency, deliveryType: draft.deliveryType }) }); window.sessionStorage.removeItem(storageKey); setStatus("Consulta enviada."); router.push("/account/inbox"); router.refresh(); } catch (error) { setStatus(error instanceof Error ? error.message : "No se pudo enviar la consulta"); } } return (
Consulta guiada

Paso {step} de 5

{contextTitle} Maker: {makerName} Si vuelves tras registrarte, el borrador se conserva.
{[1, 2, 3, 4, 5].map((value) => ( ))}
{step === 1 && ( <> Necesidad

Que necesitas resolver?