UNPKG

@amityco/ts-sdk-react-native

Version:

Amity Social Cloud Typescript SDK

74 lines (64 loc) 2.6 kB
import { getActiveClient } from '~/client/api/activeClient'; import { fireEvent } from '~/core/events'; import { toPage, toToken } from '~/core/query'; import { ingestInCache } from '~/cache/api/ingestInCache'; import { convertChannelMarkerResponse, convertSubChannelMarkerResponse } from '~/utils/marker'; import { persistUnreadCountInfo } from '../utils/persistUnreadCountInfo'; /** * ```js * import { getSubChannelMarkers } from '@amityco/ts-sdk-react-native' * const subChannelMarkers = await getSubChannelMarkers(['sch1', 'sch2']) * ``` * * Fetches a paginable list of {@link Amity.SubChannelMarker} objects * * @param messageFeedIds the feed IDs of the {@link Amity.RawSubChannel} marker to fetch * @param page * @returns A page of {@link Amity.SubChannelMarker} objects * * @category Channel API * @async * @private */ export const getSubChannelMarkers = async ( messageFeedIds: Amity.RawSubChannel['messageFeedId'][], page: Amity.Page = { limit: 100 }, ): Promise<Amity.Cached<Amity.Paged<Amity.SubChannelMarker>>> => { const client = getActiveClient(); client.log('channel/getSubChannelMarkers', messageFeedIds, page); const { data: queryPayload } = await client.http.get< Amity.SubChannelMarkerPayload & Amity.Pagination >(`/api/v1/markers/message-feeds`, { params: { messageFeedIds, options: { token: toToken(page, 'skiplimit'), }, }, }); const { paging, ...payload } = queryPayload; const { userEntityMarkers: userEntityMarkersPayload, userFeedMarkers: userFeedMarkersPayload, userMarkers, feedMarkers: feedMarkersPayload, } = payload; // if consistent mode is enabled, persist the unread count info to the cache if (client.isUnreadCountEnabled && client.getMarkerSyncConsistentMode()) { persistUnreadCountInfo({ feedMarkers: feedMarkersPayload, userFeedMarkers: userFeedMarkersPayload, }); } const userEntityMarkers = convertChannelMarkerResponse(userEntityMarkersPayload); const userFeedMarkers = convertSubChannelMarkerResponse(userFeedMarkersPayload); const cachedAt = client.cache && Date.now(); if (client.cache) ingestInCache({ userEntityMarkers, userFeedMarkers, userMarkers }, { cachedAt }); fireEvent('local.channelMarker.fetched', { userEntityMarkers }); fireEvent('local.subChannelMarker.fetched', { userFeedMarkers }); fireEvent('local.userMarker.fetched', { userMarkers }); const nextPage = toPage(paging.next); const prevPage = toPage(paging.previous); return { data: userFeedMarkers, cachedAt, prevPage, nextPage }; };