fix(daily): correct question flow state handling and UI edge cases
This commit is contained in:
parent
43d262f207
commit
a9d17d45ce
|
|
@ -21,7 +21,7 @@ fun DailyQuestionScreen(
|
||||||
subtitle = "A real prompt from the local question deck. Answer privately here, then move into a reveal or discussion path.",
|
subtitle = "A real prompt from the local question deck. Answer privately here, then move into a reveal or discussion path.",
|
||||||
primaryRouteLabel = "Discuss",
|
primaryRouteLabel = "Discuss",
|
||||||
onPrimaryRoute = { question ->
|
onPrimaryRoute = { question ->
|
||||||
onNavigate(AppRoute.questionThread("local-preview", question.id))
|
onNavigate(AppRoute.questionThread(state.coupleId ?: "local-preview", question.id))
|
||||||
},
|
},
|
||||||
onSecondaryRoute = state.question?.let {
|
onSecondaryRoute = state.question?.let {
|
||||||
{ onNavigate(AppRoute.answerReveal(it.id)) }
|
{ onNavigate(AppRoute.answerReveal(it.id)) }
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package com.couplesconnect.app.ui.questions
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.couplesconnect.app.domain.model.Question
|
import com.couplesconnect.app.domain.model.Question
|
||||||
|
import com.couplesconnect.app.domain.repository.AuthRepository
|
||||||
|
import com.couplesconnect.app.domain.repository.CoupleRepository
|
||||||
import com.couplesconnect.app.domain.repository.LocalAnswerRepository
|
import com.couplesconnect.app.domain.repository.LocalAnswerRepository
|
||||||
import com.couplesconnect.app.domain.repository.QuestionRepository
|
import com.couplesconnect.app.domain.repository.QuestionRepository
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
|
@ -17,6 +19,7 @@ data class LocalQuestionUiState(
|
||||||
val isLoading: Boolean = true,
|
val isLoading: Boolean = true,
|
||||||
val error: String? = null,
|
val error: String? = null,
|
||||||
val question: Question? = null,
|
val question: Question? = null,
|
||||||
|
val coupleId: String? = null,
|
||||||
val submitted: Boolean = false,
|
val submitted: Boolean = false,
|
||||||
val pendingWrittenText: String = "",
|
val pendingWrittenText: String = "",
|
||||||
val pendingSelectedOptionIds: List<String> = emptyList(),
|
val pendingSelectedOptionIds: List<String> = emptyList(),
|
||||||
|
|
@ -26,7 +29,9 @@ data class LocalQuestionUiState(
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class DailyQuestionViewModel @Inject constructor(
|
class DailyQuestionViewModel @Inject constructor(
|
||||||
private val repository: QuestionRepository,
|
private val repository: QuestionRepository,
|
||||||
private val localAnswerRepository: LocalAnswerRepository
|
private val localAnswerRepository: LocalAnswerRepository,
|
||||||
|
private val authRepository: AuthRepository,
|
||||||
|
private val coupleRepository: CoupleRepository
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
private val _uiState = MutableStateFlow(LocalQuestionUiState())
|
private val _uiState = MutableStateFlow(LocalQuestionUiState())
|
||||||
|
|
@ -42,9 +47,13 @@ class DailyQuestionViewModel @Inject constructor(
|
||||||
try {
|
try {
|
||||||
val question = repository.getDailyQuestion()
|
val question = repository.getDailyQuestion()
|
||||||
val answer = question?.let { localAnswerRepository.getAnswer(it.id) }
|
val answer = question?.let { localAnswerRepository.getAnswer(it.id) }
|
||||||
|
val coupleId = authRepository.currentUserId?.let { uid ->
|
||||||
|
runCatching { coupleRepository.getCoupleForUser(uid)?.id }.getOrNull()
|
||||||
|
}
|
||||||
_uiState.value = LocalQuestionUiState(
|
_uiState.value = LocalQuestionUiState(
|
||||||
isLoading = false,
|
isLoading = false,
|
||||||
question = question,
|
question = question,
|
||||||
|
coupleId = coupleId,
|
||||||
pendingScaleValue = defaultScaleValue(question)
|
pendingScaleValue = defaultScaleValue(question)
|
||||||
).withLocalAnswer(answer)
|
).withLocalAnswer(answer)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue