From cf55e16a9addd171934ddb36343920d03466c0ae Mon Sep 17 00:00:00 2001 From: Arda Samadi Date: Sun, 14 Jun 2026 22:00:49 +0330 Subject: [PATCH] Desktop: seller brand header redesign + collections list/detail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - seller: desktop brand header matching the design — cover, overlapping rounded logo, name + verified badge + @handle, horizontal stats, Follow/Message actions, description; mobile blocks hidden at lg; feed = responsive masonry - /collections: 4-column card grid on desktop (was a stretched single column) - /collection/: two-column hero (cover + info) on desktop, contained width, mobile header hidden at lg; products use the responsive masonry - MyLayout: desktop gate now includes /collections and /collection/* Co-Authored-By: Claude Opus 4.8 --- app/components/MyLayout.tsx | 2 + app/routes/collection.$id.tsx | 12 +-- app/routes/collections.tsx | 13 ++- app/routes/seller.$sellerId._index.tsx | 135 ++++++++++++++++++++----- 4 files changed, 128 insertions(+), 34 deletions(-) diff --git a/app/components/MyLayout.tsx b/app/components/MyLayout.tsx index 1d3d1ee..e9352e2 100644 --- a/app/components/MyLayout.tsx +++ b/app/components/MyLayout.tsx @@ -35,6 +35,8 @@ const MyLayout = React.memo(({ children }: { children: React.ReactNode }) => { p === "/" || p.startsWith("/search/") || p.startsWith("/seller/") || + p === "/collections" || + p.startsWith("/collection/") || p === "/cart"; // Auth pages get a full-width desktop canvas (so they can center their own // card) but no shopping header/footer. diff --git a/app/routes/collection.$id.tsx b/app/routes/collection.$id.tsx index 9be25e4..1b35ddc 100644 --- a/app/routes/collection.$id.tsx +++ b/app/routes/collection.$id.tsx @@ -129,8 +129,8 @@ export default function CollectionDetail() { return (
- {/* Header */} -
+ {/* Header (mobile) */} +
{/* Content */} -
+
{/* Collection Header */} -
+
{/* Cover Image */} -
+
{collection.coverImageUrl ? ( -

+

{collection.title || "بدون عنوان"}

diff --git a/app/routes/collections.tsx b/app/routes/collections.tsx index 5e987fe..f349ecd 100644 --- a/app/routes/collections.tsx +++ b/app/routes/collections.tsx @@ -41,7 +41,7 @@ export default function Collections() { // Loading skeleton const CollectionSkeleton = () => ( -
+
{Array.from({ length: 6 }).map((_, index) => (
- {/* Header - مطابق با ProfilePagesHeader */} -
+ {/* Header (mobile) */} +
{/* Content */} -
+
+

+ کالکشن‌ها +

{status === "pending" ? ( ) : status === "error" ? ( @@ -136,7 +139,7 @@ export default function Collections() { ) : ( <> -
+
{allCollections.map((collection) => (
- {/* Header */} -
-
- + {/* Desktop brand header (cover + overlapping logo + stats + actions) */} +
+
+
-
+
+
+ {seller?.storeLogo ? ( + {seller?.storeName + ) : null} +
+
+

+ {seller?.storeName} + {seller?.isVerified ? ( + + ) : null} +

+ {seller?.username ? ( +

+ @{seller.username} +

+ ) : ( +
+ )} +
+
+ + {seller?.productCount ?? 0} + + محصول +
+
+ + {seller?.followerCount ?? 0} + + دنبال‌کننده +
+
+ + {seller?.productReviewsCount ? seller?.reviewAverage : "—"} + {seller?.productReviewsCount ? ( + + ) : null} + + امتیاز فروشگاه +
+
+
+
+ + +
+
+ {seller?.storeDescription ? ( +

+ {seller.storeDescription} +

+ ) : null} +
+
+ + {/* Mobile header */} +
+ +
-

- {seller?.storeName} -

-
-
+
+

{seller?.followerCount}

دنبال کننده

@@ -248,14 +334,14 @@ export default function Seller() {
-
+
-
+
- {/* Search Bar */} - + {/* Search Bar (mobile) */} +
+ +
+
{/* seller products */}