From fee9d92ed74efe3acf05414b4471c14b6640725f Mon Sep 17 00:00:00 2001 From: santiago Date: Thu, 2 Oct 2025 16:03:28 -0600 Subject: [PATCH] Modificaciones en las vistas de las cargas masivas --- .../user/eventos/carga_masiva/page.tsx | 90 +++++--- .../user/eventos/carga_masiva_banner/page.tsx | 198 ++++++++++-------- 2 files changed, 173 insertions(+), 115 deletions(-) diff --git a/src/app/(admins)/user/eventos/carga_masiva/page.tsx b/src/app/(admins)/user/eventos/carga_masiva/page.tsx index e8c1b2d..2f93bcf 100644 --- a/src/app/(admins)/user/eventos/carga_masiva/page.tsx +++ b/src/app/(admins)/user/eventos/carga_masiva/page.tsx @@ -1,49 +1,70 @@ 'use client' import axiosInstance from "@/utils/api-config"; import React, { useState } from "react"; -import { Button, Form } from "react-bootstrap"; +import { Button, Form, ProgressBar } from "react-bootstrap"; import { FaUpload } from "react-icons/fa"; export default function CargaMasiva() { - const [xlsx, setXlsx] = useState(null) + const [xlsx, setXlsx] = useState(null); + const [progress, setProgress] = useState(0); + const [loading, setLoading] = useState(false); const validarExt = (file: File | null) => { - if (!file) return - const extPermitidas = /(.xlsx)$/i + if (!file) return; + const extPermitidas = /(.xlsx)$/i; if (!extPermitidas.exec(file.name)) { - console.assert({ message: "Asegurate de ingresar un archivo .xlsx"}) - setXlsx(null) + console.error("Asegúrate de ingresar un archivo .xlsx"); + setXlsx(null); } else { - setXlsx(file) + setXlsx(file); } - } + }; const handleFileChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0] || null; validarExt(file); - } + }; const enviarCargaMasiva = async () => { if (!xlsx) return; const formData = new FormData(); - formData.append("file", xlsx); + formData.append("file", xlsx); try { + setLoading(true); + setProgress(0); + const res = await axiosInstance.post( "/cuestionario/carga-masiva", formData, { - headers: { "Content-Type": "multipart/form-data" } + headers: { "Content-Type": "multipart/form-data" }, + onUploadProgress: (event) => { + if (event.total) { + const porcentaje = Math.round( + (event.loaded * 100) / event.total + ); + setProgress(porcentaje); + } + }, } ); + + //Falta hacer validacion + console.log("Carga masiva exitosa", res.data); + setTimeout(() => { + setProgress(100); + setLoading(false); + }, 500); } catch (error) { console.error("Carga masiva fallida", error); + setLoading(false); + setProgress(0); } }; - return (
@@ -51,7 +72,7 @@ export default function CargaMasiva() {

Carga Masiva de Eventos

- Sube tu archivo excel para poder crear los ventos. + Sube tu archivo excel para poder crear los eventos.

@@ -66,28 +87,47 @@ export default function CargaMasiva() { >

- {xlsx?.name || 'Arrastra aquí tu archivo o da click aquí para buscar'} + {xlsx?.name || + "Arrastra aquí tu archivo o da click aquí para buscar"}

Tamaño máximo 20MB

-

Si al momento de elegir uin archivo este no se selecciona, haga click en cancelar en la ventana emergente e intente de nuevo.

+

+ Si al momento de elegir un archivo este no se selecciona, + haga click en cancelar en la ventana emergente e intente de + nuevo. +

- + /> -
+
+ variant="outline-primary" + disabled={!xlsx || loading} + onClick={enviarCargaMasiva} + > + {loading ? "Subiendo..." : "Enviar archivo"} +
+ + {/* Barra de progreso */} + {loading && ( +
+ +
+ )}
); } diff --git a/src/app/(admins)/user/eventos/carga_masiva_banner/page.tsx b/src/app/(admins)/user/eventos/carga_masiva_banner/page.tsx index a0d0892..9edad3d 100644 --- a/src/app/(admins)/user/eventos/carga_masiva_banner/page.tsx +++ b/src/app/(admins)/user/eventos/carga_masiva_banner/page.tsx @@ -2,7 +2,9 @@ import React, { useState } from "react"; import axios from "axios"; -import { Image } from "react-bootstrap"; +import { Button, Image } from "react-bootstrap"; +import { FaUpload } from "react-icons/fa"; +import axiosInstance from "@/utils/api-config"; //Para poder subir las imagenes interface UploadedImage { @@ -35,110 +37,126 @@ export default function BannerUpload() { }); try { - setLoading(true); - setProgress(0); + setLoading(true); + setProgress(0); - const res = await axios.post("/cuestionario/banners/bulk", formData, { - headers: { "Content-Type": "multipart/form-data" }, - onUploadProgress: (progressEvent) => { - if (progressEvent.total) { - setProgress( - Math.round((progressEvent.loaded * 100) / progressEvent.total) - ); - } - }, - }); + const res = await axiosInstance.post("/cuestionario/banners/bulk", formData, { + headers: { "Content-Type": "multipart/form-data" }, + onUploadProgress: (progressEvent) => { + if (progressEvent.total) { + setProgress( + Math.round((progressEvent.loaded * 100) / progressEvent.total) + ); + } + }, + }); - setUploaded(res.data); - alert("Banners subidos correctamente ✅"); - setFiles([]); + //Falta hacer validacion + + setUploaded(res.data); + alert("Banners subidos correctamente ✅"); + setFiles([]); } catch (error) { - console.error(error); - alert(error || "Error al subir archivos"); + console.error(error); + alert(error || "Error al subir archivos"); } finally { - setLoading(false); + setLoading(false); } }; return ( -
-

Subir Banners

+
+
+
+
+

Subir Banners

+

+ Arrastra o selecciona imágenes para subir tus banners (jpg, png, webp). +

+
+
+
- {/* Área Drag & Drop */} -
+ + + + {/* Previsualización */} + {files.length > 0 && ( +
+ {files.map((file, i) => ( +
+ {file.name} - - - {/* Falta corregir el tamaño de la imagen */} - {/* Previsualización de imágenes */} - {files.length > 0 && ( -
- {files.map((file, i) => ( -
- {file.name} -

{file.name}

-
- ))} +

{file.name}

- )} + ))} +
+ )} - {/* Botón Subir */} - + {loading ? "Subiendo..." : "Subir Banners"} + +
- {/* Barra de progreso */} - {loading && ( -
-
-
- )} + {/* Barra de progreso */} + {loading && ( +
+
+
+ )} - {/* Archivos subidos */} - {uploaded.length > 0 && ( -
-

Archivos subidos:

-
    - {uploaded.map((file, i) => ( -
  • - {file.originalName} - - Ver - -
  • - ))} -
-
- )} + {/* Archivos subidos */} + {uploaded.length > 0 && ( +
+
Archivos subidos:
+
    + {uploaded.map((file, i) => ( +
  • + {file.originalName} + + Ver + +
  • + ))} +
+
+ )}
); }