TODO: - Global search should launch a controller with the search textfield focused. This is pending a Compose rewrite of that screen. - Better migrate sort UI - Extensions search (cherry picked from commit 92e83f702c775d5ab5a0b4248995308155150811) # Conflicts: # app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt # app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt # app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseController.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrationSourcesController.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesController.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesPresenter.kt
27 lines
901 B
Kotlin
27 lines
901 B
Kotlin
package eu.kanade.presentation.browse
|
|
|
|
import androidx.compose.runtime.derivedStateOf
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.setValue
|
|
import eu.kanade.tachiyomi.ui.browse.extension.ExtensionUiModel
|
|
|
|
interface ExtensionsState {
|
|
val isLoading: Boolean
|
|
val isRefreshing: Boolean
|
|
val items: List<ExtensionUiModel>
|
|
val updates: Int
|
|
val isEmpty: Boolean
|
|
}
|
|
|
|
fun ExtensionState(): ExtensionsState {
|
|
return ExtensionsStateImpl()
|
|
}
|
|
|
|
class ExtensionsStateImpl : ExtensionsState {
|
|
override var isLoading: Boolean by mutableStateOf(true)
|
|
override var isRefreshing: Boolean by mutableStateOf(false)
|
|
override var items: List<ExtensionUiModel> by mutableStateOf(emptyList())
|
|
override var updates: Int by mutableStateOf(0)
|
|
override val isEmpty: Boolean by derivedStateOf { items.isEmpty() }
|
|
}
|