From 45e5aa3af27f60db6c6b71aac4840c974d4703de Mon Sep 17 00:00:00 2001 From: Samandar Turgunboyev Date: Fri, 19 Dec 2025 16:32:33 +0500 Subject: [PATCH] login page update --- src/shared/config/api/auth/authApi.ts | 6 +---- src/shared/config/api/httpClient.ts | 3 +-- src/shared/lib/onlyNumber.ts | 6 +++++ src/widgets/login/ui/Login.tsx | 37 ++++++++++++--------------- 4 files changed, 24 insertions(+), 28 deletions(-) create mode 100644 src/shared/lib/onlyNumber.ts diff --git a/src/shared/config/api/auth/authApi.ts b/src/shared/config/api/auth/authApi.ts index b4318e8..05ed102 100644 --- a/src/shared/config/api/auth/authApi.ts +++ b/src/shared/config/api/auth/authApi.ts @@ -6,12 +6,8 @@ export interface Loginbody { } const AuthApi = { - getMe: async () => { - const data = await httpClient.get('auth/me/'); - return data.data; - }, login: async (body: Loginbody) => { - const data = await httpClient.post('auth/token/', body); + const data = await httpClient.post('auth/admin/token/', body); return data.data; }, }; diff --git a/src/shared/config/api/httpClient.ts b/src/shared/config/api/httpClient.ts index 14536e6..59b4bfd 100644 --- a/src/shared/config/api/httpClient.ts +++ b/src/shared/config/api/httpClient.ts @@ -28,8 +28,7 @@ httpClient.interceptors.response.use( (response) => response, async (error) => { if (error.response?.status === 401) { - Cookies.remove('panda_admin'); // tokenni tozalash - window.location.href = '/login'; // login pagega redirect + Cookies.remove('panda_admin'); } return Promise.reject(error); diff --git a/src/shared/lib/onlyNumber.ts b/src/shared/lib/onlyNumber.ts new file mode 100644 index 0000000..bfff8dd --- /dev/null +++ b/src/shared/lib/onlyNumber.ts @@ -0,0 +1,6 @@ +const onlyNumber = (digits: string | number) => { + const phone = digits.toString(); + return phone.replace(/\D/g, ""); +}; + +export default onlyNumber; diff --git a/src/widgets/login/ui/Login.tsx b/src/widgets/login/ui/Login.tsx index e749f61..de79b8e 100644 --- a/src/widgets/login/ui/Login.tsx +++ b/src/widgets/login/ui/Login.tsx @@ -1,6 +1,8 @@ 'use client'; import AuthApi, { type Loginbody } from '@/shared/config/api/auth/authApi'; +import formatPhone from '@/shared/lib/formatPhone'; +import onlyNumber from '@/shared/lib/onlyNumber'; import { Button } from '@/shared/ui/button'; import { Form, @@ -12,8 +14,8 @@ import { import { Input } from '@/shared/ui/input'; import { zodResolver } from '@hookform/resolvers/zod'; import { useMutation } from '@tanstack/react-query'; +import type { AxiosError } from 'axios'; import Cookies from 'js-cookie'; -import { useState } from 'react'; import { useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom'; import { toast } from 'sonner'; @@ -21,45 +23,37 @@ import type z from 'zod'; import { formSchema } from '../lib/form'; const Login = () => { - const [error, setError] = useState(); const navigation = useNavigate(); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { password: '', - phone: '', + phone: '+998', }, }); const { mutate: login } = useMutation({ mutationFn: (data: Loginbody) => AuthApi.login(data), onSuccess: async (res) => { - console.log(res); - Cookies.set('panda_admin', res.data.access, { expires: 1, sameSite: 'Strict', }); - - try { - const me = await AuthApi.getMe(); - console.log('Current user:', me); - if ( - // me.data.role == 'ADMIN' - me.data.id == 1 - ) { - navigation('/'); - } else { - toast.error("Kirishga ruxsat yo'q"); - } - } catch (err) { - console.error('GetMe error:', err); - } + navigation('/'); + }, + onError: (err: AxiosError) => { + const errorMessage = + (err.response?.data as { message: string }).message || + 'Login yoki parol xato kiritildi'; + toast.error(errorMessage, { richColors: true, position: 'top-center' }); }, }); const onSubmit = (values: z.infer) => { - login(values); + login({ + password: values.password, + phone: onlyNumber(values.phone), + }); }; return ( @@ -80,6 +74,7 @@ const Login = () => {