You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

103 lines
2.3 KiB

package react.store;
import react.ReactComponent;
import react.ReactMacro.jsx;
import Common;
typedef CartProps = {
var order:OrderSimple;
var addToCart:ProductInfo -> Int -> Void;
var removeFromCart:ProductInfo -> ?Int -> Void;
var submitOrder:OrderSimple -> Void;
};
class Cart extends react.ReactComponentOfProps<CartProps>
{
function addToCart(product:ProductInfo, quantity:Int):Void {
props.addToCart(product, quantity);
}
function removeFromCart(product:ProductInfo, quantity:Int):Void {
props.removeFromCart(product, quantity);
}
function removeAllFromCart(product:ProductInfo):Void {
props.removeFromCart(product);
}
function submitOrder():Void {
props.submitOrder(props.order);
}
override public function render(){
return jsx('
<div className="cart">
<h3>Ma Commande</h3>
${renderProducts()}
${renderFooter()}
</div>
');
}
function renderProducts() {
var productsToOrder = props.order.products.map(function(product:ProductWithQuantity) {
var quantity = product.quantity;
var product = product.product;
return jsx('
<div className="product-to-order" key=${product.name}>
<div>${product.name}</div>
<div>$quantity</div>
<div className="cart-action-buttons">
<div onClick=${function(){
this.addToCart(product, 1);
}}>
+
</div>
<div onClick=${function(){
this.removeFromCart(product, 1);
}}>
-
</div>
<div onClick=${function(){
this.removeAllFromCart(product);
}}>
x
</div>
</div>
</div>
');
});
return jsx('
<div className="products-to-order">
${productsToOrder}
</div>
');
}
function renderFooter() {
var buttonClasses = ["order-button"];
var submit = submitOrder;
if (props.order.products.length == 0) {
buttonClasses.push("order-button--disabled");
submit = null;
}
return jsx('
<div className="cart-footer">
<div className="total">
Total
<div>${props.order.total} </div>
</div>
<div className=${buttonClasses.join(" ")} onClick=$submit>Commander</div>
</div>
');
}
}