editor-navigation-toolbar-root.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import React, { useCallback } from 'react'
  2. import PropTypes from 'prop-types'
  3. import ToolbarHeader from './toolbar-header'
  4. import { useEditorContext } from '../../../shared/context/editor-context'
  5. import { useChatContext } from '../../chat/context/chat-context'
  6. import { useLayoutContext } from '../../../shared/context/layout-context'
  7. const editorContextPropTypes = {
  8. cobranding: PropTypes.object,
  9. loading: PropTypes.bool,
  10. isRestrictedTokenMember: PropTypes.bool
  11. }
  12. const layoutContextPropTypes = {
  13. chatIsOpen: PropTypes.bool,
  14. setChatIsOpen: PropTypes.func.isRequired,
  15. reviewPanelOpen: PropTypes.bool,
  16. setReviewPanelOpen: PropTypes.func.isRequired,
  17. view: PropTypes.string,
  18. setView: PropTypes.func.isRequired,
  19. setLeftMenuShown: PropTypes.func.isRequired
  20. }
  21. function EditorNavigationToolbarRoot({ onlineUsersArray, openDoc }) {
  22. const { cobranding, loading, isRestrictedTokenMember } = useEditorContext(
  23. editorContextPropTypes
  24. )
  25. const {
  26. chatIsOpen,
  27. setChatIsOpen,
  28. reviewPanelOpen,
  29. setReviewPanelOpen,
  30. view,
  31. setView,
  32. setLeftMenuShown
  33. } = useLayoutContext(layoutContextPropTypes)
  34. const { resetUnreadMessageCount, unreadMessageCount } = useChatContext()
  35. const toggleChatOpen = useCallback(() => {
  36. if (!chatIsOpen) {
  37. resetUnreadMessageCount()
  38. }
  39. setChatIsOpen(value => !value)
  40. }, [chatIsOpen, setChatIsOpen, resetUnreadMessageCount])
  41. const toggleReviewPanelOpen = useCallback(
  42. () => setReviewPanelOpen(value => !value),
  43. [setReviewPanelOpen]
  44. )
  45. const toggleHistoryOpen = useCallback(() => {
  46. setView(view === 'history' ? 'editor' : 'history')
  47. }, [view, setView])
  48. const onShowLeftMenuClick = useCallback(
  49. () => setLeftMenuShown(value => !value),
  50. [setLeftMenuShown]
  51. )
  52. function goToUser(user) {
  53. if (user.doc && typeof user.row === 'number') {
  54. openDoc(user.doc, { gotoLine: user.row + 1 })
  55. }
  56. }
  57. // using {display: 'none'} as 1:1 migration from Angular's ng-hide. Using
  58. // `loading ? null : <ToolbarHeader/>` causes UI glitches
  59. return (
  60. <ToolbarHeader
  61. style={loading ? { display: 'none' } : {}}
  62. cobranding={cobranding}
  63. onShowLeftMenuClick={onShowLeftMenuClick}
  64. chatIsOpen={chatIsOpen}
  65. unreadMessageCount={unreadMessageCount}
  66. toggleChatOpen={toggleChatOpen}
  67. reviewPanelOpen={reviewPanelOpen}
  68. toggleReviewPanelOpen={toggleReviewPanelOpen}
  69. historyIsOpen={view === 'history'}
  70. toggleHistoryOpen={toggleHistoryOpen}
  71. onlineUsers={onlineUsersArray}
  72. goToUser={goToUser}
  73. isRestrictedTokenMember={isRestrictedTokenMember}
  74. />
  75. )
  76. }
  77. EditorNavigationToolbarRoot.propTypes = {
  78. onlineUsersArray: PropTypes.array.isRequired,
  79. openDoc: PropTypes.func.isRequired
  80. }
  81. export default EditorNavigationToolbarRoot