import axios from "axios"; import { Dispatch, SetStateAction, useEffect, useState } from "react"; import SimpleLoading from "../Loading/SimpleLoading"; import Swal from "sweetalert2"; interface ImprimirProps { api: string; setSaldo: Dispatch>; saldo: number; } export interface archivo { idArchivo: number; idPersona: number; rutaArchivo: string; fecha: string; nombreArchivo: string; numeroPaginas: number; size: number; } export default function Imprimir({ api, saldo, setSaldo }: ImprimirProps) { const [archivos, setArchivos] = useState([]); const [imprimiendo, setImprimiendo] = useState(false); const [error, setError] = useState(false); const [errorMessage, setErrorMessage] = useState("Error"); const [sendPrintFlag, setSendPrintFlag] = useState(false); useEffect(() => { const fetchData = async () => { try { axios.defaults.headers.common.Authorization = localStorage.getItem("Token"); const [filesResponse, saldoResponse] = await Promise.all([ axios.get(`${api}/files`), axios.get(`http://localhost:3000/persona/saldo`), ]); setArchivos(filesResponse.data.data); setSaldo(saldoResponse.data.data); } catch (error) { console.error("Error fetching data:", error); setError(true); setErrorMessage("Ha ocurrido un problema al traer tus documentos"); } }; fetchData(); }, [api, setSaldo, imprimiendo]); useEffect(() => { const handlePrintError = (event: string | object) => { setErrorMessage(typeof event === "string" ? event : "Error desconocido"); setError(true); }; //Si al enviar a imprimir no podemos imprimir y detectamos un error lo mostramos //y no afectamos el saldo del usuario window.ipc.on("finishPrintError", handlePrintError); }, []); const formatDate = (dateString: string) => { const date = new Date(dateString); return date.toLocaleDateString("es-ES", { day: "2-digit", month: "2-digit", year: "numeric", }); }; const puedeImprimir = async (idArchivo: number): Promise => { try { const res = await axios.post(`${api}/imprimirCheck`, { idKiosco: localStorage.getItem("kioscoAcatlanKiosco"), idArchivo: idArchivo, }); if (!res.data.error) { console.log("Si puede imprimir"); return true; } else { return false; } } catch (error) { Swal.fire({ title: `Error`, text: `${error.response.data.msj}`, icon: "success", }); console.log(error); return false; } }; const handlePrintClick = async (idArchivo: number) => { setImprimiendo(true); if (await puedeImprimir(idArchivo)) { const token = localStorage.getItem("kioscoAcatlanToken"); const dataToSend = { token: token, fileId: idArchivo, api: api, }; setSendPrintFlag(true); window.ipc.send("openDial", dataToSend); } else { setImprimiendo(false); } return; }; useEffect(() => { const descontarImpresion = async (event, datos) => { try { const res = await axios.post(`${api}/imprimir`, { idKiosco: localStorage.getItem("kioscoAcatlanKiosco"), idArchivo: event, }); const saldoActualizado = res.data.msj.slice(-5); setSaldo(saldoActualizado); Swal.fire({ title: `Exito`, text: `${res.data.msj}`, icon: "success", }); console.log("Descontar impresion"); } catch (error) { console.log(error); } finally { setImprimiendo(false); console.log("Fin"); } }; // Suscribirse al evento finishPrint una vez const unsubscribe = window.ipc.on("finishPrint", descontarImpresion); return () => unsubscribe(); }, []); return ( <>
El precio de tu impresion dependera del numero de paginas de tu documento

Tus documentos

{error ? (

Ha ocurrido un error

Por favor inténtalo más tarde


{errorMessage}

) : imprimiendo ? ( ) : ( {archivos.length > 0 ? ( archivos.map((archivo, index) => ( )) ) : ( )}
Nombre del archivo No. Páginas Fechas Imprimir
{archivo.nombreArchivo} {archivo.numeroPaginas} {formatDate(archivo.fecha)}
No tienes archivos en tu cuenta
)}
); }