Updated the stats endpoint path to match backend (/api/v1/admin/checkout/orders/statistics).

This commit is contained in:
hosseintaromi 2025-12-19 17:00:32 +03:30
parent abdf73bcb0
commit 6c9ce63815
3 changed files with 54 additions and 39 deletions

View File

@ -92,7 +92,7 @@ export const API_ROUTES = {
// Orders APIs
GET_ORDERS: "checkout/orders",
GET_ORDER: (id: string) => `checkout/orders/${id}`,
GET_ORDER_STATS: "checkout/orders/stats",
GET_ORDER_STATS: "checkout/orders/statistics",
UPDATE_ORDER_STATUS: (id: string) => `checkout/orders/${id}/status`,
// Shipping Methods APIs

View File

@ -1,7 +1,8 @@
import { Users, ShoppingBag, DollarSign, TrendingUp, BarChart3, Plus } from 'lucide-react';
import { Users, ShoppingBag, DollarSign, TrendingUp, BarChart3, Plus, Clock } from 'lucide-react';
import { StatsCard } from '../components/dashboard/StatsCard';
import { BarChart } from '../components/charts/BarChart';
import { lazy, Suspense } from 'react';
import { useOrderStats } from './orders/core/_hooks';
const LineChart = lazy(() => import('../components/charts/LineChart').then(module => ({ default: module.LineChart })));
import { PieChart } from '../components/charts/PieChart';
@ -11,36 +12,36 @@ import { PermissionWrapper } from '../components/common/PermissionWrapper';
import { PageContainer, PageTitle, CardTitle } from '../components/ui/Typography';
import { ChartData, TableColumn } from '../types';
const statsData = [
{
title: 'کل کاربران',
value: 1247,
change: 12,
icon: Users,
color: 'blue',
},
{
title: 'فروش ماهانه',
value: '۲۴,۵۶۷,۰۰۰',
change: 8.5,
icon: DollarSign,
color: 'green',
},
const useDashboardStats = () => {
const { data, isLoading, error } = useOrderStats(true);
const items = [
{
title: 'کل سفارشات',
value: 356,
change: -2.3,
value: data?.total_orders_count ?? 0,
icon: ShoppingBag,
color: 'yellow',
color: 'yellow' as const,
},
{
title: 'رشد فروش',
value: '۲۳.۵%',
change: 15.2,
icon: TrendingUp,
color: 'purple',
title: 'مجموع فروش',
value: data?.total_amount_of_sale ?? 0,
icon: DollarSign,
color: 'green' as const,
},
];
{
title: 'سفارش‌های در انتظار',
value: data?.total_order_pending ?? 0,
icon: Clock,
color: 'blue' as const,
},
{
title: 'میانگین سفارش',
value: data?.order_avg ?? 0,
icon: TrendingUp,
color: 'purple' as const,
},
];
return { items, isLoading, error };
};
const chartData: ChartData[] = [
{ name: 'فروردین', value: 4000 },
@ -100,6 +101,7 @@ const userColumns: TableColumn[] = [
];
export const Dashboard = () => {
const { items: statsData, isLoading: statsLoading, error: statsError } = useDashboardStats();
return (
<PageContainer>
{/* Header with mobile-responsive layout */}
@ -125,10 +127,23 @@ export const Dashboard = () => {
{/* Stats Cards - Mobile responsive grid */}
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4 lg:gap-6">
{statsData.map((stat, index) => (
<StatsCard key={index} {...stat} />
{statsLoading ? (
<>
{[...Array(4)].map((_, idx) => (
<div key={idx} className="card p-6 animate-pulse bg-gray-100 dark:bg-gray-800 h-24" />
))}
</>
) : (
statsData.map((stat, index) => (
<StatsCard key={index} {...stat} />
))
)}
</div>
{statsError && (
<div className="mt-2 text-sm text-red-600 dark:text-red-400">
خطا در دریافت آمار سفارشات
</div>
)}
{/* Charts - Better mobile layout */}
<div className="grid grid-cols-1 xl:grid-cols-2 gap-4 sm:gap-6">

View File

@ -183,10 +183,10 @@ export interface UpdateOrderStatusRequest {
}
export interface OrderStats {
total_orders: number;
total_revenue: number;
orders_by_status: Record<OrderStatus, number>;
avg_order_value: number;
total_orders_count: number;
total_amount_of_sale: number;
total_order_pending: number;
order_avg: number;
}
export type Response<T> = {