toolbar-header.js 3.8 KB

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