edit method

Future<void> edit(
  1. Message msg,
  2. String content
)

Implementation

Future<void> edit(Message msg, String content) async {
  if (content.isEmpty || content == msg.content) return;

  final editedAt = ChatValueTimestamp.now();

  final updatedMsg = switch (msg) {
    TextMessage() => msg.copyWith(
        isEdited: true,
        editedAt: editedAt,
        text: content,
      ),
    LinkMessage() => msg.copyWith(
        isEdited: true,
        editedAt: editedAt,
        link: content,
      ),
    _ => null,
  };

  if (updatedMsg == null) return;
  put(updatedMsg);

  final status = await RoomManager.i.updateMessage(
    roomId,
    msg.id,
    {
      MessageKeys.i.isEdited: true,
      MessageKeys.i.content: content,
      MessageKeys.i.editedAt: editedAt,
    },
    roomValues: {
      if (room.lastMessageId == msg.id)
        RoomKeys.i.lastMessage: updatedMsg.lastMessage(),
    },
  );

  if (!status) put(msg);
}