Add select/deselect all functionality to multi-event home screens

Introduce a `TriStateCheckbox` in both `IntentMultiEventHomeScreen` and `BunkerMultiEventHomeScreen` to allow users to toggle the selection state of all items simultaneously. The checkbox reflects the current selection state (On, Off, or Indeterminate) and updates all individual item checkboxes when clicked.
This commit is contained in:
greenart7c3
2026-03-09 16:11:03 -03:00
parent 0c98811b7e
commit a3d0698ae7
2 changed files with 52 additions and 0 deletions
@@ -18,6 +18,7 @@ import androidx.compose.material3.Checkbox
import androidx.compose.material3.CheckboxDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TriStateCheckbox
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -29,6 +30,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.text.capitalize
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.text.toLowerCase
@@ -113,6 +115,30 @@ fun BunkerMultiEventHomeScreen(
SigningAs(accountParam)
val allCheckedState = when {
bunkerRequests.all { it.checked.value } -> ToggleableState.On
bunkerRequests.none { it.checked.value } -> ToggleableState.Off
else -> ToggleableState.Indeterminate
}
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.clickable {
val newValue = allCheckedState != ToggleableState.On
bunkerRequests.forEach { it.checked.value = newValue }
},
) {
TriStateCheckbox(
state = allCheckedState,
onClick = {
val newValue = allCheckedState != ToggleableState.On
bunkerRequests.forEach { it.checked.value = newValue }
},
)
Text(stringResource(R.string.select_deselect_all))
}
Column(
Modifier
.weight(1f)
@@ -20,6 +20,7 @@ import androidx.compose.material3.Checkbox
import androidx.compose.material3.CheckboxDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TriStateCheckbox
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -31,6 +32,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.text.capitalize
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.text.toLowerCase
@@ -121,6 +123,30 @@ fun IntentMultiEventHomeScreen(
SigningAs(accountParam)
val allCheckedState = when {
intents.all { it.checked.value } -> ToggleableState.On
intents.none { it.checked.value } -> ToggleableState.Off
else -> ToggleableState.Indeterminate
}
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.clickable {
val newValue = allCheckedState != ToggleableState.On
intents.forEach { it.checked.value = newValue }
},
) {
TriStateCheckbox(
state = allCheckedState,
onClick = {
val newValue = allCheckedState != ToggleableState.On
intents.forEach { it.checked.value = newValue }
},
)
Text(stringResource(R.string.select_deselect_all))
}
Column(
Modifier
.weight(1f)