Merge all TextField errors in TextFieldError class
This commit is contained in:
parent
2631712361
commit
a3f78094f1
@ -1,5 +1,6 @@
|
||||
package com.readrops.app.compose.feeds
|
||||
|
||||
import com.readrops.app.compose.util.components.TextFieldError
|
||||
import com.readrops.db.entities.Feed
|
||||
import com.readrops.db.entities.Folder
|
||||
import com.readrops.db.entities.account.Account
|
||||
@ -30,66 +31,34 @@ data class AddFeedDialogState(
|
||||
val url: String = "",
|
||||
val selectedAccount: Account = Account(accountName = ""),
|
||||
val accounts: List<Account> = listOf(),
|
||||
val error: AddFeedError? = null,
|
||||
val error: TextFieldError? = null,
|
||||
) {
|
||||
val isError: Boolean get() = error != null
|
||||
|
||||
val errorText: String
|
||||
get() = when (error) {
|
||||
is AddFeedError.EmptyUrl -> "Field can't be empty"
|
||||
AddFeedError.BadUrl -> "Input is not a valid URL"
|
||||
AddFeedError.NoConnection -> ""
|
||||
AddFeedError.NoRSSFeed -> "No RSS feed found"
|
||||
AddFeedError.UnreachableUrl -> ""
|
||||
else -> ""
|
||||
}
|
||||
|
||||
sealed class AddFeedError {
|
||||
object EmptyUrl : AddFeedError()
|
||||
object BadUrl : AddFeedError()
|
||||
object UnreachableUrl : AddFeedError()
|
||||
object NoRSSFeed : AddFeedError()
|
||||
object NoConnection : AddFeedError()
|
||||
}
|
||||
}
|
||||
|
||||
data class UpdateFeedDialogState(
|
||||
val feedName: String = "",
|
||||
val feedNameError: Error? = null,
|
||||
val feedNameError: TextFieldError? = null,
|
||||
val feedUrl: String = "",
|
||||
val feedUrlError: Error? = null,
|
||||
val feedUrlError: TextFieldError? = null,
|
||||
val accountType: AccountType? = null,
|
||||
val selectedFolder: Folder? = null,
|
||||
val folders: List<Folder> = listOf(),
|
||||
val isAccountDropDownExpanded: Boolean = false,
|
||||
) {
|
||||
|
||||
sealed class Error {
|
||||
object EmptyField : Error()
|
||||
object BadUrl : Error()
|
||||
object NoRSSUrl : Error()
|
||||
}
|
||||
|
||||
val isFeedNameError
|
||||
get() = feedNameError != null
|
||||
|
||||
val isFeedUrlError
|
||||
get() = feedUrlError != null
|
||||
|
||||
fun errorText(error: Error?): String = when (error) {
|
||||
Error.BadUrl -> "Input is not a valid URL"
|
||||
Error.EmptyField -> "Field can't be empty"
|
||||
Error.NoRSSUrl -> "The provided URL is not a valid RSS feed"
|
||||
else -> ""
|
||||
}
|
||||
|
||||
val isFeedUrlReadOnly: Boolean
|
||||
get() = accountType != null && !accountType.accountConfig!!.isFeedUrlEditable
|
||||
|
||||
}
|
||||
|
||||
data class AddFolderState(
|
||||
val name: String = "",
|
||||
val isEmpty: Boolean = false,
|
||||
val errorText: String = "Field can't be empty"
|
||||
)
|
||||
val nameError: TextFieldError? = null,
|
||||
) {
|
||||
val isError = nameError != null
|
||||
}
|
@ -6,6 +6,7 @@ import com.readrops.api.localfeed.LocalRSSDataSource
|
||||
import com.readrops.api.utils.HtmlParser
|
||||
import com.readrops.app.compose.base.TabViewModel
|
||||
import com.readrops.app.compose.repositories.GetFoldersWithFeeds
|
||||
import com.readrops.app.compose.util.components.TextFieldError
|
||||
import com.readrops.db.Database
|
||||
import com.readrops.db.entities.Feed
|
||||
import com.readrops.db.entities.Folder
|
||||
@ -133,7 +134,7 @@ class FeedViewModel(
|
||||
when {
|
||||
url.isEmpty() -> {
|
||||
_addFeedDialogState.update {
|
||||
it.copy(error = AddFeedDialogState.AddFeedError.EmptyUrl)
|
||||
it.copy(error = TextFieldError.EmptyField)
|
||||
}
|
||||
|
||||
return
|
||||
@ -141,7 +142,7 @@ class FeedViewModel(
|
||||
|
||||
!Patterns.WEB_URL.matcher(url).matches() -> {
|
||||
_addFeedDialogState.update {
|
||||
it.copy(error = AddFeedDialogState.AddFeedError.BadUrl)
|
||||
it.copy(error = TextFieldError.BadUrl)
|
||||
}
|
||||
|
||||
return
|
||||
@ -158,7 +159,7 @@ class FeedViewModel(
|
||||
|
||||
if (rssUrls.isEmpty()) {
|
||||
_addFeedDialogState.update {
|
||||
it.copy(error = AddFeedDialogState.AddFeedError.NoRSSFeed)
|
||||
it.copy(error = TextFieldError.NoRSSFeed)
|
||||
}
|
||||
} else {
|
||||
// TODO add support for all account types
|
||||
@ -221,21 +222,21 @@ class FeedViewModel(
|
||||
when {
|
||||
feedName.isEmpty() -> {
|
||||
_updateFeedDialogState.update {
|
||||
it.copy(feedNameError = UpdateFeedDialogState.Error.EmptyField)
|
||||
it.copy(feedNameError = TextFieldError.EmptyField)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
feedUrl.isEmpty() -> {
|
||||
_updateFeedDialogState.update {
|
||||
it.copy(feedUrlError = UpdateFeedDialogState.Error.EmptyField)
|
||||
it.copy(feedUrlError = TextFieldError.EmptyField)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
!Patterns.WEB_URL.matcher(feedUrl).matches() -> {
|
||||
_updateFeedDialogState.update {
|
||||
it.copy(feedUrlError = UpdateFeedDialogState.Error.BadUrl)
|
||||
it.copy(feedUrlError = TextFieldError.BadUrl)
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -257,7 +258,7 @@ class FeedViewModel(
|
||||
fun setFolderName(name: String) = _addFolderState.update {
|
||||
it.copy(
|
||||
name = name,
|
||||
isEmpty = false
|
||||
nameError = null,
|
||||
)
|
||||
}
|
||||
|
||||
@ -266,7 +267,7 @@ class FeedViewModel(
|
||||
|
||||
if (name.isEmpty()) {
|
||||
_addFolderState.update {
|
||||
it.copy(isEmpty = true)
|
||||
it.copy(nameError = TextFieldError.EmptyField)
|
||||
}
|
||||
|
||||
return
|
||||
@ -284,7 +285,7 @@ class FeedViewModel(
|
||||
_addFolderState.update {
|
||||
it.copy(
|
||||
name = "",
|
||||
isEmpty = false
|
||||
nameError = null,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ fun AddFeedDialog(
|
||||
}
|
||||
},
|
||||
isError = state.isError,
|
||||
supportingText = { Text(state.errorText) }
|
||||
supportingText = { Text(state.error?.errorText().orEmpty()) }
|
||||
)
|
||||
|
||||
ShortSpacer()
|
||||
|
@ -46,12 +46,8 @@ fun AddFolderDialog(
|
||||
}
|
||||
}
|
||||
},
|
||||
isError = state.isEmpty,
|
||||
supportingText = {
|
||||
if (state.isEmpty) {
|
||||
Text(text = state.errorText)
|
||||
}
|
||||
}
|
||||
isError = state.isError,
|
||||
supportingText = { Text(text = state.nameError?.errorText().orEmpty()) }
|
||||
)
|
||||
}
|
||||
}
|
@ -78,7 +78,7 @@ fun UpdateFeedDialog(
|
||||
supportingText = {
|
||||
if (state.isFeedNameError) {
|
||||
Text(
|
||||
text = state.errorText(state.feedNameError)
|
||||
text = state.feedNameError?.errorText().orEmpty()
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -96,7 +96,7 @@ fun UpdateFeedDialog(
|
||||
supportingText = {
|
||||
if (state.isFeedUrlError) {
|
||||
Text(
|
||||
text = state.errorText(state.feedUrlError)
|
||||
text = state.feedUrlError?.errorText().orEmpty()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,24 @@
|
||||
package com.readrops.app.compose.util.components
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
|
||||
|
||||
sealed class TextFieldError {
|
||||
object EmptyField : TextFieldError()
|
||||
object BadUrl : TextFieldError()
|
||||
object UnreachableUrl : TextFieldError()
|
||||
object NoRSSFeed : TextFieldError()
|
||||
object NoRSSUrl : TextFieldError()
|
||||
|
||||
@Composable
|
||||
fun errorText(): String =
|
||||
// TODO replace by string resources
|
||||
when (this) {
|
||||
BadUrl -> "Input is not a valid URL"
|
||||
EmptyField -> "Field can't be empty"
|
||||
NoRSSFeed -> "No RSS feed found"
|
||||
NoRSSUrl -> "The provided URL is not a valid RSS feed"
|
||||
UnreachableUrl -> "Unreachable URL"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user