'use client'; import { useEffect, useMemo, useRef, useState } from 'react'; import OrderFilterBar from '@/components/OrderFilterBar'; import { formatStatus, formatCreatedAt, getStatusBadgeClass, type MyOrder, type OrderStatusFilter, } from '@/lib/pay-utils'; interface MobileOrderListProps { isDark: boolean; hasToken: boolean; orders: MyOrder[]; hasMore: boolean; loadingMore: boolean; onRefresh: () => void; onLoadMore: () => void; } export default function MobileOrderList({ isDark, hasToken, orders, hasMore, loadingMore, onRefresh, onLoadMore, }: 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 (

我的订单

{!hasToken ? (
当前链接未携带登录 token,无法查询“我的订单”。
) : filteredOrders.length === 0 ? (
暂无符合条件的订单记录
) : (
{filteredOrders.map((order) => (
¥{order.amount.toFixed(2)} {formatStatus(order.status)}
{order.paymentType}
{formatCreatedAt(order.createdAt)}
))} {/* 无限滚动哨兵 */} {hasMore && (
{loadingMore ? ( 加载中... ) : ( 上滑加载更多 )}
)} {!hasMore && orders.length > 0 && (
已显示全部订单
)}
)}
); }