@amityco/ts-sdk-react-native
Version:
Amity Social Cloud Typescript SDK
67 lines (52 loc) • 1.52 kB
text/typescript
import AsyncStorage from '@react-native-async-storage/async-storage';
class OnMemoryStorage {
private store: { [key: string]: string } = {};
constructor() {
this.store = {};
}
clear() {
this.store = {};
}
getItem(key: string) {
return this.store[key] || null;
}
setItem(key: string, value: string) {
this.store[key] = String(value);
}
removeItem(key: string) {
delete this.store[key];
}
get length() {
return Object.keys(this.store).length;
}
key(i: number): string | null {
const keys = Object.keys(this.store);
// @ts-ignore
return keys[i] || null;
}
}
const windowInstance = () => {
if (typeof window !== 'undefined' && window.localStorage) return window;
// For JEST
return { localStorage: new OnMemoryStorage() };
};
export const setItem = async (key: string, value: string): Promise<boolean> => {
if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
await AsyncStorage.setItem(key, value);
return true;
}
return new Promise(resolve => {
windowInstance().localStorage.setItem(key, value);
resolve(true);
});
};
export const getItem = async (key: string): Promise<string | null | undefined> => {
if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
const result = await AsyncStorage.getItem(key);
return result;
}
return new Promise(resolve => {
const value = windowInstance().localStorage.getItem(key);
resolve(value);
});
};