From 57c535afd6ca242881dd5fdd112b2178e108d415 Mon Sep 17 00:00:00 2001 From: Thomas Andres Gomez Date: Thu, 3 Apr 2025 19:10:54 +0200 Subject: [PATCH] Handle error on alteration update for a character. --- .../CharacterSheetAlterationDialog.kt | 6 +++--- ...CharacterSheetAlterationDialogViewModel.kt | 21 ++++++++++++++----- .../lwa/ui/screen/campaign/CampaignScreen.kt | 6 +++++- .../character/list/GMCharacterPage.kt | 1 - 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/alterteration/CharacterSheetAlterationDialog.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/alterteration/CharacterSheetAlterationDialog.kt index cd5a107..23ead9d 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/alterteration/CharacterSheetAlterationDialog.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/alterteration/CharacterSheetAlterationDialog.kt @@ -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, - 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, diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/alterteration/CharacterSheetAlterationDialogViewModel.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/alterteration/CharacterSheetAlterationDialogViewModel.kt index 5238221..0a3354b 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/alterteration/CharacterSheetAlterationDialogViewModel.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/alterteration/CharacterSheetAlterationDialogViewModel.kt @@ -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() + val errors: SharedFlow 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) + } } } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/CampaignScreen.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/CampaignScreen.kt index 5d6f2cd..3f028f4 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/CampaignScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/CampaignScreen.kt @@ -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 diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/list/GMCharacterPage.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/list/GMCharacterPage.kt index e92d357..958ae71 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/list/GMCharacterPage.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/list/GMCharacterPage.kt @@ -155,7 +155,6 @@ fun GMCharacterPage( CharacterSheetAlterationDialog( dialog = alterationViewModel.alterationDialog.collectAsState(), - onConfirm = { }, onTag = { alterationViewModel.selectedTag(id = it) },