11package com.cornellappdev.score.components.highlights
22
33import 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
47import androidx.compose.foundation.layout.padding
58import androidx.compose.foundation.lazy.LazyColumn
69import androidx.compose.foundation.lazy.items
10+ import androidx.compose.material3.Text
711import androidx.compose.runtime.Composable
812import androidx.compose.ui.Modifier
913import androidx.compose.ui.tooling.preview.Preview
1014import androidx.compose.ui.unit.dp
15+ import com.cornellappdev.score.R
16+ import com.cornellappdev.score.components.EmptyStateBox
1117import com.cornellappdev.score.components.ScorePreview
1218import com.cornellappdev.score.model.HighlightData
19+ import com.cornellappdev.score.theme.Style.bodyNormal
1320import com.cornellappdev.score.util.highlightsList
21+ import com.cornellappdev.score.util.recentSearchList
1422
1523@Composable
1624fun 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}
0 commit comments