Files
unionflow-mobile-apps/lib/features/communication/presentation/bloc/messaging_event.dart
dahoud 45dcd2171e feat(communication): module messagerie unifié + contact policies + blocages
Aligné avec le backend MessagingResource :
- Nouveau module communication (conversations, messages, participants)
- Respect des ContactPolicy (qui peut parler à qui par rôle)
- Gestion MemberBlock (blocages individuels)
- UI : conversations list, conversation detail, broadcast, tiles
- BLoC : MessagingBloc avec events (envoyer, démarrer conversation rôle, etc.)
2026-04-15 20:26:35 +00:00

136 lines
3.6 KiB
Dart

/// Événements du BLoC Messagerie v4
library messaging_event;
import 'package:equatable/equatable.dart';
abstract class MessagingEvent extends Equatable {
const MessagingEvent();
@override
List<Object?> get props => [];
}
// ── Conversations ─────────────────────────────────────────────────────────────
/// Charger la liste des conversations
class LoadMesConversations extends MessagingEvent {
const LoadMesConversations();
}
/// Ouvrir une conversation (charge le détail)
class OpenConversation extends MessagingEvent {
final String conversationId;
const OpenConversation(this.conversationId);
@override
List<Object?> get props => [conversationId];
}
/// Démarrer une conversation directe avec un membre
class DemarrerConversationDirecte extends MessagingEvent {
final String destinataireId;
final String organisationId;
final String? premierMessage;
const DemarrerConversationDirecte({
required this.destinataireId,
required this.organisationId,
this.premierMessage,
});
@override
List<Object?> get props => [destinataireId, organisationId, premierMessage];
}
/// Démarrer un canal de communication avec un rôle
class DemarrerConversationRole extends MessagingEvent {
final String roleCible;
final String organisationId;
final String? premierMessage;
const DemarrerConversationRole({
required this.roleCible,
required this.organisationId,
this.premierMessage,
});
@override
List<Object?> get props => [roleCible, organisationId, premierMessage];
}
/// Archiver une conversation
class ArchiverConversation extends MessagingEvent {
final String conversationId;
const ArchiverConversation(this.conversationId);
@override
List<Object?> get props => [conversationId];
}
// ── Messages ──────────────────────────────────────────────────────────────────
/// Envoyer un message texte
class EnvoyerMessageTexte extends MessagingEvent {
final String conversationId;
final String contenu;
final String? messageParentId;
const EnvoyerMessageTexte({
required this.conversationId,
required this.contenu,
this.messageParentId,
});
@override
List<Object?> get props => [conversationId, contenu, messageParentId];
}
/// Charger l'historique des messages
class LoadMessages extends MessagingEvent {
final String conversationId;
final int page;
const LoadMessages({required this.conversationId, this.page = 0});
@override
List<Object?> get props => [conversationId, page];
}
/// Marquer une conversation comme lue
class MarquerLu extends MessagingEvent {
final String conversationId;
const MarquerLu(this.conversationId);
@override
List<Object?> get props => [conversationId];
}
/// Supprimer un message
class SupprimerMessage extends MessagingEvent {
final String conversationId;
final String messageId;
const SupprimerMessage({
required this.conversationId,
required this.messageId,
});
@override
List<Object?> get props => [conversationId, messageId];
}
// ── Temps réel WebSocket ───────────────────────────────────────────────────────
/// Nouveau message reçu via WebSocket
class NouveauMessageWebSocket extends MessagingEvent {
final String conversationId;
const NouveauMessageWebSocket(this.conversationId);
@override
List<Object?> get props => [conversationId];
}