Add some code for drawer.
This commit is contained in:
parent
83098df743
commit
5053ac7360
7 changed files with 60 additions and 28 deletions
|
|
@ -21,6 +21,7 @@ fun Image(
|
|||
modifier: Modifier = Modifier,
|
||||
contentModifier: Modifier = Modifier,
|
||||
alignment: Alignment = Alignment.Center,
|
||||
placeHolderScale: ContentScale = ContentScale.Fit,
|
||||
contentScale: ContentScale = ContentScale.Fit,
|
||||
alpha: Float = DefaultAlpha,
|
||||
colorFilter: ColorFilter? = null
|
||||
|
|
@ -34,7 +35,7 @@ fun Image(
|
|||
contentDescription = contentDescription,
|
||||
modifier = contentModifier,
|
||||
alignment = alignment,
|
||||
contentScale = contentScale,
|
||||
contentScale = placeHolderScale,
|
||||
alpha = alpha,
|
||||
colorFilter = colorFilter,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import androidx.compose.runtime.livedata.observeAsState
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.focus.focusModifier
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
|
|
@ -73,6 +72,7 @@ fun DetailPageComposable(book: BookUio) {
|
|||
.wrapContentHeight()
|
||||
.padding(vertical = 16.dp)
|
||||
.clip(RoundedCornerShape(16.dp)),
|
||||
placeHolderScale = ContentScale.FillWidth,
|
||||
contentScale = ContentScale.FillWidth,
|
||||
placeHolder = painterResource(id = R.drawable.ic_launcher_foreground),
|
||||
contentUrl = book.cover,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import androidx.compose.foundation.layout.wrapContentHeight
|
|||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.paging.compose.LazyPagingItems
|
||||
|
|
@ -26,10 +26,17 @@ import com.pixelized.biblib.ui.viewmodel.navigation.INavigationViewModel.Navigab
|
|||
fun HomePageComposable(
|
||||
navigationViewModel: INavigationViewModel,
|
||||
booksViewModel: IBooksViewModel,
|
||||
page: Page?,
|
||||
) {
|
||||
var currentPage by remember { mutableStateOf<Page.Home?>(null) }
|
||||
currentPage = page as? Page.Home ?: currentPage
|
||||
|
||||
// https://issuetracker.google.com/issues/177245496
|
||||
val lazyBooks: LazyPagingItems<BookThumbnailUio> =
|
||||
booksViewModel.news.collectAsLazyPagingItems()
|
||||
val data: LazyPagingItems<BookThumbnailUio> = when(currentPage) {
|
||||
is Page.Home.New -> booksViewModel.books.collectAsLazyPagingItems()
|
||||
else -> booksViewModel.news.collectAsLazyPagingItems()
|
||||
}
|
||||
|
||||
val lazyListState = rememberLazyListState()
|
||||
val scrollableState = rememberScrollState()
|
||||
|
||||
|
|
@ -39,7 +46,7 @@ fun HomePageComposable(
|
|||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
state = lazyListState,
|
||||
) {
|
||||
items(lazyBooks) { thumbnail ->
|
||||
items(data) { thumbnail ->
|
||||
BookThumbnailComposable(
|
||||
thumbnail = thumbnail!!,
|
||||
modifier = Modifier
|
||||
|
|
|
|||
|
|
@ -64,15 +64,12 @@ fun LoginScreenComposable(
|
|||
authenticationViewModel: IAuthenticationViewModel = viewModel<AuthenticationViewModel>(),
|
||||
bookViewModel: IBooksViewModel = viewModel<BooksViewModel>()
|
||||
) {
|
||||
// TODO:
|
||||
LaunchedEffect("merde") {
|
||||
authenticationViewModel.clearState()
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
) {
|
||||
Box(modifier = Modifier.fillMaxSize()) {
|
||||
authenticationViewModel.PrepareLoginWithGoogle()
|
||||
LoginScreenNavigationComposable(
|
||||
navigationViewModel,
|
||||
|
|
@ -91,8 +88,7 @@ private fun LoginScreenContentComposable(
|
|||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
.fillMaxSize()
|
||||
.verticalScroll(rememberScrollState())
|
||||
.padding(16.dp)
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -45,11 +45,12 @@ fun MainScreenComposable(
|
|||
// coroutine
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
// scaffold & toolbar
|
||||
val canNavigateBack = page !is Page.HomePage
|
||||
val canNavigateBack = page !is Page.Home
|
||||
val scaffoldState = rememberScaffoldState()
|
||||
|
||||
// TODO:
|
||||
LaunchedEffect(key1 = "MainScreen", block = {
|
||||
navigationViewModel.navigateTo(Page.HomePage, true)
|
||||
navigationViewModel.navigateTo(Page.Home.New, true)
|
||||
})
|
||||
|
||||
Scaffold(
|
||||
|
|
@ -65,11 +66,30 @@ fun MainScreenComposable(
|
|||
}
|
||||
)
|
||||
},
|
||||
drawerContent = { DrawerContentComposable() }
|
||||
drawerContent = {
|
||||
DrawerContentComposable(
|
||||
onNewClick = {
|
||||
coroutineScope.launch { scaffoldState.drawerState.close() }
|
||||
},
|
||||
onBookClick = {
|
||||
coroutineScope.launch { scaffoldState.drawerState.close() }
|
||||
},
|
||||
onSeriesClick = {
|
||||
coroutineScope.launch { scaffoldState.drawerState.close() }
|
||||
},
|
||||
onAuthorClick = {
|
||||
coroutineScope.launch { scaffoldState.drawerState.close() }
|
||||
},
|
||||
onTagClick = {
|
||||
coroutineScope.launch { scaffoldState.drawerState.close() }
|
||||
},
|
||||
)
|
||||
}
|
||||
) {
|
||||
HomePageComposable(
|
||||
navigationViewModel = navigationViewModel,
|
||||
booksViewModel = booksViewModel,
|
||||
page = page,
|
||||
)
|
||||
|
||||
AnimatedVisibility(
|
||||
|
|
@ -138,7 +158,13 @@ fun NavigationIcon(
|
|||
}
|
||||
|
||||
@Composable
|
||||
fun DrawerContentComposable() {
|
||||
fun DrawerContentComposable(
|
||||
onNewClick: () -> Unit,
|
||||
onBookClick: () -> Unit,
|
||||
onSeriesClick: () -> Unit,
|
||||
onAuthorClick: () -> Unit,
|
||||
onTagClick: () -> Unit,
|
||||
) {
|
||||
val typography = MaterialTheme.typography
|
||||
Column(
|
||||
modifier = Modifier
|
||||
|
|
@ -168,27 +194,27 @@ fun DrawerContentComposable() {
|
|||
DrawerLink(
|
||||
text = "Nouveautés",
|
||||
imageVector = Icons.Default.NewReleases,
|
||||
onClick = {},
|
||||
onClick = onNewClick,
|
||||
)
|
||||
DrawerLink(
|
||||
text = "Livres",
|
||||
imageVector = Icons.Default.AutoStories,
|
||||
onClick = {},
|
||||
onClick = onBookClick,
|
||||
)
|
||||
DrawerLink(
|
||||
text = "Séries",
|
||||
imageVector = Icons.Default.AutoAwesomeMotion,
|
||||
onClick = {},
|
||||
onClick = onSeriesClick,
|
||||
)
|
||||
DrawerLink(
|
||||
text = "Auteurs",
|
||||
imageVector = Icons.Default.SupervisorAccount,
|
||||
onClick = {},
|
||||
onClick = onAuthorClick,
|
||||
)
|
||||
DrawerLink(
|
||||
text = "Étiquettes",
|
||||
imageVector = Icons.Default.LocalOffer,
|
||||
onClick = {},
|
||||
onClick = onTagClick,
|
||||
)
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
Text(
|
||||
|
|
@ -252,7 +278,7 @@ fun ToolbarComposableLightPreview() {
|
|||
fun MainScreenComposablePreview() {
|
||||
BibLibTheme {
|
||||
MainScreenComposable(
|
||||
INavigationViewModel.Mock(page = Page.HomePage),
|
||||
INavigationViewModel.Mock(page = Page.Home.New),
|
||||
IBooksViewModel.Mock()
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,14 +19,17 @@ interface INavigationViewModel {
|
|||
}
|
||||
|
||||
sealed class Page : Navigable() {
|
||||
object HomePage : Page()
|
||||
sealed class Home : Page() {
|
||||
object New: Home()
|
||||
object All: Home()
|
||||
}
|
||||
data class Detail(val bookId: Int) : Page()
|
||||
}
|
||||
}
|
||||
|
||||
class Mock(
|
||||
screen: Navigable.Screen = Navigable.Screen.SplashScreen,
|
||||
page: Navigable.Page = Navigable.Page.HomePage
|
||||
page: Navigable.Page = Navigable.Page.Home.New
|
||||
) : INavigationViewModel {
|
||||
override val screen: LiveData<Navigable.Screen> = MutableLiveData(screen)
|
||||
override val page: LiveData<Navigable.Page> = MutableLiveData(page)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import java.util.*
|
|||
class NavigationViewModel : ViewModel(), INavigationViewModel {
|
||||
private val stack = Stack<Navigable?>()
|
||||
private val _screen = MutableLiveData<Screen>(Screen.SplashScreen)
|
||||
private val _page = MutableLiveData<Page>(Page.HomePage)
|
||||
private val _page = MutableLiveData<Page>()
|
||||
|
||||
override val screen: LiveData<Screen> get() = _screen
|
||||
override val page: LiveData<Page> get() = _page
|
||||
|
|
@ -49,8 +49,7 @@ class NavigationViewModel : ViewModel(), INavigationViewModel {
|
|||
return if (stack.isEmpty()) {
|
||||
null
|
||||
} else {
|
||||
stack.pop()
|
||||
while (stack.isNotEmpty() && stack.peek() == null) stack.pop()
|
||||
do stack.pop() while (stack.isNotEmpty() && stack.peek() == null)
|
||||
return if (stack.isNotEmpty()) stack.peek() else null
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue