From a59ab3b0d9045756bd0607ac62ef163fa62e70ad Mon Sep 17 00:00:00 2001 From: Calinteodor Date: Thu, 12 Jan 2023 12:13:18 +0200 Subject: [PATCH] feat(share-room): disable Invite Others button when Share is visible (#12765) * feat(share-room): disable/enable Invite Others button --- react/features/app/reducers.native.ts | 1 + react/features/app/types.ts | 2 + ...erience.js => LonelyMeetingExperience.tsx} | 73 +++++++++++-------- react/features/share-room/actionTypes.ts | 10 +++ react/features/share-room/actions.ts | 28 ++++++- react/features/share-room/middleware.ts | 4 +- react/features/share-room/reducer.ts | 23 ++++++ 7 files changed, 109 insertions(+), 32 deletions(-) rename react/features/conference/components/native/{LonelyMeetingExperience.js => LonelyMeetingExperience.tsx} (64%) create mode 100644 react/features/share-room/reducer.ts diff --git a/react/features/app/reducers.native.ts b/react/features/app/reducers.native.ts index 9cb7e9816..d95bab0c6 100644 --- a/react/features/app/reducers.native.ts +++ b/react/features/app/reducers.native.ts @@ -6,6 +6,7 @@ import '../mobile/call-integration/reducer'; import '../mobile/external-api/reducer'; import '../mobile/full-screen/reducer'; import '../mobile/watchos/reducer'; +import '../share-room/reducer'; import './reducer.native'; diff --git a/react/features/app/types.ts b/react/features/app/types.ts index 42954c6fd..3c9591c88 100644 --- a/react/features/app/types.ts +++ b/react/features/app/types.ts @@ -65,6 +65,7 @@ import { IRecordingState } from '../recording/reducer'; import { IRemoteControlState } from '../remote-control/reducer'; import { IScreenShareState } from '../screen-share/reducer'; import { IScreenshotCaptureState } from '../screenshot-capture/reducer'; +import { IShareRoomState } from '../share-room/reducer'; import { ISharedVideoState } from '../shared-video/reducer'; import { ISpeakerStatsState } from '../speaker-stats/reducer'; import { ISubtitlesState } from '../subtitles/reducer'; @@ -148,6 +149,7 @@ export interface IReduxState { 'features/screen-share': IScreenShareState; 'features/screenshot-capture': IScreenshotCaptureState; 'features/settings': ISettingsState; + 'features/share-room': IShareRoomState; 'features/shared-video': ISharedVideoState; 'features/speaker-stats': ISpeakerStatsState; 'features/subtitles': ISubtitlesState; diff --git a/react/features/conference/components/native/LonelyMeetingExperience.js b/react/features/conference/components/native/LonelyMeetingExperience.tsx similarity index 64% rename from react/features/conference/components/native/LonelyMeetingExperience.js rename to react/features/conference/components/native/LonelyMeetingExperience.tsx index b165ff19a..3440ee6f2 100644 --- a/react/features/conference/components/native/LonelyMeetingExperience.js +++ b/react/features/conference/components/native/LonelyMeetingExperience.tsx @@ -1,47 +1,62 @@ +/* eslint-disable lines-around-comment */ + import React, { PureComponent } from 'react'; +import { WithTranslation } from 'react-i18next'; import { Text, View } from 'react-native'; -import { INVITE_ENABLED, getFeatureFlag } from '../../../base/flags'; -import { translate } from '../../../base/i18n'; +import { IReduxState } from '../../../app/types'; +// @ts-ignore +import { INVITE_ENABLED, getFeatureFlag } from '../../../base/flags/'; +import { translate } from '../../../base/i18n/functions'; +// @ts-ignore import { Icon, IconAddUser } from '../../../base/icons'; -import { getParticipantCountWithFake } from '../../../base/participants'; -import { connect } from '../../../base/redux'; +import { getParticipantCountWithFake } from '../../../base/participants/functions'; +import { connect } from '../../../base/redux/functions'; +import BaseTheme from '../../../base/ui/components/BaseTheme.native'; import Button from '../../../base/ui/components/native/Button'; import { BUTTON_TYPES } from '../../../base/ui/constants.native'; import { isInBreakoutRoom } from '../../../breakout-rooms/functions'; import { doInvitePeople } from '../../../invite/actions.native'; +import { toggleShareDialog } from '../../../share-room/actions'; +// @ts-ignore import styles from './styles'; + /** * Props type of the component. */ -type Props = { +type Props = WithTranslation & { /** * True if currently in a breakout room. */ - _isInBreakoutRoom: boolean, + _isInBreakoutRoom: boolean; /** * True if the invite functions (dial out, invite, share...etc) are disabled. */ - _isInviteFunctionsDiabled: boolean, + _isInviteFunctionsDisabled: boolean; /** * True if it's a lonely meeting (participant count excluding fakes is 1). */ - _isLonelyMeeting: boolean, + _isLonelyMeeting: boolean; + + /** + * Tackles share meeting url visibility. + */ + _shareDialogVisible: boolean; /** * The Redux Dispatch function. */ - dispatch: Function, + dispatch: Function; /** * Function to be used to translate i18n labels. */ - t: Function + t: Function; }; /** @@ -59,19 +74,6 @@ class LonelyMeetingExperience extends PureComponent { this._onPress = this._onPress.bind(this); } - /** - * Renders the "add people" icon. - * - * @returns {ReactElement} - */ - _renderAddPeopleIcon() { - return ( - - ); - } - /** * Implements {@code PureComponent#render}. * @@ -80,10 +82,13 @@ class LonelyMeetingExperience extends PureComponent { render() { const { _isInBreakoutRoom, - _isInviteFunctionsDiabled, + _isInviteFunctionsDisabled, _isLonelyMeeting, + _shareDialogVisible, t } = this.props; + const { icon01, icon03 } = BaseTheme.palette; + const color = _shareDialogVisible ? icon03 : icon01; if (!_isLonelyMeeting) { return null; @@ -94,10 +99,17 @@ class LonelyMeetingExperience extends PureComponent { { t('lonelyMeetingExperience.youAreAlone') } - { !_isInviteFunctionsDiabled && !_isInBreakoutRoom && ( + { !_isInviteFunctionsDisabled && !_isInBreakoutRoom && (