an app to share curated trails
sidetrail.app
atproto
nextjs
react
rsc
1"use client";
2
3import { createContext, useContext, useState, ReactNode } from "react";
4
5type LoginModalContextType = {
6 isOpen: boolean;
7 openLoginModal: () => void;
8 closeLoginModal: () => void;
9};
10
11const LoginModalContext = createContext<LoginModalContextType | null>(null);
12
13export function LoginModalProvider({ children }: { children: ReactNode }) {
14 const [isOpen, setIsOpen] = useState(false);
15
16 const openLoginModal = () => setIsOpen(true);
17 const closeLoginModal = () => setIsOpen(false);
18
19 return (
20 <LoginModalContext.Provider value={{ isOpen, openLoginModal, closeLoginModal }}>
21 {children}
22 </LoginModalContext.Provider>
23 );
24}
25
26export function useLoginModal() {
27 const context = useContext(LoginModalContext);
28 if (!context) {
29 throw new Error("useLoginModal must be used within a LoginModalProvider");
30 }
31 return context;
32}