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');
+}