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
3 changes: 3 additions & 0 deletions packages/stream_feeds/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
- [BREAKING] Renamed `ActivitiesFilterField.type` to `ActivitiesFilterField.activityType`.
- [BREAKING] Changed `ActivityData.location` field type from `ActivityLocation?` to `LocationCoordinate?`.
- Add support for `enforceUnique` parameter while adding reactions.
- [BREAKING] Changed default behavior for `ActivityAddedEvent` in feeds: activities from other users
are now ignored by default. Only activities from the current user matching the feed's filter are
added. Add `onNewActivity` callback to `feed`, `feedFromId`, or `feedFromQuery` to customize.
- Add location filtering support for activities with `ActivitiesFilterField.near` and `ActivitiesFilterField.withinBounds` filter fields.
- Add new activity filter fields: `ActivitiesFilterField.feed` and `ActivitiesFilterField.interestTags`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import '../state/bookmark_list.dart';
import '../state/comment_list.dart';
import '../state/comment_reaction_list.dart';
import '../state/comment_reply_list.dart';
import '../state/event/on_activity_added.dart';
import '../state/feed.dart';
import '../state/feed_list.dart';
import '../state/follow_list.dart';
Expand Down Expand Up @@ -267,10 +268,14 @@ class StreamFeedsClientImpl implements StreamFeedsClient {
}

