Spaces:
Running
Running
File size: 1,500 Bytes
c10f8f8 e710a1b c10f8f8 e710a1b c10f8f8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
"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;
}
|