Merge branch 'develop' into v4
This commit is contained in:
@@ -84,7 +84,10 @@ class ChannelApi {
|
||||
|
||||
/// Mark all channels for this user as read
|
||||
Future<EmptyResponse> markAllRead() async {
|
||||
final response = await _client.post('/channels/read');
|
||||
final response = await _client.post(
|
||||
'/channels/read',
|
||||
data: {},
|
||||
);
|
||||
return EmptyResponse.fromJson(response.data);
|
||||
}
|
||||
|
||||
|
||||
@@ -156,3 +156,29 @@ class PaginationParams extends Equatable {
|
||||
lessThanOrEqual,
|
||||
];
|
||||
}
|
||||
|
||||
/// Request model for the [client.partialUpdateUser] api call.
|
||||
@JsonSerializable(createFactory: false)
|
||||
class PartialUpdateUserRequest extends Equatable {
|
||||
/// Creates a new PartialUpdateUserRequest instance.
|
||||
const PartialUpdateUserRequest({
|
||||
required this.id,
|
||||
this.set,
|
||||
this.unset,
|
||||
});
|
||||
|
||||
/// User ID.
|
||||
final String id;
|
||||
|
||||
/// Fields to set.
|
||||
final Map<String, Object?>? set;
|
||||
|
||||
/// Fields to unset.
|
||||
final List<String>? unset;
|
||||
|
||||
/// Serialize model to json
|
||||
Map<String, dynamic> toJson() => _$PartialUpdateUserRequestToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id, set, unset];
|
||||
}
|
||||
|
||||
@@ -54,3 +54,14 @@ Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) {
|
||||
writeNotNull('id_lte', instance.lessThanOrEqual);
|
||||
return val;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$PartialUpdateUserRequestToJson(
|
||||
PartialUpdateUserRequest instance) =>
|
||||
<String, dynamic>{
|
||||
'stringify': instance.stringify,
|
||||
'hash_code': instance.hashCode,
|
||||
'id': instance.id,
|
||||
'set': instance.set,
|
||||
'unset': instance.unset,
|
||||
'props': instance.props,
|
||||
};
|
||||
|
||||
@@ -46,4 +46,17 @@ class UserApi {
|
||||
);
|
||||
return UpdateUsersResponse.fromJson(response.data);
|
||||
}
|
||||
|
||||
/// Batch partial update of [users].
|
||||
Future<UpdateUsersResponse> partialUpdateUsers(
|
||||
List<PartialUpdateUserRequest> users,
|
||||
) async {
|
||||
final response = await _client.patch(
|
||||
'/users',
|
||||
data: {
|
||||
'users': users,
|
||||
},
|
||||
);
|
||||
return UpdateUsersResponse.fromJson(response.data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,10 +49,13 @@ class AuthInterceptor extends Interceptor {
|
||||
DioError err,
|
||||
ErrorInterceptorHandler handler,
|
||||
) async {
|
||||
ErrorResponse? error;
|
||||
final data = err.response?.data;
|
||||
if (data != null) error = ErrorResponse.fromJson(data);
|
||||
if (error?.code == ChatErrorCode.tokenExpired.code) {
|
||||
if (data == null || data is! Map<String, dynamic>) {
|
||||
return handler.next(err);
|
||||
}
|
||||
|
||||
final error = ErrorResponse.fromJson(data);
|
||||
if (error.code == ChatErrorCode.tokenExpired.code) {
|
||||
if (_tokenManager.isStatic) return handler.next(err);
|
||||
_client.lock();
|
||||
await _tokenManager.loadToken(refresh: true);
|
||||
|
||||
@@ -7,6 +7,8 @@ import 'package:stream_chat/src/core/models/user.dart';
|
||||
|
||||
part 'channel_state.g.dart';
|
||||
|
||||
const _emptyPinnedMessages = <Message>[];
|
||||
|
||||
/// The class that contains the information about a channel
|
||||
@JsonSerializable()
|
||||
class ChannelState {
|
||||
@@ -15,7 +17,7 @@ class ChannelState {
|
||||
this.channel,
|
||||
this.messages = const [],
|
||||
this.members = const [],
|
||||
this.pinnedMessages = const [],
|
||||
this.pinnedMessages = _emptyPinnedMessages,
|
||||
this.watcherCount,
|
||||
this.watchers = const [],
|
||||
this.read = const [],
|
||||
@@ -54,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,
|
||||
@@ -63,7 +65,11 @@ class ChannelState {
|
||||
channel: channel ?? this.channel,
|
||||
messages: messages ?? this.messages,
|
||||
members: members ?? this.members,
|
||||
pinnedMessages: pinnedMessages ?? this.pinnedMessages,
|
||||
// Hack to avoid using the default value in case nothing is provided.
|
||||
// FIXME: Use non-nullable by default instead of empty list.
|
||||
pinnedMessages: pinnedMessages == _emptyPinnedMessages
|
||||
? this.pinnedMessages
|
||||
: pinnedMessages,
|
||||
watcherCount: watcherCount ?? this.watcherCount,
|
||||
watchers: watchers ?? this.watchers,
|
||||
read: read ?? this.read,
|
||||
|
||||
@@ -21,7 +21,7 @@ ChannelState _$ChannelStateFromJson(Map<String, dynamic> json) => ChannelState(
|
||||
pinnedMessages: (json['pinned_messages'] as List<dynamic>?)
|
||||
?.map((e) => Message.fromJson(e as Map<String, dynamic>))
|
||||
.toList() ??
|
||||
const [],
|
||||
_emptyPinnedMessages,
|
||||
watcherCount: json['watcher_count'] as int?,
|
||||
watchers: (json['watchers'] as List<dynamic>?)
|
||||
?.map((e) => User.fromJson(e as Map<String, dynamic>))
|
||||
|
||||
@@ -69,7 +69,6 @@ class User extends Equatable {
|
||||
'online',
|
||||
'banned',
|
||||
'ban_expires',
|
||||
'dashboard_ban_channel_cid',
|
||||
'teams',
|
||||
'language',
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user