feat(Filmstrip): Collapse filmstrip to avoid toolbar overlap on mobile
This commit is contained in:
parent
1e76dc0aa2
commit
2209394d09
|
@ -46,6 +46,7 @@ $menuBG:#242528;
|
||||||
$newToolbarFontSize: 24px;
|
$newToolbarFontSize: 24px;
|
||||||
$newToolbarHangupFontSize: 32px;
|
$newToolbarHangupFontSize: 32px;
|
||||||
$newToolbarSize: 48px;
|
$newToolbarSize: 48px;
|
||||||
|
$newToolbarSizeMobile: 60px;
|
||||||
$newToolbarSizeWithPadding: calc(#{$newToolbarSize} + 24px);
|
$newToolbarSizeWithPadding: calc(#{$newToolbarSize} + 24px);
|
||||||
$toolbarTitleFontSize: 19px;
|
$toolbarTitleFontSize: 19px;
|
||||||
$overflowMenuItemColor: #fff;
|
$overflowMenuItemColor: #fff;
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
transition: margin-bottom .3s ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
.filmstrip {
|
.filmstrip {
|
||||||
|
@ -52,11 +53,23 @@
|
||||||
margin-left: $sidebarWidth;
|
margin-left: $sidebarWidth;
|
||||||
width: calc(100% - #{$sidebarWidth});
|
width: calc(100% - #{$sidebarWidth});
|
||||||
|
|
||||||
.remote-videos{
|
.remote-videos {
|
||||||
width: calc(100vw - #{$sidebarWidth});
|
width: calc(100vw - #{$sidebarWidth});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.collapse {
|
||||||
|
#remoteVideos {
|
||||||
|
height: calc(100% - #{$newToolbarSizeMobile}) !important;
|
||||||
|
margin-bottom: $newToolbarSizeMobile;
|
||||||
|
}
|
||||||
|
|
||||||
|
.remote-videos {
|
||||||
|
// !important is needed here as overflow is set via element.style in a FixedSizeGrid.
|
||||||
|
overflow: hidden auto !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
sendAnalytics
|
sendAnalytics
|
||||||
} from '../../../analytics';
|
} from '../../../analytics';
|
||||||
import { getToolbarButtons } from '../../../base/config';
|
import { getToolbarButtons } from '../../../base/config';
|
||||||
|
import { isMobileBrowser } from '../../../base/environment/utils';
|
||||||
import { translate } from '../../../base/i18n';
|
import { translate } from '../../../base/i18n';
|
||||||
import { Icon, IconMenuDown, IconMenuUp } from '../../../base/icons';
|
import { Icon, IconMenuDown, IconMenuUp } from '../../../base/icons';
|
||||||
import { connect } from '../../../base/redux';
|
import { connect } from '../../../base/redux';
|
||||||
|
@ -17,7 +18,13 @@ import { showToolbox } from '../../../toolbox/actions.web';
|
||||||
import { isButtonEnabled, isToolboxVisible } from '../../../toolbox/functions.web';
|
import { isButtonEnabled, isToolboxVisible } from '../../../toolbox/functions.web';
|
||||||
import { LAYOUTS, getCurrentLayout } from '../../../video-layout';
|
import { LAYOUTS, getCurrentLayout } from '../../../video-layout';
|
||||||
import { setFilmstripVisible, setVisibleRemoteParticipants } from '../../actions';
|
import { setFilmstripVisible, setVisibleRemoteParticipants } from '../../actions';
|
||||||
import { TILE_HORIZONTAL_MARGIN, TILE_VERTICAL_MARGIN, TOOLBAR_HEIGHT } from '../../constants';
|
import {
|
||||||
|
ASPECT_RATIO_BREAKPOINT,
|
||||||
|
TILE_HORIZONTAL_MARGIN,
|
||||||
|
TILE_VERTICAL_MARGIN,
|
||||||
|
TOOLBAR_HEIGHT,
|
||||||
|
TOOLBAR_HEIGHT_MOBILE
|
||||||
|
} from '../../constants';
|
||||||
import { shouldRemoteVideosBeVisible } from '../../functions';
|
import { shouldRemoteVideosBeVisible } from '../../functions';
|
||||||
|
|
||||||
import AudioTracksContainer from './AudioTracksContainer';
|
import AudioTracksContainer from './AudioTracksContainer';
|
||||||
|
@ -485,10 +492,6 @@ function _mapStateToProps(state) {
|
||||||
const reduceHeight = state['features/toolbox'].visible && toolbarButtons.length;
|
const reduceHeight = state['features/toolbox'].visible && toolbarButtons.length;
|
||||||
const remoteVideosVisible = shouldRemoteVideosBeVisible(state);
|
const remoteVideosVisible = shouldRemoteVideosBeVisible(state);
|
||||||
const { isOpen: shiftRight } = state['features/chat'];
|
const { isOpen: shiftRight } = state['features/chat'];
|
||||||
const className = `${remoteVideosVisible ? '' : 'hide-videos'} ${
|
|
||||||
reduceHeight ? 'reduce-height' : ''
|
|
||||||
} ${shiftRight ? 'shift-right' : ''}`.trim();
|
|
||||||
const videosClassName = `filmstrip__videos${visible ? '' : ' hidden'}`;
|
|
||||||
const {
|
const {
|
||||||
gridDimensions = {},
|
gridDimensions = {},
|
||||||
filmstripHeight,
|
filmstripHeight,
|
||||||
|
@ -496,12 +499,35 @@ function _mapStateToProps(state) {
|
||||||
thumbnailSize: tileViewThumbnailSize
|
thumbnailSize: tileViewThumbnailSize
|
||||||
} = state['features/filmstrip'].tileViewDimensions;
|
} = state['features/filmstrip'].tileViewDimensions;
|
||||||
const _currentLayout = getCurrentLayout(state);
|
const _currentLayout = getCurrentLayout(state);
|
||||||
|
|
||||||
|
const { clientHeight, clientWidth } = state['features/base/responsive-ui'];
|
||||||
|
const availableSpace = clientHeight - filmstripHeight;
|
||||||
|
let filmstripPadding = 0;
|
||||||
|
|
||||||
|
if (availableSpace > 0) {
|
||||||
|
const paddingValue = TOOLBAR_HEIGHT_MOBILE - availableSpace;
|
||||||
|
|
||||||
|
if (paddingValue > 0) {
|
||||||
|
filmstripPadding = paddingValue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
filmstripPadding = TOOLBAR_HEIGHT_MOBILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const collapseTileView = reduceHeight
|
||||||
|
&& isMobileBrowser()
|
||||||
|
&& clientWidth <= ASPECT_RATIO_BREAKPOINT;
|
||||||
|
|
||||||
|
const className = `${remoteVideosVisible ? '' : 'hide-videos'} ${
|
||||||
|
reduceHeight ? 'reduce-height' : ''
|
||||||
|
} ${shiftRight ? 'shift-right' : ''} ${collapseTileView ? 'collapse' : ''}`.trim();
|
||||||
|
const videosClassName = `filmstrip__videos${visible ? '' : ' hidden'}`;
|
||||||
let _thumbnailSize, remoteFilmstripHeight, remoteFilmstripWidth;
|
let _thumbnailSize, remoteFilmstripHeight, remoteFilmstripWidth;
|
||||||
|
|
||||||
switch (_currentLayout) {
|
switch (_currentLayout) {
|
||||||
case LAYOUTS.TILE_VIEW:
|
case LAYOUTS.TILE_VIEW:
|
||||||
_thumbnailSize = tileViewThumbnailSize;
|
_thumbnailSize = tileViewThumbnailSize;
|
||||||
remoteFilmstripHeight = filmstripHeight;
|
remoteFilmstripHeight = filmstripHeight - (collapseTileView && filmstripPadding > 0 ? filmstripPadding : 0);
|
||||||
remoteFilmstripWidth = filmstripWidth;
|
remoteFilmstripWidth = filmstripWidth;
|
||||||
break;
|
break;
|
||||||
case LAYOUTS.VERTICAL_FILMSTRIP_VIEW: {
|
case LAYOUTS.VERTICAL_FILMSTRIP_VIEW: {
|
||||||
|
|
|
@ -163,6 +163,11 @@ export const TILE_HORIZONTAL_MARGIN = 4;
|
||||||
*/
|
*/
|
||||||
export const TOOLBAR_HEIGHT = 72;
|
export const TOOLBAR_HEIGHT = 72;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The height of the whole toolbar.
|
||||||
|
*/
|
||||||
|
export const TOOLBAR_HEIGHT_MOBILE = 60;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The size of the horizontal border of a thumbnail.
|
* The size of the horizontal border of a thumbnail.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue