Skip to content

Instantly share code, notes, and snippets.

@rgommezz
Created October 3, 2017 20:56
Show Gist options
  • Save rgommezz/83f38faa5a63a4f70aceb4c4c58a67d5 to your computer and use it in GitHub Desktop.
Save rgommezz/83f38faa5a63a4f70aceb4c4c58a67d5 to your computer and use it in GitHub Desktop.
function isNetworkConnected(): Promise<boolean> {
if (Platform.OS === 'ios') {
return new Promise(resolve => {
const handleFirstConnectivityChangeIOS = isConnected => {
NetInfo.isConnected.removeEventListener(
'change',
handleFirstConnectivityChangeIOS,
);
resolve(isConnected);
};
NetInfo.isConnected.addEventListener(
'change',
handleFirstConnectivityChangeIOS,
);
});
}
return NetInfo.isConnected.fetch();
}
const networkMiddleware = createNetworkMiddleware();
export default function configureStore(): Promise<Store> {
return new Promise((resolve: (arg: Store) => void) => {
let nCalls = 0;
let store;
// resolver() will resolve the promise with the store
// After rehydration and initial connection detection happens
function resolver() {
nCalls += 1;
if (nCalls === 2) {
resolve(store);
}
}
store = createStore(
rootReducer,
undefined,
compose(
applyMiddleware(networkMiddleware),
autoRehydrate(),
),
);
isNetworkConnected().then(isConnected => {
store.dispatch({
type: '@@network-connectivity/CONNECTION_CHANGE',
payload: isConnected,
});
resolver();
});
persistStore(
store,
{
storage: AsyncStorage,
debounce: 500,
},
() => resolver(),
);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment