"use client"; import { createContext, useCallback, useContext, useMemo, useState, type ReactNode, } from "react"; import Link from "next/link"; import Login from "../components/modals/Login"; import LoginForm from "../components/modals/Login/LoginForm"; import { useTranslation } from "./MessagesContext"; export type AuthModalLoginVariant = "default" | "saveProgress"; export type AuthModalBackdropVariant = "solid" | "blurredYellow"; export type OpenLoginOptions = { variant?: AuthModalLoginVariant; /** Passed to `requestMagicLink` as `next` (internal path). */ nextPath?: string; backdropVariant?: AuthModalBackdropVariant; }; type AuthModalContextValue = { openLogin: (_opts?: OpenLoginOptions) => void; closeLogin: () => void; }; const AuthModalContext = createContext(null); export function AuthModalProvider({ children }: { children: ReactNode }) { const [open, setOpen] = useState(false); const [opts, setOpts] = useState({}); const t = useTranslation("pages.login"); const openLogin = useCallback((o?: OpenLoginOptions) => { setOpts(o ?? {}); setOpen(true); }, []); const closeLogin = useCallback(() => { setOpen(false); setOpts({}); }, []); const value = useMemo( () => ({ openLogin, closeLogin }), [openLogin, closeLogin], ); const backdropVariant = opts.backdropVariant ?? "blurredYellow"; return ( {children} closeLogin()} > {t("backToHome")} } > ); } export function useAuthModal(): AuthModalContextValue { const ctx = useContext(AuthModalContext); if (!ctx) { throw new Error("useAuthModal must be used within AuthModalProvider"); } return ctx; }