From 5574c7c3ca7e447eca1c900305bd96a94b2ce396 Mon Sep 17 00:00:00 2001 From: mekhinini <elies.mekhinini@etu.unistra.fr> Date: Thu, 16 Jan 2025 19:43:31 +0100 Subject: [PATCH 1/2] fix: css for modal --- public/ProfilBaseImage.png | Bin 0 -> 8808 bytes .../quiz/endQuizModal/endQuizModal.css | 7 +- .../quiz/endQuizModal/endQuizModal.tsx | 2 +- .../multiplayer/endQuizModal/endQuizModal.css | 74 +++++++++----- .../endQuizModal/endQuizModalMulti.tsx | 93 +++++++++++++----- .../multiplayer/quiz/PlayingQuizMulti.tsx | 35 ++++--- src/routes/profile/profile.css | 4 +- 7 files changed, 140 insertions(+), 75 deletions(-) create mode 100644 public/ProfilBaseImage.png diff --git a/public/ProfilBaseImage.png b/public/ProfilBaseImage.png new file mode 100644 index 0000000000000000000000000000000000000000..123c902c001c1d4dd715c364adb55b21d129860d GIT binary patch literal 8808 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 literal 0 HcmV?d00001 diff --git a/src/components/quiz/endQuizModal/endQuizModal.css b/src/components/quiz/endQuizModal/endQuizModal.css index b4e0b68..d4ab695 100644 --- a/src/components/quiz/endQuizModal/endQuizModal.css +++ b/src/components/quiz/endQuizModal/endQuizModal.css @@ -1,4 +1,4 @@ -.end-quiz-modal-overlay { +.modal-end-quiz-modal-overlay { position: fixed; top: 0; left: 0; @@ -11,7 +11,7 @@ z-index: 1000; } -.end-quiz-modal-content { +.modal-end-quiz-modal-overlay .end-quiz-modal-content { display: flex; flex-direction: column; justify-content: space-around; @@ -80,8 +80,9 @@ opacity: 0; transform: translateY(-50%); } + to { opacity: 1; transform: translateY(0); } -} +} \ No newline at end of file diff --git a/src/components/quiz/endQuizModal/endQuizModal.tsx b/src/components/quiz/endQuizModal/endQuizModal.tsx index 0204e89..e058c42 100644 --- a/src/components/quiz/endQuizModal/endQuizModal.tsx +++ b/src/components/quiz/endQuizModal/endQuizModal.tsx @@ -29,7 +29,7 @@ export const EndQuizModal = ({ isOpen, quizInformations, score, setIsOpen }: Pro navigate("/home"); }; return ( - <div className="end-quiz-modal-overlay"> + <div className="modal-end-quiz-modal-overlay"> <div className="end-quiz-modal-content" onClick={(e) => e.stopPropagation()}> <div> <p className="end-quiz-modal-button-title">CONGRATS !</p> diff --git a/src/routes/multiplayer/endQuizModal/endQuizModal.css b/src/routes/multiplayer/endQuizModal/endQuizModal.css index 994f3d4..86ecf60 100644 --- a/src/routes/multiplayer/endQuizModal/endQuizModal.css +++ b/src/routes/multiplayer/endQuizModal/endQuizModal.css @@ -17,13 +17,16 @@ justify-content: space-around; align-items: center; background: white; - border-radius: 8px; - width: 30%; + width: 40%; height: 65%; padding: 20px; position: relative; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); animation: slide-down 0.3s ease-out; + background-color: #ffffff; + max-width: 600px; + border-radius: 10px; + text-align: center; } .end-quiz-modal-button-container { @@ -79,6 +82,7 @@ opacity: 0; transform: translateY(-50%); } + to { opacity: 1; transform: translateY(0); @@ -99,16 +103,6 @@ z-index: 1000; } -.end-quiz-modal-content { - background-color: #ffffff; - width: 90%; - max-width: 600px; - border-radius: 10px; - padding: 20px; - text-align: center; - box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2); -} - .end-quiz-modal-button-title { font-size: 2rem; font-weight: bold; @@ -116,10 +110,6 @@ margin-bottom: 10px; } -.end-quiz-modal-button-text-container { - margin-bottom: 20px; -} - .end-quiz-modal-button-text { font-size: 1.2rem; color: #333; @@ -166,21 +156,28 @@ .end-quiz-modal-scores { display: flex; - flex-wrap: wrap; + /* flex-wrap: wrap; */ justify-content: center; - gap: 10px; - margin-bottom: 20px; + /* gap: 0.1vmin; */ + margin-bottom: 2vmin; + width: 100%; +} + +.end-quiz-modal-scores-container { + width: 100%; } .end-quiz-modal-scores .score-item { display: flex; + width: 5vw; + height: 20vh; flex-direction: column; align-items: center; font-size: 1rem; color: #333; } -.end-quiz-modal-scores .score-item .score-avatar { +/* .end-quiz-modal-scores .score-item .score-avatar { width: 50px; height: 50px; border-radius: 50%; @@ -192,7 +189,7 @@ font-size: 1.2rem; font-weight: bold; color: #007bff; -} +} */ .end-quiz-modal-stars { color: #ffd700; @@ -201,16 +198,39 @@ } .stars-image { - width: 80px; - height: auto; + height: 20vh; + aspect-ratio: 1 / 1; display: block; - margin: 0 auto 20px auto; + /* margin: 0 auto 20px auto; */ } .stars-image-reverse { - width: 80px; - height: auto; + height: 20vh; + aspect-ratio: 1 / 1; display: block; - margin: 20px auto 0 auto; + /* margin: 20px auto 0 auto; */ transform: rotate(90deg); } + +.player-list-container { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + gap: 2vmin; + margin-top: 20px; +} + +.player-list-item { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + margin: 5px 0; +} + +.avatar { + width: 90%; + aspect-ratio: 1 / 1; + border-radius: 25; +} \ No newline at end of file diff --git a/src/routes/multiplayer/endQuizModal/endQuizModalMulti.tsx b/src/routes/multiplayer/endQuizModal/endQuizModalMulti.tsx index b1d4b1b..671a428 100644 --- a/src/routes/multiplayer/endQuizModal/endQuizModalMulti.tsx +++ b/src/routes/multiplayer/endQuizModal/endQuizModalMulti.tsx @@ -2,21 +2,62 @@ import "./endQuizModal.css"; import { ModalButton } from "../../../components/quiz/modalButton/modalButton.tsx"; import { useNavigate } from "react-router-dom"; import { MultiplayerQuizInformations } from "../../../models/QuizInformations.ts"; -import {UserEndQuiz} from "../../../models/UserEndQuiz.ts"; +import { UserEndQuiz } from "../../../models/UserEndQuiz.ts"; +import { List } from "../../../components/list/list.tsx"; +import { useEffect, useState } from "react"; +import ListModel from "../../../models/ListModel.ts"; interface Props { isOpen: boolean; onClose: () => void; users: UserEndQuiz[]; + questionCount: number; + score: number; } -export const EndQuizModalMulti = ({ isOpen, onClose, users }: Props) => { +export const EndQuizModalMulti = ({ isOpen, onClose, users, questionCount, score }: Props) => { + const [liste, setListe] = useState<ListModel[]>([]); if (!isOpen) return null; const navigate = useNavigate(); const handleBackToMenu = () => { navigate("/multiplayer"); }; + + // const renderUser = ({ item, index }: { item: UserEndQuiz; index: number }) => ( + // <div className={index === 0 ? "first-place score-item" : "score-item"} key={index}> + // <img + // src={require("../../../assets/ProfilBaseImage.png")} // Replace with actual profile picture if available + // className="avatar" + // /> + // <div className="infoContainer"> + // <p className={index === 0 ? "username username-firstplace" : "username"}> + // {item.username.toUpperCase()} + // </p> + // <p className="score"> + // {10 + index}/{questionCount} {/* Adjust score logic as needed */} + // </p> + // </div> + // </div> + // ); + + useEffect(() => { + formatliste(users); + }, []); + + + const formatliste = (users: UserEndQuiz[]) => { + const temp: ListModel[] = users.map((user, index) => ({ + id: user.username, + title: user.username, + content: `${user.score}/${questionCount}`, + })); + setListe(temp); + } + + const toIgnore = (index: string) => { + } + return ( <div className="end-quiz-modal-overlay"> <div className="end-quiz-modal-content" onClick={(e) => e.stopPropagation()}> @@ -26,37 +67,37 @@ export const EndQuizModalMulti = ({ isOpen, onClose, users }: Props) => { <div className="end-quiz-modal-button-text-container"> <p className="end-quiz-modal-button-text">YOU FINISH THE TEST WITH A</p> <p className="end-quiz-modal-button-text"> - {/*SCORE OF {10}/{quizInformations.questionCount} !*/} - SCORE OF {10}/{10} ! + SCORE OF {score}/{questionCount} ! </p> </div> - <div> + <div className="end-quiz-modal-scores-container"> <div className="end-quiz-modal-scores"> <img src="../../../../public/stars.png" alt="stars picture" className="stars-image" /> - {/*{quizInformations.scores.slice(0, 3).map((score, index) => (*/} - {/* <div key={index} className="score-item">*/} - {/* <div className="score-avatar">*/} - {/* <img*/} - {/* src="https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png"*/} - {/* alt="profile picture"*/} - {/* className="player-image"*/} - {/* />*/} - {/* </div>*/} - {/* <p>{quizInformations.names[index]}</p>*/} - {/* <p>*/} - {/* {score}/{quizInformations.questionCount}*/} - {/* </p>*/} - {/* </div>*/} - {/*))}*/} + { + users.map((user, index) => ( + index <= 2 ? ( + <div key={index} className="score-item"> + <img + src="../../../../public/ProfilBaseImage.png" // Replace with actual profile picture if available + className="avatar" + /> + <p>{user.username}</p> + <p>{user.score}/{questionCount}</p> + </div> + ) : null + )) + } <img src="../../../../public/stars.png" alt="stars picture" className="stars-image-reverse" /> </div> <div className="end-quiz-modal-scores"> - {/*{quizInformations.scores.slice(3, 8).map((score, index) => (*/} - {/* <div key={index} className="score-item">*/} - {/* <p>{quizInformations.names[index + 3]}</p>*/} - {/* <p>{score}/20</p>*/} - {/* </div>*/} - {/*))}*/} + <div className="player-list-container"> + {liste.map((item) => ( + <div className="player-list-item" key={item.id.toString()}> + <div className="player-list-info">{item.title}</div> + <div className="player-list-info">{item.content}</div> + </div> + ))} + </div> </div> </div> diff --git a/src/routes/multiplayer/quiz/PlayingQuizMulti.tsx b/src/routes/multiplayer/quiz/PlayingQuizMulti.tsx index 03e53f9..be26fc9 100644 --- a/src/routes/multiplayer/quiz/PlayingQuizMulti.tsx +++ b/src/routes/multiplayer/quiz/PlayingQuizMulti.tsx @@ -1,18 +1,18 @@ import "./quiz.css"; -import {useEffect, useState} from "react"; -import {useMultiplayerService} from "../../../services/MultiplayerService.ts"; -import {QuizTopMulti} from "./quizTop/QuizTopMulti.tsx"; -import {QuizBotMulti} from "./quizBot/QuizBotMulti.tsx"; -import {EndQuizModalMulti} from "../endQuizModal/endQuizModalMulti.tsx"; -import {MultiplayerQuizInformations} from "../../../models/QuizInformations.ts"; -import {Question} from "../../../models/Question.ts"; -import {useLocation} from "react-router-dom"; -import {useQuizService} from "../../../services/QuizService.ts"; -import {useEventSourceContext} from "../../../components/EventSourceContextType.tsx"; -import {PlayingQuizState} from "../../../models/PlayingQuizState.ts"; -import {StopQuizModal} from "../../../components/quiz/stopQuizModal/stopQuizModal.tsx"; -import {UserEndQuiz} from "../../../models/UserEndQuiz.ts"; -import {shuffleAnswers} from "../../../utils/QuizHelper.ts"; +import { useEffect, useState } from "react"; +import { useMultiplayerService } from "../../../services/MultiplayerService.ts"; +import { QuizTopMulti } from "./quizTop/QuizTopMulti.tsx"; +import { QuizBotMulti } from "./quizBot/QuizBotMulti.tsx"; +import { EndQuizModalMulti } from "../endQuizModal/endQuizModalMulti.tsx"; +import { MultiplayerQuizInformations } from "../../../models/QuizInformations.ts"; +import { Question } from "../../../models/Question.ts"; +import { useLocation } from "react-router-dom"; +import { useQuizService } from "../../../services/QuizService.ts"; +import { useEventSourceContext } from "../../../components/EventSourceContextType.tsx"; +import { PlayingQuizState } from "../../../models/PlayingQuizState.ts"; +import { StopQuizModal } from "../../../components/quiz/stopQuizModal/stopQuizModal.tsx"; +import { UserEndQuiz } from "../../../models/UserEndQuiz.ts"; +import { shuffleAnswers } from "../../../utils/QuizHelper.ts"; enum QuizState { @@ -75,13 +75,16 @@ export function PlayingQuizMulti() { ) : ( <> <QuizTopMulti quizInformations={null} actualQuestion={actualQuestion} score={score} questionCount={questionCount} setStopQuizModalIsOpen={setStopQuizModalIsOpen} /> - <QuizBotMulti actualQuestion={actualQuestion} isHost={true} setPlayingQuizState={setPlayingQuizState} playingQuizState={playingQuizState} OpenModalEndQuiz={setEndQuizModalIsOpen} setScore={setScore}/> + <QuizBotMulti actualQuestion={actualQuestion} isHost={true} setPlayingQuizState={setPlayingQuizState} playingQuizState={playingQuizState} OpenModalEndQuiz={setEndQuizModalIsOpen} setScore={setScore} /> <StopQuizModal isOpen={stopQuizModalIsOpen} onClose={() => setStopQuizModalIsOpen(false)} /> - <EndQuizModalMulti + {!endQuizModalIsOpen ? null : <EndQuizModalMulti isOpen={endQuizModalIsOpen} onClose={null} users={users} + questionCount={questionCount} + score={score} /> + } </> )} {/*{playingQuizState === QuizState.ERROR && <h2>Error: {errorMessage}</h2>}*/} diff --git a/src/routes/profile/profile.css b/src/routes/profile/profile.css index 585c04b..d6230a2 100644 --- a/src/routes/profile/profile.css +++ b/src/routes/profile/profile.css @@ -170,7 +170,7 @@ input { font-weight: semi-bold; } -img { +.profile_info img { width: 10vw; height: 10vw; border-radius: 50%; @@ -250,4 +250,4 @@ img { .stat-value { font-size: 0.8rem; } -} +} \ No newline at end of file -- GitLab From fdaa42a504766c6e600631412f44cd48c89bab2f Mon Sep 17 00:00:00 2001 From: mekhinini <elies.mekhinini@etu.unistra.fr> Date: Thu, 16 Jan 2025 19:48:14 +0100 Subject: [PATCH 2/2] feat: show multiplayer again --- src/routes/root.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/root.tsx b/src/routes/root.tsx index 6f38777..6caf88f 100644 --- a/src/routes/root.tsx +++ b/src/routes/root.tsx @@ -16,12 +16,12 @@ export default function Root() { > COMMUNITY </NavLink> - {/*<NavLink + <NavLink to="/multiplayer" className={location.pathname === "/multiplayer" ? "selected" : "buttonHeader"} > MULTIPLAYER - </NavLink>*/} + </NavLink> <NavLink to="/profile" className={location.pathname === "/profile" ? "selected" : "buttonHeader"}> PROFILE </NavLink> -- GitLab