``` class ChatViewModel { init { // ?...
# rx
u
Copy code
class ChatViewModel {

    init {
        // ??????
    }

    fun editMessageClick(messageId: Long, newText: String) {
        messageManager.editMessage(messageId, newText)
    }
}

class MessageManager {
    val eventsRelays = mapOf<Long, BehaviourRelay<Event>>()
    private val disposables = CompositeDisposable()

    fun editMessage(messageId, newText) {
        disposables += database.update(messageId, newText, State.SENDING)
            .flatMap { apiClient.editMessage(...)}
            .flatMap { database.update(messageId, newText, State.SENT )}
            .asEvents()
            .subscribe(eventsRelay[messageId])
    }
}