deckhearth/pages/deck/[id].js
Randall Stillwell 3da66d9b29 refactor(deck): useDeckDetail + DeckDetailView (Brief 3)
Extract detail page state into useDeckDetail and layout into DeckDetailView;
pages/deck/[id].js is a thin loading/not-found gated composer.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 01:13:07 -05:00

50 lines
1.4 KiB
JavaScript

import Link from 'next/link';
import Layout from '../../components/Layout';
import DeckDetailView from '../../components/DeckDetailView';
import { useAuth } from '../../lib/use-auth';
import { useDeckDetail } from '../../lib/use-deck-detail.js';
export default function DeckDetail() {
const { user, loading: authLoading } = useAuth();
const detail = useDeckDetail({ user, authLoading });
if (detail.showDeckLoading) {
return (
<Layout user={user}>
<div className="flex items-center justify-center min-h-screen">
<div
className="animate-spin rounded-full h-32 w-32 border-b-2"
style={{ borderColor: 'var(--accent-ember)' }}
/>
</div>
</Layout>
);
}
if (detail.showDeckNotFound) {
return (
<Layout user={user}>
<div className="flex items-center justify-center min-h-screen">
<div className="text-center">
<h1 className="text-2xl font-bold mb-4" style={{ color: 'var(--text-primary)' }}>
Deck not found
</h1>
<Link
href="/decks"
className="hover:underline"
style={{ color: 'var(--accent-ember)' }}
>
Back to Decks
</Link>
</div>
</div>
</Layout>
);
}
return (
<Layout user={user}>
<DeckDetailView {...detail} />
</Layout>
);
}