diff --git a/package.json b/package.json index 434b89e..7491c06 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "license": "MIT", "author": "The CoreUI Team (https://github.com/orgs/coreui/people)", "scripts": { - "dev": "react-scripts start", + "dev": "SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts start", "build": "react-scripts build", "build:n17": "react-scripts --openssl-legacy-provider build", "changelog": "auto-changelog --starting-version 4.1.0 --commit-limit false --hide-credit", diff --git a/src/_nav.js b/src/_nav.js index be65ba6..908d35c 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -66,12 +66,12 @@ const _nav = [ icon: , to: "/orders/new", }, - { - component: CNavItem, - name: "Paid", - icon: , - to: "/orders/returned", - }, + // { + // component: CNavItem, + // name: "Paid", + // icon: , + // to: "/orders/returned", + // }, { component: CNavItem, name: "Processing", @@ -109,6 +109,24 @@ const _nav = [ icon: , to: "/banner", }, + { + component: CNavItem, + name: "Register Image", + icon: , + to: "/registerImage", + }, + { + component: CNavItem, + name: "Login Image", + icon: , + to: "/loginImage", + }, + { + component: CNavItem, + name: "Shop Page Image", + icon: , + to: "/shopImage", + }, { component: CNavItem, name: "Testimonials", diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index 5391b3b..78404e9 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -73,9 +73,9 @@ const AppSidebar = () => { > {/* */} - {HeaderlogoUrl ? ( + {AdminlogoUrl ? ( - + ) : { AppName } ? (

The Solar Sign

diff --git a/src/index.js b/src/index.js index ca43008..1eb92bd 100644 --- a/src/index.js +++ b/src/index.js @@ -13,8 +13,8 @@ import { cibGmail } from "@coreui/icons"; 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 diff --git a/src/routes.js b/src/routes.js index a8d14f6..f25f001 100644 --- a/src/routes.js +++ b/src/routes.js @@ -41,7 +41,7 @@ import DispatchedOrders from "./views/orders/DispatchedOrders.js"; import DeliveredOrders from "./views/orders/DeliveredOrders.js"; import CancelledOrders from "./views/orders/CancelledOrders.js"; import ReturnedOrders from "./views/orders/ReturnedOrders.js"; -import ViewOrder from "./views/orders/ViewOrder"; +import ViewOdr from "./views/orders/ViewOdr"; import AddOrder from "./views/orders/AddOrder"; //Taxes import Tax from "./views/configuration/tax/Tax"; @@ -93,6 +93,10 @@ import AddUserAddress from "./views/UserAddress/addUserAddress"; import ViewAddress from "./views/UserAddress/viewAddress"; import Design from "./views/Design/design"; import Banners from "./views/Banner/banner"; +import RegisterImage from "./views/Images/RegisterImage"; +import LoginImage from "./views/Images/LoginImage"; +import ShopImage from "./views/Images/ShopImage"; + const routes = [ { path: "/", exact: true, name: "Home" }, { @@ -176,7 +180,7 @@ const routes = [ // }, // Categories { - path: "//categories", + path: "/categories", name: "Categories", element: Categories, }, @@ -253,6 +257,21 @@ const routes = [ name: "Banners", element: Banners, }, + { + path: "/registerImage", + name: "RegisterImage", + element: RegisterImage, + }, + { + path: "/loginImage", + name: "LoginImage", + element: LoginImage, + }, + { + path: "/shopImage", + name: "ShopImage", + element: ShopImage, + }, { path: "/testimonial/view/:id", name: "ViewTestimonial", @@ -271,14 +290,34 @@ const routes = [ { path: "/orders/new", name: "New Orders", element: NewOrders }, { path: "/order/add", name: "add Order", element: AddOrder }, { path: "/orders/edit/:id", name: "Edit Order", element: EditOrder }, - { path: "/orders/view/:id", name: "View Order", element: ViewOrders }, + { path: "/orders/:status/:id", name: "View Order", element: ViewOrders }, - // { path: '/orders/processing', name: 'Processing Orders', element: ProcessingOrders }, - // { path: '/orders/dispatched', name: 'Dispatched Orders', element: DispatchedOrders }, - // { path: '/orders/delivered', name: 'Delivered Orders', element: DeliveredOrders }, - // { path: '/orders/cancelled', name: 'Cancelled Orders', element: CancelledOrders }, - // { path: '/orders/returned', name: 'Returned Orders', element: ReturnedOrders }, - { path: "/order/:status/:id", name: "View Order", element: ViewOrder }, + { + path: "/orders/processing", + name: "Processing Orders", + element: ProcessingOrders, + }, + { + path: "/orders/dispatched", + name: "Dispatched Orders", + element: DispatchedOrders, + }, + { + path: "/orders/delivered", + name: "Delivered Orders", + element: DeliveredOrders, + }, + { + path: "/orders/cancelled", + name: "Cancelled Orders", + element: CancelledOrders, + }, + { + path: "/orders/returned", + name: "Returned Orders", + element: ReturnedOrders, + }, + // { path: "/order/:status/:id", name: "View Order", element: ViewOdr }, //dashboard diff --git a/src/views/Banner/banner.js b/src/views/Banner/banner.js index c97491a..e437d30 100644 --- a/src/views/Banner/banner.js +++ b/src/views/Banner/banner.js @@ -83,7 +83,8 @@ const Banners = () => { useEffect(() => { getBanner(); - }, [token, banner]); + }, []); + // }, [token, banner]); const handleEditClick = (_id, bannerName, bannerImage) => { setOpen(true); @@ -310,7 +311,7 @@ const Banners = () => {
- + */} { onChange={(e) => setBannerName( e.target.value.charAt(0).toUpperCase() + - e.target.value.slice(1) + e.target.value.slice(1) ) } /> @@ -482,7 +483,7 @@ const Banners = () => { p={2} display={"flex"} justifyContent={"right"} - // width={"500px"} + // width={"500px"} > {!edit && ( */} + + + {/* + + Banner Name + + handleClose()}> + + + */} + {/*
*/} + {/* + setBannerName( + e.target.value.charAt(0).toUpperCase() + + e.target.value.slice(1) + ) + } + /> */} + {/* {bannerName ? ( + <> + + {25 - bannerName.length} characters left + + + ) : ( + <> + )} */} + + + + {bannerImage && ( + + bannerImage + handeldeleteImage()} + fontSize="small" + sx={{ + color: "white", + position: "absolute", + cursor: "pointer", + padding: "0.2rem", + background: "black", + borderRadius: "50%", + }} + /> + + )} + {olderImage && ( + + bannerImage + setOlderImage("")} + fontSize="small" + sx={{ + color: "white", + position: "absolute", + cursor: "pointer", + padding: "0.2rem", + background: "black", + borderRadius: "50%", + }} + /> + + )} + + + {error &&

{error}

} +

