import React, { useRef, useEffect, useState } from "react"; import styles from "./ItemType.module.css"; import { Coffee, CupSoda, CakeSlice, Utensils, Grid2X2, Plus } from 'lucide-react'; export default function ItemType({ onClick, onCreate, blank, name, imageUrl, selected, rectangular, }) { const inputRef = useRef(null); const [namee, setName] = useState(name); const [selectedImage, setSelectedImage] = useState(null); const [previewUrl, setPreviewUrl] = useState(imageUrl); // Effect to update local state when name prop changes useEffect(() => { setName(name); }, [name]); useEffect(() => { if (blank && inputRef.current) { inputRef.current.focus(); } }, [blank]); useEffect(() => { if (selectedImage) { const reader = new FileReader(); reader.onloadend = () => { onClick(reader.result, selectedImage); }; reader.readAsDataURL(selectedImage); } else { setPreviewUrl(imageUrl); } }, [selectedImage, imageUrl]); const handleImageChange = (e) => { setSelectedImage(e.target.files[0]); console.log(e.target.files[0]); e.target.value = null; // This clears the input }; const handleNameChange = (e) => { setName(e.target.value); }; const handleCreate = async () => { if (!selectedImage) { console.error("No image selected"); return; } onCreate(namee, selectedImage); }; const formatName = (val) => { if (!val || typeof val !== 'string') return val; return val .toLowerCase() .replace(/\b\w/g, (c) => c.toUpperCase()); }; const iconImageUrl = imageUrl === 'uploads/assets/All.png' ? 'icon:all' : imageUrl; return (
onClick(iconImageUrl)) : onClick } className={styles["item-type-rect"]} style={{ // Remove lift-up effect; only color changes when selected backgroundColor: selected ? 'var(--brand-sage, #6B8F71)' : '#ffffff', border: selected ? '1px solid var(--brand-sage, #6B8F71)' : '1px solid #e6e6e6', color: selected ? '#ffffff' : '#4a6b5a' }} > {iconImageUrl === 'uploads/assets/All.png' ? ( Created by potrace 1.16, written by Peter Selinger 2001-2019 ) : (iconImageUrl && typeof iconImageUrl === 'string' && iconImageUrl.startsWith('icon:')) ? (
) : ( {namee} )} {blank && rectangular && (
)}
{!rectangular && !blank && ( )}
); } function LucideCategoryIcon({ name, iconKey }) { const key = pickIconKey(name, iconKey); const size = '56%'; switch (key) { case 'coffee': return ; case 'drink': return ; case 'dessert': return ; case 'food': return ; case 'all': return ; case 'plus': return ; default: return ; } } function pickIconKey(name, iconKey) { const n = (name || '').toLowerCase(); if (iconKey === 'plus') return 'plus'; if (iconKey === 'all') return 'all'; if (/(kopi|coffee|espresso|latte|americano|kapal|brew)/.test(n)) return 'coffee'; if (/(teh|tea|drink|minum|soda|juice|jus|milk|susu|lemon)/.test(n)) return 'drink'; if (/(dessert|cake|kue|manis|ice|es krim|ice-cream)/.test(n)) return 'dessert'; if (/(food|makan|snack|cemilan|nasi|mie|noodle|soup|sup|ayam|daging|ikan|roti|sandwich|burger|pizza)/.test(n)) return 'food'; return 'food'; }