toolbar-header.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import { useTranslation } from 'react-i18next'
  4. import MenuButton from './menu-button'
  5. import CobrandingLogo from './cobranding-logo'
  6. import BackToProjectsButton from './back-to-projects-button'
  7. import ChatToggleButton from './chat-toggle-button'
  8. import LayoutDropdownButton from './layout-dropdown-button'
  9. import OnlineUsersWidget from './online-users-widget'
  10. import ProjectNameEditableLabel from './project-name-editable-label'
  11. import TrackChangesToggleButton from './track-changes-toggle-button'
  12. import HistoryToggleButton from './history-toggle-button'
  13. import ShareProjectButton from './share-project-button'
  14. import PdfToggleButton from './pdf-toggle-button'
  15. import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
  16. const [publishModalModules] = importOverleafModules('publishModal')
  17. const PublishButton = publishModalModules?.import.default
  18. const ToolbarHeader = React.memo(function ToolbarHeader({
  19. cobranding,
  20. onShowLeftMenuClick,
  21. chatIsOpen,
  22. toggleChatOpen,
  23. reviewPanelOpen,
  24. toggleReviewPanelOpen,
  25. historyIsOpen,
  26. toggleHistoryOpen,
  27. unreadMessageCount,
  28. onlineUsers,
  29. goToUser,
  30. isRestrictedTokenMember,
  31. hasPublishPermissions,
  32. projectName,
  33. renameProject,
  34. hasRenamePermissions,
  35. openShareModal,
  36. pdfLayout,
  37. pdfViewIsOpen,
  38. pdfButtonIsVisible,
  39. togglePdfView,
  40. trackChangesVisible,
  41. view,
  42. }) {
  43. const { t } = useTranslation()
  44. const shouldDisplayPublishButton = hasPublishPermissions && PublishButton
  45. const shouldDisplayTrackChangesButton =
  46. trackChangesVisible && !isRestrictedTokenMember
  47. return (
  48. <header
  49. className="toolbar toolbar-header toolbar-with-labels"
  50. role="navigation"
  51. aria-label={t('project_layout_sharing_submission')}
  52. >
  53. <div className="toolbar-left">
  54. <MenuButton onClick={onShowLeftMenuClick} />
  55. {cobranding && cobranding.logoImgUrl && (
  56. <CobrandingLogo {...cobranding} />
  57. )}
  58. <BackToProjectsButton />
  59. </div>
  60. {!window.showPdfDetach && pdfButtonIsVisible && (
  61. <PdfToggleButton
  62. onClick={togglePdfView}
  63. pdfViewIsOpen={pdfViewIsOpen}
  64. />
  65. )}
  66. <ProjectNameEditableLabel
  67. className="toolbar-center"
  68. projectName={projectName}
  69. hasRenamePermissions={hasRenamePermissions}
  70. onChange={renameProject}
  71. />
  72. <div className="toolbar-right">
  73. <OnlineUsersWidget onlineUsers={onlineUsers} goToUser={goToUser} />
  74. {shouldDisplayTrackChangesButton && (
  75. <TrackChangesToggleButton
  76. onClick={toggleReviewPanelOpen}
  77. disabled={historyIsOpen}
  78. trackChangesIsOpen={reviewPanelOpen}
  79. />
  80. )}
  81. <ShareProjectButton onClick={openShareModal} />
  82. {shouldDisplayPublishButton && (
  83. <PublishButton cobranding={cobranding} />
  84. )}
  85. {!isRestrictedTokenMember && (
  86. <HistoryToggleButton
  87. historyIsOpen={historyIsOpen}
  88. onClick={toggleHistoryOpen}
  89. />
  90. )}
  91. {window.showPdfDetach && <LayoutDropdownButton />}
  92. {!isRestrictedTokenMember && (
  93. <ChatToggleButton
  94. chatIsOpen={chatIsOpen}
  95. onClick={toggleChatOpen}
  96. unreadMessageCount={unreadMessageCount}
  97. />
  98. )}
  99. </div>
  100. </header>
  101. )
  102. })
  103. ToolbarHeader.propTypes = {
  104. onShowLeftMenuClick: PropTypes.func.isRequired,
  105. cobranding: PropTypes.object,
  106. chatIsOpen: PropTypes.bool,
  107. toggleChatOpen: PropTypes.func.isRequired,
  108. reviewPanelOpen: PropTypes.bool,
  109. toggleReviewPanelOpen: PropTypes.func.isRequired,
  110. historyIsOpen: PropTypes.bool,
  111. toggleHistoryOpen: PropTypes.func.isRequired,
  112. unreadMessageCount: PropTypes.number.isRequired,
  113. onlineUsers: PropTypes.array.isRequired,
  114. goToUser: PropTypes.func.isRequired,
  115. isRestrictedTokenMember: PropTypes.bool,
  116. hasPublishPermissions: PropTypes.bool,
  117. projectName: PropTypes.string.isRequired,
  118. renameProject: PropTypes.func.isRequired,
  119. hasRenamePermissions: PropTypes.bool,
  120. openShareModal: PropTypes.func.isRequired,
  121. pdfLayout: PropTypes.string.isRequired,
  122. pdfViewIsOpen: PropTypes.bool,
  123. pdfButtonIsVisible: PropTypes.bool,
  124. togglePdfView: PropTypes.func.isRequired,
  125. trackChangesVisible: PropTypes.bool,
  126. view: PropTypes.string,
  127. }
  128. export default ToolbarHeader