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

89 lines
3.0 KiB
React
Raw Normal View History

import React, { useContext, useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import PresentationMenu from './component';
import FullscreenService from '/imports/ui/components/common/fullscreen-button/service';
import Auth from '/imports/ui/services/auth';
import { layoutSelect, layoutDispatch } from '/imports/ui/components/layout/context';
2024-06-14 21:30:48 +08:00
import { useIsSnapshotOfCurrentSlideEnabled } from '/imports/ui/services/features';
import { PluginsContext } from '/imports/ui/components/components-data/plugin-context/context';
import {
CURRENT_PAGE_WRITERS_SUBSCRIPTION,
} from '/imports/ui/components/whiteboard/queries';
2023-10-13 02:05:49 +08:00
import useMeeting from '/imports/ui/core/hooks/useMeeting';
import {
persistShape,
} from '/imports/ui/components/whiteboard/service';
import { getSettingsSingletonInstance } from '/imports/ui/services/settings';
import useDeduplicatedSubscription from '/imports/ui/core/hooks/useDeduplicatedSubscription';
const PresentationMenuContainer = (props) => {
const fullscreen = layoutSelect((i) => i.fullscreen);
const { element: currentElement, group: currentGroup } = fullscreen;
const layoutContextDispatch = layoutDispatch();
2024-06-18 02:20:48 +08:00
const { elementId, whiteboardId } = props;
const isFullscreen = currentElement === elementId;
const Settings = getSettingsSingletonInstance();
const { isRTL } = Settings.application;
const { pluginsExtensibleAreasAggregatedState } = useContext(PluginsContext);
let presentationDropdownItems = [];
if (pluginsExtensibleAreasAggregatedState.presentationDropdownItems) {
presentationDropdownItems = [
...pluginsExtensibleAreasAggregatedState.presentationDropdownItems,
];
}
const [whiteboardWriters, setWhiteboardWriters] = useState([]);
useEffect(() => {
const fetchData = async () => {
const { data } = await useDeduplicatedSubscription(
CURRENT_PAGE_WRITERS_SUBSCRIPTION,
{
variables: { pageId: whiteboardId },
skip: !whiteboardId,
},
);
setWhiteboardWriters(data?.pres_page_writers || []);
};
fetchData();
}, [whiteboardId]);
const hasWBAccess = whiteboardWriters?.some((writer) => writer.userId === Auth.userID);
2023-10-13 02:05:49 +08:00
const meetingInfo = useMeeting((meeting) => ({
name: meeting?.name,
}));
const handleToggleFullscreen = (ref) => FullscreenService.toggleFullScreen(ref);
const isIphone = !!(navigator.userAgent.match(/iPhone/i));
2024-06-14 21:30:48 +08:00
const allowSnapshotOfCurrentSlide = useIsSnapshotOfCurrentSlideEnabled();
2023-10-13 02:05:49 +08:00
return (
<PresentationMenu
{...props}
{...{
currentElement,
currentGroup,
isFullscreen,
layoutContextDispatch,
2022-06-17 00:32:27 +08:00
isRTL,
presentationDropdownItems,
hasWBAccess,
2023-10-13 02:05:49 +08:00
meetingName: meetingInfo?.name,
handleToggleFullscreen,
isIphone,
2024-06-14 21:30:48 +08:00
allowSnapshotOfCurrentSlide,
persistShape,
whiteboardWriters,
}}
/>
);
};
2023-10-13 02:05:49 +08:00
export default PresentationMenuContainer;
PresentationMenuContainer.propTypes = {
elementId: PropTypes.string.isRequired,
};