import Head from 'next/head' import Image from 'next/image' import styles from '@/styles/Home.module.css' import { useEffect, useState } from 'react' import Card from '@mui/material/Card'; import CardActions from '@mui/material/CardActions'; import CardContent from '@mui/material/CardContent'; import CardMedia from '@mui/material/CardMedia'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; import DeleteIcon from '@mui/icons-material/Delete'; import { IconButton, ToggleButton, ToggleButtonGroup } from '@mui/material'; import { Menu } from '@material-ui/icons'; import useDynamicRefs from 'use-dynamic-refs'; import { useSession } from 'next-auth/react'; export default function PurchasePage() { const { data: session } = useSession() let [menu, setMenu] = useState({}) let [cart, setCart] = useState({}) let [variationSelector, setVariationSelector] = useState({}) const [getRef, setRef] = useDynamicRefs(); function confirmOrder() { let finalCartFull = {...cart}; let finalCart = {} // console.log(finalCart) Object.keys(finalCartFull).forEach((category, categoryIdx) => { finalCart[category] = {} // console.log(finalCart[category]) Object.keys(finalCartFull[category]).forEach((itemName, itemIdx) => { // console.log(JSON.stringify(finalCartFull[category][itemName]) == "[]") if(JSON.stringify(finalCartFull[category][itemName]) == "[]") { return; } finalCart[category][itemName] = finalCartFull[category][itemName] // console.log(`${category}: ${itemName}`) }) }) Object.keys(finalCart).forEach((category, idx) => { if(JSON.stringify(finalCart[category]) == "{}") { delete finalCart[category] } }) console.log(finalCart) } async function getMenu() { let res = await fetch(`/api/data`, { method: 'GET' }) let jsonResponse = await res.json() setMenu(JSON.parse(JSON.stringify(jsonResponse))); let variation = {} let carttemp = {} Object.keys(jsonResponse).forEach((category, idx) => { variation[category] = {} carttemp[category] = {} jsonResponse[category].forEach((item, idx2) => { carttemp[category][item["name"]] = [] if(item["variations"].length > 0) { variation[category][item["name"]] = item["variations"][0] } }) }) setVariationSelector(variation) setCart(carttemp) // console.log(variation) } function addToCartItem(item, category) { let carttemp = {...cart}; carttemp[category][item].push(variationSelector[category][item]) setCart(carttemp) } function removeCartItem(item, category, index) { let carttemp = {...cart}; carttemp[category][item].splice(index, 1) setCart(carttemp) } function addToCartItemVariation(item, category, variation) { let carttemp = {...cart}; carttemp[category][item].push(variation) setCart(carttemp) } function removeCartItemVariation(item, category, variation) { let carttemp = {...cart}; let setidx = -1; cart[category][item].forEach((val, idx) => { if(val == variation) { setidx = idx; return; } }) if(setidx != -1) { carttemp[category][item].splice(setidx, 1) } setCart(carttemp) } function getAmountOfItemsWithVariation(item, category, variation) { let amount = 0 cart[category][item].forEach((item, idx) => { if(item == variation) { amount++; } }) return amount } function getCartItem(item, category) { return cart[category][item] } function getCategoryWithItem(item) { // console.log(Object.keys(cart)) Object.keys(menu).forEach((category) => { menu[category].forEach((val) => { // console.log(`${item} ${val["name"]}`) if(val["name"] == item) { console.log(`${category} || ${item} || ${val["name"]}`) return category } }) }) } function getVariationSelectorValue(item, category) { return variationSelector[category][item] } function setVariationSelectorValue(item, category, value) { if(value == undefined) { return; } let variation = {...variationSelector}; variation[category][item] = value; setVariationSelector(variation); } function getCartAsList() { let cartList = [] Object.keys(cart).forEach((category, idx) => { Object.keys(cart[category]).forEach((itemName) => { let cartItem = cart[category][itemName] if(JSON.stringify(cartItem) == "[]") { return; } cartList.push({ "menu": menu[category].find((e) => e.name == itemName), "cart": cartItem, "category": category, "item": itemName }) }) }) return cartList } function getTotalPrice() { let totalPrice = 0.0 Object.keys(cart).forEach((category, idx) => { Object.keys(cart[category]).forEach((itemName) => { let cartItem = cart[category][itemName] if(JSON.stringify(cartItem) == "[]") { return; } let menuItem = menu[category].find((e) => e.name == itemName) cartItem.forEach(() => { totalPrice += parseFloat(menuItem["price"]) }) }) }) return totalPrice } useEffect(() => { getMenu(); }, []) let [linkMenu, setLinkMenu] = useState(false) return ( <> McDonalds { linkMenu ?
{ Object.keys(menu).map((category, idx) => { return (
getRef(category).current.scrollIntoView({ behavior: 'smooth' } ) }> {category}
) }) }
getRef("checkout").current.scrollIntoView({ behavior: 'smooth' })}> Checkout
{session.user.name}
: "" }
{ Object.keys(menu).map((val, idx) => { return (

{val}

); }) }

Checkout

{ getCartAsList().map((item, idx) => { // console.log(`${item.menu.variations.length} vari`) if(item.menu.variations.length == 0) { return ( ) } return item["menu"]["variations"].map((variation, variationIdx) => { if(getAmountOfItemsWithVariation(item["menu"]["name"], item["category"], variation) == 0) { console.log('asd') return; } return ( ) }) }) }
Artikel Mängd Pris
{item["menu"]["name"]} {item["cart"].length} {parseFloat(item["menu"]["price"]) * item["cart"].length} kr
{item["menu"]["name"]} ({variation})
{getAmountOfItemsWithVariation(item["menu"]["name"], item["category"], variation)}
{parseFloat(item["menu"]["price"]) * getAmountOfItemsWithVariation(item["menu"]["name"], item["category"], variation)} kr
Total Price: {getTotalPrice()} kr
(Priset kan variera lite)
) }