"use client"; import useSWR from "swr"; import { useState, useEffect } from "react"; import { useToast } from "@/app/components/ui/ToastProvider"; import { Modal } from "@/app/components/ui/Modal"; const fetcher = (url: string) => fetch(url).then((r) => r.json()); export default function MainPageSettingsPage() { const { show } = useToast(); const { data: settingsResp, mutate: mutateSettings } = useSWR<{ settings: any }>("/api/admin/mainpage-settings", fetcher); const { data: boardsResp } = useSWR<{ boards: any[] }>("/api/admin/boards", fetcher); const { data: catsResp } = useSWR<{ categories: any[] }>("/api/admin/categories", fetcher); const settings = settingsResp?.settings ?? {}; const boards = boardsResp?.boards ?? []; const categories = catsResp?.categories ?? []; const [saving, setSaving] = useState(false); const [showBoardModal, setShowBoardModal] = useState(false); const [draft, setDraft] = useState({ showBanner: settings.showBanner ?? true, showPartnerShops: settings.showPartnerShops ?? true, visibleBoardIds: settings.visibleBoardIds ?? [], }); // settings가 로드되면 draft 동기화 useEffect(() => { if (settingsResp?.settings) { setDraft({ showBanner: settings.showBanner ?? true, showPartnerShops: settings.showPartnerShops ?? true, visibleBoardIds: settings.visibleBoardIds ?? [], }); } }, [settingsResp, settings]); async function save() { setSaving(true); try { const res = await fetch("/api/admin/mainpage-settings", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(draft), }); if (!res.ok) throw new Error("save_failed"); const data = await res.json(); // 저장된 설정으로 즉시 업데이트 await mutateSettings({ settings: data.settings }, { revalidate: false }); show("저장되었습니다."); } catch (e) { console.error(e); show("저장 중 오류가 발생했습니다."); } finally { setSaving(false); } } return (
선택된 게시판이 없습니다.
) : ( draft.visibleBoardIds.map((boardId: string) => { const board = boards.find((b: any) => b.id === boardId); if (!board) return null; const category = categories.find((c: any) => c.id === board.categoryId); return (추가할 수 있는 게시판이 없습니다.
)}