diff --git a/android/app/build.gradle b/android/app/build.gradle index 9741ea21a7794f00dcefe6c8fae87ce512ed36fc..3571ab2496bc322a71fa5d276759953a4f9a7b56 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 d6e666bd1a09cabf2f14c8622ccf3a55ad9c1c75..51e2274851ba77b6a02395de2db7c4c21f1e7c9a 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 adb09b63ce05544126bc7996de898a9cfac39d2f..31990f6c76a25b9cfc9aa9017a024063bb3f4273 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'); +}