From 78ec4693d84818a6087a6880ae8882494046959b Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Sun, 5 May 2019 18:03:28 +0200 Subject: [PATCH] Migrate redux-persist legacy data --- android/app/build.gradle | 2 +- src/Dusken.js | 30 +++++++++++++++++++++++------- src/utils.js | 27 +++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 9741ea2..3571ab2 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -106,7 +106,7 @@ android { applicationId "no.neuf.chateau" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 23 + versionCode 24 versionName "1.3.0" } splits { diff --git a/src/Dusken.js b/src/Dusken.js index d6e666b..51e2274 100644 --- a/src/Dusken.js +++ b/src/Dusken.js @@ -1,12 +1,28 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { connect } from 'react-redux'; import { Root } from 'native-base'; + import DuskenNavigation from './navigation'; +import { userDataSuccess } from './actions'; +import { migrateReduxPersistFourToFive } from './utils'; + +const DuskenContainer = ({ setUserData }) => { + useEffect(() => { + migrateReduxPersistFourToFive(setUserData); + }); + + return ( + + + + ); +}; -const DuskenContainer = () => ( - - - -); +const mapDispatchToProps = { + setUserData: userDataSuccess, +}; -export default connect()(DuskenContainer); +export default connect( + null, + mapDispatchToProps +)(DuskenContainer); diff --git a/src/utils.js b/src/utils.js index adb09b6..31990f6 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,4 +1,6 @@ /* global fetch */ +import AsyncStorage from '@react-native-community/async-storage'; + export function snakeToCamelCase(val) { return val.replace(/_([a-z])/g, function(g) { return g[1].toUpperCase(); @@ -13,3 +15,28 @@ export function fetchWithTimeout(url, options, timeout = 10000) { new Promise((_, reject) => setTimeout(() => reject(new Error('Fetch request timed out')), timeout)), ]); } + +export async function migrateReduxPersistFourToFive(setUserData) { + const authedKey = 'reduxPersist:isAuthenticated'; + const userKey = 'reduxPersist:user'; + const userTokenKey = 'reduxPersist:userToken'; + const v4Keys = [authedKey, userKey, userTokenKey]; + + const asyncStorageKeys = await AsyncStorage.getAllKeys(); + if (v4Keys.some((key) => !asyncStorageKeys.includes(key))) { + return; + } + + const isAuthenticated = await AsyncStorage.getItem(authedKey); + console.log(authedKey, isAuthenticated); + if (isAuthenticated !== 'true') { + await AsyncStorage.multiRemove(v4Keys); + return; + } + + const user = await AsyncStorage.getItem(userKey); + console.log(userKey, user, JSON.parse(user)); + setUserData(JSON.parse(user)); + await AsyncStorage.multiRemove(v4Keys); + console.log('successfully migrated to new redux-persist'); +} -- GitLab