move pollOptions list to pollViewModel,

add/delete poll options functionality,
don't allow deleting first 2 poll options
This commit is contained in:
toadlyBroodle
2023-03-16 19:06:00 +09:00
parent 63ad7fd205
commit 107e09aefb
3 changed files with 29 additions and 30 deletions

View File

@@ -39,8 +39,6 @@ fun NewPollView(onClose: () -> Unit, baseReplyTo: Note? = null, quote: Note? = n
val scrollState = rememberScrollState() val scrollState = rememberScrollState()
var pollOptionList = listOf<String>()
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
pollViewModel.load(account, baseReplyTo, quote) pollViewModel.load(account, baseReplyTo, quote)
delay(100) delay(100)
@@ -113,10 +111,11 @@ fun NewPollView(onClose: () -> Unit, baseReplyTo: Note? = null, quote: Note? = n
Text(stringResource(R.string.poll_heading_required)) Text(stringResource(R.string.poll_heading_required))
PollRecipientsField() PollRecipientsField()
PollPrimaryDescription(pollViewModel = pollViewModel) PollPrimaryDescription(pollViewModel = pollViewModel)
PollOption(0) pollViewModel.pollOptions.forEachIndexed { index, element ->
PollOption(1) PollOption(pollViewModel, index)
}
Button( Button(
onClick = { /*TODO*/ }, onClick = { pollViewModel.pollOptions.add("") },
border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.32f)), border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.32f)),
colors = ButtonDefaults.outlinedButtonColors( colors = ButtonDefaults.outlinedButtonColors(
contentColor = MaterialTheme.colors.onSurface.copy(alpha = 0.32f) contentColor = MaterialTheme.colors.onSurface.copy(alpha = 0.32f)

View File

@@ -1,5 +1,6 @@
package com.vitorpamplona.amethyst.ui.actions package com.vitorpamplona.amethyst.ui.actions
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Account
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
@@ -7,6 +8,8 @@ import com.vitorpamplona.amethyst.model.User
class NewPollViewModel : NewPostViewModel() { class NewPollViewModel : NewPostViewModel() {
var pollOptions = mutableStateListOf("", "")
override fun load(account: Account, replyingTo: Note?, quote: Note?) { override fun load(account: Account, replyingTo: Note?, quote: Note?) {
super.load(account, replyingTo, quote) super.load(account, replyingTo, quote)
} }

View File

@@ -8,25 +8,20 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.runtime.Composable 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.Modifier
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.actions.NewPollViewModel
@Composable @Composable
fun PollOption(optionIndex: Int) { fun PollOption(pollViewModel: NewPollViewModel, optionIndex: Int) {
var text by rememberSaveable() { mutableStateOf("") }
Row() { Row() {
OutlinedTextField( OutlinedTextField(
value = text, value = pollViewModel.pollOptions[optionIndex],
onValueChange = { text = it }, onValueChange = { pollViewModel.pollOptions[optionIndex] = it },
label = { label = {
Text( Text(
text = stringResource(R.string.poll_option_index).format(optionIndex), text = stringResource(R.string.poll_option_index).format(optionIndex),
@@ -41,21 +36,23 @@ fun PollOption(optionIndex: Int) {
} }
) )
Button( if (optionIndex > 1) {
modifier = Modifier Button(
.padding(start = 6.dp, top = 2.dp) modifier = Modifier
.imePadding(), .padding(start = 6.dp, top = 2.dp)
onClick = { /*TODO*/ }, .imePadding(),
border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.32f)), onClick = { pollViewModel.pollOptions.removeAt(optionIndex) },
colors = ButtonDefaults.outlinedButtonColors( border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.32f)),
contentColor = 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), Image(
contentDescription = "Remove poll option button", painterResource(id = android.R.drawable.ic_delete),
modifier = Modifier.size(18.dp) contentDescription = "Remove poll option button",
) modifier = Modifier.size(18.dp)
)
}
} }
} }
} }
@@ -63,5 +60,5 @@ fun PollOption(optionIndex: Int) {
@Preview @Preview
@Composable @Composable
fun PollOptionPreview() { fun PollOptionPreview() {
PollOption(0) PollOption(NewPollViewModel(), 0)
} }