- Get started by editing pages/index.js
-
diff --git a/pages/index.js b/pages/index.js index 809d0de8..1f87045c 100644 --- a/pages/index.js +++ b/pages/index.js @@ -1,23 +1,93 @@ +// pages/index.js import Head from 'next/head' -import Header from '@components/Header' -import Footer from '@components/Footer' +import { useRouter } from 'next/router' +import { useEffect, useMemo, useState } from 'react' export default function Home() { + const router = useRouter() + const { title: qTitle, gpt: qGpt } = router.query + + // クエリを文字列に整形 + const title = useMemo(() => (typeof qTitle === 'string' ? qTitle : ''), [qTitle]) + const gpt = useMemo(() => (typeof qGpt === 'string' ? qGpt : ''), [qGpt]) + + const [status, setStatus] = useState('') + const [showUrl, setShowUrl] = useState(false) + + // クリップボードコピー(失敗時は案内だけ表示) + const copyHeadline = async () => { + try { + if (title) { + await navigator.clipboard.writeText(title) + setStatus('✅ 見出しをコピーしました。') + } else { + setStatus('⚠️ 見出しが取得できませんでした。リンクを確認してください。') + } + } catch (e) { + setStatus('⚠️ 自動コピーに失敗。必要なら長押し/ドラッグで手動コピーしてください。') + } + } + + // 同一タブでChatGPTを開く(新規タブは使わない) + const openChatGPT = () => { + if (!gpt) { + setStatus('⚠️ ChatGPTリンクが無効です。') + return + } + try { + // Drive/Gmailの内蔵ビューア誤爆を避けるため top.location を優先 + window.top.location.href = gpt + } catch { + window.location.href = gpt + } + } + + useEffect(() => { + // 初期メッセージ + setStatus('') + }, [title, gpt]) + return ( -
- Get started by editing pages/index.js
-
{title || '(未取得)'}