Skip to content

Commit 5dc83ea

Browse files
committed
Abstract results lazy column
1 parent 91c976f commit 5dc83ea

3 files changed

Lines changed: 75 additions & 58 deletions

File tree

Lines changed: 60 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,88 @@
11
package com.cornellappdev.score.components.highlights
22

33
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.Spacer
6+
import androidx.compose.foundation.layout.height
47
import androidx.compose.foundation.layout.padding
58
import androidx.compose.foundation.lazy.LazyColumn
69
import androidx.compose.foundation.lazy.items
10+
import androidx.compose.material3.Text
711
import androidx.compose.runtime.Composable
812
import androidx.compose.ui.Modifier
913
import androidx.compose.ui.tooling.preview.Preview
1014
import androidx.compose.ui.unit.dp
15+
import com.cornellappdev.score.R
16+
import com.cornellappdev.score.components.EmptyStateBox
1117
import com.cornellappdev.score.components.ScorePreview
1218
import com.cornellappdev.score.model.HighlightData
19+
import com.cornellappdev.score.theme.Style.bodyNormal
1320
import com.cornellappdev.score.util.highlightsList
21+
import com.cornellappdev.score.util.recentSearchList
1422

1523
@Composable
1624
fun HighlightsCardLazyColumn(
17-
highlightsList: List<HighlightData>
25+
recentSearchList: List<String>,
26+
query: String,
27+
highlightsList: List<HighlightData>,
28+
numResultsHeader: (@Composable () -> Unit)? = null
1829
) {
19-
LazyColumn(
20-
modifier = Modifier.padding(top = 16.dp),
21-
verticalArrangement = Arrangement.spacedBy(16.dp)
30+
Column(
31+
modifier = Modifier.padding(horizontal = 24.dp)
2232
) {
23-
items(highlightsList) { item ->
24-
when (item) {
25-
is HighlightData.Video -> VideoHighlightCard(item.data, true)
26-
is HighlightData.Article -> ArticleHighlightCard(item.data, true)
33+
if (recentSearchList.isNotEmpty() && query.isEmpty()) { //start state: no search attempted yet
34+
RecentSearches(recentSearchList)
35+
} else if (query.isNotEmpty()) { //filtering - will pull this out to the viewmodel when i do that, just here for sanity check rn
36+
val filteredList = highlightsList.filter {
37+
it.title.contains(query, ignoreCase = true)
38+
}
39+
if (filteredList.isEmpty()) {
40+
EmptyStateBox(
41+
icon = R.drawable.ic_kid_star,
42+
title = "No results yet.",
43+
)
44+
} else {
45+
numResultsHeader?.invoke()
46+
LazyColumn(
47+
verticalArrangement = Arrangement.spacedBy(16.dp)
48+
) {
49+
items(highlightsList) { item ->
50+
when (item) {
51+
is HighlightData.Video -> VideoHighlightCard(item.data, true)
52+
is HighlightData.Article -> ArticleHighlightCard(item.data, true)
53+
}
54+
}
55+
}
2756
}
2857
}
2958
}
3059
}
3160

61+
/* Used to display number of results in on HighlightsSearchScreen*/
62+
@Composable
63+
fun HighlightsCardLazyColumnNumResultsHeader(
64+
size: Int
65+
) {
66+
Column {
67+
Text("$size Results", style = bodyNormal)
68+
Spacer(Modifier.height(16.dp))
69+
}
70+
}
71+
72+
@Preview
73+
@Composable
74+
private fun HighlightsCardLazyColumnSubScreenPreview() {
75+
ScorePreview {
76+
HighlightsCardLazyColumn(recentSearchList, "", highlightsList)
77+
}
78+
}
79+
3280
@Preview
3381
@Composable
34-
private fun HighlightsCardLazyColumnPreview() {
82+
private fun HighlightsCardLazyColumnSearchResultsPreview() {
3583
ScorePreview {
36-
HighlightsCardLazyColumn(highlightsList)
84+
HighlightsCardLazyColumn(
85+
recentSearchList, "", highlightsList,
86+
{ HighlightsCardLazyColumnNumResultsHeader(highlightsList.size) })
3787
}
3888
}

app/src/main/java/com/cornellappdev/score/screen/HighlightsSearchScreen.kt

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,12 @@ import androidx.compose.ui.tooling.preview.Preview
1515
import androidx.compose.ui.tooling.preview.PreviewParameter
1616
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
1717
import androidx.compose.ui.unit.dp
18-
import com.cornellappdev.score.R
19-
import com.cornellappdev.score.components.EmptyStateBox
2018
import com.cornellappdev.score.components.ScorePreview
2119
import com.cornellappdev.score.components.highlights.HighlightsCardLazyColumn
20+
import com.cornellappdev.score.components.highlights.HighlightsCardLazyColumnNumResultsHeader
2221
import com.cornellappdev.score.components.highlights.HighlightsScreenSearchFilterBar
23-
import com.cornellappdev.score.components.highlights.RecentSearches
2422
import com.cornellappdev.score.model.HighlightData
2523
import com.cornellappdev.score.model.Sport
26-
import com.cornellappdev.score.theme.Style.bodyNormal
2724
import com.cornellappdev.score.theme.Style.heading2
2825
import com.cornellappdev.score.util.highlightsList
2926
import com.cornellappdev.score.util.recentSearchList
@@ -51,26 +48,11 @@ fun HighlightsSearchScreen(
5148
sportList
5249
)
5350
Spacer(modifier = Modifier.height(24.dp))
54-
Column(
55-
modifier = Modifier.padding(horizontal = 24.dp)
56-
) {
57-
if (recentSearchList.isNotEmpty() && query.isEmpty()) { //start state: no search attempted yet
58-
RecentSearches(recentSearchList)
59-
} else if (query.isNotEmpty()) { //todo: will pull this out to the viewmodel, just here for sanity check rn
60-
val filteredList = highlightsList.filter {
61-
it.title.contains(query, ignoreCase = true)
62-
}
63-
if (filteredList.isEmpty()) {
64-
EmptyStateBox(
65-
icon = R.drawable.ic_kid_star,
66-
title = "No results yet.",
67-
)
68-
} else {
69-
Text("${filteredList.size} Results", style = bodyNormal)
70-
HighlightsCardLazyColumn(filteredList)
71-
}
72-
}
73-
}
51+
HighlightsCardLazyColumn(
52+
recentSearchList,
53+
query,
54+
highlightsList,
55+
{ HighlightsCardLazyColumnNumResultsHeader(highlightsList.size) })
7456
}
7557
}
7658

@@ -80,7 +62,8 @@ data class HighlightsSearchScreenPreviewData(
8062
val query: String
8163
)
8264

83-
class HighlightsSearchScreenPreviewProvider : PreviewParameterProvider<HighlightsSearchScreenPreviewData> {
65+
class HighlightsSearchScreenPreviewProvider :
66+
PreviewParameterProvider<HighlightsSearchScreenPreviewData> {
8467
override val values: Sequence<HighlightsSearchScreenPreviewData> = sequence {
8568
yield(HighlightsSearchScreenPreviewData(sportList, recentSearchList, ""))
8669
yield(HighlightsSearchScreenPreviewData(sportList, recentSearchList, "Sports"))

app/src/main/java/com/cornellappdev/score/screen/HighlightsSubScreen.kt

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import com.cornellappdev.score.util.highlightsList
4040
import com.cornellappdev.score.util.sportList
4141

4242
@Composable
43-
fun HighlightsSubScreenHeader(
43+
private fun HighlightsSubScreenHeader(
4444
header: String,
4545
navigateBack: () -> Unit
4646
) {
@@ -97,31 +97,15 @@ fun HighlightsSubScreen(
9797
HighlightsSubScreenHeader(header, {})
9898
}
9999
Spacer(modifier = Modifier.height(16.dp))
100-
101-
val focusRequester = remember { FocusRequester() }
102100
HighlightsScreenSearchFilterBar(
103101
sportList
104102
)
105-
Spacer(modifier = Modifier.height(8.dp))
106-
Column(
107-
modifier = Modifier.padding(horizontal = 24.dp)
108-
) {
109-
if (recentSearchList.isNotEmpty() && query.isEmpty()) { //start state: no search attempted yet
110-
RecentSearches(recentSearchList)
111-
} else if (query.isNotEmpty()) { //filtering - will pull this out to the viewmodel when i do that, just here for sanity check rn
112-
val filteredList = highlightsList.filter {
113-
it.title.contains(query, ignoreCase = true)
114-
}
115-
if (filteredList.isEmpty()) {
116-
EmptyStateBox(
117-
icon = R.drawable.ic_kid_star,
118-
title = "No results yet.",
119-
)
120-
} else {
121-
HighlightsCardLazyColumn(filteredList)
122-
}
123-
}
124-
}
103+
Spacer(modifier = Modifier.height(24.dp))
104+
HighlightsCardLazyColumn(
105+
recentSearchList,
106+
query,
107+
highlightsList
108+
)
125109
}
126110
}
127111

0 commit comments

Comments
 (0)