Se soluciono autenticacion

This commit is contained in:
2025-08-05 13:06:24 -06:00
parent c280afe646
commit c9df4e3ab2
21 changed files with 758 additions and 624 deletions

View File

@@ -16,40 +16,38 @@ import 'highlight.js/styles/github.css';
hljs.registerLanguage('xml', xml);
// import type removed for JSX compatibility
import { fetchPedimentoDocuments } from '../api/pedimentoDocuments';
import { fetchWithAuth, postWithAuth } from '../fetchWithAuth';
import { useParams, Link } from 'react-router-dom';
import { useNotification } from '../context/NotificationContext';
const API_URL = import.meta.env.VITE_EFC_API_URL;
const downloadFile = async (id, filename = 'archivo', showMessage) => {
const token = localStorage.getItem('access');
const res = await fetch(`${API_URL}/record/documents/descargar/${id}/`, {
headers: {
'Authorization': `Bearer ${token}`,
},
});
if (res.status === 401) {
showMessage('Tu sesión ha expirado, por favor inicia sesión de nuevo.', 'error');
localStorage.removeItem('access');
localStorage.removeItem('refresh');
setTimeout(() => {
window.location.href = '/login';
}, 2000);
return;
try {
const res = await fetchWithAuth(`${API_URL}/record/documents/descargar/${id}/`);
if (!res.ok) {
showMessage('Error en la descarga del archivo', 'error');
return;
}
const blob = await res.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
} catch (error) {
console.error('Error downloading file:', error);
if (error.message === 'SESSION_EXPIRED') {
showMessage('Tu sesión ha expirado, por favor inicia sesión de nuevo.', 'error');
} else {
showMessage('Error al descargar el archivo', 'error');
}
}
if (!res.ok) {
alert('No autorizado o error en la descarga');
return;
}
const blob = await res.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
};
const downloadBulkZip = async (ids, showMessage, pedimentoNombre) => {
@@ -57,37 +55,35 @@ const downloadBulkZip = async (ids, showMessage, pedimentoNombre) => {
showMessage('Selecciona al menos un documento.', 'error');
return;
}
const token = localStorage.getItem('access');
const res = await fetch(`${API_URL}/record/documents/bulk-download/`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ document_ids: ids, pedimento_nombre: pedimentoNombre }),
});
if (res.status === 401) {
showMessage('Tu sesión ha expirado, por favor inicia sesión de nuevo.', 'error');
localStorage.removeItem('access');
localStorage.removeItem('refresh');
setTimeout(() => {
window.location.href = '/login';
}, 2000);
return;
try {
const res = await postWithAuth(`${API_URL}/record/documents/bulk-download/`, {
document_ids: ids,
pedimento_nombre: pedimentoNombre
});
if (!res.ok) {
showMessage('Error en la descarga masiva', 'error');
return;
}
const blob = await res.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `${pedimentoNombre || 'documentos'}.zip`;
document.body.appendChild(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
} catch (error) {
console.error('Error in bulk download:', error);
if (error.message === 'SESSION_EXPIRED') {
showMessage('Tu sesión ha expirado, por favor inicia sesión de nuevo.', 'error');
} else {
showMessage('Error en la descarga masiva', 'error');
}
}
if (!res.ok) {
showMessage('No autorizado o error en la descarga masiva', 'error');
return;
}
const blob = await res.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `${pedimentoNombre || 'documentos'}.zip`;
document.body.appendChild(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
};
import { useRef, useLayoutEffect } from 'react';
@@ -176,23 +172,8 @@ const [docsPrev, setDocsPrev] = useState(null);
const { showMessage } = useNotification();
useEffect(() => {
const token = localStorage.getItem('access');
fetch(`${API_URL}/customs/pedimentos/${id}/`, {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
})
fetchWithAuth(`${API_URL}/customs/pedimentos/${id}/`)
.then(res => {
if (res.status === 401) {
localStorage.removeItem('access');
localStorage.removeItem('refresh');
showMessage('Tu sesión ha expirado, por favor inicia sesión de nuevo.', 'error');
setTimeout(() => {
window.location.href = '/login';
}, 2000);
return null;
}
if (!res.ok) throw new Error('No autorizado o error en la petición');
return res.json();
})
@@ -201,7 +182,12 @@ const [docsPrev, setDocsPrev] = useState(null);
setLoading(false);
})
.catch(err => {
setError(err.message);
console.error('Error fetching pedimento:', err);
if (err.message === 'SESSION_EXPIRED') {
showMessage('Tu sesión ha expirado, por favor inicia sesión de nuevo.', 'error');
} else {
setError(err.message);
}
setLoading(false);
});
}, [id, showMessage]);
@@ -209,10 +195,9 @@ const [docsPrev, setDocsPrev] = useState(null);
// Fetch paginated documents
useEffect(() => {
if (!id) return;
const token = localStorage.getItem('access');
setDocsLoading(true);
setDocsError('');
fetchPedimentoDocuments(token, id, page, pageSize)
fetchPedimentoDocuments(id, page, pageSize)
.then((data) => {
setDocuments(data.results);
setDocsCount(data.count);
@@ -221,13 +206,9 @@ const [docsPrev, setDocsPrev] = useState(null);
setDocsLoading(false);
})
.catch(err => {
console.error('Error fetching documents:', err);
if (err.message === 'SESSION_EXPIRED') {
localStorage.removeItem('access');
localStorage.removeItem('refresh');
showMessage('Tu sesión ha expirado, por favor inicia sesión de nuevo.', 'error');
setTimeout(() => {
window.location.href = '/login';
}, 2000);
} else {
setDocsError(err.message);
}
@@ -288,22 +269,14 @@ const [docsPrev, setDocsPrev] = useState(null);
setPreviewXml('');
setPreviewOpen(true);
try {
const token = localStorage.getItem('access');
const res = await fetch(`${API_URL}/record/documents/descargar/${doc.id}/`, {
headers: {
'Authorization': `Bearer ${token}`,
},
});
if (res.status === 401) {
setPreviewError('Tu sesión ha expirado, por favor inicia sesión de nuevo.');
setPreviewLoading(false);
return;
}
const res = await fetchWithAuth(`${API_URL}/record/documents/descargar/${doc.id}/`);
if (!res.ok) {
setPreviewError('No autorizado o error en la descarga');
setPreviewError('Error al obtener el archivo');
setPreviewLoading(false);
return;
}
// Detectar tipo de archivo
let type = '';
if (doc.extension) {
@@ -332,7 +305,12 @@ const [docsPrev, setDocsPrev] = useState(null);
setPreviewLoading(false);
}
} catch (err) {
setPreviewError('Error al obtener el archivo');
console.error('Error in preview:', err);
if (err.message === 'SESSION_EXPIRED') {
setPreviewError('Tu sesión ha expirado, por favor inicia sesión de nuevo.');
} else {
setPreviewError('Error al obtener el archivo');
}
setPreviewLoading(false);
}
};