diff --git a/react-project/package-lock.json b/react-project/package-lock.json
index d2031c3..3eb4c9d 100644
--- a/react-project/package-lock.json
+++ b/react-project/package-lock.json
@@ -9,7 +9,8 @@
"version": "0.0.0",
"dependencies": {
"react": "^19.2.7",
- "react-dom": "^19.2.7"
+ "react-dom": "^19.2.7",
+ "react-router-dom": "^7.18.0"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
@@ -1068,6 +1069,19 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/cookie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
+ "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -2144,6 +2158,44 @@
"react": "^19.2.7"
}
},
+ "node_modules/react-router": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.0.tgz",
+ "integrity": "sha512-pTTGt8J+ji1NOmYnjzT+bAJy/1zD+Jp4ziO6cL7T3ZLvXKtusO7BpFqlRXitqpcPVqllsIXFHRMt+2/k3Xn6HQ==",
+ "license": "MIT",
+ "dependencies": {
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.0.tgz",
+ "integrity": "sha512-Fi0yY6kgtKae/Th2xibdWK0KSdYZ4B53Gyf6wRtomOKWgpNm7H7+DyfDhncdz9FKbpS+1jmDhg3F4WoGJ+yFOA==",
+ "license": "MIT",
+ "dependencies": {
+ "react-router": "7.18.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
"node_modules/rolldown": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.2.tgz",
@@ -2194,6 +2246,12 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
+ "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
+ "license": "MIT"
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
diff --git a/react-project/package.json b/react-project/package.json
index d486803..06ac64e 100644
--- a/react-project/package.json
+++ b/react-project/package.json
@@ -11,7 +11,8 @@
},
"dependencies": {
"react": "^19.2.7",
- "react-dom": "^19.2.7"
+ "react-dom": "^19.2.7",
+ "react-router-dom": "^7.18.0"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
diff --git a/react-project/src/App.jsx b/react-project/src/App.jsx
index 5e27d79..d12efe4 100644
--- a/react-project/src/App.jsx
+++ b/react-project/src/App.jsx
@@ -12,7 +12,8 @@ function App() {
const [chargement, setChargement] = useState(true);
const [titre, setTitre] = useState("");
const [annee, setAnnee] = useState("");
- const [console, setConsole] = useState("");
+ const [plateforme, setPlateforme] = useState("");
+ const [tri, setTri] = useState("titre");
function ajouter(e) {
e.preventDefault();
@@ -27,12 +28,16 @@ function App() {
setJeux([...jeux, nouveau]);
setTitre("");
setAnnee("");
- setConsole("");
+ setPlateforme("");
}
- const filtres = jeux.filter((j) =>
- j.titre.toLowerCase().includes(recherche.toLowerCase()),
- );
+ const affiches = [...jeux]
+ .filter((j) => j.titre.toLowerCase().includes(recherche.toLowerCase()))
+ .sort((a, b) => {
+ if (tri === "titre") return a.titre.localeCompare(b.titre);
+ if (tri === "annee") return a.annee - b.annee;
+ return 0;
+ });
useEffect(() => {
fetch("/zelda.json")
@@ -51,13 +56,17 @@ function App() {
setRecherche(e.target.value)}
/>
+
- {filtres.length === 0 && Aucun jeu trouvé 😕
}
+ {affiches.length === 0 && Aucun jeu trouvé 😕
}
- {filtres.map((jeu) => (
+ {affiches.map((jeu) => (
setConsole(e.target.value)}
+ value={plateforme}
+ onChange={(e) => setPlateforme(e.target.value)}
placeholder="Console"
/>
diff --git a/react-project/src/components/Form.jsx b/react-project/src/components/Form.jsx
index dd16071..e69de29 100644
--- a/react-project/src/components/Form.jsx
+++ b/react-project/src/components/Form.jsx
@@ -1,26 +0,0 @@
-import Carte from "./components/Carte";
-import { useState } from "react";
-
-const [tri, setTri] = useState("titre");
-
-const affiches = [...filtres].sort((a, b) => {
- if (tri === "titre") return a.titre.localeCompare(b.titre);
- if (tri === "annee") return a.annee - b.annee;
- return 0;
-});
-
-function Form() {
- return (
- <>
-
- {affiches.map((jeu) => (
-
- ))}
- >
- );
-}
-
-export default Form;