'use client'; import { useEffect, useMemo, useRef, useState } from 'react'; import OrderFilterBar from '@/components/OrderFilterBar'; import type { Locale } from '@/lib/locale'; import { formatStatus, formatCreatedAt, getStatusBadgeClass, getPaymentDisplayInfo, type MyOrder, type OrderStatusFilter, } from '@/lib/pay-utils'; interface MobileOrderListProps { isDark: boolean; hasToken: boolean; orders: MyOrder[]; hasMore: boolean; loadingMore: boolean; onRefresh: () => void; onLoadMore: () => void; locale?: Locale; } export default function MobileOrderList({ isDark, hasToken, orders, hasMore, loadingMore, onRefresh, onLoadMore, locale = 'zh', }: MobileOrderListProps) { const [activeFilter, setActiveFilter] = useState('ALL'); const sentinelRef = useRef(null); const filteredOrders = useMemo(() => { if (activeFilter === 'ALL') return orders; return orders.filter((item) => item.status === activeFilter); }, [orders, activeFilter]); useEffect(() => { if (!hasMore || loadingMore) return; const sentinel = sentinelRef.current; if (!sentinel) return; const observer = new IntersectionObserver( (entries) => { if (entries[0].isIntersecting) { onLoadMore(); } }, { threshold: 0.1 }, ); observer.observe(sentinel); return () => observer.disconnect(); }, [hasMore, loadingMore, onLoadMore]); return (

{locale === 'en' ? 'My Orders' : '我的订单'}

{!hasToken ? (
{locale === 'en' ? 'The current link does not include a login token, so "My Orders" is unavailable.' : '当前链接未携带登录 token,无法查询"我的订单"。'}
) : filteredOrders.length === 0 ? (
{locale === 'en' ? 'No matching orders found' : '暂无符合条件的订单记录'}
) : (
{filteredOrders.map((order) => (
¥{order.amount.toFixed(2)} {formatStatus(order.status, locale)}
{getPaymentDisplayInfo(order.paymentType, locale).channel}
{formatCreatedAt(order.createdAt, locale)}
))} {hasMore && (
{loadingMore ? ( {locale === 'en' ? 'Loading...' : '加载中...'} ) : ( {locale === 'en' ? 'Scroll up to load more' : '上滑加载更多'} )}
)} {!hasMore && orders.length > 0 && (
{locale === 'en' ? 'All orders loaded' : '已显示全部订单'}
)}
)}
); }