diff --git a/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterChips.kt b/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterChips.kt new file mode 100644 index 0000000..64a0971 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterChips.kt @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// MyIce Kotlin Multiplatform — schedule/convocation viewer +// Copyright (C) 2026 parano.ch +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package ch.parano.myicek.ui.components + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowDropDown +import androidx.compose.material3.AssistChip +import androidx.compose.material3.AssistChipDefaults +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SegmentedButton +import androidx.compose.material3.SegmentedButtonDefaults +import androidx.compose.material3.SingleChoiceSegmentedButtonRow +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import ch.parano.myicek.filter.TypeFilter + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TypeFilterSegmented( + selected: TypeFilter, + onSelect: (TypeFilter) -> Unit, + modifier: Modifier = Modifier, +) { + SingleChoiceSegmentedButtonRow(modifier = modifier.fillMaxWidth()) { + val options = listOf( + TypeFilter.ALL to "Tous", + TypeFilter.GAMES to "Matchs", + TypeFilter.PRACTICES to "Entraînements", + ) + options.forEachIndexed { index, (filter, label) -> + SegmentedButton( + selected = selected == filter, + onClick = { onSelect(filter) }, + shape = SegmentedButtonDefaults.itemShape(index, options.size), + ) { + Text(label) + } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun FilterAssistChip( + label: String, + selectedValue: String?, + options: List, + onSelect: (String?) -> Unit, + modifier: Modifier = Modifier, +) { + var expanded by remember { mutableStateOf(false) } + val displayValue = selectedValue ?: "Tous" + + Box(modifier = modifier) { + AssistChip( + onClick = { expanded = true }, + label = { Text("$label: $displayValue") }, + trailingIcon = { + Icon( + imageVector = Icons.Filled.ArrowDropDown, + contentDescription = null, + ) + }, + colors = if (selectedValue != null) { + AssistChipDefaults.assistChipColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + labelColor = MaterialTheme.colorScheme.onPrimaryContainer, + ) + } else { + AssistChipDefaults.assistChipColors() + }, + ) + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + ) { + DropdownMenuItem( + text = { Text("Tous") }, + onClick = { + onSelect(null) + expanded = false + }, + ) + options.forEach { option -> + DropdownMenuItem( + text = { Text(option) }, + onClick = { + onSelect(option) + expanded = false + }, + ) + } + } + } +} diff --git a/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterDropdown.kt b/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterDropdown.kt deleted file mode 100644 index 7117c05..0000000 --- a/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterDropdown.kt +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// MyIce Kotlin Multiplatform — schedule/convocation viewer -// Copyright (C) 2026 parano.ch -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -package ch.parano.myicek.ui.components - -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.material3.DropdownMenuItem -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.ExposedDropdownMenuBox -import androidx.compose.material3.ExposedDropdownMenuDefaults -import androidx.compose.material3.OutlinedTextField -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun FilterDropdown( - label: String, - selectedValue: String?, - options: List, - onSelect: (String?) -> Unit, - modifier: Modifier = Modifier, -) { - var expanded by remember { mutableStateOf(false) } - - ExposedDropdownMenuBox( - expanded = expanded, - onExpandedChange = { expanded = it }, - modifier = modifier, - ) { - OutlinedTextField( - value = selectedValue ?: "", - onValueChange = {}, - readOnly = true, - label = { Text(label) }, - trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded) }, - modifier = Modifier.menuAnchor().fillMaxWidth(), - ) - ExposedDropdownMenu( - expanded = expanded, - onDismissRequest = { expanded = false }, - ) { - options.forEach { option -> - DropdownMenuItem( - text = { Text(option) }, - onClick = { - onSelect(option) - expanded = false - }, - ) - } - } - } -}