Handle error on alteration update for a character.
This commit is contained in:
		
							parent
							
								
									2f6d0b3819
								
							
						
					
					
						commit
						57c535afd6
					
				
					 4 changed files with 24 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
    ) {
 | 
			
		||||
        try {
 | 
			
		||||
            characterSheetRepository.updateAlteration(
 | 
			
		||||
                characterSheetId = characterSheetId,
 | 
			
		||||
                alterationId = alterationId,
 | 
			
		||||
                active = active.not(),
 | 
			
		||||
            )
 | 
			
		||||
        } catch (exception: Exception) {
 | 
			
		||||
            val message = ErrorSnackUio.from(exception = exception)
 | 
			
		||||
            _errors.emit(value = message)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -155,7 +155,6 @@ fun GMCharacterPage(
 | 
			
		|||
 | 
			
		||||
        CharacterSheetAlterationDialog(
 | 
			
		||||
            dialog = alterationViewModel.alterationDialog.collectAsState(),
 | 
			
		||||
            onConfirm = { },
 | 
			
		||||
            onTag = {
 | 
			
		||||
                alterationViewModel.selectedTag(id = it)
 | 
			
		||||
            },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue