| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | // @flow
import { CONFERENCE_WILL_LEAVE, SET_ROOM } from '../base/conference';
import { MiddlewareRegistry } from '../base/redux';
import { storeCurrentConference, updateConferenceDuration } from './actions';
/**
 * Middleware that captures joined rooms so they can be saved into
 * {@code window.localStorage}.
 *
 * @param {Store} store - The redux store.
 * @returns {Function}
 */
MiddlewareRegistry.register(store => next => action => {
    switch (action.type) {
    case CONFERENCE_WILL_LEAVE:
        _updateConferenceDuration(store);
        break;
    case SET_ROOM:
        _maybeStoreCurrentConference(store, action);
        break;
    }
    return next(action);
});
/**
 * Checks if there is a current conference (upon SET_ROOM action), and saves it
 * if necessary.
 *
 * @param {Store} store - The redux store.
 * @param {Dispatch} next - The redux {@code dispatch} function.
 * @param {Action} action - The redux action.
 * @private
 * @returns {void}
 */
function _maybeStoreCurrentConference({ dispatch, getState }, { room }) {
    if (room) {
        const { locationURL } = getState()['features/base/connection'];
        dispatch(storeCurrentConference(locationURL));
    }
}
/**
 * Updates the duration of the last conference stored in the list.
 *
 * @param {Store} store - The redux store.
 * @private
 * @returns {void}
 */
function _updateConferenceDuration({ dispatch, getState }) {
    const { locationURL } = getState()['features/base/connection'];
    dispatch(updateConferenceDuration(locationURL));
}
 |