Add link between lexiconDetail and questDetail
This commit is contained in:
parent
b17eefac39
commit
4967989315
3 changed files with 23 additions and 5 deletions
|
|
@ -1,9 +1,7 @@
|
|||
package com.pixelized.rplexicon.repository
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.core.net.toUri
|
||||
import com.google.api.client.extensions.android.http.AndroidHttp
|
||||
import com.google.api.client.json.gson.GsonFactory
|
||||
import com.google.api.services.sheets.v4.Sheets
|
||||
|
|
@ -42,6 +40,10 @@ class LexiconRepository @Inject constructor(
|
|||
private val _data = MutableStateFlow<List<Lexicon>>(emptyList())
|
||||
val data: StateFlow<List<Lexicon>> get() = _data
|
||||
|
||||
fun findId(name: String?): Int? {
|
||||
return name?.let { _data.value.firstOrNull { item -> item.name == it }?.id }
|
||||
}
|
||||
|
||||
@Throws(ServiceNotReady::class, IncompatibleSheetStructure::class, Exception::class)
|
||||
suspend fun fetchLexicon() {
|
||||
val service = sheetService
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.pixelized.rplexicon.ui.screens.quest.detail
|
|||
import android.content.res.Configuration
|
||||
import android.net.Uri
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
|
|
@ -54,6 +55,7 @@ import com.pixelized.rplexicon.ui.composable.BackgroundImage
|
|||
import com.pixelized.rplexicon.ui.composable.remember.LazyListOffset
|
||||
import com.pixelized.rplexicon.ui.composable.remember.rememberLazyListOffset
|
||||
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
|
||||
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexiconDetail
|
||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||
import java.lang.Integer.min
|
||||
|
|
@ -69,6 +71,7 @@ data class QuestDetailUio(
|
|||
data class QuestStep(
|
||||
val completed: Boolean,
|
||||
val subtitle: String?,
|
||||
val giverId: Int? = null,
|
||||
val giver: String?,
|
||||
val place: String?,
|
||||
val individualReward: String?,
|
||||
|
|
@ -87,6 +90,7 @@ data class AnnotatedQuestDetailUio(
|
|||
data class AnnotatedQuestStep(
|
||||
val completed: Boolean,
|
||||
val subtitle: String?,
|
||||
val giverId: Int?,
|
||||
val giver: String?,
|
||||
val place: String?,
|
||||
val individualReward: String?,
|
||||
|
|
@ -117,6 +121,7 @@ private fun QuestDetailUio.QuestStep.annotate(): AnnotatedQuestDetailUio.Annotat
|
|||
AnnotatedQuestDetailUio.AnnotatedQuestStep(
|
||||
completed = completed,
|
||||
subtitle = subtitle,
|
||||
giverId = giverId,
|
||||
giver = giver,
|
||||
place = place,
|
||||
individualReward = individualReward,
|
||||
|
|
@ -146,6 +151,7 @@ fun QuestDetailScreen(
|
|||
modifier = Modifier.fillMaxSize(),
|
||||
item = viewModel.quest,
|
||||
onBack = { screen.popBackStack() },
|
||||
onGiver = { screen.navigateToLexiconDetail(id = it) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -156,6 +162,7 @@ private fun QuestDetailContent(
|
|||
modifier: Modifier = Modifier,
|
||||
item: State<QuestDetailUio>,
|
||||
onBack: () -> Unit,
|
||||
onGiver: (Int) -> Unit,
|
||||
) {
|
||||
val state = rememberLazyListState()
|
||||
val annotatedQuest = item.value.annotate()
|
||||
|
|
@ -263,7 +270,12 @@ private fun QuestDetailContent(
|
|||
}
|
||||
}
|
||||
quest.giver?.let {
|
||||
Column {
|
||||
Column(
|
||||
modifier = Modifier.clickable(
|
||||
enabled = quest.giverId != null,
|
||||
onClick = { quest.giverId?.let { onGiver(it) } }
|
||||
)
|
||||
) {
|
||||
Text(
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
fontWeight = FontWeight.Bold,
|
||||
|
|
@ -347,6 +359,7 @@ private fun QuestDetailPreview(
|
|||
QuestDetailContent(
|
||||
item = preview,
|
||||
onBack = { },
|
||||
onGiver = { },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import androidx.compose.runtime.State
|
|||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.pixelized.rplexicon.repository.LexiconRepository
|
||||
import com.pixelized.rplexicon.repository.QuestRepository
|
||||
import com.pixelized.rplexicon.ui.navigation.screens.questDetailArgument
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
|
|
@ -12,13 +13,14 @@ import javax.inject.Inject
|
|||
@HiltViewModel
|
||||
class QuestDetailViewModel @Inject constructor(
|
||||
savedStateHandle: SavedStateHandle,
|
||||
repository: QuestRepository,
|
||||
questRepository: QuestRepository,
|
||||
lexiconRepository: LexiconRepository,
|
||||
) : ViewModel() {
|
||||
val quest: State<QuestDetailUio>
|
||||
|
||||
init {
|
||||
val argument = savedStateHandle.questDetailArgument
|
||||
val source = repository.data.value[argument.id]
|
||||
val source = questRepository.data.value[argument.id]
|
||||
|
||||
quest = mutableStateOf(
|
||||
QuestDetailUio(
|
||||
|
|
@ -29,6 +31,7 @@ class QuestDetailViewModel @Inject constructor(
|
|||
QuestDetailUio.QuestStep(
|
||||
completed = entry.complete,
|
||||
subtitle = entry.subtitle,
|
||||
giverId = lexiconRepository.findId(entry.questGiver),
|
||||
giver = entry.questGiver,
|
||||
place = entry.area,
|
||||
individualReward = entry.individualReward,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue