diff --git a/my-library/package-lock.json b/my-library/package-lock.json index ecd3eb6..cbb09ed 100644 --- a/my-library/package-lock.json +++ b/my-library/package-lock.json @@ -12,6 +12,7 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^13.5.0", + "axios": "^1.17.0", "react": "^19.2.4", "react-dom": "^19.2.4", "react-router-dom": "^7.13.1", @@ -4804,6 +4805,34 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", @@ -8090,9 +8119,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -13456,6 +13485,15 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/psl": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", diff --git a/my-library/package.json b/my-library/package.json index 89fc2ed..78ab8fe 100644 --- a/my-library/package.json +++ b/my-library/package.json @@ -7,6 +7,7 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^13.5.0", + "axios": "^1.17.0", "react": "^19.2.4", "react-dom": "^19.2.4", "react-router-dom": "^7.13.1", diff --git a/my-library/src/api/books.jsx b/my-library/src/api/books.jsx new file mode 100644 index 0000000..60a4c3a --- /dev/null +++ b/my-library/src/api/books.jsx @@ -0,0 +1,5 @@ +import client from './client'; + +export function getBooks(page = 0, size = 20) { + return client.get('/api/books', { params: { page, size } }); +} \ No newline at end of file diff --git a/my-library/src/api/client.jsx b/my-library/src/api/client.jsx new file mode 100644 index 0000000..f3c220b --- /dev/null +++ b/my-library/src/api/client.jsx @@ -0,0 +1,7 @@ +import axios from 'axios'; + +const client = axios.create({ + baseURL: 'http://localhost:8080', +}); + +export default client; \ No newline at end of file diff --git a/my-library/src/pages/Books.jsx b/my-library/src/pages/Books.jsx index 7ff328f..21b2ebb 100644 --- a/my-library/src/pages/Books.jsx +++ b/my-library/src/pages/Books.jsx @@ -1,3 +1,39 @@ +import { useState, useEffect } from 'react'; +import { getBooks } from '../api/books'; + export default function Books() { - return

Catalogue

; + const [books, setBooks] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + getBooks() + .then((response) => { + console.log(response.data); + setBooks(response.data.content); + }) + .catch((err) => { + console.error(err); + setError("Impossible de charger les livres."); + }) + .finally(() => { + setLoading(false); + }); + }, []); + + if (loading) return

Chargement…

; + if (error) return

{error}

; + + return ( +
+

Catalogue

+ +
+ ); } \ No newline at end of file diff --git a/mylibrary-0.0.1-SNAPSHOT.jar b/mylibrary-0.0.1-SNAPSHOT.jar index 1d0bd39..71d09f3 100644 Binary files a/mylibrary-0.0.1-SNAPSHOT.jar and b/mylibrary-0.0.1-SNAPSHOT.jar differ