bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/actions-bar/actions-dropdown/container.jsx

122 lines
4.3 KiB
React
Raw Normal View History

import React, { useContext } from 'react';
import { useMutation } from '@apollo/client';
import ActionsDropdown from './component';
2022-05-13 21:42:19 +08:00
import { layoutSelectInput, layoutDispatch, layoutSelect } from '../../layout/context';
2024-01-16 22:19:11 +08:00
import { SMALL_VIEWPORT_BREAKPOINT, ACTIONS, PANELS } from '../../layout/enums';
2024-06-14 21:30:48 +08:00
import {
useIsCameraAsContentEnabled,
useIsLayoutsEnabled,
useIsPresentationEnabled,
useIsTimerFeatureEnabled,
} from '/imports/ui/services/features';
import { PluginsContext } from '/imports/ui/components/components-data/plugin-context/context';
2024-04-25 04:18:21 +08:00
import { useShortcut } from '/imports/ui/core/hooks/useShortcut';
import {
PROCESSED_PRESENTATIONS_SUBSCRIPTION,
} from '/imports/ui/components/whiteboard/queries';
import useDeduplicatedSubscription from '/imports/ui/core/hooks/useDeduplicatedSubscription';
2023-12-07 21:02:13 +08:00
import { SET_PRESENTER } from '/imports/ui/core/graphql/mutations/userMutations';
2024-01-17 00:51:36 +08:00
import { TIMER_ACTIVATE, TIMER_DEACTIVATE } from '../../timer/mutations';
2023-12-07 21:02:13 +08:00
import Auth from '/imports/ui/services/auth';
2024-01-23 20:51:14 +08:00
import { PRESENTATION_SET_CURRENT } from '../../presentation/mutations';
import { useStorageKey } from '/imports/ui/services/storage/hooks';
import { useMeetingIsBreakout } from '/imports/ui/components/app/service';
2021-05-18 04:25:07 +08:00
const ActionsDropdownContainer = (props) => {
2021-09-11 04:48:52 +08:00
const sidebarContent = layoutSelectInput((i) => i.sidebarContent);
const sidebarNavigation = layoutSelectInput((i) => i.sidebarNavigation);
const { width: browserWidth } = layoutSelectInput((i) => i.browser);
const isMobile = browserWidth <= SMALL_VIEWPORT_BREAKPOINT;
2021-09-11 04:48:52 +08:00
const layoutContextDispatch = layoutDispatch();
2022-05-13 21:42:19 +08:00
const isRTL = layoutSelect((i) => i.isRTL);
const { pluginsExtensibleAreasAggregatedState } = useContext(PluginsContext);
const meetingIsBreakout = useMeetingIsBreakout();
let actionButtonDropdownItems = [];
if (pluginsExtensibleAreasAggregatedState.actionButtonDropdownItems) {
actionButtonDropdownItems = [...pluginsExtensibleAreasAggregatedState.actionButtonDropdownItems];
}
2024-04-25 04:18:21 +08:00
const openActions = useShortcut('openActions');
const { data: presentationData } = useDeduplicatedSubscription(
PROCESSED_PRESENTATIONS_SUBSCRIPTION,
);
const presentations = presentationData?.pres_presentation || [];
const {
allowPresentationManagementInBreakouts,
} = window.meetingClientSettings.public.app.breakouts;
const isPresentationManagementDisabled = meetingIsBreakout
&& !allowPresentationManagementInBreakouts;
2023-12-07 21:02:13 +08:00
const [setPresenter] = useMutation(SET_PRESENTER);
2024-01-16 22:19:11 +08:00
const [timerActivate] = useMutation(TIMER_ACTIVATE);
2024-01-17 00:51:36 +08:00
const [timerDeactivate] = useMutation(TIMER_DEACTIVATE);
2024-01-23 20:51:14 +08:00
const [presentationSetCurrent] = useMutation(PRESENTATION_SET_CURRENT);
2023-12-07 21:02:13 +08:00
const handleTakePresenter = () => {
setPresenter({ variables: { userId: Auth.userID } });
};
2024-01-23 20:51:14 +08:00
const setPresentation = (presentationId) => {
presentationSetCurrent({ variables: { presentationId } });
};
2024-01-16 22:19:11 +08:00
const activateTimer = () => {
const TIMER_CONFIG = window.meetingClientSettings.public.timer;
const MILLI_IN_MINUTE = 60000;
2024-01-16 22:19:11 +08:00
const stopwatch = true;
const running = false;
const time = TIMER_CONFIG.time * MILLI_IN_MINUTE;
timerActivate({ variables: { stopwatch, running, time } });
setTimeout(() => {
layoutContextDispatch({
type: ACTIONS.SET_SIDEBAR_CONTENT_IS_OPEN,
value: true,
});
layoutContextDispatch({
type: ACTIONS.SET_SIDEBAR_CONTENT_PANEL,
value: PANELS.TIMER,
});
}, 500);
2024-01-16 22:19:11 +08:00
};
const isDropdownOpen = useStorageKey('dropdownOpen');
2024-06-14 21:30:48 +08:00
const isLayoutsEnabled = useIsLayoutsEnabled();
const isPresentationEnabled = useIsPresentationEnabled();
const isTimerFeatureEnabled = useIsTimerFeatureEnabled();
const isCameraAsContentEnabled = useIsCameraAsContentEnabled();
return (
2023-06-14 22:32:52 +08:00
<ActionsDropdown
{...{
layoutContextDispatch,
sidebarContent,
sidebarNavigation,
isMobile,
isRTL,
actionButtonDropdownItems,
presentations,
2024-06-14 21:30:48 +08:00
isTimerFeatureEnabled,
isDropdownOpen,
2024-01-23 20:51:14 +08:00
setPresentation,
2024-06-14 21:30:48 +08:00
isCameraAsContentEnabled,
2023-12-07 21:02:13 +08:00
handleTakePresenter,
2024-01-16 22:19:11 +08:00
activateTimer,
2024-01-17 00:51:36 +08:00
deactivateTimer: timerDeactivate,
2024-04-25 04:18:21 +08:00
shortcuts: openActions,
2024-06-14 21:30:48 +08:00
isLayoutsEnabled,
isPresentationEnabled,
isPresentationManagementDisabled,
2023-06-14 22:32:52 +08:00
...props,
}}
/>
);
2021-05-18 04:25:07 +08:00
};
export default ActionsDropdownContainer;