import React, { useState, useRef, useEffect } from "react"; import styles from "./Item.module.css"; const Item = ({ blank, forCart, forInvoice, portrait, hideDetails, name: initialName, description: initialDescription, price: initialPrice, promoPrice, qty: initialQty, imageUrl, imageFile, id, onPlusClick, onNegativeClick, handleCreateItem, handleUpdateItem, onRemoveClick, isAvailable, isBeingEdit, last }) => { const [selectedImage, setSelectedImage] = useState(imageFile); const [previewUrl, setPreviewUrl] = useState(imageUrl); const [itemQty, setItemQty] = useState(blank ? 0 : initialQty); const [itemName, setItemName] = useState(initialName); const [itemPrice, setItemPrice] = useState(initialPrice); const [itemDescription, setItemDescription] = useState(initialDescription); const fileInputRef = useRef(null); useEffect(() => { console.log(imageUrl); console.log(selectedImage); console.log(imageFile) if (imageFile) { setPreviewUrl(imageFile); } else { setPreviewUrl(imageUrl); } }, [imageFile, imageUrl]); const handlePlusClick = () => { if (!blank) onPlusClick(id); setItemQty(itemQty + 1); }; const handleNegativeClick = () => { if (itemQty > 0) { if (!blank) onNegativeClick(id); setItemQty(itemQty - 1); } }; const handleCreate = () => { handleCreateItem(itemName, itemPrice, selectedImage, previewUrl, itemDescription, promoPrice); }; const handleUpdate = () => { handleUpdateItem(itemName, itemPrice, selectedImage, itemDescription, promoPrice); }; const handleRemoveClick = () => { onRemoveClick(id); }; const handleImageClick = () => { fileInputRef.current.click(); }; const handleFileChange = (event) => { const file = event.target.files[0]; if (file) { setSelectedImage(file); } }; const formatCurrency = (value) => { const num = Number(value) || 0; return num.toLocaleString('id-ID'); }; const handlePriceChange = (event) => { setItemPrice(event.target.value); }; const handleQtyChange = (event) => { const newQty = parseInt(event.target.value, 10); if (!isNaN(newQty)) { setItemQty(newQty); } }; const handleNameChange = (event) => { setItemName(event.target.value); }; const toTitleCase = (str) => { if (!str) return str; return String(str) .toLowerCase() .replace(/(^|[\s\-/'])([a-zA-Z\u00C0-\u024F])/g, (m, p1, p2) => p1 + p2.toUpperCase()); }; const displayName = toTitleCase(itemName); return (
{!forInvoice && (
{ currentTarget.onerror = null; currentTarget.src = "https://png.pngtree.com/png-vector/20221125/ourmid/pngtree-no-image-available-icon-flatvector-illustration-pic-design-profile-vector-png-image_40966566.jpg"; }} alt={itemName} style={{ filter: !isAvailable ? "grayscale(100%)" : "none" }} className={styles.imageContainer} /> {promoPrice && promoPrice != 0 && promoPrice != '' && (
Promo
)} {portrait && ( <>
{displayName}
{(promoPrice && promoPrice != 0 && promoPrice != '') ? ( <> Rp {formatCurrency(initialPrice)} Rp {formatCurrency(promoPrice)} ) : ( Rp {formatCurrency(initialPrice)} )}
{itemQty}
)}
)} {forInvoice && (

x

{itemQty}

Rp {formatCurrency(itemQty * (promoPrice > 0 ? promoPrice : itemPrice))}

)} {forCart && (
)}
{null}
); }; export default Item;