ref(Conference): extract AbstractConference

This commit is contained in:
paweldomas 2019-02-07 16:52:31 -06:00 committed by Zoltan Bettenbuk
parent 64f8a8d700
commit 15fd27543a
3 changed files with 56 additions and 69 deletions

View File

@ -0,0 +1,40 @@
// @flow
import { shouldDisplayTileView } from '../../video-layout';
/**
* The type of the React {@code Component} props of {@link AbstractLabels}.
*/
export type AbstractProps = {
/**
* Conference room name.
*
* @protected
* @type {string}
*/
_room: string,
/**
* Whether or not the layout should change to support tile view mode.
*
* @protected
* @type {boolean}
*/
_shouldDisplayTileView: boolean
};
/**
* Maps (parts of) the redux state to the associated props of the {@link Labels}
* {@code Component}.
*
* @param {Object} state - The redux state.
* @private
* @returns {AbstractProps}
*/
export function abstractMapStateToProps(state: Object) {
return {
_room: state['features/base/conference'].room,
_shouldDisplayTileView: shouldDisplayTileView(state)
};
}

View File

@ -25,17 +25,19 @@ import { LargeVideo } from '../../../large-video';
import { AddPeopleDialog, CalleeInfoContainer } from '../../../invite'; import { AddPeopleDialog, CalleeInfoContainer } from '../../../invite';
import { Captions } from '../../../subtitles'; import { Captions } from '../../../subtitles';
import { setToolboxVisible, Toolbox } from '../../../toolbox'; import { setToolboxVisible, Toolbox } from '../../../toolbox';
import { shouldDisplayTileView } from '../../../video-layout';
import { abstractMapStateToProps } from '../AbstractConference';
import DisplayNameLabel from './DisplayNameLabel'; import DisplayNameLabel from './DisplayNameLabel';
import Labels from './Labels'; import Labels from './Labels';
import NavigationBar from './NavigationBar'; import NavigationBar from './NavigationBar';
import styles from './styles'; import styles from './styles';
import type { AbstractProps } from '../AbstractConference';
/** /**
* The type of the React {@code Component} props of {@link Conference}. * The type of the React {@code Component} props of {@link Conference}.
*/ */
type Props = { type Props = AbstractProps & {
/** /**
* The indicator which determines that we are still connecting to the * The indicator which determines that we are still connecting to the
@ -103,13 +105,6 @@ type Props = {
*/ */
_reducedUI: boolean, _reducedUI: boolean,
/**
* The current conference room name.
*
* @private
*/
_room: string,
/** /**
* The handler which dispatches the (redux) action {@link setToolboxVisible} * The handler which dispatches the (redux) action {@link setToolboxVisible}
* to show/hide the {@link Toolbox}. * to show/hide the {@link Toolbox}.
@ -121,13 +116,6 @@ type Props = {
*/ */
_setToolboxVisible: Function, _setToolboxVisible: Function,
/**
* Whether or not the layout should change to support tile view mode.
*
* @private
*/
_shouldDisplayTileView: boolean,
/** /**
* The indicator which determines whether the Toolbox is visible. * The indicator which determines whether the Toolbox is visible.
* *
@ -424,16 +412,7 @@ function _mapDispatchToProps(dispatch) {
* *
* @param {Object} state - The redux state. * @param {Object} state - The redux state.
* @private * @private
* @returns {{ * @returns {Props}
* _connecting: boolean,
* _filmstripVisible: boolean,
* _locationURL: URL,
* _participantCount: number,
* _reducedUI: boolean,
* _room: string,
* _toolboxVisible: boolean,
* _toolboxAlwaysVisible: boolean
* }}
*/ */
function _mapStateToProps(state) { function _mapStateToProps(state) {
const { connecting, connection, locationURL } const { connecting, connection, locationURL }
@ -441,8 +420,7 @@ function _mapStateToProps(state) {
const { const {
conference, conference,
joining, joining,
leaving, leaving
room
} = state['features/base/conference']; } = state['features/base/conference'];
const { reducedUI } = state['features/base/responsive-ui']; const { reducedUI } = state['features/base/responsive-ui'];
const { alwaysVisible, visible } = state['features/toolbox']; const { alwaysVisible, visible } = state['features/toolbox'];
@ -460,6 +438,8 @@ function _mapStateToProps(state) {
= connecting || (connection && (joining || (!conference && !leaving))); = connecting || (connection && (joining || (!conference && !leaving)));
return { return {
...abstractMapStateToProps(state),
/** /**
* The indicator which determines that we are still connecting to the * The indicator which determines that we are still connecting to the
* conference which includes establishing the XMPP connection and then * conference which includes establishing the XMPP connection and then
@ -501,22 +481,6 @@ function _mapStateToProps(state) {
*/ */
_reducedUI: reducedUI, _reducedUI: reducedUI,
/**
* The current conference room name.
*
* @private
* @type {string}
*/
_room: room,
/**
* Whether or not the layout should change to support tile view mode.
*
* @private
* @type {boolean}
*/
_shouldDisplayTileView: shouldDisplayTileView(state),
/** /**
* The indicator which determines whether the Toolbox is visible. * The indicator which determines whether the Toolbox is visible.
* *

View File

@ -14,11 +14,7 @@ import { Filmstrip } from '../../../filmstrip';
import { CalleeInfoContainer } from '../../../invite'; import { CalleeInfoContainer } from '../../../invite';
import { LargeVideo } from '../../../large-video'; import { LargeVideo } from '../../../large-video';
import { NotificationsContainer } from '../../../notifications'; import { NotificationsContainer } from '../../../notifications';
import { import { LAYOUTS, getCurrentLayout } from '../../../video-layout';
LAYOUTS,
getCurrentLayout,
shouldDisplayTileView
} from '../../../video-layout';
import { import {
Toolbox, Toolbox,
@ -32,6 +28,9 @@ import { maybeShowSuboptimalExperienceNotification } from '../../functions';
import Labels from './Labels'; import Labels from './Labels';
import { default as Notice } from './Notice'; import { default as Notice } from './Notice';
import { default as Subject } from './Subject'; import { default as Subject } from './Subject';
import { abstractMapStateToProps } from '../AbstractConference';
import type { AbstractProps } from '../AbstractConference';
declare var APP: Object; declare var APP: Object;
declare var config: Object; declare var config: Object;
@ -68,7 +67,7 @@ const LAYOUT_CLASSNAMES = {
/** /**
* The type of the React {@code Component} props of {@link Conference}. * The type of the React {@code Component} props of {@link Conference}.
*/ */
type Props = { type Props = AbstractProps & {
/** /**
* Whether the local participant is recording the conference. * Whether the local participant is recording the conference.
@ -81,16 +80,6 @@ type Props = {
*/ */
_layoutClassName: string, _layoutClassName: string,
/**
* Conference room name.
*/
_room: string,
/**
* Whether or not the current UI layout should be in tile view.
*/
_shouldDisplayTileView: boolean,
dispatch: Function, dispatch: Function,
t: Function t: Function
} }
@ -290,21 +279,15 @@ class Conference extends Component<Props> {
* *
* @param {Object} state - The Redux state. * @param {Object} state - The Redux state.
* @private * @private
* @returns {{ * @returns {Props}
* _iAmRecorder: boolean,
* _layoutClassName: string,
* _room: ?string,
* _shouldDisplayTileView: boolean
* }}
*/ */
function _mapStateToProps(state) { function _mapStateToProps(state) {
const currentLayout = getCurrentLayout(state); const currentLayout = getCurrentLayout(state);
return { return {
...abstractMapStateToProps(state),
_iAmRecorder: state['features/base/config'].iAmRecorder, _iAmRecorder: state['features/base/config'].iAmRecorder,
_layoutClassName: LAYOUT_CLASSNAMES[currentLayout], _layoutClassName: LAYOUT_CLASSNAMES[currentLayout]
_room: state['features/base/conference'].room,
_shouldDisplayTileView: shouldDisplayTileView(state)
}; };
} }