Skip to content

Commit 2390fe4

Browse files
authored
refactor(llc): remove client side sorting from feeds (#72)
1 parent c733303 commit 2390fe4

File tree

5 files changed

+50
-75
lines changed

5 files changed

+50
-75
lines changed

packages/stream_feeds/lib/src/models/get_or_create_feed_data.dart

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'feed_data.dart';
88
import 'feed_member_data.dart';
99
import 'follow_data.dart';
1010
import 'pagination_data.dart';
11-
import 'query_configuration.dart';
1211

1312
part 'get_or_create_feed_data.freezed.dart';
1413

@@ -20,29 +19,29 @@ part 'get_or_create_feed_data.freezed.dart';
2019
class GetOrCreateFeedData with _$GetOrCreateFeedData {
2120
/// Creates a new [GetOrCreateFeedData] instance.
2221
const GetOrCreateFeedData({
22+
required this.pagination,
2323
required this.activities,
24-
required this.activitiesQueryConfig,
24+
this.aggregatedActivities = const [],
2525
required this.feed,
2626
this.followers = const [],
2727
this.following = const [],
2828
this.followRequests = const [],
2929
required this.members,
3030
this.pinnedActivities = const [],
31-
this.aggregatedActivities = const [],
3231
this.notificationStatus,
3332
});
3433

35-
/// A paginated result of activities associated with the feed.
34+
/// Pagination information for the feed data.
3635
@override
37-
final PaginationResult<ActivityData> activities;
36+
final PaginationData pagination;
3837

39-
/// The list of aggregated activities in the feed.
38+
/// The list of activities in the feed.
4039
@override
41-
final List<AggregatedActivityData> aggregatedActivities;
40+
final List<ActivityData> activities;
4241

43-
/// The configuration used to query activities.
42+
/// The list of aggregated activities in the feed.
4443
@override
45-
final QueryConfiguration<ActivityData> activitiesQueryConfig;
44+
final List<AggregatedActivityData> aggregatedActivities;
4645

4746
/// The feed data associated with the feed.
4847
@override

packages/stream_feeds/lib/src/models/get_or_create_feed_data.freezed.dart

Lines changed: 23 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/stream_feeds/lib/src/repository/feeds_repository.dart

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:collection/collection.dart';
21
import 'package:stream_core/stream_core.dart';
32

43
import '../generated/api/api.dart' as api;
@@ -13,8 +12,6 @@ import '../models/follow_data.dart';
1312
import '../models/get_or_create_feed_data.dart';
1413
import '../models/model_updates.dart';
1514
import '../models/pagination_data.dart';
16-
import '../models/query_configuration.dart';
17-
import '../state/query/activities_query.dart';
1815
import '../state/query/feed_query.dart';
1916
import '../state/query/feeds_query.dart';
2017

@@ -56,19 +53,13 @@ class FeedsRepository {
5653
final rawFollowing = response.following.map((f) => f.toModel());
5754

5855
return GetOrCreateFeedData(
59-
activities: PaginationResult(
60-
items: response.activities
61-
.map((a) => a.toModel())
62-
.sorted(ActivitiesSort.defaultSort.compare),
63-
pagination: PaginationData(
64-
next: response.next,
65-
previous: response.prev,
66-
),
67-
),
68-
activitiesQueryConfig: QueryConfiguration(
69-
filter: query.activityFilter,
70-
sort: ActivitiesSort.defaultSort,
56+
pagination: PaginationData(
57+
next: response.next,
58+
previous: response.prev,
7159
),
60+
activities: response.activities.map((a) => a.toModel()).toList(),
61+
aggregatedActivities:
62+
response.aggregatedActivities.map((a) => a.toModel()).toList(),
7263
feed: response.feed.toModel(),
7364
followers: rawFollowers.where((f) => f.isFollowerOf(fid)).toList(),
7465
following: rawFollowing.where((f) => f.isFollowingFeed(fid)).toList(),
@@ -82,8 +73,6 @@ class FeedsRepository {
8273
),
8374
pinnedActivities:
8475
response.pinnedActivities.map((a) => a.toModel()).toList(),
85-
aggregatedActivities:
86-
response.aggregatedActivities.map((a) => a.toModel()).toList(),
8776
notificationStatus: response.notificationStatus,
8877
);
8978
});

packages/stream_feeds/lib/src/state/feed.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,7 @@ class Feed with Disposable {
127127

128128
capabilitiesRepository.cacheCapabilitiesForFeeds([
129129
feedData.feed,
130-
...feedData.activities.items
131-
.map((activity) => activity.currentFeed)
132-
.nonNulls,
130+
...feedData.activities.map((activity) => activity.currentFeed).nonNulls,
133131
]);
134132
});
135133

@@ -470,19 +468,19 @@ class Feed with Disposable {
470468
_stateNotifier.onQueryMoreActivities(
471469
feedData.activities,
472470
feedData.aggregatedActivities,
473-
feedData.activitiesQueryConfig,
471+
feedData.pagination,
474472
);
475473

476474
capabilitiesRepository.cacheCapabilitiesForFeeds([
477475
feedData.feed,
478-
...feedData.activities.items
476+
...feedData.activities
479477
.map((activity) => activity.currentFeed)
480478
.nonNulls,
481479
]);
482480
},
483481
);
484482

