Skip to content

Commit 7d807bb

Browse files
committed
feat: make filter labels on par with design and include close functionality
1 parent 072e774 commit 7d807bb

3 files changed

Lines changed: 66 additions & 13 deletions

File tree

app/src/main/java/com/cornellappdev/transit/ui/components/home/EcosystemBottomSheetContent.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ private fun BottomSheetFilteredContent(
154154
HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp))
155155
FilterRow(
156156
selectedFilters = homeViewModel.appliedFavoritesFilters.collectAsStateWithLifecycle().value,
157-
onFilterClick = onFilterButtonClick
157+
onFilterClick = onFilterButtonClick,
158+
onRemoveFilter = { filter -> homeViewModel.removeAppliedFilter(filter) }
158159
)
159160
}
160161
}
Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,64 @@
11
package 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
36
import androidx.compose.foundation.layout.Arrangement
47
import androidx.compose.foundation.layout.Column
58
import androidx.compose.foundation.layout.ExperimentalLayoutApi
69
import androidx.compose.foundation.layout.FlowRow
10+
import androidx.compose.foundation.layout.Row
711
import androidx.compose.foundation.layout.Spacer
812
import androidx.compose.foundation.layout.fillMaxWidth
913
import androidx.compose.foundation.layout.height
1014
import androidx.compose.foundation.layout.padding
15+
import androidx.compose.foundation.layout.size
16+
import androidx.compose.foundation.layout.width
1117
import 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
1222
import androidx.compose.material3.MaterialTheme
1323
import androidx.compose.material3.Surface
1424
import androidx.compose.material3.Text
1525
import androidx.compose.runtime.Composable
26+
import androidx.compose.ui.Alignment
1627
import 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
1731
import 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
1835
import com.cornellappdev.transit.ui.viewmodels.FavoritesFilterSheetState
36+
import com.google.common.math.LinearTransformation.horizontal
1937

2038
@OptIn(ExperimentalLayoutApi::class)
2139
@Composable
2240
fun 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
4869
private 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+
}

app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ class HomeViewModel @Inject constructor(
154154
toggleFilterSheet(false)
155155
}
156156

157+
fun removeAppliedFilter(filter: FavoritesFilterSheetState) {
158+
_selectedFavoritesFilters.value = _selectedFavoritesFilters.value - filter
159+
_appliedFavoritesFilters.value = _appliedFavoritesFilters.value - filter
160+
}
161+
157162
fun cancelFavoritesFilters() {
158163
// Restore the previously applied filters
159164
_selectedFavoritesFilters.value = _appliedFavoritesFilters.value

0 commit comments

Comments
 (0)