Fix multi-criterion search detail highligh
This commit is contained in:
parent
2e4c87c052
commit
9e5655c7d7
4 changed files with 28 additions and 21 deletions
|
|
@ -66,6 +66,7 @@ import com.pixelized.rplexicon.utilitary.extentions.annotatedString
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.highlightRegex
|
import com.pixelized.rplexicon.utilitary.extentions.highlightRegex
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.scrollOffset
|
import com.pixelized.rplexicon.utilitary.extentions.scrollOffset
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
|
||||||
import com.skydoves.landscapist.ImageOptions
|
import com.skydoves.landscapist.ImageOptions
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
|
|
@ -104,7 +105,8 @@ data class AnnotatedLexiconDetailUio(
|
||||||
fun LexiconDetailUio.annotate(): AnnotatedLexiconDetailUio {
|
fun LexiconDetailUio.annotate(): AnnotatedLexiconDetailUio {
|
||||||
val colorScheme = MaterialTheme.colorScheme
|
val colorScheme = MaterialTheme.colorScheme
|
||||||
val highlight = remember { SpanStyle(color = colorScheme.primary) }
|
val highlight = remember { SpanStyle(color = colorScheme.primary) }
|
||||||
val highlightRegex = remember(search) { search.highlightRegex }
|
val trimmedSearch = remember(search) { search.searchCriterion() }
|
||||||
|
val highlightRegex = remember(search) { trimmedSearch.highlightRegex }
|
||||||
val gender = stringResource(id = gender, short = true)
|
val gender = stringResource(id = gender, short = true)
|
||||||
val race = stringResource(id = race)
|
val race = stringResource(id = race)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ import com.pixelized.rplexicon.utilitary.extentions.finderRegex
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.foldAll
|
import com.pixelized.rplexicon.utilitary.extentions.foldAll
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.highlightRegex
|
import com.pixelized.rplexicon.utilitary.extentions.highlightRegex
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
class SearchItemUio(
|
class SearchItemUio(
|
||||||
|
|
@ -109,9 +110,7 @@ class AnnotatedSearchItemUio(
|
||||||
private fun SearchItemUio.annotate(): AnnotatedSearchItemUio {
|
private fun SearchItemUio.annotate(): AnnotatedSearchItemUio {
|
||||||
val colorScheme = MaterialTheme.colorScheme
|
val colorScheme = MaterialTheme.colorScheme
|
||||||
val highlight = remember { SpanStyle(color = colorScheme.primary) }
|
val highlight = remember { SpanStyle(color = colorScheme.primary) }
|
||||||
val trimmedSearch = remember(search) {
|
val trimmedSearch = remember(search) { search.searchCriterion() }
|
||||||
search.split(" ").mapNotNull { it.trim().takeIf { trim -> trim.isNotEmpty() } }
|
|
||||||
}
|
|
||||||
val highlightRegex = remember(search) { trimmedSearch.highlightRegex }
|
val highlightRegex = remember(search) { trimmedSearch.highlightRegex }
|
||||||
val finderRegex = remember(search) { trimmedSearch.finderRegex }
|
val finderRegex = remember(search) { trimmedSearch.finderRegex }
|
||||||
val gender = stringResource(id = gender, short = true)
|
val gender = stringResource(id = gender, short = true)
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import com.pixelized.rplexicon.repository.data.LexiconRepository
|
||||||
import com.pixelized.rplexicon.ui.composable.form.DropDownFieldUio
|
import com.pixelized.rplexicon.ui.composable.form.DropDownFieldUio
|
||||||
import com.pixelized.rplexicon.ui.composable.form.TextFieldUio
|
import com.pixelized.rplexicon.ui.composable.form.TextFieldUio
|
||||||
import com.pixelized.rplexicon.utilitary.composable.stringResource
|
import com.pixelized.rplexicon.utilitary.composable.stringResource
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
@ -52,17 +53,15 @@ class SearchViewModel @Inject constructor(
|
||||||
data.filter { item ->
|
data.filter { item ->
|
||||||
val gender = _gender.value?.let { it == item.gender }
|
val gender = _gender.value?.let { it == item.gender }
|
||||||
val race = _race.value?.let { it == item.race }
|
val race = _race.value?.let { it == item.race }
|
||||||
val search = _search.value.split(" ").mapNotNull {
|
val search = _search.value.searchCriterion().map { criteria ->
|
||||||
it.takeIf { it.isNotEmpty() }?.trim()?.let { search ->
|
val name = item.name.contains(criteria, true)
|
||||||
val name = item.name.contains(search, true)
|
val diminutive = item.diminutive?.contains(criteria, true) == true
|
||||||
val diminutive = item.diminutive?.contains(search, true) == true
|
val status = item.status?.contains(criteria, true) == true
|
||||||
val status = item.status?.contains(search, true) == true
|
val location = item.location?.contains(criteria, true) == true
|
||||||
val location = item.location?.contains(search, true) == true
|
val description = item.description?.contains(criteria, true) == true
|
||||||
val description = item.description?.contains(search, true) == true
|
val history = item.history?.contains(criteria, true) == true
|
||||||
val history = item.history?.contains(search, true) == true
|
val tag = item.tags?.contains(criteria, true) == true
|
||||||
val tag = item.tags?.contains(search, true) == true
|
name || diminutive || status || location || description || history || tag
|
||||||
name || diminutive || status || location || description || history || tag
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
(gender == null || gender) && (race == null || race) && (search.all { it })
|
(gender == null || gender) && (race == null || race) && (search.all { it })
|
||||||
}.map {
|
}.map {
|
||||||
|
|
|
||||||
|
|
@ -41,12 +41,6 @@ val List<String>.finderRegex: Regex?
|
||||||
)
|
)
|
||||||
} else null
|
} else null
|
||||||
|
|
||||||
fun String?.toUriOrNull(): Uri? = try {
|
|
||||||
this?.takeIf { it.isNotBlank() }?.toUri()
|
|
||||||
} catch (_: Exception) {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
fun String.annotateWithDropCap(
|
fun String.annotateWithDropCap(
|
||||||
style: SpanStyle,
|
style: SpanStyle,
|
||||||
|
|
@ -57,3 +51,16 @@ fun String.annotateWithDropCap(
|
||||||
spanStyle = style,
|
spanStyle = style,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Stable
|
||||||
|
fun String?.toUriOrNull(): Uri? = try {
|
||||||
|
this?.takeIf { it.isNotBlank() }?.toUri()
|
||||||
|
} catch (_: Exception) {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
@Stable
|
||||||
|
fun String?.searchCriterion(): List<String> = this
|
||||||
|
?.split(" ")
|
||||||
|
?.mapNotNull { it.trim().takeIf { trim -> trim.isNotEmpty() } }
|
||||||
|
?: emptyList()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue