|
|
@@ -18,42 +18,69 @@ export default function usePresentationMode(
|
|
|
|
|
|
const [presentationMode, setPresentationMode] = useState(false)
|
|
|
|
|
|
+ const nextPage = useCallback(() => {
|
|
|
+ if (page !== null) {
|
|
|
+ handlePageChange(page + 1)
|
|
|
+ }
|
|
|
+ }, [handlePageChange, page])
|
|
|
+
|
|
|
+ const previousPage = useCallback(() => {
|
|
|
+ if (page !== null) {
|
|
|
+ handlePageChange(page - 1)
|
|
|
+ }
|
|
|
+ }, [handlePageChange, page])
|
|
|
+
|
|
|
+ const clickListener = useCallback(
|
|
|
+ event => {
|
|
|
+ if (event.target.tagName === 'A') {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (event.shiftKey) {
|
|
|
+ previousPage()
|
|
|
+ } else {
|
|
|
+ nextPage()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ [nextPage, previousPage]
|
|
|
+ )
|
|
|
+
|
|
|
const arrowKeyListener = useCallback(
|
|
|
event => {
|
|
|
- if (page !== null) {
|
|
|
- switch (event.key) {
|
|
|
- case 'ArrowLeft':
|
|
|
- case 'ArrowUp':
|
|
|
- handlePageChange(page - 1)
|
|
|
- break
|
|
|
-
|
|
|
- case 'ArrowRight':
|
|
|
- case 'ArrowDown':
|
|
|
- handlePageChange(page + 1)
|
|
|
- break
|
|
|
-
|
|
|
- case ' ':
|
|
|
- if (event.shiftKey) {
|
|
|
- handlePageChange(page - 1)
|
|
|
- } else {
|
|
|
- handlePageChange(page + 1)
|
|
|
- }
|
|
|
- break
|
|
|
- }
|
|
|
+ switch (event.key) {
|
|
|
+ case 'ArrowLeft':
|
|
|
+ case 'ArrowUp':
|
|
|
+ previousPage()
|
|
|
+ break
|
|
|
+
|
|
|
+ case 'ArrowRight':
|
|
|
+ case 'ArrowDown':
|
|
|
+ nextPage()
|
|
|
+ break
|
|
|
+
|
|
|
+ case ' ':
|
|
|
+ if (event.shiftKey) {
|
|
|
+ previousPage()
|
|
|
+ } else {
|
|
|
+ nextPage()
|
|
|
+ }
|
|
|
+ break
|
|
|
}
|
|
|
},
|
|
|
- [page, handlePageChange]
|
|
|
+ [nextPage, previousPage]
|
|
|
)
|
|
|
|
|
|
useEffect(() => {
|
|
|
if (presentationMode) {
|
|
|
window.addEventListener('keydown', arrowKeyListener)
|
|
|
+ window.addEventListener('click', clickListener)
|
|
|
|
|
|
return () => {
|
|
|
window.removeEventListener('keydown', arrowKeyListener)
|
|
|
+ window.removeEventListener('click', clickListener)
|
|
|
}
|
|
|
}
|
|
|
- }, [presentationMode, arrowKeyListener])
|
|
|
+ }, [presentationMode, arrowKeyListener, clickListener])
|
|
|
|
|
|
const requestPresentationMode = useCallback(() => {
|
|
|
if (pdfJsWrapper) {
|