From cdc14586de00973beefed5641bdc5614261ff0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Tue, 24 Mar 2020 13:37:24 +0100 Subject: [PATCH] invite: remove duplicated code Add ability to invite users which will use the share sheet or dialog dynamically. --- .../native/LonelyMeetingExperience.js | 21 ++--------- .../invite/{actions.js => actions.any.js} | 0 react/features/invite/actions.native.js | 31 ++++++++++++++++ react/features/invite/actions.web.js | 1 + .../native/AddPeopleDialog.js | 2 +- .../add-people-dialog/native/InviteButton.js | 36 ++----------------- .../toolbox/components/native/OverflowMenu.js | 2 +- 7 files changed, 39 insertions(+), 54 deletions(-) rename react/features/invite/{actions.js => actions.any.js} (100%) create mode 100644 react/features/invite/actions.native.js create mode 100644 react/features/invite/actions.web.js diff --git a/react/features/conference/components/native/LonelyMeetingExperience.js b/react/features/conference/components/native/LonelyMeetingExperience.js index 783892b2b..b9e9c428c 100644 --- a/react/features/conference/components/native/LonelyMeetingExperience.js +++ b/react/features/conference/components/native/LonelyMeetingExperience.js @@ -4,13 +4,11 @@ import React, { PureComponent } from 'react'; import { Text, TouchableOpacity, View } from 'react-native'; import { ColorSchemeRegistry } from '../../../base/color-scheme'; -import { getFeatureFlag, INVITE_ENABLED } from '../../../base/flags'; import { connect } from '../../../base/redux'; import { StyleType } from '../../../base/styles'; import { translate } from '../../../base/i18n'; import { getParticipantCount } from '../../../base/participants'; -import { isAddPeopleEnabled, isDialOutEnabled, setAddPeopleDialogVisible } from '../../../invite'; -import { beginShareRoom } from '../../../share-room'; +import { doInvitePeople } from '../../../invite/actions.native'; import styles from './styles'; import { Icon, IconAddPeople } from '../../../base/icons'; @@ -20,11 +18,6 @@ import { Icon, IconAddPeople } from '../../../base/icons'; */ type Props = { - /** - * True if any of the invite functions are enabled. - */ - _inviteEnabled: boolean, - /** * True if it's a lonely meeting (participant count excluding fakes is 1). */ @@ -112,13 +105,7 @@ class LonelyMeetingExperience extends PureComponent { * @returns {void} */ _onPress() { - const { _inviteEnabled, dispatch } = this.props; - - if (_inviteEnabled) { - dispatch(setAddPeopleDialogVisible(true)); - } else { - dispatch(beginShareRoom()); - } + this.props.dispatch(doInvitePeople()); } } @@ -130,11 +117,7 @@ class LonelyMeetingExperience extends PureComponent { * @returns {Props} */ function _mapStateToProps(state): $Shape { - const _inviteEnabled = getFeatureFlag(state, INVITE_ENABLED, true) - && (isAddPeopleEnabled(state) || isDialOutEnabled(state)); - return { - _inviteEnabled, _isLonelyMeeting: getParticipantCount(state) === 1, _styles: ColorSchemeRegistry.get(state, 'Conference') }; diff --git a/react/features/invite/actions.js b/react/features/invite/actions.any.js similarity index 100% rename from react/features/invite/actions.js rename to react/features/invite/actions.any.js diff --git a/react/features/invite/actions.native.js b/react/features/invite/actions.native.js new file mode 100644 index 000000000..7dcaed85e --- /dev/null +++ b/react/features/invite/actions.native.js @@ -0,0 +1,31 @@ +// @flow + +import type { Dispatch } from 'redux'; + +import { getFeatureFlag, INVITE_ENABLED } from '../base/flags'; +import { beginShareRoom } from '../share-room'; + +import { setAddPeopleDialogVisible } from './actions.any'; +import { isAddPeopleEnabled, isDialOutEnabled } from './functions'; + +export * from './actions.any'; + +/** + * Starts the process for inviting people. Dpending on the sysstem config it + * may use the system share sheet or the invite peoplee dialog. + * + * @returns {Function} + */ +export function doInvitePeople() { + return (dispatch: Dispatch, getState: Function) => { + const state = getState(); + const addPeopleEnabled = getFeatureFlag(state, INVITE_ENABLED, true) + && (isAddPeopleEnabled(state) || isDialOutEnabled(state)); + + if (addPeopleEnabled) { + return dispatch(setAddPeopleDialogVisible(true)); + } + + return dispatch(beginShareRoom()); + }; +} diff --git a/react/features/invite/actions.web.js b/react/features/invite/actions.web.js new file mode 100644 index 000000000..02b37d475 --- /dev/null +++ b/react/features/invite/actions.web.js @@ -0,0 +1 @@ +export * from './actions.any'; diff --git a/react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js b/react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js index 879f8f926..7b9500ed8 100644 --- a/react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js +++ b/react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js @@ -24,7 +24,7 @@ import { } from '../../../../base/react'; import { connect } from '../../../../base/redux'; -import { setAddPeopleDialogVisible } from '../../../actions'; +import { setAddPeopleDialogVisible } from '../../../actions.native'; import AbstractAddPeopleDialog, { type Props as AbstractProps, diff --git a/react/features/invite/components/add-people-dialog/native/InviteButton.js b/react/features/invite/components/add-people-dialog/native/InviteButton.js index 57bc0f163..3498b3563 100644 --- a/react/features/invite/components/add-people-dialog/native/InviteButton.js +++ b/react/features/invite/components/add-people-dialog/native/InviteButton.js @@ -2,24 +2,16 @@ import type { Dispatch } from 'redux'; -import { getFeatureFlag, INVITE_ENABLED } from '../../../../base/flags'; import { translate } from '../../../../base/i18n'; import { IconAddPeople } from '../../../../base/icons'; import { connect } from '../../../../base/redux'; import { AbstractButton } from '../../../../base/toolbox'; import type { AbstractButtonProps } from '../../../../base/toolbox'; -import { beginShareRoom } from '../../../../share-room'; -import { setAddPeopleDialogVisible } from '../../../actions'; -import { isAddPeopleEnabled, isDialOutEnabled } from '../../../functions'; +import { doInvitePeople } from '../../../actions.native'; type Props = AbstractButtonProps & { - /** - * Whether the (backend) add people feature is enabled or not. - */ - _addPeopleEnabled: boolean, - /** * The Redux dispatch function. */ @@ -42,31 +34,9 @@ class InviteButton extends AbstractButton { * @returns {void} */ _handleClick() { - const { _addPeopleEnabled, dispatch } = this.props; - - if (_addPeopleEnabled) { - dispatch(setAddPeopleDialogVisible(true)); - } else { - dispatch(beginShareRoom()); - } + this.props.dispatch(doInvitePeople()); } } -/** - * Maps (parts of) the redux state to {@link InviteButton}'s React {@code Component} - * props. - * - * @param {Object} state - The redux store/state. - * @private - * @returns {Object} - */ -function _mapStateToProps(state: Object) { - const addPeopleEnabled = getFeatureFlag(state, INVITE_ENABLED, true) - && (isAddPeopleEnabled(state) || isDialOutEnabled(state)); - return { - _addPeopleEnabled: addPeopleEnabled - }; -} - -export default translate(connect(_mapStateToProps)(InviteButton)); +export default translate(connect()(InviteButton)); diff --git a/react/features/toolbox/components/native/OverflowMenu.js b/react/features/toolbox/components/native/OverflowMenu.js index 1cb920097..091ddc7c2 100644 --- a/react/features/toolbox/components/native/OverflowMenu.js +++ b/react/features/toolbox/components/native/OverflowMenu.js @@ -6,8 +6,8 @@ import Collapsible from 'react-native-collapsible'; import { ColorSchemeRegistry } from '../../../base/color-scheme'; import { BottomSheet, hideDialog, isDialogOpen } from '../../../base/dialog'; -import { IconDragHandle } from '../../../base/icons'; import { IOS_RECORDING_ENABLED, getFeatureFlag } from '../../../base/flags'; +import { IconDragHandle } from '../../../base/icons'; import { connect } from '../../../base/redux'; import { StyleType } from '../../../base/styles'; import { SharedDocumentButton } from '../../../etherpad';