import type { MetaFunction } from "@remix-run/node"; import { ArrowRight, Check, X, Loader2 } from "lucide-react"; import { formatDate, formatPrice, formatTime, safeGoBack } from "../utils/helpers"; import { useNavigate } from "@remix-run/react"; import { useState } from "react"; import { Button } from "../components/ui/button"; import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, } from "../components/ui/drawer"; import { RadioGroup, RadioGroupItem } from "../components/ui/radio-group"; import PersianDatePicker from "../components/PersianDatePicker"; import { useSearchParams } from "react-router-dom"; import { useServiceGetPayoutRequests } from "../requestHandler/use-wallet-hooks"; import jMoment from "moment-jalaali"; import filterIcon from "~/assets/icons/filter.png"; import filterIconDark from "~/assets/icons/filter-dark.png"; import { useRootData } from "~/hooks/use-root-data"; 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 default function Transactions() { const navigate = useNavigate(); const [isFilterDrawerOpen, setIsFilterDrawerOpen] = useState(false); const [searchParams] = useSearchParams(); const { theme } = useRootData(); // Convert Persian date to Gregorian ISO string const convertPersianToGregorian = (persianDate: string): string => { // Persian date format is expected to be YYYY/MM/DD const [year, month, day] = persianDate.split("/"); const jMomentDate = jMoment(`${year}/${month}/${day}`, "jYYYY/jM/jD"); return jMomentDate.format("YYYY-MM-DD"); }; // Map URL params to API filters const getFilters = () => { const order = searchParams.get("order") as | "all" | "today" | "lastWeek" | "lastMonth" | "other"; const fromDate = searchParams.get("fromDate"); const toDate = searchParams.get("toDate"); if (!order || order === "all") { return undefined; } // Map URL params to API params const apiFilters: { dateFilter?: "today" | "last_7" | "last_30" | "custom"; fromDate?: string; toDate?: string; } = {}; switch (order) { case "today": apiFilters.dateFilter = "today"; break; case "lastWeek": apiFilters.dateFilter = "last_7"; break; case "lastMonth": apiFilters.dateFilter = "last_30"; break; case "other": // Allow custom filter even with only one date (fromDate OR toDate) if (fromDate || toDate) { apiFilters.dateFilter = "custom"; if (fromDate) { try { apiFilters.fromDate = convertPersianToGregorian(fromDate); } catch (error) { console.error("Error converting fromDate:", error); apiFilters.fromDate = fromDate; // fallback to original } } if (toDate) { try { apiFilters.toDate = convertPersianToGregorian(toDate); } catch (error) { console.error("Error converting toDate:", error); apiFilters.toDate = toDate; // fallback to original } } } break; } return Object.keys(apiFilters).length > 0 ? apiFilters : undefined; }; const { data: payoutRequests, isLoading } = useServiceGetPayoutRequests(getFilters()); const handleBack = () => { safeGoBack(navigate); }; const filterIconClicked = () => { setIsFilterDrawerOpen(true); }; return (
لیست تراکنشها
{request.requestedAt ? formatDate(request.requestedAt) : "تاریخ نامشخص"}
{request.requestedAt ? formatTime(request.requestedAt) : ""}
موفق
ناموفق
در انتظار
مبلغ
{formatPrice(request.amount)}
شماره کارت:
{request.bankAccountCardNumber}
شماره شبا:
{request.bankAccountIban}
شماره مرجع بانک:
{request.shomareMarja}
شماره ارجاع:
{request.shomareErja}
تاریخ پردازش:
{formatDate(request.processedAt)}{" "} {formatTime(request.processedAt)}
هیچ تراکنشی یافت نشد
هنوز درخواست برداشتی ثبت نکردهاید