debut SearchPage

SearchPage
brongniart 1 month ago
parent 54f2e1741e
commit a4e874b8fc

@ -21,4 +21,7 @@ interface IServices {
fun isFavorite(id : Int): Boolean fun isFavorite(id : Int): Boolean
fun search(type : String ,search:String ,indexCount: Int): List<Quote>
} }

@ -47,4 +47,8 @@ class ServicesAPI : IServices {
override fun getUserById(id: Int): User? { override fun getUserById(id: Int): User? {
TODO("Not yet implemented") TODO("Not yet implemented")
} }
override fun search(type : String ,search:String ,indexCount: Int): List<Quote>{
TODO("Not yet implemented")
}
} }

@ -95,4 +95,22 @@ class ServicesStub : IServices {
fun randomImage(usersImage : List<User>) : String{ fun randomImage(usersImage : List<User>) : String{
return "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg" return "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"
} }
override fun search(type : String ,search:String ,indexCount: Int): List<Quote> {
return (QuoteStub.allQuotes.filter {
when (type) {
"personnage" -> {
it.character.uppercase().contains(search.uppercase())
}
"titre" -> {
it.source.uppercase().contains(search.uppercase())
}
else -> {
it.content.uppercase().contains(search.uppercase())
}
}
}.take(indexCount))
}
} }

