// reveal.jsx — 結果発表:2ページ構成(API連携版) // diagnosis prop で受け取ったDIAGNOSIS_JSON_SPEC形式のデータを表示 function RevealScreen({ diagnosis, theme, onReset, onProductTap, productSearchStart }) { const RakutenProductCard = window.RakutenProductCard; const normalizeProductList = window.normalizeProductList; const ElapsedTimer = window.ElapsedTimer; const [phase, setPhase] = React.useState(0); const [page, setPage] = React.useState("report"); const dx = diagnosis; const contentRef = React.useRef(null); React.useEffect(() => { const t1 = setTimeout(() => setPhase(1), 1400); const t2 = setTimeout(() => setPhase(2), 2600); const t3 = setTimeout(() => setPhase(3), 3400); const t4 = setTimeout(() => setPhase(4), 5000); return () => [t1, t2, t3, t4].forEach(clearTimeout); }, []); React.useEffect(() => { const stage = document.querySelector(".rv-stage"); if (stage) stage.scrollTo({ top: 0, behavior: "smooth" }); }, [page]); if (!dx || !dx.ranking) return null; const maxScore = Math.max(...dx.ranking.map((r) => r.score)); const goProducts = () => setPage("products"); const goReport = () => setPage("report"); return (
{dx.insight.summary}
「{dx.insight.headline}」
{dx.analysis.body}
「{dx.insight.headline}」
—— その欲望に、これらが応えます。
商品検索中にエラーが発生しました
{dx.productError}
楽天市場からあなたに刺さる商品を検索しています
{productSearchStart && (診断結果をもとにリアルタイムで探索中です。しばらくお待ちください。
※ {dx.meta.note}