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