Skip to content

Commit db4ae2b

Browse files
committed
TMDbSwipeRefresh as a helper component
1 parent 0a4e44d commit db4ae2b

6 files changed

Lines changed: 43 additions & 40 deletions

File tree

common/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ dependencies {
4949
implementation(Deps.composeUi)
5050
implementation(Deps.composeFoundation)
5151
implementation(Deps.composeMaterial)
52+
implementation(Deps.swiperefresh)
5253
debugImplementation(Deps.composeUiTooling)
5354
implementation(Deps.composeUiToolingPreview)
5455
implementation(Deps.coil)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.sample.tmdb.common.ui.component
2+
3+
import androidx.compose.foundation.layout.PaddingValues
4+
import androidx.compose.foundation.layout.fillMaxSize
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.ui.Modifier
7+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
8+
import com.google.accompanist.swiperefresh.SwipeRefresh
9+
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
10+
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
11+
import com.sample.tmdb.common.base.BaseViewModel
12+
import com.sample.tmdb.common.ui.Dimens.TMDb_104_dp
13+
14+
@Composable
15+
fun <T> TMDbSwipeRefresh(
16+
viewModel: BaseViewModel<T>,
17+
content: @Composable() () -> Unit
18+
) {
19+
SwipeRefresh(
20+
state = rememberSwipeRefreshState(viewModel.state.collectAsStateWithLifecycle().value.isRefreshing),
21+
onRefresh = { viewModel.refresh(true) },
22+
indicator = { state, trigger ->
23+
SwipeRefreshIndicator(
24+
state,
25+
trigger,
26+
)
27+
},
28+
modifier = Modifier.fillMaxSize(),
29+
indicatorPadding = PaddingValues(top = TMDb_104_dp),
30+
) {
31+
content()
32+
}
33+
}

features/feature-bookmark/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ dependencies {
5050
implementation(Deps.composeUi)
5151
implementation(Deps.composeFoundation)
5252
implementation(Deps.composeMaterial)
53-
implementation(Deps.swiperefresh)
5453
testImplementation(project(BuildModules.COMMON_TEST))
5554
testImplementation(Deps.junit4)
5655
testImplementation(Deps.mockk)

features/feature-bookmark/src/main/java/com/sample/tmdb/bookmark/BookmarkScreen.kt

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@ import androidx.compose.ui.res.stringResource
3131
import androidx.compose.ui.text.font.FontWeight
3232
import androidx.compose.ui.text.style.TextAlign
3333
import androidx.compose.ui.unit.dp
34-
import androidx.lifecycle.compose.collectAsStateWithLifecycle
35-
import com.google.accompanist.swiperefresh.SwipeRefresh
36-
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
37-
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
38-
import com.sample.tmdb.common.R as commonR
3934
import com.sample.tmdb.common.base.BaseViewModel
4035
import com.sample.tmdb.common.model.TMDbItem
4136
import com.sample.tmdb.common.ui.Content
@@ -46,10 +41,12 @@ import com.sample.tmdb.common.ui.Dimens.TMDb_8_dp
4641
import com.sample.tmdb.common.ui.LanguageViewModel
4742
import com.sample.tmdb.common.ui.component.TMDbContent
4843
import com.sample.tmdb.common.ui.component.TMDbDivider
44+
import com.sample.tmdb.common.ui.component.TMDbSwipeRefresh
4945
import com.sample.tmdb.common.ui.theme.AlphaNearOpaque
5046
import com.sample.tmdb.common.utils.navigationBarPadding
5147
import kotlinx.coroutines.CoroutineScope
5248
import kotlinx.coroutines.launch
49+
import com.sample.tmdb.common.R as commonR
5350

5451
@Composable
5552
fun BookmarkScreen(
@@ -165,23 +162,12 @@ private fun <T : TMDbItem> TabContent(
165162
viewModel = viewModel,
166163
languageViewModel = languageViewModel,
167164
scaffoldState = scaffoldState,
168-
) {
169-
SwipeRefresh(
170-
state = rememberSwipeRefreshState(viewModel.state.collectAsStateWithLifecycle().value.isRefreshing),
171-
onRefresh = { viewModel.refresh(true) },
172-
indicator = { state, trigger ->
173-
SwipeRefreshIndicator(
174-
state,
175-
trigger,
176-
)
177-
},
178-
modifier = Modifier.fillMaxSize(),
179-
indicatorPadding = PaddingValues(top = TMDb_104_dp),
180-
) {
181-
if (it.isEmpty()) {
165+
) { items ->
166+
TMDbSwipeRefresh(viewModel) {
167+
if (items.isEmpty()) {
182168
EmptyView(textResourceId = textResourceId)
183169
} else {
184-
TabContent(items = it, onClick = onClick)
170+
TabContent(items = items, onClick = onClick)
185171
}
186172
}
187173
}

features/feature-feed/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ dependencies {
5353
implementation(Deps.composeMaterial)
5454
implementation(Deps.composeUiToolingPreview)
5555
implementation(Deps.coil)
56-
implementation(Deps.swiperefresh)
5756
testImplementation(project(BuildModules.COMMON_TEST))
5857
testImplementation(Deps.junit4)
5958
testImplementation(Deps.mockk)

features/feature-feed/src/main/java/com/sample/tmdb/feed/FeedScreen.kt

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,11 @@ import androidx.compose.ui.res.stringResource
4141
import androidx.compose.ui.text.font.FontWeight
4242
import androidx.compose.ui.tooling.preview.Preview
4343
import androidx.compose.ui.unit.dp
44-
import androidx.lifecycle.compose.collectAsStateWithLifecycle
4544
import coil.compose.AsyncImage
46-
import com.google.accompanist.swiperefresh.SwipeRefresh
47-
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
48-
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
4945
import com.sample.tmdb.common.MainDestinations
50-
import com.sample.tmdb.common.R as commonR
5146
import com.sample.tmdb.common.model.TMDbItem
5247
import com.sample.tmdb.common.ui.Content
5348
import com.sample.tmdb.common.ui.Dimens
54-
import com.sample.tmdb.common.ui.Dimens.TMDb_104_dp
5549
import com.sample.tmdb.common.ui.Dimens.TMDb_120_dp
5650
import com.sample.tmdb.common.ui.Dimens.TMDb_12_dp
5751
import com.sample.tmdb.common.ui.Dimens.TMDb_220_dp
@@ -62,6 +56,7 @@ import com.sample.tmdb.common.ui.Dimens.TMDb_6_dp
6256
import com.sample.tmdb.common.ui.LanguageViewModel
6357
import com.sample.tmdb.common.ui.component.DestinationBar
6458
import com.sample.tmdb.common.ui.component.TMDbCard
59+
import com.sample.tmdb.common.ui.component.TMDbSwipeRefresh
6560
import com.sample.tmdb.common.ui.theme.Teal200
6661
import com.sample.tmdb.common.ui.theme.TmdbPagingComposeTheme
6762
import com.sample.tmdb.common.utils.TMDbSpacer
@@ -70,6 +65,7 @@ import com.sample.tmdb.domain.model.Movie
7065
import com.sample.tmdb.domain.model.SortType
7166
import com.sample.tmdb.domain.model.TVShow
7267
import com.sample.tmdb.feed.utils.pagerTransition
68+
import com.sample.tmdb.common.R as commonR
7369

7470
@Composable
7571
fun MovieFeedScreen(
@@ -127,18 +123,7 @@ private fun <T : TMDbItem> FeedScreen(
127123
scaffoldState = scaffoldState,
128124
) { feeds ->
129125
Box {
130-
SwipeRefresh(
131-
state = rememberSwipeRefreshState(viewModel.state.collectAsStateWithLifecycle().value.isRefreshing),
132-
onRefresh = { viewModel.refresh(true) },
133-
indicator = { state, trigger ->
134-
SwipeRefreshIndicator(
135-
state,
136-
trigger,
137-
)
138-
},
139-
modifier = Modifier.fillMaxSize(),
140-
indicatorPadding = PaddingValues(top = TMDb_104_dp),
141-
) {
126+
TMDbSwipeRefresh(viewModel) {
142127
FeedCollectionList(feeds, navigate, onClick)
143128
}
144129
DestinationBar(

0 commit comments

Comments
 (0)