From 563105c79a4680998baef9fe7ddffa8d9450115d Mon Sep 17 00:00:00 2001 From: ISA Date: Fri, 18 Oct 2024 10:58:51 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20PDF=20in=20neue=20Tab=20=C3=B6ffnen=20u?= =?UTF-8?q?nd=20die=20PDFs=20werden=20in=20indexedDB=20gespeichert=20und?= =?UTF-8?q?=20dann=20von=20dort=20aufgerufen=20und=20gelesen=20mit=20=20Hi?= =?UTF-8?q?lfe=20von=20=20idb=20Bibliothek=20=20"npm=20install=20idb"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/Footer.jsx | 107 ++++++++++++++++++++++++++++++++++++++++-- package-lock.json | 6 +++ package.json | 1 + utils/indexedDB.js | 19 ++++++++ 4 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 utils/indexedDB.js diff --git a/components/Footer.jsx b/components/Footer.jsx index 86df0c4..f019acd 100644 --- a/components/Footer.jsx +++ b/components/Footer.jsx @@ -1,10 +1,76 @@ -"use client"; -import React from "react"; +"use client"; // Wichtig, um sicherzustellen, dass der Code nur auf dem Client ausgeführt wird +import React, { useEffect, useState } from "react"; import { Icon } from "@iconify/react"; +// indexDB-Funktionen nur im Browser importieren +let storePDF, getPDF; +if (typeof window !== "undefined") { + const indexedDBModule = require("../utils/indexedDB"); + storePDF = indexedDBModule.storePDF; + getPDF = indexedDBModule.getPDF; +} + function Footer() { + const [pdfName, setPdfName] = useState(""); + const [showSlider, setShowSlider] = useState(false); + + const pdfFiles = [ + "ACCESS.PDF", + "CPL.PDF", + "CPL220.PDF", + "CPL3.PDF", + "Daten_APL.pdf", + "Daten_CDO.pdf", + "Daten_DPL.pdf", + "KUE605.PDF", + "KUE605uC.PDF", + "KUE605uF.PDF", + "KUE705FO.PDF", + "Modem.pdf", + "PST212.PDF", + "Temper.pdf", + "Wasser.pdf", + "XIOPM.PDF", + ]; + + useEffect(() => { + if (typeof window !== "undefined" && getPDF && storePDF) { + async function loadAndStorePDFs() { + try { + for (const fileName of pdfFiles) { + const storedPdf = await getPDF(fileName); + if (!storedPdf) { + const response = await fetch(`/doku/${fileName}`); + const pdfBlob = await response.blob(); + await storePDF(fileName, pdfBlob); + console.log(`${fileName} in IndexedDB gespeichert.`); + } + } + } catch (error) { + console.error("Fehler beim Laden oder Speichern der PDFs:", error); + } + } + + loadAndStorePDFs(); + } + }, [getPDF, storePDF]); + + const loadPDF = async (fileName) => { + if (typeof window !== "undefined" && getPDF) { + const storedPdf = await getPDF(fileName); + if (storedPdf) { + const pdfUrl = URL.createObjectURL(storedPdf); + window.open(pdfUrl, "_blank"); // Öffnet die PDF in einem neuen Tab + setPdfName(fileName); + setShowSlider(false); + } else { + console.error("PDF nicht in IndexedDB gefunden"); + } + } + }; + return ( -