diff --git a/src/index.js b/src/index.js index e480d1a..1352647 100644 --- a/src/index.js +++ b/src/index.js @@ -14,9 +14,9 @@ import { createRoot } from "react-dom/client"; const setupAxios = () => { //axios.defaults.baseURL = 'https://bolo-api.checkapp.one/' - // axios.defaults.baseURL = "http://localhost:8000"; + axios.defaults.baseURL = "http://localhost:8000"; // axios.defaults.baseURL = "https://happy-sombrero-ray.cyclic.app/"; //->latest deployed - axios.defaults.baseURL = "https://printsigns.onrender.com/"; //->latest deployed + // axios.defaults.baseURL = "https://printsigns.onrender.com/"; //->latest deployed axios.defaults.headers = { "Cache-Control": "no-cache,no-store", diff --git a/src/views/Design/design.js b/src/views/Design/design.js index caaf789..c328f03 100644 --- a/src/views/Design/design.js +++ b/src/views/Design/design.js @@ -9,23 +9,28 @@ import { 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: 400, + width: "90%", + height: "900px", bgcolor: "background.paper", borderRadius: "0.5rem", boxShadow: 24, - width: "500px", + overflow: "scroll", }; const Design = () => { @@ -45,6 +50,52 @@ const Design = () => { 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 = () => { @@ -55,6 +106,7 @@ const Design = () => { setDesignId(""); setOlderImage(""); setDesignImage(""); + setJsonSelectedFile(null); }; const getDesigns = async () => { @@ -84,12 +136,20 @@ const Design = () => { getDesigns(); }, [token, design]); - const handleEditClick = (_id, designName, designImage) => { + 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); }; @@ -119,7 +179,7 @@ const Design = () => { return; } - if (!designName || (!designImage && !olderImage)) { + if (!designName || (!designImage && !olderImage) || !jsonSelectedFile) { swal({ title: "Warning", text: "Please fill all the required fields!", @@ -132,10 +192,11 @@ const Design = () => { 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, { @@ -151,6 +212,8 @@ const Design = () => { setDesignName(""); setDesignImage(""); setOlderImage(""); + setCategoryName(""); + setJsonSelectedFile(null); setUpdating(true); setEdit(false); swal({ @@ -223,7 +286,7 @@ const Design = () => { }); return; } - if (!designName || !designImage) { + if (!designName || !designImage || !jsonSelectedFile || !categoryName) { swal({ title: "Warning", text: "Please fill all the required fields!", @@ -237,7 +300,9 @@ const Design = () => { 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, { @@ -254,6 +319,8 @@ const Design = () => { setDesignName(""); setDesignImage(""); setOlderImage(""); + setJsonSelectedFile(null); + setCategoryName(""); swal({ title: "Added", text: "New design added successfully!", @@ -289,6 +356,11 @@ const Design = () => { }; const handeldeleteImage = () => { setDesignImage(""); + setJsonSelectedFile(null); + }; + const handelDeleteOlderImage = () => { + setOlderImage(""); + setJsonSelectedFile(null); }; return ( @@ -372,112 +444,203 @@ const Design = () => { ) : ( <>> )} +
+ File is selected +
+ ) : ( ++ Select the json file +
+ )} + + - {error &&{error}
} -- Upload jpg, jpeg and png only* -
-