import React, { Component } from "react"; import Button from "@mui/material/Button"; import ButtonGroup from "@mui/material/ButtonGroup"; import IconButton from "@mui/material/IconButton"; import Typography from "@mui/material/Typography"; import Box from "@mui/material/Box"; import Tooltip from "@mui/material/Tooltip"; import TextField from "@mui/material/TextField"; import AddIcon from "@mui/icons-material/Add"; import RemoveIcon from "@mui/icons-material/Remove"; import ShoppingCartIcon from "@mui/icons-material/ShoppingCart"; import DeleteIcon from "@mui/icons-material/Delete"; import { withI18n } from "../i18n/withTranslation.js"; if (!Array.isArray(window.cart)) window.cart = []; class AddToCartButton extends Component { constructor(props) { super(props); if (!Array.isArray(window.cart)) window.cart = []; this.state = { quantity: window.cart.find((i) => i.id === this.props.id) ? window.cart.find((i) => i.id === this.props.id).quantity : 0, isEditing: false, editValue: "", }; } componentDidMount() { this.cart = () => { if (!Array.isArray(window.cart)) window.cart = []; const item = window.cart.find((i) => i.id === this.props.id); const newQuantity = item ? item.quantity : 0; if (this.state.quantity !== newQuantity) this.setState({ quantity: newQuantity }); }; window.addEventListener("cart", this.cart); } componentWillUnmount() { window.removeEventListener("cart", this.cart); } handleIncrement = () => { if (!window.cart) window.cart = []; const idx = window.cart.findIndex((item) => item.id === this.props.id); if (idx === -1) { window.cart.push({ id: this.props.id, name: this.props.name, seoName: this.props.seoName, pictureList: this.props.pictureList, price: this.props.price, fGrundPreis: this.props.fGrundPreis, cGrundEinheit: this.props.cGrundEinheit, quantity: 1, weight: this.props.weight, vat: this.props.vat, versandklasse: this.props.versandklasse, availableSupplier: this.props.availableSupplier, komponenten: this.props.komponenten, available: this.props.available }); } else { window.cart[idx].quantity++; } window.dispatchEvent(new CustomEvent("cart")); }; handleDecrement = () => { if (!window.cart) window.cart = []; const idx = window.cart.findIndex((item) => item.id === this.props.id); if (idx !== -1) { if (window.cart[idx].quantity > 1) { window.cart[idx].quantity--; } else { window.cart.splice(idx, 1); } window.dispatchEvent(new CustomEvent("cart")); } }; handleClearCart = () => { if (!window.cart) window.cart = []; const idx = window.cart.findIndex((item) => item.id === this.props.id); if (idx !== -1) { window.cart.splice(idx, 1); window.dispatchEvent(new CustomEvent("cart")); } }; handleEditStart = () => { this.setState({ isEditing: true, editValue: this.state.quantity > 0 ? this.state.quantity.toString() : "", }); }; handleEditChange = (event) => { // Only allow numbers const value = event.target.value.replace(/[^0-9]/g, ""); this.setState({ editValue: value }); }; handleEditComplete = () => { let newQuantity = parseInt(this.state.editValue, 10); if (isNaN(newQuantity) || newQuantity < 0) { newQuantity = 0; } if (!window.cart) window.cart = []; const idx = window.cart.findIndex((item) => item.id === this.props.id); if (idx !== -1) { window.cart[idx].quantity = newQuantity; window.dispatchEvent( new CustomEvent("cart", { detail: { id: this.props.id, quantity: newQuantity }, }) ); } this.setState({ isEditing: false }); }; handleKeyPress = (event) => { if (event.key === "Enter") { this.handleEditComplete(); } }; toggleCart = () => { // Dispatch an event that Header.js can listen for to toggle the cart window.dispatchEvent(new CustomEvent("toggle-cart")); }; render() { const { quantity, isEditing, editValue } = this.state; const { available, size, incoming, availableSupplier } = this.props; // Button is disabled if product is not available if (!available) { if (incoming) { return ( ); } // If availableSupplier is 1, handle both quantity cases if (availableSupplier === 1) { // If no items in cart, show simple "Add to Cart" button with yellowish green if (quantity === 0) { return ( ); } // If items are in cart, show quantity controls with yellowish green if (quantity > 0) { return ( {isEditing ? ( e.target.select()} size="small" variant="standard" inputProps={{ style: { textAlign: "center", width: "30px", fontSize: "14px", padding: "2px", fontWeight: "bold", }, "aria-label": "quantity", }} sx={{ my: -0.5 }} /> ) : ( {quantity} )} {this.props.cartButton && ( )} ); } } return ( ); } // If no items in cart, show simple "Add to Cart" button if (quantity === 0) { return ( ); } // If items are in cart, show quantity controls return ( {isEditing ? ( e.target.select()} size="small" variant="standard" inputProps={{ style: { textAlign: "center", width: "30px", fontSize: "14px", padding: "2px", fontWeight: "bold", }, "aria-label": "quantity", }} sx={{ my: -0.5 }} /> ) : ( {quantity} )} {this.props.cartButton && ( )} ); } } export default withI18n()(AddToCartButton);