import React, { useEffect, useState } from "react"; import { getMaterials } from "../helpers/materialHelpers"; import { createMaterialMutation, getMaterialMutations, } from "../helpers/materialMutationHelpers"; // Keyframes for grow animation const growKeyframes = ` @keyframes grow { 0% { width: 60px; height: 60px; border-top-left-radius: 50%; border-bottom-left-radius: 50%; } 100% { width: 100%; height: auto; border-top-left-radius: 20px; border-bottom-left-radius: 20px; } } `; // Styles const styles = { container: { padding: "20px", maxWidth: "800px", margin: "0 auto", }, heading: { textAlign: "center", }, button: { display: "block", width: "100%", padding: "10px", borderRadius: "5px", border: "none", backgroundColor: "#007bff", color: "white", fontSize: "16px", cursor: "pointer", marginBottom: "20px", transition: "background-color 0.3s ease", }, buttonHover: { backgroundColor: "#0056b3", }, expandingContainer: (expanded) => ({ overflow: "hidden", transition: "all 0.3s ease", animation: expanded ? "grow 0.5s forwards" : "none", marginBottom: "20px", }), materialSelection: { padding: "10px", }, materialList: { display: "flex", flexDirection: "row", overflowX: "auto", // Enable horizontal scrolling overflowY: "hidden", // Prevent vertical scrolling whiteSpace: "nowrap", // Prevent wrapping of items gap: "10px", // Space between items padding: "10px 0", // Padding for better appearance }, materialCard: (selected) => ({ flex: "0 0 auto", // Prevent growing or shrinking minWidth: "100px", // Minimum width of the card maxWidth: "150px", // Maximum width of the card padding: "15px", borderRadius: "10px", border: "1px solid #ddd", backgroundColor: selected ? "#007bff" : "#f9f9f9", color: selected ? "white" : "black", boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)", cursor: "pointer", transition: "background-color 0.3s ease", textAlign: "center", // Center text horizontally display: "flex", // Flexbox for vertical centering alignItems: "center", // Center text vertically justifyContent: "center", // Center text horizontally }), mutationDetails: { padding: "10px", }, detailInput: { marginBottom: "15px", }, detailLabel: { display: "block", marginBottom: "5px", }, detailInputField: { width: "100%", padding: "10px", borderRadius: "5px", border: "1px solid #ddd", }, btnSubmit: { width: "100%", padding: "10px", borderRadius: "5px", border: "none", backgroundColor: "#28a745", color: "white", fontSize: "16px", cursor: "pointer", transition: "background-color 0.3s ease", }, btnSubmitHover: { backgroundColor: "#218838", }, message: { textAlign: "center", fontSize: "16px", }, successMessage: { color: "#28a745", }, errorMessage: { color: "#dc3545", }, mutationList: { display: "flex", flexDirection: "column", gap: "10px", maxHeight: "400px", // Set the desired height overflowY: "auto", // Enable vertical scrolling }, mutationCard: { padding: "15px", borderRadius: "10px", border: "1px solid #ddd", backgroundColor: "#f9f9f9", boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)", }, }; const MaterialMutationPage = ({ cafeId, handleClose }) => { const [materials, setMaterials] = useState([]); const [mutations, setMutations] = useState([]); const [selectedMaterialId, setSelectedMaterialId] = useState(""); const [oldStock, setOldStock] = useState(""); const [newStock, setNewStock] = useState(""); const [changeDate, setChangeDate] = useState(""); const [reason, setReason] = useState(""); const [successMessage, setSuccessMessage] = useState(""); const [error, setError] = useState(""); const [expanded, setExpanded] = useState(false); useEffect(() => { const fetchMaterials = async () => { try { const data = await getMaterials(cafeId); setMaterials(data); console.log(data); } catch (err) { setError(err.message); } }; const fetchMutations = async () => { try { const data = await getMaterialMutations(cafeId); setMutations(data); } catch (err) { setError(err.message); } }; fetchMaterials(); fetchMutations(); }, [cafeId]); const handleToggle = () => setExpanded(!expanded); const handleCancel = () => { setSelectedMaterialId(null); handleToggle(); }; const handleMaterialSelect = (materialId) => { setSelectedMaterialId(materialId); }; const handleSubmit = async () => { try { const data = { oldStock, newStock, changeDate, reason }; await createMaterialMutation(selectedMaterialId, data); setSuccessMessage("Material mutation created successfully!"); setOldStock(""); setNewStock(""); setChangeDate(""); setReason(""); setSelectedMaterialId(""); // Refresh the mutations list const updatedMutations = await getMaterialMutations(cafeId); setMutations(updatedMutations); } catch (err) { setError(err.message); } }; // Filtered mutations based on selected material const filteredMutations = selectedMaterialId ? mutations.filter((mutation) => mutation.materialId === selectedMaterialId) : mutations; return (
{successMessage}
)} {error && (Error: {error}
)}Old Stock: {mutation.oldStock}
New Stock: {mutation.newStock}
Change Date: {new Date(mutation.changeDate).toLocaleString()}