diff --git a/src/components/ItemLister.js b/src/components/ItemLister.js index 9c59b51..98ed8d8 100644 --- a/src/components/ItemLister.js +++ b/src/components/ItemLister.js @@ -2,6 +2,7 @@ import React, { useEffect, useState, useRef } from "react"; import styles from "./ItemLister.module.css"; import Item from "./Item"; import Switch from "react-switch"; +import { ThreeDots, ColorRing } from "react-loader-spinner"; import { getItemQtyFromCart, updateItemQtyInCart, @@ -13,6 +14,7 @@ import { updateItemType, deleteItemType, } from "../helpers/itemHelper.js"; +import ItemType from "./ItemType.js"; const ItemLister = ({ itemTypeId, @@ -21,6 +23,7 @@ const ItemLister = ({ shopOwnerId, user, typeName, + typeImage, itemList, forCart, forInvoice, @@ -53,7 +56,6 @@ const ItemLister = ({ const [editedTypeName, setEditedTypeName] = useState(typeName); const typeNameInputRef = useRef(null); - const handlePlusClick = (itemId) => { const updatedItems = items.map((item) => { if (item.itemId === itemId) { @@ -99,11 +101,6 @@ const ItemLister = ({ const toggleEditTypeItem = () => { setIsEditing((prev) => !prev); - if (!isEdit) { - setTimeout(() => { - typeNameInputRef.current.focus(); - }, 0); - } }; const handleSaveType = async () => { @@ -126,22 +123,21 @@ const ItemLister = ({ }; useEffect(() => { - if(beingEditedType == itemTypeId)return; - - setOnEditItem(0); + if (beingEditedType == itemTypeId) return; + + setOnEditItem(0); setIsAddingNewItem(false); - console.log(itemTypeId) }, [beingEditedType]); const toggleAddNewItem = () => { + setBeingEditedType(itemTypeId); setIsAddingNewItem((prev) => !prev); setOnEditItem(0); - setBeingEditedType(itemTypeId); }; const editItem = (itemId) => { + setBeingEditedType(itemTypeId); setIsAddingNewItem(false); setOnEditItem(itemId); - setBeingEditedType(itemTypeId); }; const handleChange = async (itemId) => { // Find the item in the current items array @@ -189,45 +185,143 @@ const ItemLister = ({ handleCreateItem(itemName, itemPrice, selectedImage, previewUrl); setIsAddingNewItem(false); }; - + console.log(getImageUrl(typeImage)); + const [selectedImage, setSelectedImage] = useState(null); + const [previewUrl, setPreviewUrl] = useState(""); + useEffect(() => { + if (selectedImage) { + setPreviewUrl(selectedImage); + } else { + setPreviewUrl(getImageUrl(typeImage)); + } + }, [selectedImage]); + const handleImageChange = (e) => { + setSelectedImage(e); + }; return ( <> {(items.length > 0 || (user && (user.cafeId == shopId || user.userId == shopOwnerId))) && ( -
+
{!raw && (
+ {isEdit && } setEditedTypeName(e.target.value)} disabled={!isEdit} /> - {isEditMode && ( - <> - - {isEdit && ( - - )} - - )} + {isEditMode && !isEdit && ( + <> + + + )}
)} + {isEdit && ( +
+ handleImageChange(e)} + imageUrl={getImageUrl("uploads/addnew.png")} + /> + {typeImage != null && !previewUrl.includes(typeImage) && ( + handleImageChange(e)} + imageUrl={getImageUrl(typeImage)} + /> + )} + + handleImageChange(e)} + imageUrl={getImageUrl("uploads/beverage1.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/beverage2.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/beverage3.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/dessert1.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/dessert2.jpg")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/food1.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/food2.jpg")} + /> + + handleImageChange(e)} + imageUrl={getImageUrl("uploads/food3.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/packet1.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/packet2.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/snack1.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/snack2.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/snack3.png")} + /> + handleImageChange(e)} + imageUrl={getImageUrl("uploads/snack4.png")} + /> +
+ )} +
{user && user.roleId == 1 && @@ -274,8 +368,7 @@ const ItemLister = ({ )}
- {isEditMode && onEditItem != item.itemId&& - ( + {isEditMode && onEditItem != item.itemId && (
{isEditMode && ( handlePlusClick(item.itemId)} onNegativeClick={() => handleNegativeClick(item.itemId)} onRemoveClick={() => handleRemoveClick(item.itemId)} - isBeingEdit={ - onEditItem == item.itemId - } + isBeingEdit={onEditItem == item.itemId} isAvailable={item.availability} handleUpdateItem={(name, price, image) => handleUpdateItem(item.itemId, name, price, image) @@ -332,6 +423,42 @@ const ItemLister = ({ )}
+ {isEdit && ( +
+
+ Pengaturan + + + + + + + + + +
+ +
setIsEditing(false)} + > + Kembali +
+
+ )}
)} diff --git a/src/components/ItemLister.module.css b/src/components/ItemLister.module.css index 8a491f8..d0347a4 100644 --- a/src/components/ItemLister.module.css +++ b/src/components/ItemLister.module.css @@ -10,9 +10,30 @@ .item-lister:last-child { margin-bottom: 50px; } +.fullscreen { + position: fixed; /* Keep the container fixed */ + top: 0; /* Adjust the top position as needed */ + bottom: 0; /* Occupy the full height of the viewport */ + left: 0; /* Align to the left */ + right: 0; /* Align to the right */ + background-color: white; /* Background color */ + z-index: 1000; /* Layering */ + overflow-y: auto; /* Allow vertical scrolling */ +} +.grid-container { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + /* padding: 10px; */ + max-height: calc(3 * (25vw - 20px) + 20px); + overflow-y: auto; + height: calc(49vw - 20px); +} + .title-container { display: flex; align-items: center; + justify-content: space-between; } .title { @@ -78,3 +99,59 @@ align-items: center; justify-content: center; } + +.PaymentOption { + overflow-x: hidden; + background-color: white; + display: flex; + flex-direction: column; + justify-content: center; + font-size: calc(10px + 2vmin); + color: rgba(88, 55, 50, 1); + border-radius: 15px 15px 0 0; + + position: fixed; + bottom: 0; + right: 0; + left: 0; + + z-index: 300; +} + +.TotalContainer { + display: flex; + justify-content: space-between; + width: 80vw; + margin: 0 auto; + font-family: "Poppins", sans-serif; + font-weight: 600; + font-style: normal; + font-size: 1.5em; + padding: 10px 0; + margin-bottom: 17px; +} + +.PayButton { + font-family: "Poppins", sans-serif; + font-weight: 500; + font-style: normal; + font-size: 32px; + + width: 80vw; + height: 18vw; + border-radius: 50px; + background-color: rgba(88, 55, 50, 1); + color: white; + border: none; + margin: 0px auto; + cursor: pointer; + margin-bottom: 23px; +} + +.Pay2Button { + text-align: center; + color: rgba(88, 55, 50, 1); + font-size: 1em; + margin-bottom: 25px; + cursor: pointer; +} diff --git a/src/components/ItemType.js b/src/components/ItemType.js index 37ad127..aa17ce4 100644 --- a/src/components/ItemType.js +++ b/src/components/ItemType.js @@ -91,7 +91,7 @@ export default function ItemType({
)}
- {(rectangular || !blank) && ( + {(!rectangular && !blank) && (