refactor(common): migrate Android NetworkError to common

This commit is contained in:
Harsh Shandilya 2022-09-30 10:46:01 +05:30
parent cca50bf2d9
commit 388e9ac0bd
No known key found for this signature in database
3 changed files with 54 additions and 70 deletions

View file

@ -1,63 +0,0 @@
package dev.msfjarvis.claw.android.ui
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
@Composable
fun LoadError(
label: String,
error: Throwable,
modifier: Modifier = Modifier,
) {
var showDialog by remember { mutableStateOf(false) }
Column(verticalArrangement = Arrangement.spacedBy(4.dp), modifier = modifier) {
Text(
text = label,
style = MaterialTheme.typography.bodyLarge,
modifier = Modifier.align(Alignment.CenterHorizontally),
)
Button(
onClick = { showDialog = true },
modifier = Modifier.align(Alignment.CenterHorizontally),
) {
Text(text = "Show error")
}
}
if (showDialog) {
val clipboard = LocalClipboardManager.current
AlertDialog(
onDismissRequest = { showDialog = false },
confirmButton = {
Text(
text = "Copy stacktrace",
modifier =
Modifier.clickable {
clipboard.setText(AnnotatedString(error.stackTraceToString()))
showDialog = false
}
)
},
text = {
Text(
text = "${error.message}",
style = MaterialTheme.typography.bodyLarge,
)
}
)
}
}

View file

@ -16,9 +16,9 @@ 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.android.ui.LoadError
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.posts.toDbModel
import dev.msfjarvis.claw.common.ui.NetworkError
import dev.msfjarvis.claw.database.local.SavedPost
import dev.msfjarvis.claw.model.LobstersPost
@ -49,7 +49,7 @@ fun NetworkPosts(
if (items.itemCount == 0) {
Box(modifier = Modifier.fillMaxSize()) {
if (loadState is LoadState.Error) {
LoadError(
NetworkError(
label = "Failed to load posts",
error = loadState.error,
modifier = Modifier.align(Alignment.Center),

View file

@ -1,16 +1,63 @@
package dev.msfjarvis.claw.common.ui
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
@Composable
fun NetworkError(label: String, error: Throwable, modifier: Modifier = Modifier) {
Box(modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Text(text = label, style = MaterialTheme.typography.displayMedium)
fun NetworkError(
label: String,
error: Throwable,
modifier: Modifier = Modifier,
) {
var showDialog by remember { mutableStateOf(false) }
Column(verticalArrangement = Arrangement.spacedBy(4.dp), modifier = modifier) {
Text(
text = label,
style = MaterialTheme.typography.bodyLarge,
modifier = Modifier.align(Alignment.CenterHorizontally),
)
Button(
onClick = { showDialog = true },
modifier = Modifier.align(Alignment.CenterHorizontally),
) {
Text(text = "Show error")
}
}
if (showDialog) {
val clipboard = LocalClipboardManager.current
AlertDialog(
onDismissRequest = { showDialog = false },
confirmButton = {
Text(
text = "Copy stacktrace",
modifier =
Modifier.clickable {
clipboard.setText(AnnotatedString(error.stackTraceToString()))
showDialog = false
}
)
},
text = {
Text(
text = "${error.message}",
style = MaterialTheme.typography.bodyLarge,
)
}
)
}
}