UNPKG

@amityco/ts-sdk-react-native

Version:

Amity Social Cloud Typescript SDK

141 lines (120 loc) 4.36 kB
import { CommunityPostSettingMaps, DefaultCommunityPostSetting } from '~/@types'; import { updateMembershipStatus } from './communityWithMembership'; import { convertRawUserToInternalUser } from '~/userRepository/utils/convertRawUserToInternalUser'; const getMatchPostSetting = (value: { needApprovalOnPostCreation: Amity.RawCommunity['needApprovalOnPostCreation']; onlyAdminCanPost: Amity.RawCommunity['onlyAdminCanPost']; }): Amity.Community['postSetting'] => Object.keys(CommunityPostSettingMaps).find( key => value.needApprovalOnPostCreation === CommunityPostSettingMaps[key].needApprovalOnPostCreation && value.onlyAdminCanPost === CommunityPostSettingMaps[key].onlyAdminCanPost, ) ?? DefaultCommunityPostSetting; export function addPostSetting({ communities }: { communities: Amity.RawCommunity[] }) { return communities.map<Amity.InternalCommunity>( ({ needApprovalOnPostCreation, onlyAdminCanPost, ...restCommunityPayload }) => ({ postSetting: getMatchPostSetting({ needApprovalOnPostCreation, onlyAdminCanPost, }), ...restCommunityPayload, }), ); } export const prepareCommunityPayload = ( rawPayload: Amity.CommunityPayload, ): Amity.ProcessedCommunityPayload => { const communitiesWithPostSetting = addPostSetting({ communities: rawPayload.communities }); // Convert users to internal format const internalUsers = rawPayload.users.map(convertRawUserToInternalUser); // map users with community const mappedCommunityUsers: Array<Amity.Membership<'community'>> = rawPayload.communityUsers.map( communityUser => { const user = internalUsers.find(user => user.userId === communityUser.userId)!; return { ...communityUser, user, }; }, ); const communityWithMembershipStatus = updateMembershipStatus( communitiesWithPostSetting, mappedCommunityUsers, ); return { ...rawPayload, users: rawPayload.users.map(convertRawUserToInternalUser), communities: communityWithMembershipStatus, communityUsers: mappedCommunityUsers, }; }; export const prepareCommunityJoinRequestPayload = ( rawPayload: Amity.CommunityJoinRequestPayload, ): Amity.ProcessedJoinRequestPayload => { const mappedJoinRequests: Array<Amity.InternalJoinRequest> = rawPayload.joinRequests.map( joinRequest => { return { ...joinRequest, joinRequestId: joinRequest._id, }; }, ); const users = rawPayload.users.map(convertRawUserToInternalUser); return { ...rawPayload, joinRequests: mappedJoinRequests, users, }; }; export const prepareCommunityMembershipPayload = ( rawPayload: Amity.CommunityMembershipPayload, ): Amity.ProcessedCommunityMembershipPayload => { const communitiesWithPostSetting = addPostSetting({ communities: rawPayload.communities }); // map users with community const mappedCommunityUsers: Array<Amity.Membership<'community'>> = rawPayload.communityUsers.map( communityUser => { const user = rawPayload.users.find(user => user.userId === communityUser.userId)!; return { ...communityUser, user, }; }, ); const communityWithMembershipStatus = updateMembershipStatus( communitiesWithPostSetting, mappedCommunityUsers, ); return { ...rawPayload, communities: communityWithMembershipStatus, communityUsers: mappedCommunityUsers, }; }; export const prepareCommunityRequest = < T extends { postSetting?: Amity.Community['postSetting']; [k: string]: any; }, >( params: T, ) => { const { postSetting = undefined, storySetting, ...restParam } = params; return { ...restParam, // Repack community payload by mapping postSetting to the actual value. ...(postSetting ? CommunityPostSettingMaps[postSetting] : undefined), // Convert story setting to the actual value. (Allow by default) allowCommentInStory: typeof storySetting?.enableComment === 'boolean' ? storySetting.enableComment : true, }; }; export const prepareSemanticSearchCommunityPayload = ({ searchResult, ...communityPayload }: Amity.SemanticSearchCommunityPayload): Amity.ProcessedSemanticSearchCommunityPayload => { const processedCommunityPayload = prepareCommunityPayload(communityPayload); return { ...processedCommunityPayload, }; };