bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/generic-content/generic-main-content/container.tsx

87 lines
3.2 KiB
TypeScript
Raw Normal View History

import React, { useContext, useRef } from 'react';
import * as PluginSdk from 'bigbluebutton-html-plugin-sdk';
import {
layoutDispatch,
layoutSelectInput,
layoutSelectOutput,
} from '/imports/ui/components/layout/context';
import {
DispatcherFunction,
GenericMainContent as GenericContentFromLayout,
Input,
Output,
} from '/imports/ui/components/layout/layoutTypes';
import { PluginsContext } from '/imports/ui/components/components-data/plugin-context/context';
import GenericMainContent from './component';
import { ACTIONS, PRESENTATION_AREA } from '/imports/ui/components/layout/enums';
import getDifferenceBetweenLists from '../utils';
import { GenericMainContentContainerProps } from '../types';
import { GenericContentType } from 'bigbluebutton-html-plugin-sdk/dist/cjs/extensible-areas/generic-content/enums';
const GenericMainContentContainer: React.FC<GenericMainContentContainerProps> = (props: GenericMainContentContainerProps) => {
const { genericMainContentId } = props;
2024-06-14 06:30:37 +08:00
const previousPluginGenericContainerContents = useRef<PluginSdk.GenericContentMainArea[]>([]);
const {
pluginsExtensibleAreasAggregatedState,
} = useContext(PluginsContext);
const layoutContextDispatch: DispatcherFunction = layoutDispatch();
2024-06-14 06:30:37 +08:00
let genericContainerContentExtensibleArea = [] as PluginSdk.GenericContentMainArea[];
if (pluginsExtensibleAreasAggregatedState.genericContents) {
2024-06-14 06:30:37 +08:00
.filter((g) => g.type === GenericContentType.MAIN_AREA) as PluginSdk.GenericContentMainArea[];
genericContainerContentExtensibleArea = [
...genericContainerContent,
];
const [
genericContentsAdded,
genericContentsRemoved,
] = getDifferenceBetweenLists(previousPluginGenericContainerContents.current, genericContainerContentExtensibleArea);
if (genericContentsAdded.length > 0 || genericContentsRemoved.length > 0) {
previousPluginGenericContainerContents.current = [...genericContainerContentExtensibleArea];
genericContentsAdded.forEach((g) => {
layoutContextDispatch({
type: ACTIONS.SET_PILE_CONTENT_FOR_PRESENTATION_AREA,
value: {
content: PRESENTATION_AREA.GENERIC_CONTENT,
open: true,
genericContentId: g.id,
},
});
});
genericContentsRemoved.forEach((g) => {
layoutContextDispatch({
type: ACTIONS.SET_PILE_CONTENT_FOR_PRESENTATION_AREA,
value: {
content: PRESENTATION_AREA.GENERIC_CONTENT,
open: false,
genericContentId: g.id,
},
});
});
}
}
const genericContentLayoutInformation: GenericContentFromLayout = layoutSelectOutput(
(i: Output) => i.genericMainContent,
);
const cameraDock = layoutSelectInput((i: Input) => i.cameraDock);
const { isResizing } = cameraDock;
if (!genericContainerContentExtensibleArea
|| genericContainerContentExtensibleArea.length === 0
|| !genericMainContentId) return null;
return (
<GenericMainContent
genericContentId={genericMainContentId}
renderFunctionComponents={genericContainerContentExtensibleArea}
isResizing={isResizing}
genericContentLayoutInformation={genericContentLayoutInformation}
/>
);
};
export default GenericMainContentContainer;