From 1c98f1bfa33bcee116c3ebd41f9b3055b4f7efc6 Mon Sep 17 00:00:00 2001 From: parsa aghaei Date: Sun, 6 Sep 2026 10:45:30 +0330 Subject: [PATCH] feat(mobile): app-like bottom navigation, mobile top logo ticker, and header optimization --- frontend/application/app/ClientLayout.tsx | 14 +- frontend/application/components/Header.tsx | 5 +- .../components/MobileBottomNav.tsx | 437 + .../application/components/TickerBanner.tsx | 97 +- graphify-out/.graphify_labels.json | 72 +- graphify-out/.graphify_labels.json.sig | 2 +- graphify-out/2026-09-06/GRAPH_REPORT.md | 38 +- graphify-out/2026-09-06/graph.json | 774 +- graphify-out/GRAPH_REPORT.md | 320 +- graphify-out/cache/stat-index.json | 2 +- graphify-out/graph.html | 8 +- graphify-out/graph.json | 10266 ++++++++-------- graphify-out/manifest.json | 1276 +- 13 files changed, 7100 insertions(+), 6211 deletions(-) create mode 100644 frontend/application/components/MobileBottomNav.tsx diff --git a/frontend/application/app/ClientLayout.tsx b/frontend/application/app/ClientLayout.tsx index 5d0a992..e24e8ad 100644 --- a/frontend/application/app/ClientLayout.tsx +++ b/frontend/application/app/ClientLayout.tsx @@ -1,6 +1,6 @@ "use client"; -import { useEffect } from "react"; +import { useState, useEffect } from "react"; import Header from "../components/Header"; import Footer from "../components/Footer"; import { NetworkBanner } from "../components/NetworkBanner"; @@ -13,6 +13,8 @@ const CartDrawer = dynamic(() => import("../components/CartDrawer"), { ssr: fals const LoginModal = dynamic(() => import("../components/LoginModal"), { ssr: false }); const AuthModal = dynamic(() => import("../components/AuthModal"), { ssr: false }); const B2BPortal = dynamic(() => import("../components/B2BPortal"), { ssr: false }); +const MobileBottomNav = dynamic(() => import("../components/MobileBottomNav"), { ssr: false }); +const PrescriptionUploadModal = dynamic(() => import("../components/PrescriptionUploadModal"), { ssr: false }); import { useUserStore } from "../lib/store/userStore"; import { useSettingsStore } from "../lib/store/settingsStore"; @@ -36,6 +38,7 @@ export default function ClientLayout({ children }: { children: React.ReactNode } const setLoginModalOpen = useUIStore((state) => state.setLoginModalOpen); const setB2BPortalOpen = useUIStore((state) => state.setB2BPortalOpen); const clearAdvisorData = useUIStore((state) => state.clearAdvisorData); + const [isPrescriptionModalOpen, setIsPrescriptionModalOpen] = useState(false); const pathname = usePathname(); const router = useRouter(); @@ -172,7 +175,7 @@ export default function ClientLayout({ children }: { children: React.ReactNode } onSearch={handleSearch} onB2BOpen={() => setB2BPortalOpen(true)} /> -
+
{children}