use-review-panel-layout.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { useRangesContext } from '../context/ranges-context'
  2. import { useThreadsContext } from '@/features/review-panel/context/threads-context'
  3. import { hasActiveRange } from '@/features/review-panel/utils/has-active-range'
  4. import { useLayoutContext } from '@/shared/context/layout-context'
  5. import { useRailContext } from '@/features/ide-react/context/rail-context'
  6. import { useCallback } from 'react'
  7. export default function useReviewPanelLayout(): {
  8. showPanel: boolean
  9. showHeader: boolean
  10. mini: boolean
  11. openReviewPanel: () => void
  12. closeReviewPanel: () => void
  13. } {
  14. const ranges = useRangesContext()
  15. const threads = useThreadsContext()
  16. const {
  17. selectedTab: selectedRailTab,
  18. isOpen: railIsOpen,
  19. openTab: openRailTab,
  20. setIsOpen: setRailIsOpen,
  21. } = useRailContext()
  22. const { focusMode } = useLayoutContext()
  23. const reviewPanelOpen = selectedRailTab === 'review-panel' && railIsOpen
  24. const openReviewPanel = useCallback(() => {
  25. openRailTab('review-panel')
  26. }, [openRailTab])
  27. const closeReviewPanel = useCallback(() => {
  28. setRailIsOpen(false)
  29. }, [setRailIsOpen])
  30. const hasCommentOrChange = hasActiveRange(ranges, threads)
  31. const showPanel = focusMode ? false : reviewPanelOpen || !!hasCommentOrChange
  32. const mini = !reviewPanelOpen
  33. const showHeader = showPanel && !mini
  34. return { showPanel, showHeader, mini, openReviewPanel, closeReviewPanel }
  35. }