@override
Feed feedFromQuery(FeedQuery query) {
Feed feedFromQuery(
FeedQuery query, {
OnNewActivity onNewActivity = defaultOnNewActivity,
}) {
return Feed(
query: query,
currentUserId: user.id,
onNewActivity: onNewActivity,
activitiesRepository: _activitiesRepository,
bookmarksRepository: _bookmarksRepository,
commentsRepository: _commentsRepository,
Expand Down
36 changes: 31 additions & 5 deletions packages/stream_feeds/lib/src/feeds_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import 'state/bookmark_list.dart';
import 'state/comment_list.dart';
import 'state/comment_reaction_list.dart';
import 'state/comment_reply_list.dart';
import 'state/event/on_activity_added.dart';
import 'state/feed.dart';
import 'state/feed_list.dart';
import 'state/follow_list.dart';
Expand Down Expand Up @@ -223,6 +224,11 @@ abstract interface class StreamFeedsClient {
/// Creates a [Feed] object using a [FeedQuery] that can include additional
/// configuration such as activity filters, limits, and feed data for creation.
///
/// When [onNewActivity] is provided, it customizes how new activities received
/// via real-time events are inserted into the feed. When null, uses the default
/// behavior which adds activities created by the current user to the start of
/// the feed if they match the feed's filter.
///
/// Example:
/// ```dart
/// final feed = client.feedFromQuery(FeedQuery(
Expand All @@ -236,7 +242,10 @@ abstract interface class StreamFeedsClient {
/// ```
///
/// Returns a [Feed] instance that can be used to interact with the specified feed.
Feed feedFromQuery(FeedQuery query);
Feed feedFromQuery(
FeedQuery query, {
OnNewActivity onNewActivity,
});

/// Creates a feed list instance based on the provided [query].
///
Expand Down Expand Up @@ -764,6 +773,11 @@ extension StreamFeedsClientHelpers on StreamFeedsClient {
/// Creates a [Feed] object that represents a specific feed.
/// The feed can be used to fetch activities, manage follows, and receive real-time updates.
///
/// When [onNewActivity] is provided, it customizes how new activities received
/// via real-time events are inserted into the feed. Defaults to [defaultOnNewActivity],
/// which adds activities created by the current user to the start of the feed
/// if they match the feed's filter.
///
/// Example:
/// ```dart
/// final userFeed = client.feed('user', 'john');
Expand All @@ -783,16 +797,25 @@ extension StreamFeedsClientHelpers on StreamFeedsClient {
/// ```
///
/// Returns a [Feed] instance that can be used to interact with the specified feed.
Feed feed({required String group, required String id}) {
Feed feed({
required String group,
required String id,
OnNewActivity onNewActivity = defaultOnNewActivity,
}) {
final fid = FeedId(group: group, id: id);
return feedFromId(fid);
return feedFromId(fid, onNewActivity: onNewActivity);
}

/// Creates a feed instance for the specified [fid].
///
/// Creates a [Feed] object that represents a specific feed.
/// The feed can be used to fetch activities, manage follows, and receive real-time updates.
///
/// When [onNewActivity] is provided, it customizes how new activities received
/// via real-time events are inserted into the feed. Defaults to [defaultOnNewActivity],
/// which adds activities created by the current user to the start of the feed
/// if they match the feed's filter.
///
/// Example:
/// ```dart
/// final feedId = FeedId(group: 'user', id: 'john');
Expand All @@ -802,8 +825,11 @@ extension StreamFeedsClientHelpers on StreamFeedsClient {
/// ```
///
/// Returns a [Feed] instance that can be used to interact with the specified feed.
Feed feedFromId(FeedId fid) {
Feed feedFromId(
FeedId fid, {
OnNewActivity onNewActivity = defaultOnNewActivity,
}) {
final query = FeedQuery(fid: fid);
return feedFromQuery(query);
return feedFromQuery(query, onNewActivity: onNewActivity);
}
}
1 change: 1 addition & 0 deletions packages/stream_feeds/lib/src/state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export 'state/feed_list_state.dart';
export 'state/feed_state.dart';
export 'state/follow_list.dart';
export 'state/follow_list_state.dart';
export 'state/insertion_action.dart';
export 'state/poll_list.dart';
export 'state/poll_list_state.dart';
export 'state/poll_vote_list.dart';
Expand Down
2 changes: 1 addition & 1 deletion packages/stream_feeds/lib/src/state/activity.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import '../repository/comments_repository.dart';
import '../repository/polls_repository.dart';
import 'activity_comment_list.dart';
import 'activity_state.dart';
import 'event/activity_event_handler.dart';
import 'event/handler/activity_event_handler.dart';
import 'query/activity_comments_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'package:stream_core/stream_core.dart';
import '../models/comment_data.dart';
import '../repository/comments_repository.dart';
import 'activity_comment_list_state.dart';
import 'event/activity_comment_list_event_handler.dart';
import 'event/handler/activity_comment_list_event_handler.dart';
import 'query/activity_comments_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
2 changes: 1 addition & 1 deletion packages/stream_feeds/lib/src/state/activity_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import '../models/query_configuration.dart';
import '../repository/activities_repository.dart';
import '../repository/capabilities_repository.dart';
import 'activity_list_state.dart';
import 'event/activity_list_event_handler.dart';
import 'event/handler/activity_list_event_handler.dart';
import 'query/activities_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import '../models/feeds_reaction_data.dart';
import '../models/query_configuration.dart';
import '../repository/activities_repository.dart';
import 'activity_reaction_list_state.dart';
import 'event/activity_reaction_list_event_handler.dart';
import 'event/handler/activity_reaction_list_event_handler.dart';
import 'query/activity_reactions_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import '../models/bookmark_folder_data.dart';
import '../models/query_configuration.dart';
import '../repository/bookmarks_repository.dart';
import 'bookmark_folder_list_state.dart';
import 'event/bookmark_folder_list_event_handler.dart';
import 'event/handler/bookmark_folder_list_event_handler.dart';
import 'query/bookmark_folders_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
2 changes: 1 addition & 1 deletion packages/stream_feeds/lib/src/state/bookmark_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import '../models/bookmark_data.dart';
import '../models/query_configuration.dart';
import '../repository/bookmarks_repository.dart';
import 'bookmark_list_state.dart';
import 'event/bookmark_list_event_handler.dart';
import 'event/handler/bookmark_list_event_handler.dart';
import 'query/bookmarks_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
2 changes: 1 addition & 1 deletion packages/stream_feeds/lib/src/state/comment_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'package:stream_core/stream_core.dart';
import '../models/comment_data.dart';
import '../repository/comments_repository.dart';
import 'comment_list_state.dart';
import 'event/comment_list_event_handler.dart';
import 'event/handler/comment_list_event_handler.dart';
import 'query/comments_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import '../models/feeds_reaction_data.dart';
import '../models/query_configuration.dart';
import '../repository/comments_repository.dart';
import 'comment_reaction_list_state.dart';
import 'event/comment_reaction_list_event_handler.dart';
import 'event/handler/comment_reaction_list_event_handler.dart';
import 'query/comment_reactions_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'package:stream_core/stream_core.dart';
import '../models/comment_data.dart';
import '../repository/comments_repository.dart';
import 'comment_reply_list_state.dart';
import 'event/comment_reply_list_event_handler.dart';
import 'event/handler/comment_reply_list_event_handler.dart';
import 'query/comment_replies_query.dart';
import 'state_notifier_extentions.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../models/comment_data.dart';
import '../../models/feeds_reaction_data.dart';
import '../activity_comment_list_state.dart';
import '../../../generated/api/models.dart' as api;
import '../../../models/comment_data.dart';
import '../../../models/feeds_reaction_data.dart';
import '../../activity_comment_list_state.dart';
import 'state_event_handler.dart';

/// Event handler for activity comment list real-time updates.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../models/feed_id.dart';
import '../../models/poll_data.dart';
import '../../models/poll_vote_data.dart';
import '../../resolvers/poll/poll_answer_casted.dart';
import '../../resolvers/poll/poll_answer_removed.dart';
import '../activity_state.dart';
import '../../../generated/api/models.dart' as api;
import '../../../models/feed_id.dart';
import '../../../models/poll_data.dart';
import '../../../models/poll_vote_data.dart';
import '../../../resolvers/poll/poll_answer_casted.dart';
import '../../../resolvers/poll/poll_answer_removed.dart';
import '../../activity_state.dart';
import 'state_event_handler.dart';

/// Event handler for activity real-time updates.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../models/activity_data.dart';
import '../../models/bookmark_data.dart';
import '../../models/comment_data.dart';
import '../../models/feeds_reaction_data.dart';
import '../../repository/capabilities_repository.dart';
import '../activity_list_state.dart';
import '../query/activities_query.dart';
import '../../../generated/api/models.dart' as api;
import '../../../models/activity_data.dart';
import '../../../models/bookmark_data.dart';
import '../../../models/comment_data.dart';
import '../../../models/feeds_reaction_data.dart';
import '../../../repository/capabilities_repository.dart';
import '../../activity_list_state.dart';
import '../../query/activities_query.dart';
import 'feed_capabilities_mixin.dart';
import 'state_event_handler.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../models/feeds_reaction_data.dart';
import '../activity_reaction_list_state.dart';
import '../../../generated/api/models.dart' as api;
import '../../../models/feeds_reaction_data.dart';
import '../../activity_reaction_list_state.dart';
import 'state_event_handler.dart';

/// Event handler for activity reaction list real-time updates.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../models/bookmark_folder_data.dart';
import '../bookmark_folder_list_state.dart';
import '../query/bookmark_folders_query.dart';
import '../../../generated/api/models.dart' as api;
import '../../../models/bookmark_folder_data.dart';
import '../../bookmark_folder_list_state.dart';
import '../../query/bookmark_folders_query.dart';
import 'state_event_handler.dart';

/// Event handler for bookmark folder list real-time updates.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../models/bookmark_data.dart';
import '../../models/bookmark_folder_data.dart';
import '../bookmark_list_state.dart';
import '../query/bookmarks_query.dart';
import '../../../generated/api/models.dart' as api;
import '../../../models/bookmark_data.dart';
import '../../../models/bookmark_folder_data.dart';
import '../../bookmark_list_state.dart';
import '../../query/bookmarks_query.dart';
import 'state_event_handler.dart';

/// Event handler for bookmark list real-time updates.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../../generated/api/models.dart' as api;

import '../../models/comment_data.dart';
import '../comment_list_state.dart';
import '../query/comments_query.dart';
import '../../../models/comment_data.dart';
import '../../comment_list_state.dart';
import '../../query/comments_query.dart';
import 'state_event_handler.dart';

/// Event handler for comment list real-time updates.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../models/feeds_reaction_data.dart';
import '../comment_reaction_list_state.dart';
import '../../../generated/api/models.dart' as api;
import '../../../models/feeds_reaction_data.dart';
import '../../comment_reaction_list_state.dart';
import 'state_event_handler.dart';

/// Event handler for comment reaction list real-time updates.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:stream_core/stream_core.dart';

import '../../generated/api/models.dart' as api;
import '../../models/comment_data.dart';
import '../../models/feeds_reaction_data.dart';
import '../comment_reply_list_state.dart';
import '../../../generated/api/models.dart' as api;
import '../../../models/comment_data.dart';
import '../../../models/feeds_reaction_data.dart';
import '../../comment_reply_list_state.dart';
import 'state_event_handler.dart';

/// Event handler for comment reply list real-time updates.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import '../../../stream_feeds.dart';
import '../../repository/capabilities_repository.dart';
import '../../../../stream_feeds.dart';
import '../../../repository/capabilities_repository.dart';

mixin FeedCapabilitiesMixin {
CapabilitiesRepository get capabilitiesRepository;
Expand Down
Loading