Rename TranslationDetail screen family to TranslationArtifactVersionDetail
Rename the screen and its ViewModel, UI state, and route to reflect that they describe a MantraTranslationArtifactVersion: - TranslationDetailScreen -> TranslationArtifactVersionDetailScreen - TranslationDetailViewModel -> TranslationArtifactVersionDetailViewModel - TranslationDetailUIState -> TranslationArtifactVersionDetailUIState - TranslationDetailRoute -> TranslationArtifactVersionDetailRoute Files moved with git mv to preserve history; all references (nav host, artifact detail screen) updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -43,7 +43,7 @@ import press.mantra.compose.ui.composable.navigation.routes.AddChapterRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.AddTranslationRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.ChapterDetailRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.Route
|
||||
import press.mantra.compose.ui.composable.navigation.routes.TranslationDetailRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.TranslationArtifactVersionDetailRoute
|
||||
import press.mantra.compose.ui.composable.widgets.LoadingDataIndicator
|
||||
import press.mantra.compose.ui.theme.TorchTheme
|
||||
import press.mantra.compose.ui.view.model.ArtifactDetailViewModel
|
||||
@@ -233,7 +233,7 @@ fun ArtifactDetailScreen(
|
||||
Card(
|
||||
onClick = {
|
||||
onNavigateToRoute.invoke(
|
||||
TranslationDetailRoute(
|
||||
TranslationArtifactVersionDetailRoute(
|
||||
activeUserPublicKey = activeUserPublicKey,
|
||||
translationArtifactVersionId = translation.id,
|
||||
chatRoomId = chatRoomId,
|
||||
|
||||
@@ -39,34 +39,34 @@ import press.mantra.compose.ui.composable.navigation.routes.TranslationChapterRo
|
||||
import press.mantra.compose.ui.composable.widgets.DetailRow
|
||||
import press.mantra.compose.ui.composable.widgets.LoadingDataIndicator
|
||||
import press.mantra.compose.ui.theme.TorchTheme
|
||||
import press.mantra.compose.ui.view.model.TranslationDetailViewModel
|
||||
import press.mantra.compose.ui.view.state.TranslationDetailUIState
|
||||
import press.mantra.compose.ui.view.model.TranslationArtifactVersionDetailViewModel
|
||||
import press.mantra.compose.ui.view.state.TranslationArtifactVersionDetailUIState
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun TranslationDetailScreen(
|
||||
fun TranslationArtifactVersionDetailScreen(
|
||||
activeUserPublicKey: HexKey,
|
||||
translationArtifactVersionId: String,
|
||||
chatRoomId: String,
|
||||
relayHint: String?,
|
||||
initialTranslationDetailUIState: TranslationDetailUIState = TranslationDetailUIState.Loading,
|
||||
initialTranslationArtifactVersionDetailUIState: TranslationArtifactVersionDetailUIState = TranslationArtifactVersionDetailUIState.Loading,
|
||||
mantraRepository: MantraRepository,
|
||||
onNavigateToRoute: (Route) -> Unit,
|
||||
onNavigateBack: () -> Unit,
|
||||
) {
|
||||
val translationDetailViewModel: TranslationDetailViewModel = viewModel(
|
||||
factory = TranslationDetailViewModel.factory(
|
||||
val translationDetailViewModel: TranslationArtifactVersionDetailViewModel = viewModel(
|
||||
factory = TranslationArtifactVersionDetailViewModel.factory(
|
||||
activeUserPublicKey = activeUserPublicKey,
|
||||
translationArtifactVersionId = translationArtifactVersionId,
|
||||
chatRoomId = chatRoomId,
|
||||
relayHint = relayHint,
|
||||
initialTranslationDetailUIState = initialTranslationDetailUIState,
|
||||
initialTranslationArtifactVersionDetailUIState = initialTranslationArtifactVersionDetailUIState,
|
||||
mantraRepository = mantraRepository,
|
||||
)
|
||||
)
|
||||
|
||||
when (val translationDetailUIState = translationDetailViewModel.translationDetailUIState) {
|
||||
is TranslationDetailUIState.Error -> {
|
||||
is TranslationArtifactVersionDetailUIState.Error -> {
|
||||
Column(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
@@ -76,7 +76,7 @@ fun TranslationDetailScreen(
|
||||
}
|
||||
}
|
||||
|
||||
is TranslationDetailUIState.Loaded -> {
|
||||
is TranslationArtifactVersionDetailUIState.Loaded -> {
|
||||
val translation = translationDetailUIState.translation
|
||||
Scaffold(
|
||||
topBar = {
|
||||
@@ -163,7 +163,7 @@ fun TranslationDetailScreen(
|
||||
}
|
||||
}
|
||||
|
||||
TranslationDetailUIState.Loading -> {
|
||||
TranslationArtifactVersionDetailUIState.Loading -> {
|
||||
Column(
|
||||
modifier = Modifier.fillMaxWidth().padding(20.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
@@ -182,23 +182,23 @@ fun TranslationDetailScreen(
|
||||
}
|
||||
|
||||
LaunchedEffect(true) {
|
||||
if (initialTranslationDetailUIState == TranslationDetailUIState.Loading) {
|
||||
translationDetailViewModel.initiateTranslationDetail()
|
||||
if (initialTranslationArtifactVersionDetailUIState == TranslationArtifactVersionDetailUIState.Loading) {
|
||||
translationDetailViewModel.initiateTranslationArtifactVersionDetail()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun TranslationDetailScreenPreview() {
|
||||
private fun TranslationArtifactVersionDetailScreenPreview() {
|
||||
TorchTheme {
|
||||
Surface(modifier = Modifier.fillMaxSize()) {
|
||||
TranslationDetailScreen(
|
||||
TranslationArtifactVersionDetailScreen(
|
||||
activeUserPublicKey = "",
|
||||
translationArtifactVersionId = "translationId",
|
||||
chatRoomId = "chatRoomId",
|
||||
relayHint = null,
|
||||
initialTranslationDetailUIState = TranslationDetailUIState.Loaded(
|
||||
initialTranslationArtifactVersionDetailUIState = TranslationArtifactVersionDetailUIState.Loaded(
|
||||
translation = MantraTranslationArtifactVersion(
|
||||
id = "translationId",
|
||||
publicKey = "author",
|
||||
@@ -95,14 +95,14 @@ import press.mantra.compose.ui.composable.navigation.routes.ArtifactDetailRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.ChapterDetailRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.TranslateChunkRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.TranslationChapterRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.TranslationDetailRoute
|
||||
import press.mantra.compose.ui.composable.navigation.routes.TranslationArtifactVersionDetailRoute
|
||||
import press.mantra.compose.ui.composable.ArtifactDetailScreen
|
||||
import press.mantra.compose.ui.composable.AddChapterScreen
|
||||
import press.mantra.compose.ui.composable.AddTranslationScreen
|
||||
import press.mantra.compose.ui.composable.ChapterDetailScreen
|
||||
import press.mantra.compose.ui.composable.TranslateChunkScreen
|
||||
import press.mantra.compose.ui.composable.TranslationChapterScreen
|
||||
import press.mantra.compose.ui.composable.TranslationDetailScreen
|
||||
import press.mantra.compose.ui.composable.TranslationArtifactVersionDetailScreen
|
||||
|
||||
@Composable
|
||||
fun MantraNavHost(
|
||||
@@ -722,10 +722,10 @@ fun MantraNavHost(
|
||||
}
|
||||
)
|
||||
}
|
||||
composable<TranslationDetailRoute> { backStackEntry ->
|
||||
val route = backStackEntry.toRoute<TranslationDetailRoute>()
|
||||
composable<TranslationArtifactVersionDetailRoute> { backStackEntry ->
|
||||
val route = backStackEntry.toRoute<TranslationArtifactVersionDetailRoute>()
|
||||
|
||||
TranslationDetailScreen(
|
||||
TranslationArtifactVersionDetailScreen(
|
||||
activeUserPublicKey = route.activeUserPublicKey,
|
||||
translationArtifactVersionId = route.translationArtifactVersionId,
|
||||
chatRoomId = route.chatRoomId,
|
||||
|
||||
@@ -3,7 +3,7 @@ package press.mantra.compose.ui.composable.navigation.routes
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class TranslationDetailRoute(
|
||||
data class TranslationArtifactVersionDetailRoute(
|
||||
val activeUserPublicKey: String,
|
||||
val translationArtifactVersionId: String,
|
||||
val chatRoomId: String,
|
||||
@@ -15,29 +15,29 @@ import kotlinx.coroutines.IO
|
||||
import kotlinx.coroutines.launch
|
||||
import press.mantra.compose.repository.MantraRepository
|
||||
import press.mantra.compose.ui.view.state.TranslationChapterProgress
|
||||
import press.mantra.compose.ui.view.state.TranslationDetailUIState
|
||||
import press.mantra.compose.ui.view.state.TranslationArtifactVersionDetailUIState
|
||||
|
||||
class TranslationDetailViewModel(
|
||||
class TranslationArtifactVersionDetailViewModel(
|
||||
val translationArtifactVersionId: String,
|
||||
val chatRoomId: String,
|
||||
val activeUserPublicKey: HexKey,
|
||||
val relayHint: String?,
|
||||
initialTranslationDetailUIState: TranslationDetailUIState,
|
||||
initialTranslationArtifactVersionDetailUIState: TranslationArtifactVersionDetailUIState,
|
||||
val mantraRepository: MantraRepository,
|
||||
): ViewModel() {
|
||||
|
||||
var translationDetailUIState: TranslationDetailUIState by mutableStateOf(initialTranslationDetailUIState)
|
||||
var translationDetailUIState: TranslationArtifactVersionDetailUIState by mutableStateOf(initialTranslationArtifactVersionDetailUIState)
|
||||
private set
|
||||
|
||||
private val logger = Logger.withTag(TAG)
|
||||
|
||||
fun initiateTranslationDetail() {
|
||||
logger.d("initiateTranslationDetail: $translationArtifactVersionId")
|
||||
fun initiateTranslationArtifactVersionDetail() {
|
||||
logger.d("initiateTranslationArtifactVersionDetail: $translationArtifactVersionId")
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val translation = mantraRepository.getTranslation(translationArtifactVersionId)
|
||||
|
||||
translationDetailUIState = if (translation == null) {
|
||||
TranslationDetailUIState.Error("Couldn't find the translation")
|
||||
TranslationArtifactVersionDetailUIState.Error("Couldn't find the translation")
|
||||
} else {
|
||||
val chapters = mantraRepository.getTranslationChapters(translationArtifactVersionId)
|
||||
.map { chapter ->
|
||||
@@ -48,7 +48,7 @@ class TranslationDetailViewModel(
|
||||
translatedChunks = chunks.count { it.text.isNotBlank() },
|
||||
)
|
||||
}
|
||||
TranslationDetailUIState.Loaded(
|
||||
TranslationArtifactVersionDetailUIState.Loaded(
|
||||
translation = translation,
|
||||
chapters = chapters,
|
||||
)
|
||||
@@ -57,23 +57,23 @@ class TranslationDetailViewModel(
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "TranslationDetailViewModel"
|
||||
private const val TAG = "TranslationArtifactVersionDetailViewModel"
|
||||
|
||||
fun factory(
|
||||
activeUserPublicKey: HexKey,
|
||||
translationArtifactVersionId: String,
|
||||
chatRoomId: String,
|
||||
relayHint: String?,
|
||||
initialTranslationDetailUIState: TranslationDetailUIState = TranslationDetailUIState.Loading,
|
||||
initialTranslationArtifactVersionDetailUIState: TranslationArtifactVersionDetailUIState = TranslationArtifactVersionDetailUIState.Loading,
|
||||
mantraRepository: MantraRepository,
|
||||
): ViewModelProvider.Factory = viewModelFactory {
|
||||
initializer {
|
||||
TranslationDetailViewModel(
|
||||
TranslationArtifactVersionDetailViewModel(
|
||||
activeUserPublicKey = activeUserPublicKey,
|
||||
translationArtifactVersionId = translationArtifactVersionId,
|
||||
chatRoomId = chatRoomId,
|
||||
relayHint = relayHint,
|
||||
initialTranslationDetailUIState = initialTranslationDetailUIState,
|
||||
initialTranslationArtifactVersionDetailUIState = initialTranslationArtifactVersionDetailUIState,
|
||||
mantraRepository = mantraRepository,
|
||||
)
|
||||
}
|
||||
@@ -10,15 +10,15 @@ data class TranslationChapterProgress(
|
||||
val translatedChunks: Int,
|
||||
)
|
||||
|
||||
sealed interface TranslationDetailUIState {
|
||||
sealed interface TranslationArtifactVersionDetailUIState {
|
||||
data class Loaded(
|
||||
val translation: MantraTranslationArtifactVersion,
|
||||
val chapters: List<TranslationChapterProgress> = emptyList(),
|
||||
): TranslationDetailUIState
|
||||
): TranslationArtifactVersionDetailUIState
|
||||
|
||||
data class Error(
|
||||
val message: String
|
||||
): TranslationDetailUIState
|
||||
): TranslationArtifactVersionDetailUIState
|
||||
|
||||
data object Loading: TranslationDetailUIState
|
||||
data object Loading: TranslationArtifactVersionDetailUIState
|
||||
}
|
||||
Reference in New Issue
Block a user