Fase 5 Completa: Implementada la generación de CSV automática y manual.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// frontend/src/components/Dashboard.tsx
|
||||
|
||||
import { useEffect, useState, useCallback } from 'react';
|
||||
import { Box, Button, Typography, Stack, Chip } from '@mui/material';
|
||||
import { Box, Button, Typography, Stack, Chip, CircularProgress } from '@mui/material';
|
||||
import AddIcon from '@mui/icons-material/Add';
|
||||
import SyncIcon from '@mui/icons-material/Sync';
|
||||
|
||||
@@ -15,6 +15,7 @@ import AddTitularModal from './AddTitularModal';
|
||||
const Dashboard = () => {
|
||||
const [titulares, setTitulares] = useState<Titular[]>([]);
|
||||
const [modalOpen, setModalOpen] = useState(false);
|
||||
const [isGeneratingCsv, setIsGeneratingCsv] = useState(false);
|
||||
|
||||
// Usamos useCallback para que la función de callback no se recree en cada render,
|
||||
// evitando que el useEffect del hook se ejecute innecesariamente.
|
||||
@@ -81,6 +82,19 @@ const Dashboard = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const handleGenerateCsv = async () => {
|
||||
setIsGeneratingCsv(true);
|
||||
try {
|
||||
await api.generarCsvManual();
|
||||
// Opcional: mostrar una notificación de éxito
|
||||
} catch (error) {
|
||||
console.error("Error al generar CSV manualmente", error);
|
||||
// Opcional: mostrar una notificación de error
|
||||
} finally {
|
||||
setIsGeneratingCsv(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 2 }}>
|
||||
@@ -91,8 +105,13 @@ const Dashboard = () => {
|
||||
{getStatusChip()}
|
||||
</Stack>
|
||||
<Stack direction="row" spacing={2}>
|
||||
<Button variant="outlined" startIcon={<SyncIcon />}>
|
||||
Generate CSV
|
||||
<Button
|
||||
variant="outlined"
|
||||
startIcon={isGeneratingCsv ? <CircularProgress size={20} /> : <SyncIcon />}
|
||||
onClick={handleGenerateCsv}
|
||||
disabled={isGeneratingCsv}
|
||||
>
|
||||
{isGeneratingCsv ? 'Generando...' : 'Generate CSV'}
|
||||
</Button>
|
||||
<Button variant="contained" startIcon={<AddIcon />} onClick={() => setModalOpen(true)}>
|
||||
Add Manual
|
||||
|
||||
@@ -39,4 +39,8 @@ export const obtenerConfiguracion = async (): Promise<Configuracion> => {
|
||||
|
||||
export const guardarConfiguracion = async (config: Configuracion): Promise<void> => {
|
||||
await apiClient.post('/configuracion', config);
|
||||
};
|
||||
|
||||
export const generarCsvManual = async (): Promise<void> => {
|
||||
await apiClient.post('/acciones/generar-csv');
|
||||
};
|
||||
Reference in New Issue
Block a user