| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- import { useState } from 'react';
- import { useAuth } from '@/hooks/useAuth';
- import { Button } from '@/components/ui/button';
- import { Input } from '@/components/ui/input';
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
- import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
- import { Rss, Mail, Lock } from 'lucide-react';
- import { toast } from 'sonner';
- import { Navigate } from 'react-router-dom';
- const Auth = () => {
- const [email, setEmail] = useState('');
- const [password, setPassword] = useState('');
- const [loading, setLoading] = useState(false);
- const { user, signIn, signUp } = useAuth();
- // Redirect if user is already authenticated
- if (user) {
- return <Navigate to="/" replace />;
- }
- const handleSignIn = async (e: React.FormEvent) => {
- e.preventDefault();
- setLoading(true);
- const { error } = await signIn(email, password);
-
- if (error) {
- toast.error(error.message);
- } else {
- toast.success('Connexion réussie !');
- }
-
- setLoading(false);
- };
- const handleSignUp = async (e: React.FormEvent) => {
- e.preventDefault();
- setLoading(true);
- const { error } = await signUp(email, password);
-
- if (error) {
- toast.error(error.message);
- } else {
- toast.success('Compte créé ! Vérifiez votre email.');
- }
-
- setLoading(false);
- };
- return (
- <div className="min-h-screen bg-background flex items-center justify-center p-4">
- <div className="w-full max-w-md">
- <div className="flex items-center justify-center gap-2 mb-8">
- <Rss className="h-8 w-8 text-primary" />
- <h1 className="text-2xl font-bold">Feeds.Duhaz.fr</h1>
- </div>
- <Card>
- <CardHeader>
- <CardTitle>Authentification</CardTitle>
- <CardDescription>
- Connectez-vous ou créez un compte pour gérer vos flux
- </CardDescription>
- </CardHeader>
- <CardContent>
- <Tabs defaultValue="signin" className="w-full">
- <TabsList className="grid w-full grid-cols-2">
- <TabsTrigger value="signin">Connexion</TabsTrigger>
- <TabsTrigger value="signup">Inscription</TabsTrigger>
- </TabsList>
-
- <TabsContent value="signin">
- <form onSubmit={handleSignIn} className="space-y-4">
- <div className="space-y-2">
- <div className="relative">
- <Mail className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
- <Input
- type="email"
- placeholder="Email"
- value={email}
- onChange={(e) => setEmail(e.target.value)}
- className="pl-10"
- required
- />
- </div>
- <div className="relative">
- <Lock className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
- <Input
- type="password"
- placeholder="Mot de passe"
- value={password}
- onChange={(e) => setPassword(e.target.value)}
- className="pl-10"
- required
- />
- </div>
- </div>
- <Button type="submit" className="w-full" disabled={loading}>
- {loading ? 'Connexion...' : 'Se connecter'}
- </Button>
- </form>
- </TabsContent>
-
- <TabsContent value="signup">
- <form onSubmit={handleSignUp} className="space-y-4">
- <div className="space-y-2">
- <div className="relative">
- <Mail className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
- <Input
- type="email"
- placeholder="Email"
- value={email}
- onChange={(e) => setEmail(e.target.value)}
- className="pl-10"
- required
- />
- </div>
- <div className="relative">
- <Lock className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
- <Input
- type="password"
- placeholder="Mot de passe"
- value={password}
- onChange={(e) => setPassword(e.target.value)}
- className="pl-10"
- required
- />
- </div>
- </div>
- <Button type="submit" className="w-full" disabled={loading}>
- {loading ? 'Création...' : 'Créer un compte'}
- </Button>
- </form>
- </TabsContent>
- </Tabs>
- </CardContent>
- </Card>
- </div>
- </div>
- );
- };
- export default Auth;
|