current-file-container.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. function CurrentFileContainer() {
  13. const { entries, openDocId } = useReviewPanelValueContext()
  14. const contentHeight = useCodeMirrorContentHeight()
  15. const currentDocEntries =
  16. openDocId && openDocId in entries ? entries[openDocId] : undefined
  17. const objectEntries = useMemo(() => {
  18. return Object.entries(currentDocEntries || {}) as Array<
  19. [keyof ReviewPanelDocEntries, ReviewPanelEntry]
  20. >
  21. }, [currentDocEntries])
  22. return (
  23. <Container className="rp-current-file-container">
  24. <div className="review-panel-tools">
  25. <Toolbar />
  26. <Nav />
  27. </div>
  28. <Toggler />
  29. <div
  30. id="review-panel-current-file"
  31. role="tabpanel"
  32. tabIndex={0}
  33. aria-labelledby="review-panel-tab-current-file"
  34. >
  35. <PositionedEntries
  36. entries={objectEntries}
  37. contentHeight={contentHeight}
  38. >
  39. {openDocId &&
  40. objectEntries.map(([id, entry]) => {
  41. return <Entry key={id} id={id} entry={entry} />
  42. })}
  43. </PositionedEntries>
  44. </div>
  45. </Container>
  46. )
  47. }
  48. export default memo(CurrentFileContainer)