mirror of
https://github.com/greenart7c3/Amber.git
synced 2026-10-05 19:08:23 +00:00
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:
+26
@@ -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)
|
||||
|
||||
+26
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user