Skip to content
10 changes: 10 additions & 0 deletions app/definitions/rest/v1/channels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,14 @@ export type ChannelsEndpoints = {
messages: IMessageFromServer[];
};
};
'channels.archive': {
POST: (params: { roomId: string }) => {
success: boolean;
Comment thread
reinaldonetof marked this conversation as resolved.
Outdated
};
};
'channels.unarchive': {
POST: (params: { roomId: string }) => {
success: boolean;
};
};
};
10 changes: 10 additions & 0 deletions app/definitions/rest/v1/groups.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,14 @@ export type GroupsEndpoints = {
messages: IMessageFromServer[];
};
};
'groups.archive': {
POST: (params: { roomId: string }) => {
success: boolean;
};
};
'groups.unarchive': {
POST: (params: { roomId: string }) => {
success: boolean;
};
};
};
17 changes: 12 additions & 5 deletions app/lib/rocketchat/methods/roomTypeToApiType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,24 @@ enum ETypes {
Groups = 'groups'
}

export const types = {
export const types: { [K in RoomTypes]: ApiTypes<K> } = {
c: ETypes.Channels,
d: ETypes.Im,
p: ETypes.Groups,
l: ETypes.Channels
};

// TODO: refactor this
export type RoomTypes = keyof typeof types;
type ApiTypes = typeof types[RoomTypes];
export type RoomTypes = 'c' | 'd' | 'p' | 'l';
type ApiTypes<T> = T extends 'c'
Comment thread
reinaldonetof marked this conversation as resolved.
? ETypes.Channels
: T extends 'd'
? ETypes.Im
: T extends 'p'
? ETypes.Groups
: T extends 'l'
? ETypes.Channels
: never;

const roomTypeToApiType = (t: RoomTypes): ApiTypes => types[t];
const roomTypeToApiType = <T extends RoomTypes>(t: T) => types[t];

export default roomTypeToApiType;
11 changes: 4 additions & 7 deletions app/lib/rocketchat/services/restApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -575,17 +575,14 @@ export const ignoreUser = ({ rid, userId, ignore }: { rid: string; userId: strin
// @ts-ignore
sdk.get('chat.ignoreUser', { rid, userId, ignore });

export const toggleArchiveRoom = (roomId: string, t: SubscriptionType, archive: boolean): any => {
export const toggleArchiveRoom = (roomId: string, t: SubscriptionType, archive: boolean) => {
const type = t as SubscriptionType.CHANNEL | SubscriptionType.GROUP;
if (archive) {
// RC 0.48.0
// TODO: missing definitions from server
// @ts-ignore
return sdk.post(`${roomTypeToApiType(t)}.archive`, { roomId });
return sdk.post(`${roomTypeToApiType(type)}.archive`, { roomId });
}
// RC 0.48.0
// TODO: missing definitions from server
// @ts-ignore
return sdk.post(`${roomTypeToApiType(t)}.unarchive`, { roomId });
return sdk.post(`${roomTypeToApiType(type)}.unarchive`, { roomId });
};

export const hideRoom = (roomId: string, t: RoomTypes): any =>
Expand Down