diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollOption.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollOption.kt index 6f8378cc0..794fa5cbf 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollOption.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollOption.kt @@ -34,8 +34,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.tooling.preview.Preview +import androidx.lifecycle.viewModelScope import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.ui.theme.placeholderText +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch @Composable fun NewPollOption( @@ -45,7 +48,12 @@ fun NewPollOption( Row { val deleteIcon: @Composable (() -> Unit) = { IconButton( - onClick = { pollViewModel.pollOptions.remove(optionIndex) }, + onClick = { + pollViewModel.pollOptions.remove(optionIndex) + pollViewModel.viewModelScope.launch(Dispatchers.IO) { + pollViewModel.saveDraft() + } + }, ) { Icon( imageVector = Icons.Default.Delete, @@ -57,7 +65,12 @@ fun NewPollOption( OutlinedTextField( modifier = Modifier.weight(1F), value = pollViewModel.pollOptions[optionIndex] ?: "", - onValueChange = { pollViewModel.pollOptions[optionIndex] = it }, + onValueChange = { + pollViewModel.pollOptions[optionIndex] = it + pollViewModel.viewModelScope.launch(Dispatchers.IO) { + pollViewModel.saveDraft() + } + }, label = { Text( text = stringResource(R.string.poll_option_index).format(optionIndex + 1), diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt index 3c9cbc915..6ac20c9c3 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt @@ -119,6 +119,7 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.compose.viewModel import coil.compose.AsyncImage import com.google.accompanist.permissions.ExperimentalPermissionsApi @@ -596,6 +597,9 @@ private fun BottomRowActions(postViewModel: NewPostViewModel) { MarkAsSensitive(postViewModel) { postViewModel.wantsToMarkAsSensitive = !postViewModel.wantsToMarkAsSensitive + postViewModel.viewModelScope.launch(Dispatchers.IO) { + postViewModel.saveDraft() + } } AddGeoHash(postViewModel) { @@ -841,7 +845,12 @@ fun SellProduct(postViewModel: NewPostViewModel) { MyTextField( value = postViewModel.title, - onValueChange = { postViewModel.title = it }, + onValueChange = { + postViewModel.title = it + postViewModel.viewModelScope.launch(Dispatchers.IO) { + postViewModel.saveDraft() + } + }, modifier = Modifier.fillMaxWidth(), placeholder = { Text( @@ -884,6 +893,9 @@ fun SellProduct(postViewModel: NewPostViewModel) { postViewModel.price = it } } + postViewModel.viewModelScope.launch(Dispatchers.IO) { + postViewModel.saveDraft() + } }, placeholder = { Text( @@ -948,7 +960,12 @@ fun SellProduct(postViewModel: NewPostViewModel) { TextSpinner( placeholder = conditionTypes.filter { it.first == postViewModel.condition }.first().second, options = conditionOptions, - onSelect = { postViewModel.condition = conditionTypes[it].first }, + onSelect = { + postViewModel.condition = conditionTypes[it].first + postViewModel.viewModelScope.launch(Dispatchers.IO) { + postViewModel.saveDraft() + } + }, modifier = Modifier .weight(1f) @@ -1012,7 +1029,12 @@ fun SellProduct(postViewModel: NewPostViewModel) { categoryTypes.filter { it.second == postViewModel.category.text }.firstOrNull()?.second ?: "", options = categoryOptions, - onSelect = { postViewModel.category = TextFieldValue(categoryTypes[it].second) }, + onSelect = { + postViewModel.category = TextFieldValue(categoryTypes[it].second) + postViewModel.viewModelScope.launch(Dispatchers.IO) { + postViewModel.saveDraft() + } + }, modifier = Modifier .weight(1f) @@ -1047,7 +1069,12 @@ fun SellProduct(postViewModel: NewPostViewModel) { MyTextField( value = postViewModel.locationText, - onValueChange = { postViewModel.locationText = it }, + onValueChange = { + postViewModel.locationText = it + postViewModel.viewModelScope.launch(Dispatchers.IO) { + postViewModel.saveDraft() + } + }, modifier = Modifier.fillMaxWidth(), placeholder = { Text( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt index 2b48befa3..f9c6eedab 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt @@ -1134,6 +1134,9 @@ open class NewPostViewModel() : ViewModel() { } checkMinMax() + viewModelScope.launch(Dispatchers.IO) { + saveDraft() + } } fun updateMaxZapAmountForPoll(textMax: String) { @@ -1153,6 +1156,9 @@ open class NewPostViewModel() : ViewModel() { } checkMinMax() + viewModelScope.launch(Dispatchers.IO) { + saveDraft() + } } fun checkMinMax() {