UNPKG

@amityco/ts-sdk-react-native

Version:

Amity Social Cloud Typescript SDK

49 lines (38 loc) 1.43 kB
import { getActiveClient } from '~/client/api/activeClient'; import { queryCache, mergeInCache, dropFromCache } from '.'; /** * ```js * import { snipeFromCollection } from '@amityco/ts-sdk-react-native' * const user = snipeFromCollection("user", "foobar") * ``` * * Removes a {@link Amity.Model} object from matching a given * {@link Amity.CacheKey}. The cache entry is not typed, so the * expected returned type must be passed manually. * * @param domain the key matching the object to retrieve from cache * @param id the key matching the object to retrieve from cache * @returns a success boolean if the id was removed from all matching collections * * @category Cache API */ export const snipeIdFromCollections = (domain: Amity.Domain, id: string) => { const { log, cache } = getActiveClient(); if (!cache) return false; log('cache/api/snipeFromCollections', { domain, id }); const entries = (queryCache<unknown[]>([domain, 'query']) ?? []).filter(entry => entry?.data.includes(id), ); if (!entries.length) return false; const toBeDeleted: Amity.CacheKey[] = []; entries.forEach(({ key }) => { // @ts-ignore mergeInCache<unknown[]>(key, oldVal => { const newVal = oldVal.filter(itemId => itemId !== id); if (!newVal.length) toBeDeleted.push(key); return newVal; }); }); toBeDeleted.forEach(key => dropFromCache(key, true)); return true; };