diff --git a/components/PlayingQuiz/EndQuiz/EndQuizListPlayer.tsx b/components/PlayingQuiz/EndQuiz/EndQuizListPlayer.tsx index a2378cb446f3f22237a3fb64c61e8618cb88b1b9..819fabeaea65c23577a6e39aa4a746c224d2bb45 100644 --- a/components/PlayingQuiz/EndQuiz/EndQuizListPlayer.tsx +++ b/components/PlayingQuiz/EndQuiz/EndQuizListPlayer.tsx @@ -1,14 +1,14 @@ import React from "react"; import { FlatList, View, Text, StyleSheet, Image } from "react-native"; -import UserModel from "../../../models/UserModel"; +import {User} from "../../../models/User"; interface Props { - users: UserModel[]; + users: User[]; maxScore: number; } export default function EndQuizListPlayer({ users, maxScore }: Props) { - const renderUser = ({ item, index }: { item: UserModel; index: number }) => ( + const renderUser = ({ item, index }: { item: User; index: number }) => ( <View style={[styles.userContainer, index === 0 && styles.firstPlace]}> <Image source={require("../../../assets/ProfilBaseImage.png")} // Replace with actual profile picture if available diff --git a/components/PlayingQuiz/EndQuiz/UserScore.tsx b/components/PlayingQuiz/EndQuiz/UserScore.tsx index d57489ca4e833af884ab88b7610f6b1ff2d7a3ca..65836228e260ddff5bbf4f40f77a89320e37072b 100644 --- a/components/PlayingQuiz/EndQuiz/UserScore.tsx +++ b/components/PlayingQuiz/EndQuiz/UserScore.tsx @@ -1,8 +1,8 @@ -import UserModel from "../../../models/UserModel"; import { View, Text, StyleSheet, Image } from "react-native"; +import {User} from "../../../models/User"; interface Props { - user: UserModel; + user: User; score: number; maxScore: number; isFirst: boolean; diff --git a/components/lists/QuizList.tsx b/components/lists/QuizList.tsx index 6cb9f80b24078d0c74e8dc6a9d31b2aea350ee3a..535915fa1ca573cbc1d8c0b01d6aecf9b44f3f87 100644 --- a/components/lists/QuizList.tsx +++ b/components/lists/QuizList.tsx @@ -61,7 +61,7 @@ export default function QuizList({ quizList, isLoadingData, nextPage, onQuizPres <FlatList data={quizList} renderItem={renderQuizItem} - keyExtractor={(item) => item.id} + keyExtractor={(item,index) => item.id+ ""+ index} showsVerticalScrollIndicator={true} contentContainerStyle={styles.listContent} onEndReached={() => { diff --git a/models/Quiz.ts b/models/Quiz.ts index 1acc2ceb229e52e5aaffb9fe2fd50431a3eab355..c717243639039f48eba212f465762911876f85e1 100644 --- a/models/Quiz.ts +++ b/models/Quiz.ts @@ -1,5 +1,8 @@ import {Question} from "./Question"; - +export interface QuizCommunityResponse { + quizzes: Quiz[]; + total: number; +} export interface Difficulty { id: number; name: string; diff --git a/screens/Home/Home.tsx b/screens/Home/Home.tsx index 1369070d1e5c849fb7e13757b625c59773b17d18..4fb5203e02fd3bcdafbdc58aa594baf9e8f1f824 100644 --- a/screens/Home/Home.tsx +++ b/screens/Home/Home.tsx @@ -10,28 +10,7 @@ interface Props { } export default function Home({navigation}: Props) { - const debugQuiz: Quiz = { - id: "debug-quiz-001", - name: "Debug Quiz", - description: "This is a basic quiz for debugging purposes.", - score: 0, - questionIndex: 0, - questionCount: 0, - categoryId: 1, - difficultyId: 1, - authorId: 1, - category: { - id: 1, - name: "General Knowledge", - }, - difficulty: { - id: 1, - name: "Easy", - }, - questions: [], // Tableau de questions vide - }; - navigation.navigate("EndQuizMulti", {quiz: debugQuiz}); return ( <View style={styles.containerGlobal}> <TemplateMenu navigation={navigation} headerNavigation={false} buttonGoBack={false}> diff --git a/screens/PlayingQuiz/EndQuizMulti/EndQuizMultiChild.tsx b/screens/PlayingQuiz/EndQuizMulti/EndQuizMultiChild.tsx index 3ba9918c7243b1430d078be01e61f408597d5504..b53eb9f21dcc69cbbfb1e87017ab6ae8b80b1152 100644 --- a/screens/PlayingQuiz/EndQuizMulti/EndQuizMultiChild.tsx +++ b/screens/PlayingQuiz/EndQuizMulti/EndQuizMultiChild.tsx @@ -5,7 +5,6 @@ import {Quiz} from "../../../models/Quiz"; import {useQuizService} from "../../../services/QuizService"; import HttpError from "../../../services/HttpError"; import UserScore from "../../../components/PlayingQuiz/EndQuiz/UserScore"; -import UserModel from "../../../models/UserModel"; import EndQuizListPlayer from "../../../components/PlayingQuiz/EndQuiz/EndQuizListPlayer"; @@ -17,38 +16,11 @@ interface Props { export default function EndQuizMultiChild({ navigation, quiz }: Props) { - const {restartQuiz, remainingQuiz} = useQuizService() - - const handleRestartPress = async () => { - const isRestarted = await restartQuiz(quiz.id); - if(HttpError.isHttpError(isRestarted)){ - console.log(isRestarted.message); - return - } - if(!isRestarted) { - return; - } - const quizRestarted = await remainingQuiz(quiz.id); - if(HttpError.isHttpError(quizRestarted)){ - console.log(quizRestarted.message); - return - } - - navigation.reset({ - index: 0, - routes: [ - { - name: "PlayingQuiz", - params: {quizRecovered: quizRestarted}, - }, - ] - }); - }; + const userTest = {id: 1, email: "user1@email.com", username: "user1", stats: undefined}; const handleBackToMenu = () => { navigation.navigate('TabNavigator'); }; - const user = new UserModel(10,"Thomassss", "Thomas"); return ( <View style={styles.container}> @@ -61,13 +33,13 @@ export default function EndQuizMultiChild({ navigation, quiz }: Props) { style={styles.stars} /> <View style={styles.usersContainer}> - <UserScore user={user} score={10} maxScore={quiz.questionCount} isFirst={false}/> - <UserScore user={user} score={10} maxScore={quiz.questionCount} isFirst={true}/> - <UserScore user={user} score={10} maxScore={quiz.questionCount} isFirst={false}/> + <UserScore user={userTest} score={10} maxScore={quiz.questionCount} isFirst={false}/> + <UserScore user={userTest} score={10} maxScore={quiz.questionCount} isFirst={true}/> + <UserScore user={userTest} score={10} maxScore={quiz.questionCount} isFirst={false}/> </View> - <EndQuizListPlayer users={[new UserModel(1, "user1", "user1@email.com"), new UserModel(2, "user2", "user2@email.com")]} maxScore={quiz.questionCount}/> + <EndQuizListPlayer users={[userTest, userTest]} maxScore={quiz.questionCount}/> - <DefaultButton text="RESTART" handleButtonPressed={handleRestartPress} buttonStyle={styles.whiteButton} buttonText={styles.whiteButtonText}></DefaultButton> + {/*<DefaultButton text="RESTART" handleButtonPressed={handleRestartPress} buttonStyle={styles.whiteButton} buttonText={styles.whiteButtonText}></DefaultButton>*/} <DefaultButton text="BACK TO MENU" handleButtonPressed={handleBackToMenu} buttonStyle={styles.blueButton} buttonText={styles.blueButtonText}></DefaultButton> </View> </View> diff --git a/services/QuizService.ts b/services/QuizService.ts index 19cb0e98d8143abd1ca79e6e75ac618076e77093..8dbbc262f727450ad4af595b0df6275f7d31a0e0 100644 --- a/services/QuizService.ts +++ b/services/QuizService.ts @@ -1,5 +1,5 @@ import HttpError from "./HttpError"; -import {Quiz} from "../models/Quiz"; +import {Quiz, QuizCommunityResponse} from "../models/Quiz"; import axios from "axios"; import {Answer} from "../models/Answer"; import {Question} from "../models/Question"; @@ -214,11 +214,11 @@ export const useQuizService = () => { const getCommunityQuiz = async (skip: number, take: number) => { try { - const response = await axios.get<Quiz[]>(`${url}/quiz/paginated?skip=${skip}&take=${take}`, { + const response = await axios.get<QuizCommunityResponse>(`${url}/quiz/paginated?skip=${skip}&take=${take}`, { withCredentials: true, // Inclut les cookies pour une session authentifiée }); - return response.data; + return response.data.quizzes; } catch (error: any) { if (error.response) {