Empty composer when message is sent

This commit is contained in:
Benoit Marty 2022-11-09 10:26:39 +01:00
parent c7ab2dd105
commit 031d1e338d
5 changed files with 48 additions and 3 deletions

View file

@ -34,6 +34,7 @@ import androidx.compose.ui.zIndex
import com.airbnb.mvrx.compose.collectAsState
import com.airbnb.mvrx.compose.mavericksViewModel
import io.element.android.x.core.data.LogCompositions
import io.element.android.x.core.data.StableCharSequence
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
@ -58,6 +59,8 @@ fun MessagesScreen(
val timelineItems by viewModel.collectAsState(MessagesViewState::timelineItems)
val hasMoreToLoad by viewModel.collectAsState(MessagesViewState::hasMoreToLoad)
val composerFullScreen by composerViewModel.collectAsState(MessageComposerViewState::isFullScreen)
val composerCanSendMessage by composerViewModel.collectAsState(MessageComposerViewState::isSendButtonVisible)
val composerText by composerViewModel.collectAsState(MessageComposerViewState::text)
MessagesContent(
roomTitle = roomTitle,
roomAvatar = roomAvatar,
@ -65,9 +68,15 @@ fun MessagesScreen(
hasMoreToLoad = hasMoreToLoad,
onReachedLoadMore = viewModel::loadMore,
onBackPressed = onBackPressed,
onSendMessage = viewModel::sendMessage,
onSendMessage = {
viewModel.sendMessage(it)
composerViewModel.updateText("")
},
composerFullScreen = composerFullScreen,
onComposerFullScreenChange = composerViewModel::onComposerFullScreenChange,
onComposerTextChange = composerViewModel::updateText,
composerCanSendMessage = composerCanSendMessage,
composerText = composerText,
)
}
@ -82,6 +91,9 @@ fun MessagesContent(
onSendMessage: (CharSequence) -> Unit,
composerFullScreen: Boolean,
onComposerFullScreenChange: () -> Unit,
onComposerTextChange: (CharSequence) -> Unit,
composerCanSendMessage: Boolean,
composerText: StableCharSequence?,
) {
LogCompositions(tag = "MessagesScreen", msg = "Content")
val lazyListState = rememberLazyListState()
@ -133,6 +145,9 @@ fun MessagesContent(
onSendMessage = onSendMessage,
fullscreen = composerFullScreen,
onFullscreenToggle = onComposerFullScreenChange,
onComposerTextChange = onComposerTextChange,
composerCanSendMessage = composerCanSendMessage,
composerText = composerText?.charSequence,
modifier = Modifier
.fillMaxWidth()
.let {

View file

@ -3,6 +3,7 @@ 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.core.data.StableCharSequence
import io.element.android.x.matrix.MatrixClient
import io.element.android.x.matrix.MatrixInstance
@ -35,4 +36,13 @@ class MessageComposerViewModel(
)
}
}
fun updateText(newText: CharSequence) {
setState {
copy(
text = StableCharSequence(newText),
isSendButtonVisible = newText.isNotEmpty(),
)
}
}
}

View file

@ -1,7 +1,10 @@
package io.element.android.x.features.messages.textcomposer
import androidx.compose.runtime.Stable
import com.airbnb.mvrx.MavericksState
import io.element.android.x.core.data.StableCharSequence
@Stable
data class MessageComposerViewState(
// val roomId: String,
// val canSendMessage: CanSendStatus = CanSendStatus.Allowed,
@ -11,6 +14,6 @@ data class MessageComposerViewState(
// val sendMode: SendMode = SendMode.Regular("", false),
// val voiceRecordingUiState: VoiceMessageRecorderView.RecordingUiState = VoiceMessageRecorderView.RecordingUiState.Idle,
// val voiceBroadcastState: VoiceBroadcastState? = null,
val text: CharSequence? = null,
val text: StableCharSequence? = null,
val isFullScreen: Boolean = false,
) : MavericksState