@ -30,6 +30,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.example.what_the_fantasy.R import com.example.what_the_fantasy.R
import com.example.what_the_fantasy.ui.theme.* import com.example.what_the_fantasy.ui.theme.*
@ -39,11 +40,11 @@ fun NavBar(onProfile : Boolean = false ,
onFavorite : Boolean = false , onFavorite : Boolean = false ,
onAccueil : Boolean = false , onAccueil : Boolean = false ,
onQuiz : Boolean = false , onQuiz : Boolean = false ,
index:Int, navControllerProfil: () -> Unit = {},
navControllerProfil: (Int) -> Unit, navControllerFavorite:() -> Unit = {},
navControllerFavorite:(Int) -> Unit, navControllerAccueil: () -> Unit = {},
navControllerAccueil: (Int) -> Unit, navControllerQuiz: () -> Unit = {},
navControllerQuiz: (Int) -> Unit, navControllerSearch: () -> Unit = {},
content : @Composable ()-> Unit ) { content : @Composable ()-> Unit ) {
@ -63,26 +64,34 @@ fun NavBar(onProfile : Boolean = false ,
Arrangement.SpaceBetween, Arrangement.SpaceBetween,
verticalAlignment = Alignment.Bottom verticalAlignment = Alignment.Bottom
) { ) {
ButtonIconVectorInt(Icons.Rounded.AccountCircle,"Profile",navControllerProfil,index,onProfile) ButtonIconVector(Icons.Rounded.AccountCircle,stringResource(R.string.NavProfile),navControllerProfil,onProfile)
Row{
IconButton(onClick = { theme=!theme}, ButtonIconVector(Icons.Rounded.Search,stringResource(R.string.NavSearch),navControllerSearch,false)
modifier = Modifier.size(60.dp)
.clip(RoundedCornerShape(0))
) { IconButton(onClick = { theme=!theme},
Icon(painterResource( modifier = Modifier
if(theme)R.drawable.dark_mode_toggle_icon .size(60.dp)
else R.drawable.light_mode_toggle_icon), .clip(RoundedCornerShape(0))
contentDescription = "Dark mode", ) {
modifier = Modifier.fillMaxSize(), Icon(painterResource(
tint = Color.White if(theme)R.drawable.dark_mode_toggle_icon
) else R.drawable.light_mode_toggle_icon),
contentDescription = "Dark mode",
modifier = Modifier.fillMaxSize(),
tint = Color.White
)
}
} }
} }
} }
Box(modifier = Modifier.background(Color.Black).fillMaxHeight(0.90f)){ Box(modifier = Modifier
.background(Color.Black)
.fillMaxHeight(0.90f)){
content() content()
} }
@ -96,20 +105,20 @@ fun NavBar(onProfile : Boolean = false ,
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
ButtonIconPainterInt(painterResource( ButtonIconPainter(painterResource(
if(onFavorite)R.drawable.favorite_button_full if(onFavorite)R.drawable.favorite_button_full
else R.drawable.favorite_button_empty else R.drawable.favorite_button_empty
),"Favorite",navControllerFavorite,index,onFavorite) ), stringResource(R.string.NavFavorite) ,navControllerFavorite,onFavorite)
ButtonIconPainterInt(painterResource( ButtonIconPainter(painterResource(
if(onAccueil)R.drawable.home_button_full if(onAccueil)R.drawable.home_button_full
else R.drawable.home_button_empty else R.drawable.home_button_empty
),"Accueil",navControllerAccueil,index,onAccueil) ),stringResource(R.string.NavHome),navControllerAccueil,onAccueil)
ButtonIconPainterInt(painterResource( ButtonIconPainter(painterResource(
if(onQuiz)R.drawable.quiz_button_full if(onQuiz)R.drawable.quiz_button_full
else R.drawable.quiz_button_empty else R.drawable.quiz_button_empty
),"Quiz",navControllerQuiz,index,onQuiz) ),stringResource(R.string.NavQuiz),navControllerQuiz,onQuiz)
} }
} }
@ -117,8 +126,8 @@ fun NavBar(onProfile : Boolean = false ,
} }
@Composable @Composable
fun ButtonIconVectorInt(img : ImageVector, name : String, nav : (Int)->Unit ,index: Int,onPage : Boolean){ fun ButtonIconVector(img : ImageVector, name : String, nav : ()->Unit,onPage : Boolean){
IconButton(onClick = {nav(index)}, IconButton(onClick = {nav()},
enabled = !onPage, enabled = !onPage,
colors = IconButtonColors(Color.Transparent, colorButtonNav,//couleur quand il n'est pas selectionné colors = IconButtonColors(Color.Transparent, colorButtonNav,//couleur quand il n'est pas selectionné
Color.Transparent, colorButtonNavSelected),//couleur quand il est selectionné Color.Transparent, colorButtonNavSelected),//couleur quand il est selectionné
@ -135,8 +144,8 @@ fun ButtonIconVectorInt(img : ImageVector, name : String, nav : (Int)->Unit ,ind
@Composable @Composable
fun ButtonIconPainterInt(img : Painter, name : String, nav : (Int)->Unit,index: Int,onPage : Boolean){ fun ButtonIconPainter(img : Painter, name : String, nav : ()->Unit,onPage : Boolean){
IconButton(onClick = {nav(index)}, IconButton(onClick = {nav()},
enabled = !onPage, enabled = !onPage,
colors = IconButtonColors(Color.Transparent,colorButtonNav,//couleur quand il n'est pas selectionné colors = IconButtonColors(Color.Transparent,colorButtonNav,//couleur quand il n'est pas selectionné
Color.Transparent, colorButtonNavSelected),//couleur quand il est selectionné Color.Transparent, colorButtonNavSelected),//couleur quand il est selectionné

@ -40,7 +40,7 @@ data class QuizEnd(val userIndex: Int, val idQuiz: Int, val pts: Int)
data class OneQuote(val quoteId: Int, val userIndex: Int) data class OneQuote(val quoteId: Int, val userIndex: Int)
@Serializable @Serializable
data object Search data class Search(val userIndex: Int,val type : String = "", val search: String = "")
@Serializable @Serializable
data object SignUp data object SignUp
@ -73,11 +73,11 @@ fun AppNavigator() {
composable<Accueil> { composable<Accueil> {
val accueil: Accueil = it.toRoute() val accueil: Accueil = it.toRoute()
AccueilPage( AccueilPage(
index = accueil.userIndex,
navFavorite = { navController.navigate(Favorite(accueil.userIndex)) }, navFavorite = { navController.navigate(Favorite(accueil.userIndex)) },
navQuiz = { navController.navigate(QuizMenu(accueil.userIndex)) }, navQuiz = { navController.navigate(QuizMenu(accueil.userIndex)) },
navProfil = { navController.navigate(Profil(accueil.userIndex)) }, navProfil = { navController.navigate(Profil(accueil.userIndex)) },
navQuote = { quoteId -> navController.navigate(OneQuote(quoteId,accueil.userIndex)) } navQuote = { quoteId -> navController.navigate(OneQuote(quoteId,accueil.userIndex)) },
navSearch = { navController.navigate(Search(accueil.userIndex))}
) )
} }
composable<Favorite> { composable<Favorite> {
@ -88,6 +88,7 @@ fun AppNavigator() {
navQuiz = { navController.navigate(QuizMenu(favorite.userIndex)) }, navQuiz = { navController.navigate(QuizMenu(favorite.userIndex)) },
navProfil = { navController.navigate(Profil(favorite.userIndex)) }, navProfil = { navController.navigate(Profil(favorite.userIndex)) },
navQuote = { quoteId -> navController.navigate(OneQuote(quoteId,favorite.userIndex)) }, navQuote = { quoteId -> navController.navigate(OneQuote(quoteId,favorite.userIndex)) },
navSearch = { navController.navigate(Search(favorite.userIndex))},
services = services services = services
) )
} }
@ -103,6 +104,7 @@ fun AppNavigator() {
popUpTo(profil) { inclusive = true } popUpTo(profil) { inclusive = true }
} }
}, },
navSearch = { navController.navigate(Search(profil.userIndex))},
services = services services = services
) )
} }
@ -110,15 +112,28 @@ fun AppNavigator() {
val quote: OneQuote = it.toRoute() val quote: OneQuote = it.toRoute()
QuotePage( QuotePage(
quoteId = quote.quoteId, quoteId = quote.quoteId,
index = quote.userIndex,
navAccueil = { navController.navigate(Accueil(quote.userIndex)) }, navAccueil = { navController.navigate(Accueil(quote.userIndex)) },
navQuiz = { navController.navigate(QuizMenu(quote.userIndex)) }, navQuiz = { navController.navigate(QuizMenu(quote.userIndex)) },
navProfil = { navController.navigate(Profil(quote.userIndex)) }, navProfil = { navController.navigate(Profil(quote.userIndex)) },
navFavorite = { navController.navigate(Favorite(quote.userIndex)) }, navFavorite = { navController.navigate(Favorite(quote.userIndex)) },
navSearch = { navController.navigate(Search(quote.userIndex))},
service = services service = services
) )
} }
composable<Search> { SearchPage() } composable<Search> {
val search: Search = it.toRoute()
SearchPage(
navAccueil = { navController.navigate(Accueil(search.userIndex)) },
navFavorite = { navController.navigate(Favorite(search.userIndex)) },
navQuiz = { navController.navigate(QuizMenu(search.userIndex)) },
navProfil = { navController.navigate(Profil(search.userIndex)) },
navQuote = { quoteId -> navController.navigate(OneQuote(quoteId,search.userIndex)) },
navSearch = {type,newSearch -> navController.navigate(Search(search.userIndex,type,newSearch))},
services = services,
type = search.type,
search = search.search
)
}
composable<SignUp> { composable<SignUp> {
SignUpPage( SignUpPage(
navControllerLogin = { navControllerLogin = {
@ -133,10 +148,10 @@ fun AppNavigator() {
composable<QuizMenu> { composable<QuizMenu> {
val quizMenu: QuizMenu = it.toRoute() val quizMenu: QuizMenu = it.toRoute()
QuizMenu( QuizMenu(
index = quizMenu.userIndex,
navAccueil = { navController.navigate(Accueil(quizMenu.userIndex)) }, navAccueil = { navController.navigate(Accueil(quizMenu.userIndex)) },
navFavorite = { navController.navigate(Favorite(quizMenu.userIndex)) }, navFavorite = { navController.navigate(Favorite(quizMenu.userIndex)) },
navProfil = { navController.navigate(Profil(quizMenu.userIndex)) }, navProfil = { navController.navigate(Profil(quizMenu.userIndex)) },
navSearch = { navController.navigate(Search(quizMenu.userIndex))},
navControllerQuiz = { idQuiz -> navControllerQuiz = { idQuiz ->
navController.navigate(Quiz(quizMenu.userIndex, idQuiz)) navController.navigate(Quiz(quizMenu.userIndex, idQuiz))
} }
@ -145,7 +160,6 @@ fun AppNavigator() {
composable<Quiz> { composable<Quiz> {
val quiz: Quiz = it.toRoute() val quiz: Quiz = it.toRoute()
QuizPage( QuizPage(
index = quiz.userIndex,
navAccueil = { navController.navigate(Accueil(quiz.userIndex)) }, navAccueil = { navController.navigate(Accueil(quiz.userIndex)) },
navFavorite = { navController.navigate(Favorite(quiz.userIndex)) }, navFavorite = { navController.navigate(Favorite(quiz.userIndex)) },
navProfil = { navController.navigate(Profil(quiz.userIndex)) }, navProfil = { navController.navigate(Profil(quiz.userIndex)) },
@ -153,6 +167,7 @@ fun AppNavigator() {
navControllerQuizEnd = { idQuiz, pts -> navControllerQuizEnd = { idQuiz, pts ->
navController.navigate(QuizEnd(quiz.userIndex, idQuiz, pts)) navController.navigate(QuizEnd(quiz.userIndex, idQuiz, pts))
}, },
navSearch = { navController.navigate(Search(quiz.userIndex))},
idQuiz = quiz.idQuiz idQuiz = quiz.idQuiz
) )
} }
@ -161,11 +176,11 @@ fun AppNavigator() {
QuizEndPage( QuizEndPage(
idQuiz = quizEnd.idQuiz, idQuiz = quizEnd.idQuiz,
points = quizEnd.pts, points = quizEnd.pts,
index = quizEnd.userIndex,
navAccueil = { navController.navigate(Accueil(quizEnd.userIndex)) }, navAccueil = { navController.navigate(Accueil(quizEnd.userIndex)) },
navFavorite = { navController.navigate(Favorite(quizEnd.userIndex)) }, navFavorite = { navController.navigate(Favorite(quizEnd.userIndex)) },
navProfil = { navController.navigate(Profil(quizEnd.userIndex)) }, navProfil = { navController.navigate(Profil(quizEnd.userIndex)) },
navQuiz = { navController.navigate(QuizMenu(quizEnd.userIndex)) } navQuiz = { navController.navigate(QuizMenu(quizEnd.userIndex)) },
navSearch = { navController.navigate(Search(quizEnd.userIndex))}
) )
} }
} }

@ -23,10 +23,10 @@ import com.example.what_the_fantasy.ui.theme.colorBackground
@Composable @Composable
fun AccueilPage( fun AccueilPage(
index: Int, navFavorite: () -> Unit,
navFavorite: (Int) -> Unit, navQuiz: () -> Unit,
navQuiz: (Int) -> Unit, navProfil: () -> Unit,
navProfil: (Int) -> Unit, navSearch: () -> Unit,
navQuote: (Int) -> Unit navQuote: (Int) -> Unit
) { ) {
var itemCount by remember { mutableStateOf(15) } var itemCount by remember { mutableStateOf(15) }
@ -35,11 +35,10 @@ fun AccueilPage(
NavBar( NavBar(
onAccueil = true, onAccueil = true,
index = index,
navControllerFavorite = navFavorite, navControllerFavorite = navFavorite,
navControllerAccueil = { },
navControllerProfil = navProfil, navControllerProfil = navProfil,
navControllerQuiz = navQuiz navControllerQuiz = navQuiz,
navControllerSearch = navSearch
) { ) {
Column( Column(
modifier = Modifier modifier = Modifier
@ -59,7 +58,11 @@ fun AccueilPage(
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
QuoteLittle(dailyQuote) Column(Modifier.clickable {navQuote(dailyQuote.id)}
) {
QuoteLittle(dailyQuote)
}
} }
Text( Text(
text = "▶ Suggestions ◀", text = "▶ Suggestions ◀",
@ -75,7 +78,6 @@ fun AccueilPage(
Column(Modifier.clickable {navQuote(quote.id)} Column(Modifier.clickable {navQuote(quote.id)}
) { ) {
QuoteLittle(quote) QuoteLittle(quote)
Spacer(modifier = Modifier.height(16.dp))
} }
} }
if (itemCount < QuoteStub.allQuotes.size) { if (itemCount < QuoteStub.allQuotes.size) {

@ -23,9 +23,10 @@ import com.example.what_the_fantasy.ui.theme.colorBackground
@Composable @Composable
fun FavoritePage( fun FavoritePage(
index: Int, index: Int,
navAccueil: (Int) -> Unit, navAccueil: () -> Unit,
navQuiz: (Int) -> Unit, navQuiz: () -> Unit,
navProfil: (Int) -> Unit, navProfil: () -> Unit,
navSearch: () -> Unit,
navQuote: (Int) -> Unit, navQuote: (Int) -> Unit,
services: IServices services: IServices
) { ) {
@ -33,11 +34,10 @@ fun FavoritePage(
val quotes = FavoriteStub.getFavoritesByUser(user.id) val quotes = FavoriteStub.getFavoritesByUser(user.id)
NavBar(onFavorite = true, NavBar(onFavorite = true,
index = index,
navControllerFavorite = { },
navControllerAccueil = navAccueil, navControllerAccueil = navAccueil,
navControllerProfil = navProfil, navControllerProfil = navProfil,
navControllerQuiz = navQuiz navControllerQuiz = navQuiz,
navControllerSearch = navSearch
) { ) {
Box( Box(
modifier = Modifier modifier = Modifier
@ -60,8 +60,6 @@ fun FavoritePage(
items(quotes) { quote -> items(quotes) { quote ->
Column (Modifier.clickable { navQuote( quote.id )} ){ Column (Modifier.clickable { navQuote( quote.id )} ){
QuoteLittle(quote) QuoteLittle(quote)
Spacer(modifier = Modifier.height(16.dp))
} }
} }
} }

@ -75,20 +75,20 @@ import com.example.what_the_fantasy.ui.theme.gradienBox
@Composable @Composable
fun ProfilPage(index: Int, fun ProfilPage(index: Int,
navFavorite: (Int) -> Unit, navFavorite: () -> Unit,
navAccueil: (Int) -> Unit, navAccueil: () -> Unit,
navQuiz: (Int) -> Unit, navQuiz: () -> Unit,
navSearch: () -> Unit,
navUnLog: () -> Unit, navUnLog: () -> Unit,
services: IServices services: IServices
) { ) {
val user = services.getUserById(index) ?: return val user = services.getUserById(index) ?: return
NavBar(onProfile = true, NavBar(onProfile = true,
index = index,
navControllerFavorite = navFavorite, navControllerFavorite = navFavorite,
navControllerAccueil = navAccueil, navControllerAccueil = navAccueil,
navControllerProfil = {}, navControllerQuiz = navQuiz,
navControllerQuiz = navQuiz navControllerSearch = navSearch
) { ) {
Box( Box(

@ -38,17 +38,19 @@ val gradient = Brush.linearGradient(
fun QuizEndPage( fun QuizEndPage(
idQuiz: Int, idQuiz: Int,
points: Int, points: Int,
index: Int, navFavorite: () -> Unit,
navFavorite: (Int) -> Unit, navAccueil: () -> Unit,
navAccueil: (Int) -> Unit, navProfil:() -> Unit,
navProfil:(Int) -> Unit, navQuiz: () -> Unit,
navQuiz: (Int) -> Unit, navSearch: () -> Unit,
) { ) {
NavBar(index = index, NavBar(
navControllerFavorite = navFavorite, navControllerFavorite = navFavorite,
navControllerAccueil = navAccueil, navControllerAccueil = navAccueil,
navControllerProfil = navProfil, navControllerProfil = navProfil,
navControllerQuiz = navQuiz) { navControllerQuiz = navQuiz,
navControllerSearch = navSearch
) {
Column( Column(
modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B))
) { ) {

@ -41,18 +41,18 @@ import com.example.what_the_fantasy.ui.components.NavBar
@Composable @Composable
fun QuizMenu( index: Int, fun QuizMenu(
navFavorite: (Int) -> Unit, navFavorite: () -> Unit,
navAccueil: (Int) -> Unit, navAccueil: () -> Unit,
navProfil:(Int) -> Unit, navProfil:() -> Unit,
navControllerQuiz: (Int) -> Unit navSearch: () -> Unit,
navControllerQuiz: (Int) -> Unit
) { ) {
NavBar(onQuiz = true, NavBar(onQuiz = true,
index = index,
navControllerFavorite = navFavorite, navControllerFavorite = navFavorite,
navControllerAccueil = navAccueil, navControllerAccueil = navAccueil,
navControllerProfil = navProfil, navControllerProfil = navProfil,
navControllerQuiz = { } navControllerSearch = navSearch
) { ) {
Column( Column(

@ -27,11 +27,11 @@ import com.example.what_the_fantasy.ui.components.NavBar
@Composable @Composable
fun QuizPage( fun QuizPage(
index: Int, navFavorite: () -> Unit,
navFavorite: (Int) -> Unit, navAccueil: () -> Unit,
navAccueil: (Int) -> Unit, navProfil:() -> Unit,
navProfil:(Int) -> Unit, navQuiz: () -> Unit,
navQuiz: (Int) -> Unit, navSearch: () -> Unit,
navControllerQuizEnd: (Int, Int) -> Unit, navControllerQuizEnd: (Int, Int) -> Unit,
@ -61,11 +61,12 @@ fun QuizPage(
if (idCurrentQuestion < questions.size - 1) idCurrentQuestion++ if (idCurrentQuestion < questions.size - 1) idCurrentQuestion++
else navControllerQuizEnd(idQuiz, pts) // Retour menu else navControllerQuizEnd(idQuiz, pts) // Retour menu
} }
NavBar(index = index, NavBar(
navControllerFavorite = navFavorite, navControllerFavorite = navFavorite,
navControllerAccueil = navAccueil, navControllerAccueil = navAccueil,
navControllerProfil = navProfil, navControllerProfil = navProfil,
navControllerQuiz = navQuiz navControllerQuiz = navQuiz,
navControllerSearch = navSearch
){ ){
Column ( Column (
modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B))

@ -45,20 +45,20 @@ import com.example.what_the_fantasy.ui.theme.whiteBackcgroundText
fun QuotePage( fun QuotePage(
quoteId : Int, quoteId : Int,
service : IServices, service : IServices,
index : Int, navAccueil: () -> Unit,
navAccueil: (Int) -> Unit, navFavorite:() -> Unit,
navFavorite:(Int) -> Unit, navQuiz: () -> Unit,
navQuiz: (Int) -> Unit, navSearch: () -> Unit,
navProfil:(Int) -> Unit) navProfil:() -> Unit)
{ {
var quote = service.getQuote(quoteId) ?: return var quote = service.getQuote(quoteId) ?: return
val context = LocalContext.current val context = LocalContext.current
NavBar(onProfile = true, NavBar(
index = index,
navControllerFavorite = navFavorite, navControllerFavorite = navFavorite,
navControllerAccueil = navAccueil, navControllerAccueil = navAccueil,
navControllerProfil = navProfil, navControllerProfil = navProfil,
navControllerQuiz = navQuiz navControllerQuiz = navQuiz,
navControllerSearch = navSearch
) { ) {
Box( Box(
modifier = Modifier modifier = Modifier

@ -1,8 +1,125 @@
package com.example.what_the_fantasy.ui.screens package com.example.what_the_fantasy.ui.screens
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.what_the_fantasy.R
import com.example.what_the_fantasy.data.local.DailyQuoteStub
import com.example.what_the_fantasy.data.local.QuoteStub
import com.example.what_the_fantasy.data.services.IServices
import com.example.what_the_fantasy.data.services.ServicesStub
import com.example.what_the_fantasy.ui.components.NavBar import com.example.what_the_fantasy.ui.components.NavBar
import com.example.what_the_fantasy.ui.components.QuoteLittle
import com.example.what_the_fantasy.ui.theme.colorBackground
@Composable @Composable
fun SearchPage() { fun SearchPage(
navFavorite: () -> Unit,
navAccueil: () -> Unit,
navProfil:() -> Unit,
navQuiz: () -> Unit,
navQuote: (Int) -> Unit,
navSearch: (String,String) -> Unit,
services: IServices,
type : String,
search:String
) {
var itemCount by remember { mutableStateOf(15) }
val quotes = services.search(type,search,itemCount)
var newSearch by remember { mutableStateOf(search) }
NavBar(
onAccueil = true,
navControllerFavorite = navFavorite,
navControllerAccueil = navAccueil,
navControllerProfil = navProfil,
navControllerQuiz = navQuiz,
navControllerSearch = {navSearch("","")}
) {
Column(
modifier = Modifier
.fillMaxSize()
.background(colorBackground)
) {
Text(
text = ""+stringResource(R.string.TitleSearch)+"",
color = Color.White,
fontSize = 24.sp,
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
textAlign = TextAlign.Center
)
Row(){
OutlinedTextField(
value = newSearch,
onValueChange = { newSearch = it },
label = { Text(newSearch) },
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text),
shape = RoundedCornerShape(16.dp) // Bords arrondis
)
Button(onClick = { navSearch("", newSearch) }) {
Text(
"Search",
color = Color.White
)
}
}
LazyColumn(modifier = Modifier.weight(1f)) {
items(quotes) { quote ->
Column(Modifier.clickable {navQuote(quote.id)}
) {
QuoteLittle(quote)
}
}
if (itemCount < QuoteStub.allQuotes.size) {
item {
LaunchedEffect(itemCount) {
itemCount += 15
}
Box(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator()
}
}
}
}
}
}
} }

@ -52,4 +52,16 @@
//Page Favori //Page Favori
<string name="TitleFavorite">Favoris</string> <string name="TitleFavorite">Favoris</string>
//NavBar
<string name="NavFavorite">Favoris</string>
<string name="NavProfile">Profile</string>
<string name="NavHome">Accueil</string>
<string name="NavQuiz">Quiz</string>
<string name="NavSearch">Recherche</string>
//Page Search
<string name="TitleSearch">Recherche</string>
</resources> </resources>

@ -50,4 +50,15 @@
//Page Favori //Page Favori
<string name="TitleFavorite">Favorites</string> <string name="TitleFavorite">Favorites</string>
//NavBar
<string name="NavFavorite">Favorite</string>
<string name="NavProfile">Profile</string>
<string name="NavHome">Home</string>
<string name="NavQuiz">Quiz</string>
<string name="NavSearch">Search</string>
//Page Search
<string name="TitleSearch">Search</string>
</resources> </resources>
Loading…
Cancel
Save