From 604cd146983acdf5489d5f411d0fb5a01e70f92f Mon Sep 17 00:00:00 2001 From: Sean O'Connor Date: Fri, 5 Dec 2025 02:22:17 -0500 Subject: [PATCH] feat: enhance map loading state with skeleton UI and update viewport height units to dvh --- src/app/page.tsx | 2 +- src/components/Drawer.tsx | 2 +- src/components/MapLoader.tsx | 28 +++++++++++++++++++++++----- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index c8526a7..d1c504a 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -12,7 +12,7 @@ export default function HomePage() { const [isDiscoveryOpen, setIsDiscoveryOpen] = useState(true); return ( -
+
{/* Map Background */}
{shop ? ( diff --git a/src/components/MapLoader.tsx b/src/components/MapLoader.tsx index a19bda6..be9faa1 100644 --- a/src/components/MapLoader.tsx +++ b/src/components/MapLoader.tsx @@ -1,11 +1,9 @@ "use client"; import dynamic from "next/dynamic"; - -const Map = dynamic(() => import("./Map"), { - ssr: false, - loading: () =>
Loading Map...
-}); +import { useState, useEffect } from "react"; +import { Skeleton } from "~/components/ui/skeleton"; +import { Coffee } from "lucide-react"; interface CoffeeShop { id: number; @@ -28,5 +26,25 @@ interface MapLoaderProps { } export default function MapLoader({ shops, onShopSelect, selectedShop, isDiscoveryOpen, onToggleDiscovery }: MapLoaderProps) { + const [isLoading, setIsLoading] = useState(true); + + const Map = dynamic(() => import("./Map"), { + ssr: false, + loading: () => ( +
+ +
+ +
+
+ ), + }); + + useEffect(() => { + // Small delay to ensure smooth transition + const timer = setTimeout(() => setIsLoading(false), 100); + return () => clearTimeout(timer); + }, []); + return ; }