Skip to content

Commit 81c0594

Browse files
Adjust _hydrateMembers to accept overrideCurrentState property
1 parent 655987d commit 81c0594

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

src/channel.ts

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,8 +1661,10 @@ export class Channel<StreamChatGenerics extends ExtendableGenerics = DefaultGene
16611661
) {
16621662
const { state: clientState, user, userID } = this.getClient();
16631663

1664-
// add the Users
1664+
// add the users
16651665
if (state.members) {
1666+
this._hydrateMembers({ members: state.members });
1667+
16661668
for (const member of state.members) {
16671669
if (member.user) {
16681670
clientState.updateUserReference(member.user, this.cid);
@@ -1728,10 +1730,6 @@ export class Channel<StreamChatGenerics extends ExtendableGenerics = DefaultGene
17281730
}
17291731
}
17301732

1731-
if (state.members) {
1732-
this._hydrateMembers(state.members);
1733-
}
1734-
17351733
return {
17361734
messageSet,
17371735
};
@@ -1747,20 +1745,34 @@ export class Channel<StreamChatGenerics extends ExtendableGenerics = DefaultGene
17471745
}
17481746
}
17491747

1750-
_hydrateMembers(members: ChannelMemberResponse<StreamChatGenerics>[]) {
1751-
if (!members.length) return;
1752-
1748+
_hydrateMembers({
1749+
members,
1750+
overrideCurrentState = true,
1751+
}: {
1752+
members: ChannelMemberResponse<StreamChatGenerics>[];
1753+
/**
1754+
* If set to `true` then `ChannelState.members` will be overriden with the newly
1755+
* provided `members`, setting this property to `false` will merge current `ChannelState.members`
1756+
* object with the newly provided `members`
1757+
* (new members with the same `userId` will replace the old ones).
1758+
*/
1759+
overrideCurrentState?: boolean;
1760+
}) {
17531761
const newMembersById = members.reduce<ChannelState<StreamChatGenerics>['members']>((membersById, member) => {
17541762
if (member.user) {
17551763
membersById[member.user.id] = member;
17561764
}
17571765
return membersById;
17581766
}, {});
17591767

1760-
this.state.members = {
1761-
...this.state.members,
1762-
...newMembersById,
1763-
};
1768+
if (overrideCurrentState) {
1769+
this.state.members = newMembersById;
1770+
} else if (!overrideCurrentState && members.length) {
1771+
this.state.members = {
1772+
...this.state.members,
1773+
...newMembersById,
1774+
};
1775+
}
17641776
}
17651777

17661778
_disconnect() {

src/thread.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export class Thread<SCG extends ExtendableGenerics = DefaultGenerics> {
7878
const channel = client.channel(threadData.channel.type, threadData.channel.id, {
7979
name: threadData.channel.name,
8080
});
81-
channel._hydrateMembers(threadData.channel.members ?? []);
81+
channel._hydrateMembers({ members: threadData.channel.members ?? [], overrideCurrentState: false });
8282

8383
// For when read object is undefined and due to that unreadMessageCount for
8484
// the current user isn't being incremented on message.new

0 commit comments

Comments
 (0)