add item to cart by cart context
This commit is contained in:
parent
aa91bcea73
commit
cae3ccc644
@ -1,9 +1,22 @@
|
||||
import { useContext } from "react";
|
||||
import classes from "./MealItem.module.css";
|
||||
import MealItemForm from "./MealItemForm";
|
||||
import CartContext from "../../../store/cart-context";
|
||||
|
||||
const MealItem = (props) => {
|
||||
const price = `$${props.price.toFixed(2)}`;
|
||||
|
||||
const cartCtx = useContext(CartContext);
|
||||
|
||||
const addToCartHandler = (amount) => {
|
||||
cartCtx.addItem({
|
||||
id: props.id,
|
||||
name: props.name,
|
||||
amount: amount,
|
||||
price: props.price,
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<li className={classes.meal}>
|
||||
<div>
|
||||
@ -12,7 +25,7 @@ const MealItem = (props) => {
|
||||
<div className={classes.price}>{price}</div>
|
||||
</div>
|
||||
<div>
|
||||
<MealItemForm id={props.id} />
|
||||
<MealItemForm id={props.id} onAddToCart={addToCartHandler} />
|
||||
</div>
|
||||
</li>
|
||||
);
|
||||
|
@ -1,10 +1,33 @@
|
||||
import classes from "./MealItemForm.module.css";
|
||||
import Input from "../../UI/Input";
|
||||
import { useRef, useState } from "react";
|
||||
|
||||
const MealItemForm = (props) => {
|
||||
const amountInputRef = useRef();
|
||||
const [amountIsValid, setAmountIsValid] = useState(true);
|
||||
|
||||
const submitHandler = (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
const enteredAmount = amountInputRef.current.value;
|
||||
const enteredAmountNumber = +enteredAmount;
|
||||
|
||||
if (
|
||||
enteredAmount.trim().length === 0 ||
|
||||
enteredAmountNumber < 1 ||
|
||||
enteredAmountNumber > 5
|
||||
) {
|
||||
setAmountIsValid(false);
|
||||
return;
|
||||
}
|
||||
|
||||
props.onAddToCart(enteredAmountNumber);
|
||||
};
|
||||
|
||||
return (
|
||||
<form className={classes.form}>
|
||||
<form className={classes.form} onSubmit={submitHandler}>
|
||||
<Input
|
||||
ref={amountInputRef}
|
||||
label="Amount"
|
||||
input={{
|
||||
id: "amount_" + props.id,
|
||||
@ -16,6 +39,7 @@ const MealItemForm = (props) => {
|
||||
}}
|
||||
/>
|
||||
<button>+ Add</button>
|
||||
{!amountIsValid && <p>Please enter a valid amount (1-5).</p>}
|
||||
</form>
|
||||
);
|
||||
};
|
||||
|
@ -1,12 +1,13 @@
|
||||
import React from "react";
|
||||
import classes from "./Input.module.css";
|
||||
|
||||
const Input = (props) => {
|
||||
const Input = React.forwardRef((props, ref) => {
|
||||
return (
|
||||
<div className={classes.input}>
|
||||
<label htmlFor={props.input.id}>{props.label}</label>
|
||||
<input id={props.input.id} {...props.input} />
|
||||
<input ref={ref} id={props.input.id} {...props.input} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
});
|
||||
|
||||
export default Input;
|
||||
|
Loading…
Reference in New Issue
Block a user