diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt index df4a85089..673317f44 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt @@ -155,11 +155,10 @@ fun SearchFilter( title = R.string.key_pages, invalidator = { (from, to) -> if (to != 0 && to < 10) { - pageErr1 - } else if (from != 0 && to != 0 && to - from < 20) { - pageErr2 - } else { - null + raise(pageErr1) + } + if (from != 0 && to != 0 && to - from < 20) { + raise(pageErr2) } }, ) { error -> diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt index 21f4822ec..8953e9236 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt @@ -70,6 +70,8 @@ import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.SecureFlagPolicy import arrow.core.Either +import arrow.core.raise.Raise +import arrow.core.raise.either import arrow.core.right import com.jamal.composeprefs3.ui.ifNotNullThen import com.jamal.composeprefs3.ui.ifTrueThen @@ -109,13 +111,13 @@ class DialogState { suspend fun awaitResult( initial: R, @StringRes title: Int? = null, - invalidator: (suspend (R) -> String?)? = null, + invalidator: (suspend Raise.(R) -> Unit)? = null, block: @Composable DialogScope.(String?) -> Unit, ): R { return dialog { cont -> val coroutineScope = rememberCoroutineScope() val state = remember(cont) { mutableStateOf(initial) } - var error by remember(cont) { mutableStateOf(null) } + var errorMsg by remember(cont) { mutableStateOf(null) } val impl = remember(cont) { object : DialogScope { override var expectedValue by state @@ -129,8 +131,8 @@ class DialogState { cont.resume(state.value) } else { coroutineScope.launch { - error = invalidator.invoke(state.value) - error ?: cont.resume(state.value) + errorMsg = either { invalidator(state.value) }.leftOrNull() + errorMsg ?: cont.resume(state.value) } } }) { @@ -145,7 +147,7 @@ class DialogState { } }, title = title.ifNotNullThen { Text(text = stringResource(id = title!!)) }, - text = { block(impl, error) }, + text = { block(impl, errorMsg) }, ) } }