Skip to content

Commit

Permalink
feat: create empty component
Browse files Browse the repository at this point in the history
  • Loading branch information
paulcoding810 committed Dec 1, 2024
1 parent 7b88943 commit 731e8dc
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 40 deletions.
47 changes: 47 additions & 0 deletions app/src/main/java/com/paulcoding/hviewer/ui/component/HEmpty.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.paulcoding.hviewer.ui.component

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.unit.dp
import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.LottieCompositionSpec
import com.airbnb.lottie.compose.animateLottieCompositionAsState
import com.airbnb.lottie.compose.rememberLottieComposition
import com.paulcoding.hviewer.R

@Composable
fun HEmpty(title: String? = null, message: String? = null, block: () -> Unit) {
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.empty))
val progress by animateLottieCompositionAsState(composition)

Column(horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.fillMaxSize()) {
LottieAnimation(
composition = composition,
progress = { progress },
)
Spacer(modifier = Modifier.height(16.dp))
Column(
horizontalAlignment = Alignment.CenterHorizontally,
) {
if (title != null) {
Text(title)
Spacer(modifier = Modifier.height(8.dp))
}
if (message != null)
Text(
message,
modifier = Modifier.clickable { block() },
textDecoration = TextDecoration.Underline
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import com.paulcoding.hviewer.extensions.toCapital
import com.paulcoding.hviewer.model.PostItem
import com.paulcoding.hviewer.model.SiteConfig
import com.paulcoding.hviewer.ui.component.HBackIcon
import com.paulcoding.hviewer.ui.component.HEmpty
import com.paulcoding.hviewer.ui.component.HImage
import com.paulcoding.hviewer.ui.component.HLoading
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -127,6 +128,15 @@ fun PageContent(siteConfig: SiteConfig, topic: String, onClick: (String) -> Unit
item {
HLoading()
}
else if (uiState.postItems.isEmpty())
item {
HEmpty(
title = "No posts found",
message = "Refresh?"
) {
viewModel.getPosts(1)
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
Expand All @@ -19,7 +17,6 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
import androidx.compose.material3.pulltorefresh.pullToRefreshIndicator
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
Expand All @@ -29,15 +26,10 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.unit.dp
import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.LottieCompositionSpec
import com.airbnb.lottie.compose.animateLottieCompositionAsState
import com.airbnb.lottie.compose.rememberLottieComposition
import com.paulcoding.hviewer.R
import com.paulcoding.hviewer.model.SiteConfig
import com.paulcoding.hviewer.model.SiteConfigs
import com.paulcoding.hviewer.ui.component.HEmpty
import com.paulcoding.hviewer.ui.icon.SettingsIcon
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -81,19 +73,13 @@ fun SitesPage(
}
}
) {
Box(
modifier = Modifier.pullToRefreshIndicator(
isRefreshing = false,
state = rememberPullToRefreshState(),
)
) {}
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
if (siteConfigs.sites.keys.isEmpty()) {
Empty(navToSettings)
HEmpty(title = "No sites found", message = "Add repo?") { navToSettings() }
} else
siteConfigs.sites.keys.map { site ->
siteConfigs.sites[site]?.let { siteConfig ->
Expand Down Expand Up @@ -128,27 +114,3 @@ fun Site(site: SiteConfig, key: String, onClick: () -> Unit) {
}
}

@Composable
private fun Empty(navToSettings: () -> Unit) {
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.empty))
val progress by animateLottieCompositionAsState(composition)

Column(horizontalAlignment = Alignment.CenterHorizontally) {
LottieAnimation(
composition = composition,
progress = { progress },
)
Spacer(modifier = Modifier.height(16.dp))
Column(
horizontalAlignment = Alignment.CenterHorizontally,
) {
Text("No sites found")
Spacer(modifier = Modifier.height(8.dp))
Text(
"Add repo?",
modifier = Modifier.clickable { navToSettings() },
textDecoration = TextDecoration.Underline
)
}
}
}

0 comments on commit 731e8dc

Please sign in to comment.