Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 0 additions & 100 deletions src/common/helpers/metricsExport.ts

This file was deleted.

27 changes: 13 additions & 14 deletions src/modules/metrics/Metrics.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import { useState } from 'react';
import { toast } from 'sonner';

import { buildMetricsCSV } from '@/common/helpers/metricsExport';
import { downloadCSV } from '@/lib/utils';
import { CategoryMetricsCharts } from '@/components/metrics/CategoryMetricsCharts';
import { KpiCards } from '@/components/metrics/KpiCards';
Expand All @@ -12,6 +11,7 @@ import { StatusDistributionChart } from '@/components/metrics/StatusDistribution
import { TimeSeriesCharts } from '@/components/metrics/TimeSeriesCharts';
import { TopProductsRanking } from '@/components/metrics/TopProductsRanking';
import { useMetricsData } from '@/common/hooks/useMetricsData';
import { ordersService } from '@/services/orders';

export default function Metrics() {
const [period, setPeriod] = useState<string>('');
Expand All @@ -24,26 +24,25 @@ export default function Metrics() {
categoryStatsData,
} = useMetricsData(period);

const handleExportCSV = () => {
const handleExportCSV = async () => {
if (!period) {
toast.error('Seleccioná un período antes de exportar.', {
description: 'Debés seleccionar 7, 30 o 90 días para poder exportar los datos.',
});
return;
}

const csv = buildMetricsCSV({
period,
data,
timeSeriesData,
statusDistributionData,
topProductsData,
categoryStatsData,
});
downloadCSV(csv, `bazaar-metricas-${period}-${new Date().toISOString().split('T')[0]}.csv`);
toast.success('CSV exportado', {
description: `Datos de ${period} descargados correctamente.`,
});
try {
const csv = await ordersService.exportStatsCSV(period);
downloadCSV(csv, `bazaar-metricas-${period}-${new Date().toISOString().split('T')[0]}.csv`);
toast.success('CSV exportado', {
description: `Datos de ${period} descargados correctamente.`,
});
} catch {
toast.error('No se pudo exportar el CSV', {
description: 'Intenta nuevamente más tarde.',
});
}
};

return (
Expand Down
15 changes: 14 additions & 1 deletion src/services/orders.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Service from './base';
import Service, { HttpError } from './base';
import secureLocalStorage from 'react-secure-storage';
import {
Order,
Expand All @@ -19,6 +19,19 @@ class OrdersService extends Service {
);
}

async exportStatsCSV(period: string): Promise<string> {
const token = secureLocalStorage.getItem('accessToken') as string;
const response = await fetch(`${this.baseUrl}/admin/orders/stats/export?period=${period}`, {
headers: {
Authorization: `Bearer ${token}`,
},
});

if (!response.ok) throw new HttpError(response.status);

return response.text();
}

async getOrders(params: OrderParams): Promise<OrderResponse> {
const token = secureLocalStorage.getItem('accessToken') as string;
const queryParams = new URLSearchParams();
Expand Down
Loading