toolbar-header.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. 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. projectName,
  30. renameProject,
  31. openShareModal,
  32. pdfViewIsOpen,
  33. pdfButtonIsVisible,
  34. togglePdfView,
  35. }) {
  36. return (
  37. <header className="toolbar toolbar-header toolbar-with-labels">
  38. <div className="toolbar-left">
  39. <MenuButton onClick={onShowLeftMenuClick} />
  40. {cobranding ? <CobrandingLogo {...cobranding} /> : null}
  41. <BackToProjectsButton />
  42. </div>
  43. {pdfButtonIsVisible && (
  44. <PdfToggleButton
  45. onClick={togglePdfView}
  46. pdfViewIsOpen={pdfViewIsOpen}
  47. />
  48. )}
  49. <ProjectNameEditableLabel
  50. className="toolbar-center"
  51. projectName={projectName}
  52. userIsAdmin
  53. onChange={renameProject}
  54. />
  55. <div className="toolbar-right">
  56. <OnlineUsersWidget onlineUsers={onlineUsers} goToUser={goToUser} />
  57. {!isRestrictedTokenMember && (
  58. <TrackChangesToggleButton
  59. onClick={toggleReviewPanelOpen}
  60. disabled={historyIsOpen}
  61. trackChangesIsOpen={reviewPanelOpen}
  62. />
  63. )}
  64. <ShareProjectButton onClick={openShareModal} />
  65. {PublishButton && <PublishButton cobranding={cobranding} />}
  66. {!isRestrictedTokenMember && (
  67. <>
  68. <HistoryToggleButton
  69. historyIsOpen={historyIsOpen}
  70. onClick={toggleHistoryOpen}
  71. />
  72. <ChatToggleButton
  73. chatIsOpen={chatIsOpen}
  74. onClick={toggleChatOpen}
  75. unreadMessageCount={unreadMessageCount}
  76. />
  77. </>
  78. )}
  79. </div>
  80. </header>
  81. )
  82. }
  83. ToolbarHeader.propTypes = {
  84. onShowLeftMenuClick: PropTypes.func.isRequired,
  85. cobranding: PropTypes.object,
  86. chatIsOpen: PropTypes.bool,
  87. toggleChatOpen: PropTypes.func.isRequired,
  88. reviewPanelOpen: PropTypes.bool,
  89. toggleReviewPanelOpen: PropTypes.func.isRequired,
  90. historyIsOpen: PropTypes.bool,
  91. toggleHistoryOpen: PropTypes.func.isRequired,
  92. unreadMessageCount: PropTypes.number.isRequired,
  93. onlineUsers: PropTypes.array.isRequired,
  94. goToUser: PropTypes.func.isRequired,
  95. isRestrictedTokenMember: PropTypes.bool,
  96. projectName: PropTypes.string.isRequired,
  97. renameProject: PropTypes.func.isRequired,
  98. openShareModal: PropTypes.func.isRequired,
  99. pdfViewIsOpen: PropTypes.bool,
  100. pdfButtonIsVisible: PropTypes.bool,
  101. togglePdfView: PropTypes.func.isRequired,
  102. }
  103. export default ToolbarHeader