@amityco/ts-sdk-react-native
Version:
Amity Social Cloud Typescript SDK
67 lines (55 loc) • 1.9 kB
text/typescript
import { prepareUserPayload } from '~/userRepository/utils/prepareUserPayload';
import { pullFromCache, pushToCache, upsertInCache } from '~/cache/api';
import { createEventSubscriber } from '~/core/events';
import { getActiveClient } from '~/client';
import { ingestInCache } from '~/cache/api/ingestInCache';
import { getResolver } from '~/core/model';
/**
* ```js
* import { onUserDeleted } from '@amityco/ts-sdk-react-native'
* const dispose = onUserDeleted((community, member) => {
* // ...
* })
* ```
*
* Fired when a {@link Amity.Community} has been joined
*
* @param callback The function to call when the event was fired
* @returns an {@link Amity.Unsubscriber} function to stop listening
*
* @category Community Events
*/
export const onUserDeleted =
(communityId: string) =>
(
callback: (community: Amity.InternalCommunity, member: Amity.Membership<'community'>[]) => void,
) => {
const client = getActiveClient();
const filter = (payload: Amity.UserPayload) => {
const userPayload = prepareUserPayload(payload);
if (userPayload.users.length === 0) return;
const user = userPayload.users[0];
ingestInCache(userPayload);
const communityUserCacheKey = getResolver('communityUsers')({
communityId,
userId: user.userId,
});
const cacheData = pullFromCache<Amity.Membership<'community'>>([
'communityUsers',
'get',
communityUserCacheKey,
])?.data!;
pushToCache(['communityUsers', 'get', communityUserCacheKey], {
...cacheData,
user,
});
const community = pullFromCache<Amity.Community>(['community', 'get', communityId])?.data!;
callback(community, [
{
...cacheData,
user,
},
]);
};
return createEventSubscriber(client, 'user.deleted', 'user.deleted', filter);
};