import React, { useState, useRef } from "react"; import styles from "./ItemLister.module.css"; import Item from "./Item"; import Switch from "react-switch"; import { getItemQtyFromCart, updateItemQtyInCart, removeItemFromCart, } from "../helpers/cartHelpers.js"; import { getImageUrl, createItem, updateItemType, deleteItemType, } from "../helpers/itemHelper.js"; const ItemLister = ({ itemTypeId, refreshTotal, shopId, shopOwnerId, user, typeName, itemList, forCart, forInvoice, isEditMode, }) => { const [items, setItems] = useState( itemList.map((item) => ({ ...item, qty: getItemQtyFromCart(shopId, item.itemId), })) ); const [isEdit, setIsEditing] = useState(false); const [isAddingNewItem, setIsAddingNewItem] = useState(false); const [editedTypeName, setEditedTypeName] = useState(typeName); const typeNameInputRef = useRef(null); const handlePlusClick = (itemId) => { const updatedItems = items.map((item) => { if (item.itemId === itemId) { const newQty = item.qty + 1; updateItemQtyInCart(shopId, itemId, newQty); if (forCart) refreshTotal(); return { ...item, qty: newQty }; } return item; }); setItems(updatedItems); }; const handleNegativeClick = (itemId) => { const updatedItems = items .map((item) => { if (item.itemId === itemId && item.qty > 0) { const newQty = item.qty - 1; updateItemQtyInCart(shopId, itemId, newQty); if (forCart) { refreshTotal(); return newQty > 0 ? { ...item, qty: newQty } : null; } else return { ...item, qty: newQty }; } return item; }) .filter((item) => item !== null); setItems(updatedItems); }; const handleRemoveClick = (itemId) => { removeItemFromCart(shopId, itemId); const updatedItems = items.filter((item) => item.itemId !== itemId); setItems(updatedItems); if (!forCart) return; refreshTotal(); }; const toggleEditTypeItem = () => { setIsEditing((prev) => !prev); if (!isEdit) { setTimeout(() => { typeNameInputRef.current.focus(); }, 0); } }; const handleSaveType = async () => { try { await updateItemType(shopId, itemTypeId, typeNameInputRef.current.value); setIsEditing(false); } catch (error) { console.error("Failed to save item type:", error); } }; const handleRemoveType = async () => { try { await deleteItemType(shopId, itemTypeId); setIsEditing(false); // Optionally, you might want to refresh or update the parent component state here } catch (error) { console.error("Failed to delete item type:", error); } }; const toggleAddNewItem = () => { setIsAddingNewItem((prev) => !prev); }; return ( <> {(items.length > 0 || (user && user.roleId == 1 && user.userId == shopOwnerId)) && (