diff --git a/my-library/src/App.jsx b/my-library/src/App.jsx index 7a4a919..06cbff5 100644 --- a/my-library/src/App.jsx +++ b/my-library/src/App.jsx @@ -10,6 +10,7 @@ import BookDetail from './pages/BookDetail'; import Customers from './pages/Customers'; import Login from './pages/Login'; import Reservations from './pages/Reservations'; +import Returns from './pages/Returns'; import { useAuth } from './context/AuthContext'; function RequireAuth({ children }) { @@ -37,6 +38,7 @@ export default function App() { } /> } /> } /> + } /> } /> diff --git a/my-library/src/components/Navbar.jsx b/my-library/src/components/Navbar.jsx index 882960c..4cdd047 100644 --- a/my-library/src/components/Navbar.jsx +++ b/my-library/src/components/Navbar.jsx @@ -22,6 +22,7 @@ export default function Navbar() { {user?.role === 'user' &&
  • Mes réservations
  • } {user &&
  • Mon compte
  • } {user?.role === 'admin' &&
  • Clients
  • } + {user?.role === 'admin' &&
  • Retours
  • }
    diff --git a/my-library/src/context/ReturnContext.js b/my-library/src/context/ReturnContext.js new file mode 100644 index 0000000..edf2ff1 --- /dev/null +++ b/my-library/src/context/ReturnContext.js @@ -0,0 +1,36 @@ +import { createContext, useContext, useState } from 'react'; + +const ReturnContext = createContext(null); + +export function ReturnProvider({ children }) { + const [returns, setReturns] = useState(() => { + const saved = localStorage.getItem('returns'); + return saved ? JSON.parse(saved) : []; + }); + + function addReturn(bookId, bookTitle, customerPhone, reason) { + const bookReturn = { + returnId: crypto.randomUUID(), + bookId, + bookTitle, + customerPhone, + reason, + status: 'PROCESSED', + returnedAt: new Date().toISOString(), + }; + const updated = [...returns, bookReturn]; + setReturns(updated); + localStorage.setItem('returns', JSON.stringify(updated)); + return bookReturn; + } + + return ( + + {children} + + ); +} + +export function useReturns() { + return useContext(ReturnContext); +} diff --git a/my-library/src/index.js b/my-library/src/index.js index c851583..ae97fdc 100644 --- a/my-library/src/index.js +++ b/my-library/src/index.js @@ -4,6 +4,7 @@ import { BrowserRouter } from 'react-router-dom'; import { AuthProvider } from './context/AuthContext'; import { ReservationProvider } from './context/ReservationContext'; import { ReviewProvider } from './context/ReviewContext'; +import { ReturnProvider } from './context/ReturnContext'; import App from './App'; import './styles/global.css'; @@ -14,7 +15,9 @@ root.render( - + + + diff --git a/my-library/src/pages/Returns.jsx b/my-library/src/pages/Returns.jsx new file mode 100644 index 0000000..154af00 --- /dev/null +++ b/my-library/src/pages/Returns.jsx @@ -0,0 +1,96 @@ +import { useState } from 'react'; +import { useReturns } from '../context/ReturnContext'; +import { getBooks } from '../api/books'; +import { useEffect } from 'react'; + +export default function Returns() { + const { returns, addReturn } = useReturns(); + const [books, setBooks] = useState([]); + const [form, setForm] = useState({ bookId: '', customerPhone: '', reason: '' }); + const [message, setMessage] = useState(null); + + useEffect(() => { + getBooks(0, 100).then(res => setBooks(res.data.content)).catch(console.error); + }, []); + + function handleChange(e) { + const { name, value } = e.target; + setForm(f => ({ ...f, [name]: value })); + } + + function handleSubmit(e) { + e.preventDefault(); + const book = books.find(b => String(b.isbn) === String(form.bookId)); + const bookTitle = book ? book.title : form.bookId; + addReturn(form.bookId, bookTitle, form.customerPhone, form.reason); + setMessage({ success: true, text: 'Retour enregistré avec succès !' }); + setForm({ bookId: '', customerPhone: '', reason: '' }); + } + + return ( +
    +

    Gestion des retours

    + +
    +

    Enregistrer un retour

    +
    + + +