@@ -4,7 +4,7 @@ import "react-pdf/dist/Page/AnnotationLayer.css";
4
4
import "react-pdf/dist/Page/TextLayer.css" ;
5
5
import { useState , useRef , useCallback , useEffect } from "react" ;
6
6
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" ;
8
8
import { Button } from "./ui/button" ;
9
9
import { downloadFile } from "./CatalogueContent" ;
10
10
import ShareButton from "./ShareButton" ;
@@ -25,6 +25,7 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
25
25
const [ numPages , setNumPages ] = useState < number > ( ) ;
26
26
const [ pageNumber , setPageNumber ] = useState < number > ( 1 ) ;
27
27
const [ scale , setScale ] = useState < number > ( 1 ) ;
28
+ const [ isFullscreen , setIsFullscreen ] = useState < boolean > ( false ) ;
28
29
const pageRefs = useRef < ( HTMLDivElement | null ) [ ] > ( [ ] ) ;
29
30
const containerRef = useRef < HTMLDivElement > ( null ) ;
30
31
@@ -109,6 +110,41 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
109
110
await downloadFile ( url , fileName ) ;
110
111
} ;
111
112
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
+
112
148
return (
113
149
< div className = "flex flex-col items-center" >
114
150
< div
@@ -197,6 +233,12 @@ export default function PdfViewer({ url, name }: PdfViewerProps) {
197
233
< Button onClick = { downloadPDF } className = "aspect-square h-10 w-10 p-0" >
198
234
< Download />
199
235
</ 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 >
200
242
</ div >
201
243
</ div >
202
244
</ div >
0 commit comments