Skip to content

Commit ded0c5b

Browse files
authored
Move to react-native-mmkv (#2533)
1 parent 7d7c8d3 commit ded0c5b

File tree

9 files changed

+24
-55
lines changed

9 files changed

+24
-55
lines changed

demo/src/demoApp.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import AsyncStorage from '@react-native-async-storage/async-storage';
21
import {Navigation} from 'react-native-navigation';
32
import {Constants, Colors, Typography} from 'react-native-ui-lib'; // eslint-disable-line
43
import {registerScreens} from './screens';
5-
4+
import Storage, {DEFAULT_SCREEN} from './storage';
65

76
/** Examples - uncomment when needed */
87
// Typography.loadTypographies({
@@ -115,12 +114,10 @@ function startApp(defaultScreen) {
115114
Navigation.setRoot(rootObject);
116115
}
117116

118-
async function getDefaultScreenAndStartApp() {
119-
try {
120-
const defaultScreen = await AsyncStorage.getItem('uilib.defaultScreen');
121-
startApp(defaultScreen);
122-
} catch (error) {
123-
console.warn(error);
117+
function getDefaultScreenAndStartApp() {
118+
if (Storage.contains(DEFAULT_SCREEN)) {
119+
startApp(Storage.getString(DEFAULT_SCREEN));
120+
} else {
124121
startApp();
125122
}
126123
}

demo/src/screens/MainScreen.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import _ from 'lodash';
22
import React, {Component} from 'react';
3-
import AsyncStorage from '@react-native-async-storage/async-storage';
43
import PropTypes from 'prop-types';
54
import {StyleSheet, FlatList, SectionList, ScrollView} from 'react-native';
65
import {ViewPropTypes} from 'deprecated-react-native-prop-types';
@@ -21,6 +20,7 @@ import {
2120
Dividers
2221
} from 'react-native-ui-lib'; //eslint-disable-line
2322
import {navigationData} from './MenuStructure';
23+
import Storage, {DEFAULT_SCREEN} from '../storage';
2424

2525
const settingsIcon = require('../assets/icons/settings.png');
2626
const chevronIcon = require('../assets/icons/chevronRight.png');
@@ -152,7 +152,7 @@ class MainScreen extends Component {
152152
};
153153

154154
setDefaultScreen = ({customValue: item}) => {
155-
AsyncStorage.setItem('uilib.defaultScreen', item.screen);
155+
Storage.set(DEFAULT_SCREEN, item.screen);
156156
this.openScreen({customValue: item});
157157
};
158158

demo/src/screens/SettingsScreen.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import _ from 'lodash';
22
import React, {Component} from 'react';
3-
import AsyncStorage from '@react-native-async-storage/async-storage';
43
import {StyleSheet, I18nManager} from 'react-native';
54
import {Colors, View, Text, Picker, Incubator, Switch} from 'react-native-ui-lib'; //eslint-disable-line
65
import {navigationData} from './MenuStructure';
6+
import Storage, {DEFAULT_SCREEN, IS_RTL} from '../storage';
77

88
const none = {label: '[None]', value: ''};
99

@@ -28,25 +28,25 @@ class SettingsScreen extends Component {
2828

2929
this.state = {
3030
showRefreshMessage: false,
31+
isRTL: false,
3132
screens
3233
};
3334
}
3435

35-
async UNSAFE_componentWillMount() {
36+
UNSAFE_componentWillMount() {
3637
const {screens} = this.state;
37-
const defaultScreenId = await AsyncStorage.getItem('uilib.defaultScreen');
38+
const defaultScreenId = Storage.getString(DEFAULT_SCREEN);
3839
const defaultScreen = _.find(screens, {value: defaultScreenId});
3940

40-
const isRTLString = await AsyncStorage.getItem('uilib.isRTL');
41-
const isRTL = isRTLString === 'true';
41+
const isRTL = Storage.getBoolean(IS_RTL);
4242

4343
this.setState({defaultScreen, isRTL});
4444
}
4545

4646
onDirectionChange = () => {
4747
this.setState({isRTL: !this.state.isRTL}, () => {
4848
I18nManager.forceRTL(this.state.isRTL);
49-
AsyncStorage.setItem('uilib.isRTL', `${this.state.isRTL}`);
49+
Storage.set(IS_RTL, this.state.isRTL);
5050
setTimeout(() => {
5151
this.setState({showRefreshMessage: true});
5252
}, 1000);
@@ -55,7 +55,7 @@ class SettingsScreen extends Component {
5555

5656
setDefaultScreen = screen => {
5757
this.setState({defaultScreen: screen});
58-
AsyncStorage.setItem('uilib.defaultScreen', screen.value);
58+
Storage.set(DEFAULT_SCREEN, screen);
5959
setTimeout(() => {
6060
this.setState({showRefreshMessage: true});
6161
}, 1000);

demo/src/storage.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import {MMKV} from 'react-native-mmkv';
2+
const Storage = new MMKV();
3+
4+
export const DEFAULT_SCREEN = 'uilib.defaultScreen';
5+
export const IS_RTL = 'uilib.isRTL';
6+
7+
export default Storage;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"@formatjs/intl-locale": "^3.0.3",
6767
"@formatjs/intl-numberformat": "^8.0.4",
6868
"@formatjs/intl-pluralrules": "^5.0.3",
69-
"@react-native-async-storage/async-storage": "^1.17.11",
69+
"react-native-mmkv": "2.6.1",
7070
"@react-native-community/blur": "4.3.0",
7171
"@react-native-community/datetimepicker": "^3.4.6",
7272
"@react-native-community/netinfo": "^5.6.2",

src/commons/Config.ts

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,4 @@
11
import {SchemeType} from '../style';
2-
import {AsyncStoragePackage} from 'optionalDeps';
3-
4-
const isAsyncStorageInstalled = !!AsyncStoragePackage;
5-
const validateAsyncStorage = (method: 'get' | 'set') => {
6-
if (isAsyncStorageInstalled) {
7-
return true;
8-
} else {
9-
console.error(`RNUILib requires installing "@react-native-async-storage/async-storage" dependency to use ${method}LocalScheme`);
10-
return false;
11-
}
12-
};
132

143
interface ConfigOptions {
154
/**
@@ -36,25 +25,9 @@ class Config {
3625
}
3726

3827
public async setConfig(options: ConfigOptions) {
39-
const {usePlatformColors = false, appScheme = 'light', useLocalScheme = false} = options;
28+
const {usePlatformColors = false, appScheme = 'light'} = options;
4029
this.usePlatformColors = usePlatformColors;
41-
if (isAsyncStorageInstalled && useLocalScheme) {
42-
this.appScheme = (await this.getLocalScheme?.()) || appScheme;
43-
} else {
44-
this.appScheme = appScheme;
45-
}
46-
}
47-
48-
public async setLocalScheme(scheme: SchemeType) {
49-
if (validateAsyncStorage('set')) {
50-
await AsyncStoragePackage.setItem?.('rnuilib.appScheme', scheme);
51-
}
52-
}
53-
54-
public async getLocalScheme() {
55-
if (validateAsyncStorage('get')) {
56-
return await AsyncStoragePackage.getItem?.('rnuilib.appScheme');
57-
}
30+
this.appScheme = appScheme;
5831
}
5932
}
6033

src/optionalDependencies/AsyncStoragePackage.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/optionalDependencies/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,3 @@ export {default as HapticFeedbackPackage} from './HapticFeedbackPackage';
77
export {default as SvgPackage} from './SvgPackage';
88
export {createShimmerPlaceholder} from './ShimmerPackage';
99
export {default as LinearGradientPackage} from './LinearGradientPackage';
10-
export {default as AsyncStoragePackage} from './AsyncStoragePackage';

src/optionalDependencies/index.web.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,5 @@ export {default as HapticFeedbackPackage} from './HapticFeedbackPackage';
33
export {default as SvgPackage} from './SvgPackage';
44
export {createShimmerPlaceholder} from './ShimmerPackage';
55
export {default as LinearGradientPackage} from './LinearGradientPackage';
6-
export {default as AsyncStoragePackage} from './AsyncStoragePackage';
76
export {default as PostCssPackage} from './PostCssPackage';
87

0 commit comments

Comments
 (0)