1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import {
- PIN_PARTICIPANT,
- getPinnedParticipant,
- pinParticipant
- } from '../base/participants';
- import { MiddlewareRegistry } from '../base/redux';
- import { SET_DOCUMENT_EDITING_STATUS, toggleDocument } from '../etherpad';
-
- import { SET_TILE_VIEW } from './actionTypes';
- import { setTileView } from './actions';
-
- /**
- * Middleware which intercepts actions and updates tile view related state.
- *
- * @param {Store} store - The redux store.
- * @returns {Function}
- */
- MiddlewareRegistry.register(store => next => action => {
- switch (action.type) {
- case PIN_PARTICIPANT: {
- const isPinning = Boolean(action.participant.id);
- const { tileViewEnabled } = store.getState()['features/video-layout'];
-
- if (isPinning && tileViewEnabled) {
- store.dispatch(setTileView(false));
- }
-
- break;
- }
-
- case SET_DOCUMENT_EDITING_STATUS:
- if (action.editing) {
- store.dispatch(setTileView(false));
- }
-
- break;
-
- case SET_TILE_VIEW: {
- const state = store.getState();
-
- if (action.enabled) {
- if (getPinnedParticipant(state)) {
- store.dispatch(pinParticipant(null));
- }
-
- if (state['features/etherpad'].editing) {
- store.dispatch(toggleDocument());
- }
- }
-
- break;
- }
- }
-
- return next(action);
- });
|