Files
TravelMate/lib/blocs/activity/activity_event.dart
2025-11-13 09:27:37 +01:00

197 lines
4.5 KiB
Dart

import 'package:equatable/equatable.dart';
import '../../models/activity.dart';
/// Base class for all activity-related events
abstract class ActivityEvent extends Equatable {
const ActivityEvent();
@override
List<Object?> get props => [];
}
/// Event to load activities for a specific trip
class LoadActivities extends ActivityEvent {
final String tripId;
const LoadActivities(this.tripId);
@override
List<Object> get props => [tripId];
}
/// Event to search activities using Google Places API
class SearchActivities extends ActivityEvent {
final String tripId;
final String destination;
final ActivityCategory? category;
final int? maxResults;
final int? offset;
final bool reset;
final bool appendToExisting;
const SearchActivities({
required this.tripId,
required this.destination,
this.category,
this.maxResults,
this.offset,
this.reset = false,
this.appendToExisting = false,
});
@override
List<Object?> get props => [tripId, destination, category, maxResults, offset, reset, appendToExisting];
}
/// Event to search activities using coordinates directly (bypasses geocoding)
class SearchActivitiesWithCoordinates extends ActivityEvent {
final String tripId;
final double latitude;
final double longitude;
final ActivityCategory? category;
final int? maxResults;
final int? offset;
final bool reset;
final bool appendToExisting;
const SearchActivitiesWithCoordinates({
required this.tripId,
required this.latitude,
required this.longitude,
this.category,
this.maxResults,
this.offset,
this.reset = false,
this.appendToExisting = false,
});
@override
List<Object?> get props => [tripId, latitude, longitude, category, maxResults, offset, reset, appendToExisting];
}
/// Event to search activities by text query
class SearchActivitiesByText extends ActivityEvent {
final String tripId;
final String destination;
final String query;
const SearchActivitiesByText({
required this.tripId,
required this.destination,
required this.query,
});
@override
List<Object> get props => [tripId, destination, query];
}
/// Event to add a single activity to the trip
class AddActivity extends ActivityEvent {
final Activity activity;
const AddActivity(this.activity);
@override
List<Object> get props => [activity];
}
/// Event to add multiple activities at once
class AddActivitiesBatch extends ActivityEvent {
final List<Activity> activities;
const AddActivitiesBatch(this.activities);
@override
List<Object> get props => [activities];
}
/// Event to vote for an activity
class VoteForActivity extends ActivityEvent {
final String activityId;
final String userId;
final int vote; // 1 for positive, -1 for negative, 0 to remove vote
const VoteForActivity({
required this.activityId,
required this.userId,
required this.vote,
});
@override
List<Object> get props => [activityId, userId, vote];
}
/// Event to delete an activity
class DeleteActivity extends ActivityEvent {
final String activityId;
const DeleteActivity(this.activityId);
@override
List<Object> get props => [activityId];
}
/// Event to filter activities
class FilterActivities extends ActivityEvent {
final String? category;
final double? minRating;
final bool? showVotedOnly;
const FilterActivities({
this.category,
this.minRating,
this.showVotedOnly,
});
@override
List<Object?> get props => [category, minRating, showVotedOnly];
}
/// Event to refresh activities
class RefreshActivities extends ActivityEvent {
final String tripId;
const RefreshActivities(this.tripId);
@override
List<Object> get props => [tripId];
}
/// Event to clear search results
class ClearSearchResults extends ActivityEvent {
const ClearSearchResults();
}
/// Event to update activity details
class UpdateActivity extends ActivityEvent {
final Activity activity;
const UpdateActivity(this.activity);
@override
List<Object> get props => [activity];
}
/// Event to toggle favorite status
class ToggleActivityFavorite extends ActivityEvent {
final String activityId;
final String userId;
const ToggleActivityFavorite({
required this.activityId,
required this.userId,
});
@override
List<Object> get props => [activityId, userId];
}
/// Event to restore cached search results
class RestoreCachedSearchResults extends ActivityEvent {
final List<Activity> searchResults;
const RestoreCachedSearchResults({required this.searchResults});
@override
List<Object?> get props => [searchResults];
}