Spaces:
Running
Running
| "use client"; | |
| import React, { createContext, useContext, useState, ReactNode } from "react"; | |
| import { LoginModal } from "@/components/login-modal"; | |
| import { Page } from "@/types"; | |
| interface LoginContextType { | |
| isOpen: boolean; | |
| openLoginModal: (options?: LoginModalOptions) => void; | |
| closeLoginModal: () => void; | |
| } | |
| interface LoginModalOptions { | |
| pages?: Page[]; | |
| title?: string; | |
| prompt?: string; | |
| description?: string; | |
| } | |
| const LoginContext = createContext<LoginContextType | undefined>(undefined); | |
| export function LoginProvider({ children }: { children: ReactNode }) { | |
| const [isOpen, setIsOpen] = useState(false); | |
| const [modalOptions, setModalOptions] = useState<LoginModalOptions>({}); | |
| const openLoginModal = (options: LoginModalOptions = {}) => { | |
| setModalOptions(options); | |
| setIsOpen(true); | |
| }; | |
| const closeLoginModal = () => { | |
| setIsOpen(false); | |
| setModalOptions({}); | |
| }; | |
| const value = { | |
| isOpen, | |
| openLoginModal, | |
| closeLoginModal, | |
| }; | |
| return ( | |
| <LoginContext.Provider value={value}> | |
| {children} | |
| <LoginModal | |
| open={isOpen} | |
| onClose={setIsOpen} | |
| title={modalOptions.title} | |
| prompt={modalOptions.prompt} | |
| description={modalOptions.description} | |
| /> | |
| </LoginContext.Provider> | |
| ); | |
| } | |
| export function useLoginModal() { | |
| const context = useContext(LoginContext); | |
| if (context === undefined) { | |
| throw new Error("useLoginModal must be used within a LoginProvider"); | |
| } | |
| return context; | |
| } | |