diff --git a/bigbluebutton-html5/imports/ui/components/app/component.jsx b/bigbluebutton-html5/imports/ui/components/app/component.jsx index 890c22ec24..2bc31a8120 100644 --- a/bigbluebutton-html5/imports/ui/components/app/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/app/component.jsx @@ -37,7 +37,6 @@ import SidebarNavigationContainer from '../sidebar-navigation/container'; import SidebarContentContainer from '../sidebar-content/container'; import PluginsEngineManager from '../plugins-engine/manager'; import { getSettingsSingletonInstance } from '/imports/ui/services/settings'; -import { registerTitleView } from '/imports/utils/dom-utils'; import Notifications from '../notifications/component'; import GlobalStyles from '/imports/ui/stylesheets/styled-components/globalStyles'; import ActionsBarContainer from '../actions-bar/container'; @@ -162,8 +161,6 @@ class App extends Component { const { browserName } = browserInfo; const { osName } = deviceInfo; - registerTitleView(intl.formatMessage(intlMessages.defaultViewLabel)); - layoutContextDispatch({ type: ACTIONS.SET_IS_RTL, value: isRTL, diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/container.jsx b/bigbluebutton-html5/imports/ui/components/nav-bar/container.jsx index f9bdf9e789..b3f8c96ff3 100755 --- a/bigbluebutton-html5/imports/ui/components/nav-bar/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/nav-bar/container.jsx @@ -1,8 +1,6 @@ import React, { useContext } from 'react'; +import { defineMessages, useIntl } from 'react-intl'; import { Meteor } from 'meteor/meteor'; -import { withTracker } from 'meteor/react-meteor-data'; -import Meetings from '/imports/api/meetings'; -import Breakouts from '/imports/api/breakouts'; import Auth from '/imports/ui/services/auth'; import getFromUserSettings from '/imports/ui/services/users-settings'; import NavBar from './component'; @@ -13,10 +11,20 @@ import useCurrentUser from '/imports/ui/core/hooks/useCurrentUser'; import useChat from '/imports/ui/core/hooks/useChat'; import useHasUnreadNotes from '../notes/hooks/useHasUnreadNotes'; import { useShortcut } from '../../core/hooks/useShortcut'; +import useMeeting from '../../core/hooks/useMeeting'; +import { registerTitleView } from '/imports/utils/dom-utils'; + +const intlMessages = defineMessages({ + defaultViewLabel: { + id: 'app.title.defaultViewLabel', + description: 'view name appended to document title', + }, +}); const NavBarContainer = ({ children, ...props }) => { const { pluginsExtensibleAreasAggregatedState } = useContext(PluginsContext); const unread = useHasUnreadNotes(); + const intl = useIntl(); const sidebarContent = layoutSelectInput((i) => i.sidebarContent); const sidebarNavigation = layoutSelectInput((i) => i.sidebarNavigation); @@ -47,6 +55,41 @@ const NavBarContainer = ({ children, ...props }) => { const hideNavBar = getFromUserSettings('bbb_hide_nav_bar', false); + const PUBLIC_CONFIG = window.meetingClientSettings.public; + const CLIENT_TITLE = getFromUserSettings('bbb_client_title', PUBLIC_CONFIG.app.clientTitle); + const IS_DIRECT_LEAVE_BUTTON_ENABLED = getFromUserSettings( + 'bbb_direct_leave_button', + PUBLIC_CONFIG.app.defaultSettings.application.directLeaveButton, + ); + + let meetingTitle; + let breakoutNum; + let breakoutName; + let meetingName; + + const { data: meeting } = useMeeting((m) => ({ + name: m.name, + meetingId: m.meetingId, + breakoutPolicies: { + sequence: m.breakoutPolicies.sequence, + }, + })); + + if (meeting) { + meetingTitle = meeting.name; + const titleString = `${CLIENT_TITLE} - ${meetingTitle}`; + document.title = titleString; + registerTitleView(intl.formatMessage(intlMessages.defaultViewLabel)); + + if (meeting.breakoutPolicies) { + breakoutNum = meeting.breakoutPolicies.sequence; + if (breakoutNum > 0) { + breakoutName = meetingTitle; + meetingName = meetingTitle.replace(`(${breakoutName})`, '').trim(); + } + } + } + if (hideNavBar || navBar.display === false) return null; let pluginNavBarItems = []; @@ -71,6 +114,13 @@ const NavBarContainer = ({ children, ...props }) => { currentUserId: Auth.userID, pluginNavBarItems, shortcuts: toggleUserList, + meetingId: meeting.meetingId, + presentationTitle: meetingTitle, + breakoutNum, + breakoutName, + meetingName, + isDirectLeaveButtonEnabled: IS_DIRECT_LEAVE_BUTTON_ENABLED, + isMeteorConnected: Meteor.status().connected, ...props, }} style={{ ...navBar }} @@ -80,49 +130,4 @@ const NavBarContainer = ({ children, ...props }) => { ); }; -export default withTracker(() => { - const PUBLIC_CONFIG = window.meetingClientSettings.public; - - const CLIENT_TITLE = getFromUserSettings('bbb_client_title', PUBLIC_CONFIG.app.clientTitle); - - let meetingTitle, breakoutNum, breakoutName, meetingName; - const meetingId = Auth.meetingID; - const meetingObject = Meetings.findOne({ - meetingId, - }, { fields: { name: 1, 'breakoutPolicies.sequence': 1, meetingId: 1 } }); - - if (meetingObject != null) { - meetingTitle = meetingObject.name; - let titleString = `${CLIENT_TITLE} - ${meetingTitle}`; - document.title = titleString; - - if (meetingObject.breakoutPolicies) { - breakoutNum = meetingObject.breakoutPolicies.sequence; - if (breakoutNum > 0) { - const breakoutObject = Breakouts.findOne({ - breakoutId: meetingObject.meetingId, - }, { fields: { shortName: 1 } }); - if (breakoutObject) { - breakoutName = breakoutObject.shortName; - meetingName = meetingTitle.replace(`(${breakoutName})`, '').trim(); - } - } - } - } - - const IS_DIRECT_LEAVE_BUTTON_ENABLED = getFromUserSettings( - 'bbb_direct_leave_button', - PUBLIC_CONFIG.app.defaultSettings.application.directLeaveButton, - ); - - return { - currentUserId: Auth.userID, - meetingId, - presentationTitle: meetingTitle, - breakoutNum, - breakoutName, - meetingName, - isDirectLeaveButtonEnabled: IS_DIRECT_LEAVE_BUTTON_ENABLED, - isMeteorConnected: Meteor.status().connected, - }; -})(NavBarContainer); +export default NavBarContainer;