setConfirmModalIsOpen(false),
- priority: "low",
- setIsOpen: setConfirmModalIsOpen,
- isOpen: isConfirmModalOpen
- }}
- /> : null}
- >;
-};
-
-const Wrapper = (Component) => (props) => (
-
-
-
-);
-
-export const withDragAndDrop = (Component) =>
- injectIntl(withFileReader(Wrapper(Component), MIME_TYPES_ALLOWED, MAX_FILE_SIZE));
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/drag-and-drop/component.tsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/drag-and-drop/component.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/drag-and-drop/component.tsx
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/drag-and-drop/component.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/component.jsx
deleted file mode 100644
index 6d41a1b1a4..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/component.jsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import React from 'react';
-import { defineMessages, useIntl } from 'react-intl';
-import PropTypes from 'prop-types';
-import VideoService from '/imports/ui/components/video-provider/service';
-import { useMutation } from '@apollo/client';
-import Styled from './styles';
-import { SET_CAMERA_PINNED } from '/imports/ui/core/graphql/mutations/userMutations';
-
-const intlMessages = defineMessages({
- unpinLabel: {
- id: 'app.videoDock.webcamUnpinLabel',
- },
- unpinLabelDisabled: {
- id: 'app.videoDock.webcamUnpinLabelDisabled',
- },
-});
-
-const PinArea = (props) => {
- const intl = useIntl();
-
- const { user, amIModerator } = props;
- const pinned = user?.pin;
- const userId = user?.userId;
- const shouldRenderPinButton = pinned && userId;
- const videoPinActionAvailable = VideoService.isVideoPinEnabledForCurrentUser(amIModerator);
-
- const [setCameraPinned] = useMutation(SET_CAMERA_PINNED);
-
- if (!shouldRenderPinButton) return ;
-
- return (
-
- {
- setCameraPinned({
- variables: {
- userId,
- pinned: false,
- },
- });
- }}
- label={videoPinActionAvailable
- ? intl.formatMessage(intlMessages.unpinLabel)
- : intl.formatMessage(intlMessages.unpinLabelDisabled)}
- hideLabel
- disabled={!videoPinActionAvailable}
- data-test="pinVideoButton"
- />
-
- );
-};
-
-export default PinArea;
-
-PinArea.propTypes = {
- user: PropTypes.shape({
- pin: PropTypes.bool.isRequired,
- userId: PropTypes.string.isRequired,
- }).isRequired,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/pin-area/component.tsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/component.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/pin-area/component.tsx
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/component.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/styles.js b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/styles.js
deleted file mode 100644
index 8595979b87..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/styles.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import styled from 'styled-components';
-import Button from '/imports/ui/components/common/button/component';
-import { colorTransparent, colorWhite } from '/imports/ui/stylesheets/styled-components/palette';
-
-const PinButton = styled(Button)`
- padding: 5px;
- &,
- &:active,
- &:hover,
- &:focus {
- background-color: ${colorTransparent} !important;
- border: none !important;
-
- & > i {
- border: none !important;
- color: ${colorWhite};
- font-size: 1rem;
- background-color: ${colorTransparent} !important;
- }
- }
-`;
-
-const PinButtonWrapper = styled.div`
- background-color: rgba(0,0,0,.3);
- cursor: pointer;
- border: 0;
- margin: 2px;
- height: fit-content;
-
- [dir="rtl"] & {
- right: auto;
- left :0;
- }
-
- [class*="presentationZoomControls"] & {
- position: relative !important;
- }
-`;
-
-export default {
- PinButtonWrapper,
- PinButton,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/pin-area/styles.ts b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/styles.ts
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/pin-area/styles.ts
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/pin-area/styles.ts
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/styles.js b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/styles.js
deleted file mode 100644
index 9cbeda2233..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/styles.js
+++ /dev/null
@@ -1,196 +0,0 @@
-import styled, { keyframes, css } from 'styled-components';
-import {
- colorPrimary,
- colorBlack,
- colorWhite,
- webcamBackgroundColor,
- colorDanger,
- webcamPlaceholderBorder,
-} from '/imports/ui/stylesheets/styled-components/palette';
-import { TextElipsis } from '/imports/ui/stylesheets/styled-components/placeholders';
-
-const rotate360 = keyframes`
- from {
- transform: rotate(360deg);
- }
- to {
- transform: rotate(0deg);
- }
-`;
-
-const fade = keyframes`
- from {
- opacity: 0.7;
- }
- to {
- opacity: 0;
- }
-`;
-
-const Content = styled.div`
- position: relative;
- display: flex;
- min-width: 100%;
- border-radius: 10px;
- &::after {
- content: "";
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- pointer-events: none;
- border: 2px solid ${colorBlack};
- border-radius: 10px;
-
- ${({ isStream }) => !isStream && `
- border: 2px solid ${webcamPlaceholderBorder};
- `}
-
- ${({ talking }) => talking && `
- border: 2px solid ${colorPrimary};
- `}
-
- ${({ talking, customHighlight }) => talking && customHighlight && customHighlight.length > 0 && `
- border: 2px solid rgb(${customHighlight[0]}, ${customHighlight[1]}, ${customHighlight[2]});
- `}
-
- ${({ animations }) => animations && `
- transition: opacity .1s;
- `}
- }
-
- ${({ dragging, animations }) => dragging && animations && css`
- &::after {
- animation: ${fade} .5s linear infinite;
- animation-direction: alternate;
- }
- `}
-
- ${({ dragging, draggingOver }) => (dragging || draggingOver) && `
- &::after {
- opacity: 0.7;
- border-style: dashed;
- border-color: ${colorDanger};
- transition: opacity 0s;
- }
- `}
-
- ${({ fullscreen }) => fullscreen && `
- position: fixed;
- top: 0;
- left: 0;
- width: 100vw;
- height: 100vh;
- z-index: 99;
- `}
-`;
-
-const WebcamConnecting = styled.div`
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100%;
- width: 100%;
- min-width: 100%;
- border-radius: 10px;
- background-color: ${webcamBackgroundColor};
- z-index: 0;
-
- &::after {
- content: "";
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- opacity: 0;
- pointer-events: none;
-
- ${({ animations }) => animations && `
- transition: opacity .1s;
- `}
- }
-`;
-
-const LoadingText = styled(TextElipsis)`
- color: ${colorWhite};
- font-size: 100%;
-`;
-
-const VideoContainer = styled.div`
- display: flex;
- justify-content: center;
- width: 100%;
- height: 100%;
-
- ${({ $selfViewDisabled }) => $selfViewDisabled && 'display: none'}
-`;
-
-const Video = styled.video`
- position: relative;
- height: 100%;
- width: calc(100% - 1px);
- object-fit: contain;
- background-color: ${colorBlack};
- border-radius: 10px;
-
- ${({ mirrored }) => mirrored && `
- transform: scale(-1, 1);
- `}
-
- ${({ unhealthyStream }) => unhealthyStream && `
- filter: grayscale(50%) opacity(50%);
- `}
-`;
-
-const VideoDisabled = styled.div`
-color: white;
- width: 100%;
- height: 20%;
- background-color: rgba(0, 0, 0, 0.7);
- display: flex;
- align-items: center;
- justify-content: center;
- position: absolute;
- border-radius: 10px;
- z-index: 2;
- top: 40%;
- transform: translate(-50%, -50%);
- top: 50%;
- left: 50%;
- padding: 20px;
- backdrop-filter: blur(10px);
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
-}`;
-
-const TopBar = styled.div`
- position: absolute;
- display: flex;
- width: 100%;
- z-index: 1;
- top: 0;
- padding: 5px;
- justify-content: space-between;
-`;
-
-const BottomBar = styled.div`
- position: absolute;
- display: flex;
- width: 100%;
- z-index: 1;
- bottom: 0;
- padding: 1px 7px;
- justify-content: space-between;
-`;
-
-export default {
- Content,
- WebcamConnecting,
- LoadingText,
- VideoContainer,
- Video,
- TopBar,
- BottomBar,
- VideoDisabled,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/styles.ts b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/styles.ts
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/styles.ts
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/styles.ts
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/component.jsx
deleted file mode 100644
index 9aad012d21..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/component.jsx
+++ /dev/null
@@ -1,303 +0,0 @@
-import React, { useContext } from 'react';
-import { defineMessages, useIntl } from 'react-intl';
-import browserInfo from '/imports/utils/browserInfo';
-import VideoService from '/imports/ui/components/video-provider/service';
-import FullscreenService from '/imports/ui/components/common/fullscreen-button/service';
-import BBBMenu from '/imports/ui/components/common/menu/component';
-import PropTypes from 'prop-types';
-import { UserCameraDropdownItemType } from 'bigbluebutton-html-plugin-sdk/dist/cjs/extensible-areas/user-camera-dropdown-item/enums';
-import { useMutation } from '@apollo/client';
-import Styled from './styles';
-import Auth from '/imports/ui/services/auth';
-import { PluginsContext } from '/imports/ui/components/components-data/plugin-context/context';
-import { notify } from '/imports/ui/services/notification';
-import { SET_CAMERA_PINNED } from '/imports/ui/core/graphql/mutations/userMutations';
-import Session from '/imports/ui/services/storage/in-memory';
-
-const intlMessages = defineMessages({
- focusLabel: {
- id: 'app.videoDock.webcamFocusLabel',
- },
- focusDesc: {
- id: 'app.videoDock.webcamFocusDesc',
- },
- unfocusLabel: {
- id: 'app.videoDock.webcamUnfocusLabel',
- },
- unfocusDesc: {
- id: 'app.videoDock.webcamUnfocusDesc',
- },
- pinLabel: {
- id: 'app.videoDock.webcamPinLabel',
- },
- unpinLabel: {
- id: 'app.videoDock.webcamUnpinLabel',
- },
- disableLabel: {
- id: 'app.videoDock.webcamDisableLabel',
- },
- enableLabel: {
- id: 'app.videoDock.webcamEnableLabel',
- },
- pinDesc: {
- id: 'app.videoDock.webcamPinDesc',
- },
- unpinDesc: {
- id: 'app.videoDock.webcamUnpinDesc',
- },
- enableMirrorLabel: {
- id: 'app.videoDock.webcamEnableMirrorLabel',
- },
- enableMirrorDesc: {
- id: 'app.videoDock.webcamEnableMirrorDesc',
- },
- disableMirrorLabel: {
- id: 'app.videoDock.webcamDisableMirrorLabel',
- },
- disableMirrorDesc: {
- id: 'app.videoDock.webcamDisableMirrorDesc',
- },
- fullscreenLabel: {
- id: 'app.videoDock.webcamFullscreenLabel',
- description: 'Make fullscreen option label',
- },
- squeezedLabel: {
- id: 'app.videoDock.webcamSqueezedButtonLabel',
- description: 'User selected webcam squeezed options',
- },
- disableDesc: {
- id: 'app.videoDock.webcamDisableDesc',
- },
- disableWarning: {
- id: 'app.videoDock.webcamDisableWarning',
- },
-});
-
-const UserActions = ({
- name,
- cameraId,
- numOfStreams,
- onHandleVideoFocus = () => {},
- user,
- focused = false,
- onHandleMirror,
- isVideoSqueezed = false,
- videoContainer = () => {},
- isRTL,
- isStream,
- isSelfViewDisabled,
- isMirrored,
- amIModerator,
-}) => {
- const { pluginsExtensibleAreasAggregatedState } = useContext(PluginsContext);
-
- let userCameraDropdownItems = [];
- if (pluginsExtensibleAreasAggregatedState.userCameraDropdownItems) {
- userCameraDropdownItems = [
- ...pluginsExtensibleAreasAggregatedState.userCameraDropdownItems,
- ];
- }
-
- const intl = useIntl();
- const enableVideoMenu = window.meetingClientSettings.public.kurento.enableVideoMenu || false;
- const { isFirefox } = browserInfo;
-
- const [setCameraPinned] = useMutation(SET_CAMERA_PINNED);
-
- const getAvailableActions = () => {
- const pinned = user?.pin;
- const userId = user?.userId;
- const isPinnedIntlKey = !pinned ? 'pin' : 'unpin';
- const isFocusedIntlKey = !focused ? 'focus' : 'unfocus';
- const isMirroredIntlKey = !isMirrored ? 'enableMirror' : 'disableMirror';
- const disabledCams = Session.get('disabledCams') || [];
- const isCameraDisabled = disabledCams && disabledCams?.includes(cameraId);
- const enableSelfCamIntlKey = !isCameraDisabled ? 'disable' : 'enable';
-
- const menuItems = [];
-
- const toggleDisableCam = () => {
- if (!isCameraDisabled) {
- Session.setItem('disabledCams', [...disabledCams, cameraId]);
- notify(intl.formatMessage(intlMessages.disableWarning), 'info', 'warning');
- } else {
- Session.setItem('disabledCams', disabledCams.filter((cId) => cId !== cameraId));
- }
- };
-
- if (isVideoSqueezed) {
- menuItems.push({
- key: `${cameraId}-name`,
- label: name,
- description: name,
- onClick: () => { },
- disabled: true,
- });
-
- if (isStream) {
- menuItems.push(
- {
- key: `${cameraId}-fullscreen`,
- label: intl.formatMessage(intlMessages.fullscreenLabel),
- description: intl.formatMessage(intlMessages.fullscreenLabel),
- onClick: () => FullscreenService.toggleFullScreen(videoContainer.current),
- },
- );
- }
- }
- if (userId === Auth.userID && isStream && !isSelfViewDisabled) {
- menuItems.push({
- key: `${cameraId}-disable`,
- label: intl.formatMessage(intlMessages[`${enableSelfCamIntlKey}Label`]),
- description: intl.formatMessage(intlMessages[`${enableSelfCamIntlKey}Label`]),
- onClick: () => toggleDisableCam(cameraId),
- dataTest: 'selfViewDisableBtn',
- });
- }
-
- if (isStream) {
- menuItems.push({
- key: `${cameraId}-mirror`,
- label: intl.formatMessage(intlMessages[`${isMirroredIntlKey}Label`]),
- description: intl.formatMessage(intlMessages[`${isMirroredIntlKey}Desc`]),
- onClick: () => onHandleMirror(cameraId),
- dataTest: 'mirrorWebcamBtn',
- });
- }
-
- if (numOfStreams > 2 && isStream) {
- menuItems.push({
- key: `${cameraId}-focus`,
- label: intl.formatMessage(intlMessages[`${isFocusedIntlKey}Label`]),
- description: intl.formatMessage(intlMessages[`${isFocusedIntlKey}Desc`]),
- onClick: () => onHandleVideoFocus(cameraId),
- dataTest: 'FocusWebcamBtn',
- });
- }
-
- if (VideoService.isVideoPinEnabledForCurrentUser(amIModerator) && isStream) {
- menuItems.push({
- key: `${cameraId}-pin`,
- label: intl.formatMessage(intlMessages[`${isPinnedIntlKey}Label`]),
- description: intl.formatMessage(intlMessages[`${isPinnedIntlKey}Desc`]),
- onClick: () => {
- setCameraPinned({
- variables: {
- userId,
- pinned: !pinned,
- },
- });
- },
- dataTest: 'pinWebcamBtn',
- });
- }
-
- userCameraDropdownItems.forEach((pluginItem) => {
- switch (pluginItem.type) {
- case UserCameraDropdownItemType.OPTION:
- menuItems.push({
- key: pluginItem.id,
- label: pluginItem.label,
- onClick: pluginItem.onClick,
- icon: pluginItem.icon,
- });
- break;
- case UserCameraDropdownItemType.SEPARATOR:
- menuItems.push({
- key: pluginItem.id,
- isSeparator: true,
- });
- break;
- default:
- break;
- }
- });
-
- return menuItems;
- };
-
- const renderSqueezedButton = () => (
-
- null}
- />
- )}
- actions={getAvailableActions()}
- />
-
- );
-
- const renderDefaultButton = () => (
-
- {enableVideoMenu && getAvailableActions().length >= 1
- ? (
-
- {name}
-
- )}
- actions={getAvailableActions()}
- opts={{
- id: `webcam-${user?.userId}-dropdown-menu`,
- keepMounted: true,
- transitionDuration: 0,
- elevation: 3,
- getcontentanchorel: null,
- fullwidth: 'true',
- anchorOrigin: { vertical: 'bottom', horizontal: isRTL ? 'right' : 'left' },
- transformOrigin: { vertical: 'top', horizontal: isRTL ? 'right' : 'left' },
- }}
- />
- )
- : (
-
-
- {name}
-
-
- )}
-
- );
-
- return (
- isVideoSqueezed
- ? renderSqueezedButton()
- : renderDefaultButton()
- );
-};
-
-export default UserActions;
-
-UserActions.propTypes = {
- name: PropTypes.string.isRequired,
- cameraId: PropTypes.string.isRequired,
- numOfStreams: PropTypes.number.isRequired,
- onHandleVideoFocus: PropTypes.func,
- user: PropTypes.shape({
- pin: PropTypes.bool.isRequired,
- userId: PropTypes.string.isRequired,
- }).isRequired,
- focused: PropTypes.bool,
- isVideoSqueezed: PropTypes.bool,
- videoContainer: PropTypes.oneOfType([
- PropTypes.func,
- PropTypes.shape({ current: PropTypes.instanceOf(Element) }),
- ]),
- onHandleMirror: PropTypes.func.isRequired,
- onHandleDisableCam: PropTypes.func.isRequired,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-actions/component.tsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/component.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-actions/component.tsx
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/component.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/styles.js b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/styles.js
deleted file mode 100644
index 4c2d51a213..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/styles.js
+++ /dev/null
@@ -1,124 +0,0 @@
-import styled from 'styled-components';
-import { colorOffWhite } from '/imports/ui/stylesheets/styled-components/palette';
-import { TextElipsis, DivElipsis } from '/imports/ui/stylesheets/styled-components/placeholders';
-import { landscape, mediumUp } from '/imports/ui/stylesheets/styled-components/breakpoints';
-import { fontSizeSmaller } from '/imports/ui/stylesheets/styled-components/typography';
-import Button from '/imports/ui/components/common/button/component';
-
-const DropdownTrigger = styled(DivElipsis)`
- user-select: none;
- position: relative;
- // Keep the background with 0.5 opacity, but leave the text with 1
- background-color: rgba(0, 0, 0, 0.5);
- border-radius: 10px;
- color: ${colorOffWhite};
- padding: 0 1rem 0 .5rem !important;
- font-size: 80%;
- cursor: pointer;
- white-space: nowrap;
- width: 100%;
- overflow: hidden;
- text-overflow: ellipsis;
-
- &::after {
- content: "\\203a";
- position: absolute;
- transform: rotate(90deg);
- ${({ isRTL }) => isRTL && `
- transform: rotate(-90deg);
- `}
- top: 45%;
- width: 0;
- line-height: 0;
- right: .45rem;
- }
-`;
-
-const UserName = styled(TextElipsis)`
- position: relative;
- // Keep the background with 0.5 opacity, but leave the text with 1
- color: ${colorOffWhite};
- padding: 0 1rem 0 .5rem !important;
- font-size: 80%;
-
- ${({ noMenu }) => noMenu && `
- padding: 0 .5rem 0 .5rem !important;
- `}
-`;
-
-const Dropdown = styled.div`
- display: flex;
- outline: none !important;
- background-color: rgba(0, 0, 0, 0.5);
- border-radius: 10px;
- display: inline-block;
-
- @media ${mediumUp} {
- >[aria-expanded] {
- padding: .25rem;
- }
- }
-
- @media ${landscape} {
- button {
- width: calc(100vw - 4rem);
- margin-left: 1rem;
- }
- }
-
- ${({ isFirefox }) => isFirefox && `
- max-width: 100%;
- `}
-`;
-
-const MenuWrapper = styled.div`
- max-width: 75%;
-`;
-
-const MenuWrapperSqueezed = styled.div`
- position: absolute;
- right: 0;
- top: 0;
-`;
-
-const OptionsButton = styled(Button)`
- position: absolute;
- right: 7px;
- top: 7px;
- z-index: 2;
- background-color: rgba(0,0,0,0.4);
- color: ${colorOffWhite};
- overflow: hidden;
- border: none !important;
- padding: 3px;
-
- i {
- width: auto;
- font-size: ${fontSizeSmaller} !important;
- background-color: transparent !important;
- }
-
- &,
- &:active,
- &:focus,
- &:hover {
- background-color: rgba(0,0,0,0.5) !important;
- border: none !important;
- color: white !important;
- opacity: 100% !important;
- }
-
- &:hover {
- transform: scale(1.3);
- transition-duration: 150ms;
- }
-`;
-
-export default {
- DropdownTrigger,
- UserName,
- Dropdown,
- MenuWrapper,
- MenuWrapperSqueezed,
- OptionsButton,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-actions/styles.ts b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/styles.ts
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-actions/styles.ts
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-actions/styles.ts
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/component.jsx
deleted file mode 100644
index 2a1f54e2c1..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/component.jsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import Styled from './styles';
-import Icon from '/imports/ui/components/common/icon/component';
-import UserListService from '/imports/ui/components/user-list/service';
-
-const UserAvatarVideo = (props) => {
- const { user, unhealthyStream, squeezed, voiceUser } = props;
- const {
- name, color, avatar, role, emoji,
- } = user;
- let {
- presenter, clientType,
- } = user;
-
- const talking = voiceUser?.talking || false;
-
- const ROLE_MODERATOR = window.meetingClientSettings.public.user.role_moderator;
-
- const handleUserIcon = () => {
- if (emoji !== 'none') {
- return ;
- }
- return name.toLowerCase().slice(0, 2);
- };
-
- // hide icons when squeezed
- if (squeezed) {
- presenter = false;
- clientType = false;
- }
-
- return (
-
- {handleUserIcon()}
-
- );
-};
-
-export default UserAvatarVideo;
-
-UserAvatarVideo.propTypes = {
- user: PropTypes.shape({
- name: PropTypes.string.isRequired,
- color: PropTypes.string.isRequired,
- avatar: PropTypes.string.isRequired,
- role: PropTypes.string.isRequired,
- emoji: PropTypes.string.isRequired,
- presenter: PropTypes.bool.isRequired,
- clientType: PropTypes.string.isRequired,
- }).isRequired,
- unhealthyStream: PropTypes.bool.isRequired,
- squeezed: PropTypes.bool.isRequired,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-avatar/component.tsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/component.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-avatar/component.tsx
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/component.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/styles.js b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/styles.js
deleted file mode 100644
index 9386fe05ae..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/styles.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import UserAvatar from '/imports/ui/components/user-avatar/component';
-import {
- userIndicatorsOffset,
- mdPaddingY,
-} from '/imports/ui/stylesheets/styled-components/general';
-import {
- colorPrimary,
-} from '/imports/ui/stylesheets/styled-components/palette';
-import styled from 'styled-components';
-
-const UserAvatarStyled = styled(UserAvatar)`
- height: 60%;
- width: 45%;
- max-width: 66px;
- max-height: 66px;
- scale: 1.5;
-
- ${({ unhealthyStream }) => unhealthyStream && `
- filter: grayscale(50%) opacity(50%);
- `}
-
- ${({ dialIn }) => dialIn && `
- &:before {
- content: "\\00a0\\e91a\\00a0";
- padding: ${mdPaddingY};
- opacity: 1;
- top: ${userIndicatorsOffset};
- right: ${userIndicatorsOffset};
- bottom: auto;
- left: auto;
- border-radius: 50%;
- background-color: ${colorPrimary};
- padding: 0.7rem !important;
-
- [dir="rtl"] & {
- left: auto;
- right: ${userIndicatorsOffset};
- letter-spacing: -.33rem;
- }
- }
- `}
-
- ${({ presenter }) => presenter && `
- &:before {
- padding: 0.7rem !important;
- }
- `};
-`;
-
-export default {
- UserAvatarStyled,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-avatar/styles.ts b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/styles.ts
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-avatar/styles.ts
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-avatar/styles.ts
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/component.jsx
deleted file mode 100644
index 9cc941d97f..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/component.jsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import Styled from './styles';
-
-const UserStatus = (props) => {
- const { voiceUser, user } = props;
-
- const listenOnly = voiceUser?.listenOnly;
- const muted = voiceUser?.muted;
- const voiceUserJoined = voiceUser?.joined;
- const emoji = user?.reactionEmoji;
- const raiseHand = user?.raiseHand;
- const away = user?.away;
- return (
-
- {away && !raiseHand && '⏰'}
- {raiseHand && '✋'}
- {(emoji && emoji !== 'none' && !raiseHand && !away) && emoji}
- {(muted && !listenOnly) && }
- {listenOnly && }
- {(voiceUserJoined && !muted) && }
-
- );
-};
-
-export default UserStatus;
-
-UserStatus.propTypes = {
- voiceUser: PropTypes.shape({
- listenOnly: PropTypes.bool.isRequired,
- muted: PropTypes.bool.isRequired,
- joined: PropTypes.bool.isRequired,
- }).isRequired,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-status/component.tsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/component.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-status/component.tsx
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/component.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/styles.js b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/styles.js
deleted file mode 100644
index 98c60bab9c..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/styles.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import styled from 'styled-components';
-import Icon from '/imports/ui/components/common/icon/component';
-import { colorDanger, colorSuccess, colorWhite } from '/imports/ui/stylesheets/styled-components/palette';
-
-const Voice = styled(Icon)`
- height: 1.1rem;
- width: 1.1rem;
- margin-left: 0.5rem;
- color: ${colorWhite};
- border-radius: 50%;
-
- &::before {
- font-size: 80%;
- }
-
- background-color: ${colorSuccess};
-`;
-
-const Muted = styled(Icon)`
- height: 1.1rem;
- width: 1.1rem;
- color: ${colorWhite};
- border-radius: 50%;
- margin-left: 0.5rem;
-
- &::before {
- font-size: 80%;
- }
-
- background-color: ${colorDanger};
-`;
-
-export default {
- Voice,
- Muted,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-status/styles.ts b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/styles.ts
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/user-status/styles.ts
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/user-status/styles.ts
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/component.jsx
deleted file mode 100644
index 72b608c4e6..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/component.jsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import React, { useEffect } from 'react';
-import PropTypes from 'prop-types';
-import { ACTIONS } from '/imports/ui/components/layout/enums';
-import FullscreenButtonContainer from '/imports/ui/components/common/fullscreen-button/container';
-import Styled from './styles';
-
-const ViewActions = (props) => {
- const {
- name, cameraId, videoContainer, isFullscreenContext, layoutContextDispatch, isStream,
- } = props;
-
- const ALLOW_FULLSCREEN = window.meetingClientSettings.public.app.allowFullscreen;
-
- useEffect(() => () => {
- // exit fullscreen when component is unmounted
- if (isFullscreenContext) {
- layoutContextDispatch({
- type: ACTIONS.SET_FULLSCREEN_ELEMENT,
- value: {
- element: '',
- group: '',
- },
- });
- }
- }, []);
-
- if (!ALLOW_FULLSCREEN || !isStream) return null;
-
- return (
-
-
-
- );
-};
-
-export default ViewActions;
-
-ViewActions.propTypes = {
- name: PropTypes.string.isRequired,
- cameraId: PropTypes.string.isRequired,
- videoContainer: PropTypes.oneOfType([
- PropTypes.func,
- PropTypes.shape({ current: PropTypes.instanceOf(Element) }),
- ]).isRequired,
- isFullscreenContext: PropTypes.bool.isRequired,
- layoutContextDispatch: PropTypes.func.isRequired,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/view-actions/component.tsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/component.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/view-actions/component.tsx
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/component.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/styles.js b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/styles.js
deleted file mode 100644
index 8d3390029e..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/styles.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import styled from 'styled-components';
-
-const FullscreenWrapper = styled.div`
- position: relative;
-`;
-
-export default {
- FullscreenWrapper,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/view-actions/styles.ts b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/styles.ts
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/video-list/video-list-item/view-actions/styles.ts
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/view-actions/styles.ts
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/mutations.ts b/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/mutations.ts
deleted file mode 100644
index 5c7a20eda7..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/mutations.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { gql } from '@apollo/client';
-
-export const CAMERA_BROADCAST_START = gql`
- mutation CameraBroadcastStart($cameraId: String!) {
- cameraBroadcastStart(
- stream: $cameraId
- )
- }
-`;
-
-export const CAMERA_BROADCAST_STOP = gql`
- mutation CameraBroadcastStop($cameraId: String!) {
- cameraBroadcastStop(
- stream: $cameraId
- )
- }
-`;
-
-export default {
- CAMERA_BROADCAST_START,
- CAMERA_BROADCAST_STOP,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/queries.ts b/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/queries.ts
deleted file mode 100644
index 13793679bb..0000000000
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-provider-graphql/queries.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-import { gql } from '@apollo/client';
-import type { User } from './types';
-
-interface Voice {
- floor: boolean;
- lastFloorTime: string;
-}
-
-export interface VideoStreamsResponse {
- user_camera: {
- streamId: string;
- user: User;
- voice?: Voice;
- }[];
-}
-
-export interface GridUsersResponse {
- user: User[];
-}
-
-export interface OwnVideoStreamsResponse {
- user_camera: {
- streamId: string;
- }[];
-}
-
-export const VIDEO_STREAMS_SUBSCRIPTION = gql`
- subscription VideoStreams {
- user_camera {
- streamId
- user {
- name
- userId
- nameSortable
- pinned
- away
- disconnected
- emoji
- role
- avatar
- color
- presenter
- clientType
- raiseHand
- isModerator
- reactionEmoji
- }
- voice {
- floor
- lastFloorTime
- }
- }
- }
-`;
-
-export const OWN_VIDEO_STREAMS_QUERY = gql`
- query OwnVideoStreams($userId: String!, $streamIdPrefix: String!) {
- user_camera(
- where: {
- userId: { _eq: $userId },
- streamId: { _like: $streamIdPrefix }
- },
- ) {
- streamId
- }
- }
-`;
-
-export const VIEWERS_IN_WEBCAM_COUNT_SUBSCRIPTION = gql`
- subscription ViewerVideoStreams {
- user_camera_aggregate(where: {
- user: { role: { _eq: "VIEWER" }, presenter: { _eq: false } }
- }) {
- aggregate {
- count
- }
- }
- }
-`;
-
-export const GRID_USERS_SUBSCRIPTION = gql`
- subscription GridUsers($exceptUserIds: [String]!, $limit: Int!) {
- user(
- where: {
- userId: {
- _nin: $exceptUserIds,
- },
- },
- limit: $limit,
- order_by: {
- nameSortable: asc,
- userId: asc,
- },
- ) {
- name
- userId
- nameSortable
- pinned
- away
- disconnected
- emoji
- role
- avatar
- color
- presenter
- clientType
- raiseHand
- isModerator
- reactionEmoji
- }
- }
-`;
-
-export default {
- OWN_VIDEO_STREAMS_QUERY,
- VIDEO_STREAMS_SUBSCRIPTION,
- VIEWERS_IN_WEBCAM_COUNT_SUBSCRIPTION,
- GRID_USERS_SUBSCRIPTION,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/component.jsx b/bigbluebutton-html5/imports/ui/components/webcam/component.jsx
deleted file mode 100644
index fdf6790edc..0000000000
--- a/bigbluebutton-html5/imports/ui/components/webcam/component.jsx
+++ /dev/null
@@ -1,270 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import Resizable from 're-resizable';
-import Draggable from 'react-draggable';
-import Styled from './styles';
-import { ACTIONS, CAMERADOCK_POSITION } from '../layout/enums';
-import DropAreaContainer from './drop-areas/container';
-import VideoProviderContainer from '/imports/ui/components/video-provider/container';
-import Storage from '/imports/ui/services/storage/session';
-import { colorContentBackground } from '/imports/ui/stylesheets/styled-components/palette';
-
-const WebcamComponent = ({
- cameraDock,
- swapLayout,
- focusedId,
- layoutContextDispatch,
- fullscreen,
- isPresenter,
- displayPresentation,
- cameraOptimalGridSize: cameraSize,
- isRTL,
- isGridEnabled,
-}) => {
- const [isResizing, setIsResizing] = useState(false);
- const [isDragging, setIsDragging] = useState(false);
- const [isFullscreen, setIsFullScreen] = useState(false);
- const [resizeStart, setResizeStart] = useState({ width: 0, height: 0 });
- const [cameraMaxWidth, setCameraMaxWidth] = useState(0);
- const [draggedAtLeastOneTime, setDraggedAtLeastOneTime] = useState(false);
-
- const lastSize = Storage.getItem('webcamSize') || { width: 0, height: 0 };
- const { width: lastWidth, height: lastHeight } = lastSize;
-
- const isCameraTopOrBottom = cameraDock.position === CAMERADOCK_POSITION.CONTENT_TOP
- || cameraDock.position === CAMERADOCK_POSITION.CONTENT_BOTTOM;
- const isCameraLeftOrRight = cameraDock.position === CAMERADOCK_POSITION.CONTENT_LEFT
- || cameraDock.position === CAMERADOCK_POSITION.CONTENT_RIGHT;
- const isCameraSidebar = cameraDock.position === CAMERADOCK_POSITION.SIDEBAR_CONTENT_BOTTOM;
-
- useEffect(() => {
- const handleVisibility = () => {
- if (document.hidden) {
- document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
- }
- };
-
- document.addEventListener('visibilitychange', handleVisibility);
-
- return () => {
- document.removeEventListener('visibilitychange', handleVisibility);
- };
- }, []);
-
- useEffect(() => {
- setIsFullScreen(fullscreen.group === 'webcams');
- }, [fullscreen]);
-
- useEffect(() => {
- const newCameraMaxWidth = (isPresenter && cameraDock.presenterMaxWidth) ? cameraDock.presenterMaxWidth : cameraDock.maxWidth;
- setCameraMaxWidth(newCameraMaxWidth);
-
- if (isCameraLeftOrRight && cameraDock.width > newCameraMaxWidth) {
- layoutContextDispatch(
- {
- type: ACTIONS.SET_CAMERA_DOCK_SIZE,
- value: {
- width: newCameraMaxWidth,
- height: cameraDock.height,
- browserWidth: window.innerWidth,
- browserHeight: window.innerHeight,
- },
- },
- );
- Storage.setItem('webcamSize', { width: newCameraMaxWidth, height: lastHeight });
- }
-
- const cams = document.getElementById('cameraDock');
- cams?.setAttribute("data-position", cameraDock.position);
- }, [cameraDock.position, cameraDock.maxWidth, isPresenter, displayPresentation]);
-
- const handleVideoFocus = (id) => {
- layoutContextDispatch({
- type: ACTIONS.SET_FOCUSED_CAMERA_ID,
- value: focusedId !== id ? id : false,
- });
- }
-
- const onResizeHandle = (deltaWidth, deltaHeight) => {
- if (cameraDock.resizableEdge.top || cameraDock.resizableEdge.bottom) {
- layoutContextDispatch(
- {
- type: ACTIONS.SET_CAMERA_DOCK_SIZE,
- value: {
- width: cameraDock.width,
- height: resizeStart.height + deltaHeight,
- browserWidth: window.innerWidth,
- browserHeight: window.innerHeight,
- },
- },
- );
- }
- if (cameraDock.resizableEdge.left || cameraDock.resizableEdge.right) {
- layoutContextDispatch(
- {
- type: ACTIONS.SET_CAMERA_DOCK_SIZE,
- value: {
- width: resizeStart.width + deltaWidth,
- height: cameraDock.height,
- browserWidth: window.innerWidth,
- browserHeight: window.innerHeight,
- },
- },
- );
- }
- };
-
- const handleWebcamDragStart = () => {
- setIsDragging(true);
- document.body.style.overflow = 'hidden';
- layoutContextDispatch({
- type: ACTIONS.SET_CAMERA_DOCK_IS_DRAGGING,
- value: true,
- });
- };
-
- const handleWebcamDragStop = (e) => {
- setIsDragging(false);
- setDraggedAtLeastOneTime(false);
- document.body.style.overflow = 'auto';
-
- if (Object.values(CAMERADOCK_POSITION).includes(e.target.id) && draggedAtLeastOneTime) {
- const layout = document.getElementById('layout');
- layout?.setAttribute("data-cam-position", e?.target?.id);
-
- layoutContextDispatch({
- type: ACTIONS.SET_CAMERA_DOCK_POSITION,
- value: e.target.id,
- });
- }
-
- layoutContextDispatch({
- type: ACTIONS.SET_CAMERA_DOCK_IS_DRAGGING,
- value: false,
- });
- };
-
- let draggableOffset = {
- left: isDragging && (isCameraTopOrBottom || isCameraSidebar)
- ? ((cameraDock.width - cameraSize.width) / 2)
- : 0,
- top: isDragging && isCameraLeftOrRight
- ? ((cameraDock.height - cameraSize.height) / 2)
- : 0,
- };
-
- if (isRTL) {
- draggableOffset.left = draggableOffset.left * -1;
- }
- const isIphone = !!(navigator.userAgent.match(/iPhone/i));
-
- const mobileWidth = `${isDragging ? cameraSize.width : cameraDock.width}pt`;
- const mobileHeight = `${isDragging ? cameraSize.height : cameraDock.height}pt`;
- const isDesktopWidth = isDragging ? cameraSize.width : cameraDock.width;
- const isDesktopHeight = isDragging ? cameraSize.height : cameraDock.height;
- const camOpacity = isDragging ? 0.5 : undefined;
- return (
- <>
- {isDragging ? : null}
-
- {
- if (!draggedAtLeastOneTime) {
- setDraggedAtLeastOneTime(true);
- }
- }}
- onStop={handleWebcamDragStop}
- onMouseDown={
- cameraDock.isDraggable ? (e) => e.preventDefault() : undefined
- }
- disabled={!cameraDock.isDraggable || isResizing || isFullscreen}
- position={
- {
- x: cameraDock.left - cameraDock.right + draggableOffset.left,
- y: cameraDock.top + draggableOffset.top,
- }
- }
- >
- {
- setIsResizing(true);
- setResizeStart({ width: cameraDock.width, height: cameraDock.height });
- onResizeHandle(cameraDock.width, cameraDock.height);
- layoutContextDispatch({
- type: ACTIONS.SET_CAMERA_DOCK_IS_RESIZING,
- value: true,
- });
- }}
- onResize={(e, direction, ref, d) => {
- onResizeHandle(d.width, d.height);
- }}
- onResizeStop={() => {
- setResizeStart({ width: 0, height: 0 });
- setTimeout(() => setIsResizing(false), 500);
- layoutContextDispatch({
- type: ACTIONS.SET_CAMERA_DOCK_IS_RESIZING,
- value: false,
- });
- }}
- enable={{
- top: !isFullscreen && !isDragging && !swapLayout && cameraDock.resizableEdge.top,
- bottom: !isFullscreen && !isDragging && !swapLayout
- && cameraDock.resizableEdge.bottom,
- left: !isFullscreen && !isDragging && !swapLayout && cameraDock.resizableEdge.left,
- right: !isFullscreen && !isDragging && !swapLayout && cameraDock.resizableEdge.right,
- topLeft: false,
- topRight: false,
- bottomLeft: false,
- bottomRight: false,
- }}
- style={{
- position: 'absolute',
- zIndex: isCameraSidebar && !isDragging ? 0 : cameraDock.zIndex,
- }}
- >
-
-
-
-
-
-
- >
- );
-};
-
-export default WebcamComponent;
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/component.tsx b/bigbluebutton-html5/imports/ui/components/webcam/component.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/component.tsx
rename to bigbluebutton-html5/imports/ui/components/webcam/component.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/container.jsx b/bigbluebutton-html5/imports/ui/components/webcam/container.jsx
deleted file mode 100644
index 35b07c9c5e..0000000000
--- a/bigbluebutton-html5/imports/ui/components/webcam/container.jsx
+++ /dev/null
@@ -1,100 +0,0 @@
-import React from 'react';
-import { withTracker } from 'meteor/react-meteor-data';
-import VideoService from '/imports/ui/components/video-provider/service';
-import {
- layoutSelect,
- layoutSelectInput,
- layoutSelectOutput,
- layoutDispatch,
-} from '../layout/context';
-import WebcamComponent from '/imports/ui/components/webcam/component';
-import { LAYOUT_TYPE } from '../layout/enums';
-import { sortVideoStreams } from '/imports/ui/components/video-provider/stream-sorting';
-import {
- CURRENT_PRESENTATION_PAGE_SUBSCRIPTION,
-} from '/imports/ui/components/whiteboard/queries';
-import useCurrentUser from '/imports/ui/core/hooks/useCurrentUser';
-import WebcamContainerGraphql from './webcam-graphql/component';
-import useDeduplicatedSubscription from '../../core/hooks/useDeduplicatedSubscription';
-
-const WebcamContainer = ({
- audioModalIsOpen,
- usersVideo,
- layoutType,
- isLayoutSwapped,
-}) => {
- const fullscreen = layoutSelect((i) => i.fullscreen);
- const isRTL = layoutSelect((i) => i.isRTL);
- const cameraDockInput = layoutSelectInput((i) => i.cameraDock);
- const presentation = layoutSelectOutput((i) => i.presentation);
- const cameraDock = layoutSelectOutput((i) => i.cameraDock);
- const layoutContextDispatch = layoutDispatch();
- const { data: presentationPageData } = useDeduplicatedSubscription(
- CURRENT_PRESENTATION_PAGE_SUBSCRIPTION,
- );
- const presentationPage = presentationPageData?.pres_page_curr[0] || {};
- const hasPresentation = !!presentationPage?.presentationId;
-
- const swapLayout = !hasPresentation || isLayoutSwapped;
-
- let floatingOverlay = false;
- let hideOverlay = false;
-
- if (swapLayout) {
- floatingOverlay = true;
- hideOverlay = true;
- }
-
- const { cameraOptimalGridSize } = cameraDockInput;
- const { display: displayPresentation } = presentation;
-
- const { data: currentUserData } = useCurrentUser((user) => ({
- presenter: user.presenter,
- }));
-
- const isGridEnabled = layoutType === LAYOUT_TYPE.VIDEO_FOCUS;
-
- return !audioModalIsOpen
- && (usersVideo.length > 0 || isGridEnabled)
- ? (
-
- )
- : null;
-};
-
-withTracker(() => {
- const data = {
- audioModalIsOpen: Session.get('audioModalIsOpen'),
- isMeteorConnected: Meteor.status().connected,
- };
-
- const { streams: usersVideo, gridUsers } = VideoService.getVideoStreams();
- const { defaultSorting: DEFAULT_SORTING } = window.meetingClientSettings.public.kurento.cameraSortingModes;
-
- if (gridUsers.length > 0) {
- const items = usersVideo.concat(gridUsers);
- data.usersVideo = sortVideoStreams(items, DEFAULT_SORTING);
- } else {
- data.usersVideo = usersVideo;
- }
-
- return data;
-})(WebcamContainer);
-
-export default WebcamContainerGraphql;
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/component.jsx b/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/component.jsx
deleted file mode 100644
index a68ef7079a..0000000000
--- a/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/component.jsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { defineMessages, injectIntl } from 'react-intl';
-import Styled from './styles';
-
-const intlMessages = defineMessages({
- dropZoneLabel: {
- id: 'app.video.dropZoneLabel',
- description: 'message showing where the user can drop cameraDock',
- },
-});
-
-const DropArea = ({
- id, dataTest, style, intl,
-}) => (
- <>
-
-
- {intl.formatMessage(intlMessages.dropZoneLabel)}
-
- >
-);
-
-export default injectIntl(DropArea);
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/drop-areas/component.tsx b/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/component.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/drop-areas/component.tsx
rename to bigbluebutton-html5/imports/ui/components/webcam/drop-areas/component.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/container.jsx b/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/container.jsx
deleted file mode 100644
index 6cf740c927..0000000000
--- a/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/container.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import React from 'react';
-import { layoutSelectOutput } from '../../layout/context';
-import DropArea from './component';
-
-const DropAreaContainer = () => {
- const dropZoneAreas = layoutSelectOutput((i) => i.dropZoneAreas);
-
- return (
- Object.keys(dropZoneAreas).map((objectKey) => (
-
- ))
- );
-};
-
-export default DropAreaContainer;
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/drop-areas/container.tsx b/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/container.tsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/drop-areas/container.tsx
rename to bigbluebutton-html5/imports/ui/components/webcam/drop-areas/container.tsx
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/styles.js b/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/styles.js
deleted file mode 100644
index 42dbdadc3e..0000000000
--- a/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/styles.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import styled from 'styled-components';
-import { colorWhite } from '/imports/ui/stylesheets/styled-components/palette';
-
-const DropZoneArea = styled.div`
- position: absolute;
- background: transparent;
- -webkit-box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, .2);
- -moz-box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, .2);
- box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, .2);
- font-weight: bold;
- font-family: sans-serif;
- display: flex;
- align-items: center;
- justify-content: center;
- cursor: grabbing;
-
- &:hover {
- background-color: rgba(0, 0, 0, .1);
- }
-`;
-
-const DropZoneBg = styled.div`
- position: absolute;
- background-color: rgba(0, 0, 0, .5);
- -webkit-box-shadow: inset 0px 0px 0px 1px #666;
- -moz-box-shadow: inset 0px 0px 0px 1px #666;
- box-shadow: inset 0px 0px 0px 1px #666;
- color: ${colorWhite};
- font-weight: bold;
- font-family: sans-serif;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: hidden;
-`;
-
-export default {
- DropZoneArea,
- DropZoneBg,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/drop-areas/styles.ts b/bigbluebutton-html5/imports/ui/components/webcam/drop-areas/styles.ts
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/drop-areas/styles.ts
rename to bigbluebutton-html5/imports/ui/components/webcam/drop-areas/styles.ts
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/styles.js b/bigbluebutton-html5/imports/ui/components/webcam/styles.js
deleted file mode 100644
index 825f648463..0000000000
--- a/bigbluebutton-html5/imports/ui/components/webcam/styles.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import styled from 'styled-components';
-
-const Draggable = styled.div`
- ${({ isDraggable }) => isDraggable && `
- & > video {
- cursor: grabbing;
- }
- `}
-
- ${({ isDragging }) => isDragging && `
- background-color: rgba(200, 200, 200, 0.5);
- `}
-`;
-
-const ResizableWrapper = styled.div`
- ${({ horizontal }) => horizontal && `
- & > div span div {
- &:hover {
- background-color: rgba(255, 255, 255, .3);
- }
- width: 100% !important;
- }
- `}
-
- ${({ vertical }) => vertical && `
- & > div span div {
- &:hover {
- background-color: rgba(255, 255, 255, .3);
- }
- height: 100% !important;
- }
- `}
-`;
-
-export default {
- Draggable,
- ResizableWrapper,
-};
diff --git a/bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/styles.ts b/bigbluebutton-html5/imports/ui/components/webcam/styles.ts
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/webcam/webcam-graphql/styles.ts
rename to bigbluebutton-html5/imports/ui/components/webcam/styles.ts