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.)
136 lines
3.6 KiB
Dart
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];
|
|
}
|