From 107e09aefbd9c52a640a4afbda8a5516f891ece3 Mon Sep 17 00:00:00 2001 From: toadlyBroodle Date: Thu, 16 Mar 2023 19:06:00 +0900 Subject: [PATCH] move pollOptions list to pollViewModel, add/delete poll options functionality, don't allow deleting first 2 poll options --- .../amethyst/ui/actions/NewPollView.kt | 9 ++-- .../amethyst/ui/actions/NewPollViewModel.kt | 3 ++ .../amethyst/ui/components/PollOption.kt | 47 +++++++++---------- 3 files changed, 29 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollView.kt index 79910b275..3cd3caf28 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollView.kt @@ -39,8 +39,6 @@ fun NewPollView(onClose: () -> Unit, baseReplyTo: Note? = null, quote: Note? = n val scrollState = rememberScrollState() - var pollOptionList = listOf() - LaunchedEffect(Unit) { pollViewModel.load(account, baseReplyTo, quote) delay(100) @@ -113,10 +111,11 @@ fun NewPollView(onClose: () -> Unit, baseReplyTo: Note? = null, quote: Note? = n Text(stringResource(R.string.poll_heading_required)) PollRecipientsField() PollPrimaryDescription(pollViewModel = pollViewModel) - PollOption(0) - PollOption(1) + pollViewModel.pollOptions.forEachIndexed { index, element -> + PollOption(pollViewModel, index) + } Button( - onClick = { /*TODO*/ }, + onClick = { pollViewModel.pollOptions.add("") }, border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.32f)), colors = ButtonDefaults.outlinedButtonColors( contentColor = MaterialTheme.colors.onSurface.copy(alpha = 0.32f) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollViewModel.kt index 39b43f96b..e13bc4ca8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPollViewModel.kt @@ -1,5 +1,6 @@ package com.vitorpamplona.amethyst.ui.actions +import androidx.compose.runtime.mutableStateListOf import androidx.compose.ui.text.input.TextFieldValue import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Note @@ -7,6 +8,8 @@ import com.vitorpamplona.amethyst.model.User class NewPollViewModel : NewPostViewModel() { + var pollOptions = mutableStateListOf("", "") + override fun load(account: Account, replyingTo: Note?, quote: Note?) { super.load(account, replyingTo, quote) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/PollOption.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/PollOption.kt index 2a935379d..ab2b1d134 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/PollOption.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/PollOption.kt @@ -8,25 +8,20 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.* import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.ui.actions.NewPollViewModel @Composable -fun PollOption(optionIndex: Int) { - var text by rememberSaveable() { mutableStateOf("") } - +fun PollOption(pollViewModel: NewPollViewModel, optionIndex: Int) { Row() { OutlinedTextField( - value = text, - onValueChange = { text = it }, + value = pollViewModel.pollOptions[optionIndex], + onValueChange = { pollViewModel.pollOptions[optionIndex] = it }, label = { Text( text = stringResource(R.string.poll_option_index).format(optionIndex), @@ -41,21 +36,23 @@ fun PollOption(optionIndex: Int) { } ) - Button( - modifier = Modifier - .padding(start = 6.dp, top = 2.dp) - .imePadding(), - onClick = { /*TODO*/ }, - border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.32f)), - colors = ButtonDefaults.outlinedButtonColors( - contentColor = MaterialTheme.colors.onSurface.copy(alpha = 0.32f) - ) - ) { - Image( - painterResource(id = android.R.drawable.ic_delete), - contentDescription = "Remove poll option button", - modifier = Modifier.size(18.dp) - ) + if (optionIndex > 1) { + Button( + modifier = Modifier + .padding(start = 6.dp, top = 2.dp) + .imePadding(), + onClick = { pollViewModel.pollOptions.removeAt(optionIndex) }, + border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.32f)), + colors = ButtonDefaults.outlinedButtonColors( + contentColor = MaterialTheme.colors.onSurface.copy(alpha = 0.32f) + ) + ) { + Image( + painterResource(id = android.R.drawable.ic_delete), + contentDescription = "Remove poll option button", + modifier = Modifier.size(18.dp) + ) + } } } } @@ -63,5 +60,5 @@ fun PollOption(optionIndex: Int) { @Preview @Composable fun PollOptionPreview() { - PollOption(0) + PollOption(NewPollViewModel(), 0) }