import { LoaderFunctionArgs, type MetaFunction } from "@remix-run/node"; import ProfilePagesHeader from "../components/ProfilePagesHeader"; import { useGetSellerOrders } from "../requestHandler/use-order-hooks"; import { formatDate, formatPrice, formatTime, safeGoBack, } from "../utils/helpers"; import { SellerOrderList, SellerOrderListStatusEnum, } from "../../src/api/types"; import { useState } from "react"; import { AlarmClockCheck, CircleCheckBig, CircleX, DiamondPlus, LayoutGrid, PackageCheck, Search, } from "lucide-react"; import HeaderWithSupport from "../components/HeaderWithSupport"; import { useLoaderData, useNavigate } from "@remix-run/react"; import { useStoreOwnership } from "../hooks/useStoreOwnership"; export const meta: MetaFunction = () => { return [ { title: "سفارش‌های دریافتی - ویترون" }, { name: "description", content: "مدیریت و مشاهده تمام سفارش‌های دریافتی در فروشگاه شما. فیلتر بر اساس وضعیت و جستجو در سفارش‌ها.", }, { name: "keywords", content: "سفارش‌ها، مدیریت سفارش، فروشگاه، مشتری، ویترون", }, { name: "robots", content: "noindex, follow" }, { property: "og:title", content: "سفارش‌های دریافتی - ویترون" }, { property: "og:description", content: "مدیریت و مشاهده تمام سفارش‌های دریافتی در فروشگاه شما. فیلتر بر اساس وضعیت و جستجو در سفارش‌ها.", }, { property: "og:type", content: "website" }, { name: "twitter:card", content: "summary" }, { name: "twitter:title", content: "سفارش‌های دریافتی - ویترون" }, { name: "twitter:description", content: "مدیریت و مشاهده تمام سفارش‌های دریافتی در فروشگاه شما. فیلتر بر اساس وضعیت و جستجو در سفارش‌ها.", }, ]; }; export async function loader({ params }: LoaderFunctionArgs) { const storeId = params.storeId; if (!storeId) { throw new Response("Store ID is required", { status: 400 }); } return { storeId }; } // Status translation map const statusMap: Record = { shipped: "ارسال شده", delivered: "تحویل داده شده", confirmed: "تایید شده", pending: "جدید", cancelled: "لغو شده", }; const statusIconMap: Record = { pending: , confirmed: , shipped: , delivered: , cancelled: , }; // Tab configuration const orderTabs = [ { key: "all", label: "همه", statuses: ["pending", "confirmed", "shipped", "delivered", "cancelled"], icon: , }, { key: "pending", label: "جدید", statuses: ["pending"], icon: , }, { key: "confirmed", label: "آماده ارسال", statuses: ["confirmed"], icon: , }, { key: "shipped-delivered", label: "ارسال شده", statuses: ["shipped", "delivered"], icon: , }, ]; function OrderItem({ order, isLastOrder, storeId, }: { order: SellerOrderList; isLastOrder: boolean; storeId: string; }) { const navigate = useNavigate(); return (
{ navigate(`/store/${storeId}/orders/${order.id}`); }} role="button" tabIndex={0} onKeyDown={(e) => { if (e.key === "Enter") { navigate(`/store/${storeId}/orders/${order.id}`); } }} className={`border-t ${isLastOrder && "border-b"} p-2 bg-WHITE hover:bg-WHITE3 cursor-pointer transition-colors duration-300 lg:border lg:border-WHITE3 lg:rounded-2xl lg:p-5 lg:hover:shadow-md lg:hover:bg-WHITE`} >
{/* Header */}
{statusIconMap[order.status || "pending"]} {statusMap[order.status || "pending"]}

شماره سفارش: {order.invoiceNumber}

{order.createdAt && `${formatDate(order.createdAt)} - ${formatTime(order.createdAt)}`}

{order.productNames?.join(", ")}

مبلغ فاکتور: {formatPrice(order.totalPrice)} تومان

آدرس: {order.shippingInfo?.address?.mainAddress || "آدرس ثبت نشده"}

); } export default function Orders() { const { data: orders, isLoading, error } = useGetSellerOrders(); const [activeTab, setActiveTab] = useState("all"); const [searchQuery, setSearchQuery] = useState(""); const { storeId } = useLoaderData(); const navigate = useNavigate(); // Check store ownership - this will redirect if user doesn't own the store const { isLoading: isOwnershipLoading } = useStoreOwnership(storeId); // Show loading while checking ownership if (isOwnershipLoading) { return (
); } // Filter orders based on active tab const filteredOrders = orders?.filter((order) => { const activeTabConfig = orderTabs.find((tab) => tab.key === activeTab); const matchesTab = activeTab === "all" || (activeTabConfig && order.status && activeTabConfig.statuses.includes(order.status)); const matchesSearch = searchQuery === "" || order.invoiceNumber?.toString().includes(searchQuery) || order.buyerName?.toLowerCase().includes(searchQuery.toLowerCase()) || order?.productNames ?.join(" ") ?.toLowerCase() .includes(searchQuery.toLowerCase()); return matchesTab && matchesSearch; }) || []; if (isLoading) { return (
); } if (error) { return (

خطا در بارگذاری سفارشات. لطفا دوباره تلاش کنید.

); } const handleBack = () => { safeGoBack(navigate); }; return (
{/* Header */}

سفارش‌های دریافتی

{/* Tabs + Search row (desktop puts them side by side) */}
{/* Tabs */}
{orderTabs.map((tab) => ( ))}
{/* Search Bar */}
setSearchQuery(e.target.value)} className="w-full h-10 px-3 py-2 pr-10 bg-WHITE2 border border-WHITE2 rounded-lg focus:outline-none focus:ring-2 focus:ring-gray-200 focus:border-transparent" />
{/* Orders List */} {filteredOrders.length > 0 ? (
{filteredOrders.map((order, index) => ( ))}
) : (
📦

{searchQuery ? "سفارشی یافت نشد" : "هیچ سفارشی موجود نیست"}

{searchQuery ? "سفارشی با این مشخصات پیدا نشد. جستجوی دیگری امتحان کنید." : "هنوز هیچ سفارشی در این بخش ثبت نشده است."}

{searchQuery && ( )}
)}
); }