feat(app): add HomeSearchFullScreen route and integrate search functionality in HomeScreen

This commit is contained in:
2026-05-02 12:23:25 +02:00
parent cff0b60b31
commit 44219d00d8
5 changed files with 28 additions and 44 deletions

View File

@@ -5,6 +5,7 @@ import hu.bbara.purefin.ui.screen.library.LibraryScreen
import hu.bbara.purefin.ui.screen.login.LoginScreen import hu.bbara.purefin.ui.screen.login.LoginScreen
import hu.bbara.purefin.ui.screen.AppScreen import hu.bbara.purefin.ui.screen.AppScreen
import hu.bbara.purefin.ui.screen.episode.EpisodeScreen import hu.bbara.purefin.ui.screen.episode.EpisodeScreen
import hu.bbara.purefin.ui.screen.home.components.search.HomeSearchFullScreen
import hu.bbara.purefin.ui.screen.movie.MovieScreen import hu.bbara.purefin.ui.screen.movie.MovieScreen
import hu.bbara.purefin.ui.screen.series.SeriesScreen import hu.bbara.purefin.ui.screen.series.SeriesScreen
@@ -12,6 +13,9 @@ fun EntryProviderScope<Route>.appRouteEntryBuilder() {
entry<Route.Home> { entry<Route.Home> {
AppScreen() AppScreen()
} }
entry<Route.HomeSearchRoute> {
HomeSearchFullScreen()
}
entry<Route.MovieRoute> { entry<Route.MovieRoute> {
MovieScreen(movie = it.item) MovieScreen(movie = it.item)
} }

View File

@@ -77,6 +77,7 @@ fun AppScreen(
onProfileClick = {}, onProfileClick = {},
onSettingsClick = {}, onSettingsClick = {},
onLogoutClick = viewModel::logout, onLogoutClick = viewModel::logout,
onSearchClick = viewModel::openSearch,
selectedTab = selectedTab, selectedTab = selectedTab,
onTabSelected = onTabSelected, onTabSelected = onTabSelected,
modifier = Modifier.fillMaxSize() modifier = Modifier.fillMaxSize()

View File

@@ -1,26 +1,18 @@
package hu.bbara.purefin.ui.screen.home package hu.bbara.purefin.ui.screen.home
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import hu.bbara.purefin.ui.model.LibraryUiModel import hu.bbara.purefin.ui.model.LibraryUiModel
import hu.bbara.purefin.ui.model.MediaUiModel import hu.bbara.purefin.ui.model.MediaUiModel
import hu.bbara.purefin.ui.screen.AppBottomBar import hu.bbara.purefin.ui.screen.AppBottomBar
import hu.bbara.purefin.ui.screen.home.components.HomeContent import hu.bbara.purefin.ui.screen.home.components.HomeContent
import hu.bbara.purefin.ui.screen.home.components.HomeTopBar import hu.bbara.purefin.ui.screen.home.components.HomeTopBar
import hu.bbara.purefin.ui.screen.home.components.search.HomeSearchOverlay
import java.util.UUID import java.util.UUID
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun HomeScreen( fun HomeScreen(
libraries: List<LibraryUiModel>, libraries: List<LibraryUiModel>,
@@ -35,12 +27,11 @@ fun HomeScreen(
onProfileClick: () -> Unit, onProfileClick: () -> Unit,
onSettingsClick: () -> Unit, onSettingsClick: () -> Unit,
onLogoutClick: () -> Unit, onLogoutClick: () -> Unit,
onSearchClick: () -> Unit,
selectedTab: Int, selectedTab: Int,
onTabSelected: (Int) -> Unit, onTabSelected: (Int) -> Unit,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
var isSearchVisible by rememberSaveable { mutableStateOf(false) }
Scaffold( Scaffold(
modifier = modifier modifier = modifier
.fillMaxSize(), .fillMaxSize(),
@@ -48,7 +39,7 @@ fun HomeScreen(
contentColor = MaterialTheme.colorScheme.onBackground, contentColor = MaterialTheme.colorScheme.onBackground,
topBar = { topBar = {
HomeTopBar( HomeTopBar(
onSearchClick = { isSearchVisible = true }, onSearchClick = onSearchClick,
onProfileClick = onProfileClick, onProfileClick = onProfileClick,
onSettingsClick = onSettingsClick, onSettingsClick = onSettingsClick,
onLogoutClick = onLogoutClick onLogoutClick = onLogoutClick
@@ -61,7 +52,6 @@ fun HomeScreen(
) )
} }
) { innerPadding -> ) { innerPadding ->
Box(modifier = Modifier.fillMaxSize()) {
HomeContent( HomeContent(
libraries = libraries, libraries = libraries,
libraryContent = libraryContent, libraryContent = libraryContent,
@@ -75,23 +65,5 @@ fun HomeScreen(
onBrowseLibrariesClick = { onTabSelected(1) }, onBrowseLibrariesClick = { onTabSelected(1) },
modifier = Modifier.padding(innerPadding) modifier = Modifier.padding(innerPadding)
) )
HomeSearchOverlay(
visible = isSearchVisible,
topPadding = innerPadding.calculateTopPadding(),
onDismiss = { isSearchVisible = false },
onMovieSelected = {
isSearchVisible = false
//TODO use MediaUiModel as well
//onMovieSelected(it)
},
onSeriesSelected = {
isSearchVisible = false
//onSeriesSelected(it)
},
modifier = Modifier
.fillMaxSize()
.padding(innerPadding)
)
}
} }
} }

View File

@@ -251,6 +251,10 @@ class AppViewModel @Inject constructor(
} }
} }
fun openSearch() {
navigationManager.navigate(Route.HomeSearchRoute)
}
fun logout() { fun logout() {
viewModelScope.launch { viewModelScope.launch {
userSessionRepository.setLoggedIn(false) userSessionRepository.setLoggedIn(false)

View File

@@ -8,6 +8,9 @@ sealed interface Route : NavKey {
@Serializable @Serializable
data object Home : Route data object Home : Route
@Serializable
data object HomeSearchRoute : Route
@Serializable @Serializable
data class MovieRoute(val item: MovieDto) : Route data class MovieRoute(val item: MovieDto) : Route