From 472d94ebe169c2a7381ea5acc32e741ca1120d17 Mon Sep 17 00:00:00 2001 From: Baptiste Marcel Date: Thu, 7 Dec 2023 16:53:56 +0100 Subject: [PATCH] =?UTF-8?q?Modif=20bouton=20pour=20jouer=20+=20Carousel=20?= =?UTF-8?q?pour=20les=20stats=20sur=20les=20diff=C3=A9rentes=20parties=20(?= =?UTF-8?q?Nous,=20Daily,=20Weekly)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cryptide_project/package-lock.json | 147 +++++ cryptide_project/package.json | 6 + .../api/controllers/SessionController.js | 2 - cryptide_project/src/Components/NavBar.tsx | 65 +-- .../src/Components/ScoreBoard.css | 15 + .../src/Components/ScoreBoard.tsx | 503 ++++++++++-------- cryptide_project/src/Pages/LoginForm.tsx | 8 +- cryptide_project/src/Pages/NewPlay.tsx | 34 +- cryptide_project/src/Pages/Play.css | 97 ++-- cryptide_project/src/Pages/Profile.css | 1 - cryptide_project/src/Pages/Profile.tsx | 32 +- cryptide_project/src/Pages/SignUpForm.tsx | 1 - cryptide_project/yarn.lock | 112 +++- 13 files changed, 655 insertions(+), 368 deletions(-) create mode 100644 cryptide_project/src/Components/ScoreBoard.css diff --git a/cryptide_project/package-lock.json b/cryptide_project/package-lock.json index f52d070..208c662 100644 --- a/cryptide_project/package-lock.json +++ b/cryptide_project/package-lock.json @@ -26,8 +26,11 @@ "jspdf": "^2.5.1", "jszip": "^3.10.1", "lodash": "^4.17.21", + "nuka-carousel": "^7.0.0", + "pure-react-carousel": "^1.30.1", "react": "^18.2.0", "react-bootstrap": "^2.9.1", + "react-carousel": "^4.3.0", "react-country-flag": "^3.1.0", "react-dom": "^18.2.0", "react-icons": "^4.11.0", @@ -35,7 +38,9 @@ "react-router-dom": "^6.18.0", "react-router-hash-link": "^2.4.3", "react-scripts": "5.0.1", + "react-slick": "^0.29.0", "react-switch": "^7.0.0", + "slick-carousel": "^1.8.1", "socket.io": "^4.7.2", "socket.io-client": "^4.7.2", "sqlite3": "^5.1.6", @@ -46,6 +51,7 @@ "devDependencies": { "@types/file-saver": "^2.0.7", "@types/react-router-hash-link": "^2.4.9", + "@types/react-slick": "^0.23.12", "@types/uuid": "^9.0.7", "babel-jest": "^29.7.0", "depcheck": "^1.4.7" @@ -4655,6 +4661,15 @@ "@types/react-router-dom": "^5.3.0" } }, + "node_modules/@types/react-slick": { + "version": "0.23.12", + "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.12.tgz", + "integrity": "sha512-WjY/wIjzgXCh6gXRZL75OC9n/Hn4MwKWI7ZJ4iA2OxavN9eKvkV5MPFjSgH5sofabq78Ucrl6u3okiBUNNIrDQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-transition-group": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz", @@ -7521,6 +7536,11 @@ "node": ">=10" } }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7575,6 +7595,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/deep-freeze": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", + "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==" + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -8147,6 +8172,11 @@ "node": ">=10.13.0" } }, + "node_modules/enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -8164,6 +8194,14 @@ "node": ">=6" } }, + "node_modules/equals": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/equals/-/equals-1.0.5.tgz", + "integrity": "sha512-wI15a6ZoaaXPv+55+Vh2Kqn3+efKRv8QPtcGTjW5xmanMnQzESdAt566jevtMZyt3W/jwLDTzXpMph5ECDJ2zg==", + "dependencies": { + "jkroso-type": "1" + } + }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", @@ -12971,6 +13009,17 @@ "jiti": "bin/jiti.js" } }, + "node_modules/jkroso-type": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jkroso-type/-/jkroso-type-1.1.1.tgz", + "integrity": "sha512-zZgay+fPG6PgMUrpyFADmQmvLo39+AZa7Gc5pZhev2RhDxwANEq2etwD8d0e6rTg5NkwOIlQmaEmns3draC6Ng==" + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "peer": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -13069,6 +13118,14 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -14203,6 +14260,18 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nuka-carousel": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/nuka-carousel/-/nuka-carousel-7.0.0.tgz", + "integrity": "sha512-KE0WV1MuE4Gq6ynL8P3qJH2rGq/DkJ0ej+ezo0IuZp4oklV8WNqu6P6O1utJqihHLGoEuFppq5wlHSHfhdCHXA==", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", @@ -16135,6 +16204,30 @@ "node": ">=6" } }, + "node_modules/pure-react-carousel": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/pure-react-carousel/-/pure-react-carousel-1.30.1.tgz", + "integrity": "sha512-B1qi62hZk0OFqRR4cTjtgIeOn/Ls5wo+HsLtrXT4jVf5et8ldBHSt+6LsYRJN86Or8dm+XbnJNEHy6WDJ0/DQw==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "deep-freeze": "0.0.1", + "deepmerge": "^2.2.1", + "equals": "^1.0.5", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "15.x || 16.x || 17.x || 18.x", + "react-dom": "15.x || 16.x || 17.x || 18.x" + } + }, + "node_modules/pure-react-carousel/node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -16206,6 +16299,14 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/range": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/range/-/range-0.0.3.tgz", + "integrity": "sha512-OxK2nY2bmeEB4NxoBraQIBOOeOIxoBvm6yt8MA1kLappgkG3SyLf173iOtT5woWycrtESDD2g0Nl2yt8YPoUnw==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -16308,6 +16409,18 @@ } } }, + "node_modules/react-carousel": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/react-carousel/-/react-carousel-4.3.0.tgz", + "integrity": "sha512-t8MfCK877KuOaQFAsO6NwzkWdhcJG8hxSN5zYR7/cSfTNI6DnM/HswvgvdfajtiETuoLZRMXXLZv6QRLGETKjw==", + "dependencies": { + "debounce": "^1.1.0", + "range": "0.0.3" + }, + "engines": { + "node": ">4" + } + }, "node_modules/react-country-flag": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/react-country-flag/-/react-country-flag-3.1.0.tgz", @@ -16617,6 +16730,22 @@ "@babel/core": "^7.0.0" } }, + "node_modules/react-slick": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.29.0.tgz", + "integrity": "sha512-TGdOKE+ZkJHHeC4aaoH85m8RnFyWqdqRfAGkhd6dirmATXMZWAxOpTLmw2Ll/jPTQ3eEG7ercFr/sbzdeYCJXA==", + "dependencies": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-switch": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/react-switch/-/react-switch-7.0.0.tgz", @@ -16850,6 +16979,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -17544,6 +17678,14 @@ "node": ">=8" } }, + "node_modules/slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "peerDependencies": { + "jquery": ">=1.8.0" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -17984,6 +18126,11 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", diff --git a/cryptide_project/package.json b/cryptide_project/package.json index 3e51147..b746181 100644 --- a/cryptide_project/package.json +++ b/cryptide_project/package.json @@ -21,8 +21,11 @@ "jspdf": "^2.5.1", "jszip": "^3.10.1", "lodash": "^4.17.21", + "nuka-carousel": "^7.0.0", + "pure-react-carousel": "^1.30.1", "react": "^18.2.0", "react-bootstrap": "^2.9.1", + "react-carousel": "^4.3.0", "react-country-flag": "^3.1.0", "react-dom": "^18.2.0", "react-icons": "^4.11.0", @@ -30,7 +33,9 @@ "react-router-dom": "^6.18.0", "react-router-hash-link": "^2.4.3", "react-scripts": "5.0.1", + "react-slick": "^0.29.0", "react-switch": "^7.0.0", + "slick-carousel": "^1.8.1", "socket.io": "^4.7.2", "socket.io-client": "^4.7.2", "sqlite3": "^5.1.6", @@ -65,6 +70,7 @@ "devDependencies": { "@types/file-saver": "^2.0.7", "@types/react-router-hash-link": "^2.4.9", + "@types/react-slick": "^0.23.12", "@types/uuid": "^9.0.7", "babel-jest": "^29.7.0", "depcheck": "^1.4.7" diff --git a/cryptide_project/server/api/controllers/SessionController.js b/cryptide_project/server/api/controllers/SessionController.js index dc23ea0..1fc1fc4 100644 --- a/cryptide_project/server/api/controllers/SessionController.js +++ b/cryptide_project/server/api/controllers/SessionController.js @@ -88,8 +88,6 @@ class SessionController { nbWins: nbWinsOL, ratio: ratioOL}; - - console.log("[" + hour + ":" + minutes + "] " + req.session.user.pseudo + " have a session."); res.status(200).json({ user: req.session.user }); } catch(error){ diff --git a/cryptide_project/src/Components/NavBar.tsx b/cryptide_project/src/Components/NavBar.tsx index 5b0753f..7f8f95c 100644 --- a/cryptide_project/src/Components/NavBar.tsx +++ b/cryptide_project/src/Components/NavBar.tsx @@ -28,17 +28,19 @@ import { useNavigate } from 'react-router-dom'; // @ts-ignore function AppNavbar({changeLocale}) { const theme = useTheme(); - const {user, isLoggedIn, logout} = useAuth(); - const navigate = useNavigate(); + const {user, isLoggedIn, logout} = useAuth(); + function navigateToHome(){ + navigate("/") + } function navigateToProfile(){ navigate("/profile") } - function navigateToHome(){ - navigate("/") + function navigateToLogin(){ + navigate("/login") } return ( @@ -62,40 +64,27 @@ function AppNavbar({changeLocale}) {
diff --git a/cryptide_project/src/Components/ScoreBoard.css b/cryptide_project/src/Components/ScoreBoard.css new file mode 100644 index 0000000..2272e63 --- /dev/null +++ b/cryptide_project/src/Components/ScoreBoard.css @@ -0,0 +1,15 @@ +/* Ajoutez ces styles dans votre fichier CSS ou utilisez un préprocesseur comme SCSS */ +.tabsStats { + padding: 20px; + } + + .stats { + background-color: #f0f0f0; + padding: 20px; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + text-align: center; + } + + /* Personnalisez davantage selon vos préférences */ + \ No newline at end of file diff --git a/cryptide_project/src/Components/ScoreBoard.tsx b/cryptide_project/src/Components/ScoreBoard.tsx index 7d3e617..418b40f 100644 --- a/cryptide_project/src/Components/ScoreBoard.tsx +++ b/cryptide_project/src/Components/ScoreBoard.tsx @@ -1,13 +1,13 @@ -import React, {useEffect, useState} from 'react'; +import React, {useState, useEffect} from 'react'; +import Carousel from 'nuka-carousel'; /* Style */ import '../Pages/Play.css'; import '../Style/Global.css' +import './ScoreBoard.css'; import { useTheme } from '../Style/ThemeContext'; /* Ressources */ -import Person from '../res/img/Person.png' -import leave from '../res/img/bot.png' import trophy from '../res/icon/trophy.png' import share from '../res/icon/share.png'; @@ -19,16 +19,21 @@ import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; /* Component */ -import ButtonImgNav from './ButtonImgNav'; import User from '../model/User'; /* Services */ import ScoreboardService from '../services/ScoreboardService'; +import { BiLineChart, BiLineChartDown } from 'react-icons/bi'; +import { CarouselCaption } from 'react-bootstrap'; +import { BsLine } from 'react-icons/bs'; //@ts-ignore const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => { const theme=useTheme(); + const [carouselKey, setCarouselKey] = useState(0); + const [activeTab, setActiveTab] = useState("perso"); + // DAILY STATS const [dailyMastermindStats, setDailyMastermindStats] = useState(null); const [dailyEasyEnigmaStats, setDailyEasyEnigmaStats] = useState(null); @@ -82,228 +87,274 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => { }, []); return ( - //
-
- - - - Stats en MasterMind : - - Partie Jouées : - {Player !== null ? Player.mastermindStats.nbGames : "0"} - - - Best-Score : - {Player !== null ? Player.mastermindStats.bestScore : "0"} - - - Moyenne d'essai : - {Player !== null ? Player.mastermindStats.avgNbTry : "0"} - -
- Stats en Enigme facile : - - Partie jouée : - {Player !== null ? Player.easyEnigmaStats.nbGames : "0"} - - - Nombre de victoire : - {Player !== null ? Player.easyEnigmaStats.nbWins : "0"} - - - Ratio V/D : - {Player !== null ? Player.easyEnigmaStats.ratio.toFixed(2) + "%" : "00.0%"} - - - Meilleur temps : - {Player !== null ? Player.easyEnigmaStats.bestTime : "0"} - - - Moyenne de temps : - {Player !== null ? Player.easyEnigmaStats.avgTime.toFixed(2) : "0"} - -
- Stats en Enigme moyenne : - - Partie jouée : - {Player !== null ? Player.mediumEnigmaStats.nbGames : "0"} - - - Best-Score : - {Player !== null ? Player.mediumEnigmaStats.bestScore : "0"} - - - Moyenne d'essai : - {Player !== null ? Player.mediumEnigmaStats.avgNbTry.toFixed(2) : "0"} - -
- Stats en Enigme difficile : - - Partie jouée : - {Player !== null ? Player.hardEnigmaStats.nbGames : "0"} - - - Nombre de victoire : - {Player !== null ? Player.hardEnigmaStats.nbWins : "0"} - - - Ratio V/D : - {Player !== null ? Player.hardEnigmaStats.ratio.toFixed(2) + "%" : "00.0%"} - - - Meilleur temps : - {Player !== null ? Player.hardEnigmaStats.bestTime : "0"} - - - Moyenne de temps : - {Player !== null ? Player.hardEnigmaStats.avgTime.toFixed(2) : "0"} - -
- Stats en ligne : - - Partie jouée : - {Player !== null ? Player.onlineStats.nbGames : "0"} - - - Nombre de victoire : - {Player !== null ? Player.onlineStats.nbWins : "0"} - - - Ratio V/D : - {Player !== null ? Player.onlineStats.ratio.toFixed(2) + "%" : "0"} - -
-
- - Person2 - - MasterMind : - {dailyMastermindStats !== null ? (dailyMastermindStats.tab.length !== 0 ? dailyMastermindStats.tab.map((stats: any, index: number) => ( - - {index+1}.{stats.pseudo} - {stats.score} - - )) : ( - - No data - - )) : ( - - No data - - )} - -
- - Multijoueur : - {dailyOnlineStats !== null ? (dailyOnlineStats.tab.length !== 0 ? dailyOnlineStats.tab.map((stats: any, index: number) => ( - - {index+1}.{stats.pseudo} - {stats.wins} - - )) : ( - - No data - - )) : ( - - No data - - )} - -
- - Enigme facile : - {dailyEasyEnigmaStats !== null ? (dailyEasyEnigmaStats.tab.length !== 0 ? dailyEasyEnigmaStats.tab.map((stats: any, index: number) => ( - - {index+1}.{stats.pseudo} - {stats.time} - - )) : ( - - No data - - )) : ( - - No data - - )} - -
- -
-
- - Person2 - - MasterMind : - {weeklyMastermindStats !== null ? (weeklyMastermindStats.tab.length !== 0 ? weeklyMastermindStats.tab.map((stats: any, index: number) => ( - - {index+1}.{stats.pseudo} - {stats.score} - - )) : ( - - No data - - )) : ( - - No data - - )} -
- Multijoueur : - {weeklyOnlineStats !== null ? (weeklyOnlineStats.tab.length !== 0 ? weeklyOnlineStats.tab.map((stats: any, index: number) => ( - - {index+1}.{stats.pseudo} - {stats.wins} - - )) : ( - - No data - - )) : ( - - No data - - )} - -
- - Enigme facile : - {weeklyEasyEnigmaStats !== null ? (weeklyEasyEnigmaStats.tab.length !== 0 ? weeklyEasyEnigmaStats.tab.map((stats: any, index: number) => ( - - {index+1}.{stats.pseudo} - {stats.time} - - )) : ( - - No data - - )) : ( - - No data - - )} - -
-
-
-
- - -
- //
+ { + setActiveTab(key); + // Forcer une mise à jour du carousel + setCarouselKey((prevKey) => prevKey + 1); + }} + id="ScoreBoard" + className="tabsStats justify-content-around" + > + + + +
+
Mastermind
+
+

Parties Jouées: {Player.mastermindStats.nbGames}

+

Best-Score: {Player.mastermindStats.bestScore}

+

Moyenne d'essai: {Player.mastermindStats.avgNbTry}

+
+
+
Enigme facile
+
+

Parties Jouées: {Player.easyEnigmaStats.nbGames}

+

Nombre de victoires: {Player.easyEnigmaStats.nbWins}

+

Ratio V/D: {Player.easyEnigmaStats.ratio}

+

Meilleur temps: {Player.easyEnigmaStats.bestTime}

+

Moyenne de temps: {Player.easyEnigmaStats.avgTime}

+
+
+
Enigme moyenne
+
+

Parties Jouées: {Player.mediumEnigmaStats.nbGames}

+

Best-Score: {Player.mediumEnigmaStats.bestScore}

+

Moyenne d'essai: {Player.mediumEnigmaStats.avgNbTry}

+
+
+
Enigme difficile
+
+

Parties Jouées: {Player.hardEnigmaStats.nbGames}

+

Nombre de victoires: {Player.hardEnigmaStats.nbWins}

+

Ratio V/D: {Player.hardEnigmaStats.ratio}

+

Meilleur temps: {Player.hardEnigmaStats.bestTime}

+

Moyenne de temps: {Player.hardEnigmaStats.avgTime}

+
+
+
En ligne
+
+

Parties Jouées: {Player.onlineStats.nbGames}

+

Nombre de victoires: {Player.onlineStats.nbWins}

+

Ratio V/D: {Player.onlineStats.ratio}

+
+
+
+
+ + + +
+
Mastermind
+
+ {dailyMastermindStats !== null ? (dailyMastermindStats.tab.length !== 0 ? dailyMastermindStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.score}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
Enigme facile
+
+ {dailyEasyEnigmaStats !== null ? (dailyEasyEnigmaStats.tab.length !== 0 ? dailyEasyEnigmaStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.time}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
Enigme moyenne
+
+ {dailyMediumEnigmaStats !== null ? (dailyMediumEnigmaStats.tab.length !== 0 ? dailyMediumEnigmaStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.time}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
Enigme difficile
+
+ {dailyHardEnigmaStats !== null ? (dailyHardEnigmaStats.tab.length !== 0 ? dailyHardEnigmaStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.time}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
En ligne
+
+ {dailyOnlineStats !== null ? (dailyOnlineStats.tab.length !== 0 ? dailyOnlineStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.wins}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
+
+ + + +
+
Mastermind
+
+ {weeklyMastermindStats !== null ? (weeklyMastermindStats.tab.length !== 0 ? weeklyMastermindStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.score}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
Enigme facile
+
+ {weeklyEasyEnigmaStats !== null ? (weeklyEasyEnigmaStats.tab.length !== 0 ? weeklyEasyEnigmaStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.time}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
Enigme moyenne
+
+ {weeklyMediumEnigmaStats !== null ? (weeklyMediumEnigmaStats.tab.length !== 0 ? weeklyMediumEnigmaStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.time}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
Enigme difficile
+
+ {weeklyHardEnigmaStats !== null ? (weeklyHardEnigmaStats.tab.length !== 0 ? weeklyHardEnigmaStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.time}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
En ligne
+
+ {weeklyOnlineStats !== null ? (weeklyOnlineStats.tab.length !== 0 ? weeklyOnlineStats.tab.map((stats: any, index: number) => ( + <> + + +

{index+1}.{stats.pseudo}

+ + +

{stats.wins}

+ +
+ + )) : ( +

Nothing for the moment

+ )) : ( +

Nothing for the moment

+ )} +
+
+
+
+
); } diff --git a/cryptide_project/src/Pages/LoginForm.tsx b/cryptide_project/src/Pages/LoginForm.tsx index 0f650a3..adcd097 100644 --- a/cryptide_project/src/Pages/LoginForm.tsx +++ b/cryptide_project/src/Pages/LoginForm.tsx @@ -4,14 +4,14 @@ import { useNavigate } from 'react-router-dom'; import { useAuth } from '../Contexts/AuthContext'; import AuthService from '../services/AuthService'; import '../Style/Global.css'; +import { Link } from 'react-router-dom'; const SignIn = () => { const navigate = useNavigate(); - const { login } = useAuth(); - const [error, setError] = useState(null); + const {login} = useAuth(); const [showConfirmation, setShowConfirmation] = useState(false); - + const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); @@ -78,7 +78,7 @@ const SignIn = () => {

- Mot de passe oublié ? + Pas encore inscrit ?

diff --git a/cryptide_project/src/Pages/NewPlay.tsx b/cryptide_project/src/Pages/NewPlay.tsx index 6af04e3..98f0743 100644 --- a/cryptide_project/src/Pages/NewPlay.tsx +++ b/cryptide_project/src/Pages/NewPlay.tsx @@ -189,20 +189,15 @@ function NewPlay() { // const returnVisibility: Visibility = goBackRoom !== -1 ? "visible" : "hidden"; - const returnVisibility: any= goBackRoom !== -1 ? "visible" : "hidden" ; - + const returnVisibility = goBackRoom !== -1 ? "block" : "none" ; return (
-
- - {/* Menu de boutons */} - +
+ {/* Boutons pour jouer */}
- - {({ placement, arrowProps, show: _show, popper, ...props }) => ( @@ -224,31 +219,18 @@ function NewPlay() { - - {/* {goBackRoom != -1 && } */} - - +
{/* Lobbies */}
- -
-
-
-

- {user && user.pseudo} -

- Person -
- {user && ()}
+ +
+ {user && } +
); } diff --git a/cryptide_project/src/Pages/Play.css b/cryptide_project/src/Pages/Play.css index f0a843e..f650357 100644 --- a/cryptide_project/src/Pages/Play.css +++ b/cryptide_project/src/Pages/Play.css @@ -1,17 +1,16 @@ - -.MainContainer{ - flex: 1 1 0; +.MainContainer { display: flex; flex-direction: row; - justify-content:space-around + justify-content: center; + align-items: center; + height: 100%; } -.MidContainer{ +.MidContainer { display: flex; - /* justify-content:center; */ - align-items:center; + justify-content: center; + align-items: center; flex-direction: column; - margin-top: 15px; width: 30%; } @@ -21,20 +20,24 @@ justify-content: center; } -.leftContainer{ - width: 30%; +.leftContainer { + height: 100%; + margin: 20px 30px; + width: 70%; } -.rightContainer{ +.rightContainer { + height: 100%; + margin: 20px 30px; width: 30%; } -.NewleftContainer{ +.NewleftContainer { margin: 20px 30px; width: 70%; } -.NewrightContainer{ +.NewrightContainer { display: flex; flex-direction: column; justify-content: center; @@ -42,81 +45,55 @@ width: 30%; } -/* .textBoard div{ - display: flex; - flex-direction:column-reverse; - justify-content:space-between -} */ - -/* .textBoard div:nth-child(2){ +.buttonGroupVertical { display: flex; - justify-content: end; -} */ - -/**Button**/ -.buttonGroupVertical{ - display: flex; - justify-content:center; - align-items:center; + justify-content: center; + align-items: center; flex-direction: column; } -.NewbuttonGroupVertical{ +.NewbuttonGroupVertical { display: flex; - justify-content:space-around; - align-items:start; + flex-direction: row; + justify-content: space-evenly; } - -.ButtonNav{ +.ButtonNav { margin: 15px 10px; - width:200px; + width: 200px; height: 8vh; - - /* background-color: #85C9C2; - color: #2A4541; */ color: white; - - border: solid; + border: 2px solid #0056b3; border-radius: 15px; - border-width: 2px; - - font-size:larger; + font-size: larger; } - -.ButtonNavRejoin{ +.ButtonNavRejoin { margin: 15px 10px; - width:200px; + width: 200px; height: 8vh; - color: white; background-color: aquamarine; - - border: solid 2px rgb(40, 225, 163); + border: 2px solid #0056b3; border-radius: 15px; - - font-size:larger; + font-size: larger; } -.returnDiv{ + +.returnDiv { display: flex; flex-direction: column; justify-content: center; align-items: center; - - margin:40px 15px; - - border: solid 2px whitesmoke; + margin: 40px 15px; + border: 2px solid whitesmoke; border-radius: 15px; - background-color: white; } .returnDiv p { margin: 15px; padding: 10px; - border: solid 1px whitesmoke; + border: 1px solid whitesmoke; border-radius: 10px; - - font-weight:500; -} \ No newline at end of file + font-weight: 500; +} diff --git a/cryptide_project/src/Pages/Profile.css b/cryptide_project/src/Pages/Profile.css index 3f183ed..2959742 100644 --- a/cryptide_project/src/Pages/Profile.css +++ b/cryptide_project/src/Pages/Profile.css @@ -1,6 +1,5 @@ .mainContainer{ display: flex; - /* flex-direction: column; */ justify-content: center; align-items: center; margin: 50px; diff --git a/cryptide_project/src/Pages/Profile.tsx b/cryptide_project/src/Pages/Profile.tsx index 5b0a634..f01640c 100644 --- a/cryptide_project/src/Pages/Profile.tsx +++ b/cryptide_project/src/Pages/Profile.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import ProfilePDP from '../Components/ProfilePDP'; import SessionService from '../services/SessionService'; @@ -27,15 +27,30 @@ import ProgressBar from 'react-bootstrap/ProgressBar'; //@ts-ignore const Profile = () => { - const navigate = useNavigate(); - //let player; - const {user, logout} = useAuth() - const [editingUsername, setEditingUsername] = useState(false); + const {isLoggedIn, login, logout, user, setUserData, manager } = useAuth(); const [newUsername, setNewUsername] = useState(user?.pseudo); - //@ts-ignore + useEffect(() => { + if (user == null){ + manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{ + if (user!=null){ + if (loggedIn){ + login() + setUserData(user) + } + } + }) + } + }, [isLoggedIn]); + + const handleLogout = () => { + logout(); + navigate('/'); + }; + + // @ts-ignore const onUsernameChange = (newUsername) => { if(user?.pseudo != null){ SessionService.UpdatePseudo(user.pseudo, newUsername) @@ -349,7 +364,10 @@ const Profile = () => {
- + + {/* Bouton de déconnexion */} +
+
diff --git a/cryptide_project/src/Pages/SignUpForm.tsx b/cryptide_project/src/Pages/SignUpForm.tsx index e7b6025..862197b 100644 --- a/cryptide_project/src/Pages/SignUpForm.tsx +++ b/cryptide_project/src/Pages/SignUpForm.tsx @@ -6,7 +6,6 @@ import '../Style/Global.css'; const SignUp = () => { const navigate = useNavigate(); - const [error, setError] = useState(null); const [showConfirmation, setShowConfirmation] = useState(false); diff --git a/cryptide_project/yarn.lock b/cryptide_project/yarn.lock index e14f7e0..2e5620d 100644 --- a/cryptide_project/yarn.lock +++ b/cryptide_project/yarn.lock @@ -2470,6 +2470,13 @@ "@types/history" "^4.7.11" "@types/react" "*" +"@types/react-slick@^0.23.12": + version "0.23.12" + resolved "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.12.tgz" + integrity sha512-WjY/wIjzgXCh6gXRZL75OC9n/Hn4MwKWI7ZJ4iA2OxavN9eKvkV5MPFjSgH5sofabq78Ucrl6u3okiBUNNIrDQ== + dependencies: + "@types/react" "*" + "@types/react-transition-group@^4.4.6": version "4.4.8" resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz" @@ -3858,7 +3865,7 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -classnames@^2.3.2: +classnames@^2.2.5, classnames@^2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== @@ -4376,6 +4383,11 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +debounce@^1.1.0: + version "1.2.1" + resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -4438,11 +4450,21 @@ deep-equal@^2.0.5: which-collection "^1.0.1" which-typed-array "^1.1.9" +deep-freeze@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz" + integrity sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg== + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + deepmerge@^4.2.2: version "4.3.1" resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" @@ -4821,6 +4843,11 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enquire.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz" + integrity sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw== + entities@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" @@ -4831,6 +4858,13 @@ env-paths@^2.2.0: resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +equals@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/equals/-/equals-1.0.5.tgz" + integrity sha512-wI15a6ZoaaXPv+55+Vh2Kqn3+efKRv8QPtcGTjW5xmanMnQzESdAt566jevtMZyt3W/jwLDTzXpMph5ECDJ2zg== + dependencies: + jkroso-type "1" + err-code@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" @@ -7198,6 +7232,16 @@ jiti@^1.19.1: resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jkroso-type@1: + version "1.1.1" + resolved "https://registry.npmjs.org/jkroso-type/-/jkroso-type-1.1.1.tgz" + integrity sha512-zZgay+fPG6PgMUrpyFADmQmvLo39+AZa7Gc5pZhev2RhDxwANEq2etwD8d0e6rTg5NkwOIlQmaEmns3draC6Ng== + +jquery@>=1.8.0: + version "3.7.1" + resolved "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" @@ -7291,6 +7335,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz" + integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA== + dependencies: + string-convert "^0.2.0" + json5@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" @@ -8011,6 +8062,11 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +nuka-carousel@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/nuka-carousel/-/nuka-carousel-7.0.0.tgz" + integrity sha512-KE0WV1MuE4Gq6ynL8P3qJH2rGq/DkJ0ej+ezo0IuZp4oklV8WNqu6P6O1utJqihHLGoEuFppq5wlHSHfhdCHXA== + nwsapi@^2.2.0: version "2.2.7" resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz" @@ -9055,6 +9111,17 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +pure-react-carousel@^1.30.1: + version "1.30.1" + resolved "https://registry.npmjs.org/pure-react-carousel/-/pure-react-carousel-1.30.1.tgz" + integrity sha512-B1qi62hZk0OFqRR4cTjtgIeOn/Ls5wo+HsLtrXT4jVf5et8ldBHSt+6LsYRJN86Or8dm+XbnJNEHy6WDJ0/DQw== + dependencies: + "@babel/runtime" "^7.5.5" + deep-freeze "0.0.1" + deepmerge "^2.2.1" + equals "^1.0.5" + prop-types "^15.6.2" + q@^1.1.2: version "1.5.1" resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" @@ -9101,6 +9168,11 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +range@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/range/-/range-0.0.3.tgz" + integrity sha512-OxK2nY2bmeEB4NxoBraQIBOOeOIxoBvm6yt8MA1kLappgkG3SyLf173iOtT5woWycrtESDD2g0Nl2yt8YPoUnw== + raw-body@2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" @@ -9151,6 +9223,14 @@ react-bootstrap@^2.9.1: uncontrollable "^7.2.1" warning "^4.0.3" +react-carousel@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/react-carousel/-/react-carousel-4.3.0.tgz" + integrity sha512-t8MfCK877KuOaQFAsO6NwzkWdhcJG8hxSN5zYR7/cSfTNI6DnM/HswvgvdfajtiETuoLZRMXXLZv6QRLGETKjw== + dependencies: + debounce "^1.1.0" + range "0.0.3" + react-country-flag@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/react-country-flag/-/react-country-flag-3.1.0.tgz" @@ -9186,7 +9266,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -"react-dom@^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, react-dom@>=16.14.0, react-dom@>=16.6.0, react-dom@>=16.8: +"react-dom@^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, react-dom@>=16.14.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=18.0.0, "react-dom@15.x || 16.x || 17.x || 18.x": version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -9332,6 +9412,17 @@ react-scripts@5.0.1: optionalDependencies: fsevents "^2.3.2" +react-slick@^0.29.0: + version "0.29.0" + resolved "https://registry.npmjs.org/react-slick/-/react-slick-0.29.0.tgz" + integrity sha512-TGdOKE+ZkJHHeC4aaoH85m8RnFyWqdqRfAGkhd6dirmATXMZWAxOpTLmw2Ll/jPTQ3eEG7ercFr/sbzdeYCJXA== + dependencies: + classnames "^2.2.5" + enquire.js "^2.1.6" + json2mq "^0.2.0" + lodash.debounce "^4.0.8" + resize-observer-polyfill "^1.5.0" + react-switch@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/react-switch/-/react-switch-7.0.0.tgz" @@ -9349,7 +9440,7 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react@*, "react@^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || 17 || 18", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16", react@>=0.14.0, react@>=15, react@>=15.0.0, react@>=16, react@>=16.14.0, react@>=16.3, react@>=16.6.0, react@>=16.8, react@>=16.8.0: +react@*, "react@^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || 17 || 18", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16", react@>=0.14.0, react@>=15, react@>=15.0.0, react@>=16, react@>=16.14.0, react@>=16.3, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=18.0.0, "react@15.x || 16.x || 17.x || 18.x": version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -9535,6 +9626,11 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +resize-observer-polyfill@^1.5.0: + version "1.5.1" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" @@ -9934,6 +10030,11 @@ slash@^4.0.0: resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +slick-carousel@^1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz" + integrity sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA== + smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" @@ -10173,6 +10274,11 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz" + integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz"