Some foundational logic to add artifact
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
package press.mantra.compose.database.repository
|
||||
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import press.mantra.compose.database.MantraDatabase
|
||||
import press.mantra.compose.repository.MantraRepository
|
||||
|
||||
class DatabaseMantraRepository(
|
||||
val database: MantraDatabase,
|
||||
val scope: CoroutineScope
|
||||
): MantraRepository {
|
||||
override fun addArtifact(name: String, url: String, versionLabel: String) {
|
||||
TODO("Implement add artifact")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package press.mantra.compose.repository
|
||||
|
||||
interface MantraRepository {
|
||||
fun addArtifact(
|
||||
name: String,
|
||||
url: String,
|
||||
versionLabel: String
|
||||
)
|
||||
|
||||
companion object {
|
||||
val NO_OP_MANTRA_REPOSITORY = object: MantraRepository{
|
||||
override fun addArtifact(
|
||||
name: String,
|
||||
url: String,
|
||||
versionLabel: String
|
||||
) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -50,6 +50,7 @@ import press.mantra.compose.ui.composable.widgets.LoadingDataIndicator
|
||||
import press.mantra.compose.ui.theme.TorchTheme
|
||||
import press.mantra.compose.ui.view.state.ChatRoomMessagingUIState
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
import press.mantra.compose.repository.MantraRepository
|
||||
import press.mantra.compose.ui.composable.navigation.routes.ImplementationPendingRoute
|
||||
import press.mantra.compose.ui.view.model.AddArtifactViewModel
|
||||
import press.mantra.compose.ui.view.state.AddArtifactUIState
|
||||
@@ -63,6 +64,7 @@ fun AddArtifactScreen(
|
||||
initialAddArtifactUIState: AddArtifactUIState = AddArtifactUIState.Loading,
|
||||
nostrRepository: NostrRepository,
|
||||
chatRepository: ChatRepository,
|
||||
mantraRepository: MantraRepository,
|
||||
onNavigateToRouteAndPopUpInclusive: (Route) -> Unit,
|
||||
onNavigateToRoute: (Route) -> Unit,
|
||||
) {
|
||||
@@ -73,7 +75,8 @@ fun AddArtifactScreen(
|
||||
initialAddArtifactUIState = initialAddArtifactUIState,
|
||||
nostrRepository = nostrRepository,
|
||||
chatRepository = chatRepository,
|
||||
activeUserPublicKey = activeUserPublicKey
|
||||
activeUserPublicKey = activeUserPublicKey,
|
||||
mantraRepository = mantraRepository
|
||||
)
|
||||
)
|
||||
|
||||
@@ -114,9 +117,10 @@ fun AddArtifactScreen(
|
||||
ExtendedFloatingActionButton(
|
||||
onClick = {
|
||||
addArtifactViewModel.addArtifact(
|
||||
name = nameFieldState.text.toString(),
|
||||
url = urlFieldState.text.toString(),
|
||||
versionLabel = versionLabelFieldState.text.toString(),
|
||||
localChatRoom = addArtifactUIState.localChatRoom,
|
||||
nameField = nameFieldState,
|
||||
urlField = urlFieldState,
|
||||
versionLabelField = versionLabelFieldState,
|
||||
onSuccess = {
|
||||
onNavigateToRoute.invoke(
|
||||
ImplementationPendingRoute("Add Artifact")
|
||||
@@ -281,7 +285,7 @@ fun AddArtifactScreen(
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun ChatRoomMessagingScreenPreview() {
|
||||
private fun AddArtifactScreenPreview() {
|
||||
TorchTheme {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxSize()
|
||||
@@ -304,6 +308,7 @@ private fun ChatRoomMessagingScreenPreview() {
|
||||
),
|
||||
nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY,
|
||||
chatRepository = ChatRepository.NO_OP_CHAT_REPOSITORY,
|
||||
mantraRepository = MantraRepository.NO_OP_MANTRA_REPOSITORY,
|
||||
onNavigateToRouteAndPopUpInclusive = {},
|
||||
onNavigateToRoute = {}
|
||||
)
|
||||
|
||||
@@ -86,6 +86,7 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.IO
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.launch
|
||||
import press.mantra.compose.database.repository.DatabaseMantraRepository
|
||||
import press.mantra.compose.ui.composable.AddArtifactScreen
|
||||
import press.mantra.compose.ui.composable.navigation.routes.AddArtifactRoute
|
||||
|
||||
@@ -123,6 +124,10 @@ fun MantraNavHost(
|
||||
database = auxDatabaseManager.auxDatabase,
|
||||
applicationIOScope
|
||||
)
|
||||
val databaseMantraRepository = DatabaseMantraRepository(
|
||||
database = auxDatabaseManager.auxDatabase,
|
||||
applicationIOScope
|
||||
)
|
||||
|
||||
val searchRepository = DatabaseSearchRepository(
|
||||
database = auxDatabaseManager.auxDatabase
|
||||
@@ -652,6 +657,7 @@ fun MantraNavHost(
|
||||
relayHint = route.relayHint,
|
||||
nostrRepository = databaseNostrRepository,
|
||||
chatRepository = databaseChatRepository,
|
||||
mantraRepository = databaseMantraRepository,
|
||||
onNavigateToRouteAndPopUpInclusive = { chatRoomDetailRoute ->
|
||||
navController.navigate(
|
||||
route = chatRoomDetailRoute
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package press.mantra.compose.ui.view.model
|
||||
|
||||
import androidx.compose.foundation.text.input.TextFieldState
|
||||
import androidx.compose.foundation.text.input.clearText
|
||||
import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
@@ -16,6 +18,8 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.IO
|
||||
import kotlinx.coroutines.launch
|
||||
import press.mantra.compose.database.model.intermdiate.LocalChatRoom
|
||||
import press.mantra.compose.repository.MantraRepository
|
||||
import press.mantra.compose.ui.view.state.AddArtifactUIState
|
||||
|
||||
class AddArtifactViewModel(
|
||||
@@ -24,7 +28,8 @@ class AddArtifactViewModel(
|
||||
val relayHint: String?,
|
||||
initialAddArtifactUIState: AddArtifactUIState,
|
||||
val nostrRepository: NostrRepository,
|
||||
val chatRepository: ChatRepository
|
||||
val chatRepository: ChatRepository,
|
||||
val mantraRepository: MantraRepository
|
||||
): ViewModel() {
|
||||
|
||||
var addArtifactUIState: AddArtifactUIState by mutableStateOf(initialAddArtifactUIState)
|
||||
@@ -52,13 +57,33 @@ class AddArtifactViewModel(
|
||||
}
|
||||
|
||||
fun addArtifact(
|
||||
name: String,
|
||||
url: String,
|
||||
versionLabel: String,
|
||||
localChatRoom: LocalChatRoom,
|
||||
nameField: TextFieldState,
|
||||
urlField: TextFieldState,
|
||||
versionLabelField: TextFieldState,
|
||||
onSuccess: () -> Unit,
|
||||
onFailure: () -> Unit
|
||||
) {
|
||||
|
||||
if (nameField.text.isNotBlank() && urlField.text.isNotBlank() && versionLabelField.text.isNotBlank()) {
|
||||
val name = nameField.text.toString()
|
||||
val url = urlField.text.toString()
|
||||
val versionLabel = versionLabelField.text.toString()
|
||||
|
||||
nameField.clearText()
|
||||
urlField.clearText()
|
||||
versionLabelField.clearText()
|
||||
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
mantraRepository.addArtifact(
|
||||
name = name,
|
||||
url = url,
|
||||
versionLabel = versionLabel
|
||||
)
|
||||
// TODO: Navigate to artifact...
|
||||
onSuccess.invoke()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -70,7 +95,8 @@ class AddArtifactViewModel(
|
||||
relayHint: String?,
|
||||
initialAddArtifactUIState: AddArtifactUIState = AddArtifactUIState.Loading,
|
||||
nostrRepository: NostrRepository,
|
||||
chatRepository: ChatRepository
|
||||
chatRepository: ChatRepository,
|
||||
mantraRepository: MantraRepository
|
||||
): ViewModelProvider.Factory = viewModelFactory {
|
||||
initializer {
|
||||
AddArtifactViewModel(
|
||||
@@ -79,7 +105,8 @@ class AddArtifactViewModel(
|
||||
relayHint = relayHint,
|
||||
initialAddArtifactUIState = initialAddArtifactUIState,
|
||||
nostrRepository = nostrRepository,
|
||||
chatRepository = chatRepository
|
||||
chatRepository = chatRepository,
|
||||
mantraRepository = mantraRepository
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -419,7 +419,6 @@ class ChatMessageListViewModel(
|
||||
localChatRoom = localChatRoom
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user