Skip to content

Commit

Permalink
feat: implement queryReactions (#1279)
Browse files Browse the repository at this point in the history
  • Loading branch information
guerinoni committed Apr 19, 2024
1 parent f549449 commit ef21c10
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/client.ts
Expand Up @@ -193,6 +193,10 @@ import {
PollSort,
QueryPollsOptions,
QueryVotesOptions,
ReactionFilters,
ReactionSort,
QueryReactionsAPIResponse,
QueryReactionsOptions,
} from './types';
import { InsightMetrics, postInsights } from './insights';
import { Thread } from './thread';
Expand Down Expand Up @@ -1590,6 +1594,37 @@ export class StreamChat<StreamChatGenerics extends ExtendableGenerics = DefaultG
return this.hydrateActiveChannels(data.channels, stateOptions);
}

/**
* queryReactions - Query reactions
*
* @param {ReactionFilters<StreamChatGenerics>} filter object MongoDB style filters
* @param {ReactionSort<StreamChatGenerics>} [sort] Sort options, for instance {created_at: -1}.
* @param {QueryReactionsOptions} [options] Pagination object
*
* @return {Promise<{ QueryReactionsAPIResponse } search channels response
*/
async queryReactions(
messageID: string,
filter: ReactionFilters<StreamChatGenerics>,
sort: ReactionSort<StreamChatGenerics> = [],
options: QueryReactionsOptions = {},
) {
// Make sure we wait for the connect promise if there is a pending one
await this.wsPromise;

// Return a list of channels
const payload = {
filter,
sort: normalizeQuerySort(sort),
...options,
};

return await this.post<QueryReactionsAPIResponse<StreamChatGenerics>>(
this.baseURL + '/messages/' + messageID + '/reactions',
payload,
);
}

hydrateActiveChannels(
channelsFromApi: ChannelAPIResponse<StreamChatGenerics>[] = [],
stateOptions: ChannelStateOptions = {},
Expand Down
36 changes: 36 additions & 0 deletions src/types.ts
Expand Up @@ -293,6 +293,12 @@ export type ChannelResponse<
updated_at?: string;
};

export type QueryReactionsOptions = Pager;

export type QueryReactionsAPIResponse<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse & {
reactions: ReactionResponse<StreamChatGenerics>[];
};

export type QueryChannelsAPIResponse<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse & {
channels: Omit<ChannelAPIResponse<StreamChatGenerics>, keyof APIResponse>[];
};
Expand Down Expand Up @@ -1354,6 +1360,26 @@ export type BannedUsersFilters = QueryFilters<
}
>;

export type ReactionFilters<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = QueryFilters<
{
user_id?:
| RequireOnlyOne<Pick<QueryFilter<ReactionResponse<StreamChatGenerics>['user_id']>, '$eq' | '$in'>>
| PrimitiveFilter<ReactionResponse<StreamChatGenerics>['user_id']>;
} & {
type?:
| RequireOnlyOne<Pick<QueryFilter<ReactionResponse<StreamChatGenerics>['type']>, '$eq'>>
| PrimitiveFilter<ReactionResponse<StreamChatGenerics>['type']>;
} & {
created_at?:
| RequireOnlyOne<Pick<QueryFilter<PollResponse['created_at']>, '$eq' | '$gt' | '$lt' | '$gte' | '$lte'>>
| PrimitiveFilter<PollResponse['created_at']>;
} & {
[Key in keyof Omit<ReactionResponse<StreamChatGenerics>, 'user_id' | 'type' | 'created_at'>]: RequireOnlyOne<
QueryFilter<ReactionResponse<StreamChatGenerics>[Key]>
>;
}
>;

export type ChannelFilters<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = QueryFilters<
ContainsOperator<StreamChatGenerics['channelType']> & {
members?:
Expand Down Expand Up @@ -1689,6 +1715,16 @@ export type BannedUsersSort = BannedUsersSortBase | Array<BannedUsersSortBase>;

export type BannedUsersSortBase = { created_at?: AscDesc };

export type ReactionSort<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> =
| ReactionSortBase<StreamChatGenerics>
| Array<ReactionSortBase<StreamChatGenerics>>;

export type ReactionSortBase<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = Sort<
StreamChatGenerics['reactionType']
> & {
created_at?: AscDesc;
};

export type ChannelSort<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> =
| ChannelSortBase<StreamChatGenerics>
| Array<ChannelSortBase<StreamChatGenerics>>;
Expand Down

0 comments on commit ef21c10

Please sign in to comment.