jiti-meet/react/features/room-lock/actions.js

120 lines
3.9 KiB
JavaScript
Raw Normal View History

2017-10-04 22:36:09 +00:00
// @flow
2019-03-19 15:42:25 +00:00
import type { Dispatch } from 'redux';
import { appNavigate } from '../app';
import {
conferenceLeft,
JITSI_CONFERENCE_URL_KEY,
setPassword
} from '../base/conference';
import { hideDialog, openDialog } from '../base/dialog';
import { PasswordRequiredPrompt, RoomLockPrompt } from './components';
2016-12-13 09:14:04 +00:00
/**
* Begins a (user) request to lock a specific conference/room.
*
* @param {JitsiConference|undefined} conference - The JitsiConference to lock
* if specified or undefined if the current JitsiConference is to be locked.
* @returns {Function}
*/
2017-10-04 22:36:09 +00:00
export function beginRoomLockRequest(conference: ?Object) {
return (dispatch: Function, getState: Function) => {
2016-12-13 09:14:04 +00:00
if (typeof conference === 'undefined') {
// eslint-disable-next-line no-param-reassign
2017-10-04 22:36:09 +00:00
conference = getState()['features/base/conference'].conference;
2016-12-13 09:14:04 +00:00
}
if (conference) {
dispatch(openDialog(RoomLockPrompt, { conference }));
2016-12-13 09:14:04 +00:00
}
};
}
/**
* Cancels a prompt for a password to join a specific conference/room.
*
* @param {JitsiConference} conference - The {@code JitsiConference} requesting
* the password to join.
* @protected
* @returns {Function}
*/
export function _cancelPasswordRequiredPrompt(conference: Object) {
2019-03-19 15:42:25 +00:00
return (dispatch: Dispatch<any>, getState: Function) => {
// Canceling PasswordRequiredPrompt is to navigate the app/user to
// WelcomePage. In other words, the canceling invalidates the
// locationURL. Make sure that the canceling indeed has the intent to
// invalidate the locationURL.
const state = getState();
if (conference === state['features/base/conference'].passwordRequired
&& conference[JITSI_CONFERENCE_URL_KEY]
=== state['features/base/connection'].locationURL) {
// XXX The error associated with CONFERENCE_FAILED was marked as
// recoverable by the feature room-lock and, consequently,
// recoverable-aware features such as mobile's external-api did not
// deliver the CONFERENCE_FAILED to the SDK clients/consumers. Since
// the app/user is going to nativate to WelcomePage, the SDK
// clients/consumers need an event.
dispatch(conferenceLeft(conference));
dispatch(appNavigate(undefined));
}
};
}
2016-12-13 09:14:04 +00:00
/**
* Ends a (user) request to lock a specific conference/room.
*
* @param {JitsiConference} conference - The JitsiConference to lock.
* @param {string|undefined} password - The password with which the specified
* conference is to be locked or undefined to cancel the (user) request to lock
* the specified conference.
* @returns {Function}
*/
2017-10-04 22:36:09 +00:00
export function endRoomLockRequest(
conference: { lock: Function },
password: ?string) {
return (dispatch: Function) => {
2016-12-13 09:14:04 +00:00
const setPassword_
= password
? dispatch(setPassword(conference, conference.lock, password))
: Promise.resolve();
2017-10-04 22:36:09 +00:00
const endRoomLockRequest_ = () => dispatch(hideDialog(RoomLockPrompt));
2016-12-13 09:14:04 +00:00
setPassword_.then(endRoomLockRequest_, endRoomLockRequest_);
};
}
/**
* Begins a prompt for a password to join a specific conference/room.
*
* @param {JitsiConference} conference - The {@code JitsiConference}
* requesting the password to join.
* @protected
* @returns {{
* type: OPEN_DIALOG,
* component: Component,
* props: PropTypes
* }}
*/
2017-10-04 22:36:09 +00:00
export function _openPasswordRequiredPrompt(conference: Object) {
return openDialog(PasswordRequiredPrompt, { conference });
}
/**
* Unlocks the current jitsi conference.
*
* @returns {Function}
*/
export function unlockRoom() {
2019-03-19 15:42:25 +00:00
return (dispatch: Dispatch<any>, getState: Function) => {
const { conference } = getState()['features/base/conference'];
return dispatch(setPassword(
conference,
conference.lock,
''
));
};
}