Files
address-verification-app/src/PersistStorageEngine.ts
2023-11-02 19:01:55 +05:30

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();
};