From 0b7f8338c22dba1effb38b9a96e1102bf59c73d7 Mon Sep 17 00:00:00 2001 From: "Md.Saifur Rahman Rasel" Date: Tue, 11 Nov 2025 17:09:51 +0600 Subject: [PATCH] feat: login functionality update --- apps/client/src/app/auth/login/page.tsx | 24 +++-------------- .../authentications/default/LoginForm.tsx | 27 ++++++++++--------- .../main-layout/common/ProfileMenu.tsx | 18 ++++++++----- apps/client/src/routes/paths.ts | 10 +++---- 4 files changed, 33 insertions(+), 46 deletions(-) diff --git a/apps/client/src/app/auth/login/page.tsx b/apps/client/src/app/auth/login/page.tsx index 9fb1666..0959f52 100644 --- a/apps/client/src/app/auth/login/page.tsx +++ b/apps/client/src/app/auth/login/page.tsx @@ -1,29 +1,11 @@ -'use client'; - -import { useState } from 'react'; -import paths from 'routes/paths'; -import { authClient } from '@/auth'; +import { authPaths } from 'routes/paths'; import LoginForm from 'components/sections/authentications/default/LoginForm'; const Page = () => { - const [rememberMe, setRememberMe] = useState(false); - - const handleLogin = async (data: any) => { - console.log(data); - - const { data: loginData, error } = await authClient.signIn.email({ - email: data.email, - password: data.password, - rememberMe: rememberMe, - }); - console.log(loginData, error); - }; - return ( diff --git a/apps/client/src/components/sections/authentications/default/LoginForm.tsx b/apps/client/src/components/sections/authentications/default/LoginForm.tsx index da27317..cd4a205 100644 --- a/apps/client/src/components/sections/authentications/default/LoginForm.tsx +++ b/apps/client/src/components/sections/authentications/default/LoginForm.tsx @@ -1,8 +1,8 @@ 'use client'; import { useForm } from 'react-hook-form'; -import { useRouter, useSearchParams } from 'next/navigation'; import { yupResolver } from '@hookform/resolvers/yup'; +import { useRouter, useSearchParams } from 'next/navigation'; import { Alert, Box, @@ -15,16 +15,15 @@ import { TextField, Typography, } from '@mui/material'; +import * as yup from 'yup'; +import { authClient } from '@/auth'; import Grid from '@mui/material/Grid'; +import SocialAuth from './SocialAuth'; import { rootPaths } from 'routes/paths'; -import * as yup from 'yup'; -import { Configuration, HealthApi } from '@/api'; import PasswordTextField from 'components/common/PasswordTextField'; import DefaultCredentialAlert from '../common/DefaultCredentialAlert'; -import SocialAuth from './SocialAuth'; interface LoginFormProps { - handleLogin: (data: LoginFormValues) => Promise; signUpLink: string; socialAuth?: boolean; forgotPasswordLink?: string; @@ -44,7 +43,6 @@ const schema = yup.object({ export type LoginFormValues = yup.InferType; const LoginForm = ({ - handleLogin, signUpLink, forgotPasswordLink, socialAuth = true, @@ -69,13 +67,17 @@ const LoginForm = ({ }); const onSubmit = async (data: LoginFormValues) => { - const res = await handleLogin(data); - if (res?.ok) { - router.refresh(); + const { data: loginData, error } = await authClient.signIn.email({ + email: data.email, + password: data.password, + rememberMe: data.rememberMe, + }); + + if (loginData) { router.push(callbackUrl ? callbackUrl : rootPaths.root); } - if (res?.error) { - setError('root.credential', { type: 'manual', message: res.error }); + if (error) { + setError('root.credential', { type: 'manual', message: error.message }); } }; @@ -222,6 +224,7 @@ const LoginForm = ({ size="large" variant="contained" loading={isSubmitting} + loadingPosition="start" > Log in @@ -237,4 +240,4 @@ const LoginForm = ({ ); }; -export default LoginForm; +export default LoginForm; \ No newline at end of file diff --git a/apps/client/src/layouts/main-layout/common/ProfileMenu.tsx b/apps/client/src/layouts/main-layout/common/ProfileMenu.tsx index 94dfa4e..2234f4b 100644 --- a/apps/client/src/layouts/main-layout/common/ProfileMenu.tsx +++ b/apps/client/src/layouts/main-layout/common/ProfileMenu.tsx @@ -1,6 +1,5 @@ 'use client'; - import { PropsWithChildren, useMemo, useState } from 'react'; import { useRouter } from 'next/navigation'; import { @@ -19,13 +18,14 @@ import { SxProps, Typography, } from '@mui/material'; +import { authPaths } from 'routes/paths'; +import { authClient } from '@/auth'; import Menu from '@mui/material/Menu'; import { useThemeMode } from 'hooks/useThemeMode'; -import { useBreakpoints } from 'providers/BreakpointsProvider'; -import { useSettingsContext } from 'providers/SettingsProvider'; -import paths from 'routes/paths'; import IconifyIcon from 'components/base/IconifyIcon'; import StatusAvatar from 'components/base/StatusAvatar'; +import { useBreakpoints } from 'providers/BreakpointsProvider'; +import { useSettingsContext } from 'providers/SettingsProvider'; interface ProfileMenuProps { type?: 'default' | 'slim'; @@ -95,6 +95,12 @@ const ProfileMenu = ({ type = 'default' }: ProfileMenuProps) => { /> ); + + const handleSignout = async () => { + await authClient.signOut(); + router.push(authPaths.login); + } + return ( <> {type === 'slim' && upSm ? ( @@ -199,9 +205,7 @@ const ProfileMenu = ({ type = 'default' }: ProfileMenuProps) => { { - router.push(paths.defaultLoggedOut); - }} + onClick={handleSignout} icon="material-symbols:logout-rounded" > Sign Out diff --git a/apps/client/src/routes/paths.ts b/apps/client/src/routes/paths.ts index 10b43b2..ec00a58 100644 --- a/apps/client/src/routes/paths.ts +++ b/apps/client/src/routes/paths.ts @@ -1,18 +1,16 @@ export const rootPaths = { root: '/', pagesRoot: 'pages', - authRoot: 'authentication', + authRoot: 'auth', authDefaultRoot: 'default', errorRoot: 'error', }; const paths = { + login: `/${rootPaths.authRoot}/login`, + signup: `/${rootPaths.authRoot}/signup`, + forgotPassword: `/${rootPaths.authRoot}/forgot-password`, - - login: `/${rootPaths.authRoot}/${rootPaths.authDefaultRoot}/login`, - signup: `/${rootPaths.authRoot}/${rootPaths.authDefaultRoot}/signup`, - forgotPassword: `/${rootPaths.authRoot}/${rootPaths.authDefaultRoot}/forgot-password`, - notifications: `/${rootPaths.pagesRoot}/notifications`, defaultLoggedOut: `/${rootPaths.authRoot}/default/logged-out`,