diff --git a/src/routes/home.lazy.tsx b/src/routes/home.lazy.tsx index 952ecda..696248d 100644 --- a/src/routes/home.lazy.tsx +++ b/src/routes/home.lazy.tsx @@ -1,6 +1,17 @@ import HomePageStatic from "@/views/HomePageStatic"; import { createLazyFileRoute } from "@tanstack/react-router"; +import { ProfileOverlayProvider } from "@/contexts/ProfileOverlayContext"; +import ProfileOverlay from "@/components/ProfileOverlay"; + +function HomePageWithProvider() { + return ( + + + + + ); +} export const Route = createLazyFileRoute("/home")({ - component: HomePageStatic, + component: HomePageWithProvider, }); diff --git a/src/views/HomePageStatic.tsx b/src/views/HomePageStatic.tsx index 0be6d93..1b1bfbb 100644 --- a/src/views/HomePageStatic.tsx +++ b/src/views/HomePageStatic.tsx @@ -4,10 +4,15 @@ import isAuthenticated from "@/hooks/isAuthenticated"; import { useQuery } from "@tanstack/react-query"; import { useNavigate } from "@tanstack/react-router"; import { useEffect, useState } from "react"; +import { getLocalUser } from "@/db/auth"; +import { useProfileOverlay } from "@/contexts/ProfileOverlayContext"; +import { User } from "lucide-react"; export default function HomePageStatic() { const navigate = useNavigate(); const [loadingTimeout, setLoadingTimeout] = useState(false); + const [imageError, setImageError] = useState(false); + const { openProfile } = useProfileOverlay(); const { data, isLoading, error } = useQuery({ queryKey: ["user", "authenticated"], @@ -17,6 +22,25 @@ export default function HomePageStatic() { staleTime: 30000, // 30 seconds }); + const { data: profileData } = useQuery({ + queryKey: ["profile"], + queryFn: getLocalUser, + enabled: data === true, + retry: 1, + retryDelay: 1000, + refetchOnMount: true, + refetchOnWindowFocus: true, + }); + + // Extract avatar URL for better readability + const userMetadata = profileData?.data.session?.user.user_metadata; + const avatarUrl = userMetadata?.avatar_url || userMetadata?.picture; + + // Reset image error when avatar URL changes + useEffect(() => { + setImageError(false); + }, [avatarUrl]); + // Set a timeout for loading state to prevent infinite loading useEffect(() => { if (isLoading) { @@ -45,8 +69,33 @@ export default function HomePageStatic() { navigate({ to: "/login", replace: true }); } } + return (
+ {/* Account button in top-right when authenticated */} + {data === true && ( +
+ +
+ )}