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"}
-
-
-
-
-
-
- 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
-
- )}
-
-
-
-
-
-
-
-
- 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}
-
-

-
- {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"