From 13300236f352111b4323e076a9171ac065c338a5 Mon Sep 17 00:00:00 2001 From: parsa aghaei Date: Sun, 16 Aug 2026 19:32:49 +0330 Subject: [PATCH] fix(dashboard,checkout): reuse PetProfile in user dashboard tabs and fix mobile horizontal overflow on checkout --- .../application/components/CheckoutPage.tsx | 34 ++-- .../application/components/PetProfile.tsx | 15 +- .../application/components/UserDashboard.tsx | 164 +----------------- 3 files changed, 28 insertions(+), 185 deletions(-) diff --git a/frontend/application/components/CheckoutPage.tsx b/frontend/application/components/CheckoutPage.tsx index cf51673..531a8aa 100644 --- a/frontend/application/components/CheckoutPage.tsx +++ b/frontend/application/components/CheckoutPage.tsx @@ -209,11 +209,11 @@ export default function CheckoutPage() { } return ( -
-
+
+
{/* Mobile Navigation & Breadcrumbs */} -
+
-
+
{/* Main Form */} -
+
{/* Step 1: Shipping */} -
+
۱
@@ -248,25 +248,25 @@ export default function CheckoutPage() {
{isLoggedIn && profile.addresses && profile.addresses.length > 0 ? ( -
-
+
+

انتخاب آدرس جهت تحویل سفارش:

-
+
{profile.addresses.map((addr) => (
setSelectedAddressId(addr.id)} className={cn( - "p-4 rounded-2xl border-2 cursor-pointer transition-all flex items-start gap-3", + "p-3 sm:p-4 rounded-2xl border-2 cursor-pointer transition-all flex items-start gap-2.5 sm:gap-3 w-full min-w-0 max-w-full overflow-hidden", selectedAddressId === addr.id ? "border-canina-blue bg-canina-blue/5" : "border-medical-gray-100 hover:border-medical-gray-200" )} > @@ -275,17 +275,17 @@ export default function CheckoutPage() { name="selectedAddress" checked={selectedAddressId === addr.id} onChange={() => setSelectedAddressId(addr.id)} - className="mt-1" + className="mt-1 shrink-0" /> -
-
+
+
{addr.title} {addr.isDefault && ( - پیش‌فرض + پیش‌فرض )}
-

{addr.province}، {addr.city}، {addr.detail}

-

گیرنده: {addr.receptorName} | همراه: {toPersian(addr.phone)}

+

{addr.province}، {addr.city}، {addr.detail}

+

گیرنده: {addr.receptorName} | همراه: {toPersian(addr.phone)}

))} diff --git a/frontend/application/components/PetProfile.tsx b/frontend/application/components/PetProfile.tsx index 8ffd254..4de3a92 100644 --- a/frontend/application/components/PetProfile.tsx +++ b/frontend/application/components/PetProfile.tsx @@ -36,9 +36,10 @@ import api from "../lib/services/api"; import { useRouter } from 'next/navigation'; -export default function PetProfile({ initialView }: { +export default function PetProfile({ initialView, advisorNeed, embedded = false }: { initialView?: "index" | "detail" | "add" | "edit", - advisorNeed?: string | null + advisorNeed?: string | null, + embedded?: boolean }) { const router = useRouter(); const { pets, addPet, removePet, setActivePet, getActivePet, updatePet, addReminder, toggleReminder, addHealthLog } = usePetStore(); @@ -262,7 +263,7 @@ export default function PetProfile({ initialView }: { // 1. Pet Index Page if (view === "index") { return ( -
+
@@ -386,7 +387,7 @@ export default function PetProfile({ initialView }: { if (view === "add" || view === "edit") { if (view === "add" && pets.length === 0) { return ( -
+
{/* Render SmartAdvisor directly without redundant top banner */} +
-
+
{/* Progress Bar */}
+
{/* Navigation Bar */} diff --git a/frontend/application/components/UserDashboard.tsx b/frontend/application/components/UserDashboard.tsx index 711d20a..9d24584 100644 --- a/frontend/application/components/UserDashboard.tsx +++ b/frontend/application/components/UserDashboard.tsx @@ -14,6 +14,7 @@ import DeleteConfirmModal from "./DeleteConfirmModal"; import TopUpModal from "./TopUpModal"; import { ticketService, Ticket, TicketMessage } from "../lib/services/ticketService"; import { usePetStore } from "../lib/store/usePetStore"; +import PetProfile from "./PetProfile"; import { useRouter, useSearchParams } from 'next/navigation'; @@ -656,132 +657,8 @@ export default function UserDashboard() { )} {activeTab === "pets" && ( -
-
-
-

پت‌های من (حیوانات خانگی)

-

مدیریت مشخصات، سوابق سلامت، رژیم غذایی و پت فعال

-
- -
- - {(pets || []).length === 0 ? ( -
-
- -
-

هنوز حیوانی ثبت نکرده‌اید

-

- با ثبت اطلاعات پت خود، پیشنهادهای اختصاصی مکمل، دوز مصرفی دقیق و یادآورهای پزشکی دریافت کنید. -

- -
- ) : ( -
- {pets.map((p) => { - const isActive = p.id === activePetId; - const isDog = p.type === 'سگ' || (p.type as string) === 'dog'; - return ( -
-
-
-
-
- {p.imageUrl || p.image ? ( - {p.name} - ) : ( - {isDog ? '🐶' : '🐱'} - )} -
-
-
-

{p.name}

- {isActive && ( - - پت فعال - - )} -
-

- {isDog ? 'سگ' : 'گربه'} {p.breed ? `• نژاد ${p.breed}` : ''} -

-
-
- -
- -
-
- سن - {toPersian(p.age)} ساله -
-
- وزن - {toPersian(p.weight)} کیلو -
-
- فعالیت - {p.activityLevel || 'متوسط'} -
-
-
- -
- {!isActive && ( - - )} - -
-
- ); - })} -
- )} +
+ 0 ? "index" : "add"} />
)} @@ -1547,41 +1424,6 @@ export default function UserDashboard() {
)} - - {/* Pet Delete Confirmation Modal */} - {petToDelete && ( -
-
-
- -
-

حذف پروفایل {petToDelete.name}

-

- آیا از حذف اطلاعات و پرونده پزشکی «{petToDelete.name}» اطمینان دارید؟ این عملیات قابل بازگشت نیست. -

-
- - -
-
-
- )}
); }