@amityco/ts-sdk-react-native
Version:
Amity Social Cloud Typescript SDK
69 lines (66 loc) • 2.53 kB
text/typescript
import { InvitationTypeEnum } from '~/@types';
import { pullFromCache } from '~/cache/api/pullFromCache';
import { getMyJoinRequest } from '~/communityRepository/internalAPI/getMyJoinRequest';
import { joinRequest } from '~/communityRepository/internalAPI/joinCommunity';
import { getJoinRequests } from '~/communityRepository/observers/getJoinRequests';
import { createInvitations } from '~/invitationRepository/internalApi';
import { getInvitation } from '~/invitationRepository/internalApi/getInvitation';
import { getInvitations } from '~/invitationRepository/observers/getInvitations';
import { categoryLinkedObject } from './categoryLinkedObject';
export const communityLinkedObject = (community: Amity.InternalCommunity): Amity.Community => {
return {
...community,
get categories(): Amity.Category[] {
return (community?.categoryIds ?? [])
.map(categoryId => {
const cacheData = pullFromCache<Amity.Category>(['category', 'get', categoryId]);
if (cacheData?.data) return categoryLinkedObject(cacheData.data);
return undefined;
})
.filter(category => !!category);
},
createInvitations: async (userIds: string[]): Promise<void> => {
await createInvitations({
type: InvitationTypeEnum.CommunityMemberInvite,
targetType: 'community',
targetId: community.communityId,
userIds,
});
},
getMemberInvitations: (
params: Pick<Amity.InvitationLiveCollection, 'limit' | 'sortBy' | 'statuses'>,
callback: Amity.LiveCollectionCallback<Amity.Invitation>,
): Amity.Unsubscriber => {
return getInvitations(
{
...params,
targetId: community.communityId,
targetType: 'community',
type: InvitationTypeEnum.CommunityMemberInvite,
},
callback,
);
},
getInvitation: async () => {
const { data } = await getInvitation('community', community.communityId);
return data;
},
join: async () => joinRequest(community.communityId),
getJoinRequests: (
params: Omit<Amity.QueryJoinRequest, 'communityId'>,
callback: Amity.LiveCollectionCallback<Amity.JoinRequest>,
): Amity.Unsubscriber => {
return getJoinRequests(
{
...params,
communityId: community.communityId,
},
callback,
);
},
getMyJoinRequest: async () => {
const { data } = await getMyJoinRequest(community.communityId);
return data;
},
};
};