Handle error on alteration update for a character.

This commit is contained in:
Thomas Andres Gomez 2025-04-03 19:10:54 +02:00
parent 2f6d0b3819
commit 57c535afd6
4 changed files with 24 additions and 10 deletions

View file

@ -28,10 +28,13 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.pixelized.desktop.lwa.ui.composable.error.ErrorSnackHandler
import com.pixelized.desktop.lwa.ui.composable.error.ErrorSnackUio
import com.pixelized.desktop.lwa.ui.composable.textfield.LwaTextFieldUio
import com.pixelized.desktop.lwa.ui.screen.gamemaster.common.GMFilterHeader
import com.pixelized.desktop.lwa.ui.screen.gamemaster.common.tag.GMTagUio
import com.pixelized.desktop.lwa.ui.theme.lwa
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.StateFlow
import lwacharactersheet.composeapp.generated.resources.Res
import lwacharactersheet.composeapp.generated.resources.ic_close_24dp
@ -50,7 +53,6 @@ data class CharacterSheetAlterationDialogUio(
@Composable
fun CharacterSheetAlterationDialog(
dialog: State<CharacterSheetAlterationDialogUio?>,
onConfirm: (CharacterSheetAlterationDialogUio) -> Unit,
onTag: (String) -> Unit,
onAlteration: (characterSheetId: String, alterationId: String, active: Boolean) -> Unit,
onDismissRequest: () -> Unit,
@ -65,7 +67,6 @@ fun CharacterSheetAlterationDialog(
content = {
CharacterSheetAlterationContent(
dialog = it,
onConfirm = onConfirm,
onTag = onTag,
onAlteration = onAlteration,
onDismissRequest = onDismissRequest,
@ -78,7 +79,6 @@ fun CharacterSheetAlterationDialog(
@Composable
fun CharacterSheetAlterationContent(
dialog: CharacterSheetAlterationDialogUio,
onConfirm: (CharacterSheetAlterationDialogUio) -> Unit,
onTag: (String) -> Unit,
onAlteration: (characterSheetId: String, alterationId: String, active: Boolean) -> Unit,
onDismissRequest: () -> Unit,

View file

@ -5,12 +5,15 @@ import androidx.lifecycle.viewModelScope
import com.pixelized.desktop.lwa.repository.alteration.AlterationRepository
import com.pixelized.desktop.lwa.repository.characterSheet.CharacterSheetRepository
import com.pixelized.desktop.lwa.repository.tag.TagRepository
import com.pixelized.desktop.lwa.ui.composable.error.ErrorSnackUio
import com.pixelized.desktop.lwa.ui.composable.textfield.LwaTextFieldUio
import com.pixelized.desktop.lwa.ui.screen.gamemaster.common.tag.GMTagFactory
import com.pixelized.desktop.lwa.ui.screen.gamemaster.common.tag.GMTagUio
import com.pixelized.desktop.lwa.utils.extention.unAccent
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
@ -65,6 +68,9 @@ class CharacterSheetAlterationDialogViewModel(
initialValue = emptyList(),
)
private val _errors = MutableSharedFlow<ErrorSnackUio>()
val errors: SharedFlow<ErrorSnackUio> get() = _errors
@OptIn(ExperimentalCoroutinesApi::class)
val alterationDialog = selectedCharacterSheetIdFlow
.flatMapLatest { characterSheetId ->
@ -112,10 +118,15 @@ class CharacterSheetAlterationDialogViewModel(
alterationId: String,
active: Boolean,
) {
characterSheetRepository.updateAlteration(
characterSheetId = characterSheetId,
alterationId = alterationId,
active = active.not(),
)
try {
characterSheetRepository.updateAlteration(
characterSheetId = characterSheetId,
alterationId = alterationId,
active = active.not(),
)
} catch (exception: Exception) {
val message = ErrorSnackUio.from(exception = exception)
_errors.emit(value = message)
}
}
}

View file

@ -37,6 +37,7 @@ import com.pixelized.desktop.lwa.ui.composable.character.characteristic.Characte
import com.pixelized.desktop.lwa.ui.composable.character.characteristic.CharacterSheetCharacteristicDialogViewModel
import com.pixelized.desktop.lwa.ui.composable.character.diminished.CharacterSheetDiminishedDialog
import com.pixelized.desktop.lwa.ui.composable.character.diminished.CharacterSheetDiminishedDialogViewModel
import com.pixelized.desktop.lwa.ui.composable.error.ErrorSnackHandler
import com.pixelized.desktop.lwa.ui.composable.key.KeyHandler
import com.pixelized.desktop.lwa.ui.navigation.screen.LocalScreenController
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.navigateToLevelScreen
@ -200,7 +201,6 @@ fun CampaignScreen(
CharacterSheetAlterationDialog(
dialog = alterationViewModel.alterationDialog.collectAsState(),
onConfirm = { },
onTag = {
alterationViewModel.selectedTag(id = it)
},
@ -226,6 +226,10 @@ fun CampaignScreen(
}
}
)
ErrorSnackHandler(
error = alterationViewModel.errors,
)
}
@Composable

View file

@ -155,7 +155,6 @@ fun GMCharacterPage(
CharacterSheetAlterationDialog(
dialog = alterationViewModel.alterationDialog.collectAsState(),
onConfirm = { },
onTag = {
alterationViewModel.selectedTag(id = it)
},