sendReply method

Future<void> sendReply({
  1. required Message originalMessage,
  2. required dynamic partialReply,
  3. required String roomId,
})

Sends a reply to a message in the Firestore. Accepts the original message being replied to, the partial reply message, and the room ID.

Implementation

Future<void> sendReply({
  required mm.Message originalMessage,
  required dynamic partialReply,
  required String roomId,
}) async {
  if (firebaseUser == null) return;

  // Create the reply message with reference to the original
  mm.Message? replyMessage;

  if (partialReply is mm.PartialText) {
    replyMessage = mm.TextMessage.fromPartial(
      author: mm.User(id: firebaseUser!.uid),
      id: '',
      partialText: partialReply,
    ).copyWith(
      repliedMessage: originalMessage,
    );
  } else if (partialReply is mm.PartialImage) {
    replyMessage = mm.ImageMessage.fromPartial(
      author: mm.User(id: firebaseUser!.uid),
      id: '',
      partialImage: partialReply,
    ).copyWith(
      repliedMessage: originalMessage,
      metadata: {
        ...partialReply.metadata ?? {},
      },
    );
  } else if (partialReply is mm.PartialFile) {
    replyMessage = mm.FileMessage.fromPartial(
      author: mm.User(id: firebaseUser!.uid),
      id: '',
      partialFile: partialReply,
    ).copyWith(
      repliedMessage: originalMessage,
      metadata: {
        ...partialReply.metadata ?? {},
      },
    );
  } else if (partialReply is mm.PartialCustom) {
    replyMessage = mm.CustomMessage.fromPartial(
      author: mm.User(id: firebaseUser!.uid),
      id: '',
      partialCustom: partialReply,
    ).copyWith(
      repliedMessage: originalMessage,
      metadata: {
        ...partialReply.metadata ?? {},
      },
    );
  }

  if (replyMessage != null) {
    // debugPrint("=> reply message : $replyMessage");
    sendMessageReply(replyMessage, roomId);
  } else {
    // debugPrint("=> reply message : $replyMessage");
  }
}