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