"use client"; import { useState, useEffect } from "react"; import Link from "next/link"; import { Globe, Sparkles, FileText, Users, BookOpen, Star, Calendar, DollarSign, HelpCircle, Newspaper, Phone, ClipboardList, DoorOpen, UserPlus, } from "lucide-react"; import { adminFetch } from "@/lib/csrf"; interface UnreadCounts { groupBookings: number; mcRegistrations: number; openDayBookings: number; total: number; } const CARDS = [ { href: "/admin/meta", label: "SEO / Мета", icon: Globe, desc: "Заголовок и описание сайта" }, { href: "/admin/hero", label: "Главный экран", icon: Sparkles, desc: "Заголовок, подзаголовок, кнопка" }, { href: "/admin/about", label: "О студии", icon: FileText, desc: "Текст о студии" }, { href: "/admin/team", label: "Команда", icon: Users, desc: "Тренеры и инструкторы" }, { href: "/admin/classes", label: "Направления", icon: BookOpen, desc: "Типы занятий" }, { href: "/admin/master-classes", label: "Мастер-классы", icon: Star, desc: "Мастер-классы и записи" }, { href: "/admin/open-day", label: "День открытых дверей", icon: DoorOpen, desc: "Открытые занятия, расписание, записи" }, { href: "/admin/schedule", label: "Расписание", icon: Calendar, desc: "Расписание занятий" }, { href: "/admin/bookings", label: "Записи", icon: ClipboardList, desc: "Все записи и заявки" }, { href: "/admin/pricing", label: "Цены", icon: DollarSign, desc: "Абонементы и аренда" }, { href: "/admin/faq", label: "FAQ", icon: HelpCircle, desc: "Часто задаваемые вопросы" }, { href: "/admin/news", label: "Новости", icon: Newspaper, desc: "Новости и анонсы" }, { href: "/admin/contact", label: "Контакты", icon: Phone, desc: "Адреса, телефон, карта" }, ]; function UnreadWidget({ counts }: { counts: UnreadCounts }) { if (counts.total === 0) return null; const items: { label: string; count: number; tab: string }[] = []; if (counts.groupBookings > 0) items.push({ label: "Занятия", count: counts.groupBookings, tab: "classes" }); if (counts.mcRegistrations > 0) items.push({ label: "Мастер-классы", count: counts.mcRegistrations, tab: "master-classes" }); if (counts.openDayBookings > 0) items.push({ label: "День открытых дверей", count: counts.openDayBookings, tab: "open-day" }); return (

Новые записи {counts.total}

Не подтверждённые заявки

{items.map((item) => (
{item.count} {item.label}
))}
); } export default function AdminDashboard() { const [counts, setCounts] = useState(null); useEffect(() => { adminFetch("/api/admin/unread-counts") .then((r) => r.json()) .then((data: UnreadCounts) => setCounts(data)) .catch(() => {}); }, []); return (

Панель управления

Выберите раздел для редактирования

{/* Unread bookings widget */} {counts && counts.total > 0 && (
)}
{CARDS.map((card) => { const Icon = card.icon; const isBookings = card.href === "/admin/bookings"; return (

{card.label} {isBookings && counts && counts.total > 0 && ( {counts.total} )}

{card.desc}

); })}
); }