| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 
							- // @flow
 - 
 - import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';
 - import { MiddlewareRegistry } from '../redux';
 - 
 - import {
 -     SET_USER_INTERACTION_LISTENER,
 -     USER_INTERACTION_RECEIVED
 - } from './actionTypes';
 - 
 - /**
 -  * Implements the entry point of the middleware of the feature base/user-interaction.
 -  *
 -  * @param {Store} store - The redux store.
 -  * @returns {Function}
 -  */
 - MiddlewareRegistry.register(store => next => action => {
 -     switch (action.type) {
 -     case APP_WILL_MOUNT:
 -         _startListeningForUserInteraction(store);
 -         break;
 - 
 -     case APP_WILL_UNMOUNT:
 -     case USER_INTERACTION_RECEIVED:
 -         _stopListeningForUserInteraction(store);
 -         break;
 -     }
 - 
 -     return next(action);
 - });
 - 
 - /**
 -  * Registers listeners to notify redux of any user interaction with the page.
 -  *
 -  * @param {Object} store - The redux store.
 -  * @private
 -  * @returns {void}
 -  */
 - function _startListeningForUserInteraction(store) {
 -     const userInteractionListener = event => {
 -         if (event.isTrusted) {
 -             store.dispatch({
 -                 type: USER_INTERACTION_RECEIVED
 -             });
 - 
 -             _stopListeningForUserInteraction(store);
 -         }
 -     };
 - 
 -     window.addEventListener('mousedown', userInteractionListener);
 -     window.addEventListener('keydown', userInteractionListener);
 - 
 -     store.dispatch({
 -         type: SET_USER_INTERACTION_LISTENER,
 -         userInteractionListener
 -     });
 - }
 - 
 - /**
 -  * Un-registers listeners intended to notify when the user has interacted with
 -  * the page.
 -  *
 -  * @param {Object} store - The redux store.
 -  * @private
 -  * @returns {void}
 -  */
 - function _stopListeningForUserInteraction({ getState, dispatch }) {
 -     const { userInteractionListener } = getState()['features/base/app'];
 - 
 -     if (userInteractionListener) {
 -         window.removeEventListener('mousedown', userInteractionListener);
 -         window.removeEventListener('keydown', userInteractionListener);
 - 
 -         dispatch({
 -             type: SET_USER_INTERACTION_LISTENER,
 -             userInteractionListener: undefined
 -         });
 -     }
 - }
 
 
  |