import React, { useState, useEffect } from "react"; import axios from "axios"; import { isAutheticated } from "src/auth"; import { Button, Box, IconButton, Modal, Pagination, TextField, Typography, MenuItem, Select, FormControl, } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import { ClipLoader } from "react-spinners"; import swal from "sweetalert"; import CloudUploadIcon from "@mui/icons-material/CloudUpload"; import DeleteSharpIcon from "@mui/icons-material/DeleteSharp"; import { Grid } from "@material-ui/core"; const style = { position: "absolute", top: "50%", left: "50%", transform: "translate(-50%, -50%)", width: "90%", height: "900px", bgcolor: "background.paper", borderRadius: "0.5rem", boxShadow: 24, overflow: "scroll", }; const Design = () => { const token = isAutheticated(); const [loading, setLoading] = useState(true); const [updating, setUpdating] = useState(true); // for loading state // const [isUpdate, setIsUpdate] = useState(false); // for edit state const [saveLoding, setSaveLoading] = useState(true); const [edit, setEdit] = useState(false); const [designName, setDesignName] = useState(""); const [designImage, setDesignImage] = useState(""); const [error, setError] = useState(""); const [designId, setDesignId] = useState(""); const [design, setDesign] = useState([]); const [itemPerPage, setItemPerPage] = useState(10); const [page, setPage] = useState(1); const [open, setOpen] = useState(false); const [olderDesignName, setOlderDesignName] = useState(""); const [olderImage, setOlderImage] = useState(""); const [categoryName, setCategoryName] = useState(""); const [jsonSelectedFile, setJsonSelectedFile] = useState(null); const [categories, setCategoies] = useState([]); const getCategories = async () => { try { const response = await axios.get("/api/category/getCategories", { headers: { Authorization: `Bearer ${token}`, }, }); if (response.status === 200) { setCategoies(response?.data?.categories); } } catch (error) { swal({ title: error, text: " please login to access the resource ", icon: "error", button: "Retry", dangerMode: true, }); } }; useEffect(() => { getCategories(); }, [token]); const handleJsonFileChange = (event) => { const file = event.target.files[0]; if (file && file.name.endsWith(".json")) { // Validate the file type // const reader = new FileReader(); // reader.onload = async (event) => { // const jsonData = event.target.result; // // You can now send the `jsonData` to the backend for insertion // setJsonSelectedFile(jsonData); // }; // reader.readAsText(file); setJsonSelectedFile(file); } else { // Reset the selected file if it's not a valid JSON file setJsonSelectedFile(null); } }; const handleOpen = () => setOpen(true); const handleClose = () => { setOpen(false); setUpdating(true); setEdit(false); setDesignName(""); setDesignId(""); setOlderImage(""); setDesignImage(""); setJsonSelectedFile(null); }; const getDesigns = async () => { try { const response = await axios.get("/api/design/getDesigns"); if (response.status === 200) { setDesign(response?.data?.designs); setLoading(false); } } catch (error) { swal({ title: error, text: " please login to access the resource ", icon: "error", button: "Retry", dangerMode: true, }); } }; useEffect(() => { getDesigns(); }, [token]); const handleEditClick = ( _id, designName, designImage, designImageJson, categoryName ) => { setOpen(true); setOlderImage(designImage); setDesignName(designName); setDesignId(_id); setCategoryName(categoryName); setOlderDesignName(designName); setJsonSelectedFile(designImageJson); setEdit(true); // setUpdating(false); }; const designNamesArray = []; const setDesignNamesArray = () => { design && design.map((design) => { designNamesArray.push(design?.designName?.toLowerCase()); }); }; setDesignNamesArray(); // const handleUpdate = () => { // const filteredArrayNames = designNamesArray.filter( // (item) => item !== olderDesignName.toLowerCase() // ); // const designExits = filteredArrayNames.includes(designName.toLowerCase()); // if (designExits) { // swal({ // title: "Warning", // text: "Design already exists ", // icon: "error", // button: "Retry", // dangerMode: true, // }); // return; // } // if (!designName || (!designImage && !olderImage) || !jsonSelectedFile) { // swal({ // title: "Warning", // text: "Please fill all the required fields!", // icon: "error", // button: "Retry", // dangerMode: true, // }); // return; // } // setUpdating(false); // const formData = new FormData(); // formData.append("designName", designName); // formData.append("categoryName", categoryName); // formData.append("designImage", designImage); // formData.append("olderImage", JSON.stringify(olderImage)); // formData.append("designImageJson", jsonSelectedFile); // axios // .patch(`/api/design/update/${designId}`, formData, { // headers: { // Authorization: `Bearer ${token}`, // }, // }) // .then((res) => { // // setUpdating(true); // // setIsUpdate(false); // handleClose(); // setDesignId(""); // setDesignName(""); // setDesignImage(""); // setOlderImage(""); // setCategoryName(""); // setJsonSelectedFile(null); // setUpdating(true); // setEdit(false); // swal({ // title: "Congratulations!!", // text: "The Design was updated successfully!", // icon: "success", // button: "OK", // }); // // getCategories(); // Refresh the category list after updating // }) // .catch((err) => { // swal({ // title: "Sorry, please try again", // text: err, // icon: "error", // button: "Retry", // dangerMode: true, // }); // setUpdating(true); // }); // }; const handleDelete = ( _id, designImageFilename, designImagePath, designImageJsonFilename, designImageJsonPath ) => { swal({ title: "Are you sure?", icon: "error", buttons: { Yes: { text: "Yes", value: true }, Cancel: { text: "Cancel", value: "cancel" }, }, }).then((value) => { if (value === true) { axios .delete(`/api/design/delete/${_id}`, { data: { designImageFilename, designImagePath, designImageJsonFilename, designImageJsonPath, }, headers: { Authorization: `Bearer ${token}`, }, }) .then((res) => { swal({ title: "Congratulations!!", text: "The design was deleted successfully!", icon: "success", button: "OK", }); getDesigns(); // getCategories(); // Refresh the category list after deleting }) .catch((err) => { swal({ title: "", text: "Something went wrong!", icon: "error", button: "Retry", dangerMode: true, }); }); } }); }; const handleSaveCategory = async () => { const designExits = designNamesArray.includes(designName.toLowerCase()); if (designExits) { swal({ title: "Warning", text: "Design Already exits.", icon: "error", button: "Retry", dangerMode: true, }); return; } if (!designName || !designImage || !jsonSelectedFile || !categoryName) { swal({ title: "Warning", text: "Please fill all the required fields!", icon: "error", button: "Retry", dangerMode: true, }); return; } setSaveLoading(false); setLoading(true); const formData = new FormData(); formData.append("designName", designName); formData.append("categoryName", categoryName); formData.append("designImage", designImage); formData.append("designImageJson", jsonSelectedFile); axios .post("/api/design/add", formData, { headers: { Authorization: `Bearer ${token}`, "Content-Type": "multipart/formdata", "Access-Control-Allow-Origin": "*", }, }) .then((response) => { console.log(response); if (response.status === 201) { setOpen(false); setLoading(false); setSaveLoading(true); setDesignName(""); setDesignImage(""); setOlderImage(""); setJsonSelectedFile(null); setCategoryName(""); swal({ title: "Added", text: "New design added successfully!", icon: "success", button: "OK", }); getDesigns(); // getCategories(); // Refresh the category list after adding } }) .catch((error) => { setSaveLoading(true); if (error == "Error: Network Error") { setOpen(false); setLoading(false); setSaveLoading(true); setDesignName(""); setDesignImage(""); setOlderImage(""); setJsonSelectedFile(null); setCategoryName(""); swal({ title: "Added", text: "New design added successfully!", icon: "success", button: "OK", }); getDesigns(); } else { swal({ title: error, text: "something went wrong", icon: "error", button: "Retry", dangerMode: true, }); } }); }; const getPageCount = () => { return Math.max(1, Math.ceil(design.length / itemPerPage)); }; console.log(process.env.REACT_APP_BASE_URL); const handleFileChange = (e) => { const files = e.target.files[0]; // Check file types and append to selectedFiles const allowedTypes = ["image/jpeg", "image/png", "image/jpg"]; if (allowedTypes.includes(files.type)) { setDesignImage(files); } }; const handeldeleteImage = () => { setDesignImage(""); setJsonSelectedFile(null); }; const handelDeleteOlderImage = () => { setOlderImage(""); setJsonSelectedFile(null); }; return (
Design
Design Name handleClose()}>
setDesignName( e.target.value.charAt(0).toUpperCase() + e.target.value.slice(1) ) } /> {designName ? ( <> {25 - designName.length} characters left ) : ( <> )}
{/* */}