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}
{
menu[val].map((val2) => {
// console.log(val2)
return
{/*för att få alla cards lika stora >> height={"7ch"}*/}
{val2["name"]}
{val2["price"]} kr
{ val2["url"] != "" ?
Mer info
: "" }
{/* {
getCartItem(val2["name"], val).map((cartItem, cartItemIdx) => {
return (
)
})
} */}
{
{
setVariationSelectorValue(val2["name"], val, alignement)
}}
value={getVariationSelectorValue(val2["name"], val)}
sx={val2["variations"].length != 0 ? {visibility: "shown"} : {}}
>
{val2["variations"].map((vari) => {
return(
{vari}
);
})}
}
})
}
);
})
}
Checkout
|
Artikel
|
Mängd
|
Pris
|
{
getCartAsList().map((item, idx) => {
// console.log(`${item.menu.variations.length} vari`)
if(item.menu.variations.length == 0) {
return (
|
{item["menu"]["name"]}
|
{item["cart"].length}
|
{parseFloat(item["menu"]["price"]) * item["cart"].length} kr
|
)
}
return item["menu"]["variations"].map((variation, variationIdx) => {
if(getAmountOfItemsWithVariation(item["menu"]["name"], item["category"], variation) == 0) {
console.log('asd')
return;
}
return (
|
{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)
>
)
}