diff --git a/package-lock.json b/package-lock.json
index 75440b7..94db69e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -35,6 +35,7 @@
"clsx": "^2.1.1",
"dayjs": "^1.11.13",
"framer-motion": "^12.38.0",
+ "jszip": "^3.10.1",
"lucide-react": "^0.503.0",
"next": "15.5.9",
"next-intl": "^4.3.9",
@@ -4965,6 +4966,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "license": "MIT"
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -6570,6 +6577,12 @@
"node": ">= 4"
}
},
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "license": "MIT"
+ },
"node_modules/import-fresh": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
@@ -6597,6 +6610,12 @@
"node": ">=0.8.19"
}
},
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
"node_modules/internal-slot": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
@@ -7165,6 +7184,18 @@
"node": ">=4.0"
}
},
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "dependencies": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "^1.0.5"
+ }
+ },
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -7209,6 +7240,15 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
"node_modules/lightningcss": {
"version": "1.30.2",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz",
@@ -8160,6 +8200,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "license": "(MIT AND Zlib)"
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -8314,6 +8360,12 @@
"node": ">=6.0.0"
}
},
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "license": "MIT"
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -8505,6 +8557,27 @@
"react-dom": ">=16.6.0"
}
},
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readable-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "license": "MIT"
+ },
"node_modules/recharts": {
"version": "2.15.4",
"resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz",
@@ -8713,6 +8786,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
"node_modules/safe-json-stringify": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
@@ -8822,6 +8901,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "license": "MIT"
+ },
"node_modules/sharp": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
@@ -9049,6 +9134,15 @@
"node": ">= 0.4"
}
},
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/string-argv": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
@@ -9680,6 +9774,12 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
"node_modules/vaul": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz",
diff --git a/package.json b/package.json
index 9b02c25..b33017f 100644
--- a/package.json
+++ b/package.json
@@ -38,6 +38,7 @@
"clsx": "^2.1.1",
"dayjs": "^1.11.13",
"framer-motion": "^12.38.0",
+ "jszip": "^3.10.1",
"lucide-react": "^0.503.0",
"next": "15.5.9",
"next-intl": "^4.3.9",
diff --git a/public/modules.html b/public/modules.html
new file mode 100644
index 0000000..7e24569
--- /dev/null
+++ b/public/modules.html
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
10
Bepul internet manbalari
+
+
+
+
+
+
+
+
+
eLIBRARY.RU
Rus va xorijiy tillardagi ilmiy maqolalarning to'liq matnlari bazasi
Ilmiy
+
+
+
+
Публикации eLIBRARY (tarjima va qayta bayon)
Tarjima va parafraz qilingan maqolalarni aniqlash
AI tahlil
+
+
+
+
RDK to'plami
Rossiya Davlat kutubxonasidan dissertatsiya va avtoreferatlar
Ilmiy
+
+
+
+
BMK dissertatsiyalari
Belarus milliy kutubxonasi dissertatsiyalari va avtoreferatlari
Ilmiy
+
+
+
+
IEEE
Xalqaro elektrotexnika va elektronika muhandislari instituti bazasi
Ilmiy
+
+
+
+
IEEE parafraz moduli
IEEE maqolalarining qayta bayon qilingan variantlarini aniqlash
AI tahlil
+
+
+
+
Elektron-kutubxona tizimlari
Book.ru, Юрайт, Лань, Айбукс va boshqa ELS bazalari
Ilmiy
+
+
+
+
OTMlar halqasi
O'zbekiston oliy ta'lim muassasalari birgalikdagi bazasi
Ilmiy
+
+
+
+
Коллекция НБУ
O'zbekiston milliy kutubxonasi to'plami
Ilmiy
+
+
+
+
+
+
+
+
Patentlar
SSSR, O'zbekiston, Rossiya va MDH davlatlari patentlari bazasi
Huquqiy
+
+
+
+
ИПС Адилет
O'zbekiston qonunchilik bazasi hujjatlari
Huquqiy
+
+
+
+
+
+
+
+
Internet PLUS moduli
Internet bo'ylab kengaytirilgan chuqur skanerlash
Internet
+
+
+
+
Internet RU — parafraz
Rus internet segmentidagi qayta bayon qilingan qarzlar
InternetAI tahlil
+
+
+
+
Internet EN — parafraz
Ingliz internet segmentidagi qayta bayon qilingan qarzlar
InternetAI tahlil
+
+
+
+
Internet RU — tarjima
Rus internet segmentidagi tarjima qilingan qarzlar
InternetAI tahlil
+
+
+
+
Internet EN — tarjima
Ingliz internet segmentidagi tarjima qilingan qarzlar
InternetAI tahlil
+
+
+
+
СМИ России и СНГ
Rossiya va MDH ommaviy axborot vositalari maqolalari
OAV
+
+
+
+
Собственная коллекция компании
Antiplag.uz ichki hujjatlar to'plami
Ichki baza
+
+
+
+
+
+
+
+
consultant.ru
Rossiya qonunchiligining elektron bazasi
BepulHuquqiy
+
+
+
+
kremlin.ru
Rossiya prezidenti farmonlari va rasmiy qonunlar
BepulHuquqiy
+
+
+
+
pravo.gov.ru
Rossiya rasmiy huquqiy hujjatlar nashriyoti portali
BepulHuquqiy
+
+
+
+
docs.cntd.ru
Texnik normalar va standartlar hujjatlari bazasi
BepulStandartlar
+
+
+
+
rumc.mininuniver.ru
Minin universiteti adaptiv ta'lim dasturlari resursi
BepulTa'lim
+
+
+
+
moodle.kstu.ru
KSTU universiteti Moodle platformasi o'quv resurslari
BepulTa'lim
+
+
+
+
freereferats.ru
Dissertatsiya avtoreferatlari ochiq to'plami (PDF)
BepulIlmiy
+
+
+
+
ktzszmoik.gov.by
Belarus nogironlarni ijtimoiy himoya qilish davlat portali
BepulInternet
+
+
+
+
bizlog.ru
Iqtisodiy-boshqaruv terminologiyasi va izohli lug'at
BepulInternet
+
+
+
+
disabilityartsinternational.org
Nogironlik va madaniyat bo'yicha xalqaro resurs
BepulXalqaro
+
+
+
+
+
+
+
+
Shablon iboralar
Standart kirish so'zlari, universitet nomlari va klişe iboralarni aniqlash
Avtomatik
+
+
+
+
Iqtibos keltirish moduli
Hujjatda to'g'ri rasmiylashtirilgan iqtiboslarni avtomatik aniqlash
Avtomatik
+
+
+
+
diff --git a/public/sitemap.xml b/public/sitemap.xml
new file mode 100644
index 0000000..570f0d9
--- /dev/null
+++ b/public/sitemap.xml
@@ -0,0 +1,84 @@
+
+
+
+ https://anti-plagiat.uz/uz
+ 2026-04-06
+ daily
+ 1.0
+
+
+
+
+
+ https://anti-plagiat.uz/uz/plagat
+ 2026-04-06
+ weekly
+ 0.8
+
+
+
+
+
+ https://anti-plagiat.uz/uz/cabinet
+ 2026-04-06
+ weekly
+ 0.7
+
+
+
+
+
+ https://anti-plagiat.uz/ru
+ 2026-04-06
+ daily
+ 1.0
+
+
+
+
+
+ https://anti-plagiat.uz/ru/plagat
+ 2026-04-06
+ weekly
+ 0.8
+
+
+
+
+
+ https://anti-plagiat.uz/ru/cabinet
+ 2026-04-06
+ weekly
+ 0.7
+
+
+
+
+
+ https://anti-plagiat.uz/en
+ 2026-04-06
+ daily
+ 1.0
+
+
+
+
+
+ https://anti-plagiat.uz/en/plagat
+ 2026-04-06
+ weekly
+ 0.8
+
+
+
+
+
+ https://anti-plagiat.uz/en/cabinet
+ 2026-04-06
+ weekly
+ 0.7
+
+
+
+
+
diff --git a/src/app/[locale]/cabinet/page.tsx b/src/app/[locale]/cabinet/page.tsx
new file mode 100644
index 0000000..9e6af1b
--- /dev/null
+++ b/src/app/[locale]/cabinet/page.tsx
@@ -0,0 +1,5 @@
+import { CabinetLayout } from '@/widgets/cabinet/ui';
+
+export default function CabinetPage() {
+ return ;
+}
diff --git a/src/app/[locale]/plagat/page.tsx b/src/app/[locale]/plagiat/page.tsx
similarity index 67%
rename from src/app/[locale]/plagat/page.tsx
rename to src/app/[locale]/plagiat/page.tsx
index 130c2f5..f4920e8 100644
--- a/src/app/[locale]/plagat/page.tsx
+++ b/src/app/[locale]/plagiat/page.tsx
@@ -1,5 +1,5 @@
-import { PlagiarismCheckForm } from '@/widgets/fileUpload/ui/Plagiraismcheckform';
import { HistoryPage } from '@/widgets/history';
+import { PlagiarismCheckForm } from '@/widgets/plagiatCheck/ui/Plagiraismcheckform';
export default function Page() {
return (
diff --git a/src/app/[locale]/si/[id]/page.tsx b/src/app/[locale]/si/[id]/page.tsx
new file mode 100644
index 0000000..7ec954b
--- /dev/null
+++ b/src/app/[locale]/si/[id]/page.tsx
@@ -0,0 +1,10 @@
+import SiDetailPage from '@/widgets/detail/SiDetailPage';
+
+interface Props {
+ params: Promise<{ id: string }>;
+}
+
+export default async function SiDetail({ params }: Props) {
+ const { id } = await params;
+ return ;
+}
diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts
index ec12d90..e20cd3b 100644
--- a/src/app/sitemap.ts
+++ b/src/app/sitemap.ts
@@ -1,10 +1,13 @@
import { MetadataRoute } from 'next';
-const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? 'https://antiplagiat.uz';
+const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? 'https://anti-plagiat.uz';
const LOCALES = ['uz', 'ru', 'en'] as const;
-// Add your static page slugs here
-const STATIC_ROUTES = ['', '/about', '/history', '/contact'];
+const STATIC_ROUTES = [
+ { path: '', changeFreq: 'daily' as const, priority: 1.0 },
+ { path: '/plagiat', changeFreq: 'weekly' as const, priority: 0.8 },
+ { path: '/cabinet', changeFreq: 'weekly' as const, priority: 0.7 },
+];
export default function sitemap(): MetadataRoute.Sitemap {
const entries: MetadataRoute.Sitemap = [];
@@ -12,13 +15,13 @@ export default function sitemap(): MetadataRoute.Sitemap {
for (const locale of LOCALES) {
for (const route of STATIC_ROUTES) {
entries.push({
- url: `${SITE_URL}/${locale}${route}`,
+ url: `${SITE_URL}/${locale}${route.path}`,
lastModified: new Date(),
- changeFrequency: route === '' ? 'daily' : 'weekly',
- priority: route === '' ? 1.0 : 0.8,
+ changeFrequency: route.changeFreq,
+ priority: route.priority,
alternates: {
languages: Object.fromEntries(
- LOCALES.map((l) => [l, `${SITE_URL}/${l}${route}`]),
+ LOCALES.map((l) => [l, `${SITE_URL}/${l}${route.path}`]),
),
},
});
diff --git a/src/features/auth/login/lib/useLoginForm.ts b/src/features/auth/login/lib/useLoginForm.ts
index a141fe6..0f30c53 100644
--- a/src/features/auth/login/lib/useLoginForm.ts
+++ b/src/features/auth/login/lib/useLoginForm.ts
@@ -52,13 +52,11 @@ export function useLoginForm() {
console.log('Login successful:', data);
toggleLoginModal();
toast.success('Kirish muvaffaqiyatli!');
- route.push('/plagat');
+ route.push('/plagiat');
},
onError: (err) => {
console.log('Login failed:', err);
setError(err instanceof Error ? err.message : 'Unknown error');
- // toggleLoginModal();
- toast.error(err instanceof Error ? err.message : 'Unknown error');
},
});
@@ -74,7 +72,6 @@ export function useLoginForm() {
}
loginReqest.mutate({ phone: `998${phone}`, password: password });
- sessionStorage.setItem('prev_page', 'login');
};
return {
diff --git a/src/features/auth/login/ui/form.tsx b/src/features/auth/login/ui/form.tsx
index 9b0b437..e06be18 100644
--- a/src/features/auth/login/ui/form.tsx
+++ b/src/features/auth/login/ui/form.tsx
@@ -122,7 +122,6 @@ export function LoginForm() {
onChange={(e) => setPassword(e.target.value)}
require={true}
type="password"
- maxLength={8}
minLength={8}
/>
diff --git a/src/features/auth/register/lib/useRegisterForm.ts b/src/features/auth/register/lib/useRegisterForm.ts
index d969094..57fa690 100644
--- a/src/features/auth/register/lib/useRegisterForm.ts
+++ b/src/features/auth/register/lib/useRegisterForm.ts
@@ -53,12 +53,10 @@ export function useRegisterForm() {
toggleRegisterModal();
setSuccess(true);
toast.success("Ro'yxatdan o'tish muvaffaqiyatli!");
- route.push('/plagat');
+ route.push('/plagiat');
},
onError: (err) => {
- // toggleLoginModal();
console.log('Register failed:', err);
- toast.error(err instanceof Error ? err.message : 'Unknown error');
},
});
diff --git a/src/widgets/paymentModal/lib/types.ts b/src/features/modals/paymentModal/lib/types.ts
similarity index 57%
rename from src/widgets/paymentModal/lib/types.ts
rename to src/features/modals/paymentModal/lib/types.ts
index f93a154..b5e5096 100644
--- a/src/widgets/paymentModal/lib/types.ts
+++ b/src/features/modals/paymentModal/lib/types.ts
@@ -1,16 +1,5 @@
// ─── Domain Types ──────────────────────────────────────────────────────────────
-export interface ServicePricing {
- serviceFee: number;
- certificateFee: number;
- currency: string;
-}
-
-export interface OrderSummary {
- hasCertificate: boolean;
- pricing: ServicePricing;
-}
-
export interface PaymePaymentRequest {
amount: number; // in tiyin (1 UZS = 100 tiyin)
orderId: string;
@@ -18,31 +7,21 @@ export interface PaymePaymentRequest {
returnUrl: string;
}
-export interface PaymePaymentResponse {
- redirectUrl: string;
- transactionId: string;
-}
-
export type PaymentStatus = 'idle' | 'loading' | 'success' | 'error';
// ─── Component Props ───────────────────────────────────────────────────────────
+export interface PriceCalculate {
+ service_fee: number;
+ discount?: number;
+ certificate?: number;
+ total_price: number;
+}
export interface PaymentModalProps {
isOpen: boolean;
onClose: () => void;
- hasCertificate: boolean;
+ price: PriceCalculate;
onConfirmPayment: () => void;
isLoading: boolean;
-}
-
-export interface PriceSummaryProps {
- hasCertificate: boolean;
- pricing: ServicePricing;
-}
-
-export interface PaymeButtonProps {
- amount: number;
- orderId: string;
- onSuccess?: (response: PaymePaymentResponse) => void;
- onError?: (error: Error) => void;
+ hasSertificate: boolean;
}
diff --git a/src/features/modals/paymentModal/lib/utils.ts b/src/features/modals/paymentModal/lib/utils.ts
new file mode 100644
index 0000000..1eb56d7
--- /dev/null
+++ b/src/features/modals/paymentModal/lib/utils.ts
@@ -0,0 +1,12 @@
+// ─── Pricing Utilities ─────────────────────────────────────────────────────────
+export const formatPrice = (amount: number, currency: string): string =>
+ `${amount.toLocaleString('uz-UZ')} ${currency}`;
+
+// ─── Payme API ─────────────────────────────────────────────────────────────────
+
+/**
+ * Redirects the user to the Payme checkout page.
+ */
+export const redirectToPayme = (redirectUrl: string): void => {
+ window.location.href = redirectUrl;
+};
diff --git a/src/widgets/paymentModal/ui/Paymebutton.tsx b/src/features/modals/paymentModal/ui/Paymebutton.tsx
similarity index 100%
rename from src/widgets/paymentModal/ui/Paymebutton.tsx
rename to src/features/modals/paymentModal/ui/Paymebutton.tsx
diff --git a/src/widgets/paymentModal/ui/Paymentmodal.tsx b/src/features/modals/paymentModal/ui/Paymentmodal.tsx
similarity index 80%
rename from src/widgets/paymentModal/ui/Paymentmodal.tsx
rename to src/features/modals/paymentModal/ui/Paymentmodal.tsx
index ac01019..c3d710d 100644
--- a/src/widgets/paymentModal/ui/Paymentmodal.tsx
+++ b/src/features/modals/paymentModal/ui/Paymentmodal.tsx
@@ -1,7 +1,6 @@
'use client';
import React, { useEffect, useRef } from 'react';
import { PaymentModalProps } from '../lib/types';
-import { getPricing } from '../lib/utils';
import { PriceSummary } from './Pricesummary';
import { PaymeButton } from './Paymebutton';
import { useTranslations } from 'next-intl';
@@ -35,38 +34,6 @@ const CloseButton: React.FC<{ onClick: () => void }> = ({ onClick }) => (
);
-// ─── Error Banner ──────────────────────────────────────────────────────────────
-
-// const ErrorBanner: React.FC<{ message: string; onDismiss: () => void }> = ({
-// message,
-// onDismiss,
-// }) => (
-//
-//
-//
{message}
-//
-//
-// );
-
// ─── Security Badge ────────────────────────────────────────────────────────────
const SecurityBadge: React.FC<{ securityText: string }> = ({
@@ -85,12 +52,12 @@ const SecurityBadge: React.FC<{ securityText: string }> = ({
export const PaymentModal: React.FC = ({
isOpen,
onClose,
- hasCertificate,
+ price,
onConfirmPayment,
isLoading,
+ hasSertificate,
}) => {
const dialogRef = useRef(null);
- const pricing = getPricing();
const status = isLoading ? 'loading' : 'idle';
const t = useTranslations('Payment');
@@ -174,11 +141,11 @@ export const PaymentModal: React.FC = ({
{t('orderSummary')}
-
+
{/* Certificate badge */}
- {hasCertificate && (
+ {hasSertificate && (