Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand All @@ -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<ActivityData> activities;
final PaginationData pagination;

/// The list of aggregated activities in the feed.
/// The list of activities in the feed.
@override
final List<AggregatedActivityData> aggregatedActivities;
final List<ActivityData> activities;

/// The configuration used to query activities.
/// The list of aggregated activities in the feed.
@override
final QueryConfiguration<ActivityData> activitiesQueryConfig;
final List<AggregatedActivityData> aggregatedActivities;

/// The feed data associated with the feed.
@override
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 6 additions & 17 deletions packages/stream_feeds/lib/src/repository/feeds_repository.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'package:collection/collection.dart';
import 'package:stream_core/stream_core.dart';

import '../generated/api/api.dart' as api;
Expand All @@ -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';

Expand Down Expand Up @@ -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(),
Expand All @@ -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,
);
});
Expand Down
10 changes: 4 additions & 6 deletions packages/stream_feeds/lib/src/state/feed.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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,
]);
});

Expand Down Expand Up @@ -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.
Expand Down
29 changes: 9 additions & 20 deletions packages/stream_feeds/lib/src/state/feed_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -52,18 +51,12 @@ class FeedStateNotifier extends StateNotifier<FeedState> {
});
}

QueryConfiguration<ActivityData>? _activitiesQueryConfig;
List<Sort<ActivityData>> 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,
Expand All @@ -74,7 +67,6 @@ class FeedStateNotifier extends StateNotifier<FeedState> {
// members: result.members.items,
followRequests: result.followRequests,
pinnedActivities: result.pinnedActivities,
aggregatedActivities: result.aggregatedActivities,
notificationStatus: result.notificationStatus,
);

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

/// Handles the result of a query for more activities.
void onQueryMoreActivities(
PaginationResult<ActivityData> activities,
List<ActivityData> activities,
List<AggregatedActivityData> aggregatedActivities,
QueryConfiguration<ActivityData> 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,
Expand All @@ -104,7 +94,7 @@ class FeedStateNotifier extends StateNotifier<FeedState> {
state = state.copyWith(
activities: updatedActivities,
aggregatedActivities: updatedAggregatedActivities,
activitiesPagination: activities.pagination,
activitiesPagination: pagination,
);
}

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

/// 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),
);

Expand Down