+ Upload jpg, jpeg and png only* +

+ + + {!edit && ( + + )} + {edit && ( + + )} + + +
+
+
+ + + + +
+
+
+
+
+
+ {/*
+ +
*/} +
+
+ +
+ + + + + + + + + + + {!loading && banner?.length === 0 && ( + + + + )} + {loading ? ( + + + + ) : ( + banner && + banner + .map((item, i) => ( + + + {/* */} + + + )) + )} + +
ImageAction
+ +
+ Loading... +
+ + {/* {item?.image} */} +
{ }
+
+
{item.bannerName}
+
+ + {/* */} +
+
+ + {/*
+ setPage(value)} + /> +
*/} +
+
+
+
+ + + + ); +}; + +export default Banners; diff --git a/src/views/Images/RegisterImage.js b/src/views/Images/RegisterImage.js new file mode 100644 index 0000000..1e46397 --- /dev/null +++ b/src/views/Images/RegisterImage.js @@ -0,0 +1,709 @@ +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 Banners = () => { + 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 [bannerName, setBannerName] = useState(""); + const [bannerImage, setBannerImage] = useState(""); + const [error, setError] = useState(""); + const [bannerId, setBannerId] = useState(""); + const [banner, setBanner] = useState([]); + const [itemPerPage, setItemPerPage] = useState(10); + const [page, setPage] = useState(1); + const [open, setOpen] = useState(false); + const [olderBannerName, setOlderBaannerName] = useState(""); + const [olderImage, setOlderImage] = useState(""); + + const handleOpen = () => setOpen(true); + const handleClose = () => { + setOpen(false); + // setUpdating(false); + setEdit(false); + + setBannerName(""); + setBannerId(""); + setOlderImage(""); + setBannerImage(""); + }; + + const getBanner = async () => { + try { + const response = await axios.get("/api/registerImage/getImage", { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + }); + + if (response.status === 200) { + // console.log(response); + setBanner(response?.data?.image); + setLoading(false); + } + } catch (error) { + swal({ + title: error, + text: " please login to access the resource ", + icon: "error", + button: "Retry", + dangerMode: true, + }); + } + }; + + useEffect(() => { + getBanner(); + }, []); + // }, [token, banner]); + + const handleEditClick = (_id, bannerImage) => { + setOpen(true); + console.log("bannerImage", bannerImage); + setOlderImage(bannerImage); + + setBannerId(_id); + setOlderBaannerName(bannerName); + setEdit(true); + // setUpdating(false); + }; + // const bannerNamesArray = []; + // const setBannerNamesArray = () => { + // banner && + // banner.map((banner) => { + // bannerNamesArray.push(banner.bannerName.toLowerCase()); + // }); + // }; + // setBannerNamesArray(); + + const handleUpdate = () => { + // const filteredArrayNames = bannerNamesArray.filter( + // (item) => item !== olderBannerName.toLowerCase() + // ); + // console.log(filteredArrayNames, "filter"); + // const bannerExits = filteredArrayNames.includes(bannerName.toLowerCase()); + // if (bannerExits) { + // swal({ + // title: "Warning", + // text: "Banner already exists ", + // icon: "error", + // button: "Retry", + // dangerMode: true, + // }); + // return; + // } + + if ((!bannerImage && !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("bannerImage", bannerImage); + + formData.append("olderImage", JSON.stringify(olderImage)); + + axios + .patch(`/api/registerImage/update/${bannerId}`, formData, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + // setUpdating(true); + // setIsUpdate(false); + handleClose(); + setBannerId(""); + setBannerName(""); + setBannerImage(""); + setOlderImage(""); + setUpdating(true); + setEdit(false); + swal({ + title: "Congratulations!!", + text: "The banner was updated successfully!", + icon: "success", + button: "OK", + }); + // getCategories(); // Refresh the category list after updating + }) + .catch((err) => { + // console.log(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/registerImage/delete/${_id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + swal({ + title: "Congratulations!!", + text: "The banner 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 handleSaveBanner = async () => { + const bannerExits = bannerNamesArray.includes(bannerName.toLowerCase()); + if (bannerExits) { + swal({ + title: "Warning", + text: "Banner Already exits.", + icon: "error", + button: "Retry", + dangerMode: true, + }); + return; + } + if (!bannerImage) { + 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("bannerName", bannerName); + formData.append("bannerImage", bannerImage); + + axios + .post("/api/registerImage/add", formData, { + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "multipart/formdata", + }, + }) + .then((response) => { + if (response.status === 201) { + setOpen(false); + setLoading(false); + setSaveLoading(true); + setBannerName(""); + setBannerImage(""); + setOlderImage(""); + swal({ + title: "Added", + text: "New Banner 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(banner?.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)) { + setBannerImage(files); + } + }; + const handeldeleteImage = () => { + setBannerImage(""); + }; + return ( +
+
+
+
+
+
+
+ Register Image +
+ +
+ {/* */} + + + {/* + + Banner Name + + handleClose()}> + + + */} + {/*
*/} + {/* + setBannerName( + e.target.value.charAt(0).toUpperCase() + + e.target.value.slice(1) + ) + } + /> */} + {/* {bannerName ? ( + <> + + {25 - bannerName.length} characters left + + + ) : ( + <> + )} */} + + + + {bannerImage && ( + + bannerImage + handeldeleteImage()} + fontSize="small" + sx={{ + color: "white", + position: "absolute", + cursor: "pointer", + padding: "0.2rem", + background: "black", + borderRadius: "50%", + }} + /> + + )} + {olderImage && ( + + bannerImage + setOlderImage("")} + fontSize="small" + sx={{ + color: "white", + position: "absolute", + cursor: "pointer", + padding: "0.2rem", + background: "black", + borderRadius: "50%", + }} + /> + + )} + + + {error &&

{error}

} +

