toolbar.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { useTranslation } from 'react-i18next'
  2. import { ToolbarMenuBar } from './menu-bar'
  3. import { ToolbarProjectTitle } from './project-title'
  4. import { OnlineUsers } from './online-users'
  5. import ShareProjectButton from './share-project-button'
  6. import ChangeLayoutButton from './change-layout-button'
  7. import ShowHistoryButton from './show-history-button'
  8. import { LabsActions } from './labs-actions'
  9. import { useLayoutContext } from '@/shared/context/layout-context'
  10. import BackToEditorButton from '@/features/editor-navigation-toolbar/components/back-to-editor-button'
  11. import { useCallback } from 'react'
  12. import * as eventTracking from '../../../../infrastructure/event-tracking'
  13. import { ToolbarLogos } from './logos'
  14. import { useEditorContext } from '@/shared/context/editor-context'
  15. import importOverleafModules from '../../../../../macros/import-overleaf-module.macro'
  16. import UpgradeButton from './upgrade-button'
  17. import getMeta from '@/utils/meta'
  18. import { useIdeReactContext } from '@/features/ide-react/context/ide-react-context'
  19. import { isNewEditorInBeta } from '../../utils/new-editor-utils'
  20. import { BetaActions } from './beta-actions'
  21. const [publishModalModules] = importOverleafModules('publishModal')
  22. const SubmitProjectButton = publishModalModules?.import.NewPublishToolbarButton
  23. export const Toolbar = () => {
  24. const { view, restoreView } = useLayoutContext()
  25. const { cobranding } = useEditorContext()
  26. const { permissionsLevel } = useIdeReactContext()
  27. const { t } = useTranslation()
  28. const shouldDisplaySubmitButton =
  29. (permissionsLevel === 'owner' || permissionsLevel === 'readAndWrite') &&
  30. SubmitProjectButton
  31. const newEditorBeta = isNewEditorInBeta()
  32. const handleBackToEditorClick = useCallback(() => {
  33. eventTracking.sendMB('navigation-clicked-history', { action: 'close' })
  34. restoreView()
  35. }, [restoreView])
  36. if (view === 'history') {
  37. return (
  38. <nav className="ide-redesign-toolbar" aria-label={t('project_actions')}>
  39. <div className="d-flex align-items-center">
  40. <BackToEditorButton onClick={handleBackToEditorClick} />
  41. </div>
  42. <ToolbarProjectTitle />
  43. <div /> {/* Empty div used for spacing */}
  44. </nav>
  45. )
  46. }
  47. return (
  48. <nav className="ide-redesign-toolbar" aria-label={t('project_actions')}>
  49. <div className="ide-redesign-toolbar-menu">
  50. <ToolbarLogos cobranding={cobranding} />
  51. <ToolbarMenuBar />
  52. </div>
  53. <ToolbarProjectTitle />
  54. <div className="ide-redesign-toolbar-actions">
  55. {newEditorBeta ? <BetaActions /> : <LabsActions />}
  56. <OnlineUsers />
  57. <ShowHistoryButton />
  58. <ChangeLayoutButton />
  59. {shouldDisplaySubmitButton && cobranding && (
  60. <SubmitProjectButton cobranding={cobranding} />
  61. )}
  62. <ShareProjectButton />
  63. {getMeta('ol-showUpgradePrompt') && <UpgradeButton />}
  64. </div>
  65. </nav>
  66. )
  67. }