toolbar.tsx 2.4 KB

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