Merge branch 'develop' of https://github.com/GetStream/stream-chat-flutter into GetStream-develop
# Conflicts: # packages/stream_chat/CHANGELOG.md # packages/stream_chat/lib/src/client/channel.dart
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
- [[#897]](https://github.com/GetStream/stream-chat-flutter/issues/897) Fixed error type mis-match in `AuthInterceptor`.
|
||||
- [[#891]](https://github.com/GetStream/stream-chat-flutter/pull/891) Fixed reply counter for parent message not
|
||||
updating correctly after deleting thread message.
|
||||
- Fix `channelState.copyWith` with respect to pinnedMessages.
|
||||
|
||||
## 3.4.0
|
||||
|
||||
|
||||
@@ -1808,8 +1808,24 @@ class ChannelClientState {
|
||||
newMessages.add(message);
|
||||
}
|
||||
|
||||
final newPinnedMessages = [...pinnedMessages];
|
||||
final oldPinnedIndex =
|
||||
newPinnedMessages.indexWhere((m) => m.id == message.id);
|
||||
|
||||
// Handle pinned messages
|
||||
if (message.pinned) {
|
||||
if (oldPinnedIndex != -1) {
|
||||
newPinnedMessages[oldPinnedIndex] = message;
|
||||
} else {
|
||||
newPinnedMessages.add(message);
|
||||
}
|
||||
} else {
|
||||
newPinnedMessages.removeWhere((m) => m.id == message.id);
|
||||
}
|
||||
|
||||
_channelState = _channelState.copyWith(
|
||||
messages: newMessages..sort(_sortByCreatedAt),
|
||||
pinnedMessages: newPinnedMessages,
|
||||
channel: _channelState.channel?.copyWith(
|
||||
lastMessageAt: message.createdAt,
|
||||
),
|
||||
@@ -1890,11 +1906,12 @@ class ChannelClientState {
|
||||
.distinct(const ListEquality().equals);
|
||||
|
||||
/// Channel pinned message list.
|
||||
List<Message> get pinnedMessages => _channelState.pinnedMessages.toList();
|
||||
List<Message> get pinnedMessages => _channelState.pinnedMessages;
|
||||
|
||||
/// Channel pinned message list as a stream.
|
||||
Stream<List<Message>> get pinnedMessagesStream =>
|
||||
channelStateStream.map((cs) => cs.pinnedMessages.toList());
|
||||
Stream<List<Message>> get pinnedMessagesStream => channelStateStream
|
||||
.map((cs) => cs.pinnedMessages)
|
||||
.distinct(const ListEquality().equals);
|
||||
|
||||
/// Get channel last message.
|
||||
Message? get lastMessage =>
|
||||
@@ -2205,7 +2222,7 @@ class ChannelClientState {
|
||||
.toList();
|
||||
|
||||
updateChannelState(_channelState.copyWith(
|
||||
pinnedMessages: pinnedMessages.where(_pinIsValid()).toList(),
|
||||
pinnedMessages: pinnedMessages.where(_pinIsValid).toList(),
|
||||
messages: expiredMessages,
|
||||
));
|
||||
}
|
||||
@@ -2242,7 +2259,7 @@ class ChannelClientState {
|
||||
}
|
||||
}
|
||||
|
||||
bool Function(Message) _pinIsValid() {
|
||||
bool _pinIsValid(Message message) {
|
||||
final now = DateTime.now();
|
||||
return (Message m) => m.pinExpires!.isAfter(now);
|
||||
return message.pinExpires!.isAfter(now);
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ class ChannelState {
|
||||
ChannelModel? channel,
|
||||
List<Message>? messages,
|
||||
List<Member>? members,
|
||||
List<Message>? pinnedMessages,
|
||||
List<Message> pinnedMessages = _emptyPinnedMessages,
|
||||
int? watcherCount,
|
||||
List<User>? watchers,
|
||||
List<Read>? read,
|
||||
@@ -69,7 +69,7 @@ class ChannelState {
|
||||
// FIXME: Use non-nullable by default instead of empty list.
|
||||
pinnedMessages: pinnedMessages == _emptyPinnedMessages
|
||||
? this.pinnedMessages
|
||||
: pinnedMessages ?? _emptyPinnedMessages,
|
||||
: pinnedMessages,
|
||||
watcherCount: watcherCount ?? this.watcherCount,
|
||||
watchers: watchers ?? this.watchers,
|
||||
read: read ?? this.read,
|
||||
|
||||
Reference in New Issue
Block a user