current-file-container.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { memo, useMemo } from 'react'
  2. import Container from './container'
  3. import Toolbar from './toolbar/toolbar'
  4. import Nav from './nav'
  5. import Toggler from './toggler'
  6. import PositionedEntries from './positioned-entries'
  7. import { useReviewPanelValueContext } from '../../context/review-panel/review-panel-context'
  8. import useCodeMirrorContentHeight from '../../hooks/use-codemirror-content-height'
  9. import { ReviewPanelEntry } from '../../../../../../types/review-panel/entry'
  10. import { ReviewPanelDocEntries } from '../../../../../../types/review-panel/review-panel'
  11. import Entry from './entry'
  12. import EmptyState from './empty-state'
  13. import { useFeatureFlag } from '@/shared/context/split-test-context'
  14. function CurrentFileContainer() {
  15. const { entries, openDocId } = useReviewPanelValueContext()
  16. const contentHeight = useCodeMirrorContentHeight()
  17. const currentDocEntries =
  18. openDocId && openDocId in entries ? entries[openDocId] : undefined
  19. const objectEntries = useMemo(() => {
  20. return Object.entries(currentDocEntries || {}) as Array<
  21. [keyof ReviewPanelDocEntries, ReviewPanelEntry]
  22. >
  23. }, [currentDocEntries])
  24. const enableEmptyState = useFeatureFlag('review-panel-redesign')
  25. const showEmptyState =
  26. enableEmptyState &&
  27. objectEntries.filter(
  28. ([key]) => key !== 'add-comment' && key !== 'bulk-actions'
  29. ).length === 0
  30. return (
  31. <Container className="rp-current-file-container">
  32. <div className="review-panel-tools">
  33. <Toolbar />
  34. {showEmptyState && <EmptyState />}
  35. <Nav />
  36. </div>
  37. <Toggler />
  38. <div
  39. id="review-panel-current-file"
  40. role="tabpanel"
  41. tabIndex={0}
  42. aria-labelledby="review-panel-tab-current-file"
  43. >
  44. <PositionedEntries
  45. entries={objectEntries}
  46. contentHeight={contentHeight}
  47. >
  48. {openDocId &&
  49. objectEntries.map(([id, entry]) => {
  50. return <Entry key={id} id={id} entry={entry} />
  51. })}
  52. </PositionedEntries>
  53. </div>
  54. </Container>
  55. )
  56. }
  57. export default memo(CurrentFileContainer)