/ components / AuthModal.tsx
AuthModal.tsx
 1  'use client'
 2  
 3  import { useState } from 'react'
 4  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog"
 5  import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
 6  import { Input } from "@/components/ui/input"
 7  import { Label } from "@/components/ui/label"
 8  import { Button } from "@/components/ui/button"
 9  
10  interface AuthModalProps {
11    isOpen: boolean
12    onClose: () => void
13  }
14  
15  export function AuthModal({ isOpen, onClose }: AuthModalProps) {
16    const [activeTab, setActiveTab] = useState<'signin' | 'register'>('signin')
17  
18    const handleSubmit = (e: React.FormEvent) => {
19      e.preventDefault()
20      // Here you would handle the authentication logic
21      console.log('Form submitted:', activeTab)
22    }
23  
24    return (
25      <Dialog open={isOpen} onOpenChange={onClose}>
26        <DialogContent className="sm:max-w-[425px]">
27          <DialogHeader>
28            <DialogTitle>Authentication</DialogTitle>
29            <DialogDescription>
30              Sign in to your account or create a new one.
31            </DialogDescription>
32          </DialogHeader>
33          <Tabs value={activeTab} onValueChange={(value) => setActiveTab(value as 'signin' | 'register')}>
34            <TabsList className="grid w-full grid-cols-2">
35              <TabsTrigger value="signin">Sign In</TabsTrigger>
36              <TabsTrigger value="register">Register</TabsTrigger>
37            </TabsList>
38            <TabsContent value="signin">
39              <form onSubmit={handleSubmit}>
40                <div className="grid gap-4 py-4">
41                  <div className="grid gap-2">
42                    <Label htmlFor="email-signin">Email</Label>
43                    <Input id="email-signin" type="email" placeholder="m@example.com" required />
44                  </div>
45                  <div className="grid gap-2">
46                    <Label htmlFor="password-signin">Password</Label>
47                    <Input id="password-signin" type="password" required />
48                  </div>
49                </div>
50                <Button type="submit" className="w-full">Sign In</Button>
51              </form>
52            </TabsContent>
53            <TabsContent value="register">
54              <form onSubmit={handleSubmit}>
55                <div className="grid gap-4 py-4">
56                  <div className="grid gap-2">
57                    <Label htmlFor="username-register">Username</Label>
58                    <Input id="username-register" type="text" required />
59                  </div>
60                  <div className="grid gap-2">
61                    <Label htmlFor="email-register">Email</Label>
62                    <Input id="email-register" type="email" placeholder="m@example.com" required />
63                  </div>
64                  <div className="grid gap-2">
65                    <Label htmlFor="password-register">Password</Label>
66                    <Input id="password-register" type="password" required />
67                  </div>
68                  <div className="grid gap-2">
69                    <Label htmlFor="confirm-password-register">Confirm Password</Label>
70                    <Input id="confirm-password-register" type="password" required />
71                  </div>
72                </div>
73                <Button type="submit" className="w-full">Register</Button>
74              </form>
75            </TabsContent>
76          </Tabs>
77        </DialogContent>
78      </Dialog>
79    )
80  }
81