UNPKG

@theoplayer/react-native-engage

Version:
55 lines (47 loc) 1.68 kB
import { Cluster, ClusterType } from '@theoplayer/react-native-engage'; import { DefaultEngageClient } from '../DefaultEngageClient'; import { MMKV } from 'react-native-mmkv'; import { DefaultCluster } from '../cluster/DefaultCluster'; const TAG: string = 'EngageStorage'; const storage = new MMKV({ id: 'engage-storage', }); export async function readCluster(client: DefaultEngageClient, clusterType: ClusterType): Promise<Cluster> { try { return createCluster(client, clusterType, storage.getString(storageKeyForCluster(clusterType))); } catch (e) { console.warn(TAG, `Failed to retrieve cluster data from storage: ${e}`); } return createCluster(client, clusterType); } function createCluster(client: DefaultEngageClient, clusterType: ClusterType, json?: string): Cluster { if (json) { try { const cluster = JSON.parse(json) as Cluster; return new DefaultCluster(client, clusterType, cluster.entities); } catch (e) { console.warn(TAG, `Failed to retrieve cluster data from storage: ${e}`); } } return new DefaultCluster(client, clusterType); } export async function storeCluster(cluster: Cluster): Promise<boolean> { const key = storageKeyForCluster(cluster.type); try { const json = JSON.stringify({ ...cluster, engageClient: undefined, }); storage.set(key, json); return true; } catch (e) { console.warn(TAG, `Failed to store cluster data ${key}: ${e}`); return false; } } export async function removeCluster(type: ClusterType) { storage.delete(storageKeyForCluster(type)); } function storageKeyForCluster(type: ClusterType): string { return `engage/cluster/${type}`; }