195 lines
4.4 KiB
Dart
195 lines
4.4 KiB
Dart
/// États pour le BLoC des événements
|
|
library evenements_state;
|
|
|
|
import 'package:equatable/equatable.dart';
|
|
import '../data/models/evenement_model.dart';
|
|
|
|
/// Classe de base pour tous les états
|
|
abstract class EvenementsState extends Equatable {
|
|
const EvenementsState();
|
|
|
|
@override
|
|
List<Object?> get props => [];
|
|
}
|
|
|
|
/// État initial
|
|
class EvenementsInitial extends EvenementsState {
|
|
const EvenementsInitial();
|
|
}
|
|
|
|
/// État de chargement
|
|
class EvenementsLoading extends EvenementsState {
|
|
const EvenementsLoading();
|
|
}
|
|
|
|
/// État de chargement avec données existantes (pour refresh)
|
|
class EvenementsRefreshing extends EvenementsState {
|
|
final List<EvenementModel> currentEvenements;
|
|
|
|
const EvenementsRefreshing(this.currentEvenements);
|
|
|
|
@override
|
|
List<Object?> get props => [currentEvenements];
|
|
}
|
|
|
|
/// État de succès avec liste d'événements
|
|
class EvenementsLoaded extends EvenementsState {
|
|
final List<EvenementModel> evenements;
|
|
final int total;
|
|
final int page;
|
|
final int size;
|
|
final int totalPages;
|
|
final bool hasMore;
|
|
|
|
const EvenementsLoaded({
|
|
required this.evenements,
|
|
required this.total,
|
|
this.page = 0,
|
|
this.size = 20,
|
|
required this.totalPages,
|
|
}) : hasMore = page < totalPages - 1;
|
|
|
|
@override
|
|
List<Object?> get props => [evenements, total, page, size, totalPages, hasMore];
|
|
|
|
EvenementsLoaded copyWith({
|
|
List<EvenementModel>? evenements,
|
|
int? total,
|
|
int? page,
|
|
int? size,
|
|
int? totalPages,
|
|
}) {
|
|
return EvenementsLoaded(
|
|
evenements: evenements ?? this.evenements,
|
|
total: total ?? this.total,
|
|
page: page ?? this.page,
|
|
size: size ?? this.size,
|
|
totalPages: totalPages ?? this.totalPages,
|
|
);
|
|
}
|
|
}
|
|
|
|
/// État de succès avec un seul événement
|
|
class EvenementDetailLoaded extends EvenementsState {
|
|
final EvenementModel evenement;
|
|
|
|
const EvenementDetailLoaded(this.evenement);
|
|
|
|
@override
|
|
List<Object?> get props => [evenement];
|
|
}
|
|
|
|
/// État de succès après création
|
|
class EvenementCreated extends EvenementsState {
|
|
final EvenementModel evenement;
|
|
|
|
const EvenementCreated(this.evenement);
|
|
|
|
@override
|
|
List<Object?> get props => [evenement];
|
|
}
|
|
|
|
/// État de succès après mise à jour
|
|
class EvenementUpdated extends EvenementsState {
|
|
final EvenementModel evenement;
|
|
|
|
const EvenementUpdated(this.evenement);
|
|
|
|
@override
|
|
List<Object?> get props => [evenement];
|
|
}
|
|
|
|
/// État de succès après suppression
|
|
class EvenementDeleted extends EvenementsState {
|
|
final String id;
|
|
|
|
const EvenementDeleted(this.id);
|
|
|
|
@override
|
|
List<Object?> get props => [id];
|
|
}
|
|
|
|
/// État de succès après inscription
|
|
class EvenementInscrit extends EvenementsState {
|
|
final String evenementId;
|
|
|
|
const EvenementInscrit(this.evenementId);
|
|
|
|
@override
|
|
List<Object?> get props => [evenementId];
|
|
}
|
|
|
|
/// État de succès après désinscription
|
|
class EvenementDesinscrit extends EvenementsState {
|
|
final String evenementId;
|
|
|
|
const EvenementDesinscrit(this.evenementId);
|
|
|
|
@override
|
|
List<Object?> get props => [evenementId];
|
|
}
|
|
|
|
/// État avec liste de participants
|
|
class ParticipantsLoaded extends EvenementsState {
|
|
final String evenementId;
|
|
final List<Map<String, dynamic>> participants;
|
|
|
|
const ParticipantsLoaded({
|
|
required this.evenementId,
|
|
required this.participants,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [evenementId, participants];
|
|
}
|
|
|
|
/// État avec statistiques
|
|
class EvenementsStatsLoaded extends EvenementsState {
|
|
final Map<String, dynamic> stats;
|
|
|
|
const EvenementsStatsLoaded(this.stats);
|
|
|
|
@override
|
|
List<Object?> get props => [stats];
|
|
}
|
|
|
|
/// État d'erreur
|
|
class EvenementsError extends EvenementsState {
|
|
final String message;
|
|
final String? code;
|
|
final dynamic error;
|
|
|
|
const EvenementsError({
|
|
required this.message,
|
|
this.code,
|
|
this.error,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [message, code, error];
|
|
}
|
|
|
|
/// État d'erreur réseau
|
|
class EvenementsNetworkError extends EvenementsError {
|
|
const EvenementsNetworkError({
|
|
required String message,
|
|
String? code,
|
|
dynamic error,
|
|
}) : super(message: message, code: code, error: error);
|
|
}
|
|
|
|
/// État d'erreur de validation
|
|
class EvenementsValidationError extends EvenementsError {
|
|
final Map<String, String> validationErrors;
|
|
|
|
const EvenementsValidationError({
|
|
required String message,
|
|
required this.validationErrors,
|
|
String? code,
|
|
}) : super(message: message, code: code);
|
|
|
|
@override
|
|
List<Object?> get props => [message, code, validationErrors];
|
|
}
|
|
|