overview-container.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import Container from './container'
  2. import Toggler from './toggler'
  3. import Toolbar from './toolbar/toolbar'
  4. import Nav from './nav'
  5. import Icon from '../../../../shared/components/icon'
  6. import OverviewFile from './overview-file'
  7. import { useReviewPanelValueContext } from '../../context/review-panel/review-panel-context'
  8. import { useFileTreeData } from '@/shared/context/file-tree-data-context'
  9. import { memo, useMemo } from 'react'
  10. import EmptyState from './empty-state'
  11. import { useFeatureFlag } from '@/shared/context/split-test-context'
  12. function OverviewContainer() {
  13. const { entries } = useReviewPanelValueContext()
  14. const { isOverviewLoading } = useReviewPanelValueContext()
  15. const { docs } = useFileTreeData()
  16. const entryCount = useMemo(() => {
  17. return docs
  18. ?.map(doc => {
  19. const docEntries = entries[doc.doc.id] ?? {}
  20. return Object.keys(docEntries).filter(
  21. key => key !== 'add-comment' && key !== 'bulk-actions'
  22. ).length
  23. })
  24. .reduce((acc, curr) => acc + curr, 0)
  25. }, [docs, entries])
  26. const enableEmptyState = useFeatureFlag('review-panel-redesign')
  27. return (
  28. <Container>
  29. <Toggler />
  30. {enableEmptyState && entryCount === 0 && <EmptyState />}
  31. <Toolbar />
  32. <div
  33. className="rp-entry-list"
  34. id="review-panel-overview"
  35. role="tabpanel"
  36. tabIndex={0}
  37. aria-labelledby="review-panel-tab-overview"
  38. >
  39. {isOverviewLoading ? (
  40. <div className="rp-loading">
  41. <Icon type="spinner" spin />
  42. </div>
  43. ) : (
  44. docs?.map(doc => (
  45. <OverviewFile
  46. key={doc.doc.id}
  47. docId={doc.doc.id}
  48. docPath={doc.path}
  49. />
  50. ))
  51. )}
  52. </div>
  53. <Nav />
  54. </Container>
  55. )
  56. }
  57. export default memo(OverviewContainer)