mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 10:37:05 +05:30
android: merge redundant composables
This commit is contained in:
parent
0a1634bb83
commit
ea2ebf0393
3 changed files with 43 additions and 69 deletions
|
@ -37,7 +37,7 @@ import dev.msfjarvis.claw.android.ui.decorations.ClawAppBar
|
||||||
import dev.msfjarvis.claw.android.ui.decorations.ClawNavigationBar
|
import dev.msfjarvis.claw.android.ui.decorations.ClawNavigationBar
|
||||||
import dev.msfjarvis.claw.android.ui.decorations.NavigationItem
|
import dev.msfjarvis.claw.android.ui.decorations.NavigationItem
|
||||||
import dev.msfjarvis.claw.android.ui.lists.DatabasePosts
|
import dev.msfjarvis.claw.android.ui.lists.DatabasePosts
|
||||||
import dev.msfjarvis.claw.android.ui.lists.HottestPosts
|
import dev.msfjarvis.claw.android.ui.lists.NetworkPosts
|
||||||
import dev.msfjarvis.claw.android.ui.navigation.Destinations
|
import dev.msfjarvis.claw.android.ui.navigation.Destinations
|
||||||
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
|
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
|
||||||
import dev.msfjarvis.claw.api.LobstersApi
|
import dev.msfjarvis.claw.api.LobstersApi
|
||||||
|
@ -146,7 +146,7 @@ fun LobstersApp(
|
||||||
listOf(navDeepLink { uriPattern = uri }, navDeepLink { uriPattern = "$uri/" }),
|
listOf(navDeepLink { uriPattern = uri }, navDeepLink { uriPattern = "$uri/" }),
|
||||||
) {
|
) {
|
||||||
setWebUri("https://lobste.rs/")
|
setWebUri("https://lobste.rs/")
|
||||||
HottestPosts(
|
NetworkPosts(
|
||||||
items = networkPosts,
|
items = networkPosts,
|
||||||
listState = networkListState,
|
listState = networkListState,
|
||||||
isPostSaved = viewModel::isPostSaved,
|
isPostSaved = viewModel::isPostSaved,
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
package dev.msfjarvis.claw.android.ui.lists
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.contentColorFor
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.paging.LoadState
|
|
||||||
import androidx.paging.compose.LazyPagingItems
|
|
||||||
import com.google.accompanist.swiperefresh.SwipeRefresh
|
|
||||||
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
|
|
||||||
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
|
|
||||||
import dev.msfjarvis.claw.common.posts.PostActions
|
|
||||||
import dev.msfjarvis.claw.database.local.SavedPost
|
|
||||||
import dev.msfjarvis.claw.model.LobstersPost
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun HottestPosts(
|
|
||||||
items: LazyPagingItems<LobstersPost>,
|
|
||||||
listState: LazyListState,
|
|
||||||
isPostSaved: suspend (SavedPost) -> Boolean,
|
|
||||||
reloadPosts: () -> Unit,
|
|
||||||
postActions: PostActions,
|
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
) {
|
|
||||||
val isRefreshing = items.loadState.refresh == LoadState.Loading
|
|
||||||
SwipeRefresh(
|
|
||||||
state = rememberSwipeRefreshState(isRefreshing),
|
|
||||||
onRefresh = reloadPosts,
|
|
||||||
indicator = { state, trigger ->
|
|
||||||
val backgroundColor = MaterialTheme.colorScheme.surface
|
|
||||||
SwipeRefreshIndicator(
|
|
||||||
state = state,
|
|
||||||
refreshTriggerDistance = trigger,
|
|
||||||
backgroundColor = backgroundColor,
|
|
||||||
contentColor = contentColorFor(backgroundColor)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
if (items.itemCount == 0) {
|
|
||||||
Box(modifier = Modifier.fillMaxSize())
|
|
||||||
} else {
|
|
||||||
NetworkPosts(
|
|
||||||
items = items,
|
|
||||||
listState = listState,
|
|
||||||
isSaved = isPostSaved,
|
|
||||||
postActions = postActions,
|
|
||||||
modifier = modifier,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +1,19 @@
|
||||||
package dev.msfjarvis.claw.android.ui.lists
|
package dev.msfjarvis.claw.android.ui.lists
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
import androidx.compose.foundation.lazy.LazyListState
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.contentColorFor
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.paging.LoadState
|
||||||
import androidx.paging.compose.LazyPagingItems
|
import androidx.paging.compose.LazyPagingItems
|
||||||
import androidx.paging.compose.items
|
import androidx.paging.compose.items
|
||||||
|
import com.google.accompanist.swiperefresh.SwipeRefresh
|
||||||
|
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
|
||||||
|
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
|
||||||
import dev.msfjarvis.claw.common.posts.PostActions
|
import dev.msfjarvis.claw.common.posts.PostActions
|
||||||
import dev.msfjarvis.claw.common.posts.toDbModel
|
import dev.msfjarvis.claw.common.posts.toDbModel
|
||||||
import dev.msfjarvis.claw.common.ui.Divider
|
import dev.msfjarvis.claw.common.ui.Divider
|
||||||
|
@ -16,24 +24,44 @@ import dev.msfjarvis.claw.model.LobstersPost
|
||||||
fun NetworkPosts(
|
fun NetworkPosts(
|
||||||
items: LazyPagingItems<LobstersPost>,
|
items: LazyPagingItems<LobstersPost>,
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
isSaved: suspend (SavedPost) -> Boolean,
|
isPostSaved: suspend (SavedPost) -> Boolean,
|
||||||
|
reloadPosts: () -> Unit,
|
||||||
postActions: PostActions,
|
postActions: PostActions,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
LazyColumn(
|
val isRefreshing = items.loadState.refresh == LoadState.Loading
|
||||||
state = listState,
|
SwipeRefresh(
|
||||||
modifier = modifier,
|
state = rememberSwipeRefreshState(isRefreshing),
|
||||||
|
onRefresh = reloadPosts,
|
||||||
|
indicator = { state, trigger ->
|
||||||
|
val backgroundColor = MaterialTheme.colorScheme.surface
|
||||||
|
SwipeRefreshIndicator(
|
||||||
|
state = state,
|
||||||
|
refreshTriggerDistance = trigger,
|
||||||
|
backgroundColor = backgroundColor,
|
||||||
|
contentColor = contentColorFor(backgroundColor)
|
||||||
|
)
|
||||||
|
}
|
||||||
) {
|
) {
|
||||||
items(items) { item ->
|
if (items.itemCount == 0) {
|
||||||
if (item != null) {
|
Box(modifier = Modifier.fillMaxSize())
|
||||||
val dbModel = item.toDbModel()
|
} else {
|
||||||
ListItem(
|
LazyColumn(
|
||||||
item = dbModel,
|
state = listState,
|
||||||
isSaved = isSaved,
|
modifier = modifier,
|
||||||
postActions = postActions,
|
) {
|
||||||
)
|
items(items) { item ->
|
||||||
|
if (item != null) {
|
||||||
|
val dbModel = item.toDbModel()
|
||||||
|
ListItem(
|
||||||
|
item = dbModel,
|
||||||
|
isSaved = isPostSaved,
|
||||||
|
postActions = postActions,
|
||||||
|
)
|
||||||
|
|
||||||
Divider()
|
Divider()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue