mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-23 19:26:50 +00:00
feat(app): add HomeSearchFullScreen route and integrate search functionality in HomeScreen
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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,37 +52,18 @@ fun HomeScreen(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
Box(modifier = Modifier.fillMaxSize()) {
|
HomeContent(
|
||||||
HomeContent(
|
libraries = libraries,
|
||||||
libraries = libraries,
|
libraryContent = libraryContent,
|
||||||
libraryContent = libraryContent,
|
suggestions = suggestions,
|
||||||
suggestions = suggestions,
|
continueWatching = continueWatching,
|
||||||
continueWatching = continueWatching,
|
nextUp = nextUp,
|
||||||
nextUp = nextUp,
|
isRefreshing = isRefreshing,
|
||||||
isRefreshing = isRefreshing,
|
onRefresh = onRefresh,
|
||||||
onRefresh = onRefresh,
|
onMediaSelected = onMediaSelected,
|
||||||
onMediaSelected = onMediaSelected,
|
onLibrarySelected = onLibrarySelected,
|
||||||
onLibrarySelected = onLibrarySelected,
|
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)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user