Fix auth login flow, Iran Yekan/Doran fonts, and account tiles.
Prevent stale /auth/me from wiping a fresh session, unblock login submit, allow localhost HMR, and drop the tile "مشاهده" CTA. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
27d5cd0186
commit
68365457a1
@@ -0,0 +1,145 @@
|
||||
"use client";
|
||||
|
||||
import DashboardBanner from "@/components/dashboard/DashboardBanner";
|
||||
import DashboardHeader from "@/components/dashboard/DashboardHeader";
|
||||
import DashTileGrid, {
|
||||
DashTileItem,
|
||||
} from "@/components/dashboard/DashTileGrid";
|
||||
import { useAuth } from "@/lib/auth";
|
||||
|
||||
function canAccessAdmin(role: string | undefined) {
|
||||
return role === "STORE_ADMIN" || role === "SUPER_ADMIN";
|
||||
}
|
||||
|
||||
export default function CustomerHomePage() {
|
||||
const { user } = useAuth();
|
||||
const showAdmin = canAccessAdmin(user?.role);
|
||||
|
||||
const tiles: DashTileItem[] = [
|
||||
{
|
||||
href: "/account/orders",
|
||||
title: "سفارشهای من",
|
||||
titleEn: "My Orders",
|
||||
description: "پیگیری وضعیت و جزئیات خرید",
|
||||
icon: <OrdersIcon />,
|
||||
},
|
||||
{
|
||||
href: "/account/profile",
|
||||
title: "پروفایل من",
|
||||
titleEn: "My Profile",
|
||||
description: "اطلاعات حساب و آدرسها",
|
||||
icon: <ProfileIcon />,
|
||||
},
|
||||
...(showAdmin
|
||||
? [
|
||||
{
|
||||
href: "/",
|
||||
title: "پنل مدیریت",
|
||||
titleEn: "Admin",
|
||||
description: "مدیریت فروشگاه و محصولات",
|
||||
icon: <AdminIcon />,
|
||||
} satisfies DashTileItem,
|
||||
]
|
||||
: []),
|
||||
];
|
||||
|
||||
const bannerDelay = 80 + tiles.length * 70;
|
||||
|
||||
return (
|
||||
<div className="mana-canvas relative flex min-h-dvh flex-col">
|
||||
<DashboardHeader />
|
||||
|
||||
<main className="relative z-10 mx-auto flex w-full max-w-6xl flex-1 flex-col px-3 pt-10 pb-6 sm:px-5 sm:pt-12 sm:pb-8 lg:px-6">
|
||||
<div className="mb-3 dash-enter" style={{ animationDelay: "0ms" }}>
|
||||
<h1
|
||||
dir="ltr"
|
||||
className="flex flex-wrap items-baseline justify-end gap-x-2.5 gap-y-1 text-2xl font-medium text-ink sm:text-4xl"
|
||||
>
|
||||
<span className="font-display text-base tracking-[0.06em] text-muted sm:text-xl">
|
||||
Account
|
||||
</span>
|
||||
<span aria-hidden className="text-sm text-muted/60 sm:text-base">
|
||||
•
|
||||
</span>
|
||||
<span dir="rtl" className="font-doran">
|
||||
حساب کاربری
|
||||
</span>
|
||||
</h1>
|
||||
<p className="mt-3 max-w-xl text-sm leading-7 text-muted sm:text-base">
|
||||
سفارشها و اطلاعات حساب خود را از اینجا مدیریت کنید
|
||||
{showAdmin ? "؛ در صورت دسترسی میتوانید به پنل مدیریت بروید" : ""}
|
||||
.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<DashTileGrid tiles={tiles} />
|
||||
|
||||
<DashboardBanner
|
||||
src="/images/image4.jpg"
|
||||
alt="نمای کالکشن مانا"
|
||||
caption="Quiet elegance."
|
||||
hoverTitle="خریدهای من"
|
||||
hoverSubtitle="My Orders"
|
||||
priority
|
||||
style={{ animationDelay: `${bannerDelay}ms` }}
|
||||
/>
|
||||
</main>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function iconProps() {
|
||||
return {
|
||||
width: 56,
|
||||
height: 56,
|
||||
viewBox: "0 0 24 24",
|
||||
fill: "none",
|
||||
"aria-hidden": true as const,
|
||||
};
|
||||
}
|
||||
|
||||
function OrdersIcon() {
|
||||
return (
|
||||
<svg {...iconProps()}>
|
||||
<path
|
||||
d="M6 7h12l-.8 11.2a1 1 0 0 1-1 .8H7.8a1 1 0 0 1-1-.8L6 7Z"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M9 7a3 3 0 0 1 6 0"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
function ProfileIcon() {
|
||||
return (
|
||||
<svg {...iconProps()}>
|
||||
<circle cx="12" cy="8" r="3" stroke="currentColor" strokeWidth="1.15" />
|
||||
<path
|
||||
d="M5 19c1.5-3.2 3.8-4.8 7-4.8s5.5 1.6 7 4.8"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
function AdminIcon() {
|
||||
return (
|
||||
<svg {...iconProps()}>
|
||||
<path
|
||||
d="M4.5 10.5 12 4.5l7.5 6V19a1 1 0 0 1-1 1h-4.5v-5h-5v5H5.5a1 1 0 0 1-1-1v-8.5Z"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user