fix(filmstrip) Fix resizable filmstrip with shared video (#11124)
Calculate shared video width with the filmstrip width Make resizable filmstrip mouseup event work with shared video iframe
This commit is contained in:
parent
d651ecb166
commit
096ba054db
|
@ -109,3 +109,12 @@ export const SET_FILMSTRIP_WIDTH = 'SET_FILMSTRIP_WIDTH';
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
export const SET_USER_FILMSTRIP_WIDTH = 'SET_USER_FILMSTRIP_WIDTH';
|
export const SET_USER_FILMSTRIP_WIDTH = 'SET_USER_FILMSTRIP_WIDTH';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of action which sets whether the user is resizing or not.
|
||||||
|
* {
|
||||||
|
* type: SET_USER_IS_RESIZING,
|
||||||
|
* resizing: boolean
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
export const SET_USER_IS_RESIZING = 'SET_USER_IS_RESIZING';
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
SET_HORIZONTAL_VIEW_DIMENSIONS,
|
SET_HORIZONTAL_VIEW_DIMENSIONS,
|
||||||
SET_TILE_VIEW_DIMENSIONS,
|
SET_TILE_VIEW_DIMENSIONS,
|
||||||
SET_USER_FILMSTRIP_WIDTH,
|
SET_USER_FILMSTRIP_WIDTH,
|
||||||
|
SET_USER_IS_RESIZING,
|
||||||
SET_VERTICAL_VIEW_DIMENSIONS,
|
SET_VERTICAL_VIEW_DIMENSIONS,
|
||||||
SET_VOLUME
|
SET_VOLUME
|
||||||
} from './actionTypes';
|
} from './actionTypes';
|
||||||
|
@ -242,3 +243,16 @@ export function setUserFilmstripWidth(width: number) {
|
||||||
width
|
width
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether the user is resizing or not.
|
||||||
|
*
|
||||||
|
* @param {boolean} resizing - Whether the user is resizing or not.
|
||||||
|
* @returns {Object}
|
||||||
|
*/
|
||||||
|
export function setUserIsResizing(resizing: boolean) {
|
||||||
|
return {
|
||||||
|
type: SET_USER_IS_RESIZING,
|
||||||
|
resizing
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -21,7 +21,12 @@ import { shouldHideSelfView } from '../../../base/settings/functions.any';
|
||||||
import { showToolbox } from '../../../toolbox/actions.web';
|
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, setUserFilmstripWidth } from '../../actions';
|
import {
|
||||||
|
setFilmstripVisible,
|
||||||
|
setVisibleRemoteParticipants,
|
||||||
|
setUserFilmstripWidth,
|
||||||
|
setUserIsResizing
|
||||||
|
} from '../../actions';
|
||||||
import {
|
import {
|
||||||
ASPECT_RATIO_BREAKPOINT,
|
ASPECT_RATIO_BREAKPOINT,
|
||||||
DEFAULT_FILMSTRIP_WIDTH,
|
DEFAULT_FILMSTRIP_WIDTH,
|
||||||
|
@ -378,6 +383,7 @@ class Filmstrip extends PureComponent <Props, State> {
|
||||||
mousePosition: e.clientX,
|
mousePosition: e.clientX,
|
||||||
dragFilmstripWidth: this.props._verticalFilmstripWidth || DEFAULT_FILMSTRIP_WIDTH
|
dragFilmstripWidth: this.props._verticalFilmstripWidth || DEFAULT_FILMSTRIP_WIDTH
|
||||||
});
|
});
|
||||||
|
this.props.dispatch(setUserIsResizing(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDragMouseUp: () => void;
|
_onDragMouseUp: () => void;
|
||||||
|
@ -392,6 +398,7 @@ class Filmstrip extends PureComponent <Props, State> {
|
||||||
this.setState({
|
this.setState({
|
||||||
isMouseDown: false
|
isMouseDown: false
|
||||||
});
|
});
|
||||||
|
this.props.dispatch(setUserIsResizing(false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import {
|
||||||
SET_REMOTE_PARTICIPANTS,
|
SET_REMOTE_PARTICIPANTS,
|
||||||
SET_TILE_VIEW_DIMENSIONS,
|
SET_TILE_VIEW_DIMENSIONS,
|
||||||
SET_USER_FILMSTRIP_WIDTH,
|
SET_USER_FILMSTRIP_WIDTH,
|
||||||
|
SET_USER_IS_RESIZING,
|
||||||
SET_VERTICAL_VIEW_DIMENSIONS,
|
SET_VERTICAL_VIEW_DIMENSIONS,
|
||||||
SET_VISIBLE_REMOTE_PARTICIPANTS,
|
SET_VISIBLE_REMOTE_PARTICIPANTS,
|
||||||
SET_VOLUME
|
SET_VOLUME
|
||||||
|
@ -33,6 +34,14 @@ const DEFAULT_STATE = {
|
||||||
*/
|
*/
|
||||||
horizontalViewDimensions: {},
|
horizontalViewDimensions: {},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether or not the user is actively resizing the filmstrip.
|
||||||
|
*
|
||||||
|
* @public
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
isResizing: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The custom audio volume levels per participant.
|
* The custom audio volume levels per participant.
|
||||||
*
|
*
|
||||||
|
@ -208,6 +217,12 @@ ReducerRegistry.register(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
case SET_USER_IS_RESIZING: {
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
isResizing: action.resizing
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
|
|
|
@ -5,6 +5,7 @@ import React, { Component } from 'react';
|
||||||
import Filmstrip from '../../../../../modules/UI/videolayout/Filmstrip';
|
import Filmstrip from '../../../../../modules/UI/videolayout/Filmstrip';
|
||||||
import { getLocalParticipant } from '../../../base/participants';
|
import { getLocalParticipant } from '../../../base/participants';
|
||||||
import { connect } from '../../../base/redux';
|
import { connect } from '../../../base/redux';
|
||||||
|
import { getVerticalViewMaxWidth } from '../../../filmstrip/functions.web';
|
||||||
import { getToolboxHeight } from '../../../toolbox/functions.web';
|
import { getToolboxHeight } from '../../../toolbox/functions.web';
|
||||||
|
|
||||||
import VideoManager from './VideoManager';
|
import VideoManager from './VideoManager';
|
||||||
|
@ -29,11 +30,21 @@ type Props = {
|
||||||
*/
|
*/
|
||||||
filmstripVisible: boolean,
|
filmstripVisible: boolean,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The width of the vertical filmstrip.
|
||||||
|
*/
|
||||||
|
filmstripWidth: number,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the video shared by the local user.
|
* Is the video shared by the local user.
|
||||||
*/
|
*/
|
||||||
isOwner: boolean,
|
isOwner: boolean,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether or not the user is actively resizing the filmstrip.
|
||||||
|
*/
|
||||||
|
isResizing: boolean,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The shared video url.
|
* The shared video url.
|
||||||
*/
|
*/
|
||||||
|
@ -56,14 +67,14 @@ class SharedVideo extends Component<Props> {
|
||||||
* }}
|
* }}
|
||||||
*/
|
*/
|
||||||
getDimensions() {
|
getDimensions() {
|
||||||
const { clientHeight, clientWidth, filmstripVisible } = this.props;
|
const { clientHeight, clientWidth, filmstripVisible, filmstripWidth } = this.props;
|
||||||
|
|
||||||
let width;
|
let width;
|
||||||
let height;
|
let height;
|
||||||
|
|
||||||
if (interfaceConfig.VERTICAL_FILMSTRIP) {
|
if (interfaceConfig.VERTICAL_FILMSTRIP) {
|
||||||
if (filmstripVisible) {
|
if (filmstripVisible) {
|
||||||
width = `${clientWidth - Filmstrip.getVerticalFilmstripWidth()}px`;
|
width = `${clientWidth - filmstripWidth}px`;
|
||||||
} else {
|
} else {
|
||||||
width = `${clientWidth}px`;
|
width = `${clientWidth}px`;
|
||||||
}
|
}
|
||||||
|
@ -109,8 +120,8 @@ class SharedVideo extends Component<Props> {
|
||||||
* @returns {React$Element}
|
* @returns {React$Element}
|
||||||
*/
|
*/
|
||||||
render() {
|
render() {
|
||||||
const { isOwner } = this.props;
|
const { isOwner, isResizing } = this.props;
|
||||||
const className = isOwner ? '' : 'disable-pointer';
|
const className = !isResizing && isOwner ? '' : 'disable-pointer';
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
@ -134,7 +145,7 @@ class SharedVideo extends Component<Props> {
|
||||||
function _mapStateToProps(state) {
|
function _mapStateToProps(state) {
|
||||||
const { ownerId, videoUrl } = state['features/shared-video'];
|
const { ownerId, videoUrl } = state['features/shared-video'];
|
||||||
const { clientHeight, clientWidth } = state['features/base/responsive-ui'];
|
const { clientHeight, clientWidth } = state['features/base/responsive-ui'];
|
||||||
const { visible } = state['features/filmstrip'];
|
const { visible, isResizing } = state['features/filmstrip'];
|
||||||
|
|
||||||
const localParticipant = getLocalParticipant(state);
|
const localParticipant = getLocalParticipant(state);
|
||||||
|
|
||||||
|
@ -142,7 +153,9 @@ function _mapStateToProps(state) {
|
||||||
clientHeight,
|
clientHeight,
|
||||||
clientWidth,
|
clientWidth,
|
||||||
filmstripVisible: visible,
|
filmstripVisible: visible,
|
||||||
|
filmstripWidth: getVerticalViewMaxWidth(state),
|
||||||
isOwner: ownerId === localParticipant?.id,
|
isOwner: ownerId === localParticipant?.id,
|
||||||
|
isResizing,
|
||||||
videoUrl
|
videoUrl
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue