@@ -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 ( ) {
0 commit comments