mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-02 16:32:23 -05:00
d5b3c10cb5
GitOrigin-RevId: af799f1a5b4945ad2acbb460806d559fae7416b9
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import { useCallback, useEffect, useRef } from 'react'
|
|
import { ImperativePanelHandle } from 'react-resizable-panels'
|
|
import useCollapsiblePanel from '@/features/ide-react/hooks/use-collapsible-panel'
|
|
import { useLayoutContext } from '@/shared/context/layout-context'
|
|
|
|
export const usePdfPane = () => {
|
|
const { view, pdfLayout, changeLayout, detachRole, reattach } =
|
|
useLayoutContext()
|
|
|
|
const pdfPanelRef = useRef<ImperativePanelHandle>(null)
|
|
const pdfIsOpen = pdfLayout === 'sideBySide' || view === 'pdf'
|
|
|
|
useCollapsiblePanel(pdfIsOpen, pdfPanelRef)
|
|
|
|
// close a detached PDF when the detacher PDF view opens
|
|
useEffect(() => {
|
|
if (pdfIsOpen && detachRole === 'detacher') {
|
|
reattach()
|
|
}
|
|
}, [detachRole, pdfIsOpen, reattach])
|
|
|
|
// triggered by a double-click on the resizer
|
|
const togglePdfPane = useCallback(() => {
|
|
if (pdfIsOpen) {
|
|
changeLayout('flat', 'editor')
|
|
} else {
|
|
changeLayout('sideBySide')
|
|
}
|
|
}, [changeLayout, pdfIsOpen])
|
|
|
|
// triggered by a click on the toggle button
|
|
const setPdfIsOpen = useCallback(
|
|
(value: boolean) => {
|
|
if (value) {
|
|
changeLayout('sideBySide')
|
|
} else {
|
|
changeLayout('flat', 'editor')
|
|
}
|
|
},
|
|
[changeLayout]
|
|
)
|
|
|
|
// triggered when the PDF pane becomes open
|
|
const handlePdfPaneExpand = useCallback(() => {
|
|
if (pdfLayout === 'flat' && view === 'editor') {
|
|
changeLayout('sideBySide', 'editor')
|
|
}
|
|
}, [changeLayout, pdfLayout, view])
|
|
|
|
// triggered when the PDF pane becomes closed (either by dragging or toggling)
|
|
const handlePdfPaneCollapse = useCallback(() => {
|
|
if (pdfLayout === 'sideBySide') {
|
|
changeLayout('flat', 'editor')
|
|
}
|
|
}, [changeLayout, pdfLayout])
|
|
|
|
return {
|
|
togglePdfPane,
|
|
handlePdfPaneExpand,
|
|
handlePdfPaneCollapse,
|
|
setPdfIsOpen,
|
|
pdfIsOpen,
|
|
pdfPanelRef,
|
|
}
|
|
}
|