UNPKG

@amityco/ts-sdk-react-native

Version:

Amity Social Cloud Typescript SDK

67 lines (52 loc) 1.52 kB
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); }); };