167 lines
3.9 KiB
Dart
167 lines
3.9 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
import '../../../../core/models/membre_model.dart';
|
|
import '../../../../core/errors/failures.dart';
|
|
|
|
/// États pour le BLoC des membres
|
|
abstract class MembresState extends Equatable {
|
|
const MembresState();
|
|
|
|
@override
|
|
List<Object?> get props => [];
|
|
}
|
|
|
|
/// État initial
|
|
class MembresInitial extends MembresState {
|
|
const MembresInitial();
|
|
}
|
|
|
|
/// État de chargement
|
|
class MembresLoading extends MembresState {
|
|
const MembresLoading();
|
|
}
|
|
|
|
/// État de chargement avec données existantes (pour le refresh)
|
|
class MembresRefreshing extends MembresState {
|
|
const MembresRefreshing(this.currentMembres);
|
|
|
|
final List<MembreModel> currentMembres;
|
|
|
|
@override
|
|
List<Object?> get props => [currentMembres];
|
|
}
|
|
|
|
/// État de succès avec liste des membres
|
|
class MembresLoaded extends MembresState {
|
|
const MembresLoaded({
|
|
required this.membres,
|
|
this.isSearchResult = false,
|
|
this.searchQuery,
|
|
});
|
|
|
|
final List<MembreModel> membres;
|
|
final bool isSearchResult;
|
|
final String? searchQuery;
|
|
|
|
@override
|
|
List<Object?> get props => [membres, isSearchResult, searchQuery];
|
|
|
|
/// Copie avec modifications
|
|
MembresLoaded copyWith({
|
|
List<MembreModel>? membres,
|
|
bool? isSearchResult,
|
|
String? searchQuery,
|
|
}) {
|
|
return MembresLoaded(
|
|
membres: membres ?? this.membres,
|
|
isSearchResult: isSearchResult ?? this.isSearchResult,
|
|
searchQuery: searchQuery ?? this.searchQuery,
|
|
);
|
|
}
|
|
}
|
|
|
|
/// État de succès pour un membre spécifique
|
|
class MembreDetailLoaded extends MembresState {
|
|
const MembreDetailLoaded(this.membre);
|
|
|
|
final MembreModel membre;
|
|
|
|
@override
|
|
List<Object?> get props => [membre];
|
|
}
|
|
|
|
/// Alias pour MembreDetailLoaded pour compatibilité
|
|
typedef MembreLoaded = MembreDetailLoaded;
|
|
|
|
/// État de succès pour les statistiques
|
|
class MembresStatsLoaded extends MembresState {
|
|
const MembresStatsLoaded(this.stats);
|
|
|
|
final Map<String, dynamic> stats;
|
|
|
|
@override
|
|
List<Object?> get props => [stats];
|
|
}
|
|
|
|
/// État de succès pour la création d'un membre
|
|
class MembreCreated extends MembresState {
|
|
const MembreCreated(this.membre);
|
|
|
|
final MembreModel membre;
|
|
|
|
@override
|
|
List<Object?> get props => [membre];
|
|
}
|
|
|
|
/// État de succès pour la mise à jour d'un membre
|
|
class MembreUpdated extends MembresState {
|
|
const MembreUpdated(this.membre);
|
|
|
|
final MembreModel membre;
|
|
|
|
@override
|
|
List<Object?> get props => [membre];
|
|
}
|
|
|
|
/// État de succès pour la suppression d'un membre
|
|
class MembreDeleted extends MembresState {
|
|
const MembreDeleted(this.membreId);
|
|
|
|
final String membreId;
|
|
|
|
@override
|
|
List<Object?> get props => [membreId];
|
|
}
|
|
|
|
/// État d'erreur
|
|
class MembresError extends MembresState {
|
|
const MembresError({
|
|
required this.failure,
|
|
this.previousState,
|
|
});
|
|
|
|
final Failure failure;
|
|
final MembresState? previousState;
|
|
|
|
@override
|
|
List<Object?> get props => [failure, previousState];
|
|
|
|
/// Message d'erreur formaté
|
|
String get message => failure.message;
|
|
|
|
/// Code d'erreur
|
|
String? get code => failure.code;
|
|
|
|
/// Indique si c'est une erreur réseau
|
|
bool get isNetworkError => failure is NetworkFailure;
|
|
|
|
/// Indique si c'est une erreur serveur
|
|
bool get isServerError => failure is ServerFailure;
|
|
|
|
/// Indique si c'est une erreur d'authentification
|
|
bool get isAuthError => failure is AuthFailure;
|
|
|
|
/// Indique si c'est une erreur de validation
|
|
bool get isValidationError => failure is ValidationFailure;
|
|
}
|
|
|
|
/// État d'erreur avec données existantes (pour les erreurs non critiques)
|
|
class MembresErrorWithData extends MembresState {
|
|
const MembresErrorWithData({
|
|
required this.failure,
|
|
required this.membres,
|
|
this.isSearchResult = false,
|
|
this.searchQuery,
|
|
});
|
|
|
|
final Failure failure;
|
|
final List<MembreModel> membres;
|
|
final bool isSearchResult;
|
|
final String? searchQuery;
|
|
|
|
@override
|
|
List<Object?> get props => [failure, membres, isSearchResult, searchQuery];
|
|
|
|
/// Message d'erreur formaté
|
|
String get message => failure.message;
|
|
}
|