From 96e3333e9f5bc843000e96165f0adb6b12073dfa Mon Sep 17 00:00:00 2001 From: "diana.dolgolyova" Date: Fri, 20 Mar 2026 13:35:36 +0300 Subject: [PATCH] feat: floating contact bar, remove pricing contact links, fix admin hooks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add FloatingContact bar (Записаться + Instagram) visible while scrolling - Hides on hero and near contact section, centered at bottom - Move BackToTop button up to avoid overlap - Remove redundant ContactHint from Pricing section (floating bar covers it) - Fix React hooks order violation in AdminLayout (early return before useEffect) Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/admin/layout.tsx | 15 ++++--- src/app/page.tsx | 2 + src/components/sections/Pricing.tsx | 44 ++---------------- src/components/ui/BackToTop.tsx | 2 +- src/components/ui/FloatingContact.tsx | 65 +++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 49 deletions(-) create mode 100644 src/components/ui/FloatingContact.tsx diff --git a/src/app/admin/layout.tsx b/src/app/admin/layout.tsx index 5ce60f4..3fd476e 100644 --- a/src/app/admin/layout.tsx +++ b/src/app/admin/layout.tsx @@ -51,15 +51,11 @@ export default function AdminLayout({ const router = useRouter(); const [sidebarOpen, setSidebarOpen] = useState(false); const [unreadTotal, setUnreadTotal] = useState(0); - - // Don't render admin shell on login page - if (pathname === "/admin/login") { - return <>{children}; - } + const isLoginPage = pathname === "/admin/login"; // Fetch unread counts — poll every 30s - // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { + if (isLoginPage) return; function fetchCounts() { adminFetch("/api/admin/unread-counts") .then((r) => r.json()) @@ -69,7 +65,12 @@ export default function AdminLayout({ fetchCounts(); const interval = setInterval(fetchCounts, 30000); return () => clearInterval(interval); - }, []); + }, [isLoginPage]); + + // Don't render admin shell on login page + if (isLoginPage) { + return <>{children}; + } async function handleLogout() { await fetch("/api/logout", { method: "POST" }); diff --git a/src/app/page.tsx b/src/app/page.tsx index 2d0ac49..fb0837a 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -9,6 +9,7 @@ import { News } from "@/components/sections/News"; import { FAQ } from "@/components/sections/FAQ"; import { Contact } from "@/components/sections/Contact"; import { BackToTop } from "@/components/ui/BackToTop"; +import { FloatingContact } from "@/components/ui/FloatingContact"; import { Header } from "@/components/layout/Header"; import { Footer } from "@/components/layout/Footer"; import { getContent } from "@/lib/content"; @@ -42,6 +43,7 @@ export default function HomePage() { +