118 lines
3.8 KiB
Kotlin
118 lines
3.8 KiB
Kotlin
package eu.kanade.presentation.more.settings.screen.browse.components
|
|
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.material3.AlertDialog
|
|
import androidx.compose.material3.OutlinedTextField
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.TextButton
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.LaunchedEffect
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.focus.FocusRequester
|
|
import androidx.compose.ui.focus.focusRequester
|
|
import kotlinx.collections.immutable.ImmutableSet
|
|
import kotlinx.coroutines.delay
|
|
import tachiyomi.i18n.MR
|
|
import tachiyomi.presentation.core.i18n.stringResource
|
|
import kotlin.time.Duration.Companion.seconds
|
|
|
|
@Composable
|
|
fun ExtensionRepoCreateDialog(
|
|
onDismissRequest: () -> Unit,
|
|
onCreate: (String) -> Unit,
|
|
repos: ImmutableSet<String>,
|
|
) {
|
|
var name by remember { mutableStateOf("") }
|
|
|
|
val focusRequester = remember { FocusRequester() }
|
|
val nameAlreadyExists = remember(name) { repos.contains(name) }
|
|
|
|
AlertDialog(
|
|
onDismissRequest = onDismissRequest,
|
|
confirmButton = {
|
|
TextButton(
|
|
enabled = name.isNotEmpty() && !nameAlreadyExists,
|
|
onClick = {
|
|
onCreate(name)
|
|
onDismissRequest()
|
|
},
|
|
) {
|
|
Text(text = stringResource(MR.strings.action_add))
|
|
}
|
|
},
|
|
dismissButton = {
|
|
TextButton(onClick = onDismissRequest) {
|
|
Text(text = stringResource(MR.strings.action_cancel))
|
|
}
|
|
},
|
|
title = {
|
|
Text(text = stringResource(MR.strings.action_add_repo))
|
|
},
|
|
text = {
|
|
Column {
|
|
Text(text = stringResource(MR.strings.action_add_repo_message))
|
|
|
|
OutlinedTextField(
|
|
modifier = Modifier
|
|
.focusRequester(focusRequester),
|
|
value = name,
|
|
onValueChange = { name = it },
|
|
label = {
|
|
Text(text = stringResource(MR.strings.label_add_repo_input))
|
|
},
|
|
supportingText = {
|
|
val msgRes = if (name.isNotEmpty() && nameAlreadyExists) {
|
|
MR.strings.error_repo_exists
|
|
} else {
|
|
MR.strings.information_required_plain
|
|
}
|
|
Text(text = stringResource(msgRes))
|
|
},
|
|
isError = name.isNotEmpty() && nameAlreadyExists,
|
|
singleLine = true,
|
|
)
|
|
}
|
|
},
|
|
)
|
|
|
|
LaunchedEffect(focusRequester) {
|
|
// TODO: https://issuetracker.google.com/issues/204502668
|
|
delay(0.1.seconds)
|
|
focusRequester.requestFocus()
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
fun ExtensionRepoDeleteDialog(
|
|
onDismissRequest: () -> Unit,
|
|
onDelete: () -> Unit,
|
|
repo: String,
|
|
) {
|
|
AlertDialog(
|
|
onDismissRequest = onDismissRequest,
|
|
confirmButton = {
|
|
TextButton(onClick = {
|
|
onDelete()
|
|
onDismissRequest()
|
|
}) {
|
|
Text(text = stringResource(MR.strings.action_ok))
|
|
}
|
|
},
|
|
dismissButton = {
|
|
TextButton(onClick = onDismissRequest) {
|
|
Text(text = stringResource(MR.strings.action_cancel))
|
|
}
|
|
},
|
|
title = {
|
|
Text(text = stringResource(MR.strings.action_delete_repo))
|
|
},
|
|
text = {
|
|
Text(text = stringResource(MR.strings.delete_repo_confirmation, repo))
|
|
},
|
|
)
|
|
}
|