12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // @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, next);
- break;
-
- case SET_ROOM:
- _maybeStoreCurrentConference(store, next, 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(store, next, action) {
- const { locationURL } = store.getState()['features/base/connection'];
- const { room } = action;
-
- if (room) {
- next(storeCurrentConference(locationURL));
- }
- }
-
- /**
- * Updates the duration of the last conference stored in the list.
- *
- * @param {Store} store - The redux store.
- * @param {Dispatch} next - The redux {@code dispatch} function.
- * @param {Action} action - The redux action.
- * @private
- * @returns {void}
- */
- function _updateConferenceDuration(store, next) {
- const { locationURL } = store.getState()['features/base/connection'];
-
- next(updateConferenceDuration(locationURL));
- }
|