Skip to content

Commit b4d4f64

Browse files
authored
feat(llc): add onNewActivity callback to Feed (#65)
1 parent 1216639 commit b4d4f64

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+551
-107
lines changed

packages/stream_feeds/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
- [BREAKING] Renamed `ActivitiesFilterField.type` to `ActivitiesFilterField.activityType`.
44
- [BREAKING] Changed `ActivityData.location` field type from `ActivityLocation?` to `LocationCoordinate?`.
55
- Add support for `enforceUnique` parameter while adding reactions.
6+
- [BREAKING] Changed default behavior for `ActivityAddedEvent` in feeds: activities from other users
7+
are now ignored by default. Only activities from the current user matching the feed's filter are
8+
added. Add `onNewActivity` callback to `feed`, `feedFromId`, or `feedFromQuery` to customize.
69
- Add location filtering support for activities with `ActivitiesFilterField.near` and `ActivitiesFilterField.withinBounds` filter fields.
710
- Add new activity filter fields: `ActivitiesFilterField.feed` and `ActivitiesFilterField.interestTags`.
811

packages/stream_feeds/lib/src/client/feeds_client_impl.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import '../state/bookmark_list.dart';
3131
import '../state/comment_list.dart';
3232
import '../state/comment_reaction_list.dart';
3333
import '../state/comment_reply_list.dart';
34+
import '../state/event/on_activity_added.dart';
3435
import '../state/feed.dart';
3536
import '../state/feed_list.dart';
3637
import '../state/follow_list.dart';
@@ -267,10 +268,14 @@ class StreamFeedsClientImpl implements StreamFeedsClient {
267268
}
268269

269270
@override
270-
Feed feedFromQuery(FeedQuery query) {
271+
Feed feedFromQuery(
272+
FeedQuery query, {
273+
OnNewActivity onNewActivity = defaultOnNewActivity,
274+
}) {
271275
return Feed(
272276
query: query,
273277
currentUserId: user.id,
278+
onNewActivity: onNewActivity,
274279
activitiesRepository: _activitiesRepository,
275280
bookmarksRepository: _bookmarksRepository,
276281
commentsRepository: _commentsRepository,

packages/stream_feeds/lib/src/feeds_client.dart

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import 'state/bookmark_list.dart';
1818
import 'state/comment_list.dart';
1919
import 'state/comment_reaction_list.dart';
2020
import 'state/comment_reply_list.dart';
21+
import 'state/event/on_activity_added.dart';
2122
import 'state/feed.dart';
2223
import 'state/feed_list.dart';
2324
import 'state/follow_list.dart';
@@ -223,6 +224,11 @@ abstract interface class StreamFeedsClient {
223224
/// Creates a [Feed] object using a [FeedQuery] that can include additional
224225
/// configuration such as activity filters, limits, and feed data for creation.
225226
///
227+
/// When [onNewActivity] is provided, it customizes how new activities received
228+
/// via real-time events are inserted into the feed. When null, uses the default
229+
/// behavior which adds activities created by the current user to the start of
230+
/// the feed if they match the feed's filter.
231+
///
226232
/// Example:
227233
/// ```dart
228234
/// final feed = client.feedFromQuery(FeedQuery(
@@ -236,7 +242,10 @@ abstract interface class StreamFeedsClient {
236242
/// ```
237243
///
238244
/// Returns a [Feed] instance that can be used to interact with the specified feed.
239-
Feed feedFromQuery(FeedQuery query);
245+
Feed feedFromQuery(
246+
FeedQuery query, {
247+
OnNewActivity onNewActivity,
248+
});
240249

241250
/// Creates a feed list instance based on the provided [query].
242251
///
@@ -764,6 +773,11 @@ extension StreamFeedsClientHelpers on StreamFeedsClient {
764773
/// Creates a [Feed] object that represents a specific feed.
765774
/// The feed can be used to fetch activities, manage follows, and receive real-time updates.
766775
///
776+
/// When [onNewActivity] is provided, it customizes how new activities received
777+
/// via real-time events are inserted into the feed. Defaults to [defaultOnNewActivity],
778+
/// which adds activities created by the current user to the start of the feed
779+
/// if they match the feed's filter.
780+
///
767781
/// Example:
768782
/// ```dart
769783
/// final userFeed = client.feed('user', 'john');
@@ -783,16 +797,25 @@ extension StreamFeedsClientHelpers on StreamFeedsClient {
783797
/// ```
784798
///
785799
/// Returns a [Feed] instance that can be used to interact with the specified feed.
786-
Feed feed({required String group, required String id}) {
800+
Feed feed({
801+
required String group,
802+
required String id,
803+
OnNewActivity onNewActivity = defaultOnNewActivity,
804+
}) {
787805
final fid = FeedId(group: group, id: id);
788-
return feedFromId(fid);
806+
return feedFromId(fid, onNewActivity: onNewActivity);
789807
}
790808

791809
/// Creates a feed instance for the specified [fid].
792810
///
793811
/// Creates a [Feed] object that represents a specific feed.
794812
/// The feed can be used to fetch activities, manage follows, and receive real-time updates.
795813
///
814+
/// When [onNewActivity] is provided, it customizes how new activities received
815+
/// via real-time events are inserted into the feed. Defaults to [defaultOnNewActivity],
816+
/// which adds activities created by the current user to the start of the feed
817+
/// if they match the feed's filter.
818+
///
796819
/// Example:
797820
/// ```dart
798821
/// final feedId = FeedId(group: 'user', id: 'john');
@@ -802,8 +825,11 @@ extension StreamFeedsClientHelpers on StreamFeedsClient {
802825
/// ```
803826
///
804827
/// Returns a [Feed] instance that can be used to interact with the specified feed.
805-
Feed feedFromId(FeedId fid) {
828+
Feed feedFromId(
829+
FeedId fid, {
830+
OnNewActivity onNewActivity = defaultOnNewActivity,
831+
}) {
806832
final query = FeedQuery(fid: fid);
807-
return feedFromQuery(query);
833+
return feedFromQuery(query, onNewActivity: onNewActivity);
808834
}
809835
}

packages/stream_feeds/lib/src/state.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export 'state/feed_list_state.dart';
2020
export 'state/feed_state.dart';
2121
export 'state/follow_list.dart';
2222
export 'state/follow_list_state.dart';
23+
export 'state/insertion_action.dart';
2324
export 'state/poll_list.dart';
2425
export 'state/poll_list_state.dart';
2526
export 'state/poll_vote_list.dart';

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import '../repository/comments_repository.dart';
2020
import '../repository/polls_repository.dart';
2121
import 'activity_comment_list.dart';
2222
import 'activity_state.dart';
23-
import 'event/activity_event_handler.dart';
23+
import 'event/handler/activity_event_handler.dart';
2424
import 'query/activity_comments_query.dart';
2525
import 'state_notifier_extentions.dart';
2626

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:stream_core/stream_core.dart';
77
import '../models/comment_data.dart';
88
import '../repository/comments_repository.dart';
99
import 'activity_comment_list_state.dart';
10-
import 'event/activity_comment_list_event_handler.dart';
10+
import 'event/handler/activity_comment_list_event_handler.dart';
1111
import 'query/activity_comments_query.dart';
1212
import 'state_notifier_extentions.dart';
1313

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import '../models/query_configuration.dart';
99
import '../repository/activities_repository.dart';
1010
import '../repository/capabilities_repository.dart';
1111
import 'activity_list_state.dart';
12-
import 'event/activity_list_event_handler.dart';
12+
import 'event/handler/activity_list_event_handler.dart';
1313
import 'query/activities_query.dart';
1414
import 'state_notifier_extentions.dart';
1515

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import '../models/feeds_reaction_data.dart';
88
import '../models/query_configuration.dart';
99
import '../repository/activities_repository.dart';
1010
import 'activity_reaction_list_state.dart';
11-
import 'event/activity_reaction_list_event_handler.dart';
11+
import 'event/handler/activity_reaction_list_event_handler.dart';
1212
import 'query/activity_reactions_query.dart';
1313
import 'state_notifier_extentions.dart';
1414

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import '../models/bookmark_folder_data.dart';
88
import '../models/query_configuration.dart';
99
import '../repository/bookmarks_repository.dart';
1010
import 'bookmark_folder_list_state.dart';
11-
import 'event/bookmark_folder_list_event_handler.dart';
11+
import 'event/handler/bookmark_folder_list_event_handler.dart';
1212
import 'query/bookmark_folders_query.dart';
1313
import 'state_notifier_extentions.dart';
1414

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import '../models/bookmark_data.dart';
88
import '../models/query_configuration.dart';
99
import '../repository/bookmarks_repository.dart';
1010
import 'bookmark_list_state.dart';
11-
import 'event/bookmark_list_event_handler.dart';
11+
import 'event/handler/bookmark_list_event_handler.dart';
1212
import 'query/bookmarks_query.dart';
1313
import 'state_notifier_extentions.dart';
1414

0 commit comments

Comments
 (0)