diff --git a/packages/stream_feeds/lib/src/models/get_or_create_feed_data.dart b/packages/stream_feeds/lib/src/models/get_or_create_feed_data.dart index 892ba9d6..a143a9ce 100644 --- a/packages/stream_feeds/lib/src/models/get_or_create_feed_data.dart +++ b/packages/stream_feeds/lib/src/models/get_or_create_feed_data.dart @@ -8,7 +8,6 @@ import 'feed_data.dart'; import 'feed_member_data.dart'; import 'follow_data.dart'; import 'pagination_data.dart'; -import 'query_configuration.dart'; part 'get_or_create_feed_data.freezed.dart'; @@ -20,29 +19,29 @@ part 'get_or_create_feed_data.freezed.dart'; class GetOrCreateFeedData with _$GetOrCreateFeedData { /// Creates a new [GetOrCreateFeedData] instance. const GetOrCreateFeedData({ + required this.pagination, required this.activities, - required this.activitiesQueryConfig, + this.aggregatedActivities = const [], required this.feed, this.followers = const [], this.following = const [], this.followRequests = const [], required this.members, this.pinnedActivities = const [], - this.aggregatedActivities = const [], this.notificationStatus, }); - /// A paginated result of activities associated with the feed. + /// Pagination information for the feed data. @override - final PaginationResult activities; + final PaginationData pagination; - /// The list of aggregated activities in the feed. + /// The list of activities in the feed. @override - final List aggregatedActivities; + final List activities; - /// The configuration used to query activities. + /// The list of aggregated activities in the feed. @override - final QueryConfiguration activitiesQueryConfig; + final List aggregatedActivities; /// The feed data associated with the feed. @override diff --git a/packages/stream_feeds/lib/src/models/get_or_create_feed_data.freezed.dart b/packages/stream_feeds/lib/src/models/get_or_create_feed_data.freezed.dart index 1b339370..db6d6ed6 100644 --- a/packages/stream_feeds/lib/src/models/get_or_create_feed_data.freezed.dart +++ b/packages/stream_feeds/lib/src/models/get_or_create_feed_data.freezed.dart @@ -15,9 +15,9 @@ T _$identity(T value) => value; /// @nodoc mixin _$GetOrCreateFeedData { - PaginationResult get activities; + PaginationData get pagination; + List get activities; List get aggregatedActivities; - QueryConfiguration get activitiesQueryConfig; FeedData get feed; List get followers; List get following; @@ -39,12 +39,12 @@ mixin _$GetOrCreateFeedData { return identical(this, other) || (other.runtimeType == runtimeType && other is GetOrCreateFeedData && - (identical(other.activities, activities) || - other.activities == activities) && + (identical(other.pagination, pagination) || + other.pagination == pagination) && + const DeepCollectionEquality() + .equals(other.activities, activities) && const DeepCollectionEquality() .equals(other.aggregatedActivities, aggregatedActivities) && - (identical(other.activitiesQueryConfig, activitiesQueryConfig) || - other.activitiesQueryConfig == activitiesQueryConfig) && (identical(other.feed, feed) || other.feed == feed) && const DeepCollectionEquality().equals(other.followers, followers) && const DeepCollectionEquality().equals(other.following, following) && @@ -60,9 +60,9 @@ mixin _$GetOrCreateFeedData { @override int get hashCode => Object.hash( runtimeType, - activities, + pagination, + const DeepCollectionEquality().hash(activities), const DeepCollectionEquality().hash(aggregatedActivities), - activitiesQueryConfig, feed, const DeepCollectionEquality().hash(followers), const DeepCollectionEquality().hash(following), @@ -73,7 +73,7 @@ mixin _$GetOrCreateFeedData { @override String toString() { - return 'GetOrCreateFeedData(activities: $activities, aggregatedActivities: $aggregatedActivities, activitiesQueryConfig: $activitiesQueryConfig, feed: $feed, followers: $followers, following: $following, followRequests: $followRequests, members: $members, pinnedActivities: $pinnedActivities, notificationStatus: $notificationStatus)'; + return 'GetOrCreateFeedData(pagination: $pagination, activities: $activities, aggregatedActivities: $aggregatedActivities, feed: $feed, followers: $followers, following: $following, followRequests: $followRequests, members: $members, pinnedActivities: $pinnedActivities, notificationStatus: $notificationStatus)'; } } @@ -84,15 +84,15 @@ abstract mixin class $GetOrCreateFeedDataCopyWith<$Res> { _$GetOrCreateFeedDataCopyWithImpl; @useResult $Res call( - {PaginationResult activities, - QueryConfiguration activitiesQueryConfig, + {PaginationData pagination, + List activities, + List aggregatedActivities, FeedData feed, List followers, List following, List followRequests, PaginationResult members, List pinnedActivities, - List aggregatedActivities, NotificationStatusResponse? notificationStatus}); } @@ -109,26 +109,30 @@ class _$GetOrCreateFeedDataCopyWithImpl<$Res> @pragma('vm:prefer-inline') @override $Res call({ + Object? pagination = null, Object? activities = null, - Object? activitiesQueryConfig = null, + Object? aggregatedActivities = null, Object? feed = null, Object? followers = null, Object? following = null, Object? followRequests = null, Object? members = null, Object? pinnedActivities = null, - Object? aggregatedActivities = null, Object? notificationStatus = freezed, }) { return _then(GetOrCreateFeedData( + pagination: null == pagination + ? _self.pagination + : pagination // ignore: cast_nullable_to_non_nullable + as PaginationData, activities: null == activities ? _self.activities : activities // ignore: cast_nullable_to_non_nullable - as PaginationResult, - activitiesQueryConfig: null == activitiesQueryConfig - ? _self.activitiesQueryConfig - : activitiesQueryConfig // ignore: cast_nullable_to_non_nullable - as QueryConfiguration, + as List, + aggregatedActivities: null == aggregatedActivities + ? _self.aggregatedActivities + : aggregatedActivities // ignore: cast_nullable_to_non_nullable + as List, feed: null == feed ? _self.feed : feed // ignore: cast_nullable_to_non_nullable @@ -153,10 +157,6 @@ class _$GetOrCreateFeedDataCopyWithImpl<$Res> ? _self.pinnedActivities : pinnedActivities // ignore: cast_nullable_to_non_nullable as List, - aggregatedActivities: null == aggregatedActivities - ? _self.aggregatedActivities - : aggregatedActivities // ignore: cast_nullable_to_non_nullable - as List, notificationStatus: freezed == notificationStatus ? _self.notificationStatus : notificationStatus // ignore: cast_nullable_to_non_nullable diff --git a/packages/stream_feeds/lib/src/repository/feeds_repository.dart b/packages/stream_feeds/lib/src/repository/feeds_repository.dart index 81b590dd..cc5467d5 100644 --- a/packages/stream_feeds/lib/src/repository/feeds_repository.dart +++ b/packages/stream_feeds/lib/src/repository/feeds_repository.dart @@ -1,4 +1,3 @@ -import 'package:collection/collection.dart'; import 'package:stream_core/stream_core.dart'; import '../generated/api/api.dart' as api; @@ -13,8 +12,6 @@ import '../models/follow_data.dart'; import '../models/get_or_create_feed_data.dart'; import '../models/model_updates.dart'; import '../models/pagination_data.dart'; -import '../models/query_configuration.dart'; -import '../state/query/activities_query.dart'; import '../state/query/feed_query.dart'; import '../state/query/feeds_query.dart'; @@ -56,19 +53,13 @@ class FeedsRepository { final rawFollowing = response.following.map((f) => f.toModel()); return GetOrCreateFeedData( - activities: PaginationResult( - items: response.activities - .map((a) => a.toModel()) - .sorted(ActivitiesSort.defaultSort.compare), - pagination: PaginationData( - next: response.next, - previous: response.prev, - ), - ), - activitiesQueryConfig: QueryConfiguration( - filter: query.activityFilter, - sort: ActivitiesSort.defaultSort, + pagination: PaginationData( + next: response.next, + previous: response.prev, ), + activities: response.activities.map((a) => a.toModel()).toList(), + aggregatedActivities: + response.aggregatedActivities.map((a) => a.toModel()).toList(), feed: response.feed.toModel(), followers: rawFollowers.where((f) => f.isFollowerOf(fid)).toList(), following: rawFollowing.where((f) => f.isFollowingFeed(fid)).toList(), @@ -82,8 +73,6 @@ class FeedsRepository { ), pinnedActivities: response.pinnedActivities.map((a) => a.toModel()).toList(), - aggregatedActivities: - response.aggregatedActivities.map((a) => a.toModel()).toList(), notificationStatus: response.notificationStatus, ); }); diff --git a/packages/stream_feeds/lib/src/state/feed.dart b/packages/stream_feeds/lib/src/state/feed.dart index 78e9e3dc..16d8d6c3 100644 --- a/packages/stream_feeds/lib/src/state/feed.dart +++ b/packages/stream_feeds/lib/src/state/feed.dart @@ -127,9 +127,7 @@ class Feed with Disposable { capabilitiesRepository.cacheCapabilitiesForFeeds([ feedData.feed, - ...feedData.activities.items - .map((activity) => activity.currentFeed) - .nonNulls, + ...feedData.activities.map((activity) => activity.currentFeed).nonNulls, ]); }); @@ -470,19 +468,19 @@ class Feed with Disposable { _stateNotifier.onQueryMoreActivities( feedData.activities, feedData.aggregatedActivities, - feedData.activitiesQueryConfig, + feedData.pagination, ); capabilitiesRepository.cacheCapabilitiesForFeeds([ feedData.feed, - ...feedData.activities.items + ...feedData.activities .map((activity) => activity.currentFeed) .nonNulls, ]); }, ); - return result.map((feedData) => feedData.activities.items); + return result.map((feedData) => feedData.activities); } /// Queries for feed suggestions that the current user might want to follow. diff --git a/packages/stream_feeds/lib/src/state/feed_state.dart b/packages/stream_feeds/lib/src/state/feed_state.dart index 2693d4ae..1bae68a0 100644 --- a/packages/stream_feeds/lib/src/state/feed_state.dart +++ b/packages/stream_feeds/lib/src/state/feed_state.dart @@ -22,7 +22,6 @@ import '../models/pagination_data.dart'; import '../models/query_configuration.dart'; import 'insertion_action.dart'; import 'member_list_state.dart'; -import 'query/activities_query.dart'; import 'query/feed_query.dart'; part 'feed_state.freezed.dart'; @@ -52,18 +51,12 @@ class FeedStateNotifier extends StateNotifier { }); } - QueryConfiguration? _activitiesQueryConfig; - List> get activitiesSort { - return _activitiesQueryConfig?.sort ?? ActivitiesSort.defaultSort; - } - /// Handles the result of a query for the feed. void onQueryFeed(GetOrCreateFeedData result) { - _activitiesQueryConfig = result.activitiesQueryConfig; - state = state.copyWith( - activities: result.activities.items, - activitiesPagination: result.activities.pagination, + activities: result.activities, + aggregatedActivities: result.aggregatedActivities, + activitiesPagination: result.pagination, feed: result.feed, followers: result.followers, following: result.following, @@ -74,7 +67,6 @@ class FeedStateNotifier extends StateNotifier { // members: result.members.items, followRequests: result.followRequests, pinnedActivities: result.pinnedActivities, - aggregatedActivities: result.aggregatedActivities, notificationStatus: result.notificationStatus, ); @@ -84,18 +76,16 @@ class FeedStateNotifier extends StateNotifier { /// Handles the result of a query for more activities. void onQueryMoreActivities( - PaginationResult activities, + List activities, List aggregatedActivities, - QueryConfiguration queryConfig, + PaginationData pagination, ) { - _activitiesQueryConfig = queryConfig; - // Merge the new activities with the existing ones final updatedActivities = state.activities.merge( - activities.items, + activities, key: (it) => it.id, - compare: activitiesSort.compare, ); + final updatedAggregatedActivities = state.aggregatedActivities.merge( aggregatedActivities, key: (it) => it.group, @@ -104,7 +94,7 @@ class FeedStateNotifier extends StateNotifier { state = state.copyWith( activities: updatedActivities, aggregatedActivities: updatedAggregatedActivities, - activitiesPagination: activities.pagination, + activitiesPagination: pagination, ); } @@ -134,10 +124,9 @@ class FeedStateNotifier extends StateNotifier { /// Handles updates to the feed state when an activity is updated. void onActivityUpdated(ActivityData activity) { - final updatedActivities = state.activities.sortedUpsert( + final updatedActivities = state.activities.upsert( activity, key: (it) => it.id, - compare: activitiesSort.compare, update: (existing, updated) => existing.updateWith(updated), );