mattermost-mobile/app/store/utils.js
Elias Nahum 75e0854411 MM-20694 Fix race condition when the store has not rehydrated (#3610)
* MM-20694 Fix race condition when the store has not rehydrated

* Making waitForHydration re-usable
2019-11-27 08:03:50 -07:00

64 lines
No EOL
1.6 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
function transformFromSet(incoming) {
const state = {...incoming};
for (const key in state) {
if (state.hasOwnProperty(key)) {
if (state[key] instanceof Set) {
state[key] = Array.from([...state[key]]);
}
}
}
return state;
}
function transformToSet(incoming) {
const state = {...incoming};
for (const key in state) {
if (state.hasOwnProperty(key)) {
state[key] = new Set(state[key]);
}
}
return state;
}
export function transformSet(incoming, setTransforms, toStorage = true) {
const state = {...incoming};
const transformer = toStorage ? transformFromSet : transformToSet;
for (const key in state) {
if (state.hasOwnProperty(key) && setTransforms.includes(key)) {
state[key] = transformer(state[key]);
}
}
return state;
}
export function waitForHydration(store, callback) {
let unsubscribeFromStore;
return new Promise((resolve) => {
if (__DEV__) {
// when in DEV mode resetting the app can get into a white screen
resolve();
return;
}
const subscription = () => {
if (store.getState().views.root.hydrationComplete) {
unsubscribeFromStore();
if (callback && typeof callback === 'function') {
callback();
}
resolve();
}
};
unsubscribeFromStore = store.subscribe(subscription);
});
}