bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/presentation/presentation-menu/container.jsx

68 lines
2.5 KiB
React
Raw Normal View History

import React from 'react';
import { useContext } from 'react';
import PropTypes from 'prop-types';
import { withTracker } from 'meteor/react-meteor-data';
import PresentationMenu from './component';
import FullscreenService from '/imports/ui/components/common/fullscreen-button/service';
import Auth from '/imports/ui/services/auth';
import Meetings from '/imports/api/meetings';
import { layoutSelect, layoutDispatch } from '/imports/ui/components/layout/context';
2023-03-15 12:43:21 +08:00
import WhiteboardService from '/imports/ui/components/whiteboard/service';
import UserService from '/imports/ui/components/user-list/service';
2023-06-07 20:35:56 +08:00
import { isSnapshotOfCurrentSlideEnabled } from '/imports/ui/services/features';
import { PluginsContext } from '/imports/ui/components/components-data/plugin-context/context';
const PresentationMenuContainer = (props) => {
const fullscreen = layoutSelect((i) => i.fullscreen);
const { element: currentElement, group: currentGroup } = fullscreen;
const layoutContextDispatch = layoutDispatch();
const { elementId } = props;
const isFullscreen = currentElement === elementId;
2022-06-17 00:32:27 +08:00
const isRTL = layoutSelect((i) => i.isRTL);
const { pluginsProvidedAggregatedState } = useContext(PluginsContext);
let presentationDropdownItems = [];
if (pluginsProvidedAggregatedState.presentationDropdownItems) {
presentationDropdownItems = [
...pluginsProvidedAggregatedState.presentationDropdownItems,
];
}
return (
<PresentationMenu
{...props}
{...{
currentElement,
currentGroup,
isFullscreen,
layoutContextDispatch,
2022-06-17 00:32:27 +08:00
isRTL,
presentationDropdownItems,
}}
/>
);
};
export default withTracker((props) => {
const handleToggleFullscreen = (ref) => FullscreenService.toggleFullScreen(ref);
const isIphone = !!(navigator.userAgent.match(/iPhone/i));
const meetingId = Auth.meetingID;
const meetingObject = Meetings.findOne({ meetingId }, { fields: { 'meetingProp.name': 1 } });
2023-03-15 12:43:21 +08:00
const hasWBAccess = WhiteboardService.hasMultiUserAccess(WhiteboardService.getCurrentWhiteboardId(), Auth.userID);
const amIPresenter = UserService.isUserPresenter(Auth.userID);
return {
...props,
2023-06-07 20:35:56 +08:00
allowSnapshotOfCurrentSlide: isSnapshotOfCurrentSlideEnabled(),
handleToggleFullscreen,
isIphone,
isDropdownOpen: Session.get('dropdownOpen'),
meetingName: meetingObject.meetingProp.name,
2023-03-15 12:43:21 +08:00
hasWBAccess,
amIPresenter,
};
})(PresentationMenuContainer);
PresentationMenuContainer.propTypes = {
elementId: PropTypes.string.isRequired,
};