+ Upload jpg, jpeg and png only* +

+ + + {!edit && ( + + )} + {edit && ( + + )} + + +
+
+
+
+
+
+ +
+
+
+
+
+
+ {/*
+ +
*/} +
+
+ +
+ + + + + + + + + + + {!loading && banner?.length === 0 && ( + + + + )} + {loading ? ( + + + + ) : ( + banner && + banner + .map((item, i) => ( + + + {/* */} + + + )) + )} + +
ImageAction
+ +
+ Loading... +
+ + {/* {item?.image} */} +
{ }
+
+
{item.bannerName}
+
+ + {/* */} +
+
+ + {/*
+ setPage(value)} + /> +
*/} +
+
+
+
+
+
+
+ ); +}; + +export default Banners; diff --git a/src/views/Images/ShopImage.js b/src/views/Images/ShopImage.js new file mode 100644 index 0000000..6795464 --- /dev/null +++ b/src/views/Images/ShopImage.js @@ -0,0 +1,709 @@ +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 Banners = () => { + 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 [bannerName, setBannerName] = useState(""); + const [bannerImage, setBannerImage] = useState(""); + const [error, setError] = useState(""); + const [bannerId, setBannerId] = useState(""); + const [banner, setBanner] = useState([]); + const [itemPerPage, setItemPerPage] = useState(10); + const [page, setPage] = useState(1); + const [open, setOpen] = useState(false); + const [olderBannerName, setOlderBaannerName] = useState(""); + const [olderImage, setOlderImage] = useState(""); + + const handleOpen = () => setOpen(true); + const handleClose = () => { + setOpen(false); + // setUpdating(false); + setEdit(false); + + setBannerName(""); + setBannerId(""); + setOlderImage(""); + setBannerImage(""); + }; + + const getBanner = async () => { + try { + const response = await axios.get("/api/shopImage/getImage", { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + }); + + if (response.status === 200) { + // console.log(response); + setBanner(response?.data?.image); + setLoading(false); + } + } catch (error) { + swal({ + title: error, + text: " please login to access the resource ", + icon: "error", + button: "Retry", + dangerMode: true, + }); + } + }; + + useEffect(() => { + getBanner(); + }, []); + // }, [token, banner]); + + const handleEditClick = (_id, bannerImage) => { + setOpen(true); + console.log("bannerImage", bannerImage); + setOlderImage(bannerImage); + + setBannerId(_id); + setOlderBaannerName(bannerName); + setEdit(true); + // setUpdating(false); + }; + // const bannerNamesArray = []; + // const setBannerNamesArray = () => { + // banner && + // banner.map((banner) => { + // bannerNamesArray.push(banner.bannerName.toLowerCase()); + // }); + // }; + // setBannerNamesArray(); + + const handleUpdate = () => { + // const filteredArrayNames = bannerNamesArray.filter( + // (item) => item !== olderBannerName.toLowerCase() + // ); + // console.log(filteredArrayNames, "filter"); + // const bannerExits = filteredArrayNames.includes(bannerName.toLowerCase()); + // if (bannerExits) { + // swal({ + // title: "Warning", + // text: "Banner already exists ", + // icon: "error", + // button: "Retry", + // dangerMode: true, + // }); + // return; + // } + + if ((!bannerImage && !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("bannerImage", bannerImage); + + formData.append("olderImage", JSON.stringify(olderImage)); + + axios + .patch(`/api/shopImage/update/${bannerId}`, formData, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + // setUpdating(true); + // setIsUpdate(false); + handleClose(); + setBannerId(""); + setBannerName(""); + setBannerImage(""); + setOlderImage(""); + setUpdating(true); + setEdit(false); + swal({ + title: "Congratulations!!", + text: "The banner was updated successfully!", + icon: "success", + button: "OK", + }); + // getCategories(); // Refresh the category list after updating + }) + .catch((err) => { + // console.log(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/shopImage/delete/${_id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + swal({ + title: "Congratulations!!", + text: "The banner 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 handleSaveBanner = async () => { + // const bannerExits = bannerNamesArray.includes(bannerName.toLowerCase()); + // if (bannerExits) { + // swal({ + // title: "Warning", + // text: "Banner Already exits.", + // icon: "error", + // button: "Retry", + // dangerMode: true, + // }); + // return; + // } + if (!bannerImage) { + 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("bannerName", bannerName); + formData.append("bannerImage", bannerImage); + + axios + .post("/api/shopImage/add", formData, { + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "multipart/formdata", + }, + }) + .then((response) => { + if (response.status === 201) { + setOpen(false); + setLoading(false); + setSaveLoading(true); + setBannerName(""); + setBannerImage(""); + setOlderImage(""); + swal({ + title: "Added", + text: "New Banner 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(banner?.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)) { + setBannerImage(files); + } + }; + const handeldeleteImage = () => { + setBannerImage(""); + }; + return ( +
+
+
+
+
+
+
+ Shop Page Image +
+ +
+ {/* */} + + + {/* + + Banner Name + + handleClose()}> + + + */} + {/*
*/} + {/* + setBannerName( + e.target.value.charAt(0).toUpperCase() + + e.target.value.slice(1) + ) + } + /> */} + {/* {bannerName ? ( + <> + + {25 - bannerName.length} characters left + + + ) : ( + <> + )} */} + + + + {bannerImage && ( + + bannerImage + handeldeleteImage()} + fontSize="small" + sx={{ + color: "white", + position: "absolute", + cursor: "pointer", + padding: "0.2rem", + background: "black", + borderRadius: "50%", + }} + /> + + )} + {olderImage && ( + + bannerImage + setOlderImage("")} + fontSize="small" + sx={{ + color: "white", + position: "absolute", + cursor: "pointer", + padding: "0.2rem", + background: "black", + borderRadius: "50%", + }} + /> + + )} + + + {error &&

{error}

} +

