Files
jitsi-meet/react/features/base/conference/reducer.js
2016-12-07 16:04:52 -06:00

93 lines
2.7 KiB
JavaScript

import { ReducerRegistry, setStateProperty } from '../redux';
import {
CONFERENCE_JOINED,
CONFERENCE_LEFT,
CONFERENCE_WILL_LEAVE,
SET_ROOM
} from './actionTypes';
import { isRoomValid } from './functions';
const INITIAL_STATE = {
jitsiConference: null,
/**
* Instance of JitsiConference that is currently in 'leaving' state.
*/
leavingJitsiConference: null,
/**
* The name of the room of the conference (to be) joined (i.e.
* {@link #jitsiConference}).
*
* @type {string}
*/
room: null
};
/**
* Listen for actions that contain the conference object, so that it can be
* stored for use by other action creators.
*/
ReducerRegistry.register('features/base/conference',
(state = INITIAL_STATE, action) => {
switch (action.type) {
case CONFERENCE_JOINED:
return (
setStateProperty(
state,
'jitsiConference',
action.conference.jitsiConference));
case CONFERENCE_LEFT:
if (state.jitsiConference === action.conference.jitsiConference) {
return {
...state,
jitsiConference: null,
leavingJitsiConference: state.leavingJitsiConference
=== action.conference.jitsiConference
? null
: state.leavingJitsiConference
};
}
break;
case CONFERENCE_WILL_LEAVE:
return (
setStateProperty(
state,
'leavingJitsiConference',
action.conference.jitsiConference));
case SET_ROOM:
return _setRoom(state, action);
}
return state;
});
/**
* Reduces a specific Redux action SET_ROOM of the feature base/conference.
*
* @param {Object} state - The Redux state of the feature base/conference.
* @param {Action} action - The Redux action SET_ROOM to reduce.
* @private
* @returns {Object} The new state of the feature base/conference after the
* reduction of the specified action.
*/
function _setRoom(state, action) {
let room = action.room;
if (isRoomValid(room)) {
// XXX Lib-jitsi-meet does not accept uppercase letters.
room = room.toLowerCase();
} else {
// Technically, there are multiple values which don't represent valid
// room names. Practically, each of them is as bad as the rest of them
// because we can't use any of them to join a conference.
room = INITIAL_STATE.room;
}
return setStateProperty(state, 'room', room);
}