From 8b93952a061d4919f72441a01e5241740fb9acf3 Mon Sep 17 00:00:00 2001 From: "nabijonovdavronbek619@gmail.com" Date: Mon, 30 Mar 2026 20:25:30 +0500 Subject: [PATCH] register , login model complated. plagiraism component complated(essential part of main page is complated ) --- src/app/[locale]/page.tsx | 4 +- src/features/auth/login/lib/formatPhone.ts | 14 - src/features/auth/login/lib/index.ts | 3 +- src/features/auth/login/lib/togle.ts | 14 - src/features/auth/login/model/index.ts | 1 - src/features/auth/login/model/model.tsx | 14 - src/features/auth/login/ui/form.tsx | 147 +++--- src/features/auth/login/ui/index.ts | 2 +- src/features/auth/model.tsx | 21 + .../auth/register/lib/registerZustand.ts | 41 ++ .../auth/register/lib/useRegisterForm.ts | 64 +++ .../auth/register/lib/validateRegister.ts | 40 ++ src/features/auth/register/ui/form.tsx | 249 ++++++++++ src/features/auth/register/ui/index.tsx | 39 ++ src/features/providers/provider.tsx | 2 +- src/request/plagiarismapi.ts | 41 ++ src/shared/lib/formatPhone.ts | 46 +- .../auth/login => shared}/ui/motion.tsx | 0 .../auth/login => shared}/ui/phonePrefix.tsx | 0 src/shared/zustand/auth.ts | 26 ++ src/widgets/fileUpload/index.ts | 0 src/widgets/fileUpload/lib/types.ts | 44 ++ src/widgets/fileUpload/lib/usePlagiraism.ts | 105 +++++ src/widgets/fileUpload/lib/userStore.ts | 33 ++ src/widgets/fileUpload/lib/validation.ts | 50 ++ .../fileUpload/ui/Plagiraismcheckform.tsx | 163 +++++++ src/widgets/fileUpload/ui/Plagiraismui.tsx | 431 ++++++++++++++++++ src/widgets/footer/ui/index.tsx | 79 +--- src/widgets/navbar/ui/authButtons.tsx | 7 +- 29 files changed, 1475 insertions(+), 205 deletions(-) delete mode 100644 src/features/auth/login/lib/formatPhone.ts delete mode 100644 src/features/auth/login/lib/togle.ts delete mode 100644 src/features/auth/login/model/index.ts delete mode 100644 src/features/auth/login/model/model.tsx create mode 100644 src/features/auth/model.tsx create mode 100644 src/features/auth/register/lib/registerZustand.ts create mode 100644 src/features/auth/register/lib/useRegisterForm.ts create mode 100644 src/features/auth/register/lib/validateRegister.ts create mode 100644 src/features/auth/register/ui/form.tsx create mode 100644 src/features/auth/register/ui/index.tsx create mode 100644 src/request/plagiarismapi.ts rename src/{features/auth/login => shared}/ui/motion.tsx (100%) rename src/{features/auth/login => shared}/ui/phonePrefix.tsx (100%) create mode 100644 src/shared/zustand/auth.ts create mode 100644 src/widgets/fileUpload/index.ts create mode 100644 src/widgets/fileUpload/lib/types.ts create mode 100644 src/widgets/fileUpload/lib/usePlagiraism.ts create mode 100644 src/widgets/fileUpload/lib/userStore.ts create mode 100644 src/widgets/fileUpload/lib/validation.ts create mode 100644 src/widgets/fileUpload/ui/Plagiraismcheckform.tsx create mode 100644 src/widgets/fileUpload/ui/Plagiraismui.tsx diff --git a/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx index e70e0a8..5bdd1ee 100644 --- a/src/app/[locale]/page.tsx +++ b/src/app/[locale]/page.tsx @@ -1,5 +1,5 @@ import { getPosts } from '@/shared/config/api/testApi'; -import Welcome from '@/widgets/welcome'; +import { PlagiarismCheckForm } from '@/widgets/fileUpload/ui/Plagiraismcheckform'; export default async function Home() { const res = await getPosts({ _limit: 1 }); @@ -7,7 +7,7 @@ export default async function Home() { return (
- +
); } diff --git a/src/features/auth/login/lib/formatPhone.ts b/src/features/auth/login/lib/formatPhone.ts deleted file mode 100644 index c925370..0000000 --- a/src/features/auth/login/lib/formatPhone.ts +++ /dev/null @@ -1,14 +0,0 @@ -const formatPhone = (value: string) => { - if (value.length <= 2) return value; - if (value.length <= 5) return `${value.slice(0, 2)} ${value.slice(2)}`; - if (value.length <= 7) - return `${value.slice(0, 2)} ${value.slice(2, 5)} ${value.slice(5)}`; - return `${value.slice(0, 2)} ${value.slice(2, 5)} ${value.slice( - 5, - 7, - )} ${value.slice(7)}`; -}; - -const normalizeDigits = (value: string) => value.replace(/\D/g, '').slice(0, 9); - -export { formatPhone, normalizeDigits }; diff --git a/src/features/auth/login/lib/index.ts b/src/features/auth/login/lib/index.ts index eeccbad..83f6a19 100644 --- a/src/features/auth/login/lib/index.ts +++ b/src/features/auth/login/lib/index.ts @@ -1,4 +1,3 @@ // Ushbu fayl loyiha structurasi uchun qo'shilgan. O'chirib tashlasangiz bo'ladi -export * from './togle'; export * from './useLoginForm'; -export * from './formatPhone'; +export * from '../../../../shared/lib/formatPhone'; diff --git a/src/features/auth/login/lib/togle.ts b/src/features/auth/login/lib/togle.ts deleted file mode 100644 index adf849b..0000000 --- a/src/features/auth/login/lib/togle.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { create } from 'zustand'; - -interface LoginModalStore { - openLoginModal: boolean; - toggleLoginModal: () => void; -} - -const useLoginModal = create((set) => ({ - openLoginModal: false, - toggleLoginModal: () => - set((state) => ({ openLoginModal: !state.openLoginModal })), -})); - -export { useLoginModal }; diff --git a/src/features/auth/login/model/index.ts b/src/features/auth/login/model/index.ts deleted file mode 100644 index 0d7107d..0000000 --- a/src/features/auth/login/model/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { AuthModals } from './model'; diff --git a/src/features/auth/login/model/model.tsx b/src/features/auth/login/model/model.tsx deleted file mode 100644 index 5121b80..0000000 --- a/src/features/auth/login/model/model.tsx +++ /dev/null @@ -1,14 +0,0 @@ -'use client'; -import { AnimatePresence } from 'framer-motion'; -import LoginForm from '../ui/form'; -import { useLoginModal } from '../lib/togle'; -function AuthModals() { - const openLoginModal = useLoginModal((state) => state.openLoginModal); - return ( -
- {openLoginModal && } -
- ); -} - -export { AuthModals }; diff --git a/src/features/auth/login/ui/form.tsx b/src/features/auth/login/ui/form.tsx index 50a3b77..012630b 100644 --- a/src/features/auth/login/ui/form.tsx +++ b/src/features/auth/login/ui/form.tsx @@ -1,19 +1,18 @@ 'use client'; -import { useTranslations } from 'next-intl'; import { useCallback, useState } from 'react'; -import { formatPhone, normalizeDigits } from '../lib/formatPhone'; -import { Input } from '@/shared/ui/input'; -import { Button } from '@/shared/ui/button'; -import PhonePrefix from './phonePrefix'; -import { useLoginForm } from '../lib/useLoginForm'; -import { Label } from '@/shared/ui/label'; import { X } from 'lucide-react'; -import { useLoginModal } from '../lib/togle'; -import { MotionWrapper } from './motion'; +import { + formatPhone, + normalizeDigits, +} from '../../../../shared/lib/formatPhone'; +import PhonePrefix from '../../../../shared/ui/phonePrefix'; +import { MotionWrapper } from '../../../../shared/ui/motion'; +import { useLoginForm } from '../lib/useLoginForm'; +import { useLoginModal } from '@/shared/zustand/auth'; +import Link from 'next/link'; -export default function LoginForm() { - const t = useTranslations(); +export function LoginForm() { const [isFocused, setIsFocused] = useState(false); const { phone, setPhone, submit, error, loading } = useLoginForm(); @@ -35,34 +34,45 @@ export default function LoginForm() { /> {/* Modal */} -
+
-
- {/* Close button */} -
+
+ {/* Close */} +
-
- {/* PHONE FIELD */} -
-