This commit is contained in:
Kgothatso Ngako committed 2026-06-02 20:47:30 +02:00
1 parent 160ded9c38
commit 3b73f1932f
1 file changed
+56 -71
@@ -1,31 +1,26 @@
package ac.cord.auxiliary.compose.ui.view.model package ac.cord.auxiliary.compose.ui.view.model
import ac.cord.auxiliary.compose.database.model.ChatMessage
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom
import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString
import ac.cord.auxiliary.compose.repository.ChatRepository import ac.cord.auxiliary.compose.repository.ChatRepository
import ac.cord.auxiliary.compose.repository.NostrRepository import ac.cord.auxiliary.compose.repository.NostrRepository
import ac.cord.auxiliary.compose.ui.composable.navigation.routes.ChatRoomDetailRoute
import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route
import ac.cord.auxiliary.compose.ui.view.state.ChatRoomDetailMessageListUIState import ac.cord.auxiliary.compose.ui.view.state.ChatRoomDetailMessageListUIState
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.foundation.text.input.clearText import androidx.compose.foundation.text.input.clearText
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Key
import androidx.compose.material.icons.filled.KeyOff import androidx.compose.material.icons.filled.KeyOff
import androidx.compose.material.icons.filled.LockClock
import androidx.compose.material.icons.filled.Signpost
import androidx.compose.material.icons.filled.VpnKey
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -47,12 +42,10 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory import androidx.lifecycle.viewmodel.viewModelFactory
import co.touchlab.kermit.Logger import co.touchlab.kermit.Logger
import fr.acinq.lightning.utils.UUID
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO import kotlinx.coroutines.IO
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlin.uuid.Uuid
class ChatRoomDetailMessageListViewModel( class ChatRoomDetailMessageListViewModel(
initialChatRoomDetailMessageListUIState: ChatRoomDetailMessageListUIState, initialChatRoomDetailMessageListUIState: ChatRoomDetailMessageListUIState,
@@ -162,81 +155,73 @@ class ChatRoomDetailMessageListViewModel(
items = chatRoomDetailMessageListUIState.chatMessageList, items = chatRoomDetailMessageListUIState.chatMessageList,
key = { it.chatMessage.id } key = { it.chatMessage.id }
) { localChatMessage -> ) { localChatMessage ->
Row { BoxWithConstraints(
modifier = Modifier.fillMaxWidth()
if (localChatMessage.chatMessage.isUserMessage) { ) {
Spacer( val screenWidth = maxWidth
modifier = Modifier.width(40.dp)
)
Spacer(
modifier = Modifier.weight(1f)
)
}
Card(
onClick = {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = if (localChatMessage.chatMessage.isUserMessage) {
Arrangement.End
} else {
Arrangement.Start
} }
) { ) {
Column( Card(
modifier = Modifier.padding(10.dp), modifier = Modifier.widthIn(
horizontalAlignment = if (localChatMessage.chatMessage.isUserMessage) { max = screenWidth * 0.8f
Alignment.End ).wrapContentWidth(),
} else { onClick = {
Alignment.Start
}, },
verticalArrangement = Arrangement.spacedBy(6.dp)
) { ) {
if (localChatMessage.chatMessage.isUserMessage.not()) { Column(
Text( modifier = Modifier.padding(10.dp),
text = localChatMessage.chatMessage.senderPublicKey, // TODO: Get send name... horizontalAlignment = if (localChatMessage.chatMessage.isUserMessage) {
maxLines = 1,
overflow = TextOverflow.MiddleEllipsis,
style = MaterialTheme.typography.labelSmall
)
}
Text(
text = localChatMessage.chatMessage.content,
style = MaterialTheme.typography.bodyMedium
)
Row(
horizontalArrangement = Arrangement.spacedBy(
10.dp,
Alignment.End Alignment.End
), } else {
verticalAlignment = Alignment.CenterVertically, Alignment.Start
},
verticalArrangement = Arrangement.spacedBy(6.dp)
) { ) {
Text( if (localChatMessage.chatMessage.isUserMessage.not()) {
text = localChatMessage.chatMessage.createdAt.toFormattedTimeAndDateString(), Text(
style = MaterialTheme.typography.labelSmall text = localChatMessage.chatMessage.senderPublicKey, // TODO: Get send name...
) maxLines = 1,
if (localChatMessage.chatMessage.isUserMessage) { overflow = TextOverflow.MiddleEllipsis,
Icon( style = MaterialTheme.typography.labelSmall
Icons.Default.KeyOff,
contentDescription = "Message status"
) )
} }
Text(
text = localChatMessage.chatMessage.content,
style = MaterialTheme.typography.bodyMedium
)
Row(
horizontalArrangement = Arrangement.spacedBy(
10.dp,
Alignment.End
),
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = localChatMessage.chatMessage.createdAt.toFormattedTimeAndDateString(),
style = MaterialTheme.typography.labelSmall
)
if (localChatMessage.chatMessage.isUserMessage) {
Icon(
Icons.Default.KeyOff,
contentDescription = "Message status"
)
}
}
} }
} }
} }
if (!localChatMessage.chatMessage.isUserMessage) {
Spacer(
modifier = Modifier.weight(1f)
)
Spacer(
modifier = Modifier.width(40.dp)
)
}
} }
} }
} }
} }