Skip to content

Commit ac33bb0

Browse files
committed
[ISSUE-25] - Loader component
1 parent 94f3b5e commit ac33bb0

File tree

4 files changed

+47
-11
lines changed

4 files changed

+47
-11
lines changed

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/presentation/ListStreamUimodel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class ListStreamUiModelImpl(
1515
) : ListStreamUimodel {
1616
override fun convertToCardContent(listStream: List<ListStream>): ListStreamsUIState {
1717
return ListStreamsUIState(
18+
isLoading = false,
1819
carousels = listStream.map {
1920
CarouselData(
2021
categoryName = it.categoryName,

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/presentation/screens/ListStreamViewModel.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,37 @@ class ListStreamViewModel(
2323

2424
private val _uiState = mutableStateOf(
2525
ListStreamsUIState(
26-
emptyList()
26+
carousels = emptyList(),
27+
isLoading = false
2728
)
2829
)
2930
val uiState : State<ListStreamsUIState> = _uiState
3031

3132
init {
3233
viewModelScope.launch {
34+
onLoading()
35+
3336
useCase.getMovies()
3437
.catchFailure {
3538
println(">>>> ${it.errorMessage}")
3639
}
3740
.collect {
3841
_uiState.value = uiModel.convertToCardContent(it)
3942
}
43+
}.invokeOnCompletion {
44+
loaded()
4045
}
4146
}
47+
48+
private fun loaded() {
49+
_uiState.value = _uiState.value.copy(
50+
isLoading = false
51+
)
52+
}
53+
54+
private fun onLoading() {
55+
_uiState.value = _uiState.value.copy(
56+
isLoading = true
57+
)
58+
}
4259
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/presentation/screens/ListStreamsScreen.kt

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@ package com.codandotv.streamplayerapp.feature_list_streams.presentation.screens
22

33
import androidx.compose.foundation.ScrollState
44
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.layout.Column
67
import androidx.compose.foundation.layout.Spacer
78
import androidx.compose.foundation.layout.fillMaxSize
89
import androidx.compose.foundation.layout.height
910
import androidx.compose.foundation.verticalScroll
11+
import androidx.compose.material3.CircularProgressIndicator
1012
import androidx.compose.material3.MaterialTheme
1113
import androidx.compose.runtime.Composable
1214
import androidx.compose.runtime.remember
15+
import androidx.compose.ui.Alignment
1316
import androidx.compose.ui.Modifier
1417
import androidx.compose.ui.unit.dp
1518
import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreview
@@ -24,20 +27,34 @@ fun ListStreamsScreen(viewModel: ListStreamViewModel = koinViewModel()) {
2427
viewModel.uiState
2528
}
2629

27-
Column(
30+
Box(
2831
modifier = Modifier
29-
.background(MaterialTheme.colorScheme.background)
3032
.fillMaxSize()
31-
.verticalScroll(ScrollState(0))
33+
.background(MaterialTheme.colorScheme.background)
3234
) {
33-
uiState.value.carousels.forEach {
34-
StreamsCarousel(
35-
title = it.categoryName,
36-
contentList = it.cards
35+
if (uiState.value.isLoading) {
36+
CircularProgressIndicator(
37+
modifier = Modifier.align(
38+
Alignment.Center
39+
)
3740
)
38-
}
41+
} else {
42+
Column(
43+
modifier = Modifier
44+
.fillMaxSize()
45+
.align(Alignment.TopCenter)
46+
.verticalScroll(ScrollState(0))
47+
) {
48+
uiState.value.carousels.forEach {
49+
StreamsCarousel(
50+
title = it.categoryName,
51+
contentList = it.cards
52+
)
53+
}
3954

40-
Spacer(modifier = Modifier.height(12.dp))
55+
Spacer(modifier = Modifier.height(12.dp))
56+
}
57+
}
4158
}
4259
}
4360

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/presentation/screens/ListStreamsUIState.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ data class CarouselData(
88
)
99

1010
data class ListStreamsUIState(
11-
val carousels: List<CarouselData>
11+
val carousels: List<CarouselData>,
12+
val isLoading: Boolean
1213
)

0 commit comments

Comments
 (0)