UNPKG

@amityco/ts-sdk-react-native

Version:

Amity Social Cloud Typescript SDK

67 lines (56 loc) 2.15 kB
import { getActiveClient } from '~/client/api/activeClient'; import { ingestInCache } from '~/cache/api/ingestInCache'; import { pullFromCache } from '~/cache/api/pullFromCache'; import { upsertInCache } from '~/cache/api/upsertInCache'; import { prepareCommunityJoinRequestPayload } from '~/communityRepository/utils'; import { fireEvent } from '~/core/events'; import { JoinRequestStatusEnum, JoinResultStatusEnum } from '~/@types/domains/joinRequest'; import { joinRequestLinkedObject } from '~/utils/linkedObject/joinRequestLinkedObject'; /* begin_public_function id: community.join */ /** * ```js * import { community } from '@amityco/ts-sdk' * const isJoined = await community.join('foobar') * ``` * * Joins a {@link Amity.Community} object * * @param communityId the {@link Amity.Community} to join * @returns A status join result * * @category Community API * @async */ export const joinRequest = async ( communityId: Amity.Community['communityId'], ): Promise<Amity.JoinResult> => { const client = getActiveClient(); client.log('community/joinRequest', communityId); const { data: payload } = await client.http.post<Amity.CommunityJoinRequestPayload>( `/api/v4/communities/${communityId}/join`, ); const data = prepareCommunityJoinRequestPayload(payload); const cachedAt = client.cache && Date.now(); if (client.cache) ingestInCache(data, { cachedAt }); const status = data.joinRequests[0].status === JoinRequestStatusEnum.Approved ? JoinResultStatusEnum.Success : JoinResultStatusEnum.Pending; if (status === JoinResultStatusEnum.Success && client.cache) { const community = pullFromCache<Amity.Community>(['community', 'get', communityId])?.data; if (community) { const updatedCommunity = { ...community, isJoined: true, }; upsertInCache(['community', 'get', communityId], updatedCommunity); } } fireEvent('v4.local.community.joined', data.joinRequests); return status === JoinResultStatusEnum.Success ? { status } : { status, request: joinRequestLinkedObject(data.joinRequests[0]) }; }; /* end_public_function */