+ Upload jpg, jpeg and png only* +

+ + + {!edit && ( + + )} + {edit && ( + + )} + + +
+
+
+
+
+
+ +
+
+
+
+
+
+ {/*
+ +
*/} +
+
+ +
+ + + + + + + + + + + {!loading && banner?.length === 0 && ( + + + + )} + {loading ? ( + + + + ) : ( + banner && + banner + .map((item, i) => ( + + + {/* */} + + + )) + )} + +
ImageAction
+ +
+ Loading... +
+ + {/* {item?.image} */} +
{ }
+
+
{item.bannerName}
+
+ + {/* */} +
+
+ + {/*
+ setPage(value)} + /> +
*/} +
+
+
+
+
+
+
+ ); +}; + +export default Banners; diff --git a/src/views/configuration/Address.js b/src/views/configuration/Address.js index ab02706..d82590c 100644 --- a/src/views/configuration/Address.js +++ b/src/views/configuration/Address.js @@ -18,6 +18,8 @@ function Address() { const [website, setWebsite] = useState(""); const [contact, setContact] = useState(""); const [email, setEmail] = useState(""); + const [latitude, setLatitude] = useState(""); + const [longitude, setLongitude] = useState(""); useEffect(() => { async function getConfiguration() { @@ -37,6 +39,8 @@ function Address() { setWebsite(el.website); setContact(el.contact); setEmail(el.email); + setLatitude(el.latitude); + setLongitude(el.longitude); }); }); } @@ -61,10 +65,30 @@ function Address() { setContact(e.target.value); } else if (e.target.name.toLowerCase() === "email") { setEmail(e.target.value); + } else if (e.target.name.toLowerCase() === "latitude") { + setLatitude(e.target.value); + } else if (e.target.name.toLowerCase() === "longitude") { + setLongitude(e.target.value); } } async function handelSubmit() { setLoading(true); + if ( + !company || + !address || + !city || + !state || + !country || + !pincode || + !website || + !contact || + !email || + !longitude || + !latitude + ) { + setLoading(false); + return swal("Fill all the required filed!"); + } let data = { company, address, @@ -75,7 +99,10 @@ function Address() { website, contact, email, + longitude, + latitude, }; + let res = await axios.post(`/api/config/address`, data, { headers: { Authorization: `Bearer ${token}`, @@ -85,7 +112,11 @@ function Address() { if (res) { setLoading(false); console.log(res); - swal("Success!", res.data.message, res.data.status); + + swal("Success!", res.data.message); + } else { + setLoading(false); + swal("something went wrong!", res.data.message); } } @@ -233,6 +264,34 @@ function Address() { className="form-control input-field " id="basicpill-phoneno-input" /> + + handelChange(e)} + className="form-control input-field " + id="basicpill-phoneno-input" + /> + + handelChange(e)} + className="form-control input-field " + id="basicpill-phoneno-input" + /> diff --git a/src/views/configuration/Logo.js b/src/views/configuration/Logo.js index 362cc1a..16dac52 100644 --- a/src/views/configuration/Logo.js +++ b/src/views/configuration/Logo.js @@ -1,222 +1,257 @@ -import React, { useEffect, useState } from 'react' +import React, { useEffect, useState } from "react"; -import swal from 'sweetalert' -import ClipLoader from 'react-spinners/ClipLoader' -import { Link } from 'react-router-dom' -import axios from 'axios' -import { isAutheticated } from 'src/auth' +import swal from "sweetalert"; +import ClipLoader from "react-spinners/ClipLoader"; +import { Link } from "react-router-dom"; +import axios from "axios"; +import { isAutheticated } from "src/auth"; function Logo() { - const [loading, setLoading] = useState(false) - const [Headerlogo, setHeaderlogo] = useState('') - const [Footerlogo, setFooterlogo] = useState('') - const [Adminlogo, setAdminlogo] = useState('') - const [display, setDisplay] = useState(true) - const token = isAutheticated() + const [loading, setLoading] = useState(false); + const [Headerlogo, setHeaderlogo] = useState(""); + const [Footerlogo, setFooterlogo] = useState(""); + const [Adminlogo, setAdminlogo] = useState(""); + const [display, setDisplay] = useState(true); + const token = isAutheticated(); - // urlcreated images + // urlcreated images - const [HeaderlogoUrl, setHeaderlogoUrl] = useState('') - const [FooterlogoUrl, setFooterlogoUrl] = useState('') - const [AdminlogoUrl, setAdminlogoUrl] = useState('') + const [HeaderlogoUrl, setHeaderlogoUrl] = useState(""); + const [FooterlogoUrl, setFooterlogoUrl] = useState(""); + const [AdminlogoUrl, setAdminlogoUrl] = useState(""); - useEffect(() => { - async function getConfiguration() { - const configDetails = await axios.get(`/api/config`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }) + useEffect(() => { + async function getConfiguration() { + const configDetails = await axios.get(`/api/config`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); - configDetails.data.result.map((item) => { - setHeaderlogo(item?.logo[0]?.Headerlogo) - setFooterlogo(item?.logo[0]?.Footerlogo) - setAdminlogo(item?.logo[0]?.Adminlogo) - }) - } - getConfiguration() - }, []) - - // async function handelChange(e) { - // setDisplay(false); - // console.log(e.target.name === "Logo htmlFor Website Header(148 x 48 px)"); - // if (e.target.name === "Logo htmlFor Website Header(148 x 48 px)") { - // console.log(e.target.files[0]); - // setHeaderlogo(e.target.files[0]); - // } else if (e.target.name === "Logo htmlFor Website Footer(148 x 48 px)") { - // setFooterlogo(e.target.files[0]); - // } else if (e.target.name === "Logo htmlFor Admin Header(148 x 48 px)") { - // setAdminlogo(e.target.files[0]); - // } - // } - - async function handelSubmit() { - setLoading(true) - - const formdata = new FormData() - formdata.append('Headerlogo', Headerlogo) - formdata.append('Footerlogo', Footerlogo) - formdata.append('Adminlogo', Adminlogo) - - await axios.post(`/api/config/logo`, formdata, { - headers: { - Authorization: `Bearer ${token}`, - 'Content-Type': 'multipart/formdata', - 'Access-Control-Allow-Origin': '*', - }, - }).then((res) => { - setLoading(false) - swal('Success!', res.data.message, res.data.status) - } - ).catch(error => { - console.log(error) - }) + configDetails.data.result.map((item) => { + setHeaderlogo(item?.logo[0]?.Headerlogo); + setFooterlogo(item?.logo[0]?.Footerlogo); + setAdminlogo(item?.logo[0]?.Adminlogo); + }); } + getConfiguration(); + }, []); - return ( -
-
-
-
-
+ // async function handelChange(e) { + // setDisplay(false); + // console.log(e.target.name === "Logo htmlFor Website Header(148 x 48 px)"); + // if (e.target.name === "Logo htmlFor Website Header(148 x 48 px)") { + // console.log(e.target.files[0]); + // setHeaderlogo(e.target.files[0]); + // } else if (e.target.name === "Logo htmlFor Website Footer(148 x 48 px)") { + // setFooterlogo(e.target.files[0]); + // } else if (e.target.name === "Logo htmlFor Admin Header(148 x 48 px)") { + // setAdminlogo(e.target.files[0]); + // } + // } + + async function handelSubmit() { + setLoading(true); + + const formdata = new FormData(); + formdata.append("Headerlogo", Headerlogo); + formdata.append("Footerlogo", Footerlogo); + formdata.append("Adminlogo", Adminlogo); + + await axios + .post(`/api/config/logo`, formdata, { + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "multipart/formdata", + "Access-Control-Allow-Origin": "*", + }, + }) + .then((res) => { + setLoading(false); + swal("Success!", res.data.message, res.data.status); + }) + .catch((error) => { + setLoading(false); + }); + } + + return ( +
+
+
+
+
+
+
+
+
+
+

Logo

+ +
+
-
-
-
-
-

Logo

+
+ <> + +
+ { + setHeaderlogo(e.target.files[0]); + if ( + e.target.files && + e.target.files[0] + ) { + setHeaderlogoUrl({ + image: URL.createObjectURL( + e.target.files[0] + ), + }); + console.log(setHeaderlogoUrl); + } + }} + className="form-control input-field mb-3 col-md-6 d-inline-block" + id="basicpill-phoneno-input" + /> + {display ? ( + + ) : ( + "" + )} +
+ +
+ { + setFooterlogo(e.target.files[0]); - -
-
-
- <> - -
- { - setHeaderlogo(e.target.files[0]) - if (e.target.files && e.target.files[0]) { - setHeaderlogoUrl({ - image: URL.createObjectURL(e.target.files[0]), - }) - console.log(setHeaderlogoUrl) - } - }} - className="form-control input-field mb-3 col-md-6 d-inline-block" - id="basicpill-phoneno-input" - /> - {display ? ( - header logo - ) : ( - '' - )} -
- - { - setFooterlogo(e.target.files[0]) + if (e.target.files && e.target.files[0]) { + setFooterlogoUrl({ + image: URL.createObjectURL( + e.target.files[0] + ), + }); + } + }} + className="form-control input-field mt-1 col-md-6 d-inline-block" + id="basicpill-phoneno-input" + />{" "} + {display ? ( + + ) : ( + "" + )} + + { + setAdminlogo(e.target.files[0]); - if (e.target.files && e.target.files[0]) { - setFooterlogoUrl({ - image: URL.createObjectURL(e.target.files[0]), - }) - } - }} - className="form-control input-field mt-1 col-md-6 d-inline-block" - id="basicpill-phoneno-input" - />{' '} - {display ? ( - Footer logo - ) : ( - '' - )} - - { - setAdminlogo(e.target.files[0]) - - if (e.target.files && e.target.files[0]) { - setAdminlogoUrl({ - image: URL.createObjectURL(e.target.files[0]), - }) - } - }} - className="form-control input-field col-md-6 d-inline-block" - id="basicpill-phoneno-input" - />{' '} - {display ? ( - Admin logo - ) : ( - '' - )} - -
-
-
-
-
-
- -
-
-
- -
-
- - {/* */} -
-
+ if (e.target.files && e.target.files[0]) { + setAdminlogoUrl({ + image: URL.createObjectURL( + e.target.files[0] + ), + }); + } + }} + className="form-control input-field col-md-6 d-inline-block" + id="basicpill-phoneno-input" + />{" "} + {display ? ( + + ) : ( + "" + )} + +
-
+
+
+
+
+ +
+
+
+ +
- {/* */} + + {/* */} +
- {/* */} +
+
+ {/* */}
- ) + {/* */} +
+
+ ); } -export default Logo +export default Logo; diff --git a/src/views/configuration/Socialmedia.js b/src/views/configuration/Socialmedia.js index 2af69d3..a0728c7 100644 --- a/src/views/configuration/Socialmedia.js +++ b/src/views/configuration/Socialmedia.js @@ -13,7 +13,8 @@ function Socialmedia() { const [instagram, setInstagram] = useState('') const [twitter, setTwitter] = useState('') const [linkedin, setLinkedin] = useState('') - + const [youtube, setYoutube] = useState('') + console.log("youtube", youtube); useEffect(() => { async function getConfiguration() { const configDetails = await axios.get(`/api/config`, { @@ -21,12 +22,14 @@ function Socialmedia() { Authorization: `Bearer ${token}`, }, }) + configDetails.data.result.map((item) => { console.log(item.socialMedia) setFacebook(item?.socialMedia[0]?.facebook) setInstagram(item?.socialMedia[0]?.instagram) setTwitter(item?.socialMedia[0]?.twitter) setLinkedin(item?.socialMedia[0]?.linkedin) + setYoutube(item?.socialMedia[0]?.youtube) }) } getConfiguration() @@ -41,6 +44,8 @@ function Socialmedia() { setInstagram(e.target.value) } else if (e.target.name === 'linkedin') { setLinkedin(e.target.value) + } else if (e.target.name === 'youtube') { + setYoutube(e.target.value) } } async function handelSubmit() { @@ -50,6 +55,7 @@ function Socialmedia() { twitter, instagram, linkedin, + youtube } let res = await axios.post(`/api/config/social`, data, { headers: { @@ -119,6 +125,17 @@ function Socialmedia() { className="form-control input-field " id="basicpill-phoneno-input" />{' '} + + handelChange(e)} + className="form-control input-field " + id="basicpill-phoneno-input" + />{' '} diff --git a/src/views/orders/CancelledOrders.js b/src/views/orders/CancelledOrders.js index 5da95f2..347895a 100644 --- a/src/views/orders/CancelledOrders.js +++ b/src/views/orders/CancelledOrders.js @@ -1,50 +1,52 @@ -import React, { useState, useEffect } from 'react' -import { Link } from 'react-router-dom' -import axios from 'axios' -import { isAutheticated } from 'src/auth' - +import React, { useState, useEffect } from "react"; +import { Link } from "react-router-dom"; +import axios from "axios"; +import { isAutheticated } from "src/auth"; function CancelledOrders() { - const token = isAutheticated() - const [loading, setLoading] = useState(true) - const [success, setSuccess] = useState(true) - const [cancelledOrdersData, setCancelledOrdersData] = useState([]) + const token = isAutheticated(); + const [loading, setLoading] = useState(true); + const [success, setSuccess] = useState(true); + const [cancelledOrdersData, setCancelledOrdersData] = useState([]); - const [currentPage, setCurrentPage] = useState(1) - const [itemPerPage, setItemPerPage] = useState(10) - const [showData, setShowData] = useState(cancelledOrdersData) + const [currentPage, setCurrentPage] = useState(1); + const [itemPerPage, setItemPerPage] = useState(10); + const [showData, setShowData] = useState(cancelledOrdersData); const handleShowEntries = (e) => { - setCurrentPage(1) - setItemPerPage(e.target.value) - } + setCurrentPage(1); + setItemPerPage(e.target.value); + }; useEffect(() => { function getProcessingOrder() { axios - .get(`/api/order/list/cancelled`, { - headers: { 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}` }, + .get(`/api/order/getAll/cancelled`, { + headers: { + "Access-Control-Allow-Origin": "*", + Authorization: `Bearer ${token}`, + }, }) .then((res) => { - setCancelledOrdersData(res.data.data) - setLoading(false) + setCancelledOrdersData(res.data.order); + setLoading(false); }) .catch((err) => { - console.log(err) - setLoading(false) - }) + console.log(err); + setLoading(false); + }); } - getProcessingOrder() - }, []) + getProcessingOrder(); + }, []); useEffect(() => { const loadData = () => { - const indexOfLastPost = currentPage * itemPerPage - const indexOfFirstPost = indexOfLastPost - itemPerPage - setShowData(cancelledOrdersData.slice(indexOfFirstPost, indexOfLastPost)) - } - loadData() - }, [currentPage, itemPerPage, cancelledOrdersData]) + const indexOfLastPost = currentPage * itemPerPage; + const indexOfFirstPost = indexOfLastPost - itemPerPage; + setShowData(cancelledOrdersData.slice(indexOfFirstPost, indexOfLastPost)); + }; + loadData(); + }, [currentPage, itemPerPage, cancelledOrdersData]); return (
@@ -60,7 +62,7 @@ function CancelledOrders() { justify-content-between " > -
+
Cancelled Orders
@@ -76,7 +78,7 @@ function CancelledOrders() {