12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // @flow
-
- import { MiddlewareRegistry } from '../redux';
-
- import { PLAY_SOUND, STOP_SOUND } from './actionTypes';
- import logger from './logger';
-
- /**
- * Implements the entry point of the middleware of the feature base/media.
- *
- * @param {Store} store - The redux store.
- * @returns {Function}
- */
- MiddlewareRegistry.register(store => next => action => {
- switch (action.type) {
- case PLAY_SOUND:
- _playSound(store, action.soundId);
- break;
- case STOP_SOUND:
- _stopSound(store, action.soundId);
- break;
- }
-
- return next(action);
- });
-
- /**
- * Plays sound from audio element registered in the Redux store.
- *
- * @param {Store} store - The Redux store instance.
- * @param {string} soundId - Audio element identifier.
- * @private
- * @returns {void}
- */
- function _playSound({ getState }, soundId) {
- const sounds = getState()['features/base/sounds'];
- const sound = sounds.get(soundId);
-
- if (sound) {
- if (sound.audioElement) {
- sound.audioElement.play();
- } else {
- logger.warn(`PLAY_SOUND: sound not loaded yet for id: ${soundId}`);
- }
- } else {
- logger.warn(`PLAY_SOUND: no sound found for id: ${soundId}`);
- }
- }
-
- /**
- * Stop sound from audio element registered in the Redux store.
- *
- * @param {Store} store - The Redux store instance.
- * @param {string} soundId - Audio element identifier.
- * @private
- * @returns {void}
- */
- function _stopSound({ getState }, soundId) {
- const sounds = getState()['features/base/sounds'];
- const sound = sounds.get(soundId);
-
- if (sound) {
- const { audioElement } = sound;
-
- if (audioElement) {
- audioElement.stop();
- } else {
- logger.warn(`STOP_SOUND: sound not loaded yet for id: ${soundId}`);
- }
- } else {
- logger.warn(`STOP_SOUND: no sound found for id: ${soundId}`);
- }
- }
|