import { useMemo } from 'react'; import { useOrders } from './useAdminApi'; import { format } from 'date-fns'; import { ru } from 'date-fns/locale'; import { Order } from '@/lib/orders'; interface UseOrdersCacheParams { page?: number; pageSize?: number; status?: string; search?: string; dateRange?: [Date | null, Date | null]; } export default function useOrdersCache({ page = 1, pageSize = 10, status = '', search = '', dateRange = [null, null], }: UseOrdersCacheParams = {}) { const params: Record = { skip: (page - 1) * pageSize, limit: pageSize, search: search || undefined, status: status || undefined, }; if (dateRange[0] && dateRange[1]) { params.date_from = format(dateRange[0], 'yyyy-MM-dd'); params.date_to = format(dateRange[1], 'yyyy-MM-dd'); } const { data, isLoading, error, refetch } = useOrders(params) as { data?: { orders: Order[]; total: number }, isLoading: boolean, error: any, refetch: () => void }; const orders: Order[] = data?.orders || []; const totalOrders: number = data?.total || 0; const totalPages: number = pageSize > 0 ? Math.ceil(totalOrders / pageSize) : 1; // Вспомогательные функции для UI const getStatusLabel = (status: string) => { switch (status) { case 'pending': return 'Ожидает оплаты'; case 'paid': return 'Оплачен'; case 'processing': return 'В обработке'; case 'shipped': return 'Отправлен'; case 'delivered': return 'Доставлен'; case 'cancelled': return 'Отменен'; default: return status; } }; const getStatusClass = (status: string) => { switch (status) { case 'pending': return 'secondary'; case 'paid': return 'default'; case 'processing': return 'outline'; case 'shipped': return 'default'; case 'delivered': return 'default'; case 'cancelled': return 'destructive'; default: return 'default'; } }; const formatDate = (date: string | Date) => { if (!date) return ''; return format(new Date(date), 'dd.MM.yyyy', { locale: ru }); }; const formatAmount = (amount: number) => { return new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'RUB' }).format(amount); }; return { orders, totalOrders, totalPages, isLoading, error, refetch, getStatusLabel, getStatusClass, formatDate, formatAmount, }; }