refactor: move chat component outside of videoconference_page (#11138)
This commit is contained in:
parent
9278414821
commit
3eafaeeedd
|
@ -43,18 +43,6 @@ body {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* AtlasKit sets a default margin on the rendered modals, so
|
|
||||||
* when the shift-right class is set when the chat opens, we
|
|
||||||
* pad the modal container in order for the modals to be centered
|
|
||||||
* while also taking the chat size into consideration.
|
|
||||||
*/
|
|
||||||
@media (min-width: 581px) {
|
|
||||||
.shift-right .atlaskit-portal > div:not(.Tooltip) {
|
|
||||||
padding-left: $sidebarWidth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.jitsi-icon {
|
.jitsi-icon {
|
||||||
&-default svg {
|
&-default svg {
|
||||||
fill: white;
|
fill: white;
|
||||||
|
|
|
@ -1,15 +1,20 @@
|
||||||
#sideToolbarContainer {
|
#sideToolbarContainer {
|
||||||
background-color: $chatBackgroundColor;
|
background-color: $chatBackgroundColor;
|
||||||
box-sizing: border-box;
|
flex-shrink: 0;
|
||||||
color: #FFF;
|
overflow: hidden;
|
||||||
height: 100%;
|
position: relative;
|
||||||
position: absolute;
|
transition: width .16s ease-in-out;
|
||||||
top: 0;
|
|
||||||
width: $sidebarWidth;
|
width: $sidebarWidth;
|
||||||
z-index: $sideToolbarContainerZ;
|
z-index: $sideToolbarContainerZ;
|
||||||
|
|
||||||
@media (max-width: 580px) {
|
@media (max-width: 580px) {
|
||||||
width: 100%;
|
height: 100vh;
|
||||||
|
height: -webkit-fill-available;
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
width: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -193,3 +193,17 @@
|
||||||
@mixin transparentBg($color, $alpha) {
|
@mixin transparentBg($color, $alpha) {
|
||||||
background-color: rgba(red($color), green($color), blue($color), $alpha);
|
background-color: rgba(red($color), green($color), blue($color), $alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the direction of the current element to LTR, but do not change the direction
|
||||||
|
* of its children; Keep them RTL.
|
||||||
|
*/
|
||||||
|
@mixin ltr {
|
||||||
|
body[dir=rtl] & {
|
||||||
|
direction: ltr;
|
||||||
|
|
||||||
|
& > * {
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -6,10 +6,6 @@
|
||||||
transition: width .16s ease-in-out;
|
transition: width .16s ease-in-out;
|
||||||
width: 315px;
|
width: 315px;
|
||||||
z-index: $zindex0;
|
z-index: $zindex0;
|
||||||
|
|
||||||
&--closed {
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.participants_pane-content {
|
.participants_pane-content {
|
||||||
|
@ -34,11 +30,6 @@
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
width: auto;
|
width: auto;
|
||||||
|
|
||||||
&--closed {
|
|
||||||
display: none;
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.participants_pane-content {
|
.participants_pane-content {
|
||||||
|
|
|
@ -88,10 +88,6 @@
|
||||||
max-width: calc(100% - 24px);
|
max-width: calc(100% - 24px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.shift-right .details-container {
|
|
||||||
margin-left: calc(#{$sidebarWidth} / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes hideSubject {
|
@keyframes hideSubject {
|
||||||
0% {
|
0% {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
|
|
|
@ -39,13 +39,6 @@
|
||||||
&.no-buttons {
|
&.no-buttons {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 581px) {
|
|
||||||
&.shift-right {
|
|
||||||
margin-left: $sidebarWidth;
|
|
||||||
width: calc(100% - #{$sidebarWidth});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.toolbox-content {
|
.toolbox-content {
|
||||||
|
@ -99,6 +92,10 @@
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
pointer-events: all;
|
pointer-events: all;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
|
|
||||||
|
.toolbox-content-items {
|
||||||
|
@include ltr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.toolbox-content-wrapper::after {
|
.toolbox-content-wrapper::after {
|
||||||
|
@ -183,6 +180,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.toolbox-content-items {
|
.toolbox-content-items {
|
||||||
|
@include ltr;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#layout_wrapper {
|
#layout_wrapper {
|
||||||
|
@include ltr;
|
||||||
display: flex;
|
display: flex;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
@ -44,15 +45,6 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
overflow: 'hidden';
|
overflow: 'hidden';
|
||||||
|
|
||||||
@media (min-width: 581px) {
|
|
||||||
&.shift-right {
|
|
||||||
&#largeVideoContainer {
|
|
||||||
margin-left: $sidebarWidth;
|
|
||||||
width: calc(100% - #{$sidebarWidth});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#localVideoWrapper {
|
#localVideoWrapper {
|
||||||
|
|
|
@ -41,17 +41,6 @@
|
||||||
top: 0;
|
top: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
@media (min-width: 581px) {
|
|
||||||
&.shift-right {
|
|
||||||
margin-left: $sidebarWidth;
|
|
||||||
width: calc(100% - #{$sidebarWidth});
|
|
||||||
|
|
||||||
.remote-videos {
|
|
||||||
width: calc(100vw - #{$sidebarWidth});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.collapse {
|
&.collapse {
|
||||||
#remoteVideos {
|
#remoteVideos {
|
||||||
height: calc(100% - #{$newToolbarSizeMobile}) !important;
|
height: calc(100% - #{$newToolbarSizeMobile}) !important;
|
||||||
|
|
|
@ -137,6 +137,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.toolbox-content-items {
|
.toolbox-content-items {
|
||||||
|
@include ltr;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
@ -230,13 +230,13 @@ class Conference extends AbstractConference<Props, *> {
|
||||||
onMouseEnter = { this._onMouseEnter }
|
onMouseEnter = { this._onMouseEnter }
|
||||||
onMouseLeave = { this._onMouseLeave }
|
onMouseLeave = { this._onMouseLeave }
|
||||||
onMouseMove = { this._onMouseMove } >
|
onMouseMove = { this._onMouseMove } >
|
||||||
|
<Chat />
|
||||||
<div
|
<div
|
||||||
className = { clsx(_layoutClassName, _showStageFilmstrip && 'stage-filmstrip') }
|
className = { clsx(_layoutClassName, _showStageFilmstrip && 'stage-filmstrip') }
|
||||||
id = 'videoconference_page'
|
id = 'videoconference_page'
|
||||||
onMouseMove = { isMobileBrowser() ? undefined : this._onShowToolbar }
|
onMouseMove = { isMobileBrowser() ? undefined : this._onShowToolbar }
|
||||||
ref = { this._setBackground }>
|
ref = { this._setBackground }>
|
||||||
<ConferenceInfo />
|
<ConferenceInfo />
|
||||||
|
|
||||||
<Notice />
|
<Notice />
|
||||||
<div
|
<div
|
||||||
id = 'videospace'
|
id = 'videospace'
|
||||||
|
@ -247,7 +247,6 @@ class Conference extends AbstractConference<Props, *> {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{ _showPrejoin || _showLobby || <Toolbox /> }
|
{ _showPrejoin || _showLobby || <Toolbox /> }
|
||||||
<Chat />
|
|
||||||
|
|
||||||
{_notificationsVisible && (_overflowDrawer
|
{_notificationsVisible && (_overflowDrawer
|
||||||
? <JitsiPortal className = 'notification-portal'>
|
? <JitsiPortal className = 'notification-portal'>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
import { FlagGroupContext } from '@atlaskit/flag/flag-group';
|
import { FlagGroupContext } from '@atlaskit/flag/flag-group';
|
||||||
import { AtlasKitThemeProvider } from '@atlaskit/theme';
|
import { AtlasKitThemeProvider } from '@atlaskit/theme';
|
||||||
import { withStyles } from '@material-ui/styles';
|
import { withStyles } from '@material-ui/styles';
|
||||||
|
import clsx from 'clsx';
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import { CSSTransition, TransitionGroup } from 'react-transition-group';
|
import { CSSTransition, TransitionGroup } from 'react-transition-group';
|
||||||
|
|
||||||
|
@ -67,10 +68,6 @@ const useStyles = theme => {
|
||||||
maxWidth: 'calc(100% - 32px)'
|
maxWidth: 'calc(100% - 32px)'
|
||||||
},
|
},
|
||||||
|
|
||||||
containerChatOpen: {
|
|
||||||
left: '331px'
|
|
||||||
},
|
|
||||||
|
|
||||||
transitionGroup: {
|
transitionGroup: {
|
||||||
'& > *': {
|
'& > *': {
|
||||||
marginBottom: '20px',
|
marginBottom: '20px',
|
||||||
|
@ -166,12 +163,9 @@ class NotificationsContainer extends Component<Props> {
|
||||||
<AtlasKitThemeProvider mode = 'light'>
|
<AtlasKitThemeProvider mode = 'light'>
|
||||||
<FlagGroupContext.Provider value = { this._api }>
|
<FlagGroupContext.Provider value = { this._api }>
|
||||||
<div
|
<div
|
||||||
className = { `${this.props.classes.container} ${this.props.portal
|
className = { clsx(this.props.classes.container, {
|
||||||
? this.props.classes.containerPortal
|
[this.props.classes.containerPortal]: this.props.portal
|
||||||
: this.props._isChatOpen
|
}) }
|
||||||
? this.props.classes.containerChatOpen
|
|
||||||
: ''}`
|
|
||||||
}
|
|
||||||
id = 'notifications-container'>
|
id = 'notifications-container'>
|
||||||
<TransitionGroup className = { this.props.classes.transitionGroup }>
|
<TransitionGroup className = { this.props.classes.transitionGroup }>
|
||||||
{this._renderFlags()}
|
{this._renderFlags()}
|
||||||
|
|
|
@ -12,7 +12,7 @@ import { connect } from '../../../base/redux';
|
||||||
import { getBreakoutRoomsConfig } from '../../../breakout-rooms/functions';
|
import { getBreakoutRoomsConfig } from '../../../breakout-rooms/functions';
|
||||||
import { MuteEveryoneDialog } from '../../../video-menu/components/';
|
import { MuteEveryoneDialog } from '../../../video-menu/components/';
|
||||||
import { close } from '../../actions';
|
import { close } from '../../actions';
|
||||||
import { classList, findAncestorByClass, getParticipantsPaneOpen } from '../../functions';
|
import { findAncestorByClass, getParticipantsPaneOpen } from '../../functions';
|
||||||
import { AddBreakoutRoomButton } from '../breakout-rooms/components/web/AddBreakoutRoomButton';
|
import { AddBreakoutRoomButton } from '../breakout-rooms/components/web/AddBreakoutRoomButton';
|
||||||
import { RoomList } from '../breakout-rooms/components/web/RoomList';
|
import { RoomList } from '../breakout-rooms/components/web/RoomList';
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ class ParticipantsPane extends Component<Props, State> {
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className = { classList('participants_pane', !_paneOpen && 'participants_pane--closed') }>
|
<div className = 'participants_pane'>
|
||||||
<div className = 'participants_pane-content'>
|
<div className = 'participants_pane-content'>
|
||||||
<div className = { classes.header }>
|
<div className = { classes.header }>
|
||||||
<div
|
<div
|
||||||
|
|
|
@ -22,14 +22,6 @@ import { isInBreakoutRoom } from '../breakout-rooms/functions';
|
||||||
|
|
||||||
import { QUICK_ACTION_BUTTON, REDUCER_KEY, MEDIA_STATE } from './constants';
|
import { QUICK_ACTION_BUTTON, REDUCER_KEY, MEDIA_STATE } from './constants';
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates a class attribute value.
|
|
||||||
*
|
|
||||||
* @param {Iterable<string>} args - String iterable.
|
|
||||||
* @returns {string} Class attribute value.
|
|
||||||
*/
|
|
||||||
export const classList = (...args: Array<string | boolean>) => args.filter(Boolean).join(' ');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the first styled ancestor component of an element.
|
* Find the first styled ancestor component of an element.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue