Skip to content

Commit 2e74619

Browse files
authored
feat: add support for archiving channels (#1386)
1 parent 7e39944 commit 2e74619

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/channel.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,50 @@ export class Channel<StreamChatGenerics extends ExtendableGenerics = DefaultGene
644644
});
645645
}
646646

647+
/**
648+
* archive - archives the current channel
649+
* @param {{ user_id?: string }} opts user_id if called server side
650+
* @return {Promise<ChannelMemberResponse<StreamChatGenerics>>} The server response
651+
*
652+
* example:
653+
* await channel.archives();
654+
*
655+
* example server side:
656+
* await channel.archive({user_id: userId});
657+
*
658+
*/
659+
async archive(opts: { user_id?: string } = {}) {
660+
const cli = this.getClient();
661+
const uid = opts.user_id || cli.userID;
662+
if (!uid) {
663+
throw Error('A user_id is required for archiving a channel');
664+
}
665+
const resp = await this.partialUpdateMember(uid, { set: { archived: true } });
666+
return resp.channel_member;
667+
}
668+
669+
/**
670+
* unarchive - unarchives the current channel
671+
* @param {{ user_id?: string }} opts user_id if called server side
672+
* @return {Promise<ChannelMemberResponse<StreamChatGenerics>>} The server response
673+
*
674+
* example:
675+
* await channel.unarchive();
676+
*
677+
* example server side:
678+
* await channel.unarchive({user_id: userId});
679+
*
680+
*/
681+
async unarchive(opts: { user_id?: string } = {}) {
682+
const cli = this.getClient();
683+
const uid = opts.user_id || cli.userID;
684+
if (!uid) {
685+
throw Error('A user_id is required for unarchiving a channel');
686+
}
687+
const resp = await this.partialUpdateMember(uid, { set: { archived: false } });
688+
return resp.channel_member;
689+
}
690+
647691
/**
648692
* pin - pins the current channel
649693
* @param {{ user_id?: string }} opts user_id if called server side

src/types.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,13 @@ export type ChannelMemberAPIResponse<StreamChatGenerics extends ExtendableGeneri
332332
};
333333

334334
export type ChannelMemberUpdates = {
335+
archived?: boolean;
335336
channel_role?: Role;
336337
pinned?: boolean;
337338
};
338339

339340
export type ChannelMemberResponse<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = {
341+
archived_at?: string;
340342
ban_expires?: string;
341343
banned?: boolean;
342344
channel_role?: Role;
@@ -1499,6 +1501,9 @@ export type ChannelFilters<StreamChatGenerics extends ExtendableGenerics = Defau
14991501
userType: StreamChatGenerics['userType'];
15001502
}>[Key]
15011503
>;
1504+
} & {
1505+
archived?: boolean;
1506+
pinned?: boolean;
15021507
}
15031508
>;
15041509

@@ -1812,7 +1817,8 @@ export type ReactionSortBase<StreamChatGenerics extends ExtendableGenerics = Def
18121817

18131818
export type ChannelSort<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> =
18141819
| ChannelSortBase<StreamChatGenerics>
1815-
| Array<ChannelSortBase<StreamChatGenerics>>;
1820+
| Array<ChannelSortBase<StreamChatGenerics>>
1821+
| { pinned_at: AscDesc };
18161822

18171823
export type ChannelSortBase<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = Sort<
18181824
StreamChatGenerics['channelType']

0 commit comments

Comments
 (0)