11package com.cornellappdev.transit.ui.components.home
22
3+ import android.R.attr.contentDescription
4+ import androidx.compose.foundation.BorderStroke
5+ import androidx.compose.foundation.clickable
36import androidx.compose.foundation.layout.Arrangement
47import androidx.compose.foundation.layout.Column
58import androidx.compose.foundation.layout.ExperimentalLayoutApi
69import androidx.compose.foundation.layout.FlowRow
10+ import androidx.compose.foundation.layout.Row
711import androidx.compose.foundation.layout.Spacer
812import androidx.compose.foundation.layout.fillMaxWidth
913import androidx.compose.foundation.layout.height
1014import androidx.compose.foundation.layout.padding
15+ import androidx.compose.foundation.layout.size
16+ import androidx.compose.foundation.layout.width
1117import androidx.compose.foundation.shape.RoundedCornerShape
18+ import androidx.compose.material.icons.Icons
19+ import androidx.compose.material.icons.filled.Close
20+ import androidx.compose.material3.Icon
21+ import androidx.compose.material3.IconButton
1222import androidx.compose.material3.MaterialTheme
1323import androidx.compose.material3.Surface
1424import androidx.compose.material3.Text
1525import androidx.compose.runtime.Composable
26+ import androidx.compose.ui.Alignment
1627import androidx.compose.ui.Modifier
28+ import androidx.compose.ui.res.painterResource
29+ import androidx.compose.ui.text.font.FontWeight
30+ import androidx.compose.ui.tooling.preview.Preview
1731import androidx.compose.ui.unit.dp
32+ import androidx.compose.ui.unit.sp
33+ import com.cornellappdev.transit.ui.theme.TransitBlue
34+ import com.cornellappdev.transit.ui.theme.robotoFamily
1835import com.cornellappdev.transit.ui.viewmodels.FavoritesFilterSheetState
36+ import com.google.common.math.LinearTransformation.horizontal
1937
2038@OptIn(ExperimentalLayoutApi ::class )
2139@Composable
2240fun FilterRow (
2341 selectedFilters : Set <FavoritesFilterSheetState >,
2442 onFilterClick : () -> Unit ,
43+ onRemoveFilter : (FavoritesFilterSheetState ) -> Unit ,
2544 modifier : Modifier = Modifier
2645) {
27- Column (modifier = modifier) {
28- // Filter button
46+ Row (modifier = modifier) {
2947 FilterButton (onFilterClick = onFilterClick)
3048
3149 // Selected filter labels
3250 if (selectedFilters.isNotEmpty()) {
33- Spacer (modifier = Modifier .height (8 .dp))
51+ Spacer (modifier = Modifier .width (8 .dp))
3452 FlowRow (
3553 modifier = Modifier .fillMaxWidth(),
3654 horizontalArrangement = Arrangement .spacedBy(8 .dp),
3755 verticalArrangement = Arrangement .spacedBy(8 .dp)
3856 ) {
3957 selectedFilters.forEach { filter ->
40- FilterLabel (text = filter.label)
58+ FilterLabel (
59+ text = filter.label,
60+ onRemove = { onRemoveFilter(filter) }
61+ )
4162 }
4263 }
4364 }
@@ -47,18 +68,44 @@ fun FilterRow(
4768@Composable
4869private fun FilterLabel (
4970 text : String ,
71+ onRemove : () -> Unit ,
5072 modifier : Modifier = Modifier
5173) {
5274 Surface (
5375 modifier = modifier,
54- shape = RoundedCornerShape (16 .dp),
55- color = MaterialTheme .colorScheme.primaryContainer
76+ shape = RoundedCornerShape (40 .dp),
77+ border = BorderStroke ( 1 .dp, TransitBlue )
5678 ) {
57- Text (
58- text = text,
59- modifier = Modifier .padding(horizontal = 12 .dp, vertical = 6 .dp),
60- style = MaterialTheme .typography.bodySmall,
61- color = MaterialTheme .colorScheme.onPrimaryContainer
62- )
79+ Row (
80+ modifier = modifier.padding(start = 14 .dp, top = 10 .dp, bottom = 10 .dp, end = 8 .dp),
81+ horizontalArrangement = Arrangement .spacedBy(4 .dp),
82+ verticalAlignment = Alignment .CenterVertically
83+ ) {
84+ Text (
85+ text = text,
86+ fontSize = 16 .sp,
87+ fontWeight = FontWeight .Normal ,
88+ fontFamily = robotoFamily,
89+ color = TransitBlue
90+ )
91+ IconButton (
92+ onClick = onRemove,
93+ modifier = Modifier .size(20 .dp)
94+ ) {
95+ Icon (
96+ imageVector = Icons .Default .Close ,
97+ tint = TransitBlue ,
98+ contentDescription = " Remove filter" ,
99+ modifier = Modifier .size(20 .dp)
100+ )
101+ }
102+ }
103+
63104 }
64105}
106+
107+ @Preview
108+ @Composable
109+ private fun FilterLabelPreview (){
110+ FilterLabel (" Eateries" , {})
111+ }
0 commit comments