| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | /* @flow */
import UIEvents from '../../../../service/UI/UIEvents';
import {
    CONFERENCE_JOINED,
    CONFERENCE_LEFT
} from '../conference';
import { MiddlewareRegistry } from '../redux';
import { localParticipantIdChanged } from './actions';
import {
    KICK_PARTICIPANT,
    MUTE_REMOTE_PARTICIPANT,
    PARTICIPANT_DISPLAY_NAME_CHANGED
} from './actionTypes';
import { LOCAL_PARTICIPANT_DEFAULT_ID } from './constants';
import { getLocalParticipant } from './functions';
declare var APP: Object;
/**
 * Middleware that captures CONFERENCE_JOINED and CONFERENCE_LEFT actions and
 * updates respectively ID of local participant.
 *
 * @param {Store} store - Redux store.
 * @returns {Function}
 */
MiddlewareRegistry.register(store => next => action => {
    switch (action.type) {
    case CONFERENCE_JOINED:
        store.dispatch(localParticipantIdChanged(action.conference.myUserId()));
        break;
    case CONFERENCE_LEFT:
        store.dispatch(localParticipantIdChanged(LOCAL_PARTICIPANT_DEFAULT_ID));
        break;
    case KICK_PARTICIPANT:
        if (typeof APP !== 'undefined') {
            APP.UI.emitEvent(UIEvents.USER_KICKED, action.id);
        }
        break;
    case MUTE_REMOTE_PARTICIPANT:
        if (typeof APP !== 'undefined') {
            APP.UI.messageHandler.openTwoButtonDialog({
                titleKey: 'dialog.muteParticipantTitle',
                msgString:
                    '<div data-i18n="dialog.muteParticipantBody"></div>',
                leftButtonKey: 'dialog.muteParticipantButton',
                dontShowAgain: {
                    id: 'dontShowMuteParticipantDialog',
                    textKey: 'dialog.doNotShowMessageAgain',
                    checked: true,
                    buttonValues: [ true ]
                },
                submitFunction: () => {
                    APP.UI.emitEvent(UIEvents.REMOTE_AUDIO_MUTED, action.id);
                }
            });
        }
        break;
    // TODO Remove this middleware when the local display name update flow is
    // fully brought into redux.
    case PARTICIPANT_DISPLAY_NAME_CHANGED: {
        if (typeof APP !== 'undefined') {
            const participant = getLocalParticipant(store.getState());
            if (participant && participant.id === action.id) {
                APP.UI.emitEvent(UIEvents.NICKNAME_CHANGED, action.name);
            }
        }
        break;
    }
    }
    return next(action);
});
 |