const { SiteHeader, StickyFooterCta } = window.UnaDS; const SHIRYO_PDF_PATH = '../../collateral/shushi-model-shiryo.pdf'; const SHIRYO_PDF_FILENAME = 'うなぎ乃助_収支モデル資料.pdf'; /* どのLP・どの媒体から来た訪問者かをURLから読み取る(例: ?lp=a&utm_source=instagram&utm_medium=social&utm_campaign=aug)。 広告・SNSのリンクにこのパラメータを付けておくと、リード1件ごとに出どころが記録される。 */ function leadContext() { const p = new URLSearchParams(window.location.search); return { lp_id: p.get('lp') || 'franchise-lp', utm_source: p.get('utm_source') || '', utm_medium: p.get('utm_medium') || '', utm_campaign: p.get('utm_campaign') || '' }; } /* Records the lead (Supabase), notifies Discord, and hands the PDF to the visitor. */ function submitLead(form) { const cfg = window.UNA_CONFIG || {}; const ctx = leadContext(); const record = (cfg.SUPABASE_URL && cfg.SUPABASE_ANON_KEY) ? fetch(cfg.SUPABASE_URL + '/rest/v1/leads', { method: 'POST', headers: { 'Content-Type': 'application/json', apikey: cfg.SUPABASE_ANON_KEY, Authorization: 'Bearer ' + cfg.SUPABASE_ANON_KEY, Prefer: 'return=minimal' }, body: JSON.stringify({ name: form.name, email: form.email, region: form.region, source: 'lp-shiryo', lp_id: ctx.lp_id, utm_source: ctx.utm_source, utm_medium: ctx.utm_medium, utm_campaign: ctx.utm_campaign }) }).catch(function () { /* 記録失敗でも資料は渡す */ }) : Promise.resolve(); const notify = cfg.DISCORD_WEBHOOK_URL ? (function () { /* multipart/form-data (payload_json) はCORSプリフライト不要で、ブラウザから直接送れる */ const src = ctx.utm_source ? ctx.utm_source + (ctx.utm_medium ? ' / ' + ctx.utm_medium : '') + (ctx.utm_campaign ? ' / ' + ctx.utm_campaign : '') : '直接アクセス'; const fd = new FormData(); fd.append('payload_json', JSON.stringify({ content: '📩 **LPから資料請求がありました**\nお名前: ' + form.name + '\nメール: ' + form.email + '\n地域: ' + (form.region || '未入力') + '\nLP: ' + ctx.lp_id + '\n流入元: ' + src })); return fetch(cfg.DISCORD_WEBHOOK_URL, { method: 'POST', body: fd }).catch(function () { /* 通知失敗でも資料は渡す */ }); })() : Promise.resolve(); return Promise.all([record, notify]).then(function () { const a = document.createElement('a'); a.href = SHIRYO_PDF_PATH; a.download = SHIRYO_PDF_FILENAME; document.body.appendChild(a); a.click(); a.remove(); }); } function LeadDialog({ open, onClose }) { const { Button } = window.UnaDS; const [name, setName] = React.useState(''); const [email, setEmail] = React.useState(''); const [region, setRegion] = React.useState(''); const [sent, setSent] = React.useState(false); const [busy, setBusy] = React.useState(false); const [error, setError] = React.useState(''); React.useEffect(function () { if (open) { setSent(false); setBusy(false); setError(''); } }, [open]); if (!open) return null; const inputStyle = { font: 'inherit', fontSize: 14, color: 'var(--text-body)', padding: '9px 11px', border: '1px solid var(--line-strong)', borderRadius: 'var(--radius-sm)', background: 'var(--kinari-100)' }; const handleSubmit = function () { if (!name.trim()) { setError('お名前をご入力ください。'); return; } if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim())) { setError('メールアドレスの形式をご確認ください。'); return; } setError(''); setBusy(true); submitLead({ name: name.trim(), email: email.trim(), region: region.trim() }).then(function () { setBusy(false); setSent(true); }); }; return (
収支モデル資料のご請求(無料)
{sent ? (
資料をお送りしました。

収支モデル資料(PDF)のダウンロードを開始しました。
始まらない場合は下のリンクからどうぞ。

資料をもう一度ダウンロードする
) : (
{error ?

{error}

: null}
)}
); } function App() { const [open, setOpen] = React.useState(false); const [scrolled, setScrolled] = React.useState(false); React.useEffect(function () { const onScroll = function () { setScrolled(window.scrollY > 420); }; window.addEventListener('scroll', onScroll); onScroll(); return function () { window.removeEventListener('scroll', onScroll); }; }, []); const cta = function () { setOpen(true); }; return (
); } ReactDOM.createRoot(document.getElementById('root')).render();