toolbar.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. import { useIdeReactContext } from '@/features/ide-react/context/ide-react-context'
  18. const [publishModalModules] = importOverleafModules('publishModal')
  19. const SubmitProjectButton = publishModalModules?.import.NewPublishToolbarButton
  20. export const Toolbar = () => {
  21. const { view, restoreView } = useLayoutContext()
  22. const { cobranding } = useEditorContext()
  23. const { permissionsLevel } = useIdeReactContext()
  24. const shouldDisplaySubmitButton =
  25. (permissionsLevel === 'owner' || permissionsLevel === 'readAndWrite') &&
  26. SubmitProjectButton
  27. const handleBackToEditorClick = useCallback(() => {
  28. eventTracking.sendMB('navigation-clicked-history', { action: 'close' })
  29. restoreView()
  30. }, [restoreView])
  31. if (view === 'history') {
  32. return (
  33. <div className="ide-redesign-toolbar">
  34. <div className="d-flex align-items-center">
  35. <BackToEditorButton onClick={handleBackToEditorClick} />
  36. </div>
  37. <ToolbarProjectTitle />
  38. <div /> {/* Empty div used for spacing */}
  39. </div>
  40. )
  41. }
  42. return (
  43. <div className="ide-redesign-toolbar">
  44. <div className="ide-redesign-toolbar-menu">
  45. <ToolbarLogos cobranding={cobranding} />
  46. <ToolbarMenuBar />
  47. </div>
  48. <ToolbarProjectTitle />
  49. <div className="ide-redesign-toolbar-actions">
  50. <LabsActions />
  51. <OnlineUsers />
  52. <ShowHistoryButton />
  53. <ChangeLayoutButton />
  54. {shouldDisplaySubmitButton && cobranding && (
  55. <SubmitProjectButton cobranding={cobranding} />
  56. )}
  57. <ShareProjectButton />
  58. {getMeta('ol-showUpgradePrompt') && <UpgradeButton />}
  59. </div>
  60. </div>
  61. )
  62. }