diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ChatRoomDetailScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ChatRoomDetailScreen.kt index 40ae713d..c0452b21 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ChatRoomDetailScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ChatRoomDetailScreen.kt @@ -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( diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/TorchNavHost.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/TorchNavHost.kt index a4415189..4b437187 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/TorchNavHost.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/TorchNavHost.kt @@ -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 { backStackEntry -> val route = backStackEntry.toRoute() - _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 diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt index b498fd49..b77263df 100755 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt @@ -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() { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/MetadataEventDetail.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/MetadataEventDetail.kt index 94363271..bd670147 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/MetadataEventDetail.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/MetadataEventDetail.kt @@ -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, ) ) diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomCreationViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomCreationViewModel.kt index 2edc987b..0f7ab194 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomCreationViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomCreationViewModel.kt @@ -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 + ) ) } } diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailViewModel.kt index 99c71762..cb1b20f4 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailViewModel.kt @@ -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 = 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, diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt index 08e47fe5..72b7afc6 100755 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt @@ -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 ) )