Create a dedicated ViewModel for the composer
This commit is contained in:
parent
cbab671866
commit
c7ab2dd105
5 changed files with 59 additions and 16 deletions
|
|
@ -38,6 +38,8 @@ import io.element.android.x.designsystem.components.avatar.AvatarData
|
|||
import io.element.android.x.features.messages.model.MessagesItemGroupPosition
|
||||
import io.element.android.x.features.messages.model.MessagesTimelineItemState
|
||||
import io.element.android.x.features.messages.model.MessagesViewState
|
||||
import io.element.android.x.features.messages.textcomposer.MessageComposerViewModel
|
||||
import io.element.android.x.features.messages.textcomposer.MessageComposerViewState
|
||||
import io.element.android.x.textcomposer.TextComposer
|
||||
|
||||
private val BUBBLE_RADIUS = 16.dp
|
||||
|
|
@ -49,12 +51,13 @@ fun MessagesScreen(
|
|||
onBackPressed: () -> Unit
|
||||
) {
|
||||
val viewModel: MessagesViewModel = mavericksViewModel(argsFactory = { roomId })
|
||||
val composerViewModel: MessageComposerViewModel = mavericksViewModel(argsFactory = { roomId })
|
||||
LogCompositions(tag = "MessagesScreen", msg = "Root")
|
||||
val roomTitle by viewModel.collectAsState(MessagesViewState::roomName)
|
||||
val roomAvatar by viewModel.collectAsState(MessagesViewState::roomAvatar)
|
||||
val timelineItems by viewModel.collectAsState(MessagesViewState::timelineItems)
|
||||
val hasMoreToLoad by viewModel.collectAsState(MessagesViewState::hasMoreToLoad)
|
||||
val composerFullScreen by viewModel.collectAsState(MessagesViewState::composerFullScreen)
|
||||
val composerFullScreen by composerViewModel.collectAsState(MessageComposerViewState::isFullScreen)
|
||||
MessagesContent(
|
||||
roomTitle = roomTitle,
|
||||
roomAvatar = roomAvatar,
|
||||
|
|
@ -64,7 +67,7 @@ fun MessagesScreen(
|
|||
onBackPressed = onBackPressed,
|
||||
onSendMessage = viewModel::sendMessage,
|
||||
composerFullScreen = composerFullScreen,
|
||||
onComposerFullScreenChange = viewModel::onComposerFullScreenChange,
|
||||
onComposerFullScreenChange = composerViewModel::onComposerFullScreenChange,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,19 +64,6 @@ class MessagesViewModel(
|
|||
viewModelScope.launch {
|
||||
timeline.sendMessage(text.toString())
|
||||
}
|
||||
setState {
|
||||
copy(
|
||||
composerFullScreen = false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun onComposerFullScreenChange() {
|
||||
setState {
|
||||
copy(
|
||||
composerFullScreen = !composerFullScreen
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleInit() {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ data class MessagesViewState(
|
|||
val roomAvatar: AvatarData? = null,
|
||||
val timelineItems: Async<List<MessagesTimelineItemState>> = Uninitialized,
|
||||
val hasMoreToLoad: Boolean = true,
|
||||
val composerFullScreen: Boolean = false,
|
||||
) : MavericksState {
|
||||
|
||||
@Suppress("unused")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
package io.element.android.x.features.messages.textcomposer
|
||||
|
||||
import com.airbnb.mvrx.MavericksViewModel
|
||||
import com.airbnb.mvrx.MavericksViewModelFactory
|
||||
import com.airbnb.mvrx.ViewModelContext
|
||||
import io.element.android.x.matrix.MatrixClient
|
||||
import io.element.android.x.matrix.MatrixInstance
|
||||
|
||||
|
||||
class MessageComposerViewModel(
|
||||
private val client: MatrixClient,
|
||||
private val initialState: MessageComposerViewState
|
||||
) : MavericksViewModel<MessageComposerViewState>(initialState) {
|
||||
|
||||
companion object :
|
||||
MavericksViewModelFactory<MessageComposerViewModel, MessageComposerViewState> {
|
||||
|
||||
override fun create(
|
||||
viewModelContext: ViewModelContext,
|
||||
state: MessageComposerViewState
|
||||
): MessageComposerViewModel? {
|
||||
val matrix = MatrixInstance.getInstance()
|
||||
val client = matrix.activeClient()
|
||||
return MessageComposerViewModel(
|
||||
client,
|
||||
state
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun onComposerFullScreenChange() {
|
||||
setState {
|
||||
copy(
|
||||
isFullScreen = !isFullScreen
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package io.element.android.x.features.messages.textcomposer
|
||||
|
||||
import com.airbnb.mvrx.MavericksState
|
||||
|
||||
data class MessageComposerViewState(
|
||||
// val roomId: String,
|
||||
// val canSendMessage: CanSendStatus = CanSendStatus.Allowed,
|
||||
val isSendButtonVisible: Boolean = false,
|
||||
val rootThreadEventId: String? = null,
|
||||
val startsThread: Boolean = false,
|
||||
// val sendMode: SendMode = SendMode.Regular("", false),
|
||||
// val voiceRecordingUiState: VoiceMessageRecorderView.RecordingUiState = VoiceMessageRecorderView.RecordingUiState.Idle,
|
||||
// val voiceBroadcastState: VoiceBroadcastState? = null,
|
||||
val text: CharSequence? = null,
|
||||
val isFullScreen: Boolean = false,
|
||||
) : MavericksState
|
||||
Loading…
Add table
Add a link
Reference in a new issue