@@ -4,7 +4,7 @@ import "react-pdf/dist/Page/AnnotationLayer.css";
44import "react-pdf/dist/Page/TextLayer.css" ;
55import { useState , useRef , useCallback , useEffect } from "react" ;
66import { Document , Page , pdfjs } from "react-pdf" ;
7- import { Download , ZoomIn , ZoomOut } from "lucide-react" ;
7+ import { Download , ZoomIn , ZoomOut , Maximize2 , Minimize2 } from "lucide-react" ;
88import { Button } from "./ui/button" ;
99import { downloadFile } from "./CatalogueContent" ;
1010import 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