@amityco/ts-sdk-react-native
Version:
Amity Social Cloud Typescript SDK
33 lines (29 loc) • 1.38 kB
text/typescript
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),
});
};