refactor: Simplify code

This commit is contained in:
Ahmad Ansori Palembani 2024-06-04 08:59:32 +07:00
parent 712be76112
commit 5a99a0322b
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
2 changed files with 57 additions and 49 deletions

View file

@ -24,12 +24,14 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import dev.yokai.domain.ComposableAlertDialog
import dev.yokai.presentation.AppBarType import dev.yokai.presentation.AppBarType
import dev.yokai.presentation.YokaiScaffold import dev.yokai.presentation.YokaiScaffold
import dev.yokai.presentation.component.EmptyScreen import dev.yokai.presentation.component.EmptyScreen
import dev.yokai.presentation.extension.repo.component.ExtensionRepoItem import dev.yokai.presentation.extension.repo.component.ExtensionRepoItem
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.compose.LocalAlertDialog import eu.kanade.tachiyomi.util.compose.LocalAlertDialog
import eu.kanade.tachiyomi.util.compose.currentOrThrow
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
@ -44,7 +46,7 @@ fun ExtensionRepoScreen(
val repoState = viewModel.repoState.collectAsState() val repoState = viewModel.repoState.collectAsState()
var inputText by remember { mutableStateOf("") } var inputText by remember { mutableStateOf("") }
val listState = rememberLazyListState() val listState = rememberLazyListState()
val alertDialog = LocalAlertDialog.current ?: throw RuntimeException("LocalAlertDialog not yet provided") val alertDialog = LocalAlertDialog.currentOrThrow
YokaiScaffold( YokaiScaffold(
onNavigationIconClicked = onBackPress, onNavigationIconClicked = onBackPress,
@ -59,7 +61,6 @@ fun ExtensionRepoScreen(
val repos = (repoState.value as ExtensionRepoState.Success).repos val repos = (repoState.value as ExtensionRepoState.Success).repos
if (alertDialog.content != null)
alertDialog.content?.let { it() } alertDialog.content?.let { it() }
LazyColumn( LazyColumn(
@ -93,8 +94,30 @@ fun ExtensionRepoScreen(
ExtensionRepoItem( ExtensionRepoItem(
repoUrl = repo, repoUrl = repo,
onDeleteClick = { repoToDelete -> onDeleteClick = { repoToDelete ->
alertDialog.content = alertDialog.content = { ExtensionRepoDeletePrompt(repoToDelete, alertDialog, viewModel) }
{ },
)
}
}
}
}
LaunchedEffect(repoUrl) {
repoUrl?.let { viewModel.addRepo(repoUrl) }
}
LaunchedEffect(Unit) {
viewModel.event.collectLatest { event ->
if (event is ExtensionRepoEvent.LocalizedMessage)
context.toast(event.stringRes)
if (event is ExtensionRepoEvent.Success)
inputText = ""
}
}
}
@Composable
fun ExtensionRepoDeletePrompt(repoToDelete: String, alertDialog: ComposableAlertDialog, viewModel: ExtensionRepoViewModel) {
AlertDialog( AlertDialog(
containerColor = MaterialTheme.colorScheme.surface, containerColor = MaterialTheme.colorScheme.surface,
title = { title = {
@ -138,24 +161,4 @@ fun ExtensionRepoScreen(
} }
}, },
) )
}
},
)
}
}
}
}
LaunchedEffect(repoUrl) {
repoUrl?.let { viewModel.addRepo(repoUrl) }
}
LaunchedEffect(Unit) {
viewModel.event.collectLatest { event ->
if (event is ExtensionRepoEvent.LocalizedMessage)
context.toast(event.stringRes)
if (event is ExtensionRepoEvent.Success)
inputText = ""
}
}
} }

View file

@ -1,9 +1,14 @@
package eu.kanade.tachiyomi.util.compose package eu.kanade.tachiyomi.util.compose
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.ProvidableCompositionLocal
import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.runtime.staticCompositionLocalOf
import dev.yokai.domain.ComposableAlertDialog import dev.yokai.domain.ComposableAlertDialog
val <T> ProvidableCompositionLocal<T?>.currentOrThrow
@Composable
get(): T = this.current ?: throw RuntimeException("CompositionLocal is null")
val LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null } val LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null }
val LocalAlertDialog: ProvidableCompositionLocal<ComposableAlertDialog?> = compositionLocalOf { null } val LocalAlertDialog: ProvidableCompositionLocal<ComposableAlertDialog?> = compositionLocalOf { null }