/// É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 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 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 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 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 get props => [id]; } /// Événement pour créer une nouvelle organisation class CreateOrganisation extends OrganisationsEvent { final OrganisationModel organisation; const CreateOrganisation(this.organisation); @override List 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 get props => [id, organisation]; } /// Événement pour supprimer une organisation class DeleteOrganisation extends OrganisationsEvent { final String id; const DeleteOrganisation(this.id); @override List get props => [id]; } /// Événement pour activer une organisation class ActivateOrganisation extends OrganisationsEvent { final String id; const ActivateOrganisation(this.id); @override List get props => [id]; } /// Événement pour filtrer les organisations par statut class FilterOrganisationsByStatus extends OrganisationsEvent { final StatutOrganisation? statut; const FilterOrganisationsByStatus(this.statut); @override List get props => [statut]; } /// Événement pour filtrer les organisations par type class FilterOrganisationsByType extends OrganisationsEvent { final TypeOrganisation? type; const FilterOrganisationsByType(this.type); @override List 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 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 '📊'; } } }