import { useDispatch, useSelector } from "react-redux"; import { RootState } from "../store"; import { useState, useEffect } from "react"; import { getTemplates, Template, Variant } from "../api/templates"; import { APIError, APIMissingTokenError } from "../api/client"; import LoadingBar from "./LoadingBar"; import { Link } from "react-router-dom"; import styled from "styled-components"; import Button from "./forms/Button"; import { removeCartItem, CartItem as CartItemType } from "../slices/cart"; interface CartItemProps { product: Template, variant: Variant, quantity: number, cartItem: CartItemType } const CartItemHolder = styled.div` display: flex; align-items: center; span { flex-grow: 1; } div { text-align: right; margin-right: 20px; } h3, p { margin: 0; } img { width: 20%; background-color: ${({theme}) => theme.backgroundColor}; } margin-bottom: 10px; `; const CartItem: React.FC = ({ product, variant, quantity, cartItem }: CartItemProps) => { /* return
{product.title} - {variant.size} / {variant.colour} - {quantity} unit{quantity === 1 ? "" : "s"}
*/ const dispatch = useDispatch(); return

{product.title}

Size: {variant.size}

{variant.colour &&

Colour: {variant.colour}

}

Quantity: {quantity}

; }; const CartConfirm = () => { const cart = useSelector((state: RootState) => state.cart); /* TODO: Refactor to hook */ const voucherToken = useSelector((state: RootState) => state.authorization.voucherToken); const [storeItems, setStoreItems] = useState(null); const [permissionDenied, setPermissionDenied] = useState(false); const [loading, setLoading] = useState(true); useEffect(() => { getTemplates(true).then((items) => { setStoreItems(items); setLoading(false); }).catch((err: unknown) => { setStoreItems([]); setLoading(false); if (err instanceof APIMissingTokenError) { setPermissionDenied(true); } else if (err instanceof APIError) { if ([401, 403].includes(err.status)) { setPermissionDenied(true); } } }); }, [voucherToken]); return <> {loading && } {permissionDenied && ( <>

You need to have a valid voucher code to access the store.

Redeem a voucher )} {storeItems && cart.cart.map((cartItem) => { const item = storeItems.find((v) => v.template_id === cartItem.product_template_id); const variant = item?.variants?.find((variant) => variant.variant_id === cartItem.variant_id); if (item && variant) { return ; } })} {cart.cart.length === 0 && <> You have no items in your cart!

Return to the store page to add some items

} ; }; export default CartConfirm;