import React, { useState, useEffect } from "react"; import axios from "axios"; import { isAutheticated } from "src/auth"; import { Button, Box, IconButton, Modal, Pagination, TextField, Typography, } 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"; const style = { position: "absolute", top: "50%", left: "50%", transform: "translate(-50%, -50%)", width: 400, bgcolor: "background.paper", borderRadius: "0.5rem", boxShadow: 24, width: "500px", }; const Categories = () => { 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 [categoryName, setCategoryName] = useState(""); const [categoryImage, setCategoryImage] = useState(""); const [error, setError] = useState(""); const [categoryId, setCategoryId] = useState(""); const [category, setCategory] = useState([]); const [itemPerPage, setItemPerPage] = useState(10); const [page, setPage] = useState(1); const [open, setOpen] = useState(false); const [olderCategoryName, setOlderCategoruName] = useState(""); const [olderImage, setOlderImage] = useState(""); const handleOpen = () => setOpen(true); const handleClose = () => { setOpen(false); // setUpdating(false); setEdit(false); setCategoryName(""); setCategoryId(""); setOlderImage(""); setCategoryImage(""); }; const getCategories = async () => { try { const response = await axios.get("/api/category/getCategories", { // headers: { // Authorization: `Bearer ${token}`, // }, }); if (response.status === 200) { setCategory(response?.data?.categories); setLoading(false); } } catch (error) { swal({ title: error, text: " please login to access the resource ", icon: "error", button: "Retry", dangerMode: true, }); } }; useEffect(() => { getCategories(); }, [token]); const handleEditClick = (_id, categoryName, categoryImage) => { setOpen(true); setOlderImage(categoryImage); setCategoryName(categoryName); setCategoryId(_id); setOlderCategoruName(categoryName); setEdit(true); // setUpdating(false); }; const categoryNamesArray = []; const setCategoryNamesArray = () => { category && category.map((category) => { categoryNamesArray.push(category.categoryName.toLowerCase()); }); }; setCategoryNamesArray(); const handleUpdate = () => { const filteredArrayNames = categoryNamesArray.filter( (item) => item !== olderCategoryName.toLowerCase() ); console.log(filteredArrayNames, "filter"); const categoryExits = filteredArrayNames.includes( categoryName.toLowerCase() ); if (categoryExits) { swal({ title: "Warning", text: "Category already exists ", icon: "error", button: "Retry", dangerMode: true, }); return; } if (!categoryName || (!categoryImage && !olderImage)) { 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("categoryName", categoryName); formData.append("categoryImage", categoryImage); formData.append("olderImage", JSON.stringify(olderImage)); axios .patch(`/api/category/update/${categoryId}`, formData, { headers: { Authorization: `Bearer ${token}`, }, }) .then((res) => { // setUpdating(true); // setIsUpdate(false); handleClose(); setCategoryId(""); setCategoryName(""); setCategoryImage(""); setOlderImage(""); setUpdating(true); setEdit(false); swal({ title: "Congratulations!!", text: "The category 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) => { 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/category/delete/${_id}`, { headers: { Authorization: `Bearer ${token}`, }, }) .then((res) => { swal({ title: "Congratulations!!", text: "The category was deleted successfully!", icon: "success", button: "OK", }); // 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 categoryExits = categoryNamesArray.includes( categoryName.toLowerCase() ); if (categoryExits) { swal({ title: "Warning", text: "Category Already exits.", icon: "error", button: "Retry", dangerMode: true, }); return; } if (!categoryName || !categoryImage) { 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("categoryName", categoryName); formData.append("categoryImage", categoryImage); axios .post("/api/category/add", formData, { headers: { Authorization: `Bearer ${token}`, "Content-Type": "multipart/formdata", }, }) .then((response) => { if (response.status === 201) { setOpen(false); setLoading(false); setSaveLoading(true); setCategoryName(""); setCategoryImage(""); setOlderImage(""); swal({ title: "Added", text: "New category added successfully!", icon: "success", button: "OK", }); // getCategories(); // Refresh the category list after adding } }) .catch((error) => { setSaveLoading(true); swal({ title: error, text: "something went wrong", icon: "error", button: "Retry", dangerMode: true, }); }); }; const getPageCount = () => { return Math.max(1, Math.ceil(category.length / itemPerPage)); }; 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)) { setCategoryImage(files); } }; const handeldeleteImage = () => { setCategoryImage(""); }; return (
{error}
}Upload jpg, jpeg and png only*
Image | Categories Name | Action | |||
---|---|---|---|---|---|
No Data Available |
|||||
Loading... | |||||
{ } |
{item.categoryName} |