Fix Saved Search issues

This commit is contained in:
Jobobby04 2023-03-20 17:43:42 -04:00
parent 16bbfcd086
commit 5893350f43
2 changed files with 25 additions and 17 deletions

View File

@ -20,13 +20,11 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.runtime.toMutableStateList
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.TextRange
@ -50,11 +48,6 @@ fun AutoCompleteItem(
validPrefixes: List<String>, validPrefixes: List<String>,
onChange: (List<String>) -> Unit, onChange: (List<String>) -> Unit,
) { ) {
val newState = remember { state.toMutableStateList() }
DisposableEffect(newState) {
onChange(newState)
onDispose {}
}
Column( Column(
Modifier.fillMaxWidth() Modifier.fillMaxWidth()
.padding( .padding(
@ -74,12 +67,12 @@ fun AutoCompleteItem(
tag tag
} }
{ it.contains(tagNoPrefix, true) } Pair({ it.contains(tagNoPrefix, true) }, prefix)
}, },
onSubmit = { tag -> onSubmit = { tag ->
val tagNoPrefix = validPrefixes.find { tag.startsWith(it) }?.let { tag.removePrefix(it).trim() } ?: tag val tagNoPrefix = validPrefixes.find { tag.startsWith(it) }?.let { tag.removePrefix(it).trim() } ?: tag
if (tagNoPrefix !in skipAutoFillTags) { if (tagNoPrefix !in skipAutoFillTags) {
newState += tag onChange(state + tag)
true true
} else { } else {
false false
@ -90,11 +83,11 @@ fun AutoCompleteItem(
modifier = Modifier.padding(end = 8.dp), modifier = Modifier.padding(end = 8.dp),
horizontalArrangement = Arrangement.spacedBy(4.dp), horizontalArrangement = Arrangement.spacedBy(4.dp),
) { ) {
newState.forEach { state.forEach {
InputChip( InputChip(
selected = false, selected = false,
onClick = { onClick = {
newState -= it onChange(state - it)
}, },
label = { label = {
Text( Text(
@ -122,7 +115,7 @@ fun AutoCompleteTextField(
label: String? = null, label: String? = null,
placeholder: String? = null, placeholder: String? = null,
values: List<String>, values: List<String>,
onValueFilter: ((String) -> ((String) -> Boolean)), onValueFilter: ((String) -> (Pair<(String) -> Boolean, String?>)),
onSubmit: (String) -> Boolean, onSubmit: (String) -> Boolean,
) { ) {
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
@ -173,8 +166,20 @@ fun AutoCompleteTextField(
val filteredValues by produceState(emptyList(), value) { val filteredValues by produceState(emptyList(), value) {
withContext(Dispatchers.Default) { withContext(Dispatchers.Default) {
val filter = onValueFilter(value.text) val (filter, prefix) = onValueFilter(value.text)
this@produceState.value = values.asSequence().filter(filter).take(100).toList() this@produceState.value = values.asSequence()
.filter(filter)
.take(100)
.let {
if (prefix != null) {
it.map { tag ->
prefix + tag
}
} else {
it
}
}
.toList()
} }
} }
if (value.text.length > 2 && filteredValues.isNotEmpty()) { if (value.text.length > 2 && filteredValues.isNotEmpty()) {

View File

@ -537,14 +537,17 @@ open class BrowseSourceScreenModel(
val allDefault = search.filterList != null && search.filterList == source.getFilterList() val allDefault = search.filterList != null && search.filterList == source.getFilterList()
setDialog(null) setDialog(null)
val filters = search.filterList
?.takeUnless { allDefault }
?: source.getFilterList()
mutableState.update { mutableState.update {
it.copy( it.copy(
listing = Listing.Search( listing = Listing.Search(
query = search.query, query = search.query,
filters = search.filterList filters = filters,
?.takeUnless { allDefault }
?: source.getFilterList(),
), ),
filters = filters,
toolbarQuery = search.query, toolbarQuery = search.query,
) )
} }