* Partially revert "Move library page EmptyScreens into list/grids" This partially reverts commit 376bbeb724ca6cb7de53213c478d1750d99c8d2a. * Properly fix issue 8720
57 lines
2.1 KiB
Kotlin
57 lines
2.1 KiB
Kotlin
package eu.kanade.presentation.components
|
|
|
|
import androidx.compose.foundation.layout.Box
|
|
import androidx.compose.foundation.layout.PaddingValues
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.material.pullrefresh.PullRefreshIndicator
|
|
import androidx.compose.material.pullrefresh.pullRefresh
|
|
import androidx.compose.material.pullrefresh.rememberPullRefreshState
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.draw.clipToBounds
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
/**
|
|
* @param refreshing Whether the layout is currently refreshing
|
|
* @param onRefresh Lambda which is invoked when a swipe to refresh gesture is completed.
|
|
* @param enabled Whether the the layout should react to swipe gestures or not.
|
|
* @param indicatorPadding Content padding for the indicator, to inset the indicator in if required.
|
|
* @param content The content containing a vertically scrollable composable.
|
|
*
|
|
* Code reference: [Accompanist SwipeRefresh](https://github.com/google/accompanist/blob/677bc4ca0ee74677a8ba73793d04d85fe4ab55fb/swiperefresh/src/main/java/com/google/accompanist/swiperefresh/SwipeRefresh.kt#L265-L283)
|
|
*/
|
|
@Composable
|
|
fun PullRefresh(
|
|
refreshing: Boolean,
|
|
onRefresh: () -> Unit,
|
|
enabled: Boolean,
|
|
indicatorPadding: PaddingValues = PaddingValues(0.dp),
|
|
content: @Composable () -> Unit,
|
|
) {
|
|
val state = rememberPullRefreshState(
|
|
refreshing = refreshing,
|
|
onRefresh = onRefresh,
|
|
)
|
|
|
|
Box(Modifier.pullRefresh(state, enabled)) {
|
|
content()
|
|
|
|
Box(
|
|
Modifier
|
|
.padding(indicatorPadding)
|
|
.matchParentSize()
|
|
.clipToBounds(),
|
|
) {
|
|
PullRefreshIndicator(
|
|
refreshing = refreshing,
|
|
state = state,
|
|
modifier = Modifier.align(Alignment.TopCenter),
|
|
backgroundColor = MaterialTheme.colorScheme.primary,
|
|
contentColor = MaterialTheme.colorScheme.onPrimary,
|
|
)
|
|
}
|
|
}
|
|
}
|