"use client"; import DisabledNotice from "@/components/disabled-notice"; import { FEATURES } from "@/lib/features"; import { use, useEffect, useState } from "react"; import Link from "next/link"; import MetadataCard from "@/components/metadata-card"; import { InternalOnlyWarning, LicenseBadge } from "@/components/license-badge"; import { apiFetch, archiveKind, type ArchiveEntry } from "@/lib/api"; function ArchiveDetailPageInner({ params }: { params: Promise<{ slug: string }> }) { const { slug } = use(params); const [entry, setEntry] = useState(null); const [error, setError] = useState(null); useEffect(() => { apiFetch(`/api/archive/${slug}`).then(setEntry).catch((e) => setError(e.message)); }, [slug]); if (error) return

{error}

; if (!entry) return

불러오는 중…

; return (
‹ 아카이브
{archiveKind(entry)}

{entry.metadata?.event_name ?? entry.name}

{entry.video_url ? (
{entry.metadata && } {entry.narration && (

나레이션

    {entry.narration.map((s, i) =>
  1. {s}
  2. )}
)} {entry.f2_variants.length > 0 && (

스타일 변형

{entry.f2_variants.some((v) => v.license === "internal-only") && ( )}
{entry.f2_variants.map((v) => (
{/* eslint-disable-next-line @next/next/no-img-element */} {v.name_ko

{v.name_ko ?? v.template_id}

))}
)}
); } export default function ArchiveDetailPage(props: Parameters[0]) { if (!FEATURES.archive) return ; return ; }