diff --git a/mon-projet/package-lock.json b/mon-projet/package-lock.json index 412135c..9b7ab1b 100644 --- a/mon-projet/package-lock.json +++ b/mon-projet/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.3", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.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/mon-projet/package.json b/mon-projet/package.json index 283dc38..9a22244 100644 --- a/mon-projet/package.json +++ b/mon-projet/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/mon-projet/src/App.jsx b/mon-projet/src/App.jsx index bfaae78..c47fdfa 100644 --- a/mon-projet/src/App.jsx +++ b/mon-projet/src/App.jsx @@ -39,11 +39,14 @@ function App() { const [niveaux, setNiveaux] = useState(""); const [tri, setTri] = useState("nom"); - const affichees = [...trilogies].sort((a, b) => { - if (tri === "nom") return a.nom.localeCompare(b.nom); - if (tri === "likes") return (likes[b.id] || 0) - (likes[a.id] || 0); - return 0; - }); + const affichees = [...trilogies] + .filter((t) => t.nom.toLowerCase().includes(recherche.toLowerCase())) + .sort((a, b) => { + if (tri === "nom") return a.nom.localeCompare(b.nom); + if (tri === "likes") return (likes[b.id] || 0) - (likes[a.id] || 0); + return 0; + }); + function ajouter(e) { e.preventDefault(); // empĂȘche le rechargement de page if (nom.trim() === "") return; // on n'ajoute pas du vide @@ -59,10 +62,6 @@ function App() { const total = Object.values(likes).reduce((s, n) => s + n, 0); - const filtrees = trilogies.filter((t) => - t.nom.toLowerCase().includes(recherche.toLowerCase()), - ); - return (
@@ -92,14 +91,14 @@ function App() { onChange={(e) => setRecherche(e.target.value)} />

👍 Total de likes : {total}

- {filtrees.length === 0 &&

Aucune trilogie trouvée

} - {filtrees.map((trilo) => ( + {affichees.length === 0 &&

Aucune trilogie trouvée

} + {affichees.map((trilo) => ( liker(trilo.id)} // incrémente SON like + likes={likes[trilo.id] || 0} + onLike={() => liker(trilo.id)} /> ))}