Files
unionflow-server-api/unionflow-mobile-apps/lib/features/organisations/bloc/organisations_event.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 '📊';
}
}
}