Modif bouton pour jouer + Carousel pour les stats sur les différentes parties (Nous, Daily, Weekly)
continuous-integration/drone/push Build is passing Details

pull/104/head^2
Baptiste MARCEL 1 year ago
parent e878d6e281
commit 472d94ebe1

@ -26,8 +26,11 @@
"jspdf": "^2.5.1", "jspdf": "^2.5.1",
"jszip": "^3.10.1", "jszip": "^3.10.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"nuka-carousel": "^7.0.0",
"pure-react-carousel": "^1.30.1",
"react": "^18.2.0", "react": "^18.2.0",
"react-bootstrap": "^2.9.1", "react-bootstrap": "^2.9.1",
"react-carousel": "^4.3.0",
"react-country-flag": "^3.1.0", "react-country-flag": "^3.1.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^4.11.0", "react-icons": "^4.11.0",
@ -35,7 +38,9 @@
"react-router-dom": "^6.18.0", "react-router-dom": "^6.18.0",
"react-router-hash-link": "^2.4.3", "react-router-hash-link": "^2.4.3",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"react-slick": "^0.29.0",
"react-switch": "^7.0.0", "react-switch": "^7.0.0",
"slick-carousel": "^1.8.1",
"socket.io": "^4.7.2", "socket.io": "^4.7.2",
"socket.io-client": "^4.7.2", "socket.io-client": "^4.7.2",
"sqlite3": "^5.1.6", "sqlite3": "^5.1.6",
@ -46,6 +51,7 @@
"devDependencies": { "devDependencies": {
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
"@types/react-router-hash-link": "^2.4.9", "@types/react-router-hash-link": "^2.4.9",
"@types/react-slick": "^0.23.12",
"@types/uuid": "^9.0.7", "@types/uuid": "^9.0.7",
"babel-jest": "^29.7.0", "babel-jest": "^29.7.0",
"depcheck": "^1.4.7" "depcheck": "^1.4.7"
@ -4655,6 +4661,15 @@
"@types/react-router-dom": "^5.3.0" "@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": { "node_modules/@types/react-transition-group": {
"version": "4.4.8", "version": "4.4.8",
"resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz",
@ -7521,6 +7536,11 @@
"node": ">=10" "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": { "node_modules/debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@ -7575,6 +7595,11 @@
"url": "https://github.com/sponsors/ljharb" "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": { "node_modules/deep-is": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@ -8147,6 +8172,11 @@
"node": ">=10.13.0" "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": { "node_modules/entities": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
@ -8164,6 +8194,14 @@
"node": ">=6" "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": { "node_modules/err-code": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
@ -12971,6 +13009,17 @@
"jiti": "bin/jiti.js" "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": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "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", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" "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": { "node_modules/json5": {
"version": "2.2.3", "version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@ -14203,6 +14260,18 @@
"url": "https://github.com/fb55/nth-check?sponsor=1" "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": { "node_modules/nwsapi": {
"version": "2.2.7", "version": "2.2.7",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
@ -16135,6 +16204,30 @@
"node": ">=6" "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": { "node_modules/q": {
"version": "1.5.1", "version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@ -16206,6 +16299,14 @@
"safe-buffer": "^5.1.0" "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": { "node_modules/range-parser": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "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": { "node_modules/react-country-flag": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/react-country-flag/-/react-country-flag-3.1.0.tgz", "resolved": "https://registry.npmjs.org/react-country-flag/-/react-country-flag-3.1.0.tgz",
@ -16617,6 +16730,22 @@
"@babel/core": "^7.0.0" "@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": { "node_modules/react-switch": {
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/react-switch/-/react-switch-7.0.0.tgz", "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", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" "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": { "node_modules/resolve": {
"version": "1.22.8", "version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@ -17544,6 +17678,14 @@
"node": ">=8" "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": { "node_modules/smart-buffer": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
@ -17984,6 +18126,11 @@
"safe-buffer": "~5.2.0" "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": { "node_modules/string-length": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",

@ -21,8 +21,11 @@
"jspdf": "^2.5.1", "jspdf": "^2.5.1",
"jszip": "^3.10.1", "jszip": "^3.10.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"nuka-carousel": "^7.0.0",
"pure-react-carousel": "^1.30.1",
"react": "^18.2.0", "react": "^18.2.0",
"react-bootstrap": "^2.9.1", "react-bootstrap": "^2.9.1",
"react-carousel": "^4.3.0",
"react-country-flag": "^3.1.0", "react-country-flag": "^3.1.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^4.11.0", "react-icons": "^4.11.0",
@ -30,7 +33,9 @@
"react-router-dom": "^6.18.0", "react-router-dom": "^6.18.0",
"react-router-hash-link": "^2.4.3", "react-router-hash-link": "^2.4.3",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"react-slick": "^0.29.0",
"react-switch": "^7.0.0", "react-switch": "^7.0.0",
"slick-carousel": "^1.8.1",
"socket.io": "^4.7.2", "socket.io": "^4.7.2",
"socket.io-client": "^4.7.2", "socket.io-client": "^4.7.2",
"sqlite3": "^5.1.6", "sqlite3": "^5.1.6",
@ -65,6 +70,7 @@
"devDependencies": { "devDependencies": {
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
"@types/react-router-hash-link": "^2.4.9", "@types/react-router-hash-link": "^2.4.9",
"@types/react-slick": "^0.23.12",
"@types/uuid": "^9.0.7", "@types/uuid": "^9.0.7",
"babel-jest": "^29.7.0", "babel-jest": "^29.7.0",
"depcheck": "^1.4.7" "depcheck": "^1.4.7"

@ -88,8 +88,6 @@ class SessionController {
nbWins: nbWinsOL, nbWins: nbWinsOL,
ratio: ratioOL}; ratio: ratioOL};
console.log("[" + hour + ":" + minutes + "] " + req.session.user.pseudo + " have a session.");
res.status(200).json({ user: req.session.user }); res.status(200).json({ user: req.session.user });
} }
catch(error){ catch(error){

@ -28,17 +28,19 @@ import { useNavigate } from 'react-router-dom';
// @ts-ignore // @ts-ignore
function AppNavbar({changeLocale}) { function AppNavbar({changeLocale}) {
const theme = useTheme(); const theme = useTheme();
const {user, isLoggedIn, logout} = useAuth();
const navigate = useNavigate(); const navigate = useNavigate();
const {user, isLoggedIn, logout} = useAuth();
function navigateToHome(){
navigate("/")
}
function navigateToProfile(){ function navigateToProfile(){
navigate("/profile") navigate("/profile")
} }
function navigateToHome(){ function navigateToLogin(){
navigate("/") navigate("/login")
} }
return ( return (
@ -63,37 +65,24 @@ function AppNavbar({changeLocale}) {
<div className='leftdiv'> <div className='leftdiv'>
<Nav className="ml-auto navbar-title-dd"> <Nav className="ml-auto navbar-title-dd">
{isLoggedIn ? ( {isLoggedIn ? (
<NavDropdown
title={<span style={{ color: theme.colors.text }}>Menu <BiDoorOpen /></span>}
id="basic-nav-dropdown"
align="end"
drop='down-centered'
>
<NavDropdown.Item onClick={navigateToProfile}>Profil</NavDropdown.Item>
<LanguageNavItem
countryCode="FR"
languageKey="languageSelector.french"
onClick={() => changeLocale('fr')}
/>
<LanguageNavItem
countryCode="GB"
languageKey="languageSelector.english"
onClick={() => changeLocale('en')}
/>
<NavDropdown.Divider />
<NavDropdown.Item onClick={logout}>Déconnexion</NavDropdown.Item>
</NavDropdown>
) : (
<> <>
<Nav.Link href="/login" className='navbar-title-dd' style={{ backgroundColor: theme.colors.secondary }}> {/* Boutou qui lors du clique nous redirige vers le profile */}
<BiLogInCircle /> <Nav.Link onClick={navigateToProfile} style={{ color: theme.colors.text }}>
<FormattedMessage id="log_in" /> <span>
<img src={user?.profilePicture} height="50" width="50" alt="profile"/>
{user && user.pseudo}
</span>
</Nav.Link> </Nav.Link>
<Nav.Link href="/signup" className='navbar-title-dd' style={{ backgroundColor: theme.colors.secondary }}> </>
<BsFillPersonPlusFill /> ):(
<FormattedMessage id="sign_up" /> <>
{/* Bouton qui lors du clique nous redirige vers la connexion */}
<Nav.Link onClick={navigateToLogin} style={{ color: theme.colors.text }}>
<span>
<img src={user?.profilePicture} height="50" width="50" alt="profile"/>
{user && user.pseudo}
</span>
</Nav.Link> </Nav.Link>
<LangDropDown changeLocale={changeLocale}/>
</> </>
)} )}
</Nav> </Nav>

@ -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 */

@ -1,13 +1,13 @@
import React, {useEffect, useState} from 'react'; import React, {useState, useEffect} from 'react';
import Carousel from 'nuka-carousel';
/* Style */ /* Style */
import '../Pages/Play.css'; import '../Pages/Play.css';
import '../Style/Global.css' import '../Style/Global.css'
import './ScoreBoard.css';
import { useTheme } from '../Style/ThemeContext'; import { useTheme } from '../Style/ThemeContext';
/* Ressources */ /* Ressources */
import Person from '../res/img/Person.png'
import leave from '../res/img/bot.png'
import trophy from '../res/icon/trophy.png' import trophy from '../res/icon/trophy.png'
import share from '../res/icon/share.png'; import share from '../res/icon/share.png';
@ -19,16 +19,21 @@ import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col'; import Col from 'react-bootstrap/Col';
/* Component */ /* Component */
import ButtonImgNav from './ButtonImgNav';
import User from '../model/User'; import User from '../model/User';
/* Services */ /* Services */
import ScoreboardService from '../services/ScoreboardService'; 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 //@ts-ignore
const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => { const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
const theme=useTheme(); const theme=useTheme();
const [carouselKey, setCarouselKey] = useState(0);
const [activeTab, setActiveTab] = useState("perso");
// DAILY STATS // DAILY STATS
const [dailyMastermindStats, setDailyMastermindStats] = useState<any>(null); const [dailyMastermindStats, setDailyMastermindStats] = useState<any>(null);
const [dailyEasyEnigmaStats, setDailyEasyEnigmaStats] = useState<any>(null); const [dailyEasyEnigmaStats, setDailyEasyEnigmaStats] = useState<any>(null);
@ -82,228 +87,274 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
}, []); }, []);
return ( return (
// <div className='LeaderBoardiv'> <Tabs
<div className='LeaderBoardiv'> activeKey={activeTab}
<Tabs style={{width:"100%"}} onSelect={(key:any) => {
defaultActiveKey="daily" setActiveTab(key);
// Forcer une mise à jour du carousel
setCarouselKey((prevKey) => prevKey + 1);
}}
id="ScoreBoard" id="ScoreBoard"
className="mb-3"> className="tabsStats justify-content-around"
<Tab eventKey="perso" title="Vos Stats" disabled = { !Player.pseudo.startsWith("Guest_") ? false : true}> >
<Container fluid> <Tab eventKey="perso" title="Vos Stats" disabled={!Player.pseudo.startsWith("Guest_") ? false : true}>
<Row>Stats en MasterMind :</Row> <Tab.Content className={`tabsStats ${activeTab !== 'perso' ? 'hidden' : ''}`}>
<Row> <Carousel adaptiveHeight wrapAround slidesToShow={1} cellSpacing={10} key={carouselKey}>
<Col sm={10}>Partie Jouées :</Col> <div className="stats">
<Col className='leftRow'>{Player !== null ? Player.mastermindStats.nbGames : "0"}</Col> <h5>Mastermind</h5>
</Row> <hr />
<Row> <p>Parties Jouées: {Player.mastermindStats.nbGames}</p>
<Col sm={10}>Best-Score :</Col> <p>Best-Score: {Player.mastermindStats.bestScore}</p>
<Col className='leftRow'>{Player !== null ? Player.mastermindStats.bestScore : "0"}</Col> <p>Moyenne d'essai: {Player.mastermindStats.avgNbTry}</p>
</Row> </div>
<Row> <div className="stats">
<Col sm={10}>Moyenne d'essai :</Col> <h5>Enigme facile</h5>
<Col className='leftRow'>{Player !== null ? Player.mastermindStats.avgNbTry : "0"}</Col> <hr />
</Row> <p>Parties Jouées: {Player.easyEnigmaStats.nbGames}</p>
<hr/> <p>Nombre de victoires: {Player.easyEnigmaStats.nbWins}</p>
<Row>Stats en Enigme facile :</Row> <p>Ratio V/D: {Player.easyEnigmaStats.ratio}</p>
<Row> <p>Meilleur temps: {Player.easyEnigmaStats.bestTime}</p>
<Col sm={10}>Partie jouée :</Col> <p>Moyenne de temps: {Player.easyEnigmaStats.avgTime}</p>
<Col className='leftRow'>{Player !== null ? Player.easyEnigmaStats.nbGames : "0"}</Col> </div>
</Row> <div className="stats">
<Row> <h5>Enigme moyenne</h5>
<Col sm={10}>Nombre de victoire :</Col> <hr />
<Col className='leftRow'>{Player !== null ? Player.easyEnigmaStats.nbWins : "0"}</Col> <p>Parties Jouées: {Player.mediumEnigmaStats.nbGames}</p>
</Row> <p>Best-Score: {Player.mediumEnigmaStats.bestScore}</p>
<Row> <p>Moyenne d'essai: {Player.mediumEnigmaStats.avgNbTry}</p>
<Col sm={10}>Ratio V/D :</Col> </div>
<Col className='leftRow'>{Player !== null ? Player.easyEnigmaStats.ratio.toFixed(2) + "%" : "00.0%"}</Col> <div className="stats">
</Row> <h5>Enigme difficile</h5>
<Row> <hr />
<Col sm={10}>Meilleur temps :</Col> <p>Parties Jouées: {Player.hardEnigmaStats.nbGames}</p>
<Col className='leftRow'>{Player !== null ? Player.easyEnigmaStats.bestTime : "0"}</Col> <p>Nombre de victoires: {Player.hardEnigmaStats.nbWins}</p>
</Row> <p>Ratio V/D: {Player.hardEnigmaStats.ratio}</p>
<Row> <p>Meilleur temps: {Player.hardEnigmaStats.bestTime}</p>
<Col sm={10}>Moyenne de temps :</Col> <p>Moyenne de temps: {Player.hardEnigmaStats.avgTime}</p>
<Col className='leftRow'>{Player !== null ? Player.easyEnigmaStats.avgTime.toFixed(2) : "0"}</Col> </div>
</Row> <div className="stats">
<hr/> <h5>En ligne</h5>
<Row>Stats en Enigme moyenne :</Row> <hr />
<Row> <p>Parties Jouées: {Player.onlineStats.nbGames}</p>
<Col sm={10}>Partie jouée :</Col> <p>Nombre de victoires: {Player.onlineStats.nbWins}</p>
<Col className='leftRow'>{Player !== null ? Player.mediumEnigmaStats.nbGames : "0"}</Col> <p>Ratio V/D: {Player.onlineStats.ratio}</p>
</Row> </div>
<Row> </Carousel>
<Col sm={10}>Best-Score :</Col> </Tab.Content>
<Col className='leftRow'>{Player !== null ? Player.mediumEnigmaStats.bestScore : "0"}</Col>
</Row>
<Row>
<Col sm={10}>Moyenne d'essai :</Col>
<Col className='leftRow'>{Player !== null ? Player.mediumEnigmaStats.avgNbTry.toFixed(2) : "0"}</Col>
</Row>
<hr/>
<Row>Stats en Enigme difficile :</Row>
<Row>
<Col sm={10}>Partie jouée :</Col>
<Col className='leftRow'>{Player !== null ? Player.hardEnigmaStats.nbGames : "0"}</Col>
</Row>
<Row>
<Col sm={10}>Nombre de victoire :</Col>
<Col className='leftRow'>{Player !== null ? Player.hardEnigmaStats.nbWins : "0"}</Col>
</Row>
<Row>
<Col sm={10}>Ratio V/D :</Col>
<Col className='leftRow'>{Player !== null ? Player.hardEnigmaStats.ratio.toFixed(2) + "%" : "00.0%"}</Col>
</Row>
<Row>
<Col sm={10}>Meilleur temps :</Col>
<Col className='leftRow'>{Player !== null ? Player.hardEnigmaStats.bestTime : "0"}</Col>
</Row>
<Row>
<Col sm={10}>Moyenne de temps :</Col>
<Col className='leftRow'>{Player !== null ? Player.hardEnigmaStats.avgTime.toFixed(2) : "0"}</Col>
</Row>
<hr/>
<Row>Stats en ligne :</Row>
<Row>
<Col sm={10}>Partie jouée :</Col>
<Col className='leftRow'>{Player !== null ? Player.onlineStats.nbGames : "0"}</Col>
</Row>
<Row>
<Col sm={10}>Nombre de victoire :</Col>
<Col className='leftRow'>{Player !== null ? Player.onlineStats.nbWins : "0"}</Col>
</Row>
<Row>
<Col sm={10}>Ratio V/D :</Col>
<Col className='leftRow'>{Player !== null ? Player.onlineStats.ratio.toFixed(2) + "%" : "0"}</Col>
</Row>
</Container>
</Tab> </Tab>
<Tab eventKey="daily" title="Daily" <Tab eventKey="daily" title="Daily">
style={{display:"flex", flexDirection:'column', alignItems:'center'}}> <Tab.Content className={`tabsStats ${activeTab !== 'daily' ? 'hidden' : ''}`}>
<img src={trophy} <Carousel adaptiveHeight wrapAround slidesToShow={1} cellSpacing={10} key={carouselKey}>
height='100' <div className="stats">
width='100' <h5>Mastermind</h5>
alt="Person2"/> <hr />
<Container fluid>
<Row>MasterMind :</Row>
{dailyMastermindStats !== null ? (dailyMastermindStats.tab.length !== 0 ? dailyMastermindStats.tab.map((stats: any, index: number) => ( {dailyMastermindStats !== null ? (dailyMastermindStats.tab.length !== 0 ? dailyMastermindStats.tab.map((stats: any, index: number) => (
<Row key={index}> <>
<Col sm={10}>{index+1}.{stats.pseudo}</Col>
<Col className='leftRow'>{stats.score}</Col>
</Row>
)) : (
<Row> <Row>
<Col sm={10}>No data</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.score}</p>
</Col>
</Row>
</>
)) : ( )) : (
<Row> <p className='text-warning'>Nothing for the moment</p>
<Col sm={10}>No data</Col>
</Row>
)}
<hr/>
<Row>Multijoueur :</Row>
{dailyOnlineStats !== null ? (dailyOnlineStats.tab.length !== 0 ? dailyOnlineStats.tab.map((stats: any, index: number) => (
<Row key={index}>
<Col sm={10}>{index+1}.{stats.pseudo}</Col>
<Col className='leftRow'>{stats.wins}</Col>
</Row>
)) : ( )) : (
<p className='text-warning'>Nothing for the moment</p>
)}
</div>
<div className="stats">
<h5>Enigme facile</h5>
<hr />
{dailyEasyEnigmaStats !== null ? (dailyEasyEnigmaStats.tab.length !== 0 ? dailyEasyEnigmaStats.tab.map((stats: any, index: number) => (
<>
<Row> <Row>
<Col sm={10}>No data</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.time}</p>
</Col>
</Row>
</>
)) : ( )) : (
<Row> <p className='text-warning'>Nothing for the moment</p>
<Col sm={10}>No data</Col> )) : (
</Row> <p className='text-warning'>Nothing for the moment</p>
)} )}
</div>
<hr/> <div className="stats">
<h5>Enigme moyenne</h5>
<Row>Enigme facile :</Row> <hr />
{dailyEasyEnigmaStats !== null ? (dailyEasyEnigmaStats.tab.length !== 0 ? dailyEasyEnigmaStats.tab.map((stats: any, index: number) => ( {dailyMediumEnigmaStats !== null ? (dailyMediumEnigmaStats.tab.length !== 0 ? dailyMediumEnigmaStats.tab.map((stats: any, index: number) => (
<Row key={index}> <>
<Col sm={10}>{index+1}.{stats.pseudo}</Col> <Row>
<Col className='leftRow'>{stats.time}</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.time}</p>
</Col>
</Row>
</>
)) : ( )) : (
<p className='text-warning'>Nothing for the moment</p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
)}
</div>
<div className="stats">
<h5>Enigme difficile</h5>
<hr />
{dailyHardEnigmaStats !== null ? (dailyHardEnigmaStats.tab.length !== 0 ? dailyHardEnigmaStats.tab.map((stats: any, index: number) => (
<>
<Row> <Row>
<Col sm={10}>No data</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.time}</p>
</Col>
</Row>
</>
)) : ( )) : (
<p className='text-warning'>Nothing for the moment</p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
)}
</div>
<div className="stats">
<h5>En ligne</h5>
<hr />
{dailyOnlineStats !== null ? (dailyOnlineStats.tab.length !== 0 ? dailyOnlineStats.tab.map((stats: any, index: number) => (
<>
<Row> <Row>
<Col sm={10}>No data</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.wins}</p>
</Col>
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
)} )}
</div>
<hr/> </Carousel>
</Tab.Content>
</Container>
</Tab> </Tab>
<Tab eventKey="weekly" title="Weekly"> <Tab eventKey="weekly" title="Weekly">
<img src={trophy} <Tab.Content className={`tabsStats ${activeTab !== 'weekly' ? 'hidden' : ''}`}>
height='100' <Carousel adaptiveHeight wrapAround slidesToShow={1} cellSpacing={10} key={carouselKey}>
width='100' <div className="stats">
alt="Person2"/> <h5>Mastermind</h5>
<Container fluid> <hr />
<Row>MasterMind :</Row>
{weeklyMastermindStats !== null ? (weeklyMastermindStats.tab.length !== 0 ? weeklyMastermindStats.tab.map((stats: any, index: number) => ( {weeklyMastermindStats !== null ? (weeklyMastermindStats.tab.length !== 0 ? weeklyMastermindStats.tab.map((stats: any, index: number) => (
<Row key={index}> <>
<Col sm={10}>{index+1}.{stats.pseudo}</Col>
<Col className='leftRow'>{stats.score}</Col>
</Row>
)) : (
<Row> <Row>
<Col sm={10}>No data</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.score}</p>
</Col>
</Row>
</>
)) : ( )) : (
<Row> <p className='text-warning'>Nothing for the moment</p>
<Col sm={10}>No data</Col>
</Row>
)}
<hr/>
<Row>Multijoueur :</Row>
{weeklyOnlineStats !== null ? (weeklyOnlineStats.tab.length !== 0 ? weeklyOnlineStats.tab.map((stats: any, index: number) => (
<Row key={index}>
<Col sm={10}>{index+1}.{stats.pseudo}</Col>
<Col className='leftRow'>{stats.wins}</Col>
</Row>
)) : ( )) : (
<p className='text-warning'>Nothing for the moment</p>
)}
</div>
<div className="stats">
<h5>Enigme facile</h5>
<hr />
{weeklyEasyEnigmaStats !== null ? (weeklyEasyEnigmaStats.tab.length !== 0 ? weeklyEasyEnigmaStats.tab.map((stats: any, index: number) => (
<>
<Row> <Row>
<Col sm={10}>No data</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.time}</p>
</Col>
</Row>
</>
)) : ( )) : (
<Row> <p className='text-warning'>Nothing for the moment</p>
<Col sm={10}>No data</Col> )) : (
</Row> <p className='text-warning'>Nothing for the moment</p>
)} )}
</div>
<hr/> <div className="stats">
<h5>Enigme moyenne</h5>
<Row>Enigme facile :</Row> <hr />
{weeklyEasyEnigmaStats !== null ? (weeklyEasyEnigmaStats.tab.length !== 0 ? weeklyEasyEnigmaStats.tab.map((stats: any, index: number) => ( {weeklyMediumEnigmaStats !== null ? (weeklyMediumEnigmaStats.tab.length !== 0 ? weeklyMediumEnigmaStats.tab.map((stats: any, index: number) => (
<Row key={index}> <>
<Col sm={10}>{index+1}.{stats.pseudo}</Col> <Row>
<Col className='leftRow'>{stats.time}</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.time}</p>
</Col>
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
)) : ( )) : (
<p className='text-warning'>Nothing for the moment</p>
)}
</div>
<div className="stats">
<h5>Enigme difficile</h5>
<hr />
{weeklyHardEnigmaStats !== null ? (weeklyHardEnigmaStats.tab.length !== 0 ? weeklyHardEnigmaStats.tab.map((stats: any, index: number) => (
<>
<Row> <Row>
<Col sm={10}>No data</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.time}</p>
</Col>
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
)) : ( )) : (
<p className='text-warning'>Nothing for the moment</p>
)}
</div>
<div className="stats">
<h5>En ligne</h5>
<hr />
{weeklyOnlineStats !== null ? (weeklyOnlineStats.tab.length !== 0 ? weeklyOnlineStats.tab.map((stats: any, index: number) => (
<>
<Row> <Row>
<Col sm={10}>No data</Col> <Col>
</Row> <p>{index+1}.{stats.pseudo}</p>
</Col>
<Col>
<p>{stats.wins}</p>
</Col>
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
)} )}
</div>
<hr/> </Carousel>
</Container> </Tab.Content>
</Tab> </Tab>
</Tabs> </Tabs>
<ButtonImgNav dest='/' img={share}/>
</div>
//</div>
); );
} }

@ -4,12 +4,12 @@ import { useNavigate } from 'react-router-dom';
import { useAuth } from '../Contexts/AuthContext'; import { useAuth } from '../Contexts/AuthContext';
import AuthService from '../services/AuthService'; import AuthService from '../services/AuthService';
import '../Style/Global.css'; import '../Style/Global.css';
import { Link } from 'react-router-dom';
const SignIn = () => { const SignIn = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const { login } = useAuth();
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const {login} = useAuth();
const [showConfirmation, setShowConfirmation] = useState(false); const [showConfirmation, setShowConfirmation] = useState(false);
const handleSubmit = async (event: React.FormEvent) => { const handleSubmit = async (event: React.FormEvent) => {
@ -78,7 +78,7 @@ const SignIn = () => {
</button> </button>
</div> </div>
<p className="forgot-password text-right"> <p className="forgot-password text-right">
<a href="#">Mot de passe</a> oublié ? <Link to="/signup">Pas encore inscrit ?</Link>
</p> </p>
</form> </form>

@ -189,20 +189,15 @@ function NewPlay() {
// const returnVisibility: Visibility = goBackRoom !== -1 ? "visible" : "hidden"; // const returnVisibility: Visibility = goBackRoom !== -1 ? "visible" : "hidden";
const returnVisibility: any= goBackRoom !== -1 ? "visible" : "hidden" ; const returnVisibility = goBackRoom !== -1 ? "block" : "none" ;
return ( return (
<div className="MainContainer"> <div className="MainContainer">
<div className="NewleftContainer"> <div className="leftContainer">
{/* Boutons pour jouer */}
{/* Menu de boutons */}
<div className='NewbuttonGroupVertical'> <div className='NewbuttonGroupVertical'>
<button onClick={launchMastermind} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Jouer seul </button> <button onClick={launchMastermind} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Jouer seul </button>
<button ref={target} onClick={launchEngimeJour} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Résoudre une énigme</button> <button ref={target} onClick={launchEngimeJour} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Résoudre une énigme</button>
<Overlay show={showOverlay} target={target.current} placement="bottom" rootClose={true} rootCloseEvent='click'> <Overlay show={showOverlay} target={target.current} placement="bottom" rootClose={true} rootCloseEvent='click'>
{({ placement, arrowProps, show: _show, popper, ...props }) => ( {({ placement, arrowProps, show: _show, popper, ...props }) => (
@ -224,30 +219,17 @@ function NewPlay() {
</Overlay> </Overlay>
<button onClick={createLobby} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Créer une partie </button> <button onClick={createLobby} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Créer une partie </button>
<button onClick= {() => navigate("/join")} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Rejoindre </button> <button onClick={goBack} className="ButtonNavRejoin" style={{ display:returnVisibility}}>Retourner à la partie</button>
{/* {goBackRoom != -1 && <button onClick={goBack} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}>Retourner à la partie</button>} */}
<button onClick={goBack} className="ButtonNavRejoin" style={{ visibility:returnVisibility}}>Retourner à la partie</button>
</div> </div>
{/* Lobbies */} {/* Lobbies */}
<div style={{border:'solid 1px lightgray', borderRadius:'15px', marginTop:'20px'}}> <div style={{border:'solid 1px lightgray', borderRadius:'15px', marginTop:'20px'}}>
<Lobbies/> <Lobbies/>
</div> </div>
</div>
<div className='NewrightContainer'>
<div style={{ border:'solid 2px lightgray', borderRadius:'15px', display:'flex', justifyContent:'center', alignItems:'center', flexDirection:'column', padding:'20px', margin:'20px 0px'}}>
<h2>
{user && user.pseudo}
</h2>
<img src={user?.profilePicture}
height='150'
width='150'
alt="Person"
/>
</div> </div>
{user && (<ScoreBoard Player={user}/>)}
<div className='rightContainer'>
{user && <ScoreBoard Player={user}/>}
</div> </div>
</div> </div>
); );

@ -1,17 +1,16 @@
.MainContainer {
.MainContainer{
flex: 1 1 0;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content:space-around justify-content: center;
align-items: center;
height: 100%;
} }
.MidContainer{ .MidContainer {
display: flex; display: flex;
/* justify-content:center; */ justify-content: center;
align-items:center; align-items: center;
flex-direction: column; flex-direction: column;
margin-top: 15px; margin-top: 15px;
width: 30%; width: 30%;
} }
@ -21,20 +20,24 @@
justify-content: center; justify-content: center;
} }
.leftContainer{ .leftContainer {
width: 30%; height: 100%;
margin: 20px 30px;
width: 70%;
} }
.rightContainer{ .rightContainer {
height: 100%;
margin: 20px 30px;
width: 30%; width: 30%;
} }
.NewleftContainer{ .NewleftContainer {
margin: 20px 30px; margin: 20px 30px;
width: 70%; width: 70%;
} }
.NewrightContainer{ .NewrightContainer {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
@ -42,81 +45,55 @@
width: 30%; width: 30%;
} }
/* .textBoard div{ .buttonGroupVertical {
display: flex;
flex-direction:column-reverse;
justify-content:space-between
} */
/* .textBoard div:nth-child(2){
display: flex; display: flex;
justify-content: end; justify-content: center;
} */ align-items: center;
/**Button**/
.buttonGroupVertical{
display: flex;
justify-content:center;
align-items:center;
flex-direction: column; flex-direction: column;
} }
.NewbuttonGroupVertical{ .NewbuttonGroupVertical {
display: flex; display: flex;
justify-content:space-around; flex-direction: row;
align-items:start; justify-content: space-evenly;
} }
.ButtonNav {
.ButtonNav{
margin: 15px 10px; margin: 15px 10px;
width:200px; width: 200px;
height: 8vh; height: 8vh;
/* background-color: #85C9C2;
color: #2A4541; */
color: white; color: white;
border: 2px solid #0056b3;
border: solid;
border-radius: 15px; border-radius: 15px;
border-width: 2px; font-size: larger;
font-size:larger;
} }
.ButtonNavRejoin {
.ButtonNavRejoin{
margin: 15px 10px; margin: 15px 10px;
width:200px; width: 200px;
height: 8vh; height: 8vh;
color: white; color: white;
background-color: aquamarine; background-color: aquamarine;
border: 2px solid #0056b3;
border: solid 2px rgb(40, 225, 163);
border-radius: 15px; border-radius: 15px;
font-size: larger;
font-size:larger;
} }
.returnDiv{
.returnDiv {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin: 40px 15px;
margin:40px 15px; border: 2px solid whitesmoke;
border: solid 2px whitesmoke;
border-radius: 15px; border-radius: 15px;
background-color: white; background-color: white;
} }
.returnDiv p { .returnDiv p {
margin: 15px; margin: 15px;
padding: 10px; padding: 10px;
border: solid 1px whitesmoke; border: 1px solid whitesmoke;
border-radius: 10px; border-radius: 10px;
font-weight: 500;
font-weight:500;
} }

@ -1,6 +1,5 @@
.mainContainer{ .mainContainer{
display: flex; display: flex;
/* flex-direction: column; */
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin: 50px; margin: 50px;

@ -1,4 +1,4 @@
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
import ProfilePDP from '../Components/ProfilePDP'; import ProfilePDP from '../Components/ProfilePDP';
import SessionService from '../services/SessionService'; import SessionService from '../services/SessionService';
@ -27,15 +27,30 @@ import ProgressBar from 'react-bootstrap/ProgressBar';
//@ts-ignore //@ts-ignore
const Profile = () => { const Profile = () => {
const navigate = useNavigate(); const navigate = useNavigate();
//let player;
const {user, logout} = useAuth()
const [editingUsername, setEditingUsername] = useState(false); const [editingUsername, setEditingUsername] = useState(false);
const {isLoggedIn, login, logout, user, setUserData, manager } = useAuth();
const [newUsername, setNewUsername] = useState(user?.pseudo); 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) => { const onUsernameChange = (newUsername) => {
if(user?.pseudo != null){ if(user?.pseudo != null){
SessionService.UpdatePseudo(user.pseudo, newUsername) SessionService.UpdatePseudo(user.pseudo, newUsername)
@ -349,7 +364,10 @@ const Profile = () => {
</Modal> </Modal>
</> </>
</div> </div>
</div>
{/* Bouton de déconnexion */}
<div className='logout'>
<Button variant="warning" onClick={handleLogout}>Déconnexion</Button>
</div> </div>
</div> </div>
</> </>

@ -6,7 +6,6 @@ import '../Style/Global.css';
const SignUp = () => { const SignUp = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [showConfirmation, setShowConfirmation] = useState(false); const [showConfirmation, setShowConfirmation] = useState(false);

@ -2470,6 +2470,13 @@
"@types/history" "^4.7.11" "@types/history" "^4.7.11"
"@types/react" "*" "@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": "@types/react-transition-group@^4.4.6":
version "4.4.8" version "4.4.8"
resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz" 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" resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz"
integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
classnames@^2.3.2: classnames@^2.2.5, classnames@^2.3.2:
version "2.3.2" version "2.3.2"
resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz"
integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
@ -4376,6 +4383,11 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0" whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.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: debug@^2.6.0:
version "2.6.9" version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" 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-collection "^1.0.1"
which-typed-array "^1.1.9" 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: deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.4" version "0.1.4"
resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 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: deepmerge@^4.2.2:
version "4.3.1" version "4.3.1"
resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" 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" graceful-fs "^4.2.4"
tapable "^2.2.0" 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: entities@^2.0.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" 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" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz"
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== 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: err-code@^2.0.2:
version "2.0.3" version "2.0.3"
resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" 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" resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz"
integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== 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: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 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" resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 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: json5@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz"
@ -8011,6 +8062,11 @@ nth-check@^2.0.1:
dependencies: dependencies:
boolbase "^1.0.0" 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: nwsapi@^2.2.0:
version "2.2.7" version "2.2.7"
resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz" 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" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 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: q@^1.1.2:
version "1.5.1" version "1.5.1"
resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" 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" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 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: raw-body@2.5.1:
version "2.5.1" version "2.5.1"
resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" 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" uncontrollable "^7.2.1"
warning "^4.0.3" 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: react-country-flag@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmjs.org/react-country-flag/-/react-country-flag-3.1.0.tgz" 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" strip-ansi "^6.0.1"
text-table "^0.2.0" 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" version "18.2.0"
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz"
integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
@ -9332,6 +9412,17 @@ react-scripts@5.0.1:
optionalDependencies: optionalDependencies:
fsevents "^2.3.2" 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: react-switch@^7.0.0:
version "7.0.0" version "7.0.0"
resolved "https://registry.npmjs.org/react-switch/-/react-switch-7.0.0.tgz" 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" loose-envify "^1.4.0"
prop-types "^15.6.2" 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" version "18.2.0"
resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 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" resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== 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: resolve-cwd@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" 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" resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== 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: smart-buffer@^4.2.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz"
@ -10173,6 +10274,11 @@ string_decoder@~1.1.1:
dependencies: dependencies:
safe-buffer "~5.1.0" 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: string-length@^4.0.1:
version "4.0.2" version "4.0.2"
resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz"

Loading…
Cancel
Save