diff --git a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTree.kt b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTree.kt index 4f92785..657b151 100644 --- a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTree.kt +++ b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTree.kt @@ -103,7 +103,7 @@ public fun JsonTree( is JsonTreeParserState.Ready -> { Box(modifier = modifier) { JsonTreeList( - items = state.list, + state = state, contentPadding = contentPadding, colors = colors, icon = icon, @@ -148,7 +148,7 @@ public fun JsonTree( @Composable private fun JsonTreeList( - items: List, + state: JsonTreeParserState.Ready, contentPadding: PaddingValues, colors: TreeColors, icon: ImageVector, @@ -160,6 +160,8 @@ private fun JsonTreeList( lazyListState: LazyListState, onClick: (JsonTreeElement) -> Unit, ) { + val items = state.list + LazyColumn( state = lazyListState, contentPadding = contentPadding diff --git a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTreeParser.kt b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTreeParser.kt index f5689f6..fbe5c44 100644 --- a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTreeParser.kt +++ b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTreeParser.kt @@ -71,7 +71,7 @@ internal class JsonTreeParser( val expandedList = state.list.first().expand(expansion = Expansion.All).toList() withContext(mainDispatcher) { - parserState.value = state.copy(expandedList) + parserState.value = state.copy(list = expandedList) } expandedList } @@ -103,7 +103,7 @@ internal class JsonTreeParser( } withContext(mainDispatcher) { - parserState.value = state.copy(newList) + parserState.value = state.copy(list = newList) } } diff --git a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTreeParserState.kt b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTreeParserState.kt index bea7c02..abeeb1a 100644 --- a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTreeParserState.kt +++ b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/JsonTreeParserState.kt @@ -1,7 +1,9 @@ package com.sebastianneubauer.jsontree +import androidx.compose.runtime.Immutable import kotlinx.serialization.json.JsonElement +@Immutable internal sealed interface JsonTreeParserState { data object Loading : JsonTreeParserState data class Ready(val list: List) : JsonTreeParserState diff --git a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/search/JsonTreeSearch.kt b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/search/JsonTreeSearch.kt index d3c9674..6414117 100644 --- a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/search/JsonTreeSearch.kt +++ b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/search/JsonTreeSearch.kt @@ -1,16 +1,19 @@ package com.sebastianneubauer.jsontree.search +import androidx.compose.runtime.Immutable import com.sebastianneubauer.jsontree.JsonTreeElement import com.sebastianneubauer.jsontree.search.SearchState.SearchResult import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext +@Immutable internal data class SearchOccurrence( // the index in the JsonTree list val listIndex: Int, // the ranges of the search query matches val ranges: List, ) { + @Immutable sealed interface Range { val range: IntRange diff --git a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/search/SearchState.kt b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/search/SearchState.kt index 010ea9d..a51ccc7 100644 --- a/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/search/SearchState.kt +++ b/jsontree/src/commonMain/kotlin/com/sebastianneubauer/jsontree/search/SearchState.kt @@ -1,6 +1,7 @@ package com.sebastianneubauer.jsontree.search import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -178,6 +179,7 @@ public class SearchState internal constructor( ) } + @Immutable internal data class SearchResult( val query: String?, val occurrences: Map,