Skip to content

Commit 511b2d8

Browse files
feat: full screen in pdf viewer
1 parent f59b712 commit 511b2d8

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

src/components/pdfViewer.tsx

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import "react-pdf/dist/Page/AnnotationLayer.css";
44
import "react-pdf/dist/Page/TextLayer.css";
55
import { useState, useRef, useCallback, useEffect } from "react";
66
import { Document, Page, pdfjs } from "react-pdf";
7-
import { Download, ZoomIn, ZoomOut } from "lucide-react";
7+
import { Download, ZoomIn, ZoomOut, Maximize2, Minimize2 } from "lucide-react";
88
import { Button } from "./ui/button";
99
import { downloadFile } from "./CatalogueContent";
1010
import ShareButton from "./ShareButton";
@@ -25,6 +25,7 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
2525
const [numPages, setNumPages] = useState<number>();
2626
const [pageNumber, setPageNumber] = useState<number>(1);
2727
const [scale, setScale] = useState<number>(1);
28+
const [isFullscreen, setIsFullscreen] = useState<boolean>(false);
2829
const pageRefs = useRef<(HTMLDivElement | null)[]>([]);
2930
const containerRef = useRef<HTMLDivElement>(null);
3031

@@ -109,6 +110,41 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
109110
await downloadFile(url, fileName);
110111
};
111112

113+
const toggleFullscreen = () => {
114+
if (!containerRef.current) return;
115+
116+
if (!document.fullscreenElement) {
117+
containerRef.current
118+
.requestFullscreen()
119+
.then(() => {
120+
setIsFullscreen(true);
121+
})
122+
.catch((err) => {
123+
console.error("Error entering fullscreen:", err);
124+
});
125+
} else {
126+
document
127+
.exitFullscreen()
128+
.then(() => {
129+
setIsFullscreen(false);
130+
})
131+
.catch((err) => {
132+
console.error("Error exiting fullscreen:", err);
133+
});
134+
}
135+
};
136+
137+
useEffect(() => {
138+
const handleFullscreenChange = () => {
139+
setIsFullscreen(!!document.fullscreenElement);
140+
};
141+
142+
document.addEventListener("fullscreenchange", handleFullscreenChange);
143+
return () => {
144+
document.removeEventListener("fullscreenchange", handleFullscreenChange);
145+
};
146+
}, []);
147+
112148
return (
113149
<div className="flex flex-col items-center">
114150
<div
@@ -197,6 +233,12 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
197233
<Button onClick={downloadPDF} className="aspect-square h-10 w-10 p-0">
198234
<Download />
199235
</Button>
236+
<Button
237+
onClick={toggleFullscreen}
238+
className="h-10 w-10 rounded p-0 text-white transition hover:bg-[#6536c1]"
239+
>
240+
{isFullscreen ? <Minimize2 /> : <Maximize2 />}
241+
</Button>
200242
</div>
201243
</div>
202244
</div>

0 commit comments

Comments
 (0)