Rocket.Chat.ReactNative/app/lib/store/appStateMiddleware.ts

38 lines
992 B
TypeScript

// https://github.com/bamlab/redux-enhancer-react-native-appstate
import { AppState } from 'react-native';
import { APP_STATE } from '../../actions/actionsTypes';
export default () =>
(createStore: any) =>
(...args: any) => {
const store = createStore(...args);
let currentState = '';
const handleAppStateChange = (nextAppState: any) => {
if (nextAppState !== 'inactive') {
if (currentState !== nextAppState) {
let type;
if (nextAppState === 'active') {
type = APP_STATE.FOREGROUND;
} else if (nextAppState === 'background') {
type = APP_STATE.BACKGROUND;
}
if (type) {
store.dispatch({
type
});
}
}
currentState = nextAppState;
}
};
AppState.addEventListener('change', handleAppStateChange);
// setTimeout to allow redux-saga to catch the initial state fired by redux-enhancer-react-native-appstate library
setTimeout(() => handleAppStateChange(AppState.currentState));
return store;
};