mattermost-mobile/app/store/utils.js
Miguel Alatzar 7afa9aed01
[MM-23698] [MM-19559] Remove redux-offline and updated redux-persist (#4120)
* Remove redux-offline and configure redux-persist

* Fix typo

* Fix configure store

* Upgrade to redux-persist 6.0.0

* Add migration from redux-persist v4 to v6

* Replace AsyncStorage with MMKVStorage to boost storage speed

* Mock RNFastStorage

* Fix reactions test

* Fix clearing the store on logout

* Remove the need for LOGOUT_SUCCESS

* No need to pass persistConfig to middlewares()

* Remove unused imports

* Export connection

Accidentally removed this export.

* Add batch action name

Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>

* Add batch action name

Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>

* Add batch action name

Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>

* Add batch action name

Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>

* Fix delete post

* Fix leave channel

Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
2020-04-08 13:44:54 -07:00

100 lines
2.8 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import merge from 'deepmerge';
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 executed = false; // this is to prevent a race condition when subcription runs before unsubscribed
if (store.getState().views?.root?.hydrationComplete && !executed) {
if (callback && typeof callback === 'function') {
executed = true;
callback();
}
} else {
const subscription = () => {
if (store.getState().views?.root?.hydrationComplete && !executed) {
unsubscribeFromStore();
if (callback && typeof callback === 'function') {
executed = true;
callback();
}
}
};
const unsubscribeFromStore = store.subscribe(subscription);
}
}
export function getStateForReset(initialState, currentState) {
const {currentUserId} = currentState.entities.users;
const currentUserProfile = currentState.entities.users.profiles[currentUserId];
const {currentTeamId} = currentState.entities.teams;
const preferences = currentState.entities.preferences;
const resetState = merge(initialState, {
entities: {
general: currentState.entities.general,
users: {
currentUserId,
profiles: {
[currentUserId]: currentUserProfile,
},
},
teams: {
currentTeamId,
},
preferences,
},
errors: currentState.errors,
views: {
selectServer: {
serverUrl: currentState.views?.selectServer?.serverUrl,
},
root: {
hydrationComplete: true,
},
},
});
return resetState;
}