android: merge redundant composables

This commit is contained in:
Harsh Shandilya 2022-04-22 20:30:19 +05:30
parent 0a1634bb83
commit ea2ebf0393
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
3 changed files with 43 additions and 69 deletions

View file

@ -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.NavigationItem
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.viewmodel.ClawViewModel
import dev.msfjarvis.claw.api.LobstersApi
@ -146,7 +146,7 @@ fun LobstersApp(
listOf(navDeepLink { uriPattern = uri }, navDeepLink { uriPattern = "$uri/" }),
) {
setWebUri("https://lobste.rs/")
HottestPosts(
NetworkPosts(
items = networkPosts,
listState = networkListState,
isPostSaved = viewModel::isPostSaved,

View file

@ -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,
)
}
}
}

View file

@ -1,11 +1,19 @@
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.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 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.toDbModel
import dev.msfjarvis.claw.common.ui.Divider
@ -16,10 +24,28 @@ import dev.msfjarvis.claw.model.LobstersPost
fun NetworkPosts(
items: LazyPagingItems<LobstersPost>,
listState: LazyListState,
isSaved: suspend (SavedPost) -> Boolean,
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 {
LazyColumn(
state = listState,
modifier = modifier,
@ -29,7 +55,7 @@ fun NetworkPosts(
val dbModel = item.toDbModel()
ListItem(
item = dbModel,
isSaved = isSaved,
isSaved = isPostSaved,
postActions = postActions,
)
@ -37,4 +63,6 @@ fun NetworkPosts(
}
}
}
}
}
}