485-
return result.map((feedData) => feedData.activities.items);
483+
return result.map((feedData) => feedData.activities);
486484
}
487485

488486
/// Queries for feed suggestions that the current user might want to follow.

packages/stream_feeds/lib/src/state/feed_state.dart

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import '../models/pagination_data.dart';
2222
import '../models/query_configuration.dart';
2323
import 'insertion_action.dart';
2424
import 'member_list_state.dart';
25-
import 'query/activities_query.dart';
2625
import 'query/feed_query.dart';
2726

2827
part 'feed_state.freezed.dart';
@@ -52,18 +51,12 @@ class FeedStateNotifier extends StateNotifier<FeedState> {
5251
});
5352
}
5453

55-
QueryConfiguration<ActivityData>? _activitiesQueryConfig;
56-
List<Sort<ActivityData>> get activitiesSort {
57-
return _activitiesQueryConfig?.sort ?? ActivitiesSort.defaultSort;
58-
}
59-
6054
/// Handles the result of a query for the feed.
6155
void onQueryFeed(GetOrCreateFeedData result) {
62-
_activitiesQueryConfig = result.activitiesQueryConfig;
63-
6456
state = state.copyWith(
65-
activities: result.activities.items,
66-
activitiesPagination: result.activities.pagination,
57+
activities: result.activities,
58+
aggregatedActivities: result.aggregatedActivities,
59+
activitiesPagination: result.pagination,
6760
feed: result.feed,
6861
followers: result.followers,
6962
following: result.following,
@@ -74,7 +67,6 @@ class FeedStateNotifier extends StateNotifier<FeedState> {
7467
// members: result.members.items,
7568
followRequests: result.followRequests,
7669
pinnedActivities: result.pinnedActivities,
77-
aggregatedActivities: result.aggregatedActivities,
7870
notificationStatus: result.notificationStatus,
7971
);
8072

@@ -84,18 +76,16 @@ class FeedStateNotifier extends StateNotifier<FeedState> {
8476

8577
/// Handles the result of a query for more activities.
8678
void onQueryMoreActivities(
87-
PaginationResult<ActivityData> activities,
79+
List<ActivityData> activities,
8880
List<AggregatedActivityData> aggregatedActivities,
89-
QueryConfiguration<ActivityData> queryConfig,
81+
PaginationData pagination,
9082
) {
91-
_activitiesQueryConfig = queryConfig;
92-
9383
// Merge the new activities with the existing ones
9484
final updatedActivities = state.activities.merge(
95-
activities.items,
85+
activities,
9686
key: (it) => it.id,
97-
compare: activitiesSort.compare,
9887
);
88+
9989
final updatedAggregatedActivities = state.aggregatedActivities.merge(
10090
aggregatedActivities,
10191
key: (it) => it.group,
@@ -104,7 +94,7 @@ class FeedStateNotifier extends StateNotifier<FeedState> {
10494
state = state.copyWith(
10595
activities: updatedActivities,
10696
aggregatedActivities: updatedAggregatedActivities,
107-
activitiesPagination: activities.pagination,
97+
activitiesPagination: pagination,
10898
);
10999
}
110100

@@ -134,10 +124,9 @@ class FeedStateNotifier extends StateNotifier<FeedState> {
134124

135125
/// Handles updates to the feed state when an activity is updated.
136126
void onActivityUpdated(ActivityData activity) {
137-
final updatedActivities = state.activities.sortedUpsert(
127+
final updatedActivities = state.activities.upsert(
138128
activity,
139129
key: (it) => it.id,
140-
compare: activitiesSort.compare,
141130
update: (existing, updated) => existing.updateWith(updated),
142131
);
143132

0 commit comments

Comments
 (0)