import React, { useState } from "react"; import { useLogin } from "../../../hooks/useLogin"; import { Flex, Box, FormControl, FormLabel, Input, Checkbox, Stack, Button, Heading, Text, useColorModeValue, Center, } from "@chakra-ui/react"; import { Spinner } from "@chakra-ui/react"; import { useNavigate } from "react-router-dom"; import { Link } from "react-router-dom"; import { motion } from "framer-motion"; const Login = () => { const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const { login, error, isLoading } = useLogin(); const navigate = useNavigate(); const handleSubmit = async (e) => { e.preventDefault(); await login(email, password); }; return ( <motion.Flex minH={"100vh"} align={"center"} justify={"center"} bg={useColorModeValue("gray.50", "gray.800")} initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0, transition: { duration: 0.1 } }}> <Stack spacing={8} mx={"auto"} maxW={"lg"} py={12} px={6}> <Stack align={"center"}> <Heading fontSize={"4xl"}>Login in to your account</Heading> <Text fontSize={"lg"} color={"gray.600"}> to enjoy all of our cool <Link color={"blue.400"}>features</Link> ✌️ </Text> </Stack> <Box rounded={"lg"} bg={useColorModeValue("white", "gray.700")} boxShadow={"lg"} p={8}> {isLoading ? ( <Center> <Spinner color="red.500" /> </Center> ) : ( <Stack spacing={4}> <FormControl id="email" isRequired> <FormLabel>Email address</FormLabel> <Input type="email" onChange={(e) => setEmail(e.target.value)} /> </FormControl> <FormControl id="password" isRequired> <FormLabel>Password</FormLabel> <Input type="password" onChange={(e) => setPassword(e.target.value)} /> </FormControl> <Stack spacing={10}> <Stack direction={{ base: "column", sm: "row" }} align={"center"} justify={"space-between"}> <Checkbox>Remember me</Checkbox> <Link color={"blue.400"} to="/signup"> Don't have an account yet?{" "} </Link> </Stack> <Center> {error && <Text color={"red.400"}> ⓘ Email/Password combination incorrect.</Text>} </Center> <Button bg={"blue.400"} color={"white"} _hover={{ bg: "blue.500", }} onClick={handleSubmit} disabled={isLoading}> Sign in </Button> </Stack> </Stack> )} </Box> </Stack> </motion.Flex> ); }; export default Login;