diff --git a/my-app/public/Newsletter.pdf b/my-app/public/Newsletter.pdf new file mode 100644 index 0000000..6d45809 Binary files /dev/null and b/my-app/public/Newsletter.pdf differ diff --git a/my-app/src/pages/NewsletterPage.jsx b/my-app/src/pages/NewsletterPage.jsx index 719a5cc..165473c 100644 --- a/my-app/src/pages/NewsletterPage.jsx +++ b/my-app/src/pages/NewsletterPage.jsx @@ -1,10 +1,11 @@ import { pdfjs } from "react-pdf"; -import { useCallback, useMemo, useState } from "react"; +import { useCallback, useEffect, useMemo, useState } from "react"; import { Document, Page } from "react-pdf"; import { useResizeObserver } from "@wojtekmaj/react-hooks"; import "react-pdf/dist/esm/Page/AnnotationLayer.css"; import "react-pdf/dist/esm/Page/TextLayer.css"; import { IoChevronBack, IoChevronForward } from "react-icons/io5"; +import { API_URL } from "../lib/constants"; import "../styles/newsletter.css"; import Newsletter from "../components/Newsletter"; @@ -14,10 +15,13 @@ const maxWidth = 800; const resizeObserverOptions = {}; const NewsletterPage = () => { + const [file, setFile] = useState(); + const [editions, setEditions] = useState([]); const [numPages, setNumPages] = useState(); const [pageNumber, setPageNumber] = useState(1); const [containerRef, setContainerRef] = useState(null); const [containerWidth, setContainerWidth] = useState(); + const [loading, setLoading] = useState(true); // Memoize the options object to prevent unnecessary reloads const options = useMemo( @@ -40,6 +44,52 @@ const NewsletterPage = () => { useResizeObserver(containerRef, resizeObserverOptions, onResize); + const getNewsletters = async () => { + try { + const response = await fetch(`${API_URL}/newsletter`, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }); + + const data = await response.json(); + if(data.success){ + setEditions(data.newsletter); + if(data.newsletter.length>0) getNewsletter(data.newsletter[0].id) + } + setLoading(false); + } catch (error) { + setLoading(false); + } + }; + + const getNewsletter = async (id) => { + try { + const response = await fetch(`${API_URL}/newsletter/${id}`, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }); + + const data = await response.json(); + if(data.success){ + const pdfResponse = await fetch(data.newsletter.link); + const blob = await pdfResponse.blob(); + const fileUrl = URL.createObjectURL(blob); + setFile(fileUrl); + } + setLoading(false); + } catch (error) { + setLoading(false); + } + }; + + useEffect(()=>{ + getNewsletters(); + },[]) + const forward = () => { if (pageNumber + 1 <= numPages) setPageNumber(pageNumber + 1); }; @@ -48,20 +98,47 @@ const NewsletterPage = () => { if (pageNumber - 1 >= 1) setPageNumber(pageNumber - 1); }; - const [selectedValue, setSelectedValue] = useState(''); + const [selectedValue, setSelectedValue] = useState('Option 1'); + // Handle change event const handleChange = (event) => { + setLoading(true); setSelectedValue(event.target.value); + getNewsletter(event.target.value); }; return (
-

+

Newsletters

-
- DROP DOWN HERE +
+
+ +
+
+ { + loading&& +
+ asda +
+ } + {!loading&&file&& +
@@ -72,7 +149,7 @@ const NewsletterPage = () => {
@@ -92,6 +169,7 @@ const NewsletterPage = () => {
+
}