From 388e9ac0bdc21e1a44621d32e10add9e5db53834 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Fri, 30 Sep 2022 10:46:01 +0530 Subject: [PATCH] refactor(common): migrate Android `NetworkError` to common --- .../msfjarvis/claw/android/ui/LoadError.kt | 63 ------------------- .../claw/android/ui/lists/NetworkPosts.kt | 4 +- .../msfjarvis/claw/common/ui/NetworkError.kt | 57 +++++++++++++++-- 3 files changed, 54 insertions(+), 70 deletions(-) delete mode 100644 android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LoadError.kt diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LoadError.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LoadError.kt deleted file mode 100644 index a85e97bd..00000000 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LoadError.kt +++ /dev/null @@ -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, - ) - } - ) - } -} diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/lists/NetworkPosts.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/lists/NetworkPosts.kt index d889e099..17a0e0de 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/lists/NetworkPosts.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/lists/NetworkPosts.kt @@ -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), diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/ui/NetworkError.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/ui/NetworkError.kt index 29f45667..4992ada3 100644 --- a/common/src/main/kotlin/dev/msfjarvis/claw/common/ui/NetworkError.kt +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/ui/NetworkError.kt @@ -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, + ) + } + ) } }