56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { MMKV } from 'react-native-mmkv';
|
|
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
import { GenericObject } from '@common/GenericTypes';
|
|
|
|
let storageEngine: GenericObject | null = null;
|
|
|
|
const initializeStorageEngine = () => {
|
|
/*
|
|
only want to enable mmkv for production build due
|
|
to limitation of mmkv not working with react native debugger
|
|
since its dependent on JSI
|
|
*/
|
|
|
|
if (!__DEV__) {
|
|
const storage = new MMKV();
|
|
const reduxStorage: Storage = {
|
|
setItem: async (key, value) => {
|
|
storage.set(key, value);
|
|
return await Promise.resolve(true);
|
|
},
|
|
getItem: async (key) => {
|
|
const value = storage.getString(key);
|
|
return await Promise.resolve(value);
|
|
},
|
|
removeItem: async (key) => {
|
|
storage.delete(key);
|
|
await Promise.resolve();
|
|
},
|
|
clearAll: async () => {
|
|
storage.clearAll();
|
|
await Promise.resolve();
|
|
},
|
|
};
|
|
storageEngine = reduxStorage;
|
|
return reduxStorage;
|
|
}
|
|
|
|
storageEngine = AsyncStorage;
|
|
|
|
return AsyncStorage;
|
|
};
|
|
|
|
export const getStorageEngine = () => {
|
|
if (storageEngine) {
|
|
return storageEngine;
|
|
}
|
|
return initializeStorageEngine();
|
|
};
|
|
|
|
export const clearStorageEngine = async () => {
|
|
if (typeof storageEngine?.clearAll === 'function') {
|
|
storageEngine.clearAll();
|
|
}
|
|
await AsyncStorage.clear();
|
|
};
|