Skip to content

Commit 5967e85

Browse files
committed
feat(auth): implement modal login context and provider with google and gitHub buttons, remove auth pages
1 parent 9020c3c commit 5967e85

File tree

5 files changed

+77
-18
lines changed

5 files changed

+77
-18
lines changed

src/app/(public)/auth/login/page.tsx

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/app/providers.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { HeroUIProvider, ToastProvider } from "@heroui/react";
44
import { ThemeProvider as NextThemesProvider } from "next-themes";
55
import Favicon from "./favicon";
6+
import { ModalLoginContext } from "@/components/auth";
67

78
type Props = {
89
children: React.ReactNode;
@@ -24,7 +25,7 @@ export default function Providers({ children }: Props) {
2425
/>
2526
<NextThemesProvider attribute="class" defaultTheme="system" enableSystem>
2627
<Favicon />
27-
{children}
28+
<ModalLoginContext>{children}</ModalLoginContext>
2829
</NextThemesProvider>
2930
</HeroUIProvider>
3031
);

src/components/auth/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { default as GitHubButton } from "./github-button";
22
export { default as GoogleButton } from "./google-button";
3+
export { default as ModalLoginContext } from "./login-modal";
34
export { default as UserProfile } from "./user-profile";

src/components/auth/login-modal.tsx

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"use client";
2+
3+
import {
4+
createContext,
5+
useCallback,
6+
useContext,
7+
useState,
8+
ReactNode,
9+
} from "react";
10+
import { Modal, ModalContent, ModalHeader, ModalBody } from "@heroui/react";
11+
import { GoogleButton, GitHubButton } from "@/components/auth";
12+
13+
type ModalContextType = {
14+
open: () => void;
15+
close: () => void;
16+
};
17+
18+
const ModalLoginContext = createContext<ModalContextType | undefined>(
19+
undefined,
20+
);
21+
22+
export const useLoginModal = () => {
23+
const context = useContext(ModalLoginContext);
24+
if (!context) {
25+
throw new Error("useLoginModal must be used within a ModalLoginProvider");
26+
}
27+
return context;
28+
};
29+
30+
type Props = {
31+
children: ReactNode;
32+
};
33+
34+
export default function ModalLoginProvider({ children }: Props) {
35+
const [isOpen, setIsOpen] = useState(false);
36+
37+
const open = useCallback(() => setIsOpen(true), []);
38+
const close = useCallback(() => setIsOpen(false), []);
39+
40+
return (
41+
<ModalLoginContext.Provider value={{ open, close }}>
42+
{children}
43+
44+
<Modal isOpen={isOpen} onOpenChange={setIsOpen} backdrop="blur">
45+
<ModalContent>
46+
{(onClose) => (
47+
<>
48+
<ModalHeader>
49+
<div className="flex flex-col gap-2">
50+
<h2 className="text-2xl font-semibold tracking-tight">
51+
Welcome back
52+
</h2>
53+
<p className="text-sm text-neutral-500">
54+
Sign in to continue with your account
55+
</p>
56+
</div>
57+
</ModalHeader>
58+
<ModalBody>
59+
<section className="flex flex-col gap-2 pb-10">
60+
<GoogleButton />
61+
<GitHubButton />
62+
</section>
63+
</ModalBody>
64+
</>
65+
)}
66+
</ModalContent>
67+
</Modal>
68+
</ModalLoginContext.Provider>
69+
);
70+
}

src/components/blogs/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export { default as BlogCard } from "./blog-card";
2+
export { default as BlogDetail } from "./blog-detail";
3+
export { default as BlogList } from "./blog-list";
4+
export { default as BlogForm } from "./blog-form";

0 commit comments

Comments
 (0)