UNPKG

@amityco/ts-sdk-react-native

Version:

Amity Social Cloud Typescript SDK

33 lines (29 loc) 1.38 kB
import { markAsRead } from '~/channelRepository/internalApi/markAsRead'; import { shallowClone } from '../shallowClone'; import { queryCache } from '~/cache/api'; import { channelMemberLinkedObject } from './channelMemberLinkedObject'; import { getMyMembership } from '~/channelRepository/observers/getMyMembership'; export const channelLinkedObject = (channel: Amity.InternalChannel): Amity.Channel => { let previewMembers: Amity.Membership<'channel'>[] = []; if (['conversation', 'community'].includes(channel.type)) { const channelUsers = queryCache<Amity.Membership<'channel'>>(['channelUsers', 'get']); if (channelUsers && channelUsers?.length > 0) { previewMembers = ( channelUsers?.filter( ({ data }) => data.channelId === channel.channelId && data.membership !== 'none', ) ?? [] ) // sort in ascending order by userInternalId .sort((a, b) => a.data.userInternalId.localeCompare(b.data.userInternalId)) // Select only first 4 members .slice(0, 4) .map(({ data }) => channelMemberLinkedObject(data)); } } return shallowClone(channel, { markAsRead: () => markAsRead(channel.channelInternalId), previewMembers, myMembership: (callback: Amity.LiveObjectCallback<Amity.Membership<'channel'> | undefined>) => getMyMembership(channel.channelId, callback), }); };