overleaf-cep/services/web/frontend/js/features/review-panel-new/hooks/use-review-panel-layout.ts
David 32a8142f9c Merge pull request #25211 from overleaf/dp-review-panel-mini-click
Fix bug where clicking on comment/change in mini panel would not open full panel in new editor

GitOrigin-RevId: e7db345e01b881255a1651b37dec637f04692f3e
2025-05-02 08:05:43 +00:00

55 lines
1.8 KiB
TypeScript

import { useLayoutContext } from '@/shared/context/layout-context'
import { useRangesContext } from '../context/ranges-context'
import { useThreadsContext } from '@/features/review-panel-new/context/threads-context'
import { hasActiveRange } from '@/features/review-panel-new/utils/has-active-range'
import { useRailContext } from '@/features/ide-redesign/contexts/rail-context'
import { useIsNewEditorEnabled } from '@/features/ide-redesign/utils/new-editor-utils'
import { useCallback } from 'react'
export default function useReviewPanelLayout(): {
showPanel: boolean
showHeader: boolean
mini: boolean
openReviewPanel: () => void
closeReviewPanel: () => void
} {
const ranges = useRangesContext()
const threads = useThreadsContext()
const {
selectedTab: selectedRailTab,
isOpen: railIsOpen,
openTab: openRailTab,
setIsOpen: setRailIsOpen,
} = useRailContext()
const { reviewPanelOpen: reviewPanelOpenOldEditor, setReviewPanelOpen } =
useLayoutContext()
const newEditor = useIsNewEditorEnabled()
const reviewPanelOpen = newEditor
? selectedRailTab === 'review-panel' && railIsOpen
: reviewPanelOpenOldEditor
const openReviewPanel = useCallback(() => {
if (newEditor) {
openRailTab('review-panel')
} else {
setReviewPanelOpen(true)
}
}, [newEditor, setReviewPanelOpen, openRailTab])
const closeReviewPanel = useCallback(() => {
if (newEditor) {
setRailIsOpen(false)
} else {
setReviewPanelOpen(false)
}
}, [newEditor, setReviewPanelOpen, setRailIsOpen])
const hasCommentOrChange = hasActiveRange(ranges, threads)
const showPanel = reviewPanelOpen || !!hasCommentOrChange
const mini = !reviewPanelOpen
const showHeader = showPanel && !mini
return { showPanel, showHeader, mini, openReviewPanel, closeReviewPanel }
}