import { getBookUrl } from "../config/api";
const UpdateBook = ({ onUpdate = (f) => f }) => {
const [book, setBook] = useState({
title: "",
author: "",
numberInStock: "",
price: "",
rating: "",
publishYear: "",
like: "",
});
const { id } = useParams();
useEffect(() => {
const fetchData = async () => {
try {
const { data } = await axios.get(getBookUrl(id));
const date = new Date(data.publishYear).toISOString().slice(0, 10);
setBook({ ...data, publishYear: date }); //data is the existing book in the DB
} catch (err) {
console.log(
There is an ERROR in fetching ${err.message}
);
}
};
fetchData();
return () => {
//clean up
};
}, [id]);
const navigate = useNavigate();
const submitForm = (e) => {
e.preventDefault();
onUpdate(book);
setBook({
title: "",
author: "",
numberInStock: "",
price: "",
rating: "",
publishYear: "",
like: "",
});
navigate("/");
};
return (
<div>
<h1>Please enter the details of the updated Book here..</h1>
<form onSubmit={submitForm} method="post">
<div className="form-group">
<label htmlFor="title" className="p-3">
Book Title
</label>
<input
type="text"
name="title"
id="title"
className="form-control"
placeholder="Enter a Title"
onChange={(event) => setBook({ ...book, title: event.target.value })}
value={book.title}
required
/>
</div>
<div className="form-group">
<label htmlFor="author" className="p-3">
Book Author
</label>
<input
type="text"
name="author"
id="author"
className="form-control"
placeholder="Enter an Author"
onChange={(event) => setBook({ ...book, author: event.target.value })}
value={book.author}
required
/>
</div>
<div className="form-group">
<label htmlFor="numberInStock" className="p-3">
Number In Stock
</label>
<input
type="number"
name="numberInStock"
id="numberInStock"
className="form-control"
placeholder="Number In Stock"
onChange={(event) => setBook({ ...book, numberInStock: event.target.value })}
value={book.numberInStock}
required
/>
</div>
<div className="form-group">
<label htmlFor="price" className="p-3">
Book Price
</label>
<input
type="text"
name="price"
id="price"
className="form-control"
placeholder="Enter a Price"
onChange={(event) => setBook({ ...book, price: event.target.value })}
value={book.price}
required
/>
</div>
<div className="form-group">
<label htmlFor="rating" className="p-3">
Book Rating
</label>
<input
type="number"
name="rating"
id="rating"
className="form-control"
placeholder="Enter a Rating"
onChange={(event) => setBook({ ...book, rating: event.target.value })}
value={book.rating}
required
/>
</div>
<div className="form-group">
<label htmlFor="publishYear" className="p-3">
Book Publish Year
</label>
<input
type="date"
name="publishYear"
id="publishYear"
className="form-control"
placeholder="Enter a Publish Year"
onChange={(event) => setBook({ ...book, publishYear: event.target.value })}
value={book.publishYear}
required
/>
</div>
<div className="form-group">
<label className="p-3 d-block">Like Status (True/False)</label>
<div className="form-check form-check-inline">
<input
type="radio"
name="like"
id="like-true"
className="form-check-input"
checked={book.like === true}
onChange={() => setBook({ ...book, like: true })}
required
/>
<label htmlFor="like-true" className="form-check-label">
True
</label>
</div>
<div className="form-check form-check-inline">
<input
type="radio"
name="like"
id="like-false"
className="form-check-input"
checked={book.like === false}
onChange={() => setBook({ ...book, like: false })}
required
/>
<label htmlFor="like-false" className="form-check-label">
False
</label>
</div>
</div>
<button className="m-5 p-3 w-25">UPDATE THE BOOK</button>
</form>
</div>
);
};
export default UpdateBook;