Use chatRoomId
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
package at.torch.compose.ui.composable
|
||||
|
||||
import at.torch.compose.database.model.ChatRoom
|
||||
import at.torch.compose.database.model.intermdiate.LocalChatRoom
|
||||
import at.torch.compose.ui.composable.widgets.LoadingDataIndicator
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@@ -16,6 +13,7 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.text.input.rememberTextFieldState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Mic
|
||||
import androidx.compose.material.icons.filled.PersonAdd
|
||||
import androidx.compose.material.icons.filled.Send
|
||||
import androidx.compose.material3.BottomAppBarDefaults
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
@@ -39,21 +37,22 @@ import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import at.torch.compose.ui.view.model.ChatRoomDetailViewModel
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
|
||||
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ChatRoomDetailScreen(
|
||||
activeUserPublicKey: HexKey,
|
||||
publicKey: String,
|
||||
chatRoomId: String,
|
||||
relayHint: String?,
|
||||
initialChatRoomDetailUIState: at.torch.compose.ui.view.state.ChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loading,
|
||||
nostrRepository: at.torch.compose.repository.NostrRepository,
|
||||
chatRepository: at.torch.compose.repository.ChatRepository
|
||||
) {
|
||||
val chatRoomDetailViewModel: at.torch.compose.ui.view.model.ChatRoomDetailViewModel = viewModel(
|
||||
factory = _root_ide_package_.at.torch.compose.ui.view.model.ChatRoomDetailViewModel.Companion.factory(
|
||||
publicKey = publicKey,
|
||||
val chatRoomDetailViewModel: ChatRoomDetailViewModel = viewModel(
|
||||
factory = ChatRoomDetailViewModel.factory(
|
||||
chatRoomId = chatRoomId,
|
||||
relayHint = relayHint,
|
||||
initialChatRoomDetailUIState = initialChatRoomDetailUIState,
|
||||
nostrRepository = nostrRepository,
|
||||
@@ -92,6 +91,18 @@ fun ChatRoomDetailScreen(
|
||||
TopAppBar(
|
||||
title = {
|
||||
chatRoomDetailUIState.localChatRoom.RenderChatRoomTitleText()
|
||||
},
|
||||
actions = {
|
||||
IconButton(
|
||||
onClick = {
|
||||
// TODO: Navigate to the invite user screen...
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.PersonAdd,
|
||||
contentDescription = "Invite memeber"
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -268,7 +279,7 @@ private fun ChatRoomDetailScreenPreview() {
|
||||
) {
|
||||
ChatRoomDetailScreen(
|
||||
activeUserPublicKey = "",
|
||||
publicKey = "publicKey",
|
||||
chatRoomId = "publicKey",
|
||||
relayHint = null,
|
||||
initialChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loaded(
|
||||
localChatRoom = _root_ide_package_.at.torch.compose.database.model.intermdiate.LocalChatRoom(
|
||||
|
||||
@@ -15,6 +15,7 @@ import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.compose.composable
|
||||
import at.torch.compose.ui.composable.ChatRoomCreationScreen
|
||||
import at.torch.compose.ui.composable.ChatRoomDetailScreen
|
||||
import at.torch.compose.ui.composable.HomeScreen
|
||||
import at.torch.compose.ui.composable.navigation.routes.ChatRoomCreationRoute
|
||||
import co.touchlab.kermit.Logger
|
||||
@@ -435,9 +436,9 @@ fun TorchNavHost(
|
||||
composable<at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute> { backStackEntry ->
|
||||
val route = backStackEntry.toRoute<at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute>()
|
||||
|
||||
_root_ide_package_.at.torch.compose.ui.composable.ChatRoomDetailScreen(
|
||||
ChatRoomDetailScreen(
|
||||
activeUserPublicKey = route.activeUserPublicKey,
|
||||
publicKey = route.directMessageIdentifier,
|
||||
chatRoomId = route.chatRoomId,
|
||||
relayHint = route.relayHint,
|
||||
nostrRepository = databaseNostrRepository,
|
||||
chatRepository = databaseChatRepository
|
||||
|
||||
@@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable
|
||||
@Serializable
|
||||
data class ChatRoomDetailRoute(
|
||||
val activeUserPublicKey: String,
|
||||
val directMessageIdentifier: String, // TODO: have this as a publicKey
|
||||
val chatRoomId: String, // TODO: have this as a publicKey
|
||||
val relayHint: String?
|
||||
): Route() {
|
||||
}
|
||||
@@ -1,10 +1,5 @@
|
||||
package at.torch.compose.ui.composable.widgets.detail
|
||||
|
||||
import at.torch.compose.database.model.NostrEvent
|
||||
import at.torch.compose.database.model.Profile
|
||||
import at.torch.compose.database.model.intermdiate.LocalNostrEvent
|
||||
import at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute
|
||||
import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
@@ -218,7 +213,7 @@ fun MetadataEventDetail(
|
||||
onNavigateToChatRoom.invoke(
|
||||
_root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute(
|
||||
activeUserPublicKey = activeUserPublicKey,
|
||||
directMessageIdentifier = localNostrEvent.nostrEvent.pubKey,
|
||||
chatRoomId = localNostrEvent.nostrEvent.pubKey,
|
||||
relayHint = localNostrEvent.nostrEvent.relayUrl,
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package at.torch.compose.ui.view.model
|
||||
|
||||
import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
@@ -13,23 +11,17 @@ import at.torch.compose.extensions.toHex
|
||||
import at.torch.compose.nostr.Relays
|
||||
import at.torch.compose.repository.ChatRepository
|
||||
import at.torch.compose.repository.NostrRepository
|
||||
import at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute
|
||||
import at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute
|
||||
import at.torch.compose.ui.composable.navigation.routes.Route
|
||||
import at.torch.compose.ui.view.state.ChatRoomDetailUIState
|
||||
import at.torch.compose.ui.view.state.form.ChatRoomCreationFormState
|
||||
import at.torch.compose.ui.view.state.form.CreateProfileFormState
|
||||
import co.touchlab.kermit.Logger
|
||||
import com.vitorpamplona.quartz.marmot.mip01Groups.MarmotGroupData
|
||||
import com.vitorpamplona.quartz.marmot.mls.crypto.Ed25519
|
||||
import com.vitorpamplona.quartz.marmot.mls.crypto.Ed25519KeyPair
|
||||
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroup
|
||||
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroupState
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
import com.vitorpamplona.quartz.nip01Core.core.toHexKey
|
||||
import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||
import com.vitorpamplona.quartz.utils.RandomInstance
|
||||
import fr.acinq.bitcoin.Crypto
|
||||
import fr.acinq.phoenix.data.ActiveWallet
|
||||
import fr.acinq.phoenix.managers.nostrPrivateKey
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -101,7 +93,11 @@ class ChatRoomCreationViewModel(
|
||||
)
|
||||
} else {
|
||||
onNavigateToChatRoom.invoke(
|
||||
ImplementationPendingRoute("Chat Room view ${localChatRoom.chatRoom.id}")
|
||||
ChatRoomDetailRoute(
|
||||
activeUserPublicKey = keyPair.pubKey.toHexKey(),
|
||||
chatRoomId = localChatRoom.chatRoom.id,
|
||||
relayHint = null
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,13 +12,12 @@ import androidx.lifecycle.viewmodel.viewModelFactory
|
||||
import at.torch.compose.ui.view.state.ChatRoomDetailUIState
|
||||
import co.touchlab.kermit.Logger
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
import fr.acinq.bitcoin.Crypto
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.IO
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class ChatRoomDetailViewModel(
|
||||
val directMessageId: String,
|
||||
val chatRoomId: String,
|
||||
val activeUserPublicKey: HexKey,
|
||||
val relayHint: String?,
|
||||
initialChatRoomDetailUIState: ChatRoomDetailUIState,
|
||||
@@ -36,10 +35,10 @@ class ChatRoomDetailViewModel(
|
||||
val isActionPending: MutableState<Boolean> = mutableStateOf(false)
|
||||
|
||||
fun initiateChatRoomDetail() {
|
||||
logger.d("compressed (most likely chat room): $directMessageId")
|
||||
logger.d("compressed (most likely chat room): $chatRoomId")
|
||||
// Get ChatRoomById
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val localChatRoom = chatRepository.getChatRoomByIdentifier(directMessageId)
|
||||
val localChatRoom = chatRepository.getChatRoomByIdentifier(chatRoomId)
|
||||
|
||||
chatRoomDetailUIState = if (localChatRoom == null) {
|
||||
ChatRoomDetailUIState.Error
|
||||
@@ -57,7 +56,7 @@ class ChatRoomDetailViewModel(
|
||||
|
||||
fun factory(
|
||||
activeUserPublicKey: HexKey,
|
||||
publicKey: String,
|
||||
chatRoomId: String,
|
||||
relayHint: String?,
|
||||
initialChatRoomDetailUIState: ChatRoomDetailUIState = ChatRoomDetailUIState.Loading,
|
||||
nostrRepository: at.torch.compose.repository.NostrRepository,
|
||||
@@ -66,7 +65,7 @@ class ChatRoomDetailViewModel(
|
||||
initializer {
|
||||
ChatRoomDetailViewModel(
|
||||
activeUserPublicKey = activeUserPublicKey,
|
||||
directMessageId = publicKey,
|
||||
chatRoomId = chatRoomId,
|
||||
relayHint = relayHint,
|
||||
initialChatRoomDetailUIState = initialChatRoomDetailUIState,
|
||||
nostrRepository = nostrRepository,
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package at.torch.compose.ui.view.model
|
||||
|
||||
import at.torch.compose.database.model.NegentropySynchronizeRequest
|
||||
import at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -133,7 +131,7 @@ class ChatRoomListViewModel(
|
||||
onNavigateToDirectMessageDetail.invoke(
|
||||
_root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute(
|
||||
activeUserPublicKey = publicKey,
|
||||
directMessageIdentifier = localChatRoom.chatRoom.id,
|
||||
chatRoomId = localChatRoom.chatRoom.id,
|
||||
relayHint = localChatRoom.localParticipants.firstOrNull { it.participant.participantPublicKey != localChatRoom.chatRoom.userPublicKey }?.participant?.relayHint
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user