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