Rating
- - - - - -{album.title}
-{album.artist}
-{album.releaseYear}
-diff --git a/package-lock.json b/package-lock.json
index 293d437..feb798e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,7 +13,8 @@
"graphql": "^17.0.2",
"pg": "^8.23.1",
"react": "^19.2.8",
- "react-dom": "^19.2.8"
+ "react-dom": "^19.2.8",
+ "react-router-dom": "^7.18.4"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
@@ -1860,6 +1861,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",
@@ -3173,6 +3187,44 @@
"react": "^19.3.0"
}
},
+ "node_modules/react-router": {
+ "version": "7.18.4",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.4.tgz",
+ "integrity": "sha512-PUPQcMhMGRAslLcvtlPz/kmzBEWPhLdgLFrL7pLNepBL6dX0lWj4WD2cUYVgYCuT3jxvghYFg81cDTj44DhetQ==",
+ "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.4",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.4.tgz",
+ "integrity": "sha512-yrfmJHIpDG7taCpqKjT1G5B6q3O2K+RN8/fgNf0lTjCwiPbQ0ei6vXX9ZjQR+7ld8Tr7Z5xmyMnZ8YJrphWQUw==",
+ "license": "MIT",
+ "dependencies": {
+ "react-router": "7.18.4"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
"node_modules/rolldown": {
"version": "1.2.12",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.12.tgz",
@@ -3233,6 +3285,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/package.json b/package.json
index c8d4b3a..0d846ec 100644
--- a/package.json
+++ b/package.json
@@ -10,12 +10,13 @@
"preview": "vite preview"
},
"dependencies": {
- "dotenv": "^18.0.6",
- "pg": "^8.23.1",
"@apollo/client": "^4.3.2",
+ "dotenv": "^18.0.6",
"graphql": "^17.0.2",
+ "pg": "^8.23.1",
"react": "^19.2.8",
- "react-dom": "^19.2.8"
+ "react-dom": "^19.2.8",
+ "react-router-dom": "^7.18.4"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
diff --git a/src/App.tsx b/src/App.tsx
index c57c43e..c69cdfd 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,79 +1,13 @@
-import './App.css'
-import albumData from './mock/albums.json'
-import type { Album } from './types/album'
+import { Routes, Route } from 'react-router-dom'
+import CataloguePage from './pages/CataloguePage'
+import AlbumDetailPage from './pages/AlbumDetailPage'
function App() {
- const albums: Album[] = albumData as Album[]
-
return (
- {album.artist} {album.releaseYear}Rating
-
-
-
-
-
- {album.title}
-
{album.artist}
+{album.releaseYear}
+