@@ -2,62 +2,79 @@ package com.github.sikv.photos.recommendations
22
33import androidx.compose.foundation.background
44import androidx.compose.foundation.clickable
5- import androidx.compose.foundation.layout.*
5+ import androidx.compose.foundation.layout.Arrangement
6+ import androidx.compose.foundation.layout.Box
7+ import androidx.compose.foundation.layout.Column
8+ import androidx.compose.foundation.layout.Spacer
9+ import androidx.compose.foundation.layout.aspectRatio
10+ import androidx.compose.foundation.layout.height
11+ import androidx.compose.foundation.layout.padding
612import androidx.compose.foundation.lazy.grid.GridCells
713import androidx.compose.foundation.lazy.grid.GridItemSpan
814import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
915import androidx.compose.material.ExperimentalMaterialApi
1016import androidx.compose.material.pullrefresh.PullRefreshIndicator
1117import androidx.compose.material.pullrefresh.pullRefresh
1218import androidx.compose.material.pullrefresh.rememberPullRefreshState
13- import androidx.compose.material3.*
19+ import androidx.compose.material3.Button
20+ import androidx.compose.material3.LinearProgressIndicator
21+ import androidx.compose.material3.MaterialTheme
22+ import androidx.compose.material3.Surface
23+ import androidx.compose.material3.Text
1424import androidx.compose.runtime.Composable
25+ import androidx.compose.runtime.collectAsState
26+ import androidx.compose.runtime.getValue
1527import androidx.compose.ui.Alignment
1628import androidx.compose.ui.Modifier
1729import androidx.compose.ui.input.nestedscroll.nestedScroll
1830import androidx.compose.ui.res.colorResource
1931import androidx.compose.ui.res.stringResource
2032import androidx.compose.ui.text.style.TextAlign
2133import androidx.compose.ui.unit.dp
34+ import androidx.hilt.navigation.compose.hiltViewModel
2235import com.github.sikv.photos.common.ui.NetworkImage
2336import com.github.sikv.photos.common.ui.rememberViewInteropNestedScrollConnection
2437import com.github.sikv.photos.domain.Photo
2538
2639@OptIn(ExperimentalMaterialApi ::class )
2740@Composable
28- fun RecommendationsScreen (
29- isRefreshing : Boolean ,
30- photos : List <Photo >,
31- onPhotoPressed : (Photo ) -> Unit ,
32- isNextPageLoading : Boolean ,
33- onLoadMore : () -> Unit ,
34- onRefresh : () -> Unit ,
41+ fun Recommendations (
3542 modifier : Modifier = Modifier ,
43+ viewModel : RecommendationsViewModel = hiltViewModel(),
44+ onPhotoClick : (Photo ) -> Unit ,
3645) {
46+ val uiState by viewModel.uiState.collectAsState()
47+
3748 Surface (
3849 modifier = modifier,
3950 ) {
40- if (! isRefreshing && ! isNextPageLoading && photos.isEmpty()) {
51+ if (! uiState.isLoading && ! uiState. isNextPageLoading && uiState. photos.isEmpty()) {
4152 NoRecommendations (
42- onRefreshPressed = onRefresh
53+ onRefreshPressed = {
54+ viewModel.loadRecommendations(refresh = true )
55+ }
4356 )
4457 } else {
4558 val pullRefreshState = rememberPullRefreshState(
46- refreshing = isRefreshing,
47- onRefresh = onRefresh
59+ refreshing = uiState.isLoading,
60+ onRefresh = {
61+ viewModel.loadRecommendations(refresh = true )
62+ }
4863 )
4964 Box (
5065 modifier = Modifier
5166 .pullRefresh(pullRefreshState)
5267 ) {
5368 Recommendations (
54- photos = photos,
55- onPhotoPressed = onPhotoPressed,
56- isNextPageLoading = isNextPageLoading,
57- onLoadMore = onLoadMore,
69+ photos = uiState.photos,
70+ onPhotoClick = onPhotoClick,
71+ isNextPageLoading = uiState.isNextPageLoading,
72+ onLoadMore = {
73+ viewModel.loadRecommendations()
74+ },
5875 )
5976 PullRefreshIndicator (
60- refreshing = isRefreshing ,
77+ refreshing = uiState.isLoading ,
6178 state = pullRefreshState,
6279 modifier = Modifier
6380 .align(Alignment .TopCenter ),
@@ -98,7 +115,7 @@ private fun NoRecommendations(
98115@Composable
99116private fun Recommendations (
100117 photos : List <Photo >,
101- onPhotoPressed : (Photo ) -> Unit ,
118+ onPhotoClick : (Photo ) -> Unit ,
102119 isNextPageLoading : Boolean ,
103120 onLoadMore : () -> Unit ,
104121 cellsCount : Int = 3,
@@ -127,7 +144,7 @@ private fun Recommendations(
127144 modifier = Modifier
128145 .aspectRatio(1f )
129146 .clickable {
130- onPhotoPressed (photos[index])
147+ onPhotoClick (photos[index])
131148 }
132149 )
133150 }
0 commit comments