"use client"; import { formSchema } from "@/pages/auth/lib/form"; import { authLogin, getMe } from "@/shared/config/api/auth/api"; import useUserStore from "@/shared/hooks/user"; import { getAuthToken, setAuthRefToken, setAuthToken, } from "@/shared/lib/authCookies"; import formatPhone from "@/shared/lib/formatPhone"; import onlyNumber from "@/shared/lib/onlyNumber"; import { Button } from "@/shared/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/shared/ui/form"; import { Input } from "@/shared/ui/input"; import LangToggle from "@/widgets/lang-toggle/ui/lang-toggle"; import { zodResolver } from "@hookform/resolvers/zod"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { Eye, EyeOff, LoaderCircle } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { toast } from "sonner"; import { z } from "zod"; const Login = () => { const [showPassword, setShowPassword] = useState(false); const { setUser } = useUserStore(); const queryClient = useQueryClient(); const navigate = useNavigate(); const token = getAuthToken(); const { mutate, isPending } = useMutation({ mutationFn: ({ password, phone }: { password: string; phone: string }) => authLogin({ password, phone }), onSuccess: (res) => { setAuthToken(res.data.access); setAuthRefToken(res.data.refresh); queryClient.invalidateQueries({ queryKey: ["auth_get_me"] }); }, onError: () => { toast.error("Xatolik yuz berdi", { richColors: true, position: "top-center", }); }, }); const { data } = useQuery({ queryKey: ["auth_get_me"], queryFn: () => getMe(), enabled: !!token, }); useEffect(() => { if (data) { setUser(data.data.data); } if (data && data.data.data.role !== "user") { navigate("/"); } }, [data]); const { t } = useTranslation(); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { password: "", phone: "", }, }); function onSubmit(values: z.infer) { const cleanPhone = onlyNumber(values.phone); // allow both 998 and 888 prefixes if (!cleanPhone.startsWith("998") && !cleanPhone.startsWith("888")) { toast.error(t("Telefon raqami +998 yoki +888 bilan boshlanishi kerak")); return; } mutate({ password: values.password, phone: cleanPhone, }); } return (

{t("Admin Panelga Kirish")}

( {t("Telefon raqam")} { const inputValue = e.target.value; if (inputValue.trim() === "") { field.onChange(""); return; } // Formatlash field.onChange(formatPhone(inputValue)); }} maxLength={19} className="h-[56px] text-lg rounded-xl bg-gray-700 border-gray-600 text-white placeholder-gray-400" /> )} /> ( {t("Parol")}
)} />

© {new Date().getFullYear()} {t("Admin Panel")}

); }; export default Login;