From 5d0ac1024871dae3f410c64a431e04a3d64dfb58 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 24 Jan 2022 09:49:10 +0100 Subject: [PATCH 1/6] fix(llc): fix ownReactions population --- .../stream_chat/lib/src/client/channel.dart | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 258122a7..7d618c0a 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -840,9 +840,15 @@ class Channel { ); // Inserting at the 0th index as it's the latest reaction - latestReactions.insert(0, newReaction); - final ownReactions = [...latestReactions] - ..removeWhere((it) => it.userId != user!.id); + latestReactions + ..insert(0, newReaction) + ..take(10); + final ownReactions = enforceUnique + ? [newReaction] + : [ + ...message.ownReactions ?? [], + newReaction, + ]; final newMessage = message.copyWith( reactionCounts: {...message.reactionCounts ?? {}} @@ -882,7 +888,6 @@ class Channel { Reaction reaction, ) async { final type = reaction.type; - final user = _client.state.currentUser; final reactionCounts = {...message.reactionCounts ?? {}}; if (reactionCounts.containsKey(type)) { @@ -899,8 +904,11 @@ class Channel { r.type == reaction.type && r.messageId == reaction.messageId); - final ownReactions = [...latestReactions] - ..removeWhere((it) => it.userId != user!.id); + final ownReactions = message.ownReactions + ?..removeWhere((r) => + r.userId == reaction.userId && + r.type == reaction.type && + r.messageId == reaction.messageId); final newMessage = message.copyWith( reactionCounts: reactionCounts..removeWhere((_, value) => value == 0), @@ -1605,10 +1613,10 @@ class ChannelClientState { void _listenReactionDeleted() { _subscriptions.add(_channel.on(EventType.reactionDeleted).listen((event) { - final userId = _channel.client.state.currentUser!.id; + final oldMessage = + messages.firstWhereOrNull((it) => it.id == event.message?.id); final message = event.message!.copyWith( - ownReactions: [...event.message!.latestReactions!] - ..removeWhere((it) => it.userId != userId), + ownReactions: oldMessage?.ownReactions, ); addMessage(message); })); @@ -1616,10 +1624,10 @@ class ChannelClientState { void _listenReactions() { _subscriptions.add(_channel.on(EventType.reactionNew).listen((event) { - final userId = _channel.client.state.currentUser!.id; + final oldMessage = + messages.firstWhereOrNull((it) => it.id == event.message?.id); final message = event.message!.copyWith( - ownReactions: [...event.message!.latestReactions!] - ..removeWhere((it) => it.userId != userId), + ownReactions: oldMessage?.ownReactions, ); addMessage(message); })); @@ -1632,10 +1640,11 @@ class ChannelClientState { EventType.reactionUpdated, ) .listen((event) { - final userId = _channel.client.state.currentUser!.id; + final oldMessage = + messages.firstWhereOrNull((it) => it.id == event.message?.id); + final message = event.message!.copyWith( - ownReactions: [...event.message!.latestReactions!] - ..removeWhere((it) => it.userId != userId), + ownReactions: oldMessage?.ownReactions, ); addMessage(message); From 2b4226a18276acd19686649e6241cf299fe9808c Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 24 Jan 2022 09:51:27 +0100 Subject: [PATCH 2/6] chore(llc): update changelog --- packages/stream_chat/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 2e22b549..03011548 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -9,6 +9,10 @@ - Added `client.enrichUrl` endpoint for enriching URLs with metadata. - Fixed `unreadCount` after removing user from a channel. +🐞 Fixed + +- [[#846]](https://github.com/GetStream/stream-chat-flutter/issues/846) Fixed `message.ownReactions` getting truncated when receiving a reaction event. + ## 3.3.1 🐞 Fixed From 48a207c8a7a5067ac9c1baaf5aebe6723b8426c5 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 27 Jan 2022 12:56:04 +0100 Subject: [PATCH 3/6] fix(llc): reassign latestReactions --- packages/stream_chat/lib/src/client/channel.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 7d618c0a..1c031830 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -825,7 +825,7 @@ class Channel { final now = DateTime.now(); final user = _client.state.currentUser; - final latestReactions = [...message.latestReactions ?? []]; + var latestReactions = [...message.latestReactions ?? []]; if (enforceUnique) { latestReactions.removeWhere((it) => it.userId == user!.id); } @@ -839,8 +839,8 @@ class Channel { extraData: extraData, ); - // Inserting at the 0th index as it's the latest reaction - latestReactions + latestReactions = latestReactions + // Inserting at the 0th index as it's the latest reaction ..insert(0, newReaction) ..take(10); final ownReactions = enforceUnique From 8861b1d4248a46938abe4095010342e4602804a4 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 28 Jan 2022 15:17:03 +0100 Subject: [PATCH 4/6] fix(llc): remove deleted reaction in case of reaction.delete event --- packages/stream_chat/lib/src/client/channel.dart | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 1c031830..2fdcc432 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1615,8 +1615,17 @@ class ChannelClientState { _subscriptions.add(_channel.on(EventType.reactionDeleted).listen((event) { final oldMessage = messages.firstWhereOrNull((it) => it.id == event.message?.id); + final reaction = event.reaction; + final ownReactions = oldMessage?.ownReactions + ?.whereNot((it) => + it.type == reaction?.type && + it.score == reaction?.score && + it.messageId == reaction?.messageId && + it.userId == reaction?.userId && + it.extraData == reaction?.extraData) + .toList(growable: false); final message = event.message!.copyWith( - ownReactions: oldMessage?.ownReactions, + ownReactions: ownReactions, ); addMessage(message); })); From a07fdda490e8b57393e54d0e2270a6565974fec9 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 1 Feb 2022 12:16:40 +0100 Subject: [PATCH 5/6] fix latest reaction when sending a new reaction --- packages/stream_chat/lib/src/client/channel.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 5dde59cf..41197572 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -833,10 +833,11 @@ class Channel { extraData: extraData, ); - latestReactions = latestReactions - // Inserting at the 0th index as it's the latest reaction - ..insert(0, newReaction) - ..take(10); + latestReactions = (latestReactions + // Inserting at the 0th index as it's the latest reaction + ..insert(0, newReaction)) + .take(10) + .toList(); final ownReactions = enforceUnique ? [newReaction] : [ From f52b1bc9027b9043222b23c8093af676e25310d2 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 1 Feb 2022 13:57:24 +0100 Subject: [PATCH 6/6] Update packages/stream_chat/CHANGELOG.md Co-authored-by: Sahil Kumar --- packages/stream_chat/CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index dd4fe230..518ed95b 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -23,8 +23,6 @@ - [[#871]](https://github.com/GetStream/stream-chat-flutter/issues/871) Fixed thread message deletion. -🐞 Fixed - - [[#846]](https://github.com/GetStream/stream-chat-flutter/issues/846) Fixed `message.ownReactions` getting truncated when receiving a reaction event. ## 3.3.1