diff --git a/src/components/auth-redirect/index.tsx b/src/components/auth-redirect/index.tsx index 280cb02..74aafb6 100644 --- a/src/components/auth-redirect/index.tsx +++ b/src/components/auth-redirect/index.tsx @@ -9,17 +9,17 @@ import { useMeQuery } from "@/services" export const AuthRedirect: FC<{ children: ReactNode }> = ({ children }) => { const router = useRouter() - const { data: user, isLoading } = useMeQuery() + const { data: user, isPending } = useMeQuery() const isAuthPage = router.pathname === "/login" || router.pathname === "/sign-up" useEffect(() => { - if (!isLoading && !user && !isAuthPage) { + if (!isPending && !user && !isAuthPage) { router.push("/login") } - }, [user, isLoading, isAuthPage, router]) + }, [user, isPending, isAuthPage, router]) - if (isLoading || (!user && !isAuthPage)) { + if (isPending || (!user && !isAuthPage)) { return (
diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 33a2aee..a4c95f8 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -7,40 +7,59 @@ import { AuthRedirect, Button } from "@/components" import { ModeToggle } from "@/components/mode-toggle" import { ThemeProvider } from "@/components/theme-provider" import { useLogoutMutation } from "@/services" +import Link from "next/link" +import { useRouter } from "next/router" const queryClient = new QueryClient() const MyApp: AppType = ({ Component, pageProps }) => { return ( - - -
+ +
+ - - + + ) } function Header() { + const router = useRouter() const { mutate: logout } = useLogoutMutation() - const handleLogout = () => { - logout() - } + + const isLoginPage = router.pathname === "/login" + const isSignUpPage = router.pathname === "/sign-up" + + const isOtherPage = !isLoginPage && !isSignUpPage return (
-

Tasks

+ + Tasks +
- + {isOtherPage && ( + + )} + {isLoginPage && ( + + )} + {isSignUpPage && ( + + )}
) diff --git a/src/pages/login.tsx b/src/pages/login.tsx index d95c73d..f1ddf4f 100644 --- a/src/pages/login.tsx +++ b/src/pages/login.tsx @@ -1,68 +1,40 @@ -import type { ChangeEvent } from "react" -import React, { useState } from "react" +import type { FormEvent } from "react" +import React from "react" import type { NextPage } from "next" import { Button, Input } from "@/components" -import { Label } from "@/components/ui/label" +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { useLoginMutation } from "@/services" const Login: NextPage = () => { const { mutate: login } = useLoginMutation() - const [email, setEmail] = useState("") - const [password, setPassword] = useState("") - const [remember, setRemember] = useState(true) + const handleSubmit = (e: FormEvent) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) - const handlePasswordChange = (e: ChangeEvent) => { - setPassword(e.target.value) - } - - const handleEmailChange = (e: ChangeEvent) => { - setEmail(e.target.value) - } - - const handleRememberChange = (e: ChangeEvent) => { - setRemember(e.target.checked) - } - - const handleSubmit = () => { - login({ - email, - password, - rememberMe: remember, - }) + // biome-ignore lint/suspicious/noExplicitAny: + const values = Object.fromEntries(formData) as any + login(values) } return (
-
- - - - - - -
+ + + Sign In + + +
+ + + +
+
+
) } diff --git a/src/pages/sign-up.tsx b/src/pages/sign-up.tsx index 5cb1071..161bf8f 100644 --- a/src/pages/sign-up.tsx +++ b/src/pages/sign-up.tsx @@ -4,6 +4,7 @@ import React from "react" import type { NextPage } from "next" import { Button, Input } from "@/components" +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { useSignUpMutation } from "@/services" const Login: NextPage = () => { @@ -19,30 +20,33 @@ const Login: NextPage = () => { } return ( -
-
-

Sign up

- - +
+ + + Sign up + + + + + - + - - + + + +
) } diff --git a/src/services/todolist-api/auth/auth.hooks.ts b/src/services/todolist-api/auth/auth.hooks.ts index 01a7f7f..8172132 100644 --- a/src/services/todolist-api/auth/auth.hooks.ts +++ b/src/services/todolist-api/auth/auth.hooks.ts @@ -29,14 +29,14 @@ export const useLoginMutation = () => { export const useLogoutMutation = () => { const queryClient = useQueryClient() const router = useRouter() - - return useMutation({ - mutationFn: AuthApi.logout, - onSuccess: async () => { + return { + mutate: async () => { + localStorage.removeItem("accessToken") + localStorage.removeItem("refreshToken") await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.ME] }) await router.push(ROUTES.LOGIN) }, - }) + } } export const useSignUpMutation = () => {