217 lines
5.2 KiB
Dart
217 lines
5.2 KiB
Dart
/// Événements pour le BLoC des organisations
|
|
library organisations_event;
|
|
|
|
import 'package:equatable/equatable.dart';
|
|
import '../data/models/organisation_model.dart';
|
|
|
|
/// Classe de base pour tous les événements des organisations
|
|
abstract class OrganisationsEvent extends Equatable {
|
|
const OrganisationsEvent();
|
|
|
|
@override
|
|
List<Object?> get props => [];
|
|
}
|
|
|
|
/// Événement pour charger la liste des organisations
|
|
class LoadOrganisations extends OrganisationsEvent {
|
|
final int page;
|
|
final int size;
|
|
final String? recherche;
|
|
final bool refresh;
|
|
|
|
const LoadOrganisations({
|
|
this.page = 0,
|
|
this.size = 20,
|
|
this.recherche,
|
|
this.refresh = false,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [page, size, recherche, refresh];
|
|
}
|
|
|
|
/// Événement pour charger plus d'organisations (pagination)
|
|
class LoadMoreOrganisations extends OrganisationsEvent {
|
|
const LoadMoreOrganisations();
|
|
}
|
|
|
|
/// Événement pour rechercher des organisations
|
|
class SearchOrganisations extends OrganisationsEvent {
|
|
final String query;
|
|
|
|
const SearchOrganisations(this.query);
|
|
|
|
@override
|
|
List<Object?> get props => [query];
|
|
}
|
|
|
|
/// Événement pour recherche avancée
|
|
class AdvancedSearchOrganisations extends OrganisationsEvent {
|
|
final String? nom;
|
|
final TypeOrganisation? type;
|
|
final StatutOrganisation? statut;
|
|
final String? ville;
|
|
final String? region;
|
|
final String? pays;
|
|
final int page;
|
|
final int size;
|
|
|
|
const AdvancedSearchOrganisations({
|
|
this.nom,
|
|
this.type,
|
|
this.statut,
|
|
this.ville,
|
|
this.region,
|
|
this.pays,
|
|
this.page = 0,
|
|
this.size = 20,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [nom, type, statut, ville, region, pays, page, size];
|
|
}
|
|
|
|
/// Événement pour charger une organisation spécifique
|
|
class LoadOrganisationById extends OrganisationsEvent {
|
|
final String id;
|
|
|
|
const LoadOrganisationById(this.id);
|
|
|
|
@override
|
|
List<Object?> get props => [id];
|
|
}
|
|
|
|
/// Événement pour créer une nouvelle organisation
|
|
class CreateOrganisation extends OrganisationsEvent {
|
|
final OrganisationModel organisation;
|
|
|
|
const CreateOrganisation(this.organisation);
|
|
|
|
@override
|
|
List<Object?> get props => [organisation];
|
|
}
|
|
|
|
/// Événement pour mettre à jour une organisation
|
|
class UpdateOrganisation extends OrganisationsEvent {
|
|
final String id;
|
|
final OrganisationModel organisation;
|
|
|
|
const UpdateOrganisation(this.id, this.organisation);
|
|
|
|
@override
|
|
List<Object?> get props => [id, organisation];
|
|
}
|
|
|
|
/// Événement pour supprimer une organisation
|
|
class DeleteOrganisation extends OrganisationsEvent {
|
|
final String id;
|
|
|
|
const DeleteOrganisation(this.id);
|
|
|
|
@override
|
|
List<Object?> get props => [id];
|
|
}
|
|
|
|
/// Événement pour activer une organisation
|
|
class ActivateOrganisation extends OrganisationsEvent {
|
|
final String id;
|
|
|
|
const ActivateOrganisation(this.id);
|
|
|
|
@override
|
|
List<Object?> get props => [id];
|
|
}
|
|
|
|
/// Événement pour filtrer les organisations par statut
|
|
class FilterOrganisationsByStatus extends OrganisationsEvent {
|
|
final StatutOrganisation? statut;
|
|
|
|
const FilterOrganisationsByStatus(this.statut);
|
|
|
|
@override
|
|
List<Object?> get props => [statut];
|
|
}
|
|
|
|
/// Événement pour filtrer les organisations par type
|
|
class FilterOrganisationsByType extends OrganisationsEvent {
|
|
final TypeOrganisation? type;
|
|
|
|
const FilterOrganisationsByType(this.type);
|
|
|
|
@override
|
|
List<Object?> get props => [type];
|
|
}
|
|
|
|
/// Événement pour trier les organisations
|
|
class SortOrganisations extends OrganisationsEvent {
|
|
final OrganisationSortType sortType;
|
|
final bool ascending;
|
|
|
|
const SortOrganisations(this.sortType, {this.ascending = true});
|
|
|
|
@override
|
|
List<Object?> get props => [sortType, ascending];
|
|
}
|
|
|
|
/// Événement pour charger les statistiques des organisations
|
|
class LoadOrganisationsStats extends OrganisationsEvent {
|
|
const LoadOrganisationsStats();
|
|
}
|
|
|
|
/// Événement pour effacer les filtres
|
|
class ClearOrganisationsFilters extends OrganisationsEvent {
|
|
const ClearOrganisationsFilters();
|
|
}
|
|
|
|
/// Événement pour rafraîchir les données
|
|
class RefreshOrganisations extends OrganisationsEvent {
|
|
const RefreshOrganisations();
|
|
}
|
|
|
|
/// Événement pour réinitialiser l'état
|
|
class ResetOrganisationsState extends OrganisationsEvent {
|
|
const ResetOrganisationsState();
|
|
}
|
|
|
|
/// Types de tri pour les organisations
|
|
enum OrganisationSortType {
|
|
nom,
|
|
dateCreation,
|
|
nombreMembres,
|
|
type,
|
|
statut,
|
|
}
|
|
|
|
/// Extension pour les types de tri
|
|
extension OrganisationSortTypeExtension on OrganisationSortType {
|
|
String get displayName {
|
|
switch (this) {
|
|
case OrganisationSortType.nom:
|
|
return 'Nom';
|
|
case OrganisationSortType.dateCreation:
|
|
return 'Date de création';
|
|
case OrganisationSortType.nombreMembres:
|
|
return 'Nombre de membres';
|
|
case OrganisationSortType.type:
|
|
return 'Type';
|
|
case OrganisationSortType.statut:
|
|
return 'Statut';
|
|
}
|
|
}
|
|
|
|
String get icon {
|
|
switch (this) {
|
|
case OrganisationSortType.nom:
|
|
return '📝';
|
|
case OrganisationSortType.dateCreation:
|
|
return '📅';
|
|
case OrganisationSortType.nombreMembres:
|
|
return '👥';
|
|
case OrganisationSortType.type:
|
|
return '🏷️';
|
|
case OrganisationSortType.statut:
|
|
return '📊';
|
|
}
|
|
}
|
|
}
|