1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // @flow
-
- import { Dimensions } from 'react-native';
-
- import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../../base/app';
- import { MiddlewareRegistry } from '../../base/redux';
-
- import { setAspectRatio, setReducedUI } from './actions';
-
- /**
- * Dimensions change handler.
- */
- let handler;
-
- /**
- * Middleware that handles widnow dimension changes and updates the aspect ratio and
- * reduced UI modes accordingly.
- *
- * @param {Store} store - The redux store.
- * @returns {Function}
- */
- MiddlewareRegistry.register(store => next => action => {
- const result = next(action);
-
- switch (action.type) {
- case APP_WILL_UNMOUNT: {
- _appWillUnmount();
- break;
- }
- case APP_WILL_MOUNT:
- _appWillMount(store);
- break;
-
- }
-
- return result;
- });
-
- /**
- * Notifies this feature that the action {@link APP_WILL_MOUNT} is being
- * dispatched within a specific redux {@code store}.
- *
- * @param {Store} store - The redux store in which the specified {@code action}
- * is being dispatched.
- * @private
- * @returns {void}
- */
- function _appWillMount(store) {
- handler = dim => {
- _onDimensionsChange(dim, store);
- };
-
- Dimensions.addEventListener('change', handler);
- }
-
- /**
- * Notifies this feature that the action {@link APP_WILL_UNMOUNT} is being
- * dispatched within a specific redux {@code store}.
- *
- * @private
- * @returns {void}
- */
- function _appWillUnmount() {
- Dimensions.removeEventListener('change', handler);
-
- handler = undefined;
- }
-
- /**
- * Handles window dimension changes.
- *
- * @param {Object} dimensions - The new dimensions.
- * @param {Store} store - The redux store.
- * @private
- * @returns {void}
- */
- function _onDimensionsChange(dimensions, store) {
- const { width, height } = dimensions.window;
- const { dispatch } = store;
-
- dispatch(setAspectRatio(width, height));
- dispatch(setReducedUI(width, height));
- }
|