From 07754069c19c58b527a99784e4d89499994094ff Mon Sep 17 00:00:00 2001 From: zetaloop Date: Fri, 20 Feb 2026 18:50:46 +0800 Subject: [PATCH] feat: global login dialog with useRequireAuth hook for 401 auth gating --- app/providers.tsx | 6 +++++- components/favorite-button.tsx | 4 +++- components/global-login-dialog.tsx | 9 +++++++++ lib/use-require-auth.ts | 23 +++++++++++++++++++++++ store/login-dialog.ts | 13 +++++++++++++ 5 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 components/global-login-dialog.tsx create mode 100644 lib/use-require-auth.ts create mode 100644 store/login-dialog.ts diff --git a/app/providers.tsx b/app/providers.tsx index c8049ea..6a29d33 100644 --- a/app/providers.tsx +++ b/app/providers.tsx @@ -2,6 +2,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import { useState } from "react" +import { GlobalLoginDialog } from "@/components/global-login-dialog" import { TooltipProvider } from "@/components/ui/tooltip" export function Providers({ children }: { children: React.ReactNode }) { @@ -19,7 +20,10 @@ export function Providers({ children }: { children: React.ReactNode }) { return ( - {children} + + {children} + + ) } diff --git a/components/favorite-button.tsx b/components/favorite-button.tsx index 0cf7775..2738eeb 100644 --- a/components/favorite-button.tsx +++ b/components/favorite-button.tsx @@ -3,6 +3,7 @@ import { Heart } from "lucide-react" import { useState } from "react" import { Button } from "@/components/ui/button" +import { useRequireAuth } from "@/lib/use-require-auth" interface FavoriteButtonProps { initialFavorited: boolean @@ -10,13 +11,14 @@ interface FavoriteButtonProps { export function FavoriteButton({ initialFavorited }: FavoriteButtonProps) { const [favorited, setFavorited] = useState(initialFavorited) + const { requireAuth } = useRequireAuth() return (