diff --git a/surfsense_web/components/providers/ElectricProvider.tsx b/surfsense_web/components/providers/ElectricProvider.tsx index e31885973..f187d10c1 100644 --- a/surfsense_web/components/providers/ElectricProvider.tsx +++ b/surfsense_web/components/providers/ElectricProvider.tsx @@ -3,6 +3,7 @@ import { useAtomValue } from "jotai"; import { useEffect, useRef, useState } from "react"; import { currentUserAtom } from "@/atoms/user/user-query.atoms"; +import { getBearerToken } from "@/lib/auth-utils"; import { cleanupElectric, type ElectricClient, @@ -105,9 +106,13 @@ export function ElectricProvider({ children }: ElectricProviderProps) { }; }, [user?.id, isUserLoaded, electricClient]); + // Check if user is authenticated first (has bearer token) + // This prevents showing loading screen for unauthenticated users on homepage + const hasToken = typeof window !== "undefined" && !!getBearerToken(); + // For non-authenticated pages (like landing page), render immediately with null context // Also render immediately if user query failed (e.g., token expired) - if (!isUserLoaded || !user?.id || isUserError) { + if (!hasToken || !isUserLoaded || !user?.id || isUserError) { return {children}; } diff --git a/surfsense_web/components/ui/tooltip.tsx b/surfsense_web/components/ui/tooltip.tsx index 871ce9ed5..356467a8a 100644 --- a/surfsense_web/components/ui/tooltip.tsx +++ b/surfsense_web/components/ui/tooltip.tsx @@ -7,12 +7,14 @@ import { cn } from "@/lib/utils"; function TooltipProvider({ delayDuration = 0, + disableHoverableContent = true, ...props }: React.ComponentProps) { return ( ); @@ -42,7 +44,7 @@ function TooltipContent({ data-slot="tooltip-content" sideOffset={sideOffset} className={cn( - "bg-black text-white font-medium shadow-xl px-3 py-1.5 dark:bg-zinc-800 dark:text-zinc-50 border-none animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md text-xs text-balance", + "bg-black text-white font-medium shadow-xl px-3 py-1.5 dark:bg-zinc-800 dark:text-zinc-50 border-none animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md text-xs text-balance pointer-events-none", className )} {...props}