From 6fc6d8b36ff3563a81fcfd1b4eb343168c7a69ff Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:29:55 +0530 Subject: [PATCH 01/48] make it better --- .env | 4 +- .gitignore | Bin 360 -> 332 bytes package.json | 6 +- src/App.js | 79 ++++-- src/_nav.js | 39 +++ src/auth.js | 1 + src/components/AppHeader.js | 2 +- src/routes.js | 54 ++++ src/store.js | 48 ++-- src/views/Banners/AddBanner.js | 219 +++++++++++++++ src/views/Banners/Banner.js | 166 +++++++++++ src/views/Banners/EditBanner.js | 238 ++++++++++++++++ src/views/Banners/ViewBanner.js | 128 +++++++++ src/views/CMS/EditCms.js | 125 +++++++++ src/views/CMS/ViewCms.js | 127 +++++++++ src/views/CMS/cms.js | 245 +++++++++++++++++ src/views/Category/Category.js | 4 +- src/views/Directory/Add_Business.js | 99 ++++++- src/views/Directory/Bisuness.js | 290 ++++++++++---------- src/views/Directory/EditBisuness.js | 57 +++- src/views/Directory/View_Bisuness.js | 69 ++--- src/views/Events/AddEvent.js | 164 +++++++++++ src/views/Events/EditEvent.js | 178 ++++++++++++ src/views/Events/Event.js | 166 +++++++++++ src/views/Events/ViewEvent.js | 122 ++++++++ src/views/Feedback/Pagination.js | 25 ++ src/views/Feedback/ViewFeedback.js | 123 +++++++++ src/views/Feedback/feedback.js | 146 ++++++++++ src/views/News/EditNews.js | 1 - src/views/News/News.js | 6 +- src/views/News/ViewNews.js | 47 ++-- src/views/Offers/AddOffer.js | 215 +++++++++++++++ src/views/Offers/EditOffer.js | 224 +++++++++++++++ src/views/Offers/Offer.js | 162 +++++++++++ src/views/Offers/ViewOffer.js | 137 +++++++++ src/views/Users/Pagination.js | 25 ++ src/views/Users/ViewUsers.js | 131 +++++++++ src/views/Users/users.js | 153 +++++++++++ src/views/pages/login/Login.js | 25 +- src/views/pages/register/Change_password.js | 20 +- 40 files changed, 3768 insertions(+), 302 deletions(-) create mode 100644 src/views/Banners/AddBanner.js create mode 100644 src/views/Banners/Banner.js create mode 100644 src/views/Banners/EditBanner.js create mode 100644 src/views/Banners/ViewBanner.js create mode 100644 src/views/CMS/EditCms.js create mode 100644 src/views/CMS/ViewCms.js create mode 100644 src/views/CMS/cms.js create mode 100644 src/views/Events/AddEvent.js create mode 100644 src/views/Events/EditEvent.js create mode 100644 src/views/Events/Event.js create mode 100644 src/views/Events/ViewEvent.js create mode 100644 src/views/Feedback/Pagination.js create mode 100644 src/views/Feedback/ViewFeedback.js create mode 100644 src/views/Feedback/feedback.js create mode 100644 src/views/Offers/AddOffer.js create mode 100644 src/views/Offers/EditOffer.js create mode 100644 src/views/Offers/Offer.js create mode 100644 src/views/Offers/ViewOffer.js create mode 100644 src/views/Users/Pagination.js create mode 100644 src/views/Users/ViewUsers.js create mode 100644 src/views/Users/users.js diff --git a/.env b/.env index 0c48d3c..a0be3ed 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ -PORT=3000 -CHOKIDAR_USEPOLLING=true +PORT = 3000 +CHOKIDAR_USEPOLLING = true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 89228afba5db6561552f30e4083847e764050b48..e080cd5fb78aaf40b77f487c198655abed98ea96 100644 GIT binary patch delta 7 OcmaFCbcShz4 @@ -22,33 +24,72 @@ const Register = React.lazy(() => import('./views/pages/register/Change_password const Page404 = React.lazy(() => import('./views/pages/page404/Page404')) const Page500 = React.lazy(() => import('./views/pages/page500/Page500')) -class App extends Component { - render() { - return ( - - - - < Route exact path="/" name="Login Page" render={(props) => } /> +const App = () => { - } /> - } /> + const [userdata, setUserData] = useState(null) + const token = isAutheticated(); - } /> - } /> + useEffect(() => { + const getUser = async () => { + let existanceData = localStorage.getItem("authToken"); + if (!existanceData) { + // console.log(existanceData.userData) + setUserData(false) + } else { + try { + console.log('requesting user data from server') + let response = await axios.get(`/api/v1/user/details`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + //console.log(response) + const data = response.data + if (data.success) { + + setUserData(data.user); + } else { + setUserData(false) + } + + } + catch (err) { + setUserData(false) + console.log(err); + }; + } + + } + getUser() + }, []) + + return ( + + + + < Route exact path="/" name="Login Page" render={(props) => } /> + + } /> + } /> + + } /> + } /> - {/* localStorage.getItem('authToken') ? */} - } /> - {/* < ProtectedRoute path="/" name="Home" render={(props) => } /> */} + {/* localStorage.getItem('authToken') ? */} + ( + userdata && userdata?._id ? : + userdata === false ? :
+ )} /> + {/* < ProtectedRoute path="/" name="Home" render={(props) => } /> */} -
-
-
- ) - } +
+
+
+ ) } //@coreui/coreui-free-react-admin-template@4.1.1 export default App diff --git a/src/_nav.js b/src/_nav.js index c854006..a7a8cdb 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -14,6 +14,8 @@ import { cilSpeedometer, cilStar, cilUser, + + } from '@coreui/icons' import { CNavGroup, CNavItem, CNavTitle } from '@coreui/react' @@ -44,6 +46,43 @@ const _nav = [ icon: , to: '/news', }, + { + component: CNavItem, + name: 'Events', + icon: , + to: '/event', + }, + { + component: CNavItem, + name: 'Offers', + icon: , + to: '/offer', + }, + + { + component: CNavItem, + name: 'Banners', + icon: , + to: '/banner', + }, + { + component: CNavItem, + name: 'CMS', + icon: , + to: '/cms', + }, + { + component: CNavItem, + name: 'Customer Feedback', + icon: , + to: '/feedback', + }, + { + component: CNavItem, + name: 'Users', + icon: , + to: '/users', + }, ] diff --git a/src/auth.js b/src/auth.js index 434c3d9..bcf96f4 100644 --- a/src/auth.js +++ b/src/auth.js @@ -5,6 +5,7 @@ export const isAutheticated = () => { if (localStorage.getItem("authToken")) { return (localStorage.getItem("authToken")); + //console.log(localStorage.getItem("authToken")) } else { return false; } diff --git a/src/components/AppHeader.js b/src/components/AppHeader.js index 9b9b9aa..6ebfec6 100644 --- a/src/components/AppHeader.js +++ b/src/components/AppHeader.js @@ -32,7 +32,7 @@ const AppHeader = () => { -

Courier

+

CMP

diff --git a/src/routes.js b/src/routes.js index 9c36913..cc1bbd4 100644 --- a/src/routes.js +++ b/src/routes.js @@ -13,6 +13,31 @@ import AddNews from "./views/News/AddNews" import EditNews from "./views/News/EditNews" import News from "./views/News/News" import ViewNews from "./views/News/ViewNews" +//Events +import Event from './views/Events/Event' +import EditEvent from './views/Events/EditEvent' +import AddEvent from './views/Events/AddEvent' +import ViewEvent from './views/Events/ViewEvent' +//offers Route +import Offer from './views/Offers/Offer' +import AddOffer from './views/Offers/AddOffer' +import EditOffer from './views/Offers/EditOffer' +import ViewOffer from './views/Offers/ViewOffer' +//Banner +import Banner from './views/Banners/Banner' +import ViewBanner from './views/Banners/ViewBanner' +import EditBanner from './views/Banners/EditBanner' +import AddBanner from './views/Banners/AddBanner' +//cms +import CMS from './views/CMS/cms' +import CMSView from './views/CMS/ViewCms' +import CMSEdit from './views/CMS/EditCms' +//cms +import Feedback from './views/Feedback/feedback' +import ViewFeedback from './views/Feedback/ViewFeedback' +//cms +import Users from './views/Users/users' +import ViewUsers from './views/Users/ViewUsers' // DashBoard const Change_Password = React.lazy(() => import('./views/pages/register/Change_password')) @@ -42,8 +67,37 @@ const routes = [ { path: '/addNews', name: 'addNews', component: AddNews }, { path: '/news/edit/:id', name: 'EditNews', component: EditNews }, { path: '/news', name: 'news', component: News }, + //Events route + { path: '/event/view/:id', name: 'ViewEvent', component: ViewEvent }, + { path: '/addevent', name: 'AddEvent', component: AddEvent }, + { path: '/event/edit/:id', name: 'EditEvent', component: EditEvent }, + { path: '/event', name: 'Event', component: Event }, + + //Offers route + { path: '/offer/view/:id', name: 'Viewoffer', component: ViewOffer }, + { path: '/addOffer', name: 'AddOffer', component: AddOffer }, + { path: '/offer/edit/:id', name: 'EditOffer', component: EditOffer }, + { path: '/offer', name: 'offer', component: Offer }, + + //BANNERS + { path: '/banner/view/:id', name: 'ViewBanner', component: ViewBanner }, + { path: '/addbanner', name: 'AddBanner', component: AddBanner }, + { path: '/banner/edit/:id', name: 'EditBanner', component: EditBanner }, + { path: '/banner', name: 'Banner', component: Banner }, + //CMS + { path: '/cms/view/:id', name: 'CMS', component: CMSView }, + { path: '/cms/edit/:id', name: 'CMS', component: CMSEdit }, + { path: '/cms', name: 'CMS', component: CMS }, + //CMS + { path: '/feedback/view/:id', name: 'ViewFeedback', component: ViewFeedback }, + { path: '/feedback', name: 'Feedback', component: Feedback }, + + //Users + { path: '/users/view/:id', name: 'ViewUsers', component: ViewUsers }, + { path: '/users', name: 'users', component: Users }, //dashboard + { path: '/dashboard', name: 'Dashboard', component: Dashboard }, ] diff --git a/src/store.js b/src/store.js index 5f2dc7b..81c401c 100644 --- a/src/store.js +++ b/src/store.js @@ -1,31 +1,31 @@ -// import { createStore } from 'redux' +import { createStore } from 'redux' -// const initialState = { -// sidebarShow: true, -// } +const initialState = { + sidebarShow: true, +} -// const changeState = (state = initialState, { type, ...rest }) => { -// switch (type) { -// case 'set': -// return { ...state, ...rest } -// default: -// return state -// } -// } +const changeState = (state = initialState, { type, ...rest }) => { + switch (type) { + case 'set': + return { ...state, ...rest } + default: + return state + } +} -// const store = createStore(changeState) -// export default store -import { configureStore } from "@reduxjs/toolkit"; -import { newCategoryReducer, AllcategoryReducer } from "./reducers/categoryReducer.js"; -import { loginReducer } from "./reducers/directoryReducer.js"; +const store = createStore(changeState) +export default store +// import { configureStore } from "@reduxjs/toolkit"; +// import { newCategoryReducer, AllcategoryReducer } from "./reducers/categoryReducer.js"; +// import { loginReducer } from "./reducers/directoryReducer.js"; -const store = configureStore({ - reducer: { +// const store = configureStore({ +// reducer: { - newCategory: newCategoryReducer, - AllCategory: AllcategoryReducer, +// newCategory: newCategoryReducer, +// AllCategory: AllcategoryReducer, - }, -}); +// }, +// }); -export default store; \ No newline at end of file +// export default store; \ No newline at end of file diff --git a/src/views/Banners/AddBanner.js b/src/views/Banners/AddBanner.js new file mode 100644 index 0000000..1dbebd0 --- /dev/null +++ b/src/views/Banners/AddBanner.js @@ -0,0 +1,219 @@ +import axios from "axios"; +import React, { useCallback, useEffect, useState } from "react"; +import { API } from "../../data"; +import { isAutheticated } from "../../auth"; +import ClipLoader from "react-spinners/ClipLoader"; +import { useHistory } from "react-router-dom"; +import swal from 'sweetalert'; + + +import { + CButton, + CCard, + CCardBody, + CCol, + CContainer, + CForm, + CFormInput, + CInputGroup, + CInputGroupText, + CRow, +} from '@coreui/react' +import CIcon from '@coreui/icons-react' +import { cilPencil, cilNotes, cilCalendar } from '@coreui/icons' +const AddBanner = () => { + const { token } = isAutheticated(); + let history = useHistory(); + const [image, setImage] = useState(""); + const [title, setTitle] = useState(""); + const [subTitle, setSubTitle] = useState(""); + const [section, setSection] = useState(""); + + const [startDate, setStartDate] = useState(new Date()); + const [endDate, setEndDate] = useState(new Date()); + + + const [loading, setLoading] = useState(false); + + + const handleSubmit = async () => { + const myForm = new FormData(); + + myForm.set("title", title); + myForm.set("subTitle", subTitle); + myForm.set("section", section); + myForm.set("startDate", startDate); + myForm.set("endDate", endDate); + myForm.set("image", image); + setLoading({ loading: true }); + // console.log(image) + let res = await axios.post( + `/api/banner/create`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Banner Added Successfully!", "success"); + history.goBack(); + } + + setLoading(false); + }; + const handleImage = (e) => { + const files = e.target.files[0]; + // console.log(files) + setImage(files); + + }; + // + const onCancel = () => { + // window.location = "/comproducts"; + history.goBack() + + }; + + return ( + <> +
+ + + + + + +

Add Banner

+
+
+ + + + + setTitle(e.target.value)} + value={title} + placeholder="Title" /> + + + + + + setSubTitle(e.target.value)} + value={subTitle} + placeholder="sub title" /> + + + + + + + + + + + + Start Date* + + + {/* */} + + setStartDate(e.target.value)} + value={startDate} + placeholder="Start Date" /> + + + + + End Date* + + + setEndDate(e.target.value)} + value={endDate} + placeholder="EndDate" /> + + {/* + + + + setLocation(e.target.value)} + value={location} + placeholder="Location" /> + */} + + + + {/* */} + + + +
+ +
+ + +
+
+
+
+
+
+
+
+
+ + + ) +} + +export default AddBanner \ No newline at end of file diff --git a/src/views/Banners/Banner.js b/src/views/Banners/Banner.js new file mode 100644 index 0000000..928443d --- /dev/null +++ b/src/views/Banners/Banner.js @@ -0,0 +1,166 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { isAutheticated } from "../../auth"; + +function banner() { + const [banner, setBanner] = useState([]) + + const { token } = isAutheticated(); + + const getEvent = useCallback(async () => { + let res = await axios.get( + `/api/banner/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + console.log(res.data) + setBanner(res.data.banner) + + + }, [token]); + + useEffect(() => { + getEvent(); + }, [getEvent]); + + + const handleDelete = async (id) => { + let status = window.confirm("Do you want to delete"); + if (!status) return; + + let res = await axios.delete(`/api/banner/delete/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + console.log(res) + if (res.data.success == true) { + swal("success!", "Banner Deleted Successfully!", "success"); + window.location.reload(); + } + }; + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-BANNER

+ + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + {banner && banner.map((item, index) => + + + + + + + + + + )} + +
TitleImageSectionAdded OnAction
{item?.title} + {item?.section} + {/* {item?.addedOn} */} + {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} + + + + + + + + + + + +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default banner; diff --git a/src/views/Banners/EditBanner.js b/src/views/Banners/EditBanner.js new file mode 100644 index 0000000..69c2974 --- /dev/null +++ b/src/views/Banners/EditBanner.js @@ -0,0 +1,238 @@ + + +import axios from "axios"; +import React, { useCallback, useEffect, useState } from "react"; +import { API } from "../../data"; +import { isAutheticated } from "../../auth"; +import ClipLoader from "react-spinners/ClipLoader"; +import { useHistory } from "react-router-dom"; +import swal from 'sweetalert'; +import { useParams } from "react-router-dom"; + +import { + CButton, + CCard, + CCardBody, + CCol, + CContainer, + CForm, + CFormInput, + CInputGroup, + CInputGroupText, + CRow, +} from '@coreui/react' +import CIcon from '@coreui/icons-react' +import { cilPencil, cilNotes, cilCalendar } from '@coreui/icons' +const EditBanner = () => { + const { id } = useParams(); + const { token } = isAutheticated(); + let history = useHistory(); + const [image, setImage] = useState(""); + const [title, setTitle] = useState(""); + const [subTitle, setSubTitle] = useState(""); + const [section, setSection] = useState(""); + + const [startDate, setStartDate] = useState(""); + const [endDate, setEndDate] = useState(""); + + + const [loading, setLoading] = useState(false); + //fetch one Offer + useEffect(async () => { + const res = await axios.get(`/api/banner/getOne/${id}`, { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + }); + // console.log(res.data.banner) + // console.log(res.data.banner.startDate) + setTitle(res.data.banner.title) + setSubTitle(res.data.banner.subTitle) + setSection(res.data.banner.section) + setStartDate(new Date(res.data.banner.startDate).toLocaleDateString()) + setEndDate(new Date(res.data.banner.endDate).toLocaleDateString()) + + }, [id]); + + const handleSubmit = async () => { + const myForm = new FormData(); + + myForm.set("title", title); + myForm.set("subTitle", subTitle); + myForm.set("section", section); + myForm.set("startDate", startDate); + myForm.set("endDate", endDate); + myForm.set("image", image); + setLoading({ loading: true }); + // console.log(image) + let res = await axios.put( + `/api/banner/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Banner Updated Successfully!", "success"); + history.goBack(); + } + + setLoading(false); + }; + const handleImage = (e) => { + const files = e.target.files[0]; + // console.log(files) + setImage(files); + + }; + // + const onCancel = () => { + // window.location = "/comproducts"; + history.goBack() + + }; + + return ( + <> +
+ + + + + + +

Edit Banner

+
+
+ + + + + setTitle(e.target.value)} + value={title} + placeholder="Title" /> + + + + + + setSubTitle(e.target.value)} + value={subTitle} + placeholder="sub title" /> + + + + + + + + + + + + + Start Date* + + + {/* */} + + setStartDate(e.target.value)} + value={startDate} + placeholder="Start Date" /> + + + + + End Date* + + + setEndDate(e.target.value)} + value={endDate} + placeholder="EndDate" /> + + {/* + + + + setLocation(e.target.value)} + value={location} + placeholder="Location" /> + */} + + + + {/* */} + + + +
+ +
+ + +
+
+
+
+
+
+
+
+
+ + + ) +} + +export default EditBanner \ No newline at end of file diff --git a/src/views/Banners/ViewBanner.js b/src/views/Banners/ViewBanner.js new file mode 100644 index 0000000..7d7944a --- /dev/null +++ b/src/views/Banners/ViewBanner.js @@ -0,0 +1,128 @@ + + + + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +function ViewBanner() { + const [banner, setBanner] = useState([]) + const { id } = useParams(); + // console.log(id) + const { token } = isAutheticated(); + + const getBanner = useCallback(async () => { + let res = await axios.get( + `/api/banner/getOne/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + setBanner(res.data.banner) + + + }, [token]); + + useEffect(() => { + getBanner(); + }, [getBanner]); + + + + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-BANNER

+ + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Id{banner?._id}
Title{banner?.title}
Sub Title{banner?.subTitle}
Image + +
Section{banner?.section}
Start Date + {new Date(`${banner?.startDate}`).toDateString()} +
End Date + {new Date(`${banner?.endDate}`).toDateString()}
Added On + {new Date(`${banner?.addedOn}`).toDateString()} , {`${formatAMPM(banner?.addedOn)}`} +
Updated At + {new Date(`${banner?.updatedAt}`).toDateString()} , {`${formatAMPM(banner?.updatedAt)}`} +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default ViewBanner; diff --git a/src/views/CMS/EditCms.js b/src/views/CMS/EditCms.js new file mode 100644 index 0000000..36d919f --- /dev/null +++ b/src/views/CMS/EditCms.js @@ -0,0 +1,125 @@ +import axios from "axios"; +import React, { useEffect, useState, useCallback } from "react"; + +import { isAutheticated } from "../../auth"; +import ClipLoader from "react-spinners/ClipLoader"; +import swal from 'sweetalert'; +import { Link, useParams } from "react-router-dom"; +import { useHistory } from "react-router-dom"; +const EditCms = () => { + const { id } = useParams() + const token = isAutheticated(); + // console.log(token, id) + let history = useHistory(); + const [state, setState] = useState({ + About_Us: "", + Terms_and_Conditions: "", + Privacy_Policy: "", + + loading: false, + + }); + const { loading } = state; + const changeState = (newState) => + setState((prevState) => ({ ...prevState, ...newState })); + + + const handleChange = (e) => { + changeState({ ...state, [e.target.name]: e.target.value }) + + } + const fetchRestriction = useCallback(async () => { + const res = await axios.get(`/api/restriction/getOne/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + // console.log(res.data.CmpRes) + setState(res.data.CmpRestriction) + changeState({ loading: false }); + if (res.status === 200) changeState({ ...res.data }); + }, [token]); + + useEffect(() => { + fetchRestriction(); + }, [fetchRestriction]); + + + const handleSubmit = async () => { + + changeState({ loading: true }); + let res = await axios.put( + `/api/restriction/update/${id}`, + { + ...state, + }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + //if (res.status === 200) window.location.reload(); + // console.log(res.data) + // console.log(res.status == 200) + if (res.data.success == true) { + changeState({ loading: false }); + swal("Edit CMP-Condition successfully!"); + history.goBack() + } + }; + const onCancel = () => { + // window.location = "/comproducts"; + history.goBack() + + }; + + return ( + <> +
+
+

EDIT-CMS

+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + ) +} + +export default EditCms \ No newline at end of file diff --git a/src/views/CMS/ViewCms.js b/src/views/CMS/ViewCms.js new file mode 100644 index 0000000..311395e --- /dev/null +++ b/src/views/CMS/ViewCms.js @@ -0,0 +1,127 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +function ViewOffer() { + const [cmsRes, setCmsRes] = useState([]) + const { id } = useParams(); + // console.log(id) + const token = isAutheticated(); + + const getOffer = useCallback(async () => { + let res = await axios.get( + `/api/restriction/getOne/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + //console.log(res.data) + setCmsRes(res.data.CmpRestriction) + + + }, [token]); + + useEffect(() => { + getOffer(); + }, [getOffer]); + + + + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-CMS

+ {/* */} + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + {/* */} + + + + + + + + + + + + + + + + + + + + +
Id
About Us{cmsRes?.About_Us}
Terms and Conditions{cmsRes?.Terms_and_Conditions}
Privacy Policy{cmsRes?.Privacy_Policy}
Added On + {new Date(`${cmsRes?.createdAt}`).toDateString()} , {`${formatAMPM(cmsRes?.createdAt)}`} +
Updated At + {new Date(`${cmsRes?.updatedAt}`).toDateString()} , {`${formatAMPM(cmsRes?.updatedAt)}`} +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default ViewOffer; + diff --git a/src/views/CMS/cms.js b/src/views/CMS/cms.js new file mode 100644 index 0000000..0f2bb58 --- /dev/null +++ b/src/views/CMS/cms.js @@ -0,0 +1,245 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { isAutheticated } from "../../auth"; + +function cms() { + const [cmsRes, setCmsRes] = useState([]) + + const token = isAutheticated(); + + const getRestriction = useCallback(async () => { + let res = await axios.get( + `/api/restriction/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data.CmpRestriction[0]) + setCmsRes(res.data.CmpRestriction[0]) + + + }, [token]); + + useEffect(() => { + getRestriction(); + }, [getRestriction]); + + + // console.log(cmsRes) + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-CMS

+ {/* */} + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
About UsTerms and ConditionsPrivacy PolicyAction
{cmsRes?.About_Us}{cmsRes?.Terms_and_Conditions}{cmsRes?.Privacy_Policy} + + + + + + + + + {/* */} +
+
+ + {/* second table */} + + {/*
+ + + + + + + + + + + + + + + + + + + + +
Terms and ConditionsAction
{cmsRes?.Terms_and_Conditions} + + + + + + + + + {/* */} + {/*
+
*/} + + + + + {/* end second table */} + + {/* third table */} + {/*
+ + + + + + + + + + + + + + + + + + + + +
Privacy PolicyAction
{cmsRes?.Privacy_Policy} + + + + + + + + + {/* */} + {/*
+
*/} + + + {/* end third table */} + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default cms; diff --git a/src/views/Category/Category.js b/src/views/Category/Category.js index 44d8e82..36e0ad8 100644 --- a/src/views/Category/Category.js +++ b/src/views/Category/Category.js @@ -142,7 +142,7 @@ function Products() { @@ -150,7 +150,7 @@ function Products() { - {/*
+ return ( + <> +
+
+
+ {/* */} +
+
+
+

Bisuness-Directory

+ + {/*
  1. Dating App @@ -84,17 +84,17 @@ const Bisuness = () => {
  2. Commerce - Products
*/} -
-
-
- {/* */} +
+
+
+ {/* */} -
-
-
-
-
- {/*
+
+
+
+
+
+ {/*
*/} - {/*
+ {/* */} -
-
- - - - - - - - - - - - {bisuness.map((item) => + +
+
NameCategoryCityStatusActions
+ + + + + + + + + + + {bisuness.map((item) => - - - - - - + + + + + - + + + + + - )} - -
NameCategoryCityStatusActions
{item?.name} {item?.category}{item?.city} - - {status ? "Live" : "Suspended"} - - - - +
{item?.name} {item?.category}{item?.city} + + {status ? "Live" : "Suspended"} + + + + - - + + - + - - - -
-
+ )} + + +
- {/*
+ {/*
{
*/} - {/* */} -
-
-
-
-
- {/* */} + {/* */} +
+
- - ) +
+ {/* */} +
+
+ + ) } export default Bisuness \ No newline at end of file diff --git a/src/views/Directory/EditBisuness.js b/src/views/Directory/EditBisuness.js index 9018459..f60eef1 100644 --- a/src/views/Directory/EditBisuness.js +++ b/src/views/Directory/EditBisuness.js @@ -10,7 +10,8 @@ import { useHistory } from "react-router-dom"; const EditBisuness = () => { const [categoryName, setCategoryName] = useState([]); - const { token } = isAutheticated(); + const [image, setImage] = useState(); + const token = isAutheticated(); let history = useHistory(); const [state, setState] = useState({ @@ -93,19 +94,34 @@ const EditBisuness = () => { const handleSubmit = async () => { - if (!(name || description || phone || email || Bname || Sname || city)) { - alert("Please fill required field "); - return; - } + const myForm = new FormData(); + myForm.set('name', state.name) + myForm.set('phone', state.phone) + myForm.set('email', state.email) + myForm.set('Building_Name', state.Building_Name) + myForm.set('Street_Name', state.Street_Name) + myForm.set('country', state.country) + myForm.set('city', state.city) + myForm.set('description', state.description) + + myForm.set('category', state.category) + + myForm.set('status', state.status) + + myForm.set('Glocation', state.Glocation) + myForm.set('LinkedinUrl', state.Glocation) + myForm.set('FacebookUrl', state.FacebookUrl) + myForm.set('InstagramUrl', state.InstagramUrl) + myForm.set("image", image); + changeState({ loading: true }); let res = await axios.put( `/api/directory/update/${id}`, - { - ...state, - }, + myForm, { headers: { + "content-Type": 'multipart/form-data', Authorization: `Bearer ${token}`, }, } @@ -125,7 +141,7 @@ const EditBisuness = () => { - // console.log(state) + console.log(image) return ( <>
@@ -332,6 +348,29 @@ const EditBisuness = () => {
+
+
+
+ + setImage(e.target.files[0])} + placeholder="Bisuness Image" + /> +
+
+
diff --git a/src/views/Directory/View_Bisuness.js b/src/views/Directory/View_Bisuness.js index 1dc08c1..1538321 100644 --- a/src/views/Directory/View_Bisuness.js +++ b/src/views/Directory/View_Bisuness.js @@ -25,7 +25,7 @@ const View_Bisuness = () => { }, } ); - console.log(res.data.directory.name) + console.log(res.data.directory) setBisuness(res.data.directory) // changeState({ // ...res.data, @@ -66,52 +66,37 @@ const View_Bisuness = () => {
- - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - diff --git a/src/views/Events/AddEvent.js b/src/views/Events/AddEvent.js new file mode 100644 index 0000000..8a3f908 --- /dev/null +++ b/src/views/Events/AddEvent.js @@ -0,0 +1,164 @@ + +import axios from "axios"; +import React, { useCallback, useEffect, useState } from "react"; +import { API } from "../../data"; +import { isAutheticated } from "../../auth"; +import ClipLoader from "react-spinners/ClipLoader"; +import { useHistory } from "react-router-dom"; +import swal from 'sweetalert'; + +import { + CButton, + CCard, + CCardBody, + CCol, + CContainer, + CForm, + CFormInput, + CInputGroup, + CInputGroupText, + CRow, +} from '@coreui/react' +import CIcon from '@coreui/icons-react' +import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription } from '@coreui/icons' +const AddEvent = () => { + const { token } = isAutheticated(); + let history = useHistory(); + const [image, setImage] = useState(""); + const [title, setTitle] = useState(""); + const [description, setDescription] = useState(""); + const [location, setLocation] = useState(""); + + const [loading, setLoading] = useState(false); + + + const handleSubmit = async () => { + const myForm = new FormData(); + + myForm.set("title", title); + myForm.set("description", description); + myForm.set("location", location); + myForm.set("image", image); + setLoading({ loading: true }); + // console.log(image) + let res = await axios.post( + `/api/event/create`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Event Added Successfully!", "success"); + history.goBack(); + } + + setLoading(false); + }; + const handleImage = (e) => { + const files = e.target.files[0]; + // console.log(files) + setImage(files); + + }; + // + const onCancel = () => { + // window.location = "/comproducts"; + history.goBack() + + }; + + return ( + <> +
+ + + + + + +

Add Event

+
+
+ + + + + setTitle(e.target.value)} + value={title} + placeholder="Title" /> + + + + + + + setDescription(e.target.value)} + value={description} + placeholder="Description" /> + + + + + + setLocation(e.target.value)} + value={location} + placeholder="Location" /> + + + + + {/* */} + + + +
+ +
+ + +
+
+
+
+
+
+
+
+
+ + + ) +} + +export default AddEvent \ No newline at end of file diff --git a/src/views/Events/EditEvent.js b/src/views/Events/EditEvent.js new file mode 100644 index 0000000..0c15dbb --- /dev/null +++ b/src/views/Events/EditEvent.js @@ -0,0 +1,178 @@ + +import axios from "axios"; +import React, { useCallback, useEffect, useState } from "react"; +import { API } from "../../data"; +import { isAutheticated } from "../../auth"; +import ClipLoader from "react-spinners/ClipLoader"; +import { useHistory } from "react-router-dom"; +import { Link, useParams } from "react-router-dom"; +import swal from 'sweetalert'; + +import { + CButton, + CCard, + CCardBody, + CCol, + CContainer, + CForm, + CFormInput, + CInputGroup, + CInputGroupText, + CRow, +} from '@coreui/react' +import CIcon from '@coreui/icons-react' +import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription } from '@coreui/icons' +const EditEvent = () => { + const { id } = useParams(); + // console.log(id) + const { token } = isAutheticated(); + let history = useHistory(); + const [image, setImage] = useState(""); + const [title, setTitle] = useState(""); + const [description, setDescription] = useState(""); + const [location, setLocation] = useState(""); + const [loading, setLoading] = useState(false); + + //fetch one image + useEffect(async () => { + const res = await axios.get(`/api/event/getOne/${id}`, { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + }); + // console.log(res.data) + setTitle(res.data.Event.title) + setDescription(res.data.Event.description) + setLocation(res.data.Event.location) + + }, [id]); + + const handleSubmit = async () => { + const myForm = new FormData(); + + myForm.set("title", title); + myForm.set("description", description); + myForm.set("location", location); + myForm.set("image", image); + setLoading({ loading: true }); + // console.log(image) + let res = await axios.put( + `/api/event/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Event Edit Successfully!", "success"); + history.goBack(); + } + + setLoading(false); + }; + const handleImage = (e) => { + const files = e.target.files[0]; + // console.log(files) + setImage(files); + + }; + // + const onCancel = () => { + // window.location = "/comproducts"; + history.goBack() + + }; + + return ( + <> +
+ + + + + + +

Edit Event

+
+
+ + + + + setTitle(e.target.value)} + value={title} + placeholder="Title" /> + + + + + + setDescription(e.target.value)} + value={description} + placeholder="Description" /> + + + + + + setLocation(e.target.value)} + value={location} + placeholder="Location" /> + + + + + {/* */} + + + +
+ +
+ + +
+
+
+
+
+
+
+
+
+ + + ) +} + +export default EditEvent \ No newline at end of file diff --git a/src/views/Events/Event.js b/src/views/Events/Event.js new file mode 100644 index 0000000..cf7cab8 --- /dev/null +++ b/src/views/Events/Event.js @@ -0,0 +1,166 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { isAutheticated } from "../../auth"; + +function Event() { + const [event, setEvent] = useState([]) + + const { token } = isAutheticated(); + + const getEvent = useCallback(async () => { + let res = await axios.get( + `/api/event/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + setEvent(res.data.Event) + + + }, [token]); + + useEffect(() => { + getEvent(); + }, [getEvent]); + + + const handleDelete = async (id) => { + let status = window.confirm("Do you want to delete"); + if (!status) return; + + let res = await axios.delete(`/api/event/delete/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + console.log(res) + if (res.data.success == true) { + swal("success!", "Event Deleted Successfully!", "success"); + window.location.reload(); + } + }; + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-Event

+ + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+
NameCategoryemailphoneBuilding_NameStreet_NamecitydescriptionStatusGoogle LocationLinkedinUrlFacebookUrlintagramUrl
Name{bisuness?.name}
Bisuness image + +
Category{bisuness?.category}
email {bisuness?.email}
phone {bisuness?.phone}
Building_Name{bisuness?.Building_Name}
Street_Name{bisuness?.Street_Name}
city {bisuness?.city}
description {bisuness?.description}
Status + + {bisuness?.status ? "Live" : "Suspended"} + +
Google Location{bisuness?.Glocation}
LinkedinUrl {bisuness?.LinkedinUrl}
FacebookUrl{bisuness?.FacebookUrl}
intagramUrl {bisuness?.InstagramUrl}
{bisuness?.name} {bisuness?.category}{bisuness?.email}{bisuness?.phone}{bisuness?.Building_Name}{bisuness?.Street_Name}{bisuness?.city}{bisuness?.description} - - {bisuness?.status ? "Live" : "Suspended"} - - {bisuness?.Glocation}{bisuness?.LinkedinUrl}{bisuness?.FacebookUrl}{bisuness?.InstagramUrl} - -
+ + + + + + + + + + + {event && event.map((item, index) => + + + + + + + + + + )} + +
TitleImageLocationAdded OnAction
{item?.title} + {item?.location} + {/* {item?.addedOn} */} + {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} + + + + + + + + + + + +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+ + ); +} + +export default Event; diff --git a/src/views/Events/ViewEvent.js b/src/views/Events/ViewEvent.js new file mode 100644 index 0000000..4f89caa --- /dev/null +++ b/src/views/Events/ViewEvent.js @@ -0,0 +1,122 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +function ViewEvent() { + const [event, setEvent] = useState([]) + const { id } = useParams(); + console.log(id) + const token = isAutheticated(); + + const getEvent = useCallback(async () => { + let res = await axios.get( + `/api/event/getOne/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data.Event) + setEvent(res.data.Event) + + + }, [token]); + + useEffect(() => { + getEvent(); + }, [getEvent]); + + + + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-Event

+ + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Id {event?._id}
Title {event?.title}
Image + +
Description{event?.description}
Location{event?.location}
Added On + {new Date(`${event?.addedOn}`).toDateString()} , {`${formatAMPM(event?.addedOn)}`} +
Updated At + {new Date(`${event?.updatedAt}`).toDateString()} , {`${formatAMPM(event?.updatedAt)}`} +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default ViewEvent; diff --git a/src/views/Feedback/Pagination.js b/src/views/Feedback/Pagination.js new file mode 100644 index 0000000..92a8292 --- /dev/null +++ b/src/views/Feedback/Pagination.js @@ -0,0 +1,25 @@ +import React from 'react'; +import { Link } from "react-router-dom"; +const Pagination = ({ postsPerPage, totalPosts, paginate }) => { + const pageNumbers = []; + + for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { + pageNumbers.push(i); + } + + return ( + + ); +}; + +export default Pagination; \ No newline at end of file diff --git a/src/views/Feedback/ViewFeedback.js b/src/views/Feedback/ViewFeedback.js new file mode 100644 index 0000000..7cd90bd --- /dev/null +++ b/src/views/Feedback/ViewFeedback.js @@ -0,0 +1,123 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +function ViewFeedback() { + const [user, setUser] = useState([]) + + + const [feedback, setFeedback] = useState([]) + const { id } = useParams(); + // console.log(id) + const token = isAutheticated(); + + const getFeedback = useCallback(async () => { + let res = await axios.get( + `/api/feedback/getOne/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + setFeedback(res.data.feedback) + + let resp = await axios.get( + `/api/v1/admin/user/${feedback.user}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + setUser(resp.data.user) + + + }, [token, feedback.user]); + + useEffect(() => { + getFeedback(); + }, [getFeedback]); + + + + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-Customer feedback

+
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
User_Id{user?._id}
Name{feedback?.name}
email{user?.email}
Image + +
Description{feedback?.description}
Pnone No.{user?.phone}
Feedback Given At + {new Date(`${feedback?.createdAt}`).toDateString()} , {`${formatAMPM(feedback?.createdAt)}`} +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default ViewFeedback; diff --git a/src/views/Feedback/feedback.js b/src/views/Feedback/feedback.js new file mode 100644 index 0000000..9f305df --- /dev/null +++ b/src/views/Feedback/feedback.js @@ -0,0 +1,146 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import Pagination from "./Pagination"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { isAutheticated } from "../../auth"; + +function feedback() { + const [feedback, setFeedback] = useState([]) + + + const [currentPage, setCurrentPage] = useState(1); + const [postsPerPage] = useState(10); + const token = isAutheticated(); + + const getRestriction = useCallback(async () => { + let res = await axios.get( + `/api/feedback/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data.feedback) + setFeedback(res.data.feedback) + + + }, [token]); + + useEffect(() => { + getRestriction(); + }, [getRestriction]); + + + // console.log(cmsRes) + + // Get current posts + //pagination + const indexOfLastPost = currentPage * postsPerPage; + const indexOfFirstPost = indexOfLastPost - postsPerPage; + const currentPosts = feedback.slice(indexOfFirstPost, indexOfLastPost); + + // Change page + const paginate = pageNumber => setCurrentPage(pageNumber); + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + + return ( + <> +
+
+
+ {/* */} +
+
+
+

CMP-Feedback

+ +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + {currentPosts && currentPosts.map((item, index) => + + + + + + + + + + + + )} + +
NameDescriptionGiven AtAction
{item?.name}{item?.description} + + {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} + + + + + + + + +
+
+ {/* */} +
+
+
+
+
+ {/* */} +
+
+ + + ); +} + +export default feedback; diff --git a/src/views/News/EditNews.js b/src/views/News/EditNews.js index a494cd4..9379dd0 100644 --- a/src/views/News/EditNews.js +++ b/src/views/News/EditNews.js @@ -39,7 +39,6 @@ const EditNews = () => { // Authorization: `Bearer ${token}`, // }, }); - // console.log(res.data.news.title) setTitle(res.data.news.title) setDescription(res.data.news.description) diff --git a/src/views/News/News.js b/src/views/News/News.js index 1fcaf72..d0553cb 100644 --- a/src/views/News/News.js +++ b/src/views/News/News.js @@ -119,7 +119,7 @@ function News() { @@ -128,7 +128,7 @@ function News() { @@ -136,7 +136,7 @@ function News() { + + + + + + + + + + + + + ) +} + +export default AddOffer \ No newline at end of file diff --git a/src/views/Offers/EditOffer.js b/src/views/Offers/EditOffer.js new file mode 100644 index 0000000..3a74d85 --- /dev/null +++ b/src/views/Offers/EditOffer.js @@ -0,0 +1,224 @@ + +import axios from "axios"; +import React, { useCallback, useEffect, useState } from "react"; +import { API } from "../../data"; +import { isAutheticated } from "../../auth"; +import ClipLoader from "react-spinners/ClipLoader"; +import { useHistory } from "react-router-dom"; +import swal from 'sweetalert'; +import { Link, useParams } from "react-router-dom"; +import { + CButton, + CCard, + CCardBody, + CCol, + CContainer, + CForm, + CFormInput, + CInputGroup, + CInputGroupText, + CRow, +} from '@coreui/react' +import CIcon from '@coreui/icons-react' +import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription } from '@coreui/icons' +const EditOffer = () => { + const { id } = useParams(); + const token = isAutheticated(); + // console.log(token) + let history = useHistory(); + const [image, setImage] = useState(""); + const [title, setTitle] = useState(""); + const [bisunessName, setBisunessName] = useState([]); + const [sendBisunessName, setSendBisunessName] = useState(''); + + const [description, setDescription] = useState(""); + const [location, setLocation] = useState(""); + + const [loading, setLoading] = useState(false); + + + //fetch one Offer + useEffect(async () => { + const res = await axios.get(`/api/offer/getOne/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + // console.log(res.data) + setTitle(res.data.offer.title) + setDescription(res.data.offer.description) + setLocation(res.data.offer.location) + setSendBisunessName(res.data.offer.bisunessName) + + }, [id]); + const fetchBusuness = useCallback(async () => { + const res = await axios.get(`/api/directory/getAll`, { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + }); + + // console.log(res.data.directory); + setBisunessName(res.data.directory) + + }, [token]); + + useEffect(async () => { + fetchBusuness(); + + }, [fetchBusuness]); + + + + const handleSubmit = async () => { + const myForm = new FormData(); + + myForm.set("title", title); + myForm.set("description", description); + myForm.set("bisunessName", sendBisunessName); + myForm.set("location", location); + myForm.set("image", image); + setLoading({ loading: true }); + // console.log(image) + let res = await axios.put( + `/api/offer/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Event Added Successfully!", "success"); + history.goBack(); + } + + setLoading(false); + }; + const handleImage = (e) => { + const files = e.target.files[0]; + // console.log(files) + setImage(files); + + }; + // + const onCancel = () => { + // window.location = "/comproducts"; + history.goBack() + + }; + // console.log(bisunessName) + return ( + <> +
+ + + + + + +

Edit Offer

+
+
+ + + + + setTitle(e.target.value)} + value={title} + placeholder="Title" /> + + + + + + + setDescription(e.target.value)} + value={description} + placeholder="Description" /> + + + + + + + + + + + + + setLocation(e.target.value)} + value={location} + placeholder="Location" /> + + + + + {/* */} + + + +
+ +
+ + +
+
+
+
+
+
+
+
+
+ + + ) +} + +export default EditOffer \ No newline at end of file diff --git a/src/views/Offers/Offer.js b/src/views/Offers/Offer.js new file mode 100644 index 0000000..a85902d --- /dev/null +++ b/src/views/Offers/Offer.js @@ -0,0 +1,162 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { isAutheticated } from "../../auth"; + +function Offer() { + const [offer, setOffer] = useState([]) + + const token = isAutheticated(); + + const getOffer = useCallback(async () => { + let res = await axios.get( + `/api/offer/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + setOffer(res.data.offer) + + + }, [token]); + + useEffect(() => { + getOffer(); + }, [getOffer]); + + + const handleDelete = async (id) => { + let status = window.confirm("Do you want to delete"); + if (!status) return; + + let res = await axios.delete(`/api/offer/delete/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + console.log(res) + if (res.data.success == true) { + swal("success!", "Offer Deleted Successfully!", "success"); + window.location.reload(); + } + }; + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-Offers

+ + +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + {offer && offer.map((item, index) => + + + + + + + + + + + + )} + +
TitleImageBusiness NameLocationAdded OnAction
{item?.title} + {item?.bisunessName}{item?.location} + {/* {item?.addedOn} */} + {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} + + + + + + + + + + + +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default Offer; diff --git a/src/views/Offers/ViewOffer.js b/src/views/Offers/ViewOffer.js new file mode 100644 index 0000000..c57f42b --- /dev/null +++ b/src/views/Offers/ViewOffer.js @@ -0,0 +1,137 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +function ViewOffer() { + const [offer, setOffer] = useState([]) + const { id } = useParams(); + console.log(id) + const token = isAutheticated(); + + const getOffer = useCallback(async () => { + let res = await axios.get( + `/api/offer/getOne/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + setOffer(res.data.offer) + + + }, [token]); + + useEffect(() => { + getOffer(); + }, [getOffer]); + + + + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-Offers

+ + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Id{offer?._id}
Title{offer?.title}
Image + +
Bisuness Name {offer?.bisunessName}
Description{offer?.description}
Location{offer?.location}
Added On + {new Date(`${offer?.addedOn}`).toDateString()} , {`${formatAMPM(offer?.addedOn)}`} +
Updated At + {new Date(`${offer?.updatedAt}`).toDateString()} , {`${formatAMPM(offer?.updatedAt)}`} +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default ViewOffer; diff --git a/src/views/Users/Pagination.js b/src/views/Users/Pagination.js new file mode 100644 index 0000000..55b2c76 --- /dev/null +++ b/src/views/Users/Pagination.js @@ -0,0 +1,25 @@ +import React from 'react'; +import { Link } from "react-router-dom"; +const Pagination = ({ userPerPage, totalUsers, paginate }) => { + const pageNumbers = []; + + for (let i = 1; i <= Math.ceil(totalUsers / userPerPage); i++) { + pageNumbers.push(i); + } + + return ( + + ); +}; + +export default Pagination; \ No newline at end of file diff --git a/src/views/Users/ViewUsers.js b/src/views/Users/ViewUsers.js new file mode 100644 index 0000000..7fd6ba8 --- /dev/null +++ b/src/views/Users/ViewUsers.js @@ -0,0 +1,131 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +function ViewUsers() { + const [user, setUser] = useState([]) + const { id } = useParams(); + // console.log(id) + const token = isAutheticated(); + + const getUserDetails = useCallback(async () => { + + + let resp = await axios.get( + `/api/v1/admin/user/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + setUser(resp.data.user) + + + }, [token]); + + useEffect(() => { + getUserDetails(); + }, [getUserDetails]); + + + + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-User Details

+
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + {/* */} + + + + + + + + + + + + + + +
User_Id{user?._id}
Name{user?.name}
email{user?.email}
Image + +
Description
Pnone No.{user?.phone}
Role{user?.role}
Register At + {new Date(`${user?.createdAt}`).toDateString()} , {`${formatAMPM(user?.createdAt)}`} +
Profile Updated At + {new Date(`${user?.updatedAt}`).toDateString()} , {`${formatAMPM(user?.updatedAt)}`} +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default ViewUsers; + diff --git a/src/views/Users/users.js b/src/views/Users/users.js new file mode 100644 index 0000000..57c1bd9 --- /dev/null +++ b/src/views/Users/users.js @@ -0,0 +1,153 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import Pagination from "./Pagination"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { isAutheticated } from "../../auth"; + +function users() { + const [users, setUsers] = useState([]) + + + const [currentPage, setCurrentPage] = useState(1); + const [userPerPage] = useState(10); + const token = isAutheticated(); + + const getAllUsers = useCallback(async () => { + let res = await axios.get( + `/api/v1/admin/users`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + setUsers(res.data.users) + + + }, [token]); + + useEffect(() => { + getAllUsers(); + }, [getAllUsers]); + + + // console.log(cmsRes) + + // Get current posts + //pagination + const indexOfLastUser = currentPage * userPerPage; + const indexOfFirstUser = indexOfLastUser - userPerPage; + const currentUser = users.slice(indexOfFirstUser, indexOfLastUser); + + // Change page + const paginate = pageNumber => setCurrentPage(pageNumber); + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + + return ( + <> +
+
+
+ {/* */} +
+
+
+

CMP - All Users

+ +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + {currentUser && currentUser.map((item, index) => + + + + + + + + + + + + + + + )} + +
NameemailProfile ImagePhone No.Register AtAction
{item?.name}{item?.email} + + {item?.phone} + + {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} + + + + + + + + +
+
+ {/* */} +
+
+
+
+
+ {/* */} +
+
+ + + ); +} + +export default users; diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index ca5ddaf..1973ebd 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -15,11 +15,13 @@ import { } from '@coreui/react' import CIcon from '@coreui/icons-react' import { cilLockLocked, cilUser } from '@coreui/icons' +import ClipLoader from "react-spinners/ClipLoader"; import { useState } from 'react' import axios from 'axios' import { useHistory } from 'react-router-dom' const Login = () => { + const [loading, setLoading] = useState(false); const [auth, setAuth] = useState({ email: "", password: "" @@ -31,24 +33,19 @@ const Login = () => { }; const Login = async () => { - const res = await axios.post("/api/user/login/", auth); + setLoading({ loading: true }) + const res = await axios.post("/api/v1/user/login/", auth); if (res.data.success == true) { localStorage.setItem("authToken", res.data.token) - console.log(res.data) - localStorage.setItem("auth", JSON.stringify({ - user: res.data.user, - token: res.data.token, - - - })); history.push('/dashboard') + setLoading(false); + window.location.reload() + } else { - if (res.data.status === "blocked") - alert(res.data.message) - else - alert("Invalid Credentials"); + alert("Invalid Credentials"); + setLoading(false); } } return ( @@ -82,7 +79,9 @@ const Login = () => { - Login + + {!loading && "Login"} + diff --git a/src/views/pages/register/Change_password.js b/src/views/pages/register/Change_password.js index a386109..d505333 100644 --- a/src/views/pages/register/Change_password.js +++ b/src/views/pages/register/Change_password.js @@ -13,6 +13,7 @@ import { } from '@coreui/react' import CIcon from '@coreui/icons-react' import { cilLockLocked, cilUser } from '@coreui/icons' +import ClipLoader from "react-spinners/ClipLoader"; import axios from 'axios' import { isAutheticated } from 'src/auth' import Swal from 'sweetalert2' @@ -22,15 +23,16 @@ const Register = () => { const [oldPassword, setOldPassword] = useState(); const [newPassword, setNewPassword] = useState(); const [confirmPassword, setConfirmPassword] = useState(); + const [loading, setLoading] = useState(false); const history = useHistory(); const handleSubmit = async () => { const token = localStorage.getItem("authToken") - //console.log(token) + setLoading({ loading: true }) if (newPassword == confirmPassword) { - let res = await axios.put('/api/user/update/password', + let res = await axios.put('/api/v1/user/password/update', { oldPassword , newPassword, @@ -40,8 +42,9 @@ const Register = () => { Authorization: `Bearer ${token}`, } }) - console.log(res) - if (res) { + + // console.log(res.data.success) + if (res.data.success == true) { Swal.fire({ title: 'Done', text: 'Password Changed', @@ -52,10 +55,12 @@ const Register = () => { }).then(() => { history.push('/dashboard') }); - } + } + setLoading(false); } else { alert('new password and confirm password are not matched') + setLoading(false); } } @@ -98,7 +103,10 @@ const Register = () => { />
- Submit + + + {!loading && "Submit"} +
From 973783b95a6e58dfef2ea9d68bf03a7e7c552052 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 30 Jun 2022 15:17:17 +0530 Subject: [PATCH 02/48] make it betterlkjkfkf --- src/components/AppFooter.js | 2 +- src/index.js | 4 +-- src/views/Banners/AddBanner.js | 60 ++++++++++++++++++++++++++++++---- src/views/Banners/Banner.js | 13 ++++++++ src/views/Users/ViewUsers.js | 2 +- 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/src/components/AppFooter.js b/src/components/AppFooter.js index 0560963..90a810f 100644 --- a/src/components/AppFooter.js +++ b/src/components/AppFooter.js @@ -8,7 +8,7 @@ const AppFooter = () => { {new Date().getFullYear()} © CMP. - \ + ) } diff --git a/src/index.js b/src/index.js index 34efee9..f582681 100644 --- a/src/index.js +++ b/src/index.js @@ -10,8 +10,8 @@ import store from './store' import axios from 'axios' const setupAxios = () => { - axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - //axios.defaults.baseURL = 'http://localhost:5000' + //axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; + axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/views/Banners/AddBanner.js b/src/views/Banners/AddBanner.js index 1dbebd0..6affc3c 100644 --- a/src/views/Banners/AddBanner.js +++ b/src/views/Banners/AddBanner.js @@ -20,7 +20,7 @@ import { CRow, } from '@coreui/react' import CIcon from '@coreui/icons-react' -import { cilPencil, cilNotes, cilCalendar } from '@coreui/icons' +import { cilPencil, cilNotes, cilCalendar, cilAddressBook, cil3d, cilActionUndo, cilNoteAdd } from '@coreui/icons' const AddBanner = () => { const { token } = isAutheticated(); let history = useHistory(); @@ -31,17 +31,23 @@ const AddBanner = () => { const [startDate, setStartDate] = useState(new Date()); const [endDate, setEndDate] = useState(new Date()); + const [subSection, setSubSection] = useState(""); + const [category, setCategory] = useState(false); + + const [loading, setLoading] = useState(false); + const handleSubmit = async () => { const myForm = new FormData(); myForm.set("title", title); myForm.set("subTitle", subTitle); myForm.set("section", section); + myForm.set("subSection", subSection); myForm.set("startDate", startDate); myForm.set("endDate", endDate); myForm.set("image", image); @@ -77,6 +83,26 @@ const AddBanner = () => { }; + useEffect(() => { + const getData = async () => { + let res = await axios.get( + `/api/category/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + console.log(res.data) + setCategory(res.data.category) + } + if (section === "category") { + getData() + } else { + setCategory(false) + } + }, [section]) + return ( <>
@@ -111,7 +137,8 @@ const AddBanner = () => { - + + Section @@ -119,19 +146,40 @@ const AddBanner = () => { name="section" value={section} onChange={(e) => setSection(e.target.value)} - className="form-control input-field" + className="form-control input-field " > - + - - + + {/* */} + + {category && <> + + SubSection + + + } diff --git a/src/views/Banners/Banner.js b/src/views/Banners/Banner.js index 928443d..41dfe9c 100644 --- a/src/views/Banners/Banner.js +++ b/src/views/Banners/Banner.js @@ -98,6 +98,8 @@ function banner() { Title Image Section + Sub Section + Status Added On Action @@ -108,7 +110,18 @@ function banner() { {item?.title} + + {item?.section} + {item?.subSection} + + new Date() ? "success" : "danger" + } font-size-10`} + > + {new Date(`${item?.endDate}`) > new Date() ? "Live" : "Suspended"} + + {/* {item?.addedOn} */} {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} diff --git a/src/views/Users/ViewUsers.js b/src/views/Users/ViewUsers.js index 7fd6ba8..0250e1f 100644 --- a/src/views/Users/ViewUsers.js +++ b/src/views/Users/ViewUsers.js @@ -93,7 +93,7 @@ function ViewUsers() { {/* Description */} - Pnone No. + Phone No. {user?.phone} Role {user?.role} From 24dbbd76cedcf5c6a939936a48e1eead115f994c Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Fri, 15 Jul 2022 18:00:20 +0530 Subject: [PATCH 03/48] complete --- src/App.js | 8 +- src/_nav.js | 8 + src/components/AppSidebarNav.js | 5 +- src/index.js | 4 +- src/routes.js | 12 ++ src/views/Banners/AddBanner.js | 37 ++-- src/views/Banners/EditBanner.js | 91 ++++++-- src/views/Banners/ViewBanner.js | 1 + src/views/CMS/EditCms.js | 37 ++-- src/views/Category/AddCategory.js | 37 ++-- src/views/Category/EditCategory.js | 38 ++-- src/views/Directory/Add_Business.js | 49 +++-- src/views/Directory/EditBisuness.js | 36 ++-- src/views/Events/AddEvent.js | 37 ++-- src/views/Events/EditEvent.js | 38 ++-- src/views/News/AddNews.js | 37 ++-- src/views/News/EditNews.js | 37 ++-- src/views/Offers/AddOffer.js | 37 ++-- src/views/Offers/EditOffer.js | 37 ++-- src/views/Requirement/AddRequirement.js | 205 ++++++++++++++++++ src/views/Requirement/EditRequirement.js | 220 ++++++++++++++++++++ src/views/Requirement/Requirement.js | 122 +++++++++++ src/views/Requirement/RequirementOpt.js | 132 ++++++++++++ src/views/Requirement/ViewRequirement.js | 142 +++++++++++++ src/views/pages/login/Login.js | 28 ++- src/views/pages/register/Change_password.js | 4 + 26 files changed, 1234 insertions(+), 205 deletions(-) create mode 100644 src/views/Requirement/AddRequirement.js create mode 100644 src/views/Requirement/EditRequirement.js create mode 100644 src/views/Requirement/Requirement.js create mode 100644 src/views/Requirement/RequirementOpt.js create mode 100644 src/views/Requirement/ViewRequirement.js diff --git a/src/App.js b/src/App.js index 2a695cc..f9ebd04 100644 --- a/src/App.js +++ b/src/App.js @@ -76,13 +76,13 @@ const App = () => { } /> - {/* localStorage.getItem('authToken') ? */} - ( + + {/* ( userdata && userdata?._id ? : userdata === false ? :
- )} /> - {/* < ProtectedRoute path="/" name="Home" render={(props) => } /> */} + )} /> */} + } /> diff --git a/src/_nav.js b/src/_nav.js index a7a8cdb..c8dcff9 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -6,6 +6,7 @@ import { cilChartPie, cilCursor, cilDrop, + cilFilterSquare, cilMoney, cilNewspaper, cilNotes, @@ -77,6 +78,12 @@ const _nav = [ icon: , to: '/feedback', }, + { + component: CNavItem, + name: 'Requirements', + icon: , + to: '/requirement', + }, { component: CNavItem, name: 'Users', @@ -85,6 +92,7 @@ const _nav = [ }, + ] export default _nav diff --git a/src/components/AppSidebarNav.js b/src/components/AppSidebarNav.js index 21d30ae..9e16944 100644 --- a/src/components/AppSidebarNav.js +++ b/src/components/AppSidebarNav.js @@ -53,6 +53,7 @@ export const AppSidebarNav = ({ items }) => { {...rest} > {item.items?.map((item, index) => + item.items ? navGroup(item, index) : navItem(item, index), )} @@ -62,7 +63,9 @@ export const AppSidebarNav = ({ items }) => { return ( {items && - items.map((item, index) => (item.items ? navGroup(item, index) : navItem(item, index)))} + items.map((item, index) => + + (item.items ? navGroup(item, index) : navItem(item, index)))} ) } diff --git a/src/index.js b/src/index.js index f582681..34efee9 100644 --- a/src/index.js +++ b/src/index.js @@ -10,8 +10,8 @@ import store from './store' import axios from 'axios' const setupAxios = () => { - //axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - axios.defaults.baseURL = 'http://localhost:5000' + axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; + //axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/routes.js b/src/routes.js index cc1bbd4..678ac7d 100644 --- a/src/routes.js +++ b/src/routes.js @@ -38,6 +38,11 @@ import ViewFeedback from './views/Feedback/ViewFeedback' //cms import Users from './views/Users/users' import ViewUsers from './views/Users/ViewUsers' +//Requirement +import ViewRequirement from './views/Requirement/ViewRequirement' +import Requirement from './views/Requirement/Requirement' +import AddRequirement from './views/Requirement/AddRequirement' +import EditRequirement from './views/Requirement/EditRequirement' // DashBoard const Change_Password = React.lazy(() => import('./views/pages/register/Change_password')) @@ -91,11 +96,18 @@ const routes = [ //CMS { path: '/feedback/view/:id', name: 'ViewFeedback', component: ViewFeedback }, { path: '/feedback', name: 'Feedback', component: Feedback }, + //Requirement + { path: '/requirement/view/:id', name: 'ViewRequirement', component: ViewRequirement }, + { path: '/requirement/edit/:id', name: 'EditRequirement', component: EditRequirement }, + { path: '/requirement/add/', name: 'AddRequirement', component: AddRequirement }, + { path: '/requirement', name: 'Requirement', component: Requirement }, //Users { path: '/users/view/:id', name: 'ViewUsers', component: ViewUsers }, { path: '/users', name: 'users', component: Users }, + + //dashboard { path: '/dashboard', name: 'Dashboard', component: Dashboard }, diff --git a/src/views/Banners/AddBanner.js b/src/views/Banners/AddBanner.js index 6affc3c..5a7de33 100644 --- a/src/views/Banners/AddBanner.js +++ b/src/views/Banners/AddBanner.js @@ -42,6 +42,10 @@ const AddBanner = () => { const handleSubmit = async () => { + if (!(title && subTitle && image && section && subSection && startDate && endDate)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("title", title); @@ -53,22 +57,29 @@ const AddBanner = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.post( - `/api/banner/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.post( + `/api/banner/create`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Banner Added Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Banner Added Successfully!", "success"); - history.goBack(); + + } catch (error) { + alert(error) + setLoading(false); } - setLoading(false); + }; const handleImage = (e) => { const files = e.target.files[0]; diff --git a/src/views/Banners/EditBanner.js b/src/views/Banners/EditBanner.js index 69c2974..3a0d808 100644 --- a/src/views/Banners/EditBanner.js +++ b/src/views/Banners/EditBanner.js @@ -22,7 +22,7 @@ import { CRow, } from '@coreui/react' import CIcon from '@coreui/icons-react' -import { cilPencil, cilNotes, cilCalendar } from '@coreui/icons' +import { cilPencil, cilNotes, cilCalendar, cilNoteAdd } from '@coreui/icons' const EditBanner = () => { const { id } = useParams(); const { token } = isAutheticated(); @@ -35,6 +35,8 @@ const EditBanner = () => { const [startDate, setStartDate] = useState(""); const [endDate, setEndDate] = useState(""); + const [subSection, setSubSection] = useState(""); + const [category, setCategory] = useState(false); const [loading, setLoading] = useState(false); //fetch one Offer @@ -49,38 +51,51 @@ const EditBanner = () => { setTitle(res.data.banner.title) setSubTitle(res.data.banner.subTitle) setSection(res.data.banner.section) + setSubSection(res.data.banner.subSection) setStartDate(new Date(res.data.banner.startDate).toLocaleDateString()) setEndDate(new Date(res.data.banner.endDate).toLocaleDateString()) }, [id]); const handleSubmit = async () => { + if (!(title && subTitle && image && section && subSection && startDate && endDate)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("title", title); myForm.set("subTitle", subTitle); myForm.set("section", section); + myForm.set("subSection", subSection); myForm.set("startDate", startDate); myForm.set("endDate", endDate); myForm.set("image", image); setLoading({ loading: true }); - // console.log(image) - let res = await axios.put( - `/api/banner/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.put( + `/api/banner/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Banner Updated Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Banner Updated Successfully!", "success"); - history.goBack(); + } catch (error) { + alert(error) + setLoading(false); } + // console.log(image) + + - setLoading(false); }; const handleImage = (e) => { const files = e.target.files[0]; @@ -95,6 +110,27 @@ const EditBanner = () => { }; + + useEffect(() => { + const getData = async () => { + let res = await axios.get( + `/api/category/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + console.log(res.data) + setCategory(res.data.category) + } + if (section === "category") { + getData() + } else { + setCategory(false) + } + }, [section]) + return ( <>
@@ -141,16 +177,35 @@ const EditBanner = () => { className="form-control input-field" > - + - - + {/* */} + {category && <> + + SubSection + + + } diff --git a/src/views/Banners/ViewBanner.js b/src/views/Banners/ViewBanner.js index 7d7944a..6254868 100644 --- a/src/views/Banners/ViewBanner.js +++ b/src/views/Banners/ViewBanner.js @@ -93,6 +93,7 @@ function ViewBanner() { Section{banner?.section} + Sub Section{banner?.subSection} Start Date {new Date(`${banner?.startDate}`).toDateString()} diff --git a/src/views/CMS/EditCms.js b/src/views/CMS/EditCms.js index 36d919f..b1b55b6 100644 --- a/src/views/CMS/EditCms.js +++ b/src/views/CMS/EditCms.js @@ -47,27 +47,32 @@ const EditCms = () => { const handleSubmit = async () => { - changeState({ loading: true }); - let res = await axios.put( - `/api/restriction/update/${id}`, - { - ...state, - }, - { - headers: { - Authorization: `Bearer ${token}`, + try { + let res = await axios.put( + `/api/restriction/update/${id}`, + { + ...state, }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + //if (res.status === 200) window.location.reload(); + // console.log(res.data) + // console.log(res.status == 200) + if (res.data.success == true) { + changeState({ loading: false }); + swal("Edit CMP-Condition successfully!"); + history.goBack() } - ); - //if (res.status === 200) window.location.reload(); - // console.log(res.data) - // console.log(res.status == 200) - if (res.data.success == true) { + } catch (error) { + alert(error) changeState({ loading: false }); - swal("Edit CMP-Condition successfully!"); - history.goBack() } + }; const onCancel = () => { // window.location = "/comproducts"; diff --git a/src/views/Category/AddCategory.js b/src/views/Category/AddCategory.js index bf6bb0f..9e2bfb7 100644 --- a/src/views/Category/AddCategory.js +++ b/src/views/Category/AddCategory.js @@ -31,6 +31,10 @@ const AddProduct = () => { const handleSubmit = async () => { + if (!(name && image)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("name", name); @@ -39,22 +43,29 @@ const AddProduct = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.post( - `/api/category/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - // Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.post( + `/api/category/create`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + // Authorization: `Bearer ${token}`, + }, + } + ); + //console.log(res.data.data.name) + if (res.data) { + swal("success!", "Category Added Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - //console.log(res.data.data.name) - if (res.data) { - swal("success!", "Category Added Successfully!", "success"); - history.goBack(); + } catch (error) { + alert("something went wrong") + setLoading(false); } - setLoading(false); + + }; const handleImage = (e) => { const files = e.target.files[0]; diff --git a/src/views/Category/EditCategory.js b/src/views/Category/EditCategory.js index 5aeafbc..cb5da18 100644 --- a/src/views/Category/EditCategory.js +++ b/src/views/Category/EditCategory.js @@ -43,6 +43,10 @@ const AddProduct = () => { const handleSubmit = async () => { + if (!(name && image)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("name", name); @@ -51,23 +55,27 @@ const AddProduct = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.put( - `/api/category/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - // Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.put( + `/api/category/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + // Authorization: `Bearer ${token}`, + }, + } + ); + //console.log(res.data.data.name) + if (res.data) { + swal("success!", "Category Edited Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - //console.log(res.data.data.name) - if (res.data) { - swal("success!", "Category Edited Successfully!", "success"); - history.goBack(); + } catch (error) { + alert("something went wrong") + setLoading(false); } - - setLoading(false); - }; + } const handleImage = (e) => { const files = e.target.files[0]; // console.log(files) diff --git a/src/views/Directory/Add_Business.js b/src/views/Directory/Add_Business.js index 0fa3a0d..f822904 100644 --- a/src/views/Directory/Add_Business.js +++ b/src/views/Directory/Add_Business.js @@ -73,6 +73,12 @@ const Add_Business = () => { const handleSubmit = async () => { + if (!(state.name && state.phone && state.email && state.Bname && state.Sname && state.country && state.city && state.description + && state.category && state.status && image)) { + alert("Please fill All required field "); + return; + } + const myForm = new FormData(); myForm.set('name', state.name) myForm.set('phone', state.phone) @@ -92,35 +98,34 @@ const Add_Business = () => { myForm.set('FacebookUrl', state.FacebookUrl) myForm.set('InstagramUrl', state.InstagramUrl) myForm.set("image", image); - // if (!(name || description || phone || email || Bname || Sname || city)) { - // alert("Please fill required field "); - // return; - // } - // const myForm = new FormData(); - // myForm.set("image", image); changeState({ loading: true }); + try { + let res = await axios.post( + `/api/directory/create/`, - let res = await axios.post( - `/api/directory/create/`, - - myForm - , - { - headers: { - "content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + myForm + , + { + headers: { + "content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + //if (res.status === 200) window.location.reload(); + console.log(res.status == 201) + if (res.status == 201) { + changeState({ loading: false }); + swal("Add Business successfully!"); + history.goBack() } - ); - //if (res.status === 200) window.location.reload(); - console.log(res.status == 201) - if (res.status == 201) { + } catch (error) { + alert(error) changeState({ loading: false }); - swal("Add Business successfully!"); - history.goBack() } + }; const onCancel = () => { // window.location = "/comproducts"; diff --git a/src/views/Directory/EditBisuness.js b/src/views/Directory/EditBisuness.js index f60eef1..d6cc3d2 100644 --- a/src/views/Directory/EditBisuness.js +++ b/src/views/Directory/EditBisuness.js @@ -94,6 +94,11 @@ const EditBisuness = () => { const handleSubmit = async () => { + if (!(state.name && state.phone && state.email && state.Building_Name && state.Street_Name && state.country && state.city && state.description + && state.category && state.status && image)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set('name', state.name) myForm.set('phone', state.phone) @@ -115,23 +120,28 @@ const EditBisuness = () => { myForm.set("image", image); changeState({ loading: true }); + try { + let res = await axios.put( + `/api/directory/update/${id}`, + myForm, + { + headers: { + "content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); - let res = await axios.put( - `/api/directory/update/${id}`, - myForm, - { - headers: { - "content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + if (res.status == 200) { + changeState({ loading: false }); + swal("Edit Business successfully!"); + history.goBack() } - ); - - if (res.status == 200) { + } catch (error) { + alert(error) changeState({ loading: false }); - swal("Edit Business successfully!"); - history.goBack() } + }; const onCancel = () => { history.goBack() diff --git a/src/views/Events/AddEvent.js b/src/views/Events/AddEvent.js index 8a3f908..eb16d91 100644 --- a/src/views/Events/AddEvent.js +++ b/src/views/Events/AddEvent.js @@ -33,6 +33,10 @@ const AddEvent = () => { const handleSubmit = async () => { + if (!(title && description && image && location)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("title", title); @@ -41,22 +45,29 @@ const AddEvent = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.post( - `/api/event/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.post( + `/api/event/create`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Event Added Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Event Added Successfully!", "success"); - history.goBack(); + } catch (error) { + alert("Something went Wrong") + setLoading(false); } - setLoading(false); + + }; const handleImage = (e) => { const files = e.target.files[0]; diff --git a/src/views/Events/EditEvent.js b/src/views/Events/EditEvent.js index 0c15dbb..ba5cb76 100644 --- a/src/views/Events/EditEvent.js +++ b/src/views/Events/EditEvent.js @@ -48,6 +48,10 @@ const EditEvent = () => { }, [id]); const handleSubmit = async () => { + if (!(title && description && image && location)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("title", title); @@ -56,22 +60,30 @@ const EditEvent = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.put( - `/api/event/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.put( + `/api/event/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Event Edit Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Event Edit Successfully!", "success"); - history.goBack(); + + } catch (error) { + alert("Something went Wrong") + setLoading(false); } - setLoading(false); + + }; const handleImage = (e) => { const files = e.target.files[0]; diff --git a/src/views/News/AddNews.js b/src/views/News/AddNews.js index 498f49c..93fa506 100644 --- a/src/views/News/AddNews.js +++ b/src/views/News/AddNews.js @@ -30,6 +30,10 @@ const AddNews = () => { const handleSubmit = async () => { + if (!(title && description && image)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("title", title); @@ -37,22 +41,29 @@ const AddNews = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.post( - `/api/news/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.post( + `/api/news/create`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + console.log(res.data) + if (res.data) { + swal("success!", "News Added Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - console.log(res.data) - if (res.data) { - swal("success!", "News Added Successfully!", "success"); - history.goBack(); + } catch (error) { + alert(error) + setLoading(false); } - setLoading(false); + + }; const handleImage = (e) => { const files = e.target.files[0]; diff --git a/src/views/News/EditNews.js b/src/views/News/EditNews.js index 9379dd0..f0ff9d5 100644 --- a/src/views/News/EditNews.js +++ b/src/views/News/EditNews.js @@ -45,6 +45,10 @@ const EditNews = () => { }, [id]); const handleSubmit = async () => { + if (!(title && description && image)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("title", title); @@ -52,22 +56,29 @@ const EditNews = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.put( - `/api/news/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.put( + `/api/news/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "News Edit Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "News Edit Successfully!", "success"); - history.goBack(); + } catch (error) { + alert(error) + setLoading(false); } - setLoading(false); + + }; const handleImage = (e) => { const files = e.target.files[0]; diff --git a/src/views/Offers/AddOffer.js b/src/views/Offers/AddOffer.js index f42e137..0b61760 100644 --- a/src/views/Offers/AddOffer.js +++ b/src/views/Offers/AddOffer.js @@ -62,6 +62,10 @@ const AddOffer = () => { const handleSubmit = async () => { + if (!(title && description && image && location && sendBisunessName)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("title", title); @@ -71,22 +75,29 @@ const AddOffer = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.post( - `/api/offer/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.post( + `/api/offer/create`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Event Added Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Event Added Successfully!", "success"); - history.goBack(); + + } catch (error) { + alert("something Went Wrong") + setLoading(false); } - setLoading(false); + }; const handleImage = (e) => { const files = e.target.files[0]; diff --git a/src/views/Offers/EditOffer.js b/src/views/Offers/EditOffer.js index 3a74d85..abfc8bb 100644 --- a/src/views/Offers/EditOffer.js +++ b/src/views/Offers/EditOffer.js @@ -71,6 +71,10 @@ const EditOffer = () => { const handleSubmit = async () => { + if (!(title && description && image && location && sendBisunessName)) { + alert("Please fill All required field "); + return; + } const myForm = new FormData(); myForm.set("title", title); @@ -80,22 +84,29 @@ const EditOffer = () => { myForm.set("image", image); setLoading({ loading: true }); // console.log(image) - let res = await axios.put( - `/api/offer/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, + try { + let res = await axios.put( + `/api/offer/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + if (res.data) { + swal("success!", "Event Added Successfully!", "success"); + setLoading(false); + history.goBack(); } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Event Added Successfully!", "success"); - history.goBack(); + } catch (error) { + alert("something Went Wrong") + setLoading(false); } - setLoading(false); + + }; const handleImage = (e) => { const files = e.target.files[0]; diff --git a/src/views/Requirement/AddRequirement.js b/src/views/Requirement/AddRequirement.js new file mode 100644 index 0000000..45528ff --- /dev/null +++ b/src/views/Requirement/AddRequirement.js @@ -0,0 +1,205 @@ + +import axios from "axios"; +import React, { useCallback, useEffect, useState } from "react"; +import { API } from "../../data"; +import { isAutheticated } from "../../auth"; +import ClipLoader from "react-spinners/ClipLoader"; +import { useHistory } from "react-router-dom"; +import swal from 'sweetalert'; + +import { + CButton, + CCard, + CCardBody, + CCol, + CContainer, + CForm, + CFormInput, + CInputGroup, + CInputGroupText, + CRow, +} from '@coreui/react' +import CIcon from '@coreui/icons-react' +import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription, cilObjectGroup } from '@coreui/icons' +const AddRequirement = () => { + const token = isAutheticated(); + // console.log(token) + let history = useHistory(); + + const [areaOfInterest, setAreaOfInterest] = useState(""); + const [description, setDescription] = useState(""); + const [title, setTitle] = useState(""); + const [imagesPreview, setImagesPreview] = useState([]); + const [allimage, setAllImage] = useState([]); + // const [images, setImages] = useState([]); + + const [loading, setLoading] = useState(false); + + const handleImage = (e) => { + + setAllImage([...allimage, ...e.target.files]); + + // only for file preview------------------------------------ + const files = Array.from(e.target.files); + files.forEach((file) => { + const reader = new FileReader(); + + reader.onload = () => { + if (reader.readyState === 2) { + setImagesPreview((old) => [...old, reader.result]); + + } + }; + + reader.readAsDataURL(file) + }); + // ----------------------------------------------------------------------------- + }; + + const handleSubmit = async () => { + const myForm = new FormData(); + + myForm.set("title", title); + myForm.set("description", description); + myForm.set("areaOfInterest", areaOfInterest); + allimage.forEach((Singleimage) => { + myForm.append("image", Singleimage); + + }); + if (!(title && description && areaOfInterest && allimage[0])) { + alert("please fill all fields") + return + } + setLoading(true); + try { + let res = await axios.post( + `/api/requirement/create`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + if (res.data.success === true) { + swal("success!", "Requirements Added Successfully!", "success"); + history.goBack(); + setLoading(false); + } + + } catch (error) { + setLoading(false); + alert(error) + + } + + }; + + const onCancel = () => { + history.goBack() + + }; + + return ( + <> +
+ + + + + + +

Add Requirements

+
+
+ + + + + setTitle(e.target.value)} + value={title} + placeholder="Title" /> + + + + + + setAreaOfInterest(e.target.value)} + value={areaOfInterest} + placeholder="Area Of Interest" /> + + + + + + + setDescription(e.target.value)} + value={description} + placeholder="Description" /> + + + + + + {/* */} + + + +
*Please Upload maximum four images
+ + +
+ + {imagesPreview.map((image, index) => ( + Product Preview + ))} +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ + + ) +} + +export default AddRequirement \ No newline at end of file diff --git a/src/views/Requirement/EditRequirement.js b/src/views/Requirement/EditRequirement.js new file mode 100644 index 0000000..5409780 --- /dev/null +++ b/src/views/Requirement/EditRequirement.js @@ -0,0 +1,220 @@ + + +import axios from "axios"; +import React, { useCallback, useEffect, useState } from "react"; +import { API } from "../../data"; +import { isAutheticated } from "../../auth"; +import ClipLoader from "react-spinners/ClipLoader"; +import { useHistory, useParams } from "react-router-dom"; +import swal from 'sweetalert'; + +import { + CButton, + CCard, + CCardBody, + CCol, + CContainer, + CForm, + CFormInput, + CInputGroup, + CInputGroupText, + CRow, +} from '@coreui/react' +import CIcon from '@coreui/icons-react' +import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription, cilObjectGroup } from '@coreui/icons' +const EditRequirement = () => { + const token = isAutheticated(); + const { id } = useParams() + let history = useHistory(); + const [areaOfInterest, setAreaOfInterest] = useState(""); + const [description, setDescription] = useState(""); + const [title, setTitle] = useState(""); + const [imagesPreview, setImagesPreview] = useState([]); + const [allimage, setAllImage] = useState([]); + const [loading, setLoading] = useState(false); + + //fetch one requirement + useEffect(async () => { + const res = await axios.get(`/api/requirement/getOne/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + // console.log(res.data) + setTitle(res.data.Requirement.title) + setDescription(res.data.Requirement.description) + setAreaOfInterest(res.data.Requirement.areaOfInterest) + + + }, [id]); + + + const handleImage = (e) => { + + setAllImage([...allimage, ...e.target.files]); + + // only for file preview------------------------------------ + const files = Array.from(e.target.files); + files.forEach((file) => { + const reader = new FileReader(); + + reader.onload = () => { + if (reader.readyState === 2) { + setImagesPreview((old) => [...old, reader.result]); + + } + }; + + reader.readAsDataURL(file) + }); + // ----------------------------------------------------------------------------- + }; + + + const handleSubmit = async () => { + const myForm = new FormData(); + + myForm.set("title", title); + myForm.set("description", description); + myForm.set("areaOfInterest", areaOfInterest); + allimage.forEach((Singleimage) => { + myForm.append("image", Singleimage); + + }); + if (!(title && description && areaOfInterest && allimage[0])) { + alert("please fill all fields") + return + } + setLoading(true); + try { + let res = await axios.put( + `/api/requirement/update/${id}`, myForm, + { + headers: { + "Content-Type": 'multipart/form-data', + Authorization: `Bearer ${token}`, + }, + } + ); + if (res.data.success === true) { + swal("success!", "Requirements Updated Successfully!", "success"); + history.goBack(); + setLoading(false); + } + + } catch (error) { + setLoading(false); + alert(error) + + } + + }; + + const onCancel = () => { + history.goBack() + + }; + + return ( + <> +
+ + + + + + +

Edit Requirements

+
+
+ + + + + setTitle(e.target.value)} + value={title} + placeholder="Title" /> + + + + + + setAreaOfInterest(e.target.value)} + value={areaOfInterest} + placeholder="Area Of Interest" /> + + + + + + + setDescription(e.target.value)} + value={description} + placeholder="Description" /> + + + + + + {/* */} + + + +
*Please Upload maximum four images
+ +
+ {imagesPreview.map((image, index) => ( + Product Preview + ))} +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ + + ) +} + +export default EditRequirement \ No newline at end of file diff --git a/src/views/Requirement/Requirement.js b/src/views/Requirement/Requirement.js new file mode 100644 index 0000000..b18cd86 --- /dev/null +++ b/src/views/Requirement/Requirement.js @@ -0,0 +1,122 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { isAutheticated } from "../../auth"; +import RequirementOpt from "./RequirementOpt"; + +function Requirement() { + const [requirement, setRequirement] = useState([]) + + const token = isAutheticated(); + // console.log(token) + const getRequirement = useCallback(async () => { + let res = await axios.get( + `/api/requirement/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + setRequirement(res.data.Requirement) + + }, [token]); + + useEffect(() => { + getRequirement(); + }, [getRequirement]); + const handleApprove = async (id) => { + let status = window.confirm("Do you want to Approve"); + if (!status) return; + // console.log(email) + try { + let res = await axios.get(`/api/admin/requirement/approve/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + console.log(res.data) + getRequirement() + if (res.data.success == true) { + swal("success!", "Requirement Approved !", "success"); + + } + } catch (error) { + + swal("Error:!", console.log(error), "error"); + } + + }; + + + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-Requirements

+ + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + {requirement && requirement.map((item, index) => + + )} + +
TitleImageArea Of InterestAdded ByAdded OnAction
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default Requirement; diff --git a/src/views/Requirement/RequirementOpt.js b/src/views/Requirement/RequirementOpt.js new file mode 100644 index 0000000..aa28b40 --- /dev/null +++ b/src/views/Requirement/RequirementOpt.js @@ -0,0 +1,132 @@ +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +import { isAutheticated } from "../../auth"; + + +const RequirementOpt = ({ item, handleApprove }) => { + const [user, setUser] = useState() + const [approve, setApprove] = useState(false) + const token = isAutheticated(); + useEffect(async () => { + let resp = await axios.get( + `/api/v1/admin/user/${item.addedBy}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(resp.data) + setUser(resp.data.user) + + ///approved + const getData = async () => { + try { + const response = await axios.get(`/api/requirement/getOne/${item._id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + // console.log(response.data) + if (response.data.Requirement.approved === true) { + setApprove(true) + } else { + setApprove(false) + } + } catch (e) { + console.log(e) + setApprove(false) + } + } + getData() + }, [item]); + + + + const handleDelete = async (id) => { + let status = window.confirm("Do you want to delete"); + if (!status) return; + + let res = await axios.delete(`/api/requirement/delete/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + // console.log(res) + if (res.data.success == true) { + swal("success!", "Requirement Deleted Successfully!", "success"); + window.location.reload(); + } + }; + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + return ( + <> + + {item?.title} + + + + {item?.areaOfInterest} + {user?.name} + + {/* {item?.addedOn} */} + {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} + + + + + + + + + + + + + + + + + + + ) +} + +export default RequirementOpt \ No newline at end of file diff --git a/src/views/Requirement/ViewRequirement.js b/src/views/Requirement/ViewRequirement.js new file mode 100644 index 0000000..c64a9fd --- /dev/null +++ b/src/views/Requirement/ViewRequirement.js @@ -0,0 +1,142 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +function ViewRequirement() { + const [requirement, setRequirement] = useState([]) + const [allImage, setAllImage] = useState([]) + const { id } = useParams(); + // console.log(id) + const token = isAutheticated(); + + const getUserDetails = useCallback(async () => { + + + let resp = await axios.get( + `/api/requirement/getOne/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(resp.data.Requirement.image) + setRequirement(resp.data.Requirement) + setAllImage(resp.data.Requirement.image) + + + }, [token]); + + useEffect(() => { + getUserDetails(); + }, [getUserDetails]); + + + // allImage.map(item => { + // console.log(item.url) + // }) + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-User Details

+
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + {/* + + + + */} + + + {/* */} + + + + + + + + + + + + + + + +
User_Id{requirement?._id}
Title{requirement?.title}
Area Of Interest{requirement?.areaOfInterest}
Image + + +
Description
Description{requirement?.description}
Added On + {new Date(`${requirement?.createdAt}`).toDateString()} , {`${formatAMPM(requirement?.createdAt)}`} +
Updated At + {new Date(`${requirement?.updatedAt}`).toDateString()} , {`${formatAMPM(requirement?.updatedAt)}`} +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default ViewRequirement; + diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index 1973ebd..10f83ad 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -34,20 +34,28 @@ const Login = () => { const Login = async () => { setLoading({ loading: true }) - const res = await axios.post("/api/v1/user/login/", auth); - if (res.data.success == true) { - localStorage.setItem("authToken", res.data.token) - history.push('/dashboard') + try { + const res = await axios.post("/api/v1/user/login/", auth); + if (res.data.success == true) { + localStorage.setItem("authToken", res.data.token) + history.push('/dashboard') + setLoading(false); + window.location.reload() + + + } + else { + setLoading(false); + alert("Invalid Credential"); + + } + } catch (error) { setLoading(false); - window.location.reload() - - - } - else { alert("Invalid Credentials"); - setLoading(false); + } } + return (
diff --git a/src/views/pages/register/Change_password.js b/src/views/pages/register/Change_password.js index d505333..1db3639 100644 --- a/src/views/pages/register/Change_password.js +++ b/src/views/pages/register/Change_password.js @@ -29,6 +29,10 @@ const Register = () => { const handleSubmit = async () => { + if (!(oldPassword && newPassword && confirmPassword)) { + alert("Please fill All required field "); + return; + } const token = localStorage.getItem("authToken") setLoading({ loading: true }) if (newPassword == confirmPassword) { From 576f29d1d513234a8e52d1416ac32410d3125609 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 20 Jul 2022 11:02:56 +0530 Subject: [PATCH 04/48] all complete --- src/routes.js | 3 + src/views/Events/AddEvent.js | 10 +- src/views/Events/AllRegisterUser.js | 115 +++++++++++++++++++++++ src/views/Events/EditEvent.js | 8 +- src/views/Events/Event.js | 46 +-------- src/views/Events/RegisterUser.js | 90 ++++++++++++++++++ src/views/Offers/AddOffer.js | 6 +- src/views/Offers/EditOffer.js | 6 +- src/views/Requirement/AddRequirement.js | 6 +- src/views/Requirement/EditRequirement.js | 6 +- src/views/pages/login/Login.js | 4 + 11 files changed, 243 insertions(+), 57 deletions(-) create mode 100644 src/views/Events/AllRegisterUser.js create mode 100644 src/views/Events/RegisterUser.js diff --git a/src/routes.js b/src/routes.js index 678ac7d..5e98b9e 100644 --- a/src/routes.js +++ b/src/routes.js @@ -15,6 +15,7 @@ import News from "./views/News/News" import ViewNews from "./views/News/ViewNews" //Events import Event from './views/Events/Event' +import AllRegisterUser from './views/Events/AllRegisterUser' import EditEvent from './views/Events/EditEvent' import AddEvent from './views/Events/AddEvent' import ViewEvent from './views/Events/ViewEvent' @@ -73,6 +74,8 @@ const routes = [ { path: '/news/edit/:id', name: 'EditNews', component: EditNews }, { path: '/news', name: 'news', component: News }, //Events route + + { path: '/event/registerUsers/view/:id', name: 'AllRegisterUser', component: AllRegisterUser }, { path: '/event/view/:id', name: 'ViewEvent', component: ViewEvent }, { path: '/addevent', name: 'AddEvent', component: AddEvent }, { path: '/event/edit/:id', name: 'EditEvent', component: EditEvent }, diff --git a/src/views/Events/AddEvent.js b/src/views/Events/AddEvent.js index eb16d91..e73b0d0 100644 --- a/src/views/Events/AddEvent.js +++ b/src/views/Events/AddEvent.js @@ -22,7 +22,7 @@ import { import CIcon from '@coreui/icons-react' import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription } from '@coreui/icons' const AddEvent = () => { - const { token } = isAutheticated(); + const token = isAutheticated(); let history = useHistory(); const [image, setImage] = useState(""); const [title, setTitle] = useState(""); @@ -98,11 +98,12 @@ const AddEvent = () => { - setTitle(e.target.value)} value={title} - placeholder="Title" /> + placeholder="Title (maximum 50 characters)" /> + @@ -110,10 +111,11 @@ const AddEvent = () => { setDescription(e.target.value)} value={description} - placeholder="Description" /> + placeholder="Description (maximum 250 characters)" /> diff --git a/src/views/Events/AllRegisterUser.js b/src/views/Events/AllRegisterUser.js new file mode 100644 index 0000000..6286181 --- /dev/null +++ b/src/views/Events/AllRegisterUser.js @@ -0,0 +1,115 @@ + + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +const AllRegisterUser = () => { + const { id } = useParams(); + const token = isAutheticated(); + const [registerUser, setRegisterUser] = useState([]) + const getRegisterUser = useCallback(async () => { + let res = await axios.get( + `/api/event/admin/registerUser/getAll/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + console.log(res.data) + setRegisterUser(res.data.user) + + + }, [token]); + + useEffect(() => { + getRegisterUser(); + }, [getRegisterUser]); + console.log(registerUser) + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( + <>
+
+
+ {/* */} +
+
+
+

CMP-Event Register Users

+ +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + {registerUser && registerUser.map((item, index) => + + + + + + + + + + + )} + +
Name Profile ImageEmailPhoneregister At
{item.userId?.name} + {item.userId?.email}{item.userId?.phone} + {/* {item?.addedOn} */} + {new Date(`${item.userId?.createdAt}`).toDateString()} , {`${formatAMPM(item.userId?.createdAt)}`} + +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default AllRegisterUser; diff --git a/src/views/Events/EditEvent.js b/src/views/Events/EditEvent.js index ba5cb76..5d1410b 100644 --- a/src/views/Events/EditEvent.js +++ b/src/views/Events/EditEvent.js @@ -25,7 +25,7 @@ import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin const EditEvent = () => { const { id } = useParams(); // console.log(id) - const { token } = isAutheticated(); + const token = isAutheticated(); let history = useHistory(); const [image, setImage] = useState(""); const [title, setTitle] = useState(""); @@ -115,20 +115,22 @@ const EditEvent = () => {
setTitle(e.target.value)} value={title} - placeholder="Title" /> + placeholder="Title (maximum 50 characters)" />
setDescription(e.target.value)} value={description} - placeholder="Description" /> + placeholder="Description (maximum 250 characters)" /> diff --git a/src/views/Events/Event.js b/src/views/Events/Event.js index cf7cab8..3787e62 100644 --- a/src/views/Events/Event.js +++ b/src/views/Events/Event.js @@ -3,13 +3,14 @@ import axios from "axios"; import React, { useEffect, useState, useCallback, useMemo } from "react"; import { Link } from "react-router-dom"; import swal from 'sweetalert'; +import RegisterUser from "./RegisterUser"; // import { API } from "../../data"; import { isAutheticated } from "../../auth"; function Event() { const [event, setEvent] = useState([]) - const { token } = isAutheticated(); + const token = isAutheticated(); const getEvent = useCallback(async () => { let res = await axios.get( @@ -99,52 +100,13 @@ function Event() { Image Location Added On + Attended By Action {event && event.map((item, index) => - - {item?.title} - - - {item?.location} - - {/* {item?.addedOn} */} - {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} - - - - - - - - - - - - - - - - + )} diff --git a/src/views/Events/RegisterUser.js b/src/views/Events/RegisterUser.js new file mode 100644 index 0000000..0073d4a --- /dev/null +++ b/src/views/Events/RegisterUser.js @@ -0,0 +1,90 @@ +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { Link } from "react-router-dom"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { isAutheticated } from "../../auth"; + +const RegisterUser = ({ item, handleDelete, formatAMPM }) => { + const [totalRegisterUser, setTotalRegisterUser] = useState([]) + const token = isAutheticated(); + const getRegisterUser = useCallback(async () => { + let res = await axios.get( + `/api/event/admin/registerUser/getAll/${item._id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + console.log(res.data) + setTotalRegisterUser(res.data.totalUserRegister) + + + }, [token]); + + useEffect(() => { + getRegisterUser(); + }, [getRegisterUser, item]); + return ( + <> + + {item?.title} + + + {item?.location} + + {/* {item?.addedOn} */} + {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export default RegisterUser \ No newline at end of file diff --git a/src/views/Offers/AddOffer.js b/src/views/Offers/AddOffer.js index 0b61760..814e849 100644 --- a/src/views/Offers/AddOffer.js +++ b/src/views/Offers/AddOffer.js @@ -129,10 +129,11 @@ const AddOffer = () => { setTitle(e.target.value)} value={title} - placeholder="Title" /> + placeholder="Title (maximum 50 characters)" /> @@ -140,10 +141,11 @@ const AddOffer = () => { setDescription(e.target.value)} value={description} - placeholder="Description" /> + placeholder="Description (maximum 250 characters)" /> diff --git a/src/views/Offers/EditOffer.js b/src/views/Offers/EditOffer.js index abfc8bb..afc850a 100644 --- a/src/views/Offers/EditOffer.js +++ b/src/views/Offers/EditOffer.js @@ -138,10 +138,11 @@ const EditOffer = () => { setTitle(e.target.value)} value={title} - placeholder="Title" /> + placeholder="Title (maximum 50 characters)" /> @@ -149,10 +150,11 @@ const EditOffer = () => { setDescription(e.target.value)} value={description} - placeholder="Description" /> + placeholder="Description (maximum 250 characters)" /> diff --git a/src/views/Requirement/AddRequirement.js b/src/views/Requirement/AddRequirement.js index 45528ff..74c2bb3 100644 --- a/src/views/Requirement/AddRequirement.js +++ b/src/views/Requirement/AddRequirement.js @@ -117,10 +117,11 @@ const AddRequirement = () => { setTitle(e.target.value)} value={title} - placeholder="Title" /> + placeholder="Title (maximum 50 characters)" /> @@ -138,10 +139,11 @@ const AddRequirement = () => { setDescription(e.target.value)} value={description} - placeholder="Description" /> + placeholder="Description (maximum 250 characters)" /> diff --git a/src/views/Requirement/EditRequirement.js b/src/views/Requirement/EditRequirement.js index 5409780..1af9303 100644 --- a/src/views/Requirement/EditRequirement.js +++ b/src/views/Requirement/EditRequirement.js @@ -133,9 +133,10 @@ const EditRequirement = () => { setTitle(e.target.value)} value={title} - placeholder="Title" /> + placeholder="Title (maximum 50 characters)" /> @@ -153,10 +154,11 @@ const EditRequirement = () => { setDescription(e.target.value)} value={description} - placeholder="Description" /> + placeholder="Description (maximum 250 characters)" /> diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index 10f83ad..b23a93d 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -33,6 +33,10 @@ const Login = () => { }; const Login = async () => { + if (!(auth.email && auth.password)) { + alert("please filled both fields") + return + } setLoading({ loading: true }) try { const res = await axios.post("/api/v1/user/login/", auth); From 79747e12770fcfb77bc7e5571b9974bcab53815b Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 20 Jul 2022 11:38:56 +0530 Subject: [PATCH 05/48] all complete --- package.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/package.json b/package.json index 53c7e0c..a55b7f4 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,7 @@ "eject": "react-scripts eject", "lint": "eslint \"src/**/*.js\"", "start": "serve -s build", - "start:n17": "react-scripts --openssl-legacy-provider start", - "test": "react-scripts test", - "test:cov": "npm test -- --coverage --watchAll=false", - "test:debug": "react-scripts --inspect-brk test --runInBand", - "heroku-postbuild": "npm run build" + "start:n17": "react-scripts --openssl-legacy-provider start" }, "config": { "coreui_library_short_version": "4.1" From e9afed19c0f2df876cb05967178df46767f8bcd4 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 20 Jul 2022 12:06:38 +0530 Subject: [PATCH 06/48] all complete --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index a55b7f4..53c7e0c 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,11 @@ "eject": "react-scripts eject", "lint": "eslint \"src/**/*.js\"", "start": "serve -s build", - "start:n17": "react-scripts --openssl-legacy-provider start" + "start:n17": "react-scripts --openssl-legacy-provider start", + "test": "react-scripts test", + "test:cov": "npm test -- --coverage --watchAll=false", + "test:debug": "react-scripts --inspect-brk test --runInBand", + "heroku-postbuild": "npm run build" }, "config": { "coreui_library_short_version": "4.1" From 89e8a050c2096076a43df61a174fd2d907f088e3 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 20 Jul 2022 12:25:14 +0530 Subject: [PATCH 07/48] all complete --- src/scss/style.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/scss/style.scss b/src/scss/style.scss index 02f199c..e12f9fb 100644 --- a/src/scss/style.scss +++ b/src/scss/style.scss @@ -1,8 +1,8 @@ // If you want to override variables do it here -@import "variables"; +// @import "variables"; -$enable-ltr: true; -$enable-rtl: true; +// $enable-ltr: true; +// $enable-rtl: true; // Import CoreUI for React components library @import "@coreui/coreui/scss/coreui"; From c948a38b509ae551db3c58b225733c86da39fdb6 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 20 Jul 2022 12:29:26 +0530 Subject: [PATCH 08/48] all complete --- src/scss/style.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scss/style.scss b/src/scss/style.scss index e12f9fb..b45fc4e 100644 --- a/src/scss/style.scss +++ b/src/scss/style.scss @@ -5,7 +5,7 @@ // $enable-rtl: true; // Import CoreUI for React components library -@import "@coreui/coreui/scss/coreui"; +//@import "@coreui/coreui/scss/coreui"; // Import Chart.js custom tooltips styles @import "@coreui/chartjs/scss/coreui-chartjs"; From 28aa7c574421b48222743200bad8074fdd6dbceb Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 20 Jul 2022 12:50:15 +0530 Subject: [PATCH 09/48] all complete --- package.json | 6 +++--- src/scss/style.scss | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 53c7e0c..518c0cf 100644 --- a/package.json +++ b/package.json @@ -31,16 +31,16 @@ }, "dependencies": { "@coreui/chartjs": "^3.0.0", - "@coreui/coreui": "^4.1.0", + "@coreui/coreui": "^4.2.0", "@coreui/icons": "^2.1.0", "@coreui/icons-react": "^2.0.0", - "@coreui/react": "^4.1.0", + "@coreui/react": "^4.3.0", "@coreui/react-chartjs": "^2.0.0", "@coreui/utils": "^1.3.1", "@reduxjs/toolkit": "^1.8.2", "@wojtekmaj/enzyme-adapter-react-17": "^0.6.5", "axios": "^0.25.0", - "bootstrap": "^5.1.3", + "bootstrap": "^5.2.0", "chart.js": "^3.6.0", "classnames": "^2.3.1", "core-js": "^3.19.1", diff --git a/src/scss/style.scss b/src/scss/style.scss index b45fc4e..a941ddf 100644 --- a/src/scss/style.scss +++ b/src/scss/style.scss @@ -1,14 +1,14 @@ // If you want to override variables do it here -// @import "variables"; +@import "variables"; -// $enable-ltr: true; -// $enable-rtl: true; +$enable-ltr: true; +$enable-rtl: true; // Import CoreUI for React components library -//@import "@coreui/coreui/scss/coreui"; +@import "@coreui/coreui/scss/coreui"; // Import Chart.js custom tooltips styles -@import "@coreui/chartjs/scss/coreui-chartjs"; +//@import "@coreui/chartjs/scss/coreui-chartjs"; @import "layout"; @import "example"; From 53d7ce164e9cdfcde74116350429502cbf5de3ca Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 20 Jul 2022 13:05:47 +0530 Subject: [PATCH 10/48] all complete --- public/index.html | 1 + src/scss/style.scss | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/public/index.html b/public/index.html index 055bcce..eddf906 100644 --- a/public/index.html +++ b/public/index.html @@ -23,6 +23,7 @@ + */} +
+
+
+

CMP-FAQs

+ + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + {/* */} + + + + + + {faqs && faqs.map((item, index) => + + + {/* */} + + + + + + )} + +
TopicImageAdded OnAction
{item?.topic} + + {/* {item?.addedOn} */} + {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} + + + + + + + + + + + +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default Faqs; diff --git a/src/views/FAQs/ViewFaqs.js b/src/views/FAQs/ViewFaqs.js new file mode 100644 index 0000000..8e6c39f --- /dev/null +++ b/src/views/FAQs/ViewFaqs.js @@ -0,0 +1,132 @@ + +import axios from "axios"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import swal from 'sweetalert'; +// import { API } from "../../data"; +import { Link, useParams } from "react-router-dom"; +import { isAutheticated } from "../../auth"; + +function ViewFaqs() { + const [faqs, setFaqs] = useState([]) + const { id } = useParams(); + // console.log(id) + const token = isAutheticated(); + + const getFaqs = useCallback(async () => { + let res = await axios.get( + `/api/faqs/getOne/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data.news) + setFaqs(res.data.Faqs) + + + }, [token]); + + useEffect(() => { + getFaqs(); + }, [getFaqs]); + + + + + + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } + + + return ( +
+
+
+ {/* */} +
+
+
+

CMP-FAQs

+ + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} +
+
+
+ {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + {/* + + */} + + + + + + + + + + + + + + + +
Id{faqs?._id}
TOPIC{faqs?.topic}
Image + +
Description{faqs?.description}
Added On + {new Date(`${faqs?.createdAt}`).toDateString()} , {`${formatAMPM(faqs?.createdAt)}`} +
Updated At + {new Date(`${faqs?.updatedAt}`).toDateString()} , {`${formatAMPM(faqs?.updatedAt)}`} +
+
+ + + {/* */} +
+
+
+
+
+ {/* */} +
+
+ ); +} + +export default ViewFaqs; From 1d5ae904f9bd4e223b88f86ffd61ebf10469ee7e Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Mon, 25 Jul 2022 17:47:31 +0530 Subject: [PATCH 20/48] forgot password --- src/views/Events/AddEvent.js | 10 ++++ src/views/Events/EditEvent.js | 10 ++++ src/views/FAQs/AddFaqs.js | 12 ++++- src/views/FAQs/EditFaqs.js | 11 ++++- src/views/Offers/AddOffer.js | 11 +++++ src/views/Offers/EditOffer.js | 9 ++++ src/views/Requirement/AddRequirement.js | 9 ++++ src/views/Requirement/EditRequirement.js | 9 ++++ src/views/pages/login/Login.js | 6 +-- src/views/pages/register/ForgotPassword.js | 53 +++++++++++++++++++--- 10 files changed, 129 insertions(+), 11 deletions(-) diff --git a/src/views/Events/AddEvent.js b/src/views/Events/AddEvent.js index 9353b0d..a461920 100644 --- a/src/views/Events/AddEvent.js +++ b/src/views/Events/AddEvent.js @@ -107,6 +107,11 @@ const AddEvent = () => { placeholder="Title (maximum 50 characters)" /> + {title ? <> + {50 - title.length} characters left + : <> + + } @@ -119,6 +124,11 @@ const AddEvent = () => { value={description} placeholder="Description (maximum 250 characters)" /> + {description ? <> + {250 - description.length} characters left + : <> + + } {/* Date* */} diff --git a/src/views/Events/EditEvent.js b/src/views/Events/EditEvent.js index 747e8e9..98ef976 100644 --- a/src/views/Events/EditEvent.js +++ b/src/views/Events/EditEvent.js @@ -127,6 +127,11 @@ const EditEvent = () => { value={title} placeholder="Title (maximum 50 characters)" /> + {title ? <> + {50 - title.length} characters left + : <> + + } @@ -138,6 +143,11 @@ const EditEvent = () => { value={description} placeholder="Description (maximum 250 characters)" /> + {description ? <> + {250 - description.length} characters left + : <> + + } {/* Date* */} diff --git a/src/views/FAQs/AddFaqs.js b/src/views/FAQs/AddFaqs.js index 631f456..c09ebd8 100644 --- a/src/views/FAQs/AddFaqs.js +++ b/src/views/FAQs/AddFaqs.js @@ -101,9 +101,15 @@ const AddFaqs = () => { value={topic} placeholder="Topic ( maximum 50 character )" /> + {topic ? <> + {50 - topic.length} characters left + : <> + + } + - + + {description ? <> + {500 - description.length} characters left + : <> + } {/* diff --git a/src/views/FAQs/EditFaqs.js b/src/views/FAQs/EditFaqs.js index 8b601ad..9095286 100644 --- a/src/views/FAQs/EditFaqs.js +++ b/src/views/FAQs/EditFaqs.js @@ -113,9 +113,14 @@ const EditFaqs = () => { value={topic} placeholder="Topic ( maximum 50 character )" /> + {topic ? <> + {50 - topic.length} characters left + : <> + + } - + + {description ? <> + {500 - description.length} characters left + : <> + } {/* diff --git a/src/views/Offers/AddOffer.js b/src/views/Offers/AddOffer.js index 814e849..0b21fbf 100644 --- a/src/views/Offers/AddOffer.js +++ b/src/views/Offers/AddOffer.js @@ -134,7 +134,13 @@ const AddOffer = () => { onChange={(e) => setTitle(e.target.value)} value={title} placeholder="Title (maximum 50 characters)" /> + + {title ? <> + {50 - title.length} characters left + : <> + + } @@ -147,6 +153,11 @@ const AddOffer = () => { value={description} placeholder="Description (maximum 250 characters)" /> + {description ? <> + {250 - description.length} characters left + : <> + + } diff --git a/src/views/Offers/EditOffer.js b/src/views/Offers/EditOffer.js index afc850a..5587654 100644 --- a/src/views/Offers/EditOffer.js +++ b/src/views/Offers/EditOffer.js @@ -144,7 +144,11 @@ const EditOffer = () => { value={title} placeholder="Title (maximum 50 characters)" /> + {title ? <> + {50 - title.length} characters left + : <> + } @@ -156,6 +160,11 @@ const EditOffer = () => { value={description} placeholder="Description (maximum 250 characters)" /> + {description ? <> + {250 - description.length} characters left + : <> + + } diff --git a/src/views/Requirement/AddRequirement.js b/src/views/Requirement/AddRequirement.js index 74c2bb3..e0ab9a7 100644 --- a/src/views/Requirement/AddRequirement.js +++ b/src/views/Requirement/AddRequirement.js @@ -123,6 +123,11 @@ const AddRequirement = () => { value={title} placeholder="Title (maximum 50 characters)" /> + {title ? <> + {50 - title.length} characters left + : <> + + } @@ -145,7 +150,11 @@ const AddRequirement = () => { value={description} placeholder="Description (maximum 250 characters)" /> + {description ? <> + {250 - description.length} characters left + : <> + } diff --git a/src/views/Requirement/EditRequirement.js b/src/views/Requirement/EditRequirement.js index 1af9303..e2ad489 100644 --- a/src/views/Requirement/EditRequirement.js +++ b/src/views/Requirement/EditRequirement.js @@ -138,6 +138,11 @@ const EditRequirement = () => { value={title} placeholder="Title (maximum 50 characters)" /> + {title ? <> + {50 - title.length} characters left + : <> + + } @@ -160,7 +165,11 @@ const EditRequirement = () => { value={description} placeholder="Description (maximum 250 characters)" /> + {description ? <> + {250 - description.length} characters left + : <> + } diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index b23a93d..c3ac5ba 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -104,11 +104,11 @@ const Login = () => {
- {/* + - Forgot password? + Forgot password.? - */} + diff --git a/src/views/pages/register/ForgotPassword.js b/src/views/pages/register/ForgotPassword.js index 5e36561..5846b1a 100644 --- a/src/views/pages/register/ForgotPassword.js +++ b/src/views/pages/register/ForgotPassword.js @@ -1,5 +1,9 @@ -import React from 'react'; +import React, { useState } from 'react' +import axios from 'axios'; +import ClipLoader from "react-spinners/ClipLoader"; + import { + CButton, CCard, CCardBody, @@ -13,9 +17,41 @@ import { } from '@coreui/react' import CIcon from '@coreui/icons-react' import { cilEnvelopeLetter, cilEnvelopeOpen, cilLockLocked, cilUser } from '@coreui/icons' -import { Link } from 'react-router-dom'; +import { Link, useHistory } from 'react-router-dom'; +import swal from 'sweetalert'; const ForgotPassword = () => { + const history = useHistory() + const [loading, setLoading] = useState(false); + const [email, setEmail] = useState() + // console.log(email) + const handleSubmit = async () => { + if (email) { + try { + setLoading(true) + + const res = await axios.post(`/api/v1/user/password/forgot`, { email: email }) + //console.log(res); + if (res.data.success === true) { + setLoading(false) + // alert("Email Send Successfully! please check your mail for reset password") + swal("success!", "Email Send Successfully! please check your Email for new password", "success"); + history.push("/"); + + } + } catch (e) { + alert("You are not a User") + setLoading(false) + + + } + } else { + alert("please fill Email field..") + setLoading(false) + } + + + } return
@@ -24,7 +60,7 @@ const ForgotPassword = () => {

Forgot Password?

-

Enter your email Below we will send you a link to reset your password

+

Enter your email Below, we will send you password in your Email

{/* @@ -37,15 +73,20 @@ const ForgotPassword = () => { setEmail(e.target.value)} /> - Send + handleSubmit()}> + + {!loading && "Send"} + - Back to Login + Back to Login
From 70e20f4ca89859fb759a6823c3f41df9017a19a9 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Mon, 8 Aug 2022 15:11:03 +0530 Subject: [PATCH 21/48] status --- src/views/Banners/AddBanner.js | 2 +- src/views/Banners/Banner.js | 4 +- src/views/Banners/EditBanner.js | 8 +-- src/views/Banners/ViewBanner.js | 2 +- src/views/Category/AddCategory.js | 4 +- src/views/Category/Category.js | 2 +- src/views/Category/EditCategory.js | 8 +-- src/views/Directory/Add_Business.js | 2 +- src/views/Directory/Bisuness.js | 59 ++++------------------ src/views/Directory/EditBisuness.js | 2 +- src/views/Directory/View_Bisuness.js | 2 +- src/views/News/AddNews.js | 2 +- src/views/News/EditNews.js | 2 +- src/views/News/News.js | 2 +- src/views/News/ViewNews.js | 2 +- src/views/pages/register/ForgotPassword.js | 2 +- 16 files changed, 34 insertions(+), 71 deletions(-) diff --git a/src/views/Banners/AddBanner.js b/src/views/Banners/AddBanner.js index 5a7de33..532c2bb 100644 --- a/src/views/Banners/AddBanner.js +++ b/src/views/Banners/AddBanner.js @@ -22,7 +22,7 @@ import { import CIcon from '@coreui/icons-react' import { cilPencil, cilNotes, cilCalendar, cilAddressBook, cil3d, cilActionUndo, cilNoteAdd } from '@coreui/icons' const AddBanner = () => { - const { token } = isAutheticated(); + const token = isAutheticated(); let history = useHistory(); const [image, setImage] = useState(""); const [title, setTitle] = useState(""); diff --git a/src/views/Banners/Banner.js b/src/views/Banners/Banner.js index 41dfe9c..8730db8 100644 --- a/src/views/Banners/Banner.js +++ b/src/views/Banners/Banner.js @@ -9,7 +9,7 @@ import { isAutheticated } from "../../auth"; function banner() { const [banner, setBanner] = useState([]) - const { token } = isAutheticated(); + const token = isAutheticated(); const getEvent = useCallback(async () => { let res = await axios.get( @@ -20,7 +20,7 @@ function banner() { }, } ); - console.log(res.data) + // console.log(res.data) setBanner(res.data.banner) diff --git a/src/views/Banners/EditBanner.js b/src/views/Banners/EditBanner.js index 3a0d808..49c61bb 100644 --- a/src/views/Banners/EditBanner.js +++ b/src/views/Banners/EditBanner.js @@ -25,7 +25,7 @@ import CIcon from '@coreui/icons-react' import { cilPencil, cilNotes, cilCalendar, cilNoteAdd } from '@coreui/icons' const EditBanner = () => { const { id } = useParams(); - const { token } = isAutheticated(); + const token = isAutheticated(); let history = useHistory(); const [image, setImage] = useState(""); const [title, setTitle] = useState(""); @@ -42,9 +42,9 @@ const EditBanner = () => { //fetch one Offer useEffect(async () => { const res = await axios.get(`/api/banner/getOne/${id}`, { - // headers: { - // Authorization: `Bearer ${token}`, - // }, + headers: { + Authorization: `Bearer ${token}`, + }, }); // console.log(res.data.banner) // console.log(res.data.banner.startDate) diff --git a/src/views/Banners/ViewBanner.js b/src/views/Banners/ViewBanner.js index 6254868..8a35a9e 100644 --- a/src/views/Banners/ViewBanner.js +++ b/src/views/Banners/ViewBanner.js @@ -13,7 +13,7 @@ function ViewBanner() { const [banner, setBanner] = useState([]) const { id } = useParams(); // console.log(id) - const { token } = isAutheticated(); + const token = isAutheticated(); const getBanner = useCallback(async () => { let res = await axios.get( diff --git a/src/views/Category/AddCategory.js b/src/views/Category/AddCategory.js index 9e2bfb7..2e7eb40 100644 --- a/src/views/Category/AddCategory.js +++ b/src/views/Category/AddCategory.js @@ -23,7 +23,7 @@ import { import CIcon from '@coreui/icons-react' import { cilLockLocked, cilUser } from '@coreui/icons' const AddProduct = () => { - // const { token } = isAutheticated(); + const token = isAutheticated(); let history = useHistory(); const [image, setImage] = useState(""); const [name, setName] = useState(""); @@ -49,7 +49,7 @@ const AddProduct = () => { { headers: { "Content-Type": 'multipart/form-data', - // Authorization: `Bearer ${token}`, + Authorization: `Bearer ${token}`, }, } ); diff --git a/src/views/Category/Category.js b/src/views/Category/Category.js index 36e0ad8..c6921a0 100644 --- a/src/views/Category/Category.js +++ b/src/views/Category/Category.js @@ -22,7 +22,7 @@ function Products() { const changeState = (newState) => setState((prevState) => ({ ...prevState, ...newState })); - const { token } = isAutheticated(); + const token = isAutheticated(); const getProducts = useCallback(async () => { let res = await axios.get( diff --git a/src/views/Category/EditCategory.js b/src/views/Category/EditCategory.js index cb5da18..5e0ac83 100644 --- a/src/views/Category/EditCategory.js +++ b/src/views/Category/EditCategory.js @@ -23,7 +23,7 @@ import { import CIcon from '@coreui/icons-react' import { cilLockLocked, cilUser } from '@coreui/icons' const AddProduct = () => { - // const { token } = isAutheticated(); + const token = isAutheticated(); let history = useHistory(); const { id } = useParams(); // console.log(id) @@ -32,9 +32,9 @@ const AddProduct = () => { const [loading, setLoading] = useState(false); useEffect(async () => { const res = await axios.get(`/api/category/getOne/${id}`, { - // headers: { - // Authorization: `Bearer ${token}`, - // }, + headers: { + Authorization: `Bearer ${token}`, + }, }); diff --git a/src/views/Directory/Add_Business.js b/src/views/Directory/Add_Business.js index f822904..f18eb61 100644 --- a/src/views/Directory/Add_Business.js +++ b/src/views/Directory/Add_Business.js @@ -115,7 +115,7 @@ const Add_Business = () => { } ); //if (res.status === 200) window.location.reload(); - console.log(res.status == 201) + // console.log(res.status == 201) if (res.status == 201) { changeState({ loading: false }); swal("Add Business successfully!"); diff --git a/src/views/Directory/Bisuness.js b/src/views/Directory/Bisuness.js index c6b0aea..5efe901 100644 --- a/src/views/Directory/Bisuness.js +++ b/src/views/Directory/Bisuness.js @@ -9,7 +9,7 @@ const Bisuness = () => { - const { token } = isAutheticated(); + const token = isAutheticated(); const getProducts = useCallback(async () => { let res = await axios.get( @@ -53,15 +53,16 @@ const Bisuness = () => { }; const toggleStatus = async (id) => { - let status = window.confirm("Do you want to delete"); + let status = window.confirm("Do you want to change status"); if (!status) { return; } - let res = await axios.get(`/api/product/setStatus/${id}`, { + let res = await axios.get(`/api/directory/admin/setStatus/${id}`, { headers: { Authorization: `Bearer ${token}`, }, }); + // console.log(res) if (res.status === 200) window.location.reload(); }; @@ -76,14 +77,7 @@ const Bisuness = () => {

Bisuness-Directory

- {/*
-
    -
  1. - Dating App -
  2. -
  3. Commerce - Products
  4. -
-
*/} +
@@ -94,38 +88,7 @@ const Bisuness = () => {
- {/*
-
- -
-
*/} - {/* */} +
@@ -147,20 +110,20 @@ const Bisuness = () => { {banner && banner.map((item, index) => - + diff --git a/src/views/Banners/EditBanner.js b/src/views/Banners/EditBanner.js index 49c61bb..d168f65 100644 --- a/src/views/Banners/EditBanner.js +++ b/src/views/Banners/EditBanner.js @@ -200,7 +200,7 @@ const EditBanner = () => { {category.map((item, index) => ( - + ))} {/* */} diff --git a/src/views/Category/Category.js b/src/views/Category/Category.js index c6921a0..1085f63 100644 --- a/src/views/Category/Category.js +++ b/src/views/Category/Category.js @@ -126,7 +126,7 @@ function Products() { {category && category.map((item, index) => - + diff --git a/src/views/Directory/Add_Business.js b/src/views/Directory/Add_Business.js index f18eb61..4e54d64 100644 --- a/src/views/Directory/Add_Business.js +++ b/src/views/Directory/Add_Business.js @@ -385,8 +385,8 @@ const Add_Business = () => { className="form-control input-field" > - {categoryName && categoryName.map(item => - + {categoryName && categoryName.map((item, index) => + )} diff --git a/src/views/Directory/Bisuness.js b/src/views/Directory/Bisuness.js index 5efe901..d8f1740 100644 --- a/src/views/Directory/Bisuness.js +++ b/src/views/Directory/Bisuness.js @@ -102,9 +102,9 @@ const Bisuness = () => { - {bisuness.map((item) => + {bisuness.map((item, index) => - + diff --git a/src/views/Directory/EditBisuness.js b/src/views/Directory/EditBisuness.js index fac52d6..acf11ee 100644 --- a/src/views/Directory/EditBisuness.js +++ b/src/views/Directory/EditBisuness.js @@ -398,8 +398,8 @@ const EditBisuness = () => { className="form-control input-field" > - {categoryName && categoryName.map(item => - + {categoryName && categoryName.map((item, index) => + )} diff --git a/src/views/Directory/View_Bisuness.js b/src/views/Directory/View_Bisuness.js index 44d4911..d8d21d4 100644 --- a/src/views/Directory/View_Bisuness.js +++ b/src/views/Directory/View_Bisuness.js @@ -25,7 +25,7 @@ const View_Bisuness = () => { }, } ); - console.log(res.data.directory) + // console.log(res.data.directory) setBisuness(res.data.directory) // changeState({ // ...res.data, diff --git a/src/views/Events/Event.js b/src/views/Events/Event.js index e48bfcb..ebc413f 100644 --- a/src/views/Events/Event.js +++ b/src/views/Events/Event.js @@ -21,7 +21,7 @@ function Event() { }, } ); - console.log(res.data) + // console.log(res.data) setEvent(res.data.Event) @@ -108,7 +108,7 @@ function Event() { {event && event.map((item, index) => - + )}
{item?.city} - {status ? "Live" : "Suspended"} + {item.status === "true" ? "Live" : "Suspended"} diff --git a/src/views/Directory/EditBisuness.js b/src/views/Directory/EditBisuness.js index d6cc3d2..fac52d6 100644 --- a/src/views/Directory/EditBisuness.js +++ b/src/views/Directory/EditBisuness.js @@ -151,7 +151,7 @@ const EditBisuness = () => { - console.log(image) + // console.log(image) return ( <>
diff --git a/src/views/Directory/View_Bisuness.js b/src/views/Directory/View_Bisuness.js index 1538321..44d4911 100644 --- a/src/views/Directory/View_Bisuness.js +++ b/src/views/Directory/View_Bisuness.js @@ -14,7 +14,7 @@ const View_Bisuness = () => { // const { products, page, limit, totalProducts, pages } = state; - const { token } = isAutheticated(); + const token = isAutheticated(); const view_business = useCallback(async () => { let res = await axios.get( diff --git a/src/views/News/AddNews.js b/src/views/News/AddNews.js index 93fa506..de77ca3 100644 --- a/src/views/News/AddNews.js +++ b/src/views/News/AddNews.js @@ -21,7 +21,7 @@ import { import CIcon from '@coreui/icons-react' import { cilPencil, cilSettings, cilLockLocked, cilUser } from '@coreui/icons' const AddNews = () => { - const { token } = isAutheticated(); + const token = isAutheticated(); let history = useHistory(); const [image, setImage] = useState(""); const [title, setTitle] = useState(""); diff --git a/src/views/News/EditNews.js b/src/views/News/EditNews.js index f0ff9d5..b39ac3b 100644 --- a/src/views/News/EditNews.js +++ b/src/views/News/EditNews.js @@ -25,7 +25,7 @@ import { cilPencil, cilSettings, cilLockLocked, cilUser } from '@coreui/icons' const EditNews = () => { const { id } = useParams(); // console.log(id) - const { token } = isAutheticated(); + const token = isAutheticated(); let history = useHistory(); const [image, setImage] = useState(""); const [title, setTitle] = useState(""); diff --git a/src/views/News/News.js b/src/views/News/News.js index d0553cb..326a719 100644 --- a/src/views/News/News.js +++ b/src/views/News/News.js @@ -9,7 +9,7 @@ import { isAutheticated } from "../../auth"; function News() { const [news, setNews] = useState([]) - const { token } = isAutheticated(); + const token = isAutheticated(); const getNews = useCallback(async () => { let res = await axios.get( diff --git a/src/views/News/ViewNews.js b/src/views/News/ViewNews.js index 4f5fd63..deb0ca1 100644 --- a/src/views/News/ViewNews.js +++ b/src/views/News/ViewNews.js @@ -10,7 +10,7 @@ function ViewNews() { const [news, setNews] = useState([]) const { id } = useParams(); console.log(id) - const { token } = isAutheticated(); + const token = isAutheticated(); const getNews = useCallback(async () => { let res = await axios.get( diff --git a/src/views/pages/register/ForgotPassword.js b/src/views/pages/register/ForgotPassword.js index 5846b1a..a0d29d9 100644 --- a/src/views/pages/register/ForgotPassword.js +++ b/src/views/pages/register/ForgotPassword.js @@ -40,7 +40,7 @@ const ForgotPassword = () => { } } catch (e) { - alert("You are not a User") + alert("Wrong Email ID. Enter valid email to get the password") setLoading(false) From 518502f62b9ff46e04cf9d3fd5654673fc913c2f Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Tue, 9 Aug 2022 16:43:28 +0530 Subject: [PATCH 22/48] check --- src/App.js | 10 +++++----- src/components/AppFooter.js | 2 +- src/components/AppHeader.js | 2 +- src/components/AppSidebar.js | 2 +- src/index.js | 4 ++-- src/views/Banners/AddBanner.js | 2 +- src/views/Banners/Banner.js | 2 +- src/views/Banners/EditBanner.js | 2 +- src/views/Category/Category.js | 2 +- src/views/Directory/Add_Business.js | 4 ++-- src/views/Directory/Bisuness.js | 4 ++-- src/views/Directory/EditBisuness.js | 4 ++-- src/views/Directory/View_Bisuness.js | 2 +- src/views/Events/Event.js | 4 ++-- src/views/Events/ViewEvent.js | 1 - src/views/News/News.js | 2 +- src/views/News/ViewNews.js | 3 +-- src/views/Offers/AddOffer.js | 4 ++-- src/views/Offers/EditOffer.js | 4 ++-- src/views/Offers/Offer.js | 2 +- src/views/Offers/ViewOffer.js | 1 - src/views/pages/login/Login.js | 27 +++++++++++++++++++++++---- 22 files changed, 53 insertions(+), 37 deletions(-) diff --git a/src/App.js b/src/App.js index 1fe7b05..3aaec53 100644 --- a/src/App.js +++ b/src/App.js @@ -43,9 +43,9 @@ const App = () => { Authorization: `Bearer ${token}`, }, }) - //console.log(response) + // console.log(response.data) const data = response.data - if (data.success) { + if (data.success && data.user.role === 'admin') { setUserData(data.user); } else { @@ -77,10 +77,10 @@ const App = () => { - {/* ( - userdata && userdata?._id ? : + ( + userdata?.role === "admin" ? : userdata === false ? :
- )} /> */} + )} /> } /> diff --git a/src/components/AppFooter.js b/src/components/AppFooter.js index 90a810f..595a64b 100644 --- a/src/components/AppFooter.js +++ b/src/components/AppFooter.js @@ -6,7 +6,7 @@ const AppFooter = () => {
- {new Date().getFullYear()} © CMP. + {new Date().getFullYear()} © Sales Champions.
diff --git a/src/components/AppHeader.js b/src/components/AppHeader.js index 6ebfec6..d08bd5d 100644 --- a/src/components/AppHeader.js +++ b/src/components/AppHeader.js @@ -32,7 +32,7 @@ const AppHeader = () => { -

CMP

+

Sales Champions

diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index a87d30a..25d33ea 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -31,7 +31,7 @@ const AppSidebar = () => { > {/* */} -

CMP

+

Sales Champions

{/* */}
diff --git a/src/index.js b/src/index.js index 05329e4..4e23415 100644 --- a/src/index.js +++ b/src/index.js @@ -11,8 +11,8 @@ import store from './store' import axios from 'axios' const setupAxios = () => { - axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - // axios.defaults.baseURL = 'http://localhost:5000' + // axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; + axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/views/Banners/AddBanner.js b/src/views/Banners/AddBanner.js index 532c2bb..c2ce71a 100644 --- a/src/views/Banners/AddBanner.js +++ b/src/views/Banners/AddBanner.js @@ -185,7 +185,7 @@ const AddBanner = () => { {category.map((item, index) => ( - + ))} {/* */} diff --git a/src/views/Banners/Banner.js b/src/views/Banners/Banner.js index 8730db8..cd3e0c2 100644 --- a/src/views/Banners/Banner.js +++ b/src/views/Banners/Banner.js @@ -106,7 +106,7 @@ function banner() {
{item?.title}
{item?.name}
{item?.name} {item?.category} {item?.city}
diff --git a/src/views/Events/ViewEvent.js b/src/views/Events/ViewEvent.js index 2332aaf..b8efbc7 100644 --- a/src/views/Events/ViewEvent.js +++ b/src/views/Events/ViewEvent.js @@ -9,7 +9,6 @@ import { isAutheticated } from "../../auth"; function ViewEvent() { const [event, setEvent] = useState([]) const { id } = useParams(); - console.log(id) const token = isAutheticated(); const getEvent = useCallback(async () => { diff --git a/src/views/News/News.js b/src/views/News/News.js index 326a719..beb11e1 100644 --- a/src/views/News/News.js +++ b/src/views/News/News.js @@ -103,7 +103,7 @@ function News() { {news && news.map((item, index) => - + {item?.title} diff --git a/src/views/News/ViewNews.js b/src/views/News/ViewNews.js index deb0ca1..98ce43a 100644 --- a/src/views/News/ViewNews.js +++ b/src/views/News/ViewNews.js @@ -9,7 +9,6 @@ import { isAutheticated } from "../../auth"; function ViewNews() { const [news, setNews] = useState([]) const { id } = useParams(); - console.log(id) const token = isAutheticated(); const getNews = useCallback(async () => { @@ -21,7 +20,7 @@ function ViewNews() { }, } ); - console.log(res.data.news) + setNews(res.data.news) diff --git a/src/views/Offers/AddOffer.js b/src/views/Offers/AddOffer.js index 0b21fbf..607b1ff 100644 --- a/src/views/Offers/AddOffer.js +++ b/src/views/Offers/AddOffer.js @@ -173,8 +173,8 @@ const AddOffer = () => { > - {bisunessName.map(item => - + {bisunessName.map((item, index) => + )} diff --git a/src/views/Offers/EditOffer.js b/src/views/Offers/EditOffer.js index 5587654..f563735 100644 --- a/src/views/Offers/EditOffer.js +++ b/src/views/Offers/EditOffer.js @@ -180,8 +180,8 @@ const EditOffer = () => { > - {bisunessName.map(item => - + {bisunessName.map((item, index) => + )} diff --git a/src/views/Offers/Offer.js b/src/views/Offers/Offer.js index a85902d..81f824d 100644 --- a/src/views/Offers/Offer.js +++ b/src/views/Offers/Offer.js @@ -98,7 +98,7 @@ function Offer() { {offer && offer.map((item, index) => - + {item?.title} diff --git a/src/views/Offers/ViewOffer.js b/src/views/Offers/ViewOffer.js index c57f42b..6fea4c7 100644 --- a/src/views/Offers/ViewOffer.js +++ b/src/views/Offers/ViewOffer.js @@ -9,7 +9,6 @@ import { isAutheticated } from "../../auth"; function ViewOffer() { const [offer, setOffer] = useState([]) const { id } = useParams(); - console.log(id) const token = isAutheticated(); const getOffer = useCallback(async () => { diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index c3ac5ba..f85111b 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -42,9 +42,23 @@ const Login = () => { const res = await axios.post("/api/v1/user/login/", auth); if (res.data.success == true) { localStorage.setItem("authToken", res.data.token) - history.push('/dashboard') - setLoading(false); - window.location.reload() + let response = await axios.get(`/api/v1/user/details`, { + headers: { + Authorization: `Bearer ${res.data.token}`, + }, + }) + // console.log(response.data) + const data = response.data + if (data.user.role === 'admin') { + history.push('/dashboard') + setLoading(false); + window.location.reload() + } + else { + alert("please try with admin credential!!") + setLoading(false); + } + } @@ -70,7 +84,7 @@ const Login = () => {

Login

-

Sign In to Your CMP Dashboard Account.

+

Sign In to Your Sales Champions Dashboard Account.

@@ -129,3 +143,8 @@ const Login = () => { } export default Login + + // < Route path = "/" name = "Home" render = {(props) => ( + // userdata && userdata.role === 'admin' ? : + // <> + // )} /> \ No newline at end of file From 023b5113bc9d1907e6d131408b823709b5d63489 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Tue, 9 Aug 2022 16:54:18 +0530 Subject: [PATCH 23/48] check --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 4e23415..05329e4 100644 --- a/src/index.js +++ b/src/index.js @@ -11,8 +11,8 @@ import store from './store' import axios from 'axios' const setupAxios = () => { - // axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - axios.defaults.baseURL = 'http://localhost:5000' + axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; + // axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', From d21eb2dc5bae8a84a2e3c778e0b7616dc5df1fb4 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 10 Aug 2022 13:55:18 +0530 Subject: [PATCH 24/48] recheck --- src/_nav.js | 12 +- src/index.js | 2 +- src/views/dashboard/Dashboard.js | 116 +++++- src/views/pages/register/Change_password.js | 2 +- src/views/pages/register/ForgotPassword.js | 2 +- src/views/widgets/WidgetsDropdown.js | 417 ++++++-------------- 6 files changed, 234 insertions(+), 317 deletions(-) diff --git a/src/_nav.js b/src/_nav.js index d7b0639..646006f 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -85,12 +85,12 @@ const _nav = [ icon: , to: '/requirement', }, - { - component: CNavItem, - name: 'FAQs', - icon: , - to: '/FAQs', - }, + // { + // component: CNavItem, + // name: 'FAQs', + // icon: , + // to: '/FAQs', + // }, { component: CNavItem, name: 'Users', diff --git a/src/index.js b/src/index.js index 05329e4..dc6683f 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ import axios from 'axios' const setupAxios = () => { axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - // axios.defaults.baseURL = 'http://localhost:5000' + //axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/views/dashboard/Dashboard.js b/src/views/dashboard/Dashboard.js index eae717a..9aa67bd 100644 --- a/src/views/dashboard/Dashboard.js +++ b/src/views/dashboard/Dashboard.js @@ -1,20 +1,122 @@ import React, { lazy } from 'react' - - +import axios from "axios"; +import { useEffect, useState, useCallback, useMemo } from "react"; +import { isAutheticated } from "../../auth.js"; const WidgetsDropdown = lazy(() => import('../widgets/WidgetsDropdown.js')) -const WidgetsBrand = lazy(() => import('../widgets/WidgetsBrand.js')) + const Dashboard = () => { - const random = (min, max) => { - return Math.floor(Math.random() * (max - min + 1) + min) - } + //1 st + const [users, setUsers] = useState([]) + const token = isAutheticated(); + + const getAllUsers = useCallback(async () => { + let res = await axios.get( + `/api/v1/admin/users`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + setUsers(res.data.users) + }, [token]); + //2nd + const [category, setCategory] = useState([]) + const getAllCategory = useCallback(async () => { + let res = await axios.get( + `/api/category/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data.category[0].image.url) + setCategory(res.data.category) + }, [token]); + //3 requiment + const [requirement, setRequirement] = useState([]) + // console.log(token) + const getRequirement = useCallback(async () => { + let res = await axios.get( + `/api/requirement/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + setRequirement(res.data.Requirement) + + }, [token]); + //4 news + const [news, setNews] = useState([]) + + const getNews = useCallback(async () => { + let res = await axios.get( + `/api/news/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + setNews(res.data.news) + + + }, [token]); + //5 offers + const [offer, setOffer] = useState([]) + + const getOffer = useCallback(async () => { + let res = await axios.get( + `/api/offer/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + setOffer(res.data.offer) + + + }, [token]); + //6 event + const [event, setEvent] = useState([]) + const getEvent = useCallback(async () => { + let res = await axios.get( + `/api/event/getAll`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + // console.log(res.data) + setEvent(res.data.Event) + + + }, [token]); + useEffect(() => { + getAllUsers(); + getAllCategory() + getRequirement() + getNews() + getOffer() + getEvent() + }, [getAllUsers, getAllCategory, getRequirement, getNews, getOffer, getEvent]); return ( <> - + ) diff --git a/src/views/pages/register/Change_password.js b/src/views/pages/register/Change_password.js index 1db3639..753c631 100644 --- a/src/views/pages/register/Change_password.js +++ b/src/views/pages/register/Change_password.js @@ -83,7 +83,7 @@ const Register = () => { - setOldPassword(e.target.value)} /> + setOldPassword(e.target.value)} /> diff --git a/src/views/pages/register/ForgotPassword.js b/src/views/pages/register/ForgotPassword.js index a0d29d9..d9f306a 100644 --- a/src/views/pages/register/ForgotPassword.js +++ b/src/views/pages/register/ForgotPassword.js @@ -31,7 +31,7 @@ const ForgotPassword = () => { setLoading(true) const res = await axios.post(`/api/v1/user/password/forgot`, { email: email }) - //console.log(res); + // console.log(res); if (res.data.success === true) { setLoading(false) // alert("Email Send Successfully! please check your mail for reset password") diff --git a/src/views/widgets/WidgetsDropdown.js b/src/views/widgets/WidgetsDropdown.js index 3b5b078..468f679 100644 --- a/src/views/widgets/WidgetsDropdown.js +++ b/src/views/widgets/WidgetsDropdown.js @@ -13,7 +13,7 @@ import { CChartBar, CChartLine } from '@coreui/react-chartjs' import CIcon from '@coreui/icons-react' import { cilArrowBottom, cilArrowTop, cilOptions } from '@coreui/icons' -const WidgetsDropdown = () => { +const WidgetsDropdown = ({ users, category, requirement, news, offer, event }) => { return ( @@ -22,85 +22,82 @@ const WidgetsDropdown = () => { color="primary" value={ <> - 26K{' '} - {/* - (-12.4% ) - */} + {users.length} } - title="Users" - // action={ - // - // - // - // - // - // Action - // Another action - // Something else here... - // Disabled action - // - // - // } - chart={ - - } + title="Total Users" + // action={ + // + // + // + // + // + // Action + // Another action + // Something else here... + // Disabled action + // + // + // } + // chart={ + // + // } /> @@ -109,157 +106,25 @@ const WidgetsDropdown = () => { color="info" value={ <> - $6.200{' '} - {/* - (40.9% ) - */} + {category.length} } - title="Income" - // action={ - // - // - // - // - // - // Action - // Another action - // Something else here... - // Disabled action - // - // - // } - chart={ - - } + title="Total Categories" + /> - {/* + - 2.49{' '} - - (84.7% ) - + {requirement.length} + } - title="Conversion Rate" - action={ - - - - - - Action - Another action - Something else here... - Disabled action - - - } - chart={ - - } + title="Requirements" + /> @@ -268,92 +133,42 @@ const WidgetsDropdown = () => { color="danger" value={ <> - 44K{' '} - - (-23.6% ) - + {news.length} + } - title="Sessions" - action={ - - - - - - Action - Another action - Something else here... - Disabled action - - - } - chart={ - - } + title="Total News" + /> - */} + + + + {offer.length} + + + } + title="Total Offers" + + /> + + + + {event.length} + + + } + title="Total Events" + + /> + ) } From e89beffbce6c96624669e175e58a803c70dd267d Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Tue, 18 Oct 2022 12:36:20 +0530 Subject: [PATCH 25/48] change --- src/components/AppFooter.js | 2 +- src/components/AppHeader.js | 2 +- src/components/AppSidebar.js | 2 +- src/index.js | 4 +- src/views/Banners/AddBanner.js | 6 +- src/views/Banners/EditBanner.js | 6 +- src/views/CMS/EditCms.js | 3 +- src/views/Category/AddCategory.js | 7 +- src/views/Category/EditCategory.js | 7 +- src/views/Directory/Add_Business.js | 7 +- src/views/Directory/EditBisuness.js | 7 +- src/views/Events/AddEvent.js | 7 +- src/views/Events/EditEvent.js | 7 +- src/views/FAQs/AddFaqs.js | 7 +- src/views/FAQs/EditFaqs.js | 7 +- src/views/News/AddNews.js | 7 +- src/views/News/EditNews.js | 7 +- src/views/Offers/AddOffer.js | 7 +- src/views/Offers/EditOffer.js | 7 +- src/views/Requirement/AddRequirement.js | 7 +- src/views/Requirement/EditRequirement.js | 7 +- src/views/pages/login/Login.js | 99 ++++++++++++++++--- src/views/pages/register/Change_password.js | 104 +++++++++++++++++--- 23 files changed, 241 insertions(+), 85 deletions(-) diff --git a/src/components/AppFooter.js b/src/components/AppFooter.js index 595a64b..eed1ea5 100644 --- a/src/components/AppFooter.js +++ b/src/components/AppFooter.js @@ -6,7 +6,7 @@ const AppFooter = () => {
- {new Date().getFullYear()} © Sales Champions. + {new Date().getFullYear()} ©CMP.
diff --git a/src/components/AppHeader.js b/src/components/AppHeader.js index d08bd5d..6ebfec6 100644 --- a/src/components/AppHeader.js +++ b/src/components/AppHeader.js @@ -32,7 +32,7 @@ const AppHeader = () => { -

Sales Champions

+

CMP

diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index 25d33ea..a87d30a 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -31,7 +31,7 @@ const AppSidebar = () => { > {/* */} -

Sales Champions

+

CMP

{/* */}
diff --git a/src/index.js b/src/index.js index dc6683f..4e23415 100644 --- a/src/index.js +++ b/src/index.js @@ -11,8 +11,8 @@ import store from './store' import axios from 'axios' const setupAxios = () => { - axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - //axios.defaults.baseURL = 'http://localhost:5000' + // axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; + axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/views/Banners/AddBanner.js b/src/views/Banners/AddBanner.js index c2ce71a..a8570e7 100644 --- a/src/views/Banners/AddBanner.js +++ b/src/views/Banners/AddBanner.js @@ -43,8 +43,8 @@ const AddBanner = () => { const handleSubmit = async () => { if (!(title && subTitle && image && section && subSection && startDate && endDate)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -75,7 +75,7 @@ const AddBanner = () => { } } catch (error) { - alert(error) + swal('Error!', error, 'error') setLoading(false); } diff --git a/src/views/Banners/EditBanner.js b/src/views/Banners/EditBanner.js index d168f65..d2c7106 100644 --- a/src/views/Banners/EditBanner.js +++ b/src/views/Banners/EditBanner.js @@ -59,8 +59,8 @@ const EditBanner = () => { const handleSubmit = async () => { if (!(title && subTitle && image && section && subSection && startDate && endDate)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -89,7 +89,7 @@ const EditBanner = () => { history.goBack(); } } catch (error) { - alert(error) + swal('Error!', error, 'error') setLoading(false); } // console.log(image) diff --git a/src/views/CMS/EditCms.js b/src/views/CMS/EditCms.js index b1b55b6..ee8593f 100644 --- a/src/views/CMS/EditCms.js +++ b/src/views/CMS/EditCms.js @@ -69,7 +69,8 @@ const EditCms = () => { history.goBack() } } catch (error) { - alert(error) + swal('Error!', error, 'error') + changeState({ loading: false }); } diff --git a/src/views/Category/AddCategory.js b/src/views/Category/AddCategory.js index 2e7eb40..5ecb8d8 100644 --- a/src/views/Category/AddCategory.js +++ b/src/views/Category/AddCategory.js @@ -32,8 +32,8 @@ const AddProduct = () => { const handleSubmit = async () => { if (!(name && image)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -60,7 +60,8 @@ const AddProduct = () => { history.goBack(); } } catch (error) { - alert("something went wrong") + swal('Error!', "something went wrong", 'error') + setLoading(false); } diff --git a/src/views/Category/EditCategory.js b/src/views/Category/EditCategory.js index 5e0ac83..bab5e68 100644 --- a/src/views/Category/EditCategory.js +++ b/src/views/Category/EditCategory.js @@ -44,8 +44,8 @@ const AddProduct = () => { const handleSubmit = async () => { if (!(name && image)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -72,7 +72,8 @@ const AddProduct = () => { history.goBack(); } } catch (error) { - alert("something went wrong") + swal('Error!', "something went wrong", 'error') + setLoading(false); } } diff --git a/src/views/Directory/Add_Business.js b/src/views/Directory/Add_Business.js index 4e54d64..dbae303 100644 --- a/src/views/Directory/Add_Business.js +++ b/src/views/Directory/Add_Business.js @@ -75,8 +75,8 @@ const Add_Business = () => { const handleSubmit = async () => { if (!(state.name && state.phone && state.email && state.Bname && state.Sname && state.country && state.city && state.description && state.category && state.status && image)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -122,7 +122,8 @@ const Add_Business = () => { history.goBack() } } catch (error) { - alert(error) + swal('Error!', error, 'error') + changeState({ loading: false }); } diff --git a/src/views/Directory/EditBisuness.js b/src/views/Directory/EditBisuness.js index acf11ee..227e68c 100644 --- a/src/views/Directory/EditBisuness.js +++ b/src/views/Directory/EditBisuness.js @@ -96,8 +96,8 @@ const EditBisuness = () => { const handleSubmit = async () => { if (!(state.name && state.phone && state.email && state.Building_Name && state.Street_Name && state.country && state.city && state.description && state.category && state.status && image)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); myForm.set('name', state.name) @@ -138,7 +138,8 @@ const EditBisuness = () => { history.goBack() } } catch (error) { - alert(error) + swal('Error!', error, 'error') + changeState({ loading: false }); } diff --git a/src/views/Events/AddEvent.js b/src/views/Events/AddEvent.js index a461920..0366dce 100644 --- a/src/views/Events/AddEvent.js +++ b/src/views/Events/AddEvent.js @@ -34,8 +34,8 @@ const AddEvent = () => { const [loading, setLoading] = useState(false); const handleSubmit = async () => { if (!(title && description && image && location && time && date)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -64,7 +64,8 @@ const AddEvent = () => { history.goBack(); } } catch (error) { - alert("Something went Wrong") + swal('Error!', 'Something went Wrong', 'error') + setLoading(false); } diff --git a/src/views/Events/EditEvent.js b/src/views/Events/EditEvent.js index 98ef976..4b1a62b 100644 --- a/src/views/Events/EditEvent.js +++ b/src/views/Events/EditEvent.js @@ -53,8 +53,8 @@ const EditEvent = () => { const handleSubmit = async () => { if (!(title && description && image && location && time && date)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -84,7 +84,8 @@ const EditEvent = () => { } } catch (error) { - alert("Something went Wrong") + swal('Error!', 'Something went Wrong', 'error') + setLoading(false); } diff --git a/src/views/FAQs/AddFaqs.js b/src/views/FAQs/AddFaqs.js index c09ebd8..a0ad586 100644 --- a/src/views/FAQs/AddFaqs.js +++ b/src/views/FAQs/AddFaqs.js @@ -31,8 +31,8 @@ const AddFaqs = () => { const handleSubmit = async () => { if (!(topic && description)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -58,7 +58,8 @@ const AddFaqs = () => { history.goBack(); } } catch (error) { - alert(error) + swal('Error!', error, 'error') + setLoading(false); } diff --git a/src/views/FAQs/EditFaqs.js b/src/views/FAQs/EditFaqs.js index 9095286..b6355a4 100644 --- a/src/views/FAQs/EditFaqs.js +++ b/src/views/FAQs/EditFaqs.js @@ -42,8 +42,8 @@ const EditFaqs = () => { }, [id]); const handleSubmit = async () => { if (!(topic && description)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -69,7 +69,8 @@ const EditFaqs = () => { history.goBack(); } } catch (error) { - alert(error) + swal('Error!', error, 'error') + setLoading(false); } diff --git a/src/views/News/AddNews.js b/src/views/News/AddNews.js index de77ca3..2894100 100644 --- a/src/views/News/AddNews.js +++ b/src/views/News/AddNews.js @@ -31,8 +31,8 @@ const AddNews = () => { const handleSubmit = async () => { if (!(title && description && image)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -58,7 +58,8 @@ const AddNews = () => { history.goBack(); } } catch (error) { - alert(error) + swal('Error!', error, 'error') + setLoading(false); } diff --git a/src/views/News/EditNews.js b/src/views/News/EditNews.js index b39ac3b..ab0d633 100644 --- a/src/views/News/EditNews.js +++ b/src/views/News/EditNews.js @@ -46,8 +46,8 @@ const EditNews = () => { const handleSubmit = async () => { if (!(title && description && image)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -73,7 +73,8 @@ const EditNews = () => { history.goBack(); } } catch (error) { - alert(error) + swal('Error!', error, 'error') + setLoading(false); } diff --git a/src/views/Offers/AddOffer.js b/src/views/Offers/AddOffer.js index 607b1ff..81a81fc 100644 --- a/src/views/Offers/AddOffer.js +++ b/src/views/Offers/AddOffer.js @@ -63,8 +63,8 @@ const AddOffer = () => { const handleSubmit = async () => { if (!(title && description && image && location && sendBisunessName)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -93,7 +93,8 @@ const AddOffer = () => { } } catch (error) { - alert("something Went Wrong") + swal('Error!', 'something Went Wrong', 'error') + setLoading(false); } diff --git a/src/views/Offers/EditOffer.js b/src/views/Offers/EditOffer.js index f563735..56a6d88 100644 --- a/src/views/Offers/EditOffer.js +++ b/src/views/Offers/EditOffer.js @@ -72,8 +72,8 @@ const EditOffer = () => { const handleSubmit = async () => { if (!(title && description && image && location && sendBisunessName)) { - alert("Please fill All required field "); - return; + return swal('Error!', 'All fields are required', 'error') + } const myForm = new FormData(); @@ -101,7 +101,8 @@ const EditOffer = () => { history.goBack(); } } catch (error) { - alert("something Went Wrong") + swal('Error!', 'something Went Wrong', 'error') + setLoading(false); } diff --git a/src/views/Requirement/AddRequirement.js b/src/views/Requirement/AddRequirement.js index e0ab9a7..672e55a 100644 --- a/src/views/Requirement/AddRequirement.js +++ b/src/views/Requirement/AddRequirement.js @@ -67,8 +67,8 @@ const AddRequirement = () => { }); if (!(title && description && areaOfInterest && allimage[0])) { - alert("please fill all fields") - return + return swal('Error!', 'All fields are required', 'error') + } setLoading(true); try { @@ -89,7 +89,8 @@ const AddRequirement = () => { } catch (error) { setLoading(false); - alert(error) + swal('Error!', error, 'error') + } diff --git a/src/views/Requirement/EditRequirement.js b/src/views/Requirement/EditRequirement.js index e2ad489..d9ecd62 100644 --- a/src/views/Requirement/EditRequirement.js +++ b/src/views/Requirement/EditRequirement.js @@ -82,8 +82,8 @@ const EditRequirement = () => { }); if (!(title && description && areaOfInterest && allimage[0])) { - alert("please fill all fields") - return + return swal('Error!', 'All fields are required', 'error') + } setLoading(true); try { @@ -104,7 +104,8 @@ const EditRequirement = () => { } catch (error) { setLoading(false); - alert(error) + swal('Error!', error, 'error') + } diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index f85111b..2198ce1 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useEffect } from 'react' import { Link } from 'react-router-dom' import { CButton, @@ -22,20 +22,80 @@ import { useHistory } from 'react-router-dom' const Login = () => { const [loading, setLoading] = useState(false); + const [validForm, setValidForm] = useState(false) const [auth, setAuth] = useState({ email: "", password: "" }); - const history = useHistory(); + const [errors, setErrors] = useState({ + emailError: '', + passwordError: '', - const handleChange = (e) => (event) => { - setAuth({ ...auth, [e]: event.target.value }); - }; + }) + const validEmailRegex = RegExp( + /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i, + ) + const validPasswordRegex = RegExp(/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{7,}$/) + const history = useHistory(); + // const handleChange = (e) => (event) => { + + // setAuth({ ...auth, [e]: event.target.value }); + // }; + const validateForm = () => { + let valid = true + Object.values(errors).forEach((val) => { + if (val.length > 0) { + valid = false + return false + } + }) + Object.values(auth).forEach((val) => { + if (val.length <= 0) { + valid = false + return false + } + }) + return valid + } + + //cheking email and password + useEffect(() => { + if (validateForm()) { + setValidForm(true) + } else { + setValidForm(false) + } + }, [errors]) + const handleChange = (e) => { + const { name, value } = e.target + + switch (name) { + case 'email': + setErrors({ + ...errors, + emailError: validEmailRegex.test(value) ? '' : 'Email is not valid!', + }) + + break + case 'password': + setErrors((errors) => ({ + ...errors, + passwordError: validPasswordRegex.test(value) + ? '' + : 'Password Shoud Be 8 Characters Long, Atleast One Uppercase, Atleast One Lowercase,Atleast One Digit, Atleast One Special Character', + })) + break + default: + break + } + + setAuth({ ...auth, [name]: value }) + } const Login = async () => { if (!(auth.email && auth.password)) { - alert("please filled both fields") - return + + return swal('Error!', 'All fields are required', 'error') } setLoading({ loading: true }) try { @@ -55,7 +115,7 @@ const Login = () => { window.location.reload() } else { - alert("please try with admin credential!!") + swal('Error!', 'please try with admin credential!!', 'error') setLoading(false); } @@ -64,12 +124,14 @@ const Login = () => { } else { setLoading(false); - alert("Invalid Credential"); + + swal('Error!', 'Invalid Credentials', 'error') } } catch (error) { setLoading(false); - alert("Invalid Credentials"); + + swal('Error!', 'Invalid Credentials', 'error') } } @@ -84,27 +146,34 @@ const Login = () => {

Login

-

Sign In to Your Sales Champions Dashboard Account.

+

Sign In to Your CMP Dashboard Account.

- + + {errors.emailError && ( +

{errors.emailError}

+ )} - - + {errors.passwordError && ( +

{errors.passwordError}

+ )} + {!loading && "Login"} diff --git a/src/views/pages/register/Change_password.js b/src/views/pages/register/Change_password.js index 753c631..115bc9d 100644 --- a/src/views/pages/register/Change_password.js +++ b/src/views/pages/register/Change_password.js @@ -20,27 +20,77 @@ import Swal from 'sweetalert2' import { useHistory } from 'react-router-dom' const Register = () => { - const [oldPassword, setOldPassword] = useState(); - const [newPassword, setNewPassword] = useState(); - const [confirmPassword, setConfirmPassword] = useState(); + const [loading, setLoading] = useState(false); const history = useHistory(); + const [user, setUser] = useState({ + oldPassword: '', + newPassword: '', + confirmPassword: '', + }) + const [errors, setErrors] = useState({ + confirmPasswordError: '', + newPasswordError: '', + oldPasswordError: '', + }) + const validEmailRegex = RegExp( + /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i, + ) + const validPasswordRegex = RegExp(/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{7,}$/) + const handleChange = (e) => { + const { name, value } = e.target + + switch (name) { + case 'oldPassword': + setErrors({ + ...errors, + oldPasswordError: validPasswordRegex.test(value) + ? '' + : 'Password Shoud Be 8 Characters Long, Atleast One Uppercase, Atleast One Lowercase,Atleast One Digit, Atleast One Special Character', + }) + + break + case 'newPassword': + setErrors({ + ...errors, + newPasswordError: validPasswordRegex.test(value) + ? '' + : 'Password Shoud Be 8 Characters Long, Atleast One Uppercase, Atleast One Lowercase,Atleast One Digit, Atleast One Special Character', + }) + + break + case 'confirmPassword': + setErrors((errors) => ({ + ...errors, + confirmPasswordError: validPasswordRegex.test(value) + ? '' + : 'Password Shoud Be 8 Characters Long, Atleast One Uppercase, Atleast One Lowercase,Atleast One Digit, Atleast One Special Character', + })) + break + default: + break + } + + setUser({ ...user, [name]: value }) + } const handleSubmit = async () => { - if (!(oldPassword && newPassword && confirmPassword)) { - alert("Please fill All required field "); - return; + if (!(user.oldPassword && user.newPassword && user.confirmPassword)) { + + return swal('Error!', 'All fields are required', 'error') + } + if (!(user.newPassword.length >= 8)) { + + return swal('Error!', 'All fields are required', 'error'); } const token = localStorage.getItem("authToken") setLoading({ loading: true }) - if (newPassword == confirmPassword) { + if (user.newPassword == user.confirmPassword) { let res = await axios.put('/api/v1/user/password/update', { - oldPassword - , newPassword, - confirmPassword + ...user }, { headers: { Authorization: `Bearer ${token}`, @@ -63,7 +113,7 @@ const Register = () => { } setLoading(false); } else { - alert('new password and confirm password are not matched') + swal('Error!', 'New Password And Confirm Password is Not Match !', 'error') setLoading(false); } @@ -83,29 +133,51 @@ const Register = () => { - setOldPassword(e.target.value)} /> +
+ {errors.oldPasswordError && ( +

{errors.oldPasswordError}

+ )} + setNewPassword(e.target.value)} /> + {errors.newPasswordError && ( +

{errors.newPasswordError}

+ )} + {errors.passwordError && ( +

{errors.passwordError}

+ )} setConfirmPassword(e.target.value)} + + placeholder="Confirm password " + value={user.confirmPassword} + onChange={handleChange} + name="confirmPassword" />
+ {errors.confirmPasswordError && ( +

{errors.confirmPasswordError}

+ )}
From 541270c2c09dfbf78fed2b566170d298abf74d40 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Tue, 18 Oct 2022 12:37:54 +0530 Subject: [PATCH 26/48] change --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 4e23415..05329e4 100644 --- a/src/index.js +++ b/src/index.js @@ -11,8 +11,8 @@ import store from './store' import axios from 'axios' const setupAxios = () => { - // axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - axios.defaults.baseURL = 'http://localhost:5000' + axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; + // axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', From 6f6a884c54876e865e8487b987d6a207b0ecb9d2 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 27 Oct 2022 12:02:33 +0530 Subject: [PATCH 27/48] add category banner image --- src/index.js | 2 +- src/views/Category/AddCategory.js | 22 ++++++++++++++++++++-- src/views/Category/Category.js | 18 ++++++++++++++---- src/views/Category/EditCategory.js | 27 ++++++++++++++++++++++++--- 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/src/index.js b/src/index.js index 05329e4..dc6683f 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ import axios from 'axios' const setupAxios = () => { axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - // axios.defaults.baseURL = 'http://localhost:5000' + //axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/views/Category/AddCategory.js b/src/views/Category/AddCategory.js index 5ecb8d8..200a4bb 100644 --- a/src/views/Category/AddCategory.js +++ b/src/views/Category/AddCategory.js @@ -26,12 +26,13 @@ const AddProduct = () => { const token = isAutheticated(); let history = useHistory(); const [image, setImage] = useState(""); + const [ctegoryBannerImage, setCtegoryBannerImage] = useState(""); const [name, setName] = useState(""); const [loading, setLoading] = useState(false); const handleSubmit = async () => { - if (!(name && image)) { + if (!(name && image && ctegoryBannerImage)) { return swal('Error!', 'All fields are required', 'error') } @@ -41,6 +42,7 @@ const AddProduct = () => { myForm.set("image", image); + myForm.set("category_banner", ctegoryBannerImage); setLoading({ loading: true }); // console.log(image) try { @@ -103,8 +105,9 @@ const AddProduct = () => { value={name} placeholder="Name" /> +
category image *
- + {/* */} @@ -116,6 +119,21 @@ const AddProduct = () => { onChange={handleImage} + /> + +
category Banner image *
+ + + + + setCtegoryBannerImage(e.target.files[0])} + + />
diff --git a/src/views/Category/Category.js b/src/views/Category/Category.js index 1085f63..db65f7a 100644 --- a/src/views/Category/Category.js +++ b/src/views/Category/Category.js @@ -33,7 +33,7 @@ function Products() { }, } ); - // console.log(res.data.category[0].image.url) + // console.log(res.data.category) setCategory(res.data.category) // console.log(category[0].addedOn) changeState({ @@ -62,12 +62,16 @@ function Products() { Authorization: `Bearer ${token}`, }, }); - console.log(res) + // console.log(res) if (res.data.success == true) { swal("success!", "Category Deleted Successfully!", "success"); window.location.reload(); // if (res.status === 200) window.location.reload(); } + else { + swal("error!", "failled!", "error"); + + } }; @@ -119,7 +123,8 @@ function Products() { Name - Image + Category Image + Category Banner Added On Actions @@ -129,7 +134,12 @@ function Products() { {item?.name} - + + + + + {item.category_banner && } + {/* {item?.addedOn} */} {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} diff --git a/src/views/Category/EditCategory.js b/src/views/Category/EditCategory.js index bab5e68..50e209a 100644 --- a/src/views/Category/EditCategory.js +++ b/src/views/Category/EditCategory.js @@ -29,6 +29,8 @@ const AddProduct = () => { // console.log(id) const [image, setImage] = useState(""); const [name, setName] = useState(""); + const [ctegoryBannerImage, setCtegoryBannerImage] = useState(""); + const [loading, setLoading] = useState(false); useEffect(async () => { const res = await axios.get(`/api/category/getOne/${id}`, { @@ -43,8 +45,8 @@ const AddProduct = () => { const handleSubmit = async () => { - if (!(name && image)) { - return swal('Error!', 'All fields are required', 'error') + if (!(name)) { + return swal('Error!', 'Name fields are required', 'error') } const myForm = new FormData(); @@ -53,6 +55,8 @@ const AddProduct = () => { myForm.set("image", image); + myForm.set("category_banner", ctegoryBannerImage); + setLoading({ loading: true }); // console.log(image) try { @@ -112,7 +116,9 @@ const AddProduct = () => { placeholder="Name" /> - +
category image *
+ + {/* */} @@ -124,6 +130,21 @@ const AddProduct = () => { onChange={handleImage} + /> + +
category Banner image *
+ + + + + setCtegoryBannerImage(e.target.files[0])} + + />
From 1064b3c5055e649ac57af51388dbc7c1a9782041 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Fri, 28 Oct 2022 15:17:20 +0530 Subject: [PATCH 28/48] self directory --- src/App.js | 2 +- src/_nav.js | 4 +- src/views/Banners/AddBanner.js | 64 +++++++------- src/views/Banners/Banner.js | 10 +-- src/views/Banners/EditBanner.js | 107 +++++++++++++++--------- src/views/Banners/ViewBanner.js | 6 +- src/views/Category/Category.js | 2 +- src/views/Category/EditCategory.js | 61 ++++++++++++-- src/views/Directory/Bisuness.js | 16 +++- src/views/Directory/EditBisuness.js | 2 +- src/views/Directory/Pagination.js | 25 ++++++ src/views/Feedback/feedback.js | 4 +- src/views/Requirement/Pagination.js | 25 ++++++ src/views/Requirement/Requirement.js | 24 +++++- src/views/Requirement/RequirementOpt.js | 7 +- 15 files changed, 259 insertions(+), 100 deletions(-) create mode 100644 src/views/Directory/Pagination.js create mode 100644 src/views/Requirement/Pagination.js diff --git a/src/App.js b/src/App.js index 3aaec53..f6b5c2b 100644 --- a/src/App.js +++ b/src/App.js @@ -37,7 +37,7 @@ const App = () => { setUserData(false) } else { try { - console.log('requesting user data from server') + // console.log('requesting user data from server') let response = await axios.get(`/api/v1/user/details`, { headers: { Authorization: `Bearer ${token}`, diff --git a/src/_nav.js b/src/_nav.js index 646006f..a39d9f1 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -32,7 +32,7 @@ const _nav = [ { component: CNavItem, - name: 'Category', + name: 'Categories', icon: , to: '/category', }, @@ -63,7 +63,7 @@ const _nav = [ { component: CNavItem, - name: 'Banners', + name: 'Home Page Banners', icon: , to: '/banner', }, diff --git a/src/views/Banners/AddBanner.js b/src/views/Banners/AddBanner.js index a8570e7..f35091c 100644 --- a/src/views/Banners/AddBanner.js +++ b/src/views/Banners/AddBanner.js @@ -27,12 +27,12 @@ const AddBanner = () => { const [image, setImage] = useState(""); const [title, setTitle] = useState(""); const [subTitle, setSubTitle] = useState(""); - const [section, setSection] = useState(""); + // const [section, setSection] = useState(""); const [startDate, setStartDate] = useState(new Date()); const [endDate, setEndDate] = useState(new Date()); - const [subSection, setSubSection] = useState(""); - const [category, setCategory] = useState(false); + // const [subSection, setSubSection] = useState(""); + // const [category, setCategory] = useState(false); @@ -42,16 +42,16 @@ const AddBanner = () => { const handleSubmit = async () => { - if (!(title && subTitle && image && section && subSection && startDate && endDate)) { + if (!(title && image && startDate && endDate)) { return swal('Error!', 'All fields are required', 'error') } const myForm = new FormData(); myForm.set("title", title); - myForm.set("subTitle", subTitle); - myForm.set("section", section); - myForm.set("subSection", subSection); + // myForm.set("subTitle", subTitle); + // myForm.set("section", section); + // myForm.set("subSection", subSection); myForm.set("startDate", startDate); myForm.set("endDate", endDate); myForm.set("image", image); @@ -94,25 +94,25 @@ const AddBanner = () => { }; - useEffect(() => { - const getData = async () => { - let res = await axios.get( - `/api/category/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - console.log(res.data) - setCategory(res.data.category) - } - if (section === "category") { - getData() - } else { - setCategory(false) - } - }, [section]) + // useEffect(() => { + // const getData = async () => { + // let res = await axios.get( + // `/api/category/getAll`, + // { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // } + // ); + // // console.log(res.data) + // setCategory(res.data.category) + // } + // if (section === "category") { + // getData() + // } else { + // setCategory(false) + // } + // }, [section]) return ( <> @@ -136,7 +136,7 @@ const AddBanner = () => { value={title} placeholder="Title" /> - + {/* @@ -145,9 +145,9 @@ const AddBanner = () => { onChange={(e) => setSubTitle(e.target.value)} value={subTitle} placeholder="sub title" /> - + */} - + {/* Section @@ -167,7 +167,7 @@ const AddBanner = () => { - {/* */} + @@ -187,11 +187,11 @@ const AddBanner = () => { ))} - {/* */} + } - + */} Start Date* diff --git a/src/views/Banners/Banner.js b/src/views/Banners/Banner.js index cd3e0c2..d667491 100644 --- a/src/views/Banners/Banner.js +++ b/src/views/Banners/Banner.js @@ -69,7 +69,7 @@ function banner() {
-

CMP-BANNER

+

Home Page Banners

{/*
    @@ -97,8 +97,8 @@ function banner() { Title Image - Section - Sub Section + {/* Section + Sub Section */} Status Added On Action @@ -112,8 +112,8 @@ function banner() { - {item?.section} - {item?.subSection} + {/* {item?.section} + {item?.subSection} */} new Date() ? "success" : "danger" diff --git a/src/views/Banners/EditBanner.js b/src/views/Banners/EditBanner.js index d2c7106..413fb45 100644 --- a/src/views/Banners/EditBanner.js +++ b/src/views/Banners/EditBanner.js @@ -29,14 +29,16 @@ const EditBanner = () => { let history = useHistory(); const [image, setImage] = useState(""); const [title, setTitle] = useState(""); - const [subTitle, setSubTitle] = useState(""); - const [section, setSection] = useState(""); + // const [subTitle, setSubTitle] = useState(""); + const [imagesPreview, setImagesPreview] = useState(); + + // const [section, setSection] = useState(""); const [startDate, setStartDate] = useState(""); const [endDate, setEndDate] = useState(""); - const [subSection, setSubSection] = useState(""); - const [category, setCategory] = useState(false); + // const [subSection, setSubSection] = useState(""); + // const [category, setCategory] = useState(false); const [loading, setLoading] = useState(false); //fetch one Offer @@ -46,28 +48,29 @@ const EditBanner = () => { Authorization: `Bearer ${token}`, }, }); - // console.log(res.data.banner) + // console.log(res.data.banner.startDate) setTitle(res.data.banner.title) - setSubTitle(res.data.banner.subTitle) - setSection(res.data.banner.section) - setSubSection(res.data.banner.subSection) - setStartDate(new Date(res.data.banner.startDate).toLocaleDateString()) - setEndDate(new Date(res.data.banner.endDate).toLocaleDateString()) + // setSubTitle(res.data.banner.subTitle) + // setSection(res.data.banner.section) + // setSubSection(res.data.banner.subSection) + setImagesPreview(res.data.banner.image.url) + setStartDate(res.data.banner.startDate) + setEndDate(res.data.banner.endDate) }, [id]); const handleSubmit = async () => { - if (!(title && subTitle && image && section && subSection && startDate && endDate)) { + if (!(title && startDate && endDate)) { return swal('Error!', 'All fields are required', 'error') } const myForm = new FormData(); myForm.set("title", title); - myForm.set("subTitle", subTitle); - myForm.set("section", section); - myForm.set("subSection", subSection); + // myForm.set("subTitle", subTitle); + // myForm.set("section", section); + // myForm.set("subSection", subSection); myForm.set("startDate", startDate); myForm.set("endDate", endDate); myForm.set("image", image); @@ -97,13 +100,31 @@ const EditBanner = () => { }; + // const handleImage = (e) => { + // const files = e.target.files[0]; + // // console.log(files) + // setImage(files); + + // }; + // // const handleImage = (e) => { const files = e.target.files[0]; + // console.log(files) setImage(files); + // only for file preview------------------------------------ + const Reader = new FileReader(); + Reader.readAsDataURL(files); + Reader.onload = () => { + if (Reader.readyState === 2) { + setImagesPreview(Reader.result); + } + }; + + + // ----------------------------------------------------------------------------- }; - // const onCancel = () => { // window.location = "/comproducts"; history.goBack() @@ -111,25 +132,25 @@ const EditBanner = () => { }; - useEffect(() => { - const getData = async () => { - let res = await axios.get( - `/api/category/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - console.log(res.data) - setCategory(res.data.category) - } - if (section === "category") { - getData() - } else { - setCategory(false) - } - }, [section]) + // useEffect(() => { + // const getData = async () => { + // let res = await axios.get( + // `/api/category/getAll`, + // { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // } + // ); + // console.log(res.data) + // setCategory(res.data.category) + // } + // if (section === "category") { + // getData() + // } else { + // setCategory(false) + // } + // }, [section]) return ( <> @@ -153,7 +174,7 @@ const EditBanner = () => { value={title} placeholder="Title" /> - + {/* @@ -162,9 +183,9 @@ const EditBanner = () => { onChange={(e) => setSubTitle(e.target.value)} value={subTitle} placeholder="sub title" /> - + */} - + {/* @@ -183,7 +204,7 @@ const EditBanner = () => { - {/* */} + {category && <> @@ -202,11 +223,11 @@ const EditBanner = () => { ))} - {/* */} + } - + */} Start Date* @@ -258,6 +279,12 @@ const EditBanner = () => { /> +
    + + + {imagesPreview && Product Preview} + +
diff --git a/src/views/Banners/ViewBanner.js b/src/views/Banners/ViewBanner.js index 8a35a9e..e99542e 100644 --- a/src/views/Banners/ViewBanner.js +++ b/src/views/Banners/ViewBanner.js @@ -59,7 +59,7 @@ function ViewBanner() {
-

CMP-BANNER

+

Home Page Banner

{/*
    @@ -92,8 +92,8 @@ function ViewBanner() { Image - Section{banner?.section} - Sub Section{banner?.subSection} + {/* Section{banner?.section} + Sub Section{banner?.subSection} */} Start Date {new Date(`${banner?.startDate}`).toDateString()} diff --git a/src/views/Category/Category.js b/src/views/Category/Category.js index db65f7a..ff89ee4 100644 --- a/src/views/Category/Category.js +++ b/src/views/Category/Category.js @@ -96,7 +96,7 @@ function Products() {
    -

    CMP-Category

    +

    Categories

    {/*
      diff --git a/src/views/Category/EditCategory.js b/src/views/Category/EditCategory.js index 50e209a..7cdd65d 100644 --- a/src/views/Category/EditCategory.js +++ b/src/views/Category/EditCategory.js @@ -29,7 +29,9 @@ const AddProduct = () => { // console.log(id) const [image, setImage] = useState(""); const [name, setName] = useState(""); + const [imagesPreview, setImagesPreview] = useState(); const [ctegoryBannerImage, setCtegoryBannerImage] = useState(""); + const [ctegoryBannerImagePreview, setCtegoryBannerImagePreview] = useState(""); const [loading, setLoading] = useState(false); useEffect(async () => { @@ -39,7 +41,9 @@ const AddProduct = () => { }, }); - + // setImage(res.data.category.image.url) + setImagesPreview(res.data.category.image.url) + setCtegoryBannerImagePreview(res.data.category.category_banner.url) setName(res.data.category.name) }, [id]); @@ -83,10 +87,42 @@ const AddProduct = () => { } const handleImage = (e) => { const files = e.target.files[0]; + // console.log(files) setImage(files); + // only for file preview------------------------------------ + const Reader = new FileReader(); + Reader.readAsDataURL(files); + Reader.onload = () => { + if (Reader.readyState === 2) { + setImagesPreview(Reader.result); + } + }; + + + // ----------------------------------------------------------------------------- }; + const handleBannerImage = (e) => { + const files = e.target.files[0]; + + // console.log(files) + setCtegoryBannerImage(files); + // only for file preview------------------------------------ + const Reader = new FileReader(); + Reader.readAsDataURL(files); + + Reader.onload = () => { + if (Reader.readyState === 2) { + setCtegoryBannerImagePreview(Reader.result); + } + }; + + + // ----------------------------------------------------------------------------- + }; + + // const onCancel = () => { history.goBack() @@ -102,7 +138,7 @@ const AddProduct = () => { -

      Edit {name} Category

      +

      Edit Category

      @@ -118,7 +154,7 @@ const AddProduct = () => {
      category image *
      - + {/* */} @@ -132,8 +168,13 @@ const AddProduct = () => { /> +
      + + {imagesPreview && Product Preview} + +
      category Banner image *
      - + @@ -142,14 +183,22 @@ const AddProduct = () => { placeholder="image" accept="image/*" required - onChange={(e) => setCtegoryBannerImage(e.target.files[0])} + onChange={handleBannerImage} /> +
      + + {ctegoryBannerImagePreview && Product Preview} + +
      + + +
      -
      +
      + ) } diff --git a/src/views/Directory/EditBisuness.js b/src/views/Directory/EditBisuness.js index 227e68c..447f9bc 100644 --- a/src/views/Directory/EditBisuness.js +++ b/src/views/Directory/EditBisuness.js @@ -95,7 +95,7 @@ const EditBisuness = () => { const handleSubmit = async () => { if (!(state.name && state.phone && state.email && state.Building_Name && state.Street_Name && state.country && state.city && state.description - && state.category && state.status && image)) { + && state.category && state.status)) { return swal('Error!', 'All fields are required', 'error') } diff --git a/src/views/Directory/Pagination.js b/src/views/Directory/Pagination.js new file mode 100644 index 0000000..e2ce0f8 --- /dev/null +++ b/src/views/Directory/Pagination.js @@ -0,0 +1,25 @@ +import React from 'react'; +import { Link } from "react-router-dom"; +const Pagination = ({ postsPerPage, totalPosts, paginate }) => { + const pageNumbers = []; + + for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { + pageNumbers.push(i); + } + + return ( + + ); +}; + +export default Pagination; \ No newline at end of file diff --git a/src/views/Feedback/feedback.js b/src/views/Feedback/feedback.js index 9f305df..f4f1244 100644 --- a/src/views/Feedback/feedback.js +++ b/src/views/Feedback/feedback.js @@ -12,7 +12,7 @@ function feedback() { const [currentPage, setCurrentPage] = useState(1); - const [postsPerPage] = useState(10); + const [postsPerPage] = useState(20); const token = isAutheticated(); const getRestriction = useCallback(async () => { @@ -96,7 +96,7 @@ function feedback() { {currentPosts && currentPosts.map((item, index) => - + {item?.name} {item?.description} diff --git a/src/views/Requirement/Pagination.js b/src/views/Requirement/Pagination.js new file mode 100644 index 0000000..4df8d64 --- /dev/null +++ b/src/views/Requirement/Pagination.js @@ -0,0 +1,25 @@ +import React from 'react'; +import { Link } from "react-router-dom"; +const Pagination = ({ postsPerPage, totalPosts, paginate }) => { + const pageNumbers = []; + + for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { + pageNumbers.push(i); + } + + return ( + + ); +}; + +export default Pagination; \ No newline at end of file diff --git a/src/views/Requirement/Requirement.js b/src/views/Requirement/Requirement.js index b18cd86..6264d5d 100644 --- a/src/views/Requirement/Requirement.js +++ b/src/views/Requirement/Requirement.js @@ -5,11 +5,13 @@ import { Link } from "react-router-dom"; import swal from 'sweetalert'; // import { API } from "../../data"; import { isAutheticated } from "../../auth"; +import Pagination from "./Pagination"; import RequirementOpt from "./RequirementOpt"; function Requirement() { const [requirement, setRequirement] = useState([]) - + const [currentPage, setCurrentPage] = useState(1); + const [postsPerPage] = useState(20); const token = isAutheticated(); // console.log(token) const getRequirement = useCallback(async () => { @@ -29,6 +31,21 @@ function Requirement() { useEffect(() => { getRequirement(); }, [getRequirement]); + + + const indexOfLastPost = currentPage * postsPerPage; + const indexOfFirstPost = indexOfLastPost - postsPerPage; + const currentPosts = requirement.slice(indexOfFirstPost, indexOfLastPost); + + // Change page + const paginate = pageNumber => setCurrentPage(pageNumber); + + + + + + + const handleApprove = async (id) => { let status = window.confirm("Do you want to Approve"); if (!status) return; @@ -99,7 +116,7 @@ function Requirement() { - {requirement && requirement.map((item, index) => + {currentPosts && currentPosts.map((item, index) => )} @@ -115,6 +132,9 @@ function Requirement() {
      {/* */}
    +
    ); } diff --git a/src/views/Requirement/RequirementOpt.js b/src/views/Requirement/RequirementOpt.js index aa28b40..6552bdd 100644 --- a/src/views/Requirement/RequirementOpt.js +++ b/src/views/Requirement/RequirementOpt.js @@ -9,6 +9,7 @@ const RequirementOpt = ({ item, handleApprove }) => { const [user, setUser] = useState() const [approve, setApprove] = useState(false) const token = isAutheticated(); + useEffect(async () => { let resp = await axios.get( `/api/v1/admin/user/${item.addedBy}`, @@ -18,7 +19,7 @@ const RequirementOpt = ({ item, handleApprove }) => { }, } ); - // console.log(resp.data) + setUser(resp.data.user) ///approved @@ -36,7 +37,7 @@ const RequirementOpt = ({ item, handleApprove }) => { setApprove(false) } } catch (e) { - console.log(e) + setApprove(false) } } @@ -79,7 +80,7 @@ const RequirementOpt = ({ item, handleApprove }) => { {item?.areaOfInterest} - {user?.name} + {user && {user?.name}} {/* {item?.addedOn} */} {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} From 0dc12038fd04f49b2f5d1acdf9931f8b9491f5c3 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:56:02 +0530 Subject: [PATCH 29/48] directory --- src/_nav.js | 2 +- src/index.js | 2 +- src/views/Banners/Banner.js | 2 +- src/views/Banners/ViewBanner.js | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/_nav.js b/src/_nav.js index a39d9f1..4f501f8 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -63,7 +63,7 @@ const _nav = [ { component: CNavItem, - name: 'Home Page Banners', + name: 'Home Screen Banners', icon: , to: '/banner', }, diff --git a/src/index.js b/src/index.js index dc6683f..05329e4 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ import axios from 'axios' const setupAxios = () => { axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; - //axios.defaults.baseURL = 'http://localhost:5000' + // axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/views/Banners/Banner.js b/src/views/Banners/Banner.js index d667491..da83d21 100644 --- a/src/views/Banners/Banner.js +++ b/src/views/Banners/Banner.js @@ -69,7 +69,7 @@ function banner() {
    -

    Home Page Banners

    +

    Home Screen Banners

    {/*
      diff --git a/src/views/Banners/ViewBanner.js b/src/views/Banners/ViewBanner.js index e99542e..dcc40e5 100644 --- a/src/views/Banners/ViewBanner.js +++ b/src/views/Banners/ViewBanner.js @@ -59,7 +59,7 @@ function ViewBanner() {
      -

      Home Page Banner

      +

      Home Screen Banner

      {/*
        @@ -87,7 +87,6 @@ function ViewBanner() { Id{banner?._id} Title{banner?.title} - Sub Title{banner?.subTitle} Image From 9180d8f7f499d0522ef12dacae0ec396107c48c7 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 2 Nov 2022 15:53:32 +0530 Subject: [PATCH 30/48] modify --- package.json | 2 + src/index.js | 2 +- src/routes.js | 5 +- src/views/CMS/AddNewPageCms.js | 183 +++++++++++++++++++ src/views/CMS/EditCms.js | 316 ++++++++++++++++++++++----------- src/views/CMS/Pagination.js | 25 +++ src/views/CMS/ViewCms.js | 18 +- src/views/CMS/cms.js | 241 +++++++++---------------- 8 files changed, 531 insertions(+), 261 deletions(-) create mode 100644 src/views/CMS/AddNewPageCms.js create mode 100644 src/views/CMS/Pagination.js diff --git a/package.json b/package.json index 57ba36c..4c6b5b4 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,8 @@ "coreui_library_short_version": "4.1" }, "dependencies": { + "@ckeditor/ckeditor5-build-classic": "^35.2.1", + "@ckeditor/ckeditor5-react": "^5.0.2", "@coreui/chartjs": "^3.0.0", "@coreui/coreui": "^4.1.0", "@coreui/icons": "^2.1.0", diff --git a/src/index.js b/src/index.js index 05329e4..9318502 100644 --- a/src/index.js +++ b/src/index.js @@ -11,7 +11,7 @@ import store from './store' import axios from 'axios' const setupAxios = () => { - axios.defaults.baseURL = 'https://cms-api-dashboard.herokuapp.com/'; + axios.defaults.baseURL = 'https://cmp-all-api.herokuapp.com/' // axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', diff --git a/src/routes.js b/src/routes.js index c5bbfe4..b877721 100644 --- a/src/routes.js +++ b/src/routes.js @@ -31,6 +31,7 @@ import EditBanner from './views/Banners/EditBanner' import AddBanner from './views/Banners/AddBanner' //cms import CMS from './views/CMS/cms' +import AddNewPageCms from './views/CMS/AddNewPageCms' import CMSView from './views/CMS/ViewCms' import CMSEdit from './views/CMS/EditCms' //cms @@ -98,10 +99,12 @@ const routes = [ { path: '/banner/edit/:id', name: 'EditBanner', component: EditBanner }, { path: '/banner', name: 'Banner', component: Banner }, //CMS + { path: '/cms/view/:id', name: 'CMS', component: CMSView }, { path: '/cms/edit/:id', name: 'CMS', component: CMSEdit }, + { path: '/cms/new', name: 'CMS New', component: AddNewPageCms }, { path: '/cms', name: 'CMS', component: CMS }, - //CMS + //feedback { path: '/feedback/view/:id', name: 'ViewFeedback', component: ViewFeedback }, { path: '/feedback', name: 'Feedback', component: Feedback }, //Requirement diff --git a/src/views/CMS/AddNewPageCms.js b/src/views/CMS/AddNewPageCms.js new file mode 100644 index 0000000..3d9abff --- /dev/null +++ b/src/views/CMS/AddNewPageCms.js @@ -0,0 +1,183 @@ + +import React, { useEffect, useState } from 'react' +import { CKEditor } from '@ckeditor/ckeditor5-react' + +import { Link, useHistory } from 'react-router-dom' +import { isAutheticated } from "../../auth"; +import swal from 'sweetalert' +import axios from 'axios' + +import ClassicEditor from '@ckeditor/ckeditor5-build-classic' + + +const AddNewPageCms = () => { + const token = isAutheticated() + const history = useHistory() + const [image, setImage] = useState() + const [data, setData] = useState({ + title: '', + page_data: '', + }) + const [loading, setLoading] = useState(false) + + const handleChange = (e) => { + + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + const handleSubmit = async () => { + if (data.title.trim() === '' || data.page_data.trim() === '') { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + const formData = new FormData() + formData.append('title', data.title) + formData.append('page_data', data.page_data) + formData.append('image', image) + try { + const res = await axios + .post(`/api/restriction/cms/create/`, formData, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', + }, + }) + if (res.data.success === true) { + + setLoading(false) + swal({ + title: 'Added', + text: 'Page added successfully!', + icon: 'success', + button: 'Return', + }) + history.goBack() + + } + } catch (error) { + const message = 'Something went wrong!' + setLoading(false) + swal({ + title: 'Warning', + text: message, + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + } + } + + + return ( +
        +
        +
        +
        +
        + Add Page in CMS +
        + +
        + + + + +
        +
        +
        +
        +
        +
        +
        +
        +
        + + Title + + + { + handleChange(e) + }} + /> +
        +
        +
        Page data *
        +
        +
        + { + editor.editing.view.change((writer) => { + writer.setStyle('height', '200px', editor.editing.view.document.getRoot()) + }) + }} + data={data.page_data} + // config={{ + // extraPlugins: [MyCustomUploadAdapterPlugin], + // }} + placeholder='page data...' + onChange={(event, editor) => { + let e = { target: { value: editor.getData(), id: 'page_data' } } + handleChange(e) + }} + /> +
        +
        + +
        +
        image *
        +
        + setImage(e.target.files[0])} + /> + {/*

        Upload videos, images and pdf only

        */} +
        +
        +
        +
        +
        +
        + ) +} + +export default AddNewPageCms diff --git a/src/views/CMS/EditCms.js b/src/views/CMS/EditCms.js index ee8593f..6d8d412 100644 --- a/src/views/CMS/EditCms.js +++ b/src/views/CMS/EditCms.js @@ -1,131 +1,247 @@ -import axios from "axios"; -import React, { useEffect, useState, useCallback } from "react"; +import React, { useEffect, useState } from 'react' +import { CKEditor } from '@ckeditor/ckeditor5-react' + +import { Link, useHistory, useParams } from 'react-router-dom' import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import swal from 'sweetalert'; -import { Link, useParams } from "react-router-dom"; -import { useHistory } from "react-router-dom"; +import swal from 'sweetalert' +import axios from 'axios' + +import ClassicEditor from '@ckeditor/ckeditor5-build-classic' +import { useCallback } from 'react'; + + const EditCms = () => { const { id } = useParams() - const token = isAutheticated(); - // console.log(token, id) - let history = useHistory(); - const [state, setState] = useState({ - About_Us: "", - Terms_and_Conditions: "", - Privacy_Policy: "", - - loading: false, - - }); - const { loading } = state; - const changeState = (newState) => - setState((prevState) => ({ ...prevState, ...newState })); - + const token = isAutheticated() + const history = useHistory() + const [image, setImage] = useState() + const [imagesPreview, setImagesPreview] = useState(); + const [data, setData] = useState({ + title: '', + page_data: '', + }) + const [loading, setLoading] = useState(false) const handleChange = (e) => { - changeState({ ...state, [e.target.name]: e.target.value }) + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) } - const fetchRestriction = useCallback(async () => { - const res = await axios.get(`/api/restriction/getOne/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); + const handleImage = (e) => { + const files = e.target.files[0]; + setImage(files); + // only for file preview------------------------------------ + const Reader = new FileReader(); + Reader.readAsDataURL(files); - // console.log(res.data.CmpRes) - setState(res.data.CmpRestriction) - changeState({ loading: false }); - if (res.status === 200) changeState({ ...res.data }); - }, [token]); + Reader.onload = () => { + if (Reader.readyState === 2) { + setImagesPreview(Reader.result); + } + }; + // ----------------------------------------------------------------------------- + }; + const getCms = useCallback(async () => { + + + let res = await axios.get( + `/api/restriction/getOne/${id}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + if (res.data.CmpRestriction) { + setData((prev) => ({ ...res.data.CmpRestriction })) + if (res.data.CmpRestriction.image) { + setImagesPreview(res.data.CmpRestriction.image.url) + } + + } + }, [token] + ) useEffect(() => { - fetchRestriction(); - }, [fetchRestriction]); - + getCms(); + }, []); const handleSubmit = async () => { - changeState({ loading: true }); + if (data.title.trim() === '' || data.page_data.trim() === '') { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + const formData = new FormData() + formData.append('title', data.title) + formData.append('page_data', data.page_data) + formData.append('image', image) try { - let res = await axios.put( - `/api/restriction/update/${id}`, - { - ...state, - }, - { + const res = await axios + .put(`/api/restriction/cms/update/${id}`, formData, { headers: { + 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', }, - } - ); - //if (res.status === 200) window.location.reload(); - // console.log(res.data) - // console.log(res.status == 200) - if (res.data.success == true) { - changeState({ loading: false }); - swal("Edit CMP-Condition successfully!"); + }) + if (res.data.success === true) { + + setLoading(false) + swal({ + title: 'Edited', + text: 'Page edited successfully!', + icon: 'success', + button: 'Return', + }) history.goBack() + } } catch (error) { - swal('Error!', error, 'error') - - changeState({ loading: false }); + const message = error?.response?.data?.message || 'Something went wrong!' + setLoading(false) + swal({ + title: 'Warning', + text: message, + icon: 'error', + button: 'Retry', + dangerMode: true, + }) } + } - }; - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; return ( - <> -
        - -

        EDIT-CMS

        +
        +
        +
        +
        +
        + Edit Page +
        -
        - - -
        -
        - - -
        -
        - - -
        -
        - - -
        + type="button" + className="btn btn-success mt-1 mb-0 my-1 btn btn-success btn-login waves-effect waves-light mr-1" + onClick={() => handleSubmit()} + disabled={loading} + > + {loading ? 'Loading' : 'Save'} + + + + +
        +
        +
        - +
        +
        +
        +
        +
        + + Title + + + { + handleChange(e) + }} + /> +
        +
        +
        Page data *
        +
        + + + +
        + + {/*
        +
        + { + editor.editing.view.change((writer) => { + writer.setStyle('height', '200px', editor.editing.view.document.getRoot()) + }) + }} + data={data.page_data} + // config={{ + // extraPlugins: [MyCustomUploadAdapterPlugin], + // }} + + onChange={(event, editor) => { + let e = { target: { value: editor.getData(), id: 'page_data' } } + handleChange(e) + }} + /> +
        +
        */} + +
        +
        image *
        +
        + + {/*

        Upload videos, images and pdf only

        */} +
        +
        + + {imagesPreview && Product Preview} + +
        +
        +
        +
        +
        +
        ) } -export default EditCms \ No newline at end of file +export default EditCms diff --git a/src/views/CMS/Pagination.js b/src/views/CMS/Pagination.js new file mode 100644 index 0000000..b648950 --- /dev/null +++ b/src/views/CMS/Pagination.js @@ -0,0 +1,25 @@ +import React from 'react'; +import { Link } from "react-router-dom"; +const Pagination = ({ postsPerPage, totalPosts, paginate }) => { + const pageNumbers = []; + + for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { + pageNumbers.push(i); + } + + return ( + + ); +}; + +export default Pagination; \ No newline at end of file diff --git a/src/views/CMS/ViewCms.js b/src/views/CMS/ViewCms.js index 311395e..83aa007 100644 --- a/src/views/CMS/ViewCms.js +++ b/src/views/CMS/ViewCms.js @@ -66,6 +66,7 @@ function ViewOffer() {
      1. CMD-Category
      */} +
      @@ -83,14 +84,21 @@ function ViewOffer() { {/* Id */} - About Us - {cmsRes?.About_Us} + Title + {cmsRes?.title} - Terms and Conditions - {cmsRes?.Terms_and_Conditions} + page Content + {`${cmsRes?.page_data}`} - Privacy Policy + {/* Privacy Policy {cmsRes?.Privacy_Policy} + */} + + image + {cmsRes.image ? + : + <>

      + } Added On diff --git a/src/views/CMS/cms.js b/src/views/CMS/cms.js index 0f2bb58..cfefa06 100644 --- a/src/views/CMS/cms.js +++ b/src/views/CMS/cms.js @@ -5,10 +5,13 @@ import { Link } from "react-router-dom"; import swal from 'sweetalert'; // import { API } from "../../data"; import { isAutheticated } from "../../auth"; +import Pagination from "./Pagination"; function cms() { const [cmsRes, setCmsRes] = useState([]) + const [currentPage, setCurrentPage] = useState(1); + const [postsPerPage] = useState(15); const token = isAutheticated(); const getRestriction = useCallback(async () => { @@ -20,8 +23,8 @@ function cms() { }, } ); - // console.log(res.data.CmpRestriction[0]) - setCmsRes(res.data.CmpRestriction[0]) + + setCmsRes(res.data.CmpRestriction) }, [token]); @@ -31,8 +34,43 @@ function cms() { }, [getRestriction]); - // console.log(cmsRes) + const indexOfLastPost = currentPage * postsPerPage; + const indexOfFirstPost = indexOfLastPost - postsPerPage; + const currentPosts = cmsRes.slice(indexOfFirstPost, indexOfLastPost); + // Change page + const paginate = pageNumber => setCurrentPage(pageNumber); + const handleDelete = async (id) => { + let status = window.confirm("Do you want to delete"); + if (!status) return; + + let res = await axios.delete(`/api/restriction/cms/delete/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + // console.log(res) + if (res.data.success == true) { + swal("success!", "Cms Deleted Successfully!", "success"); + window.location.reload(); + // if (res.status === 200) window.location.reload(); + } + else { + swal("error!", "failled!", "error"); + + } + }; + //change time formate + function formatAMPM(date) { + var hours = new Date(date).getHours(); + var minutes = new Date(date).getMinutes(); + var ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0' + minutes : minutes; + var strTime = hours + ':' + minutes + ' ' + ampm; + return strTime; + } return (
      @@ -42,15 +80,8 @@ function cms() {

      CMP-CMS

      - {/* */} - {/*
      -
        -
      1. - CMD-App -
      2. -
      3. CMD-Category
      4. -
      -
      */} + {/* */} +
      @@ -68,169 +99,68 @@ function cms() { - About Us - Terms and Conditions - Privacy Policy + Title + {/* Page Data */} + + {/* image */} + Added On Action - - - - {cmsRes?.About_Us} - {cmsRes?.Terms_and_Conditions} - {cmsRes?.Privacy_Policy} + {currentPosts && currentPosts.map((item, index) => + + {item.title} + {/* {item?.page_data} */} + {/* {item.image ? + : + <>

      + } */} - - + + {/* {item?.addedOn} */} + {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} + + + + + + + + + + + - - - - - - {/* */} - - + + + + )}
      - {/* second table */} - {/*
      - - - - - - - - - - - - - - - - - - - - -
      Terms and ConditionsAction
      {cmsRes?.Terms_and_Conditions} - - - - - - - - - {/* */} - {/*
      -
      */} - - - - - {/* end second table */} - - {/* third table */} - {/*
      - - - - - - - - - - - - - - - - - - - - -
      Privacy PolicyAction
      {cmsRes?.Privacy_Policy} - - - - - - - - - {/* */} - {/*
      -
      */} - - - {/* end third table */} - {/* */}
    @@ -238,6 +168,9 @@ function cms() {
    {/* */}
    +
    ); } From a5b18130b7b2a60cd59f6d708dd19a4ab6be7d39 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 2 Nov 2022 17:08:31 +0530 Subject: [PATCH 31/48] modify --- src/components/header/AppHeaderDropdown.js | 44 ++++++++++++++++++---- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/components/header/AppHeaderDropdown.js b/src/components/header/AppHeaderDropdown.js index 10e80ee..5f09b4e 100644 --- a/src/components/header/AppHeaderDropdown.js +++ b/src/components/header/AppHeaderDropdown.js @@ -24,26 +24,56 @@ import { import CIcon from '@coreui/icons-react' import swal from 'sweetalert'; -import avatar8 from './../../assets/images/avatars/1.jpg' +import userImage from './../../assets/images/avatars/1.jpg' import { Link } from 'react-router-dom' // import { signout } from 'src/auth' import { useHistory } from "react-router-dom"; +import { useEffect } from 'react'; +import axios from 'axios'; +import { useState } from 'react'; + + const AppHeaderDropdown = () => { + const [userData, setUserData] = useState() let history = useHistory(); const signout = async () => { localStorage.removeItem('authToken') - // let res = await axios.get( - // `http://localhost:5000/api/user/logOut` - // ); - // if (res.success == true) { swal("success!", "Logged Out", "success"); history.push("/"); - // } } + + //for user image + + const getUser = async () => { + let token = localStorage.getItem("authToken"); + try { + let response = await axios.get(`/api/v1/user/details`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + + if (response.data.success === true) { + setUserData(response.data.user) + + } + } + catch (err) { + + console.log(err); + }; + } + + + useEffect(() => { + getUser() + }, []) + return ( - + {userData && userData ? : + } Account From 83bd2c9d229e97f24f64d6e5195be5859af607ad Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 3 Nov 2022 12:43:33 +0530 Subject: [PATCH 32/48] edit profile --- src/components/header/AppHeaderDropdown.js | 6 + src/routes.js | 5 +- src/views/Profile/EditProfile.js | 171 ++++++++++++++------- src/views/Profile/Profile.js | 85 +++++++--- 4 files changed, 184 insertions(+), 83 deletions(-) diff --git a/src/components/header/AppHeaderDropdown.js b/src/components/header/AppHeaderDropdown.js index 5f09b4e..210cad6 100644 --- a/src/components/header/AppHeaderDropdown.js +++ b/src/components/header/AppHeaderDropdown.js @@ -129,6 +129,12 @@ const AppHeaderDropdown = () => { */} {/* */} + + + + Edit Profile + + diff --git a/src/routes.js b/src/routes.js index b877721..3ad3ac6 100644 --- a/src/routes.js +++ b/src/routes.js @@ -54,6 +54,7 @@ import EditFaqs from './views/FAQs/EditFaqs' // DashBoard const Change_Password = React.lazy(() => import('./views/pages/register/Change_password')) const EditProfile = React.lazy(() => import('./views/Profile/EditProfile')) +import Profile from './views/Profile/Profile' const Dashboard = React.lazy(() => import('./views/dashboard/Dashboard')) @@ -61,8 +62,8 @@ const routes = [ { path: '/', exact: true, name: 'Home' }, { path: '/change_password', name: 'Change Password', component: Change_Password }, - { path: '/edit', name: 'Change Password', component: EditProfile }, - // { path: '/profile', name: 'Change Password', component: Profile }, + { path: '/profile/edit', name: 'Edit Profile', component: EditProfile }, + // { path: '/profile', name: 'Profile', component: Profile }, //Category route { path: '/addCategory', name: 'AddCategeory', component: AddCategeory }, diff --git a/src/views/Profile/EditProfile.js b/src/views/Profile/EditProfile.js index dcac3cb..520c35d 100644 --- a/src/views/Profile/EditProfile.js +++ b/src/views/Profile/EditProfile.js @@ -6,60 +6,118 @@ import axios from 'axios' import { useHistory } from 'react-router-dom' import { isAutheticated } from 'src/auth' const EditProfile = () => { - const [cities, setCities] = useState([]) - const { token } = isAutheticated() + + const [image, setImage] = useState(""); + const [loading, setLoading] = useState(false) + const [imagesPreview, setImagesPreview] = useState(); + const token = isAutheticated() + const [ownerDetails, setOwnerDetails] = useState({ - cafeName: '', + name: '', email: '', - location: '', - country: 'India', - city: '' + phone: '' + }) const history = useHistory() const [processing, setProcessing] = useState(false) const countries = Country.getAllCountries() useEffect(() => { - const countryCode = countries.find(item => item.name === ownerDetails.country) - setCities(() => City.getCitiesOfCountry(countryCode?.isoCode)) + getData() - }, [ownerDetails.country]) + }, []) const getData = async () => { - let res = await axios.get('/owner', { + let res = await axios.get(`/api/v1/user/details`, { headers: { - 'Authorization': `Bearer ${token}` - } + Authorization: `Bearer ${token}`, + }, }) - if (res) { + if (res.data.success) { + setOwnerDetails({ ...res.data.user }) + if (res.data.user.avatar) { + setImagesPreview(res.data.user.avatar.url) + } } + + + } - console.log(ownerDetails); const handleChange = (event) => { const { name, value } = event.target; setOwnerDetails({ ...ownerDetails, [name]: value }); }; + const handleImage = (e) => { + const files = e.target.files[0]; + // console.log(files) + setImage(files); + // only for file preview------------------------------------ + const Reader = new FileReader(); + Reader.readAsDataURL(files); - async function handleSubmit() { - - let res = await axios.put(`/owner`, ownerDetails, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${token}`, + Reader.onload = () => { + if (Reader.readyState === 2) { + setImagesPreview(Reader.result); } - }) - setProcessing(true) - console.log(res.data); + }; - if (res) { - // localStorage.setItem("auth", JSON.stringify({ - // token: res.data.token, - // })); - history.push('/profile') + // ----------------------------------------------------------------------------- + }; + async function handleSubmit() { + if (ownerDetails.name.trim() === '' || ownerDetails.email.trim() === '' || ownerDetails.phone === '') { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return } + const formData = new FormData() + formData.append('name', ownerDetails.name) + formData.append('email', ownerDetails.email) + formData.append('phone', ownerDetails.phone) + formData.append('avatar', image) + setLoading(true) + try { + const res = await axios + .put(`/api/v1//user/update/profile`, formData, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', + }, + }) + if (res.data.success === true) { + + setLoading(false) + swal({ + title: 'Edited', + text: 'Profile Edited Successfully!', + icon: 'success', + button: 'Return', + }) + history.goBack() + + } + } catch (error) { + const message = error?.response?.data?.message || 'Something went wrong!' + setLoading(false) + swal({ + title: 'Warning', + text: message, + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + } + } + const handleCancle = () => { + history.goBack() } return ( @@ -70,49 +128,46 @@ const EditProfile = () => { - +

    Edit Profile

    -

    Edit Profile

    + - Cafe Name - + Name * + - Email + Email * - {/* - Password - - */} - - - - Location - - - Country - - - {countries.map(item => )} - - - - - City - - - {cities.map(item => )} - - + Phone * + + + + +
    + + {imagesPreview && Product Preview} + +
    - Submit + {loading ? 'Loading...' : 'Submit'} + Cancel + +
    diff --git a/src/views/Profile/Profile.js b/src/views/Profile/Profile.js index 073d2ff..880d2bd 100644 --- a/src/views/Profile/Profile.js +++ b/src/views/Profile/Profile.js @@ -1,7 +1,13 @@ import React, { useEffect } from 'react' import { CButton, + CCard, + CCardBody, CCol, + CForm, + CFormInput, + CFormLabel, + CFormSelect, CRow, CTable, CTableBody, @@ -48,32 +54,65 @@ const Profile = () => { className="float-right" onClick={() => history.push('/edit')}>Edit Profile
    - - - - Cafe Name - {user.cafeName} - - - - - Email - {user.email} - + + + {/*

    Edit Profile

    */} + + + Cafe Name + + - - Address - {user.location},{user.city},{user.country} - + + Email + + + {/* + Password + + */} - - Item_Name - - -
    -
    -
+ + Location + + + + image + + + {/* + Country + + + {countries.map(item => )} + + + */} + {/* + City + + + {cities.map(item => )} + + + */} + + {/* + Submit + */} + + + +
) } From 0a5bc6d2585f81ec92ad1b9a280a49bc28cda308 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 3 Nov 2022 13:12:07 +0530 Subject: [PATCH 33/48] edit profile --- src/components/AppSidebarNav.js | 1 - src/index.js | 2 +- src/views/Events/AllRegisterUser.js | 2 +- src/views/Profile/EditProfile.js | 4 ++-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/AppSidebarNav.js b/src/components/AppSidebarNav.js index 9e16944..3841783 100644 --- a/src/components/AppSidebarNav.js +++ b/src/components/AppSidebarNav.js @@ -64,7 +64,6 @@ export const AppSidebarNav = ({ items }) => { {items && items.map((item, index) => - (item.items ? navGroup(item, index) : navItem(item, index)))} ) diff --git a/src/index.js b/src/index.js index 9318502..48b155f 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ import axios from 'axios' const setupAxios = () => { axios.defaults.baseURL = 'https://cmp-all-api.herokuapp.com/' - // axios.defaults.baseURL = 'http://localhost:5000' + //axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/views/Events/AllRegisterUser.js b/src/views/Events/AllRegisterUser.js index 0dc0f91..38bab08 100644 --- a/src/views/Events/AllRegisterUser.js +++ b/src/views/Events/AllRegisterUser.js @@ -29,7 +29,7 @@ const AllRegisterUser = () => { useEffect(() => { getRegisterUser(); }, [getRegisterUser]); - console.log(registerUser) + // console.log(registerUser) //change time formate function formatAMPM(date) { var hours = new Date(date).getHours(); diff --git a/src/views/Profile/EditProfile.js b/src/views/Profile/EditProfile.js index 520c35d..c874f01 100644 --- a/src/views/Profile/EditProfile.js +++ b/src/views/Profile/EditProfile.js @@ -117,7 +117,7 @@ const EditProfile = () => { } } const handleCancle = () => { - history.goBack() + history.push('/dashboard') } return ( @@ -143,7 +143,7 @@ const EditProfile = () => { Phone * - + From 30d8dee61c010bbae85c124cfdc6a190b2b24036 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 3 Nov 2022 13:32:23 +0530 Subject: [PATCH 34/48] edit profile --- src/views/Profile/EditProfile.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/views/Profile/EditProfile.js b/src/views/Profile/EditProfile.js index c874f01..240460c 100644 --- a/src/views/Profile/EditProfile.js +++ b/src/views/Profile/EditProfile.js @@ -1,6 +1,6 @@ import React from 'react' import { CForm, CCol, CFormLabel, CContainer, CRow, CCardGroup, CCard, CCardBody, CFormInput, CFormSelect, CFormCheck, CButton } from '@coreui/react' -import { Country, City } from 'country-state-city' + import { useState, useEffect } from 'react' import axios from 'axios' import { useHistory } from 'react-router-dom' @@ -19,8 +19,7 @@ const EditProfile = () => { }) const history = useHistory() - const [processing, setProcessing] = useState(false) - const countries = Country.getAllCountries() + useEffect(() => { getData() From 5b8234eb8f3b8ec2954d3a2859065d99c11ffe27 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 3 Nov 2022 13:42:11 +0530 Subject: [PATCH 35/48] edit profile --- public/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/index.html b/public/index.html index 6fb9f6a..19331ce 100644 --- a/public/index.html +++ b/public/index.html @@ -20,7 +20,7 @@ manifest.json provides metadata used when your web app is added to the homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/ --> - + From 47ddf039d416b1e37853445a85a5ebecf3f53a89 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 3 Nov 2022 14:01:57 +0530 Subject: [PATCH 36/48] edit profile --- public/index.html | 2 +- src/views/Profile/EditProfile.js | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/public/index.html b/public/index.html index 19331ce..6fb9f6a 100644 --- a/public/index.html +++ b/public/index.html @@ -20,7 +20,7 @@ manifest.json provides metadata used when your web app is added to the homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/ --> - + diff --git a/src/views/Profile/EditProfile.js b/src/views/Profile/EditProfile.js index 240460c..6be7123 100644 --- a/src/views/Profile/EditProfile.js +++ b/src/views/Profile/EditProfile.js @@ -1,10 +1,11 @@ import React from 'react' -import { CForm, CCol, CFormLabel, CContainer, CRow, CCardGroup, CCard, CCardBody, CFormInput, CFormSelect, CFormCheck, CButton } from '@coreui/react' +import { CForm, CCol, CFormLabel, CContainer, CRow, CCardGroup, CCard, CCardBody, CFormInput, CButton } from '@coreui/react' import { useState, useEffect } from 'react' import axios from 'axios' import { useHistory } from 'react-router-dom' import { isAutheticated } from 'src/auth' + const EditProfile = () => { const [image, setImage] = useState(""); @@ -20,11 +21,7 @@ const EditProfile = () => { }) const history = useHistory() - useEffect(() => { - getData() - - }, []) const getData = async () => { let res = await axios.get(`/api/v1/user/details`, { @@ -35,6 +32,7 @@ const EditProfile = () => { if (res.data.success) { setOwnerDetails({ ...res.data.user }) + if (res.data.user.avatar) { setImagesPreview(res.data.user.avatar.url) } @@ -47,6 +45,7 @@ const EditProfile = () => { const { name, value } = event.target; setOwnerDetails({ ...ownerDetails, [name]: value }); }; + const handleImage = (e) => { const files = e.target.files[0]; @@ -66,7 +65,7 @@ const EditProfile = () => { // ----------------------------------------------------------------------------- }; async function handleSubmit() { - if (ownerDetails.name.trim() === '' || ownerDetails.email.trim() === '' || ownerDetails.phone === '') { + if (ownerDetails.name === '' || ownerDetails.email === '' || ownerDetails.phone === '') { swal({ title: 'Warning', text: 'Fill all mandatory fields', @@ -118,6 +117,11 @@ const EditProfile = () => { const handleCancle = () => { history.push('/dashboard') } + useEffect(() => { + + getData() + + }, []) return (
From 73dc17e5d9d9566c5a224399eba903c8e649d369 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 3 Nov 2022 16:05:24 +0530 Subject: [PATCH 37/48] edit profile --- src/views/Profile/EditProfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/Profile/EditProfile.js b/src/views/Profile/EditProfile.js index 6be7123..c479078 100644 --- a/src/views/Profile/EditProfile.js +++ b/src/views/Profile/EditProfile.js @@ -83,7 +83,7 @@ const EditProfile = () => { setLoading(true) try { const res = await axios - .put(`/api/v1//user/update/profile`, formData, { + .put(`/api/v1/user/update/profile`, formData, { headers: { 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}`, From ec1bc4b852ae336d9646bfa3ba476a481b35a551 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 3 Nov 2022 16:19:51 +0530 Subject: [PATCH 38/48] edit profile --- src/routes.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index 3ad3ac6..fbaffa6 100644 --- a/src/routes.js +++ b/src/routes.js @@ -53,8 +53,10 @@ import EditFaqs from './views/FAQs/EditFaqs' // DashBoard const Change_Password = React.lazy(() => import('./views/pages/register/Change_password')) -const EditProfile = React.lazy(() => import('./views/Profile/EditProfile')) +// const EditProfile = React.lazy(() => import('./views/Profile/EditProfile')) + import Profile from './views/Profile/Profile' +import EditProfile from './views/Profile/EditProfile' const Dashboard = React.lazy(() => import('./views/dashboard/Dashboard')) From 0c4fbd952d6aa5a35f1573d924851e42b3d626ef Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 3 Nov 2022 17:03:04 +0530 Subject: [PATCH 39/48] all complete --- src/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index fbaffa6..4fd19d5 100644 --- a/src/routes.js +++ b/src/routes.js @@ -53,7 +53,7 @@ import EditFaqs from './views/FAQs/EditFaqs' // DashBoard const Change_Password = React.lazy(() => import('./views/pages/register/Change_password')) -// const EditProfile = React.lazy(() => import('./views/Profile/EditProfile')) + import Profile from './views/Profile/Profile' import EditProfile from './views/Profile/EditProfile' From db6109515ae9fe523b05431dfc4f3187f000eab8 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Tue, 8 Nov 2022 16:55:31 +0530 Subject: [PATCH 40/48] modify --- src/views/Category/EditCategory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/Category/EditCategory.js b/src/views/Category/EditCategory.js index 7cdd65d..aa6c8c5 100644 --- a/src/views/Category/EditCategory.js +++ b/src/views/Category/EditCategory.js @@ -69,7 +69,7 @@ const AddProduct = () => { { headers: { "Content-Type": 'multipart/form-data', - // Authorization: `Bearer ${token}`, + Authorization: `Bearer ${token}`, }, } ); From 6688dc7674a16590d4caa00c29a6f85fa2133ac1 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 18 Jan 2023 14:35:10 +0530 Subject: [PATCH 41/48] first commit --- public/index.html | 2 +- src/Action/categoryAction.js | 59 -- src/Action/directoryAction.js | 0 src/App.js | 4 +- src/_nav.js | 54 -- src/components/AppFooter.js | 2 +- src/components/AppHeader.js | 2 +- src/components/AppSidebar.js | 2 +- src/components/header/AppHeaderDropdown.js | 4 +- src/index.js | 3 +- src/reducers/categoryReducer.js | 46 -- src/reducers/directoryReducer.js | 61 -- src/routes.js | 106 +--- src/views/Banners/AddBanner.js | 278 --------- src/views/Banners/Banner.js | 179 ------ src/views/Banners/EditBanner.js | 320 ---------- src/views/Banners/ViewBanner.js | 128 ---- src/views/CMS/AddNewPageCms.js | 183 ------ src/views/CMS/EditCms.js | 247 -------- src/views/CMS/Pagination.js | 25 - src/views/CMS/ViewCms.js | 135 ----- src/views/CMS/cms.js | 178 ------ src/views/Category/AddCategory.js | 171 ------ src/views/Category/Category.js | 188 ------ src/views/Category/EditCategory.js | 231 ------- src/views/Directory/Add_Business.js | 549 ----------------- src/views/Directory/Bisuness.js | 267 --------- src/views/Directory/EditBisuness.js | 565 ------------------ src/views/Directory/Pagination.js | 25 - src/views/Directory/View_Bisuness.js | 119 ---- src/views/Events/AddEvent.js | 216 ------- src/views/Events/AllRegisterUser.js | 115 ---- src/views/Events/EditEvent.js | 235 -------- src/views/Events/Event.js | 130 ---- src/views/Events/RegisterUser.js | 92 --- src/views/Events/ViewEvent.js | 123 ---- src/views/FAQs/AddFaqs.js | 174 ------ src/views/FAQs/EditFaqs.js | 185 ------ src/views/FAQs/Faqs.js | 164 ----- src/views/FAQs/ViewFaqs.js | 132 ---- src/views/Feedback/Pagination.js | 25 - src/views/Feedback/ViewFeedback.js | 123 ---- src/views/Feedback/feedback.js | 146 ----- src/views/News/AddNews.js | 161 ----- src/views/News/EditNews.js | 176 ------ src/views/News/News.js | 164 ----- src/views/News/ViewNews.js | 131 ---- src/views/Offers/AddOffer.js | 240 -------- src/views/Offers/EditOffer.js | 247 -------- src/views/Offers/Offer.js | 162 ----- src/views/Offers/ViewOffer.js | 136 ----- src/views/Requirement/AddRequirement.js | 217 ------- src/views/Requirement/EditRequirement.js | 232 ------- src/views/Requirement/Pagination.js | 25 - src/views/Requirement/Requirement.js | 142 ----- src/views/Requirement/RequirementOpt.js | 133 ----- src/views/Requirement/ViewRequirement.js | 142 ----- src/views/pages/login/Login.js | 2 +- src/views/pages/register/ForgotPassword.js | 2 +- .../pages/{ => register}/page404/Page404.js | 0 src/views/widgets/WidgetsDropdown.js | 79 +-- 61 files changed, 16 insertions(+), 8368 deletions(-) delete mode 100644 src/Action/categoryAction.js delete mode 100644 src/Action/directoryAction.js delete mode 100644 src/reducers/categoryReducer.js delete mode 100644 src/reducers/directoryReducer.js delete mode 100644 src/views/Banners/AddBanner.js delete mode 100644 src/views/Banners/Banner.js delete mode 100644 src/views/Banners/EditBanner.js delete mode 100644 src/views/Banners/ViewBanner.js delete mode 100644 src/views/CMS/AddNewPageCms.js delete mode 100644 src/views/CMS/EditCms.js delete mode 100644 src/views/CMS/Pagination.js delete mode 100644 src/views/CMS/ViewCms.js delete mode 100644 src/views/CMS/cms.js delete mode 100644 src/views/Category/AddCategory.js delete mode 100644 src/views/Category/Category.js delete mode 100644 src/views/Category/EditCategory.js delete mode 100644 src/views/Directory/Add_Business.js delete mode 100644 src/views/Directory/Bisuness.js delete mode 100644 src/views/Directory/EditBisuness.js delete mode 100644 src/views/Directory/Pagination.js delete mode 100644 src/views/Directory/View_Bisuness.js delete mode 100644 src/views/Events/AddEvent.js delete mode 100644 src/views/Events/AllRegisterUser.js delete mode 100644 src/views/Events/EditEvent.js delete mode 100644 src/views/Events/Event.js delete mode 100644 src/views/Events/RegisterUser.js delete mode 100644 src/views/Events/ViewEvent.js delete mode 100644 src/views/FAQs/AddFaqs.js delete mode 100644 src/views/FAQs/EditFaqs.js delete mode 100644 src/views/FAQs/Faqs.js delete mode 100644 src/views/FAQs/ViewFaqs.js delete mode 100644 src/views/Feedback/Pagination.js delete mode 100644 src/views/Feedback/ViewFeedback.js delete mode 100644 src/views/Feedback/feedback.js delete mode 100644 src/views/News/AddNews.js delete mode 100644 src/views/News/EditNews.js delete mode 100644 src/views/News/News.js delete mode 100644 src/views/News/ViewNews.js delete mode 100644 src/views/Offers/AddOffer.js delete mode 100644 src/views/Offers/EditOffer.js delete mode 100644 src/views/Offers/Offer.js delete mode 100644 src/views/Offers/ViewOffer.js delete mode 100644 src/views/Requirement/AddRequirement.js delete mode 100644 src/views/Requirement/EditRequirement.js delete mode 100644 src/views/Requirement/Pagination.js delete mode 100644 src/views/Requirement/Requirement.js delete mode 100644 src/views/Requirement/RequirementOpt.js delete mode 100644 src/views/Requirement/ViewRequirement.js rename src/views/pages/{ => register}/page404/Page404.js (100%) diff --git a/public/index.html b/public/index.html index 6fb9f6a..5ced6a1 100644 --- a/public/index.html +++ b/public/index.html @@ -15,7 +15,7 @@ - CMP-Dashboard + ATP-Dashboard */} -
-
-
-

Home Screen Banners

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - {/* - */} - - - - - - - {banner && banner.map((item, index) => - - - - - - {/* - */} - - - - - - - )} - -
TitleImageSectionSub SectionStatusAdded OnAction
{item?.title} - {item?.section}{item?.subSection} - new Date() ? "success" : "danger" - } font-size-10`} - > - {new Date(`${item?.endDate}`) > new Date() ? "Live" : "Suspended"} - - - {/* {item?.addedOn} */} - {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} - - - - - - - - - - - -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default banner; diff --git a/src/views/Banners/EditBanner.js b/src/views/Banners/EditBanner.js deleted file mode 100644 index 413fb45..0000000 --- a/src/views/Banners/EditBanner.js +++ /dev/null @@ -1,320 +0,0 @@ - - -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; -import { useParams } from "react-router-dom"; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilNotes, cilCalendar, cilNoteAdd } from '@coreui/icons' -const EditBanner = () => { - const { id } = useParams(); - const token = isAutheticated(); - let history = useHistory(); - const [image, setImage] = useState(""); - const [title, setTitle] = useState(""); - // const [subTitle, setSubTitle] = useState(""); - const [imagesPreview, setImagesPreview] = useState(); - - // const [section, setSection] = useState(""); - - const [startDate, setStartDate] = useState(""); - const [endDate, setEndDate] = useState(""); - - // const [subSection, setSubSection] = useState(""); - // const [category, setCategory] = useState(false); - - const [loading, setLoading] = useState(false); - //fetch one Offer - useEffect(async () => { - const res = await axios.get(`/api/banner/getOne/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - - // console.log(res.data.banner.startDate) - setTitle(res.data.banner.title) - // setSubTitle(res.data.banner.subTitle) - // setSection(res.data.banner.section) - // setSubSection(res.data.banner.subSection) - setImagesPreview(res.data.banner.image.url) - setStartDate(res.data.banner.startDate) - setEndDate(res.data.banner.endDate) - - }, [id]); - - const handleSubmit = async () => { - if (!(title && startDate && endDate)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("title", title); - // myForm.set("subTitle", subTitle); - // myForm.set("section", section); - // myForm.set("subSection", subSection); - myForm.set("startDate", startDate); - myForm.set("endDate", endDate); - myForm.set("image", image); - setLoading({ loading: true }); - try { - let res = await axios.put( - `/api/banner/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Banner Updated Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', error, 'error') - setLoading(false); - } - // console.log(image) - - - - }; - // const handleImage = (e) => { - // const files = e.target.files[0]; - // // console.log(files) - // setImage(files); - - // }; - // // - const handleImage = (e) => { - const files = e.target.files[0]; - - // console.log(files) - setImage(files); - // only for file preview------------------------------------ - const Reader = new FileReader(); - Reader.readAsDataURL(files); - - Reader.onload = () => { - if (Reader.readyState === 2) { - setImagesPreview(Reader.result); - } - }; - - - // ----------------------------------------------------------------------------- - }; - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - - - // useEffect(() => { - // const getData = async () => { - // let res = await axios.get( - // `/api/category/getAll`, - // { - // headers: { - // Authorization: `Bearer ${token}`, - // }, - // } - // ); - // console.log(res.data) - // setCategory(res.data.category) - // } - // if (section === "category") { - // getData() - // } else { - // setCategory(false) - // } - // }, [section]) - - return ( - <> -
- - - - - - -

Edit Banner

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title" /> - - {/* - - - - setSubTitle(e.target.value)} - value={subTitle} - placeholder="sub title" /> - */} - - {/* - - - - - - - {category && <> - - SubSection - - - } - */} - - - Start Date* - - - {/* */} - - setStartDate(e.target.value)} - value={startDate} - placeholder="Start Date" /> - - - - - End Date* - - - setEndDate(e.target.value)} - value={endDate} - placeholder="EndDate" /> - - {/* - - - - setLocation(e.target.value)} - value={location} - placeholder="Location" /> - */} - - - - {/* */} - - - -
- - - {imagesPreview && Product Preview} - -
-
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default EditBanner \ No newline at end of file diff --git a/src/views/Banners/ViewBanner.js b/src/views/Banners/ViewBanner.js deleted file mode 100644 index dcc40e5..0000000 --- a/src/views/Banners/ViewBanner.js +++ /dev/null @@ -1,128 +0,0 @@ - - - - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -function ViewBanner() { - const [banner, setBanner] = useState([]) - const { id } = useParams(); - // console.log(id) - const token = isAutheticated(); - - const getBanner = useCallback(async () => { - let res = await axios.get( - `/api/banner/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - - setBanner(res.data.banner) - - - }, [token]); - - useEffect(() => { - getBanner(); - }, [getBanner]); - - - - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

Home Screen Banner

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - {/* - */} - - - - - - - - - -
Id{banner?._id}
Title{banner?.title}
Image - -
Section{banner?.section}
Sub Section{banner?.subSection}
Start Date - {new Date(`${banner?.startDate}`).toDateString()} -
End Date - {new Date(`${banner?.endDate}`).toDateString()}
Added On - {new Date(`${banner?.addedOn}`).toDateString()} , {`${formatAMPM(banner?.addedOn)}`} -
Updated At - {new Date(`${banner?.updatedAt}`).toDateString()} , {`${formatAMPM(banner?.updatedAt)}`} -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default ViewBanner; diff --git a/src/views/CMS/AddNewPageCms.js b/src/views/CMS/AddNewPageCms.js deleted file mode 100644 index 3d9abff..0000000 --- a/src/views/CMS/AddNewPageCms.js +++ /dev/null @@ -1,183 +0,0 @@ - -import React, { useEffect, useState } from 'react' -import { CKEditor } from '@ckeditor/ckeditor5-react' - -import { Link, useHistory } from 'react-router-dom' -import { isAutheticated } from "../../auth"; -import swal from 'sweetalert' -import axios from 'axios' - -import ClassicEditor from '@ckeditor/ckeditor5-build-classic' - - -const AddNewPageCms = () => { - const token = isAutheticated() - const history = useHistory() - const [image, setImage] = useState() - const [data, setData] = useState({ - title: '', - page_data: '', - }) - const [loading, setLoading] = useState(false) - - const handleChange = (e) => { - - setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) - } - - const handleSubmit = async () => { - if (data.title.trim() === '' || data.page_data.trim() === '') { - swal({ - title: 'Warning', - text: 'Fill all mandatory fields', - icon: 'error', - button: 'Close', - dangerMode: true, - }) - return - } - setLoading(true) - const formData = new FormData() - formData.append('title', data.title) - formData.append('page_data', data.page_data) - formData.append('image', image) - try { - const res = await axios - .post(`/api/restriction/cms/create/`, formData, { - headers: { - 'Access-Control-Allow-Origin': '*', - Authorization: `Bearer ${token}`, - 'Content-Type': 'multipart/formdata', - }, - }) - if (res.data.success === true) { - - setLoading(false) - swal({ - title: 'Added', - text: 'Page added successfully!', - icon: 'success', - button: 'Return', - }) - history.goBack() - - } - } catch (error) { - const message = 'Something went wrong!' - setLoading(false) - swal({ - title: 'Warning', - text: message, - icon: 'error', - button: 'Retry', - dangerMode: true, - }) - } - } - - - return ( -
-
-
-
-
- Add Page in CMS -
- -
- - - - -
-
-
-
-
-
-
-
-
- - Title - - - { - handleChange(e) - }} - /> -
-
-
Page data *
-
-
- { - editor.editing.view.change((writer) => { - writer.setStyle('height', '200px', editor.editing.view.document.getRoot()) - }) - }} - data={data.page_data} - // config={{ - // extraPlugins: [MyCustomUploadAdapterPlugin], - // }} - placeholder='page data...' - onChange={(event, editor) => { - let e = { target: { value: editor.getData(), id: 'page_data' } } - handleChange(e) - }} - /> -
-
- -
-
image *
-
- setImage(e.target.files[0])} - /> - {/*

Upload videos, images and pdf only

*/} -
-
-
-
-
-
- ) -} - -export default AddNewPageCms diff --git a/src/views/CMS/EditCms.js b/src/views/CMS/EditCms.js deleted file mode 100644 index 6d8d412..0000000 --- a/src/views/CMS/EditCms.js +++ /dev/null @@ -1,247 +0,0 @@ - -import React, { useEffect, useState } from 'react' -import { CKEditor } from '@ckeditor/ckeditor5-react' - -import { Link, useHistory, useParams } from 'react-router-dom' -import { isAutheticated } from "../../auth"; -import swal from 'sweetalert' -import axios from 'axios' - -import ClassicEditor from '@ckeditor/ckeditor5-build-classic' -import { useCallback } from 'react'; - - -const EditCms = () => { - const { id } = useParams() - const token = isAutheticated() - const history = useHistory() - const [image, setImage] = useState() - const [imagesPreview, setImagesPreview] = useState(); - const [data, setData] = useState({ - title: '', - page_data: '', - }) - const [loading, setLoading] = useState(false) - - const handleChange = (e) => { - - setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) - } - const handleImage = (e) => { - const files = e.target.files[0]; - setImage(files); - // only for file preview------------------------------------ - const Reader = new FileReader(); - Reader.readAsDataURL(files); - - Reader.onload = () => { - if (Reader.readyState === 2) { - setImagesPreview(Reader.result); - } - }; - // ----------------------------------------------------------------------------- - }; - const getCms = useCallback(async () => { - - - let res = await axios.get( - `/api/restriction/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - if (res.data.CmpRestriction) { - setData((prev) => ({ ...res.data.CmpRestriction })) - if (res.data.CmpRestriction.image) { - setImagesPreview(res.data.CmpRestriction.image.url) - } - - } - }, [token] - ) - - useEffect(() => { - getCms(); - }, []); - - const handleSubmit = async () => { - if (data.title.trim() === '' || data.page_data.trim() === '') { - swal({ - title: 'Warning', - text: 'Fill all mandatory fields', - icon: 'error', - button: 'Close', - dangerMode: true, - }) - return - } - setLoading(true) - const formData = new FormData() - formData.append('title', data.title) - formData.append('page_data', data.page_data) - formData.append('image', image) - try { - const res = await axios - .put(`/api/restriction/cms/update/${id}`, formData, { - headers: { - 'Access-Control-Allow-Origin': '*', - Authorization: `Bearer ${token}`, - 'Content-Type': 'multipart/formdata', - }, - }) - if (res.data.success === true) { - - setLoading(false) - swal({ - title: 'Edited', - text: 'Page edited successfully!', - icon: 'success', - button: 'Return', - }) - history.goBack() - - } - } catch (error) { - const message = error?.response?.data?.message || 'Something went wrong!' - setLoading(false) - swal({ - title: 'Warning', - text: message, - icon: 'error', - button: 'Retry', - dangerMode: true, - }) - } - } - - - return ( -
-
-
-
-
- Edit Page -
- -
- - - - -
-
-
-
-
-
-
-
-
- - Title - - - { - handleChange(e) - }} - /> -
-
-
Page data *
-
- - - -
- - {/*
-
- { - editor.editing.view.change((writer) => { - writer.setStyle('height', '200px', editor.editing.view.document.getRoot()) - }) - }} - data={data.page_data} - // config={{ - // extraPlugins: [MyCustomUploadAdapterPlugin], - // }} - - onChange={(event, editor) => { - let e = { target: { value: editor.getData(), id: 'page_data' } } - handleChange(e) - }} - /> -
-
*/} - -
-
image *
-
- - {/*

Upload videos, images and pdf only

*/} -
-
- - {imagesPreview && Product Preview} - -
-
-
-
-
-
- ) -} - -export default EditCms diff --git a/src/views/CMS/Pagination.js b/src/views/CMS/Pagination.js deleted file mode 100644 index b648950..0000000 --- a/src/views/CMS/Pagination.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { Link } from "react-router-dom"; -const Pagination = ({ postsPerPage, totalPosts, paginate }) => { - const pageNumbers = []; - - for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { - pageNumbers.push(i); - } - - return ( - - ); -}; - -export default Pagination; \ No newline at end of file diff --git a/src/views/CMS/ViewCms.js b/src/views/CMS/ViewCms.js deleted file mode 100644 index 83aa007..0000000 --- a/src/views/CMS/ViewCms.js +++ /dev/null @@ -1,135 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -function ViewOffer() { - const [cmsRes, setCmsRes] = useState([]) - const { id } = useParams(); - // console.log(id) - const token = isAutheticated(); - - const getOffer = useCallback(async () => { - let res = await axios.get( - `/api/restriction/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - //console.log(res.data) - setCmsRes(res.data.CmpRestriction) - - - }, [token]); - - useEffect(() => { - getOffer(); - }, [getOffer]); - - - - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-CMS

- {/* */} - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} - -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - {/* */} - - - - - - - {/* - - */} - - - {cmsRes.image ? : - <>

- } - - - - - - - - - - - - -
Id
Title{cmsRes?.title}
page Content{`${cmsRes?.page_data}`}
Privacy Policy{cmsRes?.Privacy_Policy}
image -
Added On - {new Date(`${cmsRes?.createdAt}`).toDateString()} , {`${formatAMPM(cmsRes?.createdAt)}`} -
Updated At - {new Date(`${cmsRes?.updatedAt}`).toDateString()} , {`${formatAMPM(cmsRes?.updatedAt)}`} -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default ViewOffer; - diff --git a/src/views/CMS/cms.js b/src/views/CMS/cms.js deleted file mode 100644 index cfefa06..0000000 --- a/src/views/CMS/cms.js +++ /dev/null @@ -1,178 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import Pagination from "./Pagination"; - -function cms() { - const [cmsRes, setCmsRes] = useState([]) - - const [currentPage, setCurrentPage] = useState(1); - const [postsPerPage] = useState(15); - const token = isAutheticated(); - - const getRestriction = useCallback(async () => { - let res = await axios.get( - `/api/restriction/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - - setCmsRes(res.data.CmpRestriction) - - - }, [token]); - - useEffect(() => { - getRestriction(); - }, [getRestriction]); - - - const indexOfLastPost = currentPage * postsPerPage; - const indexOfFirstPost = indexOfLastPost - postsPerPage; - const currentPosts = cmsRes.slice(indexOfFirstPost, indexOfLastPost); - - // Change page - const paginate = pageNumber => setCurrentPage(pageNumber); - const handleDelete = async (id) => { - let status = window.confirm("Do you want to delete"); - if (!status) return; - - let res = await axios.delete(`/api/restriction/cms/delete/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res) - if (res.data.success == true) { - swal("success!", "Cms Deleted Successfully!", "success"); - window.location.reload(); - // if (res.status === 200) window.location.reload(); - } - else { - swal("error!", "failled!", "error"); - - } - }; - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - return ( -
-
-
- {/* */} -
-
-
-

CMP-CMS

- {/* */} - -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - {/* */} - - {/* */} - - - - - - {currentPosts && currentPosts.map((item, index) => - - - - - {/* */} - {/* {item.image ? : - <>

- } */} - - - - - - )} - - -
TitlePage DataimageAdded OnAction
{item.title}{item?.page_data} - - {/* {item?.addedOn} */} - {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} - - - - - - - - - - - -
-
- - -
-
-
-
-
- {/* */} -
- -
- ); -} - -export default cms; diff --git a/src/views/Category/AddCategory.js b/src/views/Category/AddCategory.js deleted file mode 100644 index 200a4bb..0000000 --- a/src/views/Category/AddCategory.js +++ /dev/null @@ -1,171 +0,0 @@ -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -//import Footer from "../../Footer"; -import { Link } from "react-router-dom"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilLockLocked, cilUser } from '@coreui/icons' -const AddProduct = () => { - const token = isAutheticated(); - let history = useHistory(); - const [image, setImage] = useState(""); - const [ctegoryBannerImage, setCtegoryBannerImage] = useState(""); - const [name, setName] = useState(""); - const [loading, setLoading] = useState(false); - - - const handleSubmit = async () => { - if (!(name && image && ctegoryBannerImage)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("name", name); - - - myForm.set("image", image); - myForm.set("category_banner", ctegoryBannerImage); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.post( - `/api/category/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - //console.log(res.data.data.name) - if (res.data) { - swal("success!", "Category Added Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', "something went wrong", 'error') - - setLoading(false); - } - - - - }; - const handleImage = (e) => { - const files = e.target.files[0]; - // console.log(files) - setImage(files); - - }; - // - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Add Category

-
-
- - - - - setName(e.target.value)} - value={name} - placeholder="Name" /> - -
category image *
- - - - {/* */} - - - -
category Banner image *
- - - - - setCtegoryBannerImage(e.target.files[0])} - - - /> - -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default AddProduct \ No newline at end of file diff --git a/src/views/Category/Category.js b/src/views/Category/Category.js deleted file mode 100644 index ff89ee4..0000000 --- a/src/views/Category/Category.js +++ /dev/null @@ -1,188 +0,0 @@ -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; - -function Products() { - const [category, setCategory] = useState([]) - const [state, setState] = useState({ - products: [], - page: 1, - limit: 10, - totalProducts: 0, - pages: 1, - }); - - window.scrollTo({ behavior: "smooth", top: "0px" }); - - const { products, page, limit, totalProducts, pages } = state; - - const changeState = (newState) => - setState((prevState) => ({ ...prevState, ...newState })); - - const token = isAutheticated(); - - const getProducts = useCallback(async () => { - let res = await axios.get( - `/api/category/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data.category) - setCategory(res.data.category) - // console.log(category[0].addedOn) - changeState({ - ...res.data, - pages: Math.ceil(res.data.totalProducts / limit), - }); - }, [limit, page, token]); - - useEffect(() => { - getProducts(); - }, [getProducts]); - - // const getTotalPages = useMemo(() => { - // const length = pages > 1 ? pages : totalProducts ? 1 : 0; - // return Array.from({ length }, (_, i) => i + 1); - // }, [pages, totalProducts]); - - // console.log(getTotalPages); - - const handleDelete = async (id) => { - let status = window.confirm("Do you want to delete"); - if (!status) return; - - let res = await axios.delete(`/api/category/delete/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res) - if (res.data.success == true) { - swal("success!", "Category Deleted Successfully!", "success"); - window.location.reload(); - // if (res.status === 200) window.location.reload(); - } - else { - swal("error!", "failled!", "error"); - - } - }; - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

Categories

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - {category && category.map((item, index) => - - - - - - - - - - )} - -
NameCategory ImageCategory BannerAdded OnActions
{item?.name} - - - - {item.category_banner && } - - {/* {item?.addedOn} */} - {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} - - - - - - - -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default Products; diff --git a/src/views/Category/EditCategory.js b/src/views/Category/EditCategory.js deleted file mode 100644 index aa6c8c5..0000000 --- a/src/views/Category/EditCategory.js +++ /dev/null @@ -1,231 +0,0 @@ -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -//import Footer from "../../Footer"; -import { Link, useParams } from "react-router-dom"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilLockLocked, cilUser } from '@coreui/icons' -const AddProduct = () => { - const token = isAutheticated(); - let history = useHistory(); - const { id } = useParams(); - // console.log(id) - const [image, setImage] = useState(""); - const [name, setName] = useState(""); - const [imagesPreview, setImagesPreview] = useState(); - const [ctegoryBannerImage, setCtegoryBannerImage] = useState(""); - const [ctegoryBannerImagePreview, setCtegoryBannerImagePreview] = useState(""); - - const [loading, setLoading] = useState(false); - useEffect(async () => { - const res = await axios.get(`/api/category/getOne/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - - // setImage(res.data.category.image.url) - setImagesPreview(res.data.category.image.url) - setCtegoryBannerImagePreview(res.data.category.category_banner.url) - setName(res.data.category.name) - }, [id]); - - - const handleSubmit = async () => { - if (!(name)) { - return swal('Error!', 'Name fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("name", name); - - - myForm.set("image", image); - myForm.set("category_banner", ctegoryBannerImage); - - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.put( - `/api/category/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - //console.log(res.data.data.name) - if (res.data) { - swal("success!", "Category Edited Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', "something went wrong", 'error') - - setLoading(false); - } - } - const handleImage = (e) => { - const files = e.target.files[0]; - - // console.log(files) - setImage(files); - // only for file preview------------------------------------ - const Reader = new FileReader(); - Reader.readAsDataURL(files); - - Reader.onload = () => { - if (Reader.readyState === 2) { - setImagesPreview(Reader.result); - } - }; - - - // ----------------------------------------------------------------------------- - }; - const handleBannerImage = (e) => { - const files = e.target.files[0]; - - // console.log(files) - setCtegoryBannerImage(files); - // only for file preview------------------------------------ - const Reader = new FileReader(); - Reader.readAsDataURL(files); - - Reader.onload = () => { - if (Reader.readyState === 2) { - setCtegoryBannerImagePreview(Reader.result); - } - }; - - - // ----------------------------------------------------------------------------- - }; - - - // - const onCancel = () => { - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Edit Category

-
-
- - - - - setName(e.target.value)} - value={name} - placeholder="Name" /> - - -
category image *
- - - - {/* */} - - - -
- - {imagesPreview && Product Preview} - -
-
category Banner image *
- - - - - - -
- - {ctegoryBannerImagePreview && Product Preview} - -
- - - -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default AddProduct \ No newline at end of file diff --git a/src/views/Directory/Add_Business.js b/src/views/Directory/Add_Business.js deleted file mode 100644 index dbae303..0000000 --- a/src/views/Directory/Add_Business.js +++ /dev/null @@ -1,549 +0,0 @@ -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { Country, State, City } from "country-state-city"; -import swal from 'sweetalert'; - - -import { Link, useParams } from "react-router-dom"; -import { useHistory } from "react-router-dom"; - -const Add_Business = () => { - const [categoryName, setCategoryName] = useState([]); - const [image, setImage] = useState(); - - - const token = isAutheticated(); - - let history = useHistory(); - const [state, setState] = useState({ - name: "", - phone: "", - email: "", - Bname: "", - Sname: "", - country: "", - city: "", - loading: false, - description: "", - category: "", - status: "", - Glocation: "", - LinkedinUrl: "", - FacebookUrl: "", - InstagramUrl: "" - - }); - - - const { description, loading } = state; - const changeState = (newState) => - setState((prevState) => ({ ...prevState, ...newState })); - - - const handleChange = (e) => { - changeState({ ...state, [e.target.name]: e.target.value }) - - }; - - - - const fetchCategory = useCallback(async () => { - const res = await axios.get(`/api/category/getAll`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - - // console.log(res.data.category); - setCategoryName(res.data.category) - if (res.status === 200) changeState({ ...res.data }); - }, [token]); - - useEffect(async () => { - - - - - fetchCategory(); - - }, [fetchCategory]); - - - const handleSubmit = async () => { - if (!(state.name && state.phone && state.email && state.Bname && state.Sname && state.country && state.city && state.description - && state.category && state.status && image)) { - return swal('Error!', 'All fields are required', 'error') - - } - - const myForm = new FormData(); - myForm.set('name', state.name) - myForm.set('phone', state.phone) - myForm.set('email', state.email) - myForm.set('Bname', state.Bname) - myForm.set('Sname', state.Sname) - myForm.set('country', state.country) - myForm.set('city', state.city) - myForm.set('description', state.description) - - myForm.set('category', state.category) - - myForm.set('status', state.status) - - myForm.set('Glocation', state.Glocation) - myForm.set('LinkedinUrl', state.Glocation) - myForm.set('FacebookUrl', state.FacebookUrl) - myForm.set('InstagramUrl', state.InstagramUrl) - myForm.set("image", image); - - - changeState({ loading: true }); - try { - let res = await axios.post( - `/api/directory/create/`, - - myForm - , - { - headers: { - "content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - //if (res.status === 200) window.location.reload(); - // console.log(res.status == 201) - if (res.status == 201) { - changeState({ loading: false }); - swal("Add Business successfully!"); - history.goBack() - } - } catch (error) { - swal('Error!', error, 'error') - - changeState({ loading: false }); - } - - }; - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - - - - - // console.log(state) - return ( - <> -
-
-
-
-
-
- Add Bisuness - - -
-
-
- {/* */} - - {/* */} -
- {/* */} -
-
-
-
-
- -
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- -
-
-
- - -
- -
- - - - -
-
-
-
- -
-
-
- -
- -
-
-
-
- -
-
-
-
-
- {/* */} - - {/* */} -
-
-
-
-
-
- -
-
-
- - setImage(e.target.files[0])} - placeholder="Bisuness Image" - /> -
-
-
- -
-
-
- - - - -
-
-
-
-
-
- - -
-
-
- - - - - - -
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
- {/* */} -
-
- -
-
- {/* */} -
- {/* */} - {/*
*/} -
- - ) -} - -export default Add_Business - - -//const myForm = new FormData(); - // myForm.set('name', state.name) - // myForm.set('phone', state.phone) - // myForm.set('email', state.email) - // myForm.set('Bname', state.Bname) - // myForm.set('Sname', state.Sname) - // myForm.set('country', state.country) - // myForm.set('city', state.city) - // myForm.set('description', state.description) - - // myForm.set('category', state.category) - - // myForm.set('status', state.status) - - // myForm.set('Glocation', state.Glocation) - // myForm.set('LinkedinUrl', state.Glocation) - // myForm.set('FacebookUrl', state.FacebookUrl) - // myForm.set('InstagramUrl', state.InstagramUrl) - // myForm.set("image", image); - // changeState({ loading: true }); diff --git a/src/views/Directory/Bisuness.js b/src/views/Directory/Bisuness.js deleted file mode 100644 index c63433a..0000000 --- a/src/views/Directory/Bisuness.js +++ /dev/null @@ -1,267 +0,0 @@ -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import Pagination from "./Pagination"; - -const Bisuness = () => { - const [bisuness, setBisuness] = useState([]) - const [currentPage, setCurrentPage] = useState(1); - const [postsPerPage] = useState(20); - - - const token = isAutheticated(); - - const getProducts = useCallback(async () => { - let res = await axios.get( - `/api/directory/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data.directory) - setBisuness(res.data.directory) - // changeState({ - // ...res.data, - // pages: Math.ceil(res.data.totalProducts / limit), - // }); - }, [token]); - - useEffect(() => { - getProducts(); - }, [getProducts]); - - // Get current posts - //pagination - const indexOfLastPost = currentPage * postsPerPage; - const indexOfFirstPost = indexOfLastPost - postsPerPage; - const currentPosts = bisuness.slice(indexOfFirstPost, indexOfLastPost); - - // Change page - const paginate = pageNumber => setCurrentPage(pageNumber); - - const handleDelete = async (id) => { - let status = window.confirm("Do you want to delete"); - if (!status) return; - - let res = await axios.delete(`/api/directory/delete/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res) - - if (res.data.success == true) { - swal("success!", "Directory Deleted Successfully!", "success"); - window.location.reload(); - - } - }; - - const toggleStatus = async (id) => { - let status = window.confirm("Do you want to change status"); - if (!status) { - return; - } - let res = await axios.get(`/api/directory/admin/setStatus/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res) - if (res.status === 200) window.location.reload(); - }; - - return ( - <> -
-
-
- {/* */} -
-
-
-

Bisuness-Directory

- - -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - {currentPosts.map((item, index) => - - - - - - - - - - )} - -
NameCategoryCityStatusActions
{item?.name} {item?.category}{item?.city} - - {item.status === "true" ? "Live" : "Suspended"} - - - - - - - - - - - - - -
-
- - {/*
-
-
- Showing{" "} - {!totalProducts - ? totalProducts - : page * limit - (limit - 1)}{" "} - to{" "} - {totalProducts > limit - ? limit * page > totalProducts - ? totalProducts - : limit * page - : totalProducts}{" "} - of {totalProducts} entries -
-
- -
-
-
    -
  • - -
  • - - {getTotalPages.map((pageNo) => { - return ( -
  • - -
  • - ); - })} - -
  • - -
  • -
-
-
-
*/} - - {/* */} -
-
-
-
-
- {/* */} -
-
- - - ) -} - -export default Bisuness \ No newline at end of file diff --git a/src/views/Directory/EditBisuness.js b/src/views/Directory/EditBisuness.js deleted file mode 100644 index 447f9bc..0000000 --- a/src/views/Directory/EditBisuness.js +++ /dev/null @@ -1,565 +0,0 @@ -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { Country, State, City } from "country-state-city"; -import swal from 'sweetalert'; -import { Link, useParams } from "react-router-dom"; -import { useHistory } from "react-router-dom"; - -const EditBisuness = () => { - const [categoryName, setCategoryName] = useState([]); - const [image, setImage] = useState(); - const token = isAutheticated(); - - let history = useHistory(); - const [state, setState] = useState({ - name: "", - phone: "", - email: "", - Building_Name: "", - Street_Name: "", - country: "", - city: "", - loading: false, - description: "", - category: "", - status: "", - Glocation: "", - LinkedinUrl: "", - FacebookUrl: "", - InstagramUrl: "" - }); - - const { id } = useParams(); - // console.log(id) - - const { description, loading } = state; - - - const changeState = (newState) => - setState((prevState) => ({ ...prevState, ...newState })); - - - - const handleChange = (e) => { - changeState({ ...state, [e.target.name]: e.target.value }) - - }; - - - //category - const fetchCategory = useCallback(async () => { - const res = await axios.get(`/api/category/getAll`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - - // console.log(res.data.category); - setCategoryName(res.data.category) - if (res.status === 200) changeState({ ...res.data }); - }, [token]); - - useEffect(async () => { - - fetchCategory(); - - }, [fetchCategory]); - - - - - - - const fetchDirectory = useCallback(async () => { - const res = await axios.get(`/api/directory/getOne/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - - - setState(res.data.directory) - changeState({ loading: false }); - if (res.status === 200) changeState({ ...res.data }); - }, [token]); - - useEffect(() => { - fetchDirectory(); - }, [fetchDirectory]); - - - - - const handleSubmit = async () => { - if (!(state.name && state.phone && state.email && state.Building_Name && state.Street_Name && state.country && state.city && state.description - && state.category && state.status)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - myForm.set('name', state.name) - myForm.set('phone', state.phone) - myForm.set('email', state.email) - myForm.set('Building_Name', state.Building_Name) - myForm.set('Street_Name', state.Street_Name) - myForm.set('country', state.country) - myForm.set('city', state.city) - myForm.set('description', state.description) - - myForm.set('category', state.category) - - myForm.set('status', state.status) - - myForm.set('Glocation', state.Glocation) - myForm.set('LinkedinUrl', state.Glocation) - myForm.set('FacebookUrl', state.FacebookUrl) - myForm.set('InstagramUrl', state.InstagramUrl) - myForm.set("image", image); - - changeState({ loading: true }); - try { - let res = await axios.put( - `/api/directory/update/${id}`, - myForm, - { - headers: { - "content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - - if (res.status == 200) { - changeState({ loading: false }); - swal("Edit Business successfully!"); - history.goBack() - } - } catch (error) { - swal('Error!', error, 'error') - - changeState({ loading: false }); - } - - }; - const onCancel = () => { - history.goBack() - - }; - - - - - // console.log(image) - return ( - <> -
-
-
-
-
-
- Edit Bisuness - - -
-
-
- {/* */} - - {/* */} -
- {/* */} -
-
-
-
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- -
-
-
- - -
- -
- - - - -
-
-
-
- -
-
-
- -
- -
-
-
-
-
-
-
-
-
-
- {/* */} - - {/* */} -
-
-
-
-
-
-
-
-
- - setImage(e.target.files[0])} - placeholder="Bisuness Image" - /> -
-
-
- -
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
- {/* */} -
-
- {/* */} - {/*
-
-
-
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
*/} - {/* */} -
-
- {/* */} -
- {/* */} - {/*
*/} -
- - ) -} - -export default EditBisuness \ No newline at end of file diff --git a/src/views/Directory/Pagination.js b/src/views/Directory/Pagination.js deleted file mode 100644 index e2ce0f8..0000000 --- a/src/views/Directory/Pagination.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { Link } from "react-router-dom"; -const Pagination = ({ postsPerPage, totalPosts, paginate }) => { - const pageNumbers = []; - - for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { - pageNumbers.push(i); - } - - return ( - - ); -}; - -export default Pagination; \ No newline at end of file diff --git a/src/views/Directory/View_Bisuness.js b/src/views/Directory/View_Bisuness.js deleted file mode 100644 index d8d21d4..0000000 --- a/src/views/Directory/View_Bisuness.js +++ /dev/null @@ -1,119 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import { useParams } from "react-router-dom"; -const View_Bisuness = () => { - const { id } = useParams(); - // console.log(id) - const [bisuness, setBisuness] = useState([]) - - - // const { products, page, limit, totalProducts, pages } = state; - - - const token = isAutheticated(); - - const view_business = useCallback(async () => { - let res = await axios.get( - `/api/directory/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data.directory) - setBisuness(res.data.directory) - // changeState({ - // ...res.data, - // pages: Math.ceil(res.data.totalProducts / limit), - // }); - // limit, page, - }, [token]); - - useEffect(() => { - view_business(); - }, [view_business]); - - - return ( - <> -
-
-
- {/* */} -
-
-
-

View Bisuness

- {/* */} - -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name{bisuness?.name}
Bisuness image - -
Category{bisuness?.category}
email {bisuness?.email}
phone {bisuness?.phone}
Building_Name{bisuness?.Building_Name}
Street_Name{bisuness?.Street_Name}
city {bisuness?.city}
description {bisuness?.description}
Status - - {bisuness?.status ? "Live" : "Suspended"} - -
Google Location{bisuness?.Glocation}
LinkedinUrl {bisuness?.LinkedinUrl}
FacebookUrl{bisuness?.FacebookUrl}
intagramUrl {bisuness?.InstagramUrl}
-
- - {/* */} -
-
-
-
-
- {/* */} -
-
- - ) -} - -export default View_Bisuness \ No newline at end of file diff --git a/src/views/Events/AddEvent.js b/src/views/Events/AddEvent.js deleted file mode 100644 index 0366dce..0000000 --- a/src/views/Events/AddEvent.js +++ /dev/null @@ -1,216 +0,0 @@ - -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription, cilCalendar, cilWatch, cilAlarm } from '@coreui/icons' -const AddEvent = () => { - const token = isAutheticated(); - let history = useHistory(); - const [image, setImage] = useState(""); - const [title, setTitle] = useState(""); - const [description, setDescription] = useState(""); - const [location, setLocation] = useState(""); - const [date, setDate] = useState(new Date()); - const [time, setTime] = useState(''); - - const [loading, setLoading] = useState(false); - const handleSubmit = async () => { - if (!(title && description && image && location && time && date)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("title", title); - myForm.set("description", description); - myForm.set("location", location); - myForm.set("date", date) - myForm.set("time", time) - myForm.set("image", image); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.post( - `/api/event/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Event Added Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', 'Something went Wrong', 'error') - - setLoading(false); - } - - - - }; - const handleImage = (e) => { - const files = e.target.files[0]; - // console.log(files) - setImage(files); - - }; - // - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Add Event

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title (maximum 50 characters)" /> - - - {title ? <> - {50 - title.length} characters left - : <> - - } - - - - - - setDescription(e.target.value)} - value={description} - placeholder="Description (maximum 250 characters)" /> - - {description ? <> - {250 - description.length} characters left - : <> - - } - - - {/* Date* */} - - - {/* */} - - setDate(e.target.value)} - value={date} - placeholder="Event Date" /> - - - - - {/* Time* */} - - - setTime(e.target.value)} - value={time} - placeholder="Event Time" /> - - - - - - setLocation(e.target.value)} - value={location} - placeholder="Location" /> - - - - - {/* */} - - - -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default AddEvent \ No newline at end of file diff --git a/src/views/Events/AllRegisterUser.js b/src/views/Events/AllRegisterUser.js deleted file mode 100644 index 38bab08..0000000 --- a/src/views/Events/AllRegisterUser.js +++ /dev/null @@ -1,115 +0,0 @@ - - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -const AllRegisterUser = () => { - const { id } = useParams(); - const token = isAutheticated(); - const [registerUser, setRegisterUser] = useState([]) - const getRegisterUser = useCallback(async () => { - let res = await axios.get( - `/api/event/admin/registerUser/getAll/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - setRegisterUser(res.data.user) - - - }, [token]); - - useEffect(() => { - getRegisterUser(); - }, [getRegisterUser]); - // console.log(registerUser) - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( - <>
-
-
- {/* */} -
-
-
-

CMP-Event Register Users

- -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - {registerUser && registerUser.map((item, index) => - - - - - - - - - - - )} - -
Name Profile ImageEmailPhoneregister At
{item.userId?.name} - {item.userId?.email}{item.userId?.phone} - {/* {item?.addedOn} */} - {new Date(`${item.userId?.createdAt}`).toDateString()} , {`${formatAMPM(item.userId?.createdAt)}`} - -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default AllRegisterUser; diff --git a/src/views/Events/EditEvent.js b/src/views/Events/EditEvent.js deleted file mode 100644 index 4b1a62b..0000000 --- a/src/views/Events/EditEvent.js +++ /dev/null @@ -1,235 +0,0 @@ - -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import { Link, useParams } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription, cilCalendar, cilAlarm } from '@coreui/icons' -const EditEvent = () => { - const { id } = useParams(); - // console.log(id) - const token = isAutheticated(); - let history = useHistory(); - const [image, setImage] = useState(""); - const [title, setTitle] = useState(""); - const [description, setDescription] = useState(""); - const [location, setLocation] = useState(""); - const [date, setDate] = useState(new Date()); - const [time, setTime] = useState(''); - const [loading, setLoading] = useState(false); - - //fetch one image - useEffect(async () => { - const res = await axios.get(`/api/event/getOne/${id}`, { - // headers: { - // Authorization: `Bearer ${token}`, - // }, - }); - // console.log(res.data) - setTitle(res.data.Event.title) - setDescription(res.data.Event.description) - setDate(res.data.Event.date) - setTime(res.data.Event.time) - setLocation(res.data.Event.location) - - }, [id]); - - const handleSubmit = async () => { - if (!(title && description && image && location && time && date)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("title", title); - myForm.set("description", description); - myForm.set("date", date) - myForm.set("time", time) - myForm.set("location", location); - myForm.set("image", image); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.put( - `/api/event/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Event Edit Successfully!", "success"); - setLoading(false); - history.goBack(); - } - - } catch (error) { - swal('Error!', 'Something went Wrong', 'error') - - setLoading(false); - } - - - - }; - const handleImage = (e) => { - const files = e.target.files[0]; - // console.log(files) - setImage(files); - - }; - // - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Edit Event

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title (maximum 50 characters)" /> - - {title ? <> - {50 - title.length} characters left - : <> - - } - - - - - setDescription(e.target.value)} - value={description} - placeholder="Description (maximum 250 characters)" /> - - {description ? <> - {250 - description.length} characters left - : <> - - } - - - {/* Date* */} - - - {/* */} - - setDate(e.target.value)} - value={date} - placeholder="Event Date" /> - - - - - {/* Time* */} - - - setTime(e.target.value)} - value={time} - placeholder=" Event time" /> - - - - - - setLocation(e.target.value)} - value={location} - placeholder="Location" /> - - - - - {/* */} - - - -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default EditEvent \ No newline at end of file diff --git a/src/views/Events/Event.js b/src/views/Events/Event.js deleted file mode 100644 index ebc413f..0000000 --- a/src/views/Events/Event.js +++ /dev/null @@ -1,130 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -import RegisterUser from "./RegisterUser"; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; - -function Event() { - const [event, setEvent] = useState([]) - - const token = isAutheticated(); - - const getEvent = useCallback(async () => { - let res = await axios.get( - `/api/event/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - setEvent(res.data.Event) - - - }, [token]); - - useEffect(() => { - getEvent(); - }, [getEvent]); - - - const handleDelete = async (id) => { - let status = window.confirm("Do you want to delete"); - if (!status) return; - - let res = await axios.delete(`/api/event/delete/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res) - if (res.data.success == true) { - swal("success!", "Event Deleted Successfully!", "success"); - window.location.reload(); - } - }; - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-Event

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - - - {event && event.map((item, index) => - - )} - -
TitleImageEvent DateEvent TimeLocationAdded OnAttended ByAction
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default Event; diff --git a/src/views/Events/RegisterUser.js b/src/views/Events/RegisterUser.js deleted file mode 100644 index a0ed18b..0000000 --- a/src/views/Events/RegisterUser.js +++ /dev/null @@ -1,92 +0,0 @@ -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; - -const RegisterUser = ({ item, handleDelete, formatAMPM }) => { - const [totalRegisterUser, setTotalRegisterUser] = useState([]) - const token = isAutheticated(); - const getRegisterUser = useCallback(async () => { - let res = await axios.get( - `/api/event/admin/registerUser/getAll/${item._id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - setTotalRegisterUser(res.data.totalUserRegister) - - - }, [token]); - - useEffect(() => { - getRegisterUser(); - }, [getRegisterUser, item]); - return ( - <> - - {item?.title} - - - {new Date(`${item?.date}`).toDateString()} - {item?.time} - {item?.location} - - {/* {item?.addedOn} */} - {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} - - - - - - - - - - - - - - - - - - - - - - - - - - - ) -} - -export default RegisterUser \ No newline at end of file diff --git a/src/views/Events/ViewEvent.js b/src/views/Events/ViewEvent.js deleted file mode 100644 index b8efbc7..0000000 --- a/src/views/Events/ViewEvent.js +++ /dev/null @@ -1,123 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -function ViewEvent() { - const [event, setEvent] = useState([]) - const { id } = useParams(); - const token = isAutheticated(); - - const getEvent = useCallback(async () => { - let res = await axios.get( - `/api/event/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data.Event) - setEvent(res.data.Event) - - - }, [token]); - - useEffect(() => { - getEvent(); - }, [getEvent]); - - - - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-Event

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - -
Id {event?._id}
Title {event?.title}
Image - -
Description{event?.description}
Event Date{new Date(`${event?.date}`).toDateString()}
Event Time{event?.time}
Location{event?.location}
Added On - {new Date(`${event?.addedOn}`).toDateString()} , {`${formatAMPM(event?.addedOn)}`} -
Updated At - {new Date(`${event?.updatedAt}`).toDateString()} , {`${formatAMPM(event?.updatedAt)}`} -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default ViewEvent; diff --git a/src/views/FAQs/AddFaqs.js b/src/views/FAQs/AddFaqs.js deleted file mode 100644 index a0ad586..0000000 --- a/src/views/FAQs/AddFaqs.js +++ /dev/null @@ -1,174 +0,0 @@ -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser, cilNoteAdd } from '@coreui/icons' -const AddFaqs = () => { - const token = isAutheticated(); - let history = useHistory(); - // const [image, setImage] = useState(""); - const [topic, setTopic] = useState(""); - const [description, setDescription] = useState(""); - const [loading, setLoading] = useState(false); - - - const handleSubmit = async () => { - if (!(topic && description)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("topic", topic); - myForm.set("description", description); - // myForm.set("image", image); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.post( - `/api/faqs/create/`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - console.log(res.data) - if (res.data) { - swal("success!", "FAQs Added Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', error, 'error') - - setLoading(false); - } - - - - }; - // const handleImage = (e) => { - // const files = e.target.files[0]; - // // console.log(files) - // setImage(files); - - // }; - // - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Add FAQs

-
-
- - - - - setTopic(e.target.value)} - value={topic} - placeholder="Topic ( maximum 50 character )" /> - - {topic ? <> - {50 - topic.length} characters left - : <> - - } - - - - - - - {description ? <> - {500 - description.length} characters left - : <> - - } - {/* - - - - - */} -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default AddFaqs \ No newline at end of file diff --git a/src/views/FAQs/EditFaqs.js b/src/views/FAQs/EditFaqs.js deleted file mode 100644 index b6355a4..0000000 --- a/src/views/FAQs/EditFaqs.js +++ /dev/null @@ -1,185 +0,0 @@ -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory, useParams } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser, cilNoteAdd } from '@coreui/icons' -const EditFaqs = () => { - const { id } = useParams() - const token = isAutheticated(); - let history = useHistory(); - // const [image, setImage] = useState(""); - const [topic, setTopic] = useState(""); - const [description, setDescription] = useState(""); - const [loading, setLoading] = useState(false); - - //fetch one image - useEffect(async () => { - const res = await axios.get(`/api/faqs/getOne/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - setTopic(res.data.Faqs.topic) - setDescription(res.data.Faqs.description) - - }, [id]); - const handleSubmit = async () => { - if (!(topic && description)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("topic", topic); - myForm.set("description", description); - // myForm.set("image", image); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.put( - `/api/faqs/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - console.log(res.data) - if (res.data) { - swal("success!", "FAQs Edit Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', error, 'error') - - setLoading(false); - } - - - - }; - // const handleImage = (e) => { - // const files = e.target.files[0]; - // // console.log(files) - // setImage(files); - - // }; - // - const onCancel = () => { - // window.location = "/comproducts"; - - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Edit FAQs

-
-
- - - - - setTopic(e.target.value)} - value={topic} - placeholder="Topic ( maximum 50 character )" /> - - {topic ? <> - {50 - topic.length} characters left - : <> - - } - - - - - - {description ? <> - {500 - description.length} characters left - : <> - - } - {/* - - - - - */} -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default EditFaqs \ No newline at end of file diff --git a/src/views/FAQs/Faqs.js b/src/views/FAQs/Faqs.js deleted file mode 100644 index 1e8907e..0000000 --- a/src/views/FAQs/Faqs.js +++ /dev/null @@ -1,164 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; - -function Faqs() { - const [faqs, setFeqs] = useState([]) - - const token = isAutheticated(); - - const getfaqs = useCallback(async () => { - let res = await axios.get( - `/api/faqs/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - setFeqs(res.data.Faqs) - - - }, [token]); - - useEffect(() => { - getfaqs(); - }, [getfaqs]); - - - const handleDelete = async (id) => { - let status = window.confirm("Do you want to delete"); - if (!status) return; - - let res = await axios.delete(`/api/faqs/delete/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res) - if (res.data.success == true) { - swal("success!", "FAQs Deleted Successfully!", "success"); - window.location.reload(); - } - }; - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-FAQs

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - {/* */} - - - - - - {faqs && faqs.map((item, index) => - - - {/* */} - - - - - - )} - -
TopicImageAdded OnAction
{item?.topic} - - {/* {item?.addedOn} */} - {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} - - - - - - - - - - - -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default Faqs; diff --git a/src/views/FAQs/ViewFaqs.js b/src/views/FAQs/ViewFaqs.js deleted file mode 100644 index 8e6c39f..0000000 --- a/src/views/FAQs/ViewFaqs.js +++ /dev/null @@ -1,132 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -function ViewFaqs() { - const [faqs, setFaqs] = useState([]) - const { id } = useParams(); - // console.log(id) - const token = isAutheticated(); - - const getFaqs = useCallback(async () => { - let res = await axios.get( - `/api/faqs/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data.news) - setFaqs(res.data.Faqs) - - - }, [token]); - - useEffect(() => { - getFaqs(); - }, [getFaqs]); - - - - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-FAQs

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - {/* - - */} - - - - - - - - - - - - - - - -
Id{faqs?._id}
TOPIC{faqs?.topic}
Image - -
Description{faqs?.description}
Added On - {new Date(`${faqs?.createdAt}`).toDateString()} , {`${formatAMPM(faqs?.createdAt)}`} -
Updated At - {new Date(`${faqs?.updatedAt}`).toDateString()} , {`${formatAMPM(faqs?.updatedAt)}`} -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default ViewFaqs; diff --git a/src/views/Feedback/Pagination.js b/src/views/Feedback/Pagination.js deleted file mode 100644 index 92a8292..0000000 --- a/src/views/Feedback/Pagination.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { Link } from "react-router-dom"; -const Pagination = ({ postsPerPage, totalPosts, paginate }) => { - const pageNumbers = []; - - for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { - pageNumbers.push(i); - } - - return ( - - ); -}; - -export default Pagination; \ No newline at end of file diff --git a/src/views/Feedback/ViewFeedback.js b/src/views/Feedback/ViewFeedback.js deleted file mode 100644 index 7cd90bd..0000000 --- a/src/views/Feedback/ViewFeedback.js +++ /dev/null @@ -1,123 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -function ViewFeedback() { - const [user, setUser] = useState([]) - - - const [feedback, setFeedback] = useState([]) - const { id } = useParams(); - // console.log(id) - const token = isAutheticated(); - - const getFeedback = useCallback(async () => { - let res = await axios.get( - `/api/feedback/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - setFeedback(res.data.feedback) - - let resp = await axios.get( - `/api/v1/admin/user/${feedback.user}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - setUser(resp.data.user) - - - }, [token, feedback.user]); - - useEffect(() => { - getFeedback(); - }, [getFeedback]); - - - - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-Customer feedback

-
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - -
User_Id{user?._id}
Name{feedback?.name}
email{user?.email}
Image - -
Description{feedback?.description}
Pnone No.{user?.phone}
Feedback Given At - {new Date(`${feedback?.createdAt}`).toDateString()} , {`${formatAMPM(feedback?.createdAt)}`} -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default ViewFeedback; diff --git a/src/views/Feedback/feedback.js b/src/views/Feedback/feedback.js deleted file mode 100644 index f4f1244..0000000 --- a/src/views/Feedback/feedback.js +++ /dev/null @@ -1,146 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import Pagination from "./Pagination"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; - -function feedback() { - const [feedback, setFeedback] = useState([]) - - - const [currentPage, setCurrentPage] = useState(1); - const [postsPerPage] = useState(20); - const token = isAutheticated(); - - const getRestriction = useCallback(async () => { - let res = await axios.get( - `/api/feedback/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data.feedback) - setFeedback(res.data.feedback) - - - }, [token]); - - useEffect(() => { - getRestriction(); - }, [getRestriction]); - - - // console.log(cmsRes) - - // Get current posts - //pagination - const indexOfLastPost = currentPage * postsPerPage; - const indexOfFirstPost = indexOfLastPost - postsPerPage; - const currentPosts = feedback.slice(indexOfFirstPost, indexOfLastPost); - - // Change page - const paginate = pageNumber => setCurrentPage(pageNumber); - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - - return ( - <> -
-
-
- {/* */} -
-
-
-

CMP-Feedback

- -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - {currentPosts && currentPosts.map((item, index) => - - - - - - - - - - - - )} - -
NameDescriptionGiven AtAction
{item?.name}{item?.description} - - {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} - - - - - - - - -
-
- {/* */} -
-
-
-
-
- {/* */} -
-
- - - ); -} - -export default feedback; diff --git a/src/views/News/AddNews.js b/src/views/News/AddNews.js deleted file mode 100644 index 2894100..0000000 --- a/src/views/News/AddNews.js +++ /dev/null @@ -1,161 +0,0 @@ -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser } from '@coreui/icons' -const AddNews = () => { - const token = isAutheticated(); - let history = useHistory(); - const [image, setImage] = useState(""); - const [title, setTitle] = useState(""); - const [description, setDescription] = useState(""); - const [loading, setLoading] = useState(false); - - - const handleSubmit = async () => { - if (!(title && description && image)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("title", title); - myForm.set("description", description); - myForm.set("image", image); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.post( - `/api/news/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - console.log(res.data) - if (res.data) { - swal("success!", "News Added Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', error, 'error') - - setLoading(false); - } - - - - }; - const handleImage = (e) => { - const files = e.target.files[0]; - // console.log(files) - setImage(files); - - }; - // - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Add News

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title" /> - - - - - - setDescription(e.target.value)} - value={description} - placeholder="Description" /> - - - - - {/* */} - - - -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default AddNews \ No newline at end of file diff --git a/src/views/News/EditNews.js b/src/views/News/EditNews.js deleted file mode 100644 index ab0d633..0000000 --- a/src/views/News/EditNews.js +++ /dev/null @@ -1,176 +0,0 @@ - -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import { Link, useParams } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser } from '@coreui/icons' -const EditNews = () => { - const { id } = useParams(); - // console.log(id) - const token = isAutheticated(); - let history = useHistory(); - const [image, setImage] = useState(""); - const [title, setTitle] = useState(""); - const [description, setDescription] = useState(""); - const [loading, setLoading] = useState(false); - - //fetch one image - useEffect(async () => { - const res = await axios.get(`/api/news/getOne/${id}`, { - // headers: { - // Authorization: `Bearer ${token}`, - // }, - }); - setTitle(res.data.news.title) - setDescription(res.data.news.description) - - }, [id]); - - const handleSubmit = async () => { - if (!(title && description && image)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("title", title); - myForm.set("description", description); - myForm.set("image", image); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.put( - `/api/news/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "News Edit Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', error, 'error') - - setLoading(false); - } - - - - }; - const handleImage = (e) => { - const files = e.target.files[0]; - // console.log(files) - setImage(files); - - }; - // - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Edit News

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title" /> - - - - - - setDescription(e.target.value)} - value={description} - placeholder="Description" /> - - - - - {/* */} - - - -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default EditNews \ No newline at end of file diff --git a/src/views/News/News.js b/src/views/News/News.js deleted file mode 100644 index beb11e1..0000000 --- a/src/views/News/News.js +++ /dev/null @@ -1,164 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; - -function News() { - const [news, setNews] = useState([]) - - const token = isAutheticated(); - - const getNews = useCallback(async () => { - let res = await axios.get( - `/api/news/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - - setNews(res.data.news) - - - }, [token]); - - useEffect(() => { - getNews(); - }, [getNews]); - - - const handleDelete = async (id) => { - let status = window.confirm("Do you want to delete"); - if (!status) return; - - let res = await axios.delete(`/api/news/delete/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - console.log(res) - if (res.data.success == true) { - swal("success!", "News Deleted Successfully!", "success"); - window.location.reload(); - } - }; - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-News

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - {news && news.map((item, index) => - - - - - - - - - )} - -
TitleImageAdded OnAction
{item?.title} - - {/* {item?.addedOn} */} - {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} - - - - - - - - - - - -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default News; diff --git a/src/views/News/ViewNews.js b/src/views/News/ViewNews.js deleted file mode 100644 index 98ce43a..0000000 --- a/src/views/News/ViewNews.js +++ /dev/null @@ -1,131 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -function ViewNews() { - const [news, setNews] = useState([]) - const { id } = useParams(); - const token = isAutheticated(); - - const getNews = useCallback(async () => { - let res = await axios.get( - `/api/news/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - - setNews(res.data.news) - - - }, [token]); - - useEffect(() => { - getNews(); - }, [getNews]); - - - - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-News

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Id{news?._id}
Title{news?.title}
Image - -
Description{news?.description}
Added On - {new Date(`${news?.addedOn}`).toDateString()} , {`${formatAMPM(news?.addedOn)}`} -
Updated At - {new Date(`${news?.updatedAt}`).toDateString()} , {`${formatAMPM(news?.updatedAt)}`} -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default ViewNews; diff --git a/src/views/Offers/AddOffer.js b/src/views/Offers/AddOffer.js deleted file mode 100644 index 81a81fc..0000000 --- a/src/views/Offers/AddOffer.js +++ /dev/null @@ -1,240 +0,0 @@ - -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription } from '@coreui/icons' -const AddOffer = () => { - const token = isAutheticated(); - let history = useHistory(); - //console.log(token) - const [image, setImage] = useState(""); - const [title, setTitle] = useState(""); - const [bisunessName, setBisunessName] = useState([]); - const [sendBisunessName, setSendBisunessName] = useState(''); - - const [description, setDescription] = useState(""); - const [location, setLocation] = useState(""); - - const [loading, setLoading] = useState(false); - - const changeState = (newState) => - setBisunessName((prevState) => ({ ...prevState, ...newState })); - - const handleChange = (e) => { - changeState({ ...bisunessName, [e.target.name]: e.target.value }) - - }; - const fetchBusuness = useCallback(async () => { - const res = await axios.get(`/api/directory/getAll`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - - // console.log(res.data.directory); - setBisunessName(res.data.directory) - - }, [token]); - - useEffect(async () => { - fetchBusuness(); - - }, [fetchBusuness]); - - - - const handleSubmit = async () => { - if (!(title && description && image && location && sendBisunessName)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("title", title); - myForm.set("description", description); - myForm.set("bisunessName", sendBisunessName); - myForm.set("location", location); - myForm.set("image", image); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.post( - `/api/offer/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Event Added Successfully!", "success"); - setLoading(false); - history.goBack(); - } - - } catch (error) { - swal('Error!', 'something Went Wrong', 'error') - - setLoading(false); - } - - - }; - const handleImage = (e) => { - const files = e.target.files[0]; - // console.log(files) - setImage(files); - - }; - // - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - // console.log(bisunessName) - return ( - <> -
- - - - - - -

Add New Offer

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title (maximum 50 characters)" /> - - - {title ? <> - {50 - title.length} characters left - : <> - - } - - - - - - setDescription(e.target.value)} - value={description} - placeholder="Description (maximum 250 characters)" /> - - {description ? <> - {250 - description.length} characters left - : <> - - } - - - - - - - - - - - - setLocation(e.target.value)} - value={location} - placeholder="Location" /> - - - - - {/* */} - - - -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default AddOffer \ No newline at end of file diff --git a/src/views/Offers/EditOffer.js b/src/views/Offers/EditOffer.js deleted file mode 100644 index 56a6d88..0000000 --- a/src/views/Offers/EditOffer.js +++ /dev/null @@ -1,247 +0,0 @@ - -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; -import { Link, useParams } from "react-router-dom"; -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription } from '@coreui/icons' -const EditOffer = () => { - const { id } = useParams(); - const token = isAutheticated(); - // console.log(token) - let history = useHistory(); - const [image, setImage] = useState(""); - const [title, setTitle] = useState(""); - const [bisunessName, setBisunessName] = useState([]); - const [sendBisunessName, setSendBisunessName] = useState(''); - - const [description, setDescription] = useState(""); - const [location, setLocation] = useState(""); - - const [loading, setLoading] = useState(false); - - - //fetch one Offer - useEffect(async () => { - const res = await axios.get(`/api/offer/getOne/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data) - setTitle(res.data.offer.title) - setDescription(res.data.offer.description) - setLocation(res.data.offer.location) - setSendBisunessName(res.data.offer.bisunessName) - - }, [id]); - const fetchBusuness = useCallback(async () => { - const res = await axios.get(`/api/directory/getAll`, { - // headers: { - // Authorization: `Bearer ${token}`, - // }, - }); - - // console.log(res.data.directory); - setBisunessName(res.data.directory) - - }, [token]); - - useEffect(async () => { - fetchBusuness(); - - }, [fetchBusuness]); - - - - const handleSubmit = async () => { - if (!(title && description && image && location && sendBisunessName)) { - return swal('Error!', 'All fields are required', 'error') - - } - const myForm = new FormData(); - - myForm.set("title", title); - myForm.set("description", description); - myForm.set("bisunessName", sendBisunessName); - myForm.set("location", location); - myForm.set("image", image); - setLoading({ loading: true }); - // console.log(image) - try { - let res = await axios.put( - `/api/offer/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - if (res.data) { - swal("success!", "Event Added Successfully!", "success"); - setLoading(false); - history.goBack(); - } - } catch (error) { - swal('Error!', 'something Went Wrong', 'error') - - setLoading(false); - } - - - - }; - const handleImage = (e) => { - const files = e.target.files[0]; - // console.log(files) - setImage(files); - - }; - // - const onCancel = () => { - // window.location = "/comproducts"; - history.goBack() - - }; - // console.log(bisunessName) - return ( - <> -
- - - - - - -

Edit Offer

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title (maximum 50 characters)" /> - - {title ? <> - {50 - title.length} characters left - : <> - - } - - - - - setDescription(e.target.value)} - value={description} - placeholder="Description (maximum 250 characters)" /> - - {description ? <> - {250 - description.length} characters left - : <> - - } - - - - - - - - - - - - setLocation(e.target.value)} - value={location} - placeholder="Location" /> - - - - - {/* */} - - - -
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default EditOffer \ No newline at end of file diff --git a/src/views/Offers/Offer.js b/src/views/Offers/Offer.js deleted file mode 100644 index 81f824d..0000000 --- a/src/views/Offers/Offer.js +++ /dev/null @@ -1,162 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; - -function Offer() { - const [offer, setOffer] = useState([]) - - const token = isAutheticated(); - - const getOffer = useCallback(async () => { - let res = await axios.get( - `/api/offer/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - setOffer(res.data.offer) - - - }, [token]); - - useEffect(() => { - getOffer(); - }, [getOffer]); - - - const handleDelete = async (id) => { - let status = window.confirm("Do you want to delete"); - if (!status) return; - - let res = await axios.delete(`/api/offer/delete/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - console.log(res) - if (res.data.success == true) { - swal("success!", "Offer Deleted Successfully!", "success"); - window.location.reload(); - } - }; - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-Offers

- - -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - {offer && offer.map((item, index) => - - - - - - - - - - - - )} - -
TitleImageBusiness NameLocationAdded OnAction
{item?.title} - {item?.bisunessName}{item?.location} - {/* {item?.addedOn} */} - {new Date(`${item?.addedOn}`).toDateString()} , {`${formatAMPM(item?.addedOn)}`} - - - - - - - - - - - -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default Offer; diff --git a/src/views/Offers/ViewOffer.js b/src/views/Offers/ViewOffer.js deleted file mode 100644 index 6fea4c7..0000000 --- a/src/views/Offers/ViewOffer.js +++ /dev/null @@ -1,136 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -function ViewOffer() { - const [offer, setOffer] = useState([]) - const { id } = useParams(); - const token = isAutheticated(); - - const getOffer = useCallback(async () => { - let res = await axios.get( - `/api/offer/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - - setOffer(res.data.offer) - - - }, [token]); - - useEffect(() => { - getOffer(); - }, [getOffer]); - - - - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-Offers

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Id{offer?._id}
Title{offer?.title}
Image - -
Bisuness Name {offer?.bisunessName}
Description{offer?.description}
Location{offer?.location}
Added On - {new Date(`${offer?.addedOn}`).toDateString()} , {`${formatAMPM(offer?.addedOn)}`} -
Updated At - {new Date(`${offer?.updatedAt}`).toDateString()} , {`${formatAMPM(offer?.updatedAt)}`} -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default ViewOffer; diff --git a/src/views/Requirement/AddRequirement.js b/src/views/Requirement/AddRequirement.js deleted file mode 100644 index 672e55a..0000000 --- a/src/views/Requirement/AddRequirement.js +++ /dev/null @@ -1,217 +0,0 @@ - -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription, cilObjectGroup } from '@coreui/icons' -const AddRequirement = () => { - const token = isAutheticated(); - // console.log(token) - let history = useHistory(); - - const [areaOfInterest, setAreaOfInterest] = useState(""); - const [description, setDescription] = useState(""); - const [title, setTitle] = useState(""); - const [imagesPreview, setImagesPreview] = useState([]); - const [allimage, setAllImage] = useState([]); - // const [images, setImages] = useState([]); - - const [loading, setLoading] = useState(false); - - const handleImage = (e) => { - - setAllImage([...allimage, ...e.target.files]); - - // only for file preview------------------------------------ - const files = Array.from(e.target.files); - files.forEach((file) => { - const reader = new FileReader(); - - reader.onload = () => { - if (reader.readyState === 2) { - setImagesPreview((old) => [...old, reader.result]); - - } - }; - - reader.readAsDataURL(file) - }); - // ----------------------------------------------------------------------------- - }; - - const handleSubmit = async () => { - const myForm = new FormData(); - - myForm.set("title", title); - myForm.set("description", description); - myForm.set("areaOfInterest", areaOfInterest); - allimage.forEach((Singleimage) => { - myForm.append("image", Singleimage); - - }); - if (!(title && description && areaOfInterest && allimage[0])) { - return swal('Error!', 'All fields are required', 'error') - - } - setLoading(true); - try { - let res = await axios.post( - `/api/requirement/create`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - if (res.data.success === true) { - swal("success!", "Requirements Added Successfully!", "success"); - history.goBack(); - setLoading(false); - } - - } catch (error) { - setLoading(false); - swal('Error!', error, 'error') - - - } - - }; - - const onCancel = () => { - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Add Requirements

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title (maximum 50 characters)" /> - - {title ? <> - {50 - title.length} characters left - : <> - - } - - - - - setAreaOfInterest(e.target.value)} - value={areaOfInterest} - placeholder="Area Of Interest" /> - - - - - - - setDescription(e.target.value)} - value={description} - placeholder="Description (maximum 250 characters)" /> - - {description ? <> - {250 - description.length} characters left - : <> - - } - - - - {/* */} - - - -
*Please Upload maximum four images
- - -
- - {imagesPreview.map((image, index) => ( - Product Preview - ))} -
-
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default AddRequirement \ No newline at end of file diff --git a/src/views/Requirement/EditRequirement.js b/src/views/Requirement/EditRequirement.js deleted file mode 100644 index d9ecd62..0000000 --- a/src/views/Requirement/EditRequirement.js +++ /dev/null @@ -1,232 +0,0 @@ - - -import axios from "axios"; -import React, { useCallback, useEffect, useState } from "react"; -import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import ClipLoader from "react-spinners/ClipLoader"; -import { useHistory, useParams } from "react-router-dom"; -import swal from 'sweetalert'; - -import { - CButton, - CCard, - CCardBody, - CCol, - CContainer, - CForm, - CFormInput, - CInputGroup, - CInputGroupText, - CRow, -} from '@coreui/react' -import CIcon from '@coreui/icons-react' -import { cilPencil, cilSettings, cilLockLocked, cilUser, cilBell, cilLocationPin, cilAudioDescription, cilObjectGroup } from '@coreui/icons' -const EditRequirement = () => { - const token = isAutheticated(); - const { id } = useParams() - let history = useHistory(); - const [areaOfInterest, setAreaOfInterest] = useState(""); - const [description, setDescription] = useState(""); - const [title, setTitle] = useState(""); - const [imagesPreview, setImagesPreview] = useState([]); - const [allimage, setAllImage] = useState([]); - const [loading, setLoading] = useState(false); - - //fetch one requirement - useEffect(async () => { - const res = await axios.get(`/api/requirement/getOne/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data) - setTitle(res.data.Requirement.title) - setDescription(res.data.Requirement.description) - setAreaOfInterest(res.data.Requirement.areaOfInterest) - - - }, [id]); - - - const handleImage = (e) => { - - setAllImage([...allimage, ...e.target.files]); - - // only for file preview------------------------------------ - const files = Array.from(e.target.files); - files.forEach((file) => { - const reader = new FileReader(); - - reader.onload = () => { - if (reader.readyState === 2) { - setImagesPreview((old) => [...old, reader.result]); - - } - }; - - reader.readAsDataURL(file) - }); - // ----------------------------------------------------------------------------- - }; - - - const handleSubmit = async () => { - const myForm = new FormData(); - - myForm.set("title", title); - myForm.set("description", description); - myForm.set("areaOfInterest", areaOfInterest); - allimage.forEach((Singleimage) => { - myForm.append("image", Singleimage); - - }); - if (!(title && description && areaOfInterest && allimage[0])) { - return swal('Error!', 'All fields are required', 'error') - - } - setLoading(true); - try { - let res = await axios.put( - `/api/requirement/update/${id}`, myForm, - { - headers: { - "Content-Type": 'multipart/form-data', - Authorization: `Bearer ${token}`, - }, - } - ); - if (res.data.success === true) { - swal("success!", "Requirements Updated Successfully!", "success"); - history.goBack(); - setLoading(false); - } - - } catch (error) { - setLoading(false); - swal('Error!', error, 'error') - - - } - - }; - - const onCancel = () => { - history.goBack() - - }; - - return ( - <> -
- - - - - - -

Edit Requirements

-
-
- - - - - setTitle(e.target.value)} - value={title} - placeholder="Title (maximum 50 characters)" /> - - {title ? <> - {50 - title.length} characters left - : <> - - } - - - - - setAreaOfInterest(e.target.value)} - value={areaOfInterest} - placeholder="Area Of Interest" /> - - - - - - - setDescription(e.target.value)} - value={description} - placeholder="Description (maximum 250 characters)" /> - - {description ? <> - {250 - description.length} characters left - : <> - - } - - - - {/* */} - - - -
*Please Upload maximum four images
- -
- {imagesPreview.map((image, index) => ( - Product Preview - ))} -
-
- -
- - -
-
-
-
-
-
-
-
-
- - - ) -} - -export default EditRequirement \ No newline at end of file diff --git a/src/views/Requirement/Pagination.js b/src/views/Requirement/Pagination.js deleted file mode 100644 index 4df8d64..0000000 --- a/src/views/Requirement/Pagination.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { Link } from "react-router-dom"; -const Pagination = ({ postsPerPage, totalPosts, paginate }) => { - const pageNumbers = []; - - for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { - pageNumbers.push(i); - } - - return ( - - ); -}; - -export default Pagination; \ No newline at end of file diff --git a/src/views/Requirement/Requirement.js b/src/views/Requirement/Requirement.js deleted file mode 100644 index 6264d5d..0000000 --- a/src/views/Requirement/Requirement.js +++ /dev/null @@ -1,142 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { isAutheticated } from "../../auth"; -import Pagination from "./Pagination"; -import RequirementOpt from "./RequirementOpt"; - -function Requirement() { - const [requirement, setRequirement] = useState([]) - const [currentPage, setCurrentPage] = useState(1); - const [postsPerPage] = useState(20); - const token = isAutheticated(); - // console.log(token) - const getRequirement = useCallback(async () => { - let res = await axios.get( - `/api/requirement/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - - setRequirement(res.data.Requirement) - - }, [token]); - - useEffect(() => { - getRequirement(); - }, [getRequirement]); - - - const indexOfLastPost = currentPage * postsPerPage; - const indexOfFirstPost = indexOfLastPost - postsPerPage; - const currentPosts = requirement.slice(indexOfFirstPost, indexOfLastPost); - - // Change page - const paginate = pageNumber => setCurrentPage(pageNumber); - - - - - - - - const handleApprove = async (id) => { - let status = window.confirm("Do you want to Approve"); - if (!status) return; - // console.log(email) - try { - let res = await axios.get(`/api/admin/requirement/approve/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - console.log(res.data) - getRequirement() - if (res.data.success == true) { - swal("success!", "Requirement Approved !", "success"); - - } - } catch (error) { - - swal("Error:!", console.log(error), "error"); - } - - }; - - - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-Requirements

- - {/*
-
    -
  1. - CMD-App -
  2. -
  3. CMD-Category
  4. -
-
*/} -
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - {currentPosts && currentPosts.map((item, index) => - - )} - -
TitleImageArea Of InterestAdded ByAdded OnAction
-
- - - {/* */} -
-
-
-
-
- {/* */} -
- -
- ); -} - -export default Requirement; diff --git a/src/views/Requirement/RequirementOpt.js b/src/views/Requirement/RequirementOpt.js deleted file mode 100644 index 6552bdd..0000000 --- a/src/views/Requirement/RequirementOpt.js +++ /dev/null @@ -1,133 +0,0 @@ -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import { Link } from "react-router-dom"; -import swal from 'sweetalert'; -import { isAutheticated } from "../../auth"; - - -const RequirementOpt = ({ item, handleApprove }) => { - const [user, setUser] = useState() - const [approve, setApprove] = useState(false) - const token = isAutheticated(); - - useEffect(async () => { - let resp = await axios.get( - `/api/v1/admin/user/${item.addedBy}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - - setUser(resp.data.user) - - ///approved - const getData = async () => { - try { - const response = await axios.get(`/api/requirement/getOne/${item._id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }) - // console.log(response.data) - if (response.data.Requirement.approved === true) { - setApprove(true) - } else { - setApprove(false) - } - } catch (e) { - - setApprove(false) - } - } - getData() - }, [item]); - - - - const handleDelete = async (id) => { - let status = window.confirm("Do you want to delete"); - if (!status) return; - - let res = await axios.delete(`/api/requirement/delete/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res) - if (res.data.success == true) { - swal("success!", "Requirement Deleted Successfully!", "success"); - window.location.reload(); - } - }; - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - return ( - <> - - {item?.title} - - - - {item?.areaOfInterest} - {user && {user?.name}} - - {/* {item?.addedOn} */} - {new Date(`${item?.createdAt}`).toDateString()} , {`${formatAMPM(item?.createdAt)}`} - - - - - - - - - - - - - - - - - - - ) -} - -export default RequirementOpt \ No newline at end of file diff --git a/src/views/Requirement/ViewRequirement.js b/src/views/Requirement/ViewRequirement.js deleted file mode 100644 index c64a9fd..0000000 --- a/src/views/Requirement/ViewRequirement.js +++ /dev/null @@ -1,142 +0,0 @@ - -import axios from "axios"; -import React, { useEffect, useState, useCallback, useMemo } from "react"; -import swal from 'sweetalert'; -// import { API } from "../../data"; -import { Link, useParams } from "react-router-dom"; -import { isAutheticated } from "../../auth"; - -function ViewRequirement() { - const [requirement, setRequirement] = useState([]) - const [allImage, setAllImage] = useState([]) - const { id } = useParams(); - // console.log(id) - const token = isAutheticated(); - - const getUserDetails = useCallback(async () => { - - - let resp = await axios.get( - `/api/requirement/getOne/${id}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(resp.data.Requirement.image) - setRequirement(resp.data.Requirement) - setAllImage(resp.data.Requirement.image) - - - }, [token]); - - useEffect(() => { - getUserDetails(); - }, [getUserDetails]); - - - // allImage.map(item => { - // console.log(item.url) - // }) - - - //change time formate - function formatAMPM(date) { - var hours = new Date(date).getHours(); - var minutes = new Date(date).getMinutes(); - var ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12; - hours = hours ? hours : 12; // the hour '0' should be '12' - minutes = minutes < 10 ? '0' + minutes : minutes; - var strTime = hours + ':' + minutes + ' ' + ampm; - return strTime; - } - - - return ( -
-
-
- {/* */} -
-
-
-

CMP-User Details

-
-
-
- {/* */} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - {/* - - - - */} - - - {/* */} - - - - - - - - - - - - - - - -
User_Id{requirement?._id}
Title{requirement?.title}
Area Of Interest{requirement?.areaOfInterest}
Image - - -
Description
Description{requirement?.description}
Added On - {new Date(`${requirement?.createdAt}`).toDateString()} , {`${formatAMPM(requirement?.createdAt)}`} -
Updated At - {new Date(`${requirement?.updatedAt}`).toDateString()} , {`${formatAMPM(requirement?.updatedAt)}`} -
-
- - - {/* */} -
-
-
-
-
- {/* */} -
-
- ); -} - -export default ViewRequirement; - diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index 2198ce1..6ea9d81 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -146,7 +146,7 @@ const Login = () => {

Login

-

Sign In to Your CMP Dashboard Account.

+

Sign In to Your ATP Dashboard Account.

diff --git a/src/views/pages/register/ForgotPassword.js b/src/views/pages/register/ForgotPassword.js index d9f306a..cb1e857 100644 --- a/src/views/pages/register/ForgotPassword.js +++ b/src/views/pages/register/ForgotPassword.js @@ -40,7 +40,7 @@ const ForgotPassword = () => { } } catch (e) { - alert("Wrong Email ID. Enter valid email to get the password") + swal('Error!', 'Wrong Email ID. Enter valid email to get the password', 'error') setLoading(false) diff --git a/src/views/pages/page404/Page404.js b/src/views/pages/register/page404/Page404.js similarity index 100% rename from src/views/pages/page404/Page404.js rename to src/views/pages/register/page404/Page404.js diff --git a/src/views/widgets/WidgetsDropdown.js b/src/views/widgets/WidgetsDropdown.js index 468f679..ba45361 100644 --- a/src/views/widgets/WidgetsDropdown.js +++ b/src/views/widgets/WidgetsDropdown.js @@ -26,81 +26,10 @@ const WidgetsDropdown = ({ users, category, requirement, news, offer, event }) = } title="Total Users" - // action={ - // - // - // - // - // - // Action - // Another action - // Something else here... - // Disabled action - // - // - // } - // chart={ - // - // } + /> - + {/* - + /> */} + {/* */} ) } From c725afb2ee76b1c455b95d577f2845f99775e3fa Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 18 Jan 2023 14:39:22 +0530 Subject: [PATCH 42/48] first commit --- src/App.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index 69e3c8d..52538b8 100644 --- a/src/App.js +++ b/src/App.js @@ -14,7 +14,7 @@ const loading = (
) -// import EditProducts from './views/Commerce/Editproducts' + // Containers const DefaultLayout = React.lazy(() => import('./layout/DefaultLayout')) From e5d64b3e6f4d6c431d9d6937f484a68bed168517 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 18 Jan 2023 14:41:21 +0530 Subject: [PATCH 43/48] first commit --- src/_nav.js | 7 +------ src/auth.js | 1 - src/index.js | 4 +--- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/_nav.js b/src/_nav.js index e65cdf4..86a1747 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -31,12 +31,7 @@ const _nav = [ }, - // { - // component: CNavItem, - // name: 'FAQs', - // icon: , - // to: '/FAQs', - // }, + { component: CNavItem, name: 'Users', diff --git a/src/auth.js b/src/auth.js index bcf96f4..434c3d9 100644 --- a/src/auth.js +++ b/src/auth.js @@ -5,7 +5,6 @@ export const isAutheticated = () => { if (localStorage.getItem("authToken")) { return (localStorage.getItem("authToken")); - //console.log(localStorage.getItem("authToken")) } else { return false; } diff --git a/src/index.js b/src/index.js index 0cc7962..e613caf 100644 --- a/src/index.js +++ b/src/index.js @@ -28,7 +28,5 @@ ReactDOM.render( document.getElementById('root'), ) -// If you want your app to work offline and load faster, you can change -// unregister() to register() below. Note this comes with some pitfalls. -// Learn more about service workers: http://bit.ly/CRA-PWA + serviceWorker.unregister() From 88797f7050a7f686cac01d32883d6ab3c663a777 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 18 Jan 2023 14:44:46 +0530 Subject: [PATCH 44/48] atp first commit --- src/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index e613caf..0cc7962 100644 --- a/src/index.js +++ b/src/index.js @@ -28,5 +28,7 @@ ReactDOM.render( document.getElementById('root'), ) - +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: http://bit.ly/CRA-PWA serviceWorker.unregister() From e7f53a9dc497f1d1f8390405700b14d381fbf4e9 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Thu, 19 Jan 2023 18:03:14 +0530 Subject: [PATCH 45/48] address commit --- package.json | 5 +- src/App.js | 41 +-- src/_nav.js | 77 +++++ src/components/AppContent.js | 16 +- src/components/AppFooter.js | 2 +- src/components/AppHeader.js | 4 +- src/components/AppSidebar.js | 2 +- src/components/ProtectedRoute.js | 6 +- src/components/header/AppHeaderDropdown.js | 6 +- src/routes.js | 50 ++- src/views/Profile/EditProfile.js | 6 +- src/views/Profile/Profile.js | 6 +- src/views/configuration/Address.js | 292 ++++++++++++++++ src/views/configuration/Logo.js | 219 ++++++++++++ src/views/configuration/Socialmedia.js | 169 +++++++++ src/views/configuration/cities/AddCity.js | 217 ++++++++++++ src/views/configuration/cities/Cities.js | 342 +++++++++++++++++++ src/views/configuration/cities/EditCity.js | 230 +++++++++++++ src/views/configuration/states/AddState.js | 172 ++++++++++ src/views/configuration/states/EditStates.js | 199 +++++++++++ src/views/configuration/states/States.js | 342 +++++++++++++++++++ src/views/dashboard/Dashboard.js | 156 ++++----- src/views/pages/login/Login.js | 8 +- src/views/pages/register/Change_password.js | 6 +- src/views/pages/register/ForgotPassword.js | 6 +- src/views/pages/register/NewRegister.js | 6 +- src/views/widgets/WidgetsDropdown.js | 5 +- 27 files changed, 2437 insertions(+), 153 deletions(-) create mode 100644 src/views/configuration/Address.js create mode 100644 src/views/configuration/Logo.js create mode 100644 src/views/configuration/Socialmedia.js create mode 100644 src/views/configuration/cities/AddCity.js create mode 100644 src/views/configuration/cities/Cities.js create mode 100644 src/views/configuration/cities/EditCity.js create mode 100644 src/views/configuration/states/AddState.js create mode 100644 src/views/configuration/states/EditStates.js create mode 100644 src/views/configuration/states/States.js diff --git a/package.json b/package.json index 4c6b5b4..ab6c116 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@coreui/react": "^4.3.0", "@coreui/react-chartjs": "^2.0.0", "@coreui/utils": "^1.3.1", + "@material-ui/core": "^4.12.4", "@reduxjs/toolkit": "^1.8.2", "@wojtekmaj/enzyme-adapter-react-17": "^0.6.5", "axios": "^0.25.0", @@ -50,14 +51,14 @@ "enzyme": "^3.11.0", "file-saver": "^2.0.5", "prop-types": "^15.7.2", - "react": "^17.0.2", + "react": "18.2", "react-app-polyfill": "^2.0.0", "react-date-picker": "^8.4.0", "react-datepicker": "^4.8.0", "react-dom": "^17.0.2", "react-paginate": "^8.1.3", "react-redux": "^7.2.6", - "react-router-dom": "^5.3.0", + "react-router-dom": "^6.7.0", "react-spinners": "^0.11.0", "react-time-picker": "^4.5.0", "redux": "4.1.2", diff --git a/src/App.js b/src/App.js index 52538b8..2850d67 100644 --- a/src/App.js +++ b/src/App.js @@ -1,6 +1,6 @@ -import React, { Component } from 'react' +import React, { Component, Suspense } from 'react' import axios from 'axios'; -import { BrowserRouter, Route, Switch } from 'react-router-dom' +import { Router, Route, Routes, HashRouter } from 'react-router-dom' import { useState, useEffect } from 'react'; import './scss/style.scss' import ForgotPassword from './views/pages/register/ForgotPassword' @@ -14,7 +14,7 @@ const loading = (
) - +// import EditProducts from './views/Commerce/Editproducts' // Containers const DefaultLayout = React.lazy(() => import('./layout/DefaultLayout')) @@ -64,31 +64,26 @@ const App = () => { }, []) return ( - - - - < Route exact path="/" name="Login Page" render={(props) => } /> - } /> - } /> + + + + } /> + } /> + } /> + } /> + } /> - } /> - } /> + + : + userdata === false ? :
} /> + } /> +
+
+
- ( - userdata?.role === "admin" ? : - userdata === false ? :
- )} /> - - } /> - - - -
-
-
) } export default App diff --git a/src/_nav.js b/src/_nav.js index 86a1747..04cbe08 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -1,13 +1,17 @@ import React from 'react' import CIcon from '@coreui/icons-react' import { + cilAddressBook, + cilAppsSettings, cilBell, cilCalculator, cilChartPie, + cilCommand, cilCursor, cilDrop, cilFace, cilFilterSquare, + cilMedicalCross, cilMoney, cilNewspaper, cilNotes, @@ -38,6 +42,79 @@ const _nav = [ icon: , to: '/users', }, + { + component: CNavGroup, + name: 'Configuration', + icon: , + items: [ + { + component: CNavItem, + name: 'Cities', + icon: , + to: '/cities', + }, + { + component: CNavItem, + name: 'States', + icon: , + to: '/states', + }, + // { + // component: CNavItem, + // name: 'Standard Shipping', + // icon: , + // to: '/shipping', + // }, + // { + // component: CNavItem, + // name: 'Custom Shipping', + // icon: , + // to: '/custom-shipping', + // }, + // { + // component: CNavItem, + // name: 'Pincode', + // icon: , + // to: '/pincode', + // }, + // { + // component: CNavItem, + // name: 'Tax Rates', + // icon: , + // to: '/tax', + // }, + // { + // component: CNavItem, + // name: 'Pages', + // icon: , + // to: '/page', + // }, + // { + // component: CNavItem, + // name: 'Terms of Use', + // icon: , + // to: '/terms_of_use', + // }, + { + component: CNavItem, + name: 'Social Media', + icon: , + to: '/socialmedia', + }, + { + component: CNavItem, + name: 'Address', + icon: , + to: '/address', + }, + { + component: CNavItem, + name: 'Logos', + icon: , + to: '/logo', + }, + ], + }, diff --git a/src/components/AppContent.js b/src/components/AppContent.js index d048fb8..7a03fe5 100644 --- a/src/components/AppContent.js +++ b/src/components/AppContent.js @@ -1,5 +1,5 @@ import React, { Suspense } from 'react' -import { Redirect, Route, Switch } from 'react-router-dom' +import { Navigate, Route, Routes } from 'react-router-dom' import { CContainer, CSpinner } from '@coreui/react' // routes config @@ -9,26 +9,22 @@ const AppContent = () => { return ( }> - + {routes.map((route, idx) => { return ( - route.component && ( + route.element && ( ( - <> - - - )} + element={} /> ) ) })} - - + } /> + ) diff --git a/src/components/AppFooter.js b/src/components/AppFooter.js index 1931956..79a0602 100644 --- a/src/components/AppFooter.js +++ b/src/components/AppFooter.js @@ -6,7 +6,7 @@ const AppFooter = () => {
- {new Date().getFullYear()} ©ATP. + {new Date().getFullYear()} © Any Time Prasad ( ATP ) .
diff --git a/src/components/AppHeader.js b/src/components/AppHeader.js index 45d2168..04c70ef 100644 --- a/src/components/AppHeader.js +++ b/src/components/AppHeader.js @@ -32,12 +32,12 @@ const AppHeader = () => { -

ATP

+

Any Time Prasad

- Dashboard + ATP Dashboard {/* diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index c7550af..d49650a 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -31,7 +31,7 @@ const AppSidebar = () => { > {/* */} -

ATP

+

ATP Dashboard

{/* */}
diff --git a/src/components/ProtectedRoute.js b/src/components/ProtectedRoute.js index 4bc87db..91ad63a 100644 --- a/src/components/ProtectedRoute.js +++ b/src/components/ProtectedRoute.js @@ -1,11 +1,11 @@ import React, { useEffect, useState, } from "react"; -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; const ProtectedRoute = (props) => { let Cmp = props; - const history = useHistory(); + const history = useNavigate(); useEffect(() => { if (!localStorage.getItem('authToken')) - history.push('/') + history('/') }, []) return ( <> diff --git a/src/components/header/AppHeaderDropdown.js b/src/components/header/AppHeaderDropdown.js index c871aa8..70b04c1 100644 --- a/src/components/header/AppHeaderDropdown.js +++ b/src/components/header/AppHeaderDropdown.js @@ -27,7 +27,7 @@ import swal from 'sweetalert'; import userImage from './../../assets/images/avatars/1.jpg' import { Link } from 'react-router-dom' // import { signout } from 'src/auth' -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import { useEffect } from 'react'; import axios from 'axios'; import { useState } from 'react'; @@ -35,11 +35,11 @@ import { useState } from 'react'; const AppHeaderDropdown = () => { const [userData, setUserData] = useState() - let history = useHistory(); + let history = useNavigate(); const signout = async () => { localStorage.removeItem('authToken') swal("success!", "Logged Out", "success"); - history.push("/"); + history("/"); } //for user image diff --git a/src/routes.js b/src/routes.js index 265fc00..0cea1a3 100644 --- a/src/routes.js +++ b/src/routes.js @@ -8,24 +8,54 @@ const Change_Password = React.lazy(() => import('./views/pages/register/Change_p import Profile from './views/Profile/Profile' import EditProfile from './views/Profile/EditProfile' const Dashboard = React.lazy(() => import('./views/dashboard/Dashboard')) - +/// +//Cities +import Cities from './views/configuration/cities/Cities.js' +import AddCity from './views/configuration/cities/AddCity.js' +import EditCity from './views/configuration/cities/EditCity.js' +//states +import EditState from './views/configuration/states/EditStates.js' +import AddState from './views/configuration/states/AddState.js' +import States from './views/configuration/states/States.js' +//social media,address,logo +import Socialmedia from './views/configuration/Socialmedia.js' +import Address from './views/configuration/Address.js' +import Logo from './views/configuration/Logo.js' +import Login from './views/pages/login/Login' const routes = [ { path: '/', exact: true, name: 'Home' }, - { path: '/change_password', name: 'Change Password', component: Change_Password }, - { path: '/profile/edit', name: 'Edit Profile', component: EditProfile }, - // { path: '/profile', name: 'Profile', component: Profile }, - - - - - + { path: '/change_password', name: 'Change Password', element: Change_Password }, + { path: '/profile/edit', name: 'Edit Profile', element: EditProfile }, + // { path: '/profile', name: 'Profile', element: Profile }, //dashboard - { path: '/dashboard', name: 'Dashboard', component: Dashboard }, + { path: '/dashboard', name: 'Dashboard', element: Dashboard }, + + //------------settings------------------------// + //cities + { path: '/cities', name: 'Cities', element: Cities }, + { path: '/cities/add', name: 'Add City', element: AddCity }, + { path: '/cities/edit/:id', name: 'Edit City', element: EditCity }, + //states + { path: '/states', name: 'States', element: States }, + { path: '/states/add', name: 'Add State', element: AddState }, + { path: '/states/edit/:id', name: 'Edit State', element: EditState }, + + // + + { path: '/socialmedia', name: 'Social Media', element: Socialmedia }, + { path: '/address', name: 'Address', element: Address }, + { path: '/logo', name: 'Logo', element: Logo }, + // -------------------------------------------// + + + // + + ] export default routes diff --git a/src/views/Profile/EditProfile.js b/src/views/Profile/EditProfile.js index c479078..d794c61 100644 --- a/src/views/Profile/EditProfile.js +++ b/src/views/Profile/EditProfile.js @@ -3,7 +3,7 @@ import { CForm, CCol, CFormLabel, CContainer, CRow, CCardGroup, CCard, CCardBody import { useState, useEffect } from 'react' import axios from 'axios' -import { useHistory } from 'react-router-dom' +import { useNavigate } from 'react-router-dom' import { isAutheticated } from 'src/auth' const EditProfile = () => { @@ -19,7 +19,7 @@ const EditProfile = () => { phone: '' }) - const history = useHistory() + const history = useNavigate() @@ -99,7 +99,7 @@ const EditProfile = () => { icon: 'success', button: 'Return', }) - history.goBack() + history(-1) } } catch (error) { diff --git a/src/views/Profile/Profile.js b/src/views/Profile/Profile.js index 880d2bd..19b827a 100644 --- a/src/views/Profile/Profile.js +++ b/src/views/Profile/Profile.js @@ -19,13 +19,13 @@ import { import { useState } from 'react' import axios from 'axios'; import { isAutheticated } from 'src/auth'; -import { useHistory } from 'react-router-dom'; +import { useNavigate } from 'react-router-dom'; const Profile = () => { // const user = JSON.parse(localStorage.getItem('auth')).user const [user, setUser] = useState({}); const { token } = isAutheticated(); - const history = useHistory() + const history = useNavigate() // console.log(token); useEffect(async () => { let res = await axios.get('/owner', { @@ -51,7 +51,7 @@ const Profile = () => { history.push('/edit')}>Edit Profile + className="float-right" onClick={() => history('/edit')}>Edit Profile diff --git a/src/views/configuration/Address.js b/src/views/configuration/Address.js new file mode 100644 index 0000000..9535cf4 --- /dev/null +++ b/src/views/configuration/Address.js @@ -0,0 +1,292 @@ +import axios from 'axios' +import React, { useEffect, useState } from 'react' + +import ClipLoader from 'react-spinners/ClipLoader' +import { Link } from 'react-router-dom' +import swal from 'sweetalert' +import { isAutheticated } from 'src/auth' + +function Address() { + const token = isAutheticated() + const [loading, setLoading] = useState(false) + const [company, setCompany] = useState('') + const [address, setAddress] = useState('') + const [city, setCity] = useState('') + const [state, setState] = useState('') + const [country, setCountry] = useState('') + const [pincode, setPincode] = useState('') + const [website, setWebsite] = useState('') + const [contact, setContact] = useState('') + const [email, setEmail] = useState('') + const [gstin, setGSTIN] = useState('') + + useEffect(() => { + async function getConfiguration() { + const configDetails = await axios.get(`/api/config`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + configDetails.data.result.map((item) => { + item.address.map((el) => { + setCompany(el.company) + setAddress(el.address) + setCity(el.city) + setState(el.state) + setCountry(el.country) + setPincode(el.pincode) + setWebsite(el.website) + setContact(el.contact) + setEmail(el.email) + setGSTIN(el?.gstin) + }) + }) + } + getConfiguration() + }, []) + async function handelChange(e) { + if (e.target.name.toLowerCase() === 'address') { + setAddress(e.target.value) + } else if (e.target.name.toLowerCase() === 'company name') { + setCompany(e.target.value) + } else if (e.target.name.toLowerCase() === 'city') { + setCity(e.target.value) + } else if (e.target.name.toLowerCase() === 'state') { + setState(e.target.value) + } else if (e.target.name.toLowerCase() === 'country') { + setCountry(e.target.value) + } else if (e.target.name.toLowerCase() === 'pincode') { + setPincode(e.target.value) + } else if (e.target.name.toLowerCase() === 'website') { + setWebsite(e.target.value) + } else if (e.target.name.toLowerCase() === 'contact number') { + setContact(e.target.value) + } else if (e.target.name.toLowerCase() === 'email') { + setEmail(e.target.value) + } else if (e.target.name.toLowerCase() === 'gstin') { + setGSTIN(e.target.value) + } + } + async function handelSubmit() { + if (!/^[0-9A-Za-z]{15}$/.test(gstin)) return swal('Warning!', 'Enter valid GSTIN') + setLoading(true) + let data = { + company, + address, + city, + state, + country, + pincode, + website, + contact, + email, + gstin, + } + let res = await axios.post(`/api/config/address`, data, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + + if (res) { + setLoading(false) + console.log(res) + swal('Success!', res.data.message, res.data.status) + } + } + + return ( +
+
+
+
+
+
+
+
+
+
+

Address

+ +
+
+
+
+ <> + + handelChange(e)} + 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" + /> + + handelChange(e)} + 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" + /> + + handelChange(e)} + 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" + />{' '} + + handelChange(e)} + className="form-control input-field " + id="basicpill-phoneno-input" + /> + +
+
+
+
+
+
+ +
+
+
+
+
+
+ + {/* */} +
+
+
+
+
+ {/* */} +
+ {/* */} +
+
+ ) +} + +export default Address diff --git a/src/views/configuration/Logo.js b/src/views/configuration/Logo.js new file mode 100644 index 0000000..f94b75f --- /dev/null +++ b/src/views/configuration/Logo.js @@ -0,0 +1,219 @@ +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' + +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() + + // urlcreated images + + 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}`, + }, + }) + + 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) + + let res = await axios.post(`/api/config/logo`, formdata, { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', + 'Access-Control-Allow-Origin': '*', + }, + }) + if (res) { + setLoading(false) + swal('Success!', res.data.message, res.data.status) + } + } + + return ( +
+
+
+
+
+
+
+
+
+
+

Logo

+ +
+
+
+
+ <> + +
+ { + setHeaderlogo(e.target.files[0]) + if (e.target.files && e.target.files[0]) { + setHeaderlogoUrl({ + image: URL.createObjectURL(e.target.files[0]), + }) + } + }} + className="form-control input-field 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 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 + ) : ( + '' + )} + +
+
+
+
+
+
+ +
+
+
+
+
+
+ + {/* */} +
+
+
+
+
+ {/* */} +
+ {/* */} +
+
+ ) +} + +export default Logo diff --git a/src/views/configuration/Socialmedia.js b/src/views/configuration/Socialmedia.js new file mode 100644 index 0000000..2af69d3 --- /dev/null +++ b/src/views/configuration/Socialmedia.js @@ -0,0 +1,169 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom' +import ClipLoader from 'react-spinners/ClipLoader' + +import swal from 'sweetalert' +import axios from 'axios' +import { isAutheticated } from 'src/auth' + +function Socialmedia() { + const [loading, setLoading] = useState(false) + const token = isAutheticated() + const [facebook, setFacebook] = useState('') + const [instagram, setInstagram] = useState('') + const [twitter, setTwitter] = useState('') + const [linkedin, setLinkedin] = useState('') + + useEffect(() => { + async function getConfiguration() { + const configDetails = await axios.get(`/api/config`, { + headers: { + 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) + }) + } + getConfiguration() + }, []) + + async function handelChange(e) { + if (e.target.name === 'facebook') { + setFacebook(e.target.value) + } else if (e.target.name === 'twitter') { + setTwitter(e.target.value) + } else if (e.target.name === 'instagram') { + setInstagram(e.target.value) + } else if (e.target.name === 'linkedin') { + setLinkedin(e.target.value) + } + } + async function handelSubmit() { + setLoading(true) + let data = { + facebook, + twitter, + instagram, + linkedin, + } + let res = await axios.post(`/api/config/social`, data, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + + if (res) { + setLoading(false) + console.log(res) + swal('Success!', res.data.message, res.data.status) + } + } + return ( +
+ {/* */} +
+
+
+
+
+
+
+
+
+

Social Media

+ +
+
+
+
+ <> + + handelChange(e)} + 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" + />{' '} + + handelChange(e)} + className="form-control input-field " + id="basicpill-phoneno-input" + /> + +
+
+
+
+
+
+ +
+
+
+
+
+
+ + {/* */} +
+
+
+
+
+ {/* */} +
+ {/* */} +
+
+ ) +} + +export default Socialmedia diff --git a/src/views/configuration/cities/AddCity.js b/src/views/configuration/cities/AddCity.js new file mode 100644 index 0000000..2cc9eeb --- /dev/null +++ b/src/views/configuration/cities/AddCity.js @@ -0,0 +1,217 @@ +import React, { useEffect, useState } from 'react' +import Button from '@material-ui/core/Button' +import { Link, useParams, useNavigate } from 'react-router-dom' + +import swal from 'sweetalert' +import axios from 'axios' +import { isAutheticated } from 'src/auth' + + +const AddCity = () => { + const token = isAutheticated(); + const navigate = useNavigate() + const [statesData, setStatesData] = useState([]) + const [data, setData] = useState({ + city_name: '', + state: '', + _id: 'Loading', + createdAt: new Date(), + }) + const [loading, setLoading] = useState(false) + const [limiter, setLimiter] = useState({ + city_name: 30, + city_nameHas: 30, + }) + + const getNewId = () => { + axios + .get(`/api/city/newid`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setData((prev) => ({ ...prev, _id: res.data.data._id })) + }) + .catch((err) => { }) + axios + .get(`/api/state`, { + headers: { 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}` }, + }) + .then((res) => { + setStatesData(res.data.data) + }) + .catch((err) => { + console.log(err) + }) + } + + useEffect(() => { + getNewId() + }, []) + + const handleChange = (e) => { + if (e.target.type === 'text') { + if (e.target.value.length === limiter[e.target.id] + 1) return + setLimiter((prev) => ({ + ...prev, + [e.target.id + 'Has']: prev[e.target.id] - e.target.value.length, + })) + } + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + const handleSubmit = () => { + if (data.city_name.trim() === '' || data.state.trim() === '') { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + axios + .post(`/api/city`, data, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + swal({ + title: 'Added', + text: 'City added successfully!', + icon: 'success', + button: 'Return', + }) + setLoading(false) + navigate.push('/cities', { replace: true }) + }) + .catch((err) => { + setLoading(false) + swal({ + title: 'Warning', + text: 'Something went wrong!', + icon: 'error', + button: 'Retry', + dangerMode: true + }) + }) + } + + return ( +
+
+
+
+
+ Add City +
+
+

+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+ + handleChange(e)} + /> +

+ Remaining characters : {limiter.city_nameHas} +

+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ ) +} + +export default AddCity diff --git a/src/views/configuration/cities/Cities.js b/src/views/configuration/cities/Cities.js new file mode 100644 index 0000000..96ad62d --- /dev/null +++ b/src/views/configuration/cities/Cities.js @@ -0,0 +1,342 @@ +import React, { useEffect } from 'react' +import Button from '@material-ui/core/Button' +import { useState } from 'react' +import { Link } from 'react-router-dom' +import axios from 'axios' + +import swal from 'sweetalert' +import { isAutheticated } from 'src/auth' + +const Cities = () => { + const token = isAutheticated(); + + const [loading, setLoading] = useState(true) + const [success, setSuccess] = useState(true) + const [citiesData, setCitiesData] = useState([]) + + const [currentPage, setCurrentPage] = useState(1) + const [itemPerPage, setItemPerPage] = useState(10) + const [showData, setShowData] = useState(citiesData) + + const handleShowEntries = (e) => { + setCurrentPage(1) + setItemPerPage(e.target.value) + } + + const getCategories = () => { + axios + .get(`/api/city`, { + headers: { 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}` }, + }) + .then((res) => { + setCitiesData(res.data.data) + setLoading(false) + }) + .catch((err) => { + console.log(err) + setLoading(false) + }) + } + + useEffect(() => { + getCategories() + }, [success]) + + useEffect(() => { + const loadData = () => { + const indexOfLastPost = currentPage * itemPerPage + const indexOfFirstPost = indexOfLastPost - itemPerPage + setShowData(citiesData.slice(indexOfFirstPost, indexOfLastPost)) + } + loadData() + }, [currentPage, itemPerPage, citiesData]) + + 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/city/${id}`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setSuccess((prev) => !prev) + }) + .catch((err) => { + swal({ + title: 'Warning', + text: 'Something went wrong!', + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + }) + } + + return ( +
+
+
+
+
+
+
+ Cities +
+ +
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + {!loading && showData.length === 0 && ( + + + + )} + {loading ? ( + + + + ) : ( + showData.map((city, i) => { + return ( + + + + + + + + ) + }) + )} + +
City NameState NameCreated OnActions
+
No Data Available
+
+ Loading... +
{city.city_name}{city.state?.state_name} + {new Date(city.createdAt).toLocaleString('en-IN', { + weekday: 'short', + month: 'short', + day: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + hour12: true, + })} + + + + + + + +
+
+ +
+
+
+ Showing {currentPage * itemPerPage - itemPerPage + 1} to{' '} + {Math.min(currentPage * itemPerPage, citiesData.length)} of{' '} + {citiesData.length} entries +
+
+ +
+
+
    +
  • + setCurrentPage((prev) => prev - 1)} + > + Previous + +
  • + + {!(currentPage - 1 < 1) && ( +
  • + setCurrentPage((prev) => prev - 1)} + > + {currentPage - 1} + +
  • + )} + +
  • + + {currentPage} + +
  • + + {!( + (currentPage + 1) * itemPerPage - itemPerPage > + citiesData.length - 1 + ) && ( +
  • + { + setCurrentPage((prev) => prev + 1) + }} + > + {currentPage + 1} + +
  • + )} + +
  • + citiesData.length - 1 + ) + ? 'paginate_button page-item next' + : 'paginate_button page-item next disabled' + } + > + setCurrentPage((prev) => prev + 1)} + > + Next + +
  • +
+
+
+
+
+
+
+
+
+
+
+ ) +} + +export default Cities diff --git a/src/views/configuration/cities/EditCity.js b/src/views/configuration/cities/EditCity.js new file mode 100644 index 0000000..65cc090 --- /dev/null +++ b/src/views/configuration/cities/EditCity.js @@ -0,0 +1,230 @@ +import React, { useEffect, useState } from 'react' +import Button from '@material-ui/core/Button' +import { Link, useNavigate, useParams } from 'react-router-dom' +import swal from 'sweetalert' +import axios from 'axios' + +import { isAutheticated } from 'src/auth' + + +const EditCity = () => { + const id = useParams()?.id + const token = isAutheticated(); + const navigate = useNavigate() + const [statesData, setStatesData] = useState([]) + const [data, setData] = useState({ + city_name: '', + state: '', + _id: 'Loading', + createdAt: new Date(), + }) + const [loading, setLoading] = useState(false) + const [limiter, setLimiter] = useState({ + city_name: 30, + city_nameHas: 30, + }) + + const getCategory = () => { + axios + .get(`$/api/city/${id}`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setData((prev) => ({ + ...prev, + ...res.data?.data, + })) + setLimiter((prev) => ({ + ...prev, + city_nameHas: prev.city_name - res.data?.data?.city_name.length, + })) + }) + .catch((err) => { }) + axios + .get(`/api/state`, { + headers: { 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}` }, + }) + .then((res) => { + setStatesData(res.data.data) + }) + .catch((err) => { + console.log(err) + }) + } + + useEffect(() => { + getCategory() + }, []) + + const handleChange = (e) => { + if (e.target.type === 'text') { + if (e.target.value.length === limiter[e.target.id] + 1) return + setLimiter((prev) => ({ + ...prev, + [e.target.id + 'Has']: prev[e.target.id] - e.target.value.length, + })) + } + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + const handleSubmit = () => { + if (data.city_name.trim() === '' || data.state.trim() === '') { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + axios + .patch(`/api/city/${id}`, data, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + swal({ + title: 'Updated', + text: 'City updated successfully!', + icon: 'success', + button: 'Close', + }) + setLoading(false) + navigate('/cities', { replace: true }) + }) + .catch((err) => { + setLoading(false) + swal({ + title: 'Warning', + text: 'Something went wrong!', + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + + return ( +
+
+
+
+
+ Edit City +
+
+

+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+ + handleChange(e)} + /> +

+ Remaining characters : {limiter.city_nameHas} +

+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ ) +} + +export default EditCity diff --git a/src/views/configuration/states/AddState.js b/src/views/configuration/states/AddState.js new file mode 100644 index 0000000..d8402c7 --- /dev/null +++ b/src/views/configuration/states/AddState.js @@ -0,0 +1,172 @@ +import React, { useEffect, useState } from 'react' +import Button from '@material-ui/core/Button' +import { Link, useNavigate } from 'react-router-dom' +import swal from 'sweetalert' +import axios from 'axios' +import { isAutheticated } from 'src/auth' + + +const AddState = () => { + const token = isAutheticated() + const navigate = useNavigate() + const [data, setData] = useState({ + state_code: '', + state_name: '', + }) + const [loading, setLoading] = useState(false) + const [limiter, setLimiter] = useState({ + state_code: 10, + state_name: 50, + state_codeHas: 10, + state_nameHas: 50, + }) + + const handleChange = (e) => { + if (e.target.id === 'state_code' && /^\D+$/.test(e.target.value)) return + if (e.target.type === 'text') { + if (e.target.value.length === limiter[e.target.id] + 1) return + setLimiter((prev) => ({ + ...prev, + [e.target.id + 'Has']: prev[e.target.id] - e.target.value.length, + })) + } + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + const handleSubmit = () => { + if (data.state_code.trim() === '' || data.state_name.trim() === '') { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + axios + .post(`/api/state`, data, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + swal({ + title: 'Added', + text: 'State added successfully!', + icon: 'success', + button: 'Return', + }) + setLoading(false) + navigate('/states', { replace: true }) + }) + .catch((err) => { + setLoading(false) + swal({ + title: 'Warning', + text: 'Something went wrong!', + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + + return ( +
+
+
+
+
+ Add State +
+
+

+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+ + handleChange(e)} + /> +

+ Remaining characters : {limiter.state_nameHas} +

+
+
+ + handleChange(e)} + /> +

+ Remaining characters : {limiter.state_codeHas} +

+
+
+
+
+
+
+ ) +} + +export default AddState diff --git a/src/views/configuration/states/EditStates.js b/src/views/configuration/states/EditStates.js new file mode 100644 index 0000000..f21585b --- /dev/null +++ b/src/views/configuration/states/EditStates.js @@ -0,0 +1,199 @@ +import React, { useEffect, useState } from 'react' +import Button from '@material-ui/core/Button' +import { Link, useNavigate, useParams } from 'react-router-dom' +import swal from 'sweetalert' +import axios from 'axios' +import { isAutheticated } from 'src/auth' + + +const EditState = () => { + const id = useParams()?.id + const token = isAutheticated() + const navigate = useNavigate() + const [data, setData] = useState({ + state_code: '', + state_name: '', + }) + const [loading, setLoading] = useState(false) + const [limiter, setLimiter] = useState({ + state_code: 10, + state_name: 50, + state_codeHas: 10, + state_nameHas: 50, + }) + + const getCategory = () => { + axios + .get(`/api/state/${id}`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setData((prev) => ({ + ...prev, + ...res.data?.data, + })) + setLimiter((prev) => ({ + ...prev, + state_nameHas: prev.state_name - res.data?.data?.state_name.length, + state_codeHas: prev.state_code - res.data?.data?.state_code?.toString()?.length, + })) + }) + .catch((err) => { }) + } + + useEffect(() => { + getCategory() + }, []) + + const handleChange = (e) => { + if (e.target.id === 'state_code' && /^\D+$/.test(e.target.value)) return + if (e.target.type === 'text') { + if (e.target.value.length === limiter[e.target.id] + 1) return + setLimiter((prev) => ({ + ...prev, + [e.target.id + 'Has']: prev[e.target.id] - e.target.value.length, + })) + } + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + const handleSubmit = () => { + if (data.state_code.trim() === '' || data.state_name.trim() === '') { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + axios + .patch(`/api/state/${id}`, data, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + swal({ + title: 'Updated', + text: 'State updated successfully!', + icon: 'success', + button: 'Close', + }) + setLoading(false) + navigate('/states', { replace: true }) + }) + .catch((err) => { + setLoading(false) + swal({ + title: 'Warning', + text: 'Something went wrong!', + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + + return ( +
+
+
+
+
+ Edit State +
+
+

+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+ + handleChange(e)} + /> +

+ Remaining characters : {limiter.state_nameHas} +

+
+
+ + handleChange(e)} + /> +

+ Remaining characters : {limiter.state_codeHas} +

+
+
+
+
+
+
+ ) +} + +export default EditState diff --git a/src/views/configuration/states/States.js b/src/views/configuration/states/States.js new file mode 100644 index 0000000..ae2404f --- /dev/null +++ b/src/views/configuration/states/States.js @@ -0,0 +1,342 @@ +import React, { useEffect } from 'react' +import Button from '@material-ui/core/Button' +import { useState } from 'react' +import { Link } from 'react-router-dom' + +import axios from 'axios' + +import swal from 'sweetalert' +import { isAutheticated } from 'src/auth' + +const States = () => { + const token = isAutheticated() + const [loading, setLoading] = useState(true) + const [success, setSuccess] = useState(true) + const [statesData, setStatesData] = useState([]) + + const [currentPage, setCurrentPage] = useState(1) + const [itemPerPage, setItemPerPage] = useState(10) + const [showData, setShowData] = useState(statesData) + + const handleShowEntries = (e) => { + setCurrentPage(1) + setItemPerPage(e.target.value) + } + + const getCategories = () => { + axios + .get(`/api/state`, { + headers: { 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}` }, + }) + .then((res) => { + setStatesData(res.data.data) + setLoading(false) + }) + .catch((err) => { + console.log(err) + setLoading(false) + }) + } + + useEffect(() => { + getCategories() + }, [success]) + + useEffect(() => { + const loadData = () => { + const indexOfLastPost = currentPage * itemPerPage + const indexOfFirstPost = indexOfLastPost - itemPerPage + setShowData(statesData.slice(indexOfFirstPost, indexOfLastPost)) + } + loadData() + }, [currentPage, itemPerPage, statesData]) + + 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/state/${id}`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setSuccess((prev) => !prev) + }) + .catch((err) => { + swal({ + title: 'Warning', + text: 'Something went wrong!', + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + }) + } + + return ( +
+
+
+
+
+
+
+ States +
+ +
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + {!loading && showData.length === 0 && ( + + + + )} + {loading ? ( + + + + ) : ( + showData.map((city, i) => { + return ( + + + + + + + + ) + }) + )} + +
State NameState Code (GST)Created OnActions
+
No Data Available
+
+ Loading... +
{city.state_name}{city.state_code} + {new Date(city.createdAt).toLocaleString('en-IN', { + weekday: 'short', + month: 'short', + day: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + hour12: true, + })} + + + + + + + +
+
+ +
+
+
+ Showing {currentPage * itemPerPage - itemPerPage + 1} to{' '} + {Math.min(currentPage * itemPerPage, statesData.length)} of{' '} + {statesData.length} entries +
+
+ +
+
+
    +
  • + setCurrentPage((prev) => prev - 1)} + > + Previous + +
  • + + {!(currentPage - 1 < 1) && ( +
  • + setCurrentPage((prev) => prev - 1)} + > + {currentPage - 1} + +
  • + )} + +
  • + + {currentPage} + +
  • + + {!( + (currentPage + 1) * itemPerPage - itemPerPage > + statesData.length - 1 + ) && ( +
  • + { + setCurrentPage((prev) => prev + 1) + }} + > + {currentPage + 1} + +
  • + )} + +
  • + statesData.length - 1 + ) + ? 'paginate_button page-item next' + : 'paginate_button page-item next disabled' + } + > + setCurrentPage((prev) => prev + 1)} + > + Next + +
  • +
+
+
+
+
+
+
+
+
+
+
+ ) +} + +export default States diff --git a/src/views/dashboard/Dashboard.js b/src/views/dashboard/Dashboard.js index 9aa67bd..aff2ff8 100644 --- a/src/views/dashboard/Dashboard.js +++ b/src/views/dashboard/Dashboard.js @@ -25,98 +25,98 @@ const Dashboard = () => { }, [token]); - //2nd - const [category, setCategory] = useState([]) - const getAllCategory = useCallback(async () => { - let res = await axios.get( - `/api/category/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data.category[0].image.url) - setCategory(res.data.category) - }, [token]); + // //2nd + // const [category, setCategory] = useState([]) + // const getAllCategory = useCallback(async () => { + // let res = await axios.get( + // `/api/category/getAll`, + // { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // } + // ); + // // console.log(res.data.category[0].image.url) + // setCategory(res.data.category) + // }, [token]); - //3 requiment - const [requirement, setRequirement] = useState([]) - // console.log(token) - const getRequirement = useCallback(async () => { - let res = await axios.get( - `/api/requirement/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); + // //3 requiment + // const [requirement, setRequirement] = useState([]) + // // console.log(token) + // const getRequirement = useCallback(async () => { + // let res = await axios.get( + // `/api/requirement/getAll`, + // { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // } + // ); - setRequirement(res.data.Requirement) + // setRequirement(res.data.Requirement) - }, [token]); - //4 news - const [news, setNews] = useState([]) + // }, [token]); + // //4 news + // const [news, setNews] = useState([]) - const getNews = useCallback(async () => { - let res = await axios.get( - `/api/news/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); + // const getNews = useCallback(async () => { + // let res = await axios.get( + // `/api/news/getAll`, + // { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // } + // ); - setNews(res.data.news) + // setNews(res.data.news) - }, [token]); - //5 offers - const [offer, setOffer] = useState([]) + // }, [token]); + // //5 offers + // const [offer, setOffer] = useState([]) - const getOffer = useCallback(async () => { - let res = await axios.get( - `/api/offer/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - setOffer(res.data.offer) + // const getOffer = useCallback(async () => { + // let res = await axios.get( + // `/api/offer/getAll`, + // { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // } + // ); + // // console.log(res.data) + // setOffer(res.data.offer) - }, [token]); - //6 event - const [event, setEvent] = useState([]) - const getEvent = useCallback(async () => { - let res = await axios.get( - `/api/event/getAll`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - // console.log(res.data) - setEvent(res.data.Event) + // }, [token]); + // //6 event + // const [event, setEvent] = useState([]) + // const getEvent = useCallback(async () => { + // let res = await axios.get( + // `/api/event/getAll`, + // { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // } + // ); + // // console.log(res.data) + // setEvent(res.data.Event) - }, [token]); - useEffect(() => { - getAllUsers(); - getAllCategory() - getRequirement() - getNews() - getOffer() - getEvent() - }, [getAllUsers, getAllCategory, getRequirement, getNews, getOffer, getEvent]); + // }, [token]); + // useEffect(() => { + // getAllUsers(); + // getAllCategory() + // getRequirement() + // getNews() + // getOffer() + // getEvent() + // }, [getAllUsers, getAllCategory, getRequirement, getNews, getOffer, getEvent]); return ( <> - + ) diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index 6ea9d81..71924ef 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -1,5 +1,5 @@ import React, { useEffect } from 'react' -import { Link } from 'react-router-dom' +import { Link, useNavigate } from 'react-router-dom' import { CButton, CCard, @@ -36,7 +36,7 @@ const Login = () => { /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i, ) const validPasswordRegex = RegExp(/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{7,}$/) - const history = useHistory(); + const history = useNavigate(); // const handleChange = (e) => (event) => { // setAuth({ ...auth, [e]: event.target.value }); @@ -110,7 +110,7 @@ const Login = () => { // console.log(response.data) const data = response.data if (data.user.role === 'admin') { - history.push('/dashboard') + history('/dashboard') setLoading(false); window.location.reload() } @@ -188,7 +188,7 @@ const Login = () => {
- + Forgot password.? diff --git a/src/views/pages/register/Change_password.js b/src/views/pages/register/Change_password.js index 115bc9d..121b482 100644 --- a/src/views/pages/register/Change_password.js +++ b/src/views/pages/register/Change_password.js @@ -17,12 +17,12 @@ import ClipLoader from "react-spinners/ClipLoader"; import axios from 'axios' import { isAutheticated } from 'src/auth' import Swal from 'sweetalert2' -import { useHistory } from 'react-router-dom' +import { useNavigate } from 'react-router-dom' const Register = () => { const [loading, setLoading] = useState(false); - const history = useHistory(); + const history = useNavigate(); const [user, setUser] = useState({ oldPassword: '', newPassword: '', @@ -107,7 +107,7 @@ const Register = () => { confirmButtonColor: '#303c54', iconColor: '#303c54' }).then(() => { - history.push('/dashboard') + history('/dashboard') }); } diff --git a/src/views/pages/register/ForgotPassword.js b/src/views/pages/register/ForgotPassword.js index cb1e857..0aecbcd 100644 --- a/src/views/pages/register/ForgotPassword.js +++ b/src/views/pages/register/ForgotPassword.js @@ -17,11 +17,11 @@ import { } from '@coreui/react' import CIcon from '@coreui/icons-react' import { cilEnvelopeLetter, cilEnvelopeOpen, cilLockLocked, cilUser } from '@coreui/icons' -import { Link, useHistory } from 'react-router-dom'; +import { Link, useNavigate } from 'react-router-dom'; import swal from 'sweetalert'; const ForgotPassword = () => { - const history = useHistory() + const navigate = useNavigate() const [loading, setLoading] = useState(false); const [email, setEmail] = useState() // console.log(email) @@ -36,7 +36,7 @@ const ForgotPassword = () => { setLoading(false) // alert("Email Send Successfully! please check your mail for reset password") swal("success!", "Email Send Successfully! please check your Email for new password", "success"); - history.push("/"); + navigate("/"); } } catch (e) { diff --git a/src/views/pages/register/NewRegister.js b/src/views/pages/register/NewRegister.js index c1c28b1..bdbb7a6 100644 --- a/src/views/pages/register/NewRegister.js +++ b/src/views/pages/register/NewRegister.js @@ -3,7 +3,7 @@ import { CForm, CCol, CFormLabel, CContainer, CRow, CCardGroup, CCard, CCardBody import { Country, City } from 'country-state-city' import { useState, useEffect } from 'react' import axios from 'axios' -import { useHistory } from 'react-router-dom' +import { useNavigate } from 'react-router-dom' const NewRegister = () => { const [cities, setCities] = useState([]) const [ownerDetails, setOwnerDetails] = useState({ @@ -14,7 +14,7 @@ const NewRegister = () => { country: 'India', city: '' }) - const history = useHistory() + const history = useNavigate() const [processing, setProcessing] = useState(false) const countries = Country.getAllCountries() useEffect(() => { @@ -48,7 +48,7 @@ const NewRegister = () => { // token: res.data.token, // })); - history.push('/') + history('/') } } diff --git a/src/views/widgets/WidgetsDropdown.js b/src/views/widgets/WidgetsDropdown.js index ba45361..6f9636d 100644 --- a/src/views/widgets/WidgetsDropdown.js +++ b/src/views/widgets/WidgetsDropdown.js @@ -12,8 +12,10 @@ import { getStyle } from '@coreui/utils' import { CChartBar, CChartLine } from '@coreui/react-chartjs' import CIcon from '@coreui/icons-react' import { cilArrowBottom, cilArrowTop, cilOptions } from '@coreui/icons' +import { BeatLoader } from 'react-spinners' +{/* */ } -const WidgetsDropdown = ({ users, category, requirement, news, offer, event }) => { +const WidgetsDropdown = ({ users }) => { return ( @@ -22,6 +24,7 @@ const WidgetsDropdown = ({ users, category, requirement, news, offer, event }) = color="primary" value={ <> + {users.length} } From 3fc579218e4470458528a152918c11ecfe432826 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Tue, 24 Jan 2023 18:12:19 +0530 Subject: [PATCH 46/48] temple --- package.json | 3 +- src/_nav.js | 10 + src/index.js | 3 +- src/routes.js | 9 +- src/views/Temples/AddTemple.js | 407 ++++++++++++++++++ src/views/Temples/EditTemple.js | 423 +++++++++++++++++++ src/views/Temples/OverLayButton.js | 29 ++ src/views/Temples/Temples.js | 351 +++++++++++++++ src/views/configuration/Address.js | 1 + src/views/configuration/Logo.js | 25 +- src/views/configuration/cities/AddCity.js | 16 +- src/views/configuration/cities/Cities.js | 2 +- src/views/configuration/cities/EditCity.js | 7 +- src/views/configuration/states/AddState.js | 6 +- src/views/configuration/states/EditStates.js | 6 +- src/views/configuration/states/States.js | 6 +- 16 files changed, 1265 insertions(+), 39 deletions(-) create mode 100644 src/views/Temples/AddTemple.js create mode 100644 src/views/Temples/EditTemple.js create mode 100644 src/views/Temples/OverLayButton.js create mode 100644 src/views/Temples/Temples.js diff --git a/package.json b/package.json index ab6c116..eedbba6 100644 --- a/package.json +++ b/package.json @@ -53,9 +53,10 @@ "prop-types": "^15.7.2", "react": "18.2", "react-app-polyfill": "^2.0.0", + "react-bootstrap": "^2.7.0", "react-date-picker": "^8.4.0", "react-datepicker": "^4.8.0", - "react-dom": "^17.0.2", + "react-dom": "^18.0.0", "react-paginate": "^8.1.3", "react-redux": "^7.2.6", "react-router-dom": "^6.7.0", diff --git a/src/_nav.js b/src/_nav.js index 04cbe08..69db563 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -13,12 +13,16 @@ import { cilFilterSquare, cilMedicalCross, cilMoney, + cilMugTea, cilNewspaper, cilNotes, cilPencil, cilPuzzle, + cilSitemap, cilSpeedometer, cilStar, + cilTablet, + cilTennisBall, cilUser, @@ -35,6 +39,12 @@ const _nav = [ }, + { + component: CNavItem, + name: 'Temples', + icon: , + to: '/temples', + }, { component: CNavItem, diff --git a/src/index.js b/src/index.js index 0cc7962..62a8094 100644 --- a/src/index.js +++ b/src/index.js @@ -11,7 +11,8 @@ import store from './store' import axios from 'axios' const setupAxios = () => { - axios.defaults.baseURL = 'http://localhost:5000' + axios.defaults.baseURL = 'https://atpapi.checkapp.one' + //axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/routes.js b/src/routes.js index 0cea1a3..fa3f33a 100644 --- a/src/routes.js +++ b/src/routes.js @@ -22,6 +22,10 @@ import Socialmedia from './views/configuration/Socialmedia.js' import Address from './views/configuration/Address.js' import Logo from './views/configuration/Logo.js' import Login from './views/pages/login/Login' +//temple +import Temples from './views/Temples/Temples' +import AddTemple from './views/Temples/AddTemple' +import EditTemple from './views/Temples/EditTemple' const routes = [ @@ -29,7 +33,10 @@ const routes = [ { path: '/change_password', name: 'Change Password', element: Change_Password }, { path: '/profile/edit', name: 'Edit Profile', element: EditProfile }, // { path: '/profile', name: 'Profile', element: Profile }, - + //Temple + { path: '/temples', name: 'Temples', element: Temples }, + { path: '/temple/add', name: 'Add Temple', element: AddTemple }, + { path: '/temple/edit/:id', name: 'Edit Temples', element: EditTemple }, //dashboard diff --git a/src/views/Temples/AddTemple.js b/src/views/Temples/AddTemple.js new file mode 100644 index 0000000..491ffa3 --- /dev/null +++ b/src/views/Temples/AddTemple.js @@ -0,0 +1,407 @@ + + + +import React, { useEffect, useState } from 'react' +import Button from '@material-ui/core/Button' +import { Link, useNavigate } from 'react-router-dom' +import swal from 'sweetalert' +import axios from 'axios' +import { isAutheticated } from 'src/auth' +// import { WebsiteURL } from '../WebsiteURL' + +const AddTemple = () => { + const [WebsiteURL, setWebsiteURL] = useState('https://reinventuniforms.in/') + const token = isAutheticated() + const navigate = useNavigate() + const [data, setData] = useState({ + image: '', + imageURL: '', + name: '', + address_line_1: '', + address_line_2: '', + city: '', + state_name: '', + short_url: '', + // pan: '', + // business_name: '', + // gstin: '', + // option: '', + }) + + const [cities, setCities] = useState([]) + + const [loading, setLoading] = useState(false) + const [limiter, setLimiter] = useState({ + name: 100, + nameHas: 100, + }) + + const getRequired = () => { + axios + .get(`/api/city`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setCities([...res.data.data]) + }) + .catch((err) => { }) + } + + useEffect(() => { + getRequired() + }, []) + + const handleChange = (e) => { + if (e.target.id === 'name') { + if (e.target.value.length === limiter[e.target.id] + 1) return + setLimiter((prev) => ({ + ...prev, + [e.target.id + 'Has']: prev[e.target.id] - e.target.value.length, + })) + setData((prev) => ({ ...prev, short_url: e.target.value.toLowerCase().replace(/\s+/g, '-') })) + } + if (e.target.id === 'city') { + const city = cities.filter((m) => e.target.value === m?._id) + setData((prev) => ({ ...prev, state_name: city[0]?.state?.state_name || '' })) + } + if (e.target.id === 'image') { + if ( + e.target.files[0]?.type === 'image/jpeg' || + e.target.files[0]?.type === 'image/png' || + e.target.files[0]?.type === 'image/jpg' + ) { + setData((prev) => ({ + ...prev, + imageURL: URL.createObjectURL(e.target.files[0]), + image: e.target.files[0], + })) + return + } else { + swal({ + title: 'Warning', + text: 'Upload jpg, jpeg, png only.', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + setData((prev) => ({ + ...prev, + imageURL: '', + image: '', + })) + e.target.value = null + return + } + } + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + const handleSubmit = () => { + if ( + data.name.trim() === '' || + // data.pan.trim() === '' || + // data.business_name.trim() === '' || + // data.gstin.trim() === '' || + // data.option.trim() === '' || + data.address_line_1.trim() === '' || + data.address_line_2.trim() === '' || + data.city === '' || + data.short_url === '' || + data.state_name === '' || + data.imageURL.trim() === '' + ) { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + const formData = new FormData() + formData.set('name', data.name) + // formData.set('pan', data.pan) + // formData.set('business_name', data.business_name) + // formData.set('gstin', data.gstin) + // formData.set('option', data.option) + formData.set('address_line_1', data.address_line_1) + formData.set('address_line_2', data.address_line_2) + formData.set('city', data.city) + formData.set('state_name', data.state_name) + formData.set('url', WebsiteURL + data.short_url + '/login') + formData.set('short_url', data.short_url) + formData.append('image', data.image) + axios + .post(`/api/temple`, formData, { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then((res) => { + swal({ + title: 'Added', + text: 'Temple added successfully!', + icon: 'success', + button: 'Return', + }) + setLoading(false) + navigate('/temples', { replace: true }) + }) + .catch((err) => { + setLoading(false) + const message = err.response?.data?.message || 'Something went wrong!' + swal({ + title: 'Warning', + text: message, + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + + return ( +
+
+
+
+
+ Add Temple +
+
+

+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+ + handleChange(e)} + /> +

Remaining characters : {limiter.nameHas}

+
+ {/*
+ + handleChange(e)} + /> +
*/} +
+ + handleChange(e)} + /> +
+
+ + handleChange(e)} + /> +
+ {/*
+ + handleChange(e)} + /> +
*/} + {/*
+ + handleChange(e)} + /> +
*/} +
+ + +
+
+ + +
+
+
+
+
+
+
+
+ +
+ + {WebsiteURL} + + handleChange(e)} + /> +
+
+ {/*
+ + +
*/} +
+ + handleChange(e)} + /> +

Upload jpg, jpeg and png only*

+
+
+ Uploaded Image will be shown here +
+
+
+
+
+
+ ) +} + +export default AddTemple diff --git a/src/views/Temples/EditTemple.js b/src/views/Temples/EditTemple.js new file mode 100644 index 0000000..7e1894b --- /dev/null +++ b/src/views/Temples/EditTemple.js @@ -0,0 +1,423 @@ + + +import React, { useEffect, useState } from 'react' +import Button from '@material-ui/core/Button' +import { Link, useNavigate, useParams } from 'react-router-dom' +import swal from 'sweetalert' +import axios from 'axios' +import { isAutheticated } from 'src/auth' + +const EditTemple = () => { + + + const [WebsiteURL, setWebsiteURL] = useState('https://reinventuniforms.in/') + const id = useParams()?.id + const token = isAutheticated() + const navigate = useNavigate() + const [data, setData] = useState({ + image: '', + imageURL: '', + name: '', + address_line_1: '', + address_line_2: '', + city: '', + state_name: '', + short_url: '', + pan: '', + business_name: '', + gstin: '', + option: '', + }) + const [cities, setCities] = useState([]) + const [loading, setLoading] = useState(false) + const [limiter, setLimiter] = useState({ + name: 100, + nameHas: 100, + }) + + const getRequired = async () => { + await axios + .get(`/api/city`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setCities([...res.data.data]) + }) + .catch((err) => { }) + axios + .get(`/api/Temple/withoutpopulate/${id}`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setData((prev) => ({ + ...prev, + ...res.data?.data, + city: res.data?.data?.city, + imageURL: res.data?.data?.banner?.url, + })) + setLimiter((prev) => ({ ...prev, nameHas: prev.name - res.data?.data?.name?.length || 0 })) + }) + .catch((err) => { }) + } + + useEffect(() => { + getRequired() + }, []) + + useEffect(() => { + const setStateName = () => { + const city = cities.filter((m) => data.city === m?._id) + setData((prev) => ({ ...prev, state_name: city[0]?.state?.state_name || '' })) + } + setStateName() + }, [data.city]) + + const handleChange = (e) => { + if (e.target.id === 'name') { + if (e.target.value.length === limiter[e.target.id] + 1) return + setLimiter((prev) => ({ + ...prev, + [e.target.id + 'Has']: prev[e.target.id] - e.target.value.length, + })) + // setData((prev) => ({ ...prev, short_url: e.target.value.toLowerCase().replace(/\s+/g, '-') })) + } + if (e.target.id === 'image') { + if ( + e.target.files[0]?.type === 'image/jpeg' || + e.target.files[0]?.type === 'image/png' || + e.target.files[0]?.type === 'image/jpg' + ) { + setData((prev) => ({ + ...prev, + imageURL: URL.createObjectURL(e.target.files[0]), + image: e.target.files[0], + })) + return + } else { + swal({ + title: 'Warning', + text: 'Upload jpg, jpeg, png only.', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + setData((prev) => ({ + ...prev, + imageURL: '', + image: '', + })) + e.target.value = null + return + } + } + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + const handleSubmit = () => { + if ( + data.name.trim() === '' || + data.address_line_1.trim() === '' || + data.address_line_2.trim() === '' || + data.city === '' || + data.short_url === '' || + data.state_name === '' + ) { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + const formData = new FormData() + formData.set('name', data.name) + // formData.set('pan', data.pan) + // formData.set('business_name', data.business_name) + // formData.set('gstin', data.gstin) + // formData.set('option', data.option) + formData.set('address_line_1', data.address_line_1) + formData.set('address_line_2', data.address_line_2) + formData.set('city', data.city) + formData.set('state_name', data.state_name) + formData.set('url', WebsiteURL + data.short_url + '/login') + formData.set('short_url', data.short_url) + formData.append('image', data.image) + axios + .patch(`/api/Temple/${id}`, formData, { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then((res) => { + swal({ + title: 'Updated', + text: 'Temple updated successfully!', + icon: 'success', + button: 'Return', + }) + setLoading(false) + navigate('/temples', { replace: true }) + }) + .catch((err) => { + setLoading(false) + const message = err.response?.data?.message || 'Something went wrong!' + swal({ + title: 'Warning', + text: message, + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + + return ( +
+
+
+
+
+ Edit Temple +
+
+

+
+ +
+ + + + +
+
+
+
+ +
+
+
+
+
+ + handleChange(e)} + /> +

Remaining characters : {limiter.nameHas}

+
+ {/*
+ + handleChange(e)} + /> +
*/} +
+ + handleChange(e)} + /> +
+
+ + handleChange(e)} + /> +
+ {/*
+ + handleChange(e)} + /> +
+
+ + handleChange(e)} + /> +
*/} +
+ + +
+
+ + +
+
+
+
+
+
+
+
+ +
+ + {WebsiteURL} + + handleChange(e)} + /> +
+
+ {/*
+ + +
*/} +
+ + handleChange(e)} + /> +

Upload jpg, jpeg and png only*

+
+
+ Uploaded Image will be shown here +
+
+
+
+
+
+ ) +} + +export default EditTemple diff --git a/src/views/Temples/OverLayButton.js b/src/views/Temples/OverLayButton.js new file mode 100644 index 0000000..2a49a68 --- /dev/null +++ b/src/views/Temples/OverLayButton.js @@ -0,0 +1,29 @@ +import React, { useState, useRef } from 'react' +import Button from 'react-bootstrap/Button' +import Overlay from 'react-bootstrap/Overlay' +import Tooltip from 'react-bootstrap/Tooltip' + +function OverLayButton(props) { + const { url } = props?.data || '' + const [show, setShow] = useState(false) + const target = useRef(null) + + return ( + + + + {(props) => ( + + + {url} + + + )} + + + ) +} + +export default OverLayButton diff --git a/src/views/Temples/Temples.js b/src/views/Temples/Temples.js new file mode 100644 index 0000000..c523c33 --- /dev/null +++ b/src/views/Temples/Temples.js @@ -0,0 +1,351 @@ + +import React, { useEffect } from 'react' +import Button from '@material-ui/core/Button' +import { useState } from 'react' +import { Link } from 'react-router-dom' +import axios from 'axios' +import swal from 'sweetalert' +import OverLayButton from './OverLayButton.js' +import { isAutheticated } from 'src/auth.js' + +const Temples = () => { + const token = isAutheticated() + const [loading, setLoading] = useState(true) + const [success, setSuccess] = useState(true) + const [TemplesData, setTemplesData] = useState([]) + + const [currentPage, setCurrentPage] = useState(1) + const [itemPerPage, setItemPerPage] = useState(10) + const [showData, setShowData] = useState(TemplesData) + + const handleShowEntries = (e) => { + setCurrentPage(1) + setItemPerPage(e.target.value) + } + + const getCategories = () => { + axios + .get(`/api/temple`, { + headers: { 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}` }, + }) + .then((res) => { + setTemplesData(res.data.data) + setLoading(false) + }) + .catch((err) => { + console.log(err) + setLoading(false) + }) + } + + useEffect(() => { + getCategories() + }, [success]) + + useEffect(() => { + const loadData = () => { + const indexOfLastPost = currentPage * itemPerPage + const indexOfFirstPost = indexOfLastPost - itemPerPage + setShowData(TemplesData.slice(indexOfFirstPost, indexOfLastPost)) + } + loadData() + }, [currentPage, itemPerPage, TemplesData]) + + 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/temple/${id}`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setSuccess((prev) => !prev) + }) + .catch((err) => { + swal({ + title: 'Warning', + text: 'Something went wrong!', + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + }) + } + + return ( +
+
+
+
+
+
+
+ Temples +
+ +
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + + {!loading && showData.length === 0 && ( + + + + )} + {loading ? ( + + + + ) : ( + showData.map((temple, i) => { + return ( + + + + + + + + ) + }) + )} + +
Temple NameLogoCity Created OnActions
+
No Data Available
+
+ Loading... +
{temple.name} + Test Image + {temple?.city?.city_name} + {new Date(temple.createdAt).toLocaleString('en-IN', { + month: '2-digit', + day: 'numeric', + year: 'numeric', + // hour: 'numeric', + // minute: 'numeric', + // hour12: true, + })} + + + + + + + + + + + +
+
+ +
+
+
+ Showing {currentPage * itemPerPage - itemPerPage + 1} to{' '} + {Math.min(currentPage * itemPerPage, TemplesData.length)} of{' '} + {TemplesData.length} entries +
+
+ +
+
+
    +
  • + setCurrentPage((prev) => prev - 1)} + > + Previous + +
  • + + {!(currentPage - 1 < 1) && ( +
  • + setCurrentPage((prev) => prev - 1)} + > + {currentPage - 1} + +
  • + )} + +
  • + + {currentPage} + +
  • + + {!( + (currentPage + 1) * itemPerPage - itemPerPage > + TemplesData.length - 1 + ) && ( +
  • + { + setCurrentPage((prev) => prev + 1) + }} + > + {currentPage + 1} + +
  • + )} + +
  • + TemplesData.length - 1 + ) + ? 'paginate_button page-item next' + : 'paginate_button page-item next disabled' + } + > + setCurrentPage((prev) => prev + 1)} + > + Next + +
  • +
+
+
+
+
+
+
+
+
+
+
+ ) +} + +export default Temples diff --git a/src/views/configuration/Address.js b/src/views/configuration/Address.js index 9535cf4..e06dcb5 100644 --- a/src/views/configuration/Address.js +++ b/src/views/configuration/Address.js @@ -6,6 +6,7 @@ import { Link } from 'react-router-dom' import swal from 'sweetalert' import { isAutheticated } from 'src/auth' + function Address() { const token = isAutheticated() const [loading, setLoading] = useState(false) diff --git a/src/views/configuration/Logo.js b/src/views/configuration/Logo.js index f94b75f..362cc1a 100644 --- a/src/views/configuration/Logo.js +++ b/src/views/configuration/Logo.js @@ -31,7 +31,7 @@ function Logo() { configDetails.data.result.map((item) => { setHeaderlogo(item?.logo[0]?.Headerlogo) setFooterlogo(item?.logo[0]?.Footerlogo) - setAdminlogo(item?.logo[0].Adminlogo) + setAdminlogo(item?.logo[0]?.Adminlogo) }) } getConfiguration() @@ -58,17 +58,19 @@ function Logo() { formdata.append('Footerlogo', Footerlogo) formdata.append('Adminlogo', Adminlogo) - let res = await axios.post(`/api/config/logo`, formdata, { + await axios.post(`/api/config/logo`, formdata, { headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'multipart/formdata', 'Access-Control-Allow-Origin': '*', }, - }) - if (res) { + }).then((res) => { setLoading(false) swal('Success!', res.data.message, res.data.status) } + ).catch(error => { + console.log(error) + }) } return ( @@ -93,25 +95,26 @@ function Logo() { htmlFor="basicpill-phoneno-input" className="label-100 mt-3" > - Logo htmlFor Website Header(148 x 48 px) + {/* Logo htmlFor Website Header(148 x 48 px) */}
{ 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 col-md-6 d-inline-block" + className="form-control input-field mb-3 col-md-6 d-inline-block" id="basicpill-phoneno-input" /> {display ? ( - header logo - Logo htmlFor Website Footer(148 x 48 px) + {/* Logo htmlFor Website Footer(148 x 48 px) */} {' '} {display ? ( @@ -154,7 +157,7 @@ function Logo() { htmlFor="basicpill-phoneno-input" className="label-100 mt-2 row ms-1" > - Logo htmlFor Admin Header(148 x 48 px) + {/* Logo htmlFor Admin Header(148 x 48 px) */} { const [data, setData] = useState({ city_name: '', state: '', - _id: 'Loading', - createdAt: new Date(), + }) const [loading, setLoading] = useState(false) const [limiter, setLimiter] = useState({ @@ -89,10 +88,11 @@ const AddCity = () => { button: 'Return', }) setLoading(false) - navigate.push('/cities', { replace: true }) + navigate('/cities', { replace: true }) }) .catch((err) => { setLoading(false) + swal({ title: 'Warning', text: 'Something went wrong!', @@ -198,14 +198,8 @@ const AddCity = () => { )}
-
- - -
-
- - -
+ +
diff --git a/src/views/configuration/cities/Cities.js b/src/views/configuration/cities/Cities.js index 96ad62d..2451325 100644 --- a/src/views/configuration/cities/Cities.js +++ b/src/views/configuration/cities/Cities.js @@ -152,7 +152,7 @@ const Cities = () => { className="table table-centered table-nowrap" style={{ border: '1px solid' }} > - + City Name State Name diff --git a/src/views/configuration/cities/EditCity.js b/src/views/configuration/cities/EditCity.js index 65cc090..2407ae4 100644 --- a/src/views/configuration/cities/EditCity.js +++ b/src/views/configuration/cities/EditCity.js @@ -15,8 +15,7 @@ const EditCity = () => { const [data, setData] = useState({ city_name: '', state: '', - _id: 'Loading', - createdAt: new Date(), + }) const [loading, setLoading] = useState(false) const [limiter, setLimiter] = useState({ @@ -206,7 +205,7 @@ const EditCity = () => { )}
-
+ {/*
@@ -218,7 +217,7 @@ const EditCity = () => { className="form-control" disabled /> -
+ */} diff --git a/src/views/configuration/states/AddState.js b/src/views/configuration/states/AddState.js index d8402c7..5d7ff52 100644 --- a/src/views/configuration/states/AddState.js +++ b/src/views/configuration/states/AddState.js @@ -34,7 +34,7 @@ const AddState = () => { } const handleSubmit = () => { - if (data.state_code.trim() === '' || data.state_name.trim() === '') { + if (data.state_name.trim() === '') { swal({ title: 'Warning', text: 'Fill all mandatory fields', @@ -145,7 +145,7 @@ const AddState = () => { Remaining characters : {limiter.state_nameHas}

-
+ {/*
@@ -160,7 +160,7 @@ const AddState = () => {

Remaining characters : {limiter.state_codeHas}

-
+
*/} diff --git a/src/views/configuration/states/EditStates.js b/src/views/configuration/states/EditStates.js index f21585b..a047bbf 100644 --- a/src/views/configuration/states/EditStates.js +++ b/src/views/configuration/states/EditStates.js @@ -61,7 +61,7 @@ const EditState = () => { } const handleSubmit = () => { - if (data.state_code.trim() === '' || data.state_name.trim() === '') { + if (data.state_name.trim() === '') { swal({ title: 'Warning', text: 'Fill all mandatory fields', @@ -172,7 +172,7 @@ const EditState = () => { Remaining characters : {limiter.state_nameHas}

-
+ {/*
@@ -187,7 +187,7 @@ const EditState = () => {

Remaining characters : {limiter.state_codeHas}

-
+
*/} diff --git a/src/views/configuration/states/States.js b/src/views/configuration/states/States.js index ae2404f..77713eb 100644 --- a/src/views/configuration/states/States.js +++ b/src/views/configuration/states/States.js @@ -152,10 +152,10 @@ const States = () => { className="table table-centered table-nowrap" style={{ border: '1px solid' }} > - + State Name - State Code (GST) + {/* State Code (GST) */} Created On Actions @@ -179,7 +179,7 @@ const States = () => { return ( {city.state_name} - {city.state_code} + {/* {city.state_code} */} {new Date(city.createdAt).toLocaleString('en-IN', { weekday: 'short', From 5833b24b1f0b9953118b2aabe0a4571559f0ab9c Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 25 Jan 2023 16:11:18 +0530 Subject: [PATCH 47/48] product --- src/_nav.js | 8 +- src/index.js | 2 +- src/routes.js | 8 + src/views/Products/AddProduct.js | 1 + src/views/Products/Products.js | 384 +++++++++++++++++++++++++++++++ 5 files changed, 401 insertions(+), 2 deletions(-) create mode 100644 src/views/Products/AddProduct.js create mode 100644 src/views/Products/Products.js diff --git a/src/_nav.js b/src/_nav.js index 69db563..95574c7 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -6,6 +6,7 @@ import { cilBell, cilCalculator, cilChartPie, + cilClipboard, cilCommand, cilCursor, cilDrop, @@ -38,7 +39,12 @@ const _nav = [ }, - + { + component: CNavItem, + name: 'Products', + icon: , + to: '/products', + }, { component: CNavItem, name: 'Temples', diff --git a/src/index.js b/src/index.js index 62a8094..bc52aee 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ import axios from 'axios' const setupAxios = () => { axios.defaults.baseURL = 'https://atpapi.checkapp.one' - //axios.defaults.baseURL = 'http://localhost:5000' + // axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/routes.js b/src/routes.js index fa3f33a..c8cae34 100644 --- a/src/routes.js +++ b/src/routes.js @@ -26,6 +26,7 @@ import Login from './views/pages/login/Login' import Temples from './views/Temples/Temples' import AddTemple from './views/Temples/AddTemple' import EditTemple from './views/Temples/EditTemple' +import Products from './views/Products/Products' const routes = [ @@ -33,6 +34,13 @@ const routes = [ { path: '/change_password', name: 'Change Password', element: Change_Password }, { path: '/profile/edit', name: 'Edit Profile', element: EditProfile }, // { path: '/profile', name: 'Profile', element: Profile }, + + + //Product + { path: '/products', name: 'products', element: Products }, + { path: '/product/add', name: 'Add products', element: AddTemple }, + { path: '/products/edit/:id', name: 'Edit products', element: EditTemple }, + //Temple { path: '/temples', name: 'Temples', element: Temples }, { path: '/temple/add', name: 'Add Temple', element: AddTemple }, diff --git a/src/views/Products/AddProduct.js b/src/views/Products/AddProduct.js new file mode 100644 index 0000000..0b04d79 --- /dev/null +++ b/src/views/Products/AddProduct.js @@ -0,0 +1 @@ +rafce diff --git a/src/views/Products/Products.js b/src/views/Products/Products.js new file mode 100644 index 0000000..441f730 --- /dev/null +++ b/src/views/Products/Products.js @@ -0,0 +1,384 @@ +import React, { useState, useEffect } from 'react' +import { Link } from 'react-router-dom' +import Button from '@material-ui/core/Button' +import { useNavigate } from 'react-router-dom' +import axios from 'axios' +import { isAutheticated } from 'src/auth' + +const Products = () => { + const token = isAutheticated() + const navigate = useNavigate() + const [loading, setLoading] = useState(true) + const [success, setSuccess] = useState(true) + const [productsData, setProductsData] = useState([]) + + const [currentPage, setCurrentPage] = useState(1) + const [itemPerPage, setItemPerPage] = useState(10) + const [showData, setShowData] = useState(productsData) + + const handleShowEntries = (e) => { + setCurrentPage(1) + setItemPerPage(e.target.value) + } + + const getProductsData = async () => { + axios + .get(`/api/product`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setProductsData(res.data?.data) + setLoading(false) + }) + .catch((err) => { + setLoading(false) + }) + } + + useEffect(() => { + getProductsData() + }, [success]) + + useEffect(() => { + const loadData = () => { + const indexOfLastPost = currentPage * itemPerPage + const indexOfFirstPost = indexOfLastPost - itemPerPage + setShowData(productsData.slice(indexOfFirstPost, indexOfLastPost)) + } + loadData() + }, [currentPage, itemPerPage, productsData]) + + 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/product/${id}`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setSuccess((prev) => !prev) + }) + .catch((err) => { + swal({ + title: 'Warning', + text: 'Something went wrong!', + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + }) + } + + return ( +
+
+
+
+
+
+
+ Products +
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + + + {!loading && showData.length === 0 && ( + + + + )} + {loading ? ( + + + + ) : ( + showData.map((product, i) => { + return ( + + + + + + + + + ) + }) + )} + +
Product NameCategoryPreviewMaster PriceAdded OnActions
+
No Data Available
+
+ Loading... +
{product.name}{product.category?.name} + {product?.images && ( + <> + preview + + )} + ₹ {product.master_price} + {new Date(product.createdAt).toLocaleString('en-IN', { + weekday: 'short', + month: 'short', + day: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + hour12: true, + })} + + + + + + + + + + + + + +
+
+ +
+
+
+ Showing {currentPage * itemPerPage - itemPerPage + 1} to{' '} + {Math.min(currentPage * itemPerPage, productsData.length)} of{' '} + {productsData.length} entries +
+
+ +
+
+
    +
  • + setCurrentPage((prev) => prev - 1)} + > + Previous + +
  • + + {!(currentPage - 1 < 1) && ( +
  • + setCurrentPage((prev) => prev - 1)} + > + {currentPage - 1} + +
  • + )} + +
  • + + {currentPage} + +
  • + + {!( + (currentPage + 1) * itemPerPage - itemPerPage > + productsData.length - 1 + ) && ( +
  • + { + setCurrentPage((prev) => prev + 1) + }} + > + {currentPage + 1} + +
  • + )} + +
  • + productsData.length - 1 + ) + ? 'paginate_button page-item next' + : 'paginate_button page-item next disabled' + } + > + setCurrentPage((prev) => prev + 1)} + > + Next + +
  • +
+
+
+
+
+
+
+
+
+
+
+ ) +} + +export default Products From 43934a7e9a642083800fd8cb365bf6eb954c6ce8 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Wed, 25 Jan 2023 23:18:53 +0530 Subject: [PATCH 48/48] product --- src/components/AppSidebar.js | 40 +++- src/index.js | 2 +- src/routes.js | 11 +- src/views/Products/AddProduct.js | 299 ++++++++++++++++++++++++++- src/views/Products/EditProduct.js | 333 ++++++++++++++++++++++++++++++ src/views/Products/Products.js | 43 ++-- src/views/Products/ViewProduct.js | 128 ++++++++++++ 7 files changed, 821 insertions(+), 35 deletions(-) create mode 100644 src/views/Products/EditProduct.js create mode 100644 src/views/Products/ViewProduct.js diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index d49650a..da51ca6 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useEffect, useState } from 'react' import { useSelector, useDispatch } from 'react-redux' import { CSidebar, CSidebarBrand, CSidebarNav, CSidebarToggler } from '@coreui/react' @@ -14,12 +14,45 @@ import 'simplebar/dist/simplebar.min.css' // sidebar nav config import navigation from '../_nav' +import { isAutheticated } from 'src/auth' +import axios from 'axios' +import { Link } from 'react-router-dom' const AppSidebar = () => { const dispatch = useDispatch() const unfoldable = useSelector((state) => state.sidebarUnfoldable) const sidebarShow = useSelector((state) => state.sidebarShow) + ///----------------------// + const [loading, setLoading] = useState(false) + + const token = isAutheticated() + + // urlcreated images + + 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}`, + }, + }) + console.log(configDetails.data.result) + configDetails.data.result.map((item) => { + setHeaderlogoUrl(item?.logo[0]?.Headerlogo) + setFooterlogoUrl(item?.logo[0]?.Footerlogo) + setAdminlogoUrl(item?.logo[0]?.Adminlogo) + }) + } + getConfiguration() + }, []) + + console.log(HeaderlogoUrl) + //---------------------------// return ( { dispatch({ type: 'set', sidebarShow: visible }) }} > - + {/* */} -

ATP Dashboard

+ + {HeaderlogoUrl ? {`${<h1ATP Dashboard}`} /> :

ATP Dashboard

} {/* */}
diff --git a/src/index.js b/src/index.js index bc52aee..62a8094 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ import axios from 'axios' const setupAxios = () => { axios.defaults.baseURL = 'https://atpapi.checkapp.one' - // axios.defaults.baseURL = 'http://localhost:5000' + //axios.defaults.baseURL = 'http://localhost:5000' axios.defaults.headers = { 'Cache-Control': 'no-cache,no-store', 'Pragma': 'no-cache', diff --git a/src/routes.js b/src/routes.js index c8cae34..9062e71 100644 --- a/src/routes.js +++ b/src/routes.js @@ -27,6 +27,10 @@ import Temples from './views/Temples/Temples' import AddTemple from './views/Temples/AddTemple' import EditTemple from './views/Temples/EditTemple' import Products from './views/Products/Products' +//product +import AddProduct from './views/Products/AddProduct' +import EditProduct from './views/Products/EditProduct' +import ViewProduct from './views/Products/ViewProduct' const routes = [ @@ -38,8 +42,11 @@ const routes = [ //Product { path: '/products', name: 'products', element: Products }, - { path: '/product/add', name: 'Add products', element: AddTemple }, - { path: '/products/edit/:id', name: 'Edit products', element: EditTemple }, + { path: '/product/add', name: 'Add products', element: AddProduct }, + { path: '/product/edit/:id', name: 'Edit products', element: EditProduct }, + { path: '/product/view/:id', name: 'view products', element: ViewProduct }, + + //Temple { path: '/temples', name: 'Temples', element: Temples }, diff --git a/src/views/Products/AddProduct.js b/src/views/Products/AddProduct.js index 0b04d79..d435137 100644 --- a/src/views/Products/AddProduct.js +++ b/src/views/Products/AddProduct.js @@ -1 +1,298 @@ -rafce + + + +import React, { useEffect, useState } from 'react' +import Button from '@material-ui/core/Button' +import { Link, useNavigate } from 'react-router-dom' +import swal from 'sweetalert' +import axios from 'axios' +import { isAutheticated } from 'src/auth' +// import { WebsiteURL } from '../WebsiteURL' + +const AddProduct = () => { + const token = isAutheticated() + const navigate = useNavigate() + const [data, setData] = useState({ + image: '', + imageURL: '', + name: '', + description: '', + + base_Price: '', + price_Level_2: '', + price_Level_3: '' + + }) + + + const [loading, setLoading] = useState(false) + const handleChange = (e) => { + + if (e.target.id === 'image') { + if ( + e.target.files[0]?.type === 'image/jpeg' || + e.target.files[0]?.type === 'image/png' || + e.target.files[0]?.type === 'image/jpg' + ) { + setData((prev) => ({ + ...prev, + imageURL: URL.createObjectURL(e.target.files[0]), + image: e.target.files[0], + })) + return + } else { + swal({ + title: 'Warning', + text: 'Upload jpg, jpeg, png only.', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + setData((prev) => ({ + ...prev, + imageURL: '', + image: '', + })) + e.target.value = null + return + } + } + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + + + const handleSubmit = () => { + if ( + data.name.trim() === '' || + + data.description.trim() === '' || + data.base_Price === '' || + data.price_Level_2 === '' || + data.price_Level_3 === '' || + data.imageURL.trim() === '' + ) { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + const formData = new FormData() + formData.set('name', data.name) + + formData.set('description', data.description) + formData.set('base_Price', data.base_Price) + formData.set('price_Level_2', data.price_Level_2) + formData.set('price_Level_3', data.price_Level_3) + formData.append('image', data.image) + + + axios + .post(`/api/product/create/`, formData, { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then((res) => { + swal({ + title: 'Added', + text: 'Product added successfully!', + icon: 'success', + button: 'Return', + }) + setLoading(false) + navigate('/products', { replace: true }) + }) + .catch((err) => { + setLoading(false) + const message = err.response?.data?.message || 'Something went wrong!' + swal({ + title: 'Warning', + text: message, + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + + return ( +
+
+
+
+
+ Add Product +
+
+

+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+ + handleChange(e)} + /> + {data.name ? <> + {25 - data.name.length} characters left + : <> + + }
+ +
+ + handleChange(e)} + /> + {data.description ? <> + {100 - data.description.length} characters left + : <> + } +
+ + +
+ + handleChange(e)} + /> +

Upload jpg, jpeg and png only*

+
+
+ Uploaded Image will be shown here + +
+ + +
+
+
+
+
+
+ +
+ + handleChange(e)} + + /> +
+
+ + handleChange(e)} + + + /> +
+
+ + handleChange(e)} + + + /> +
+
+
+
+
+
+ ) +} + +export default AddProduct diff --git a/src/views/Products/EditProduct.js b/src/views/Products/EditProduct.js new file mode 100644 index 0000000..1091b1b --- /dev/null +++ b/src/views/Products/EditProduct.js @@ -0,0 +1,333 @@ + + + +import React, { useEffect, useState } from 'react' +import Button from '@material-ui/core/Button' +import { Link, useNavigate, useParams } from 'react-router-dom' +import swal from 'sweetalert' +import axios from 'axios' +import { isAutheticated } from 'src/auth' +// import { WebsiteURL } from '../WebsiteURL' + +const EditProduct = () => { + const token = isAutheticated() + const navigate = useNavigate() + const id = useParams()?.id + const [data, setData] = useState({ + image: '', + imageURL: '', + name: '', + description: '', + + base_Price: '', + price_Level_2: '', + price_Level_3: '' + + }) + + + const [loading, setLoading] = useState(false) + + //get Productdata + const getProduct = async () => { + + axios + .get(`/api/product/getOne/${id}`, { + headers: { + 'Access-Control-Allow-Origin': '*', + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + setData((prev) => ({ + ...prev, + ...res.data?.product, + imageURL: res.data?.product?.image?.url, + })) + }) + .catch((err) => { }) + } + + useEffect(() => { + getProduct() + }, []) + + + + + + + + + + + const handleChange = (e) => { + + if (e.target.id === 'image') { + if ( + e.target.files[0]?.type === 'image/jpeg' || + e.target.files[0]?.type === 'image/png' || + e.target.files[0]?.type === 'image/jpg' + ) { + setData((prev) => ({ + ...prev, + imageURL: URL.createObjectURL(e.target.files[0]), + image: e.target.files[0], + })) + return + } else { + swal({ + title: 'Warning', + text: 'Upload jpg, jpeg, png only.', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + setData((prev) => ({ + ...prev, + imageURL: '', + image: '', + })) + e.target.value = null + return + } + } + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + + + const handleSubmit = () => { + if ( + data.name.trim() === '' || + + data.description.trim() === '' || + data.base_Price === '' || + data.price_Level_2 === '' || + data.price_Level_3 === '' || + data.imageURL.trim() === '' + ) { + swal({ + title: 'Warning', + text: 'Fill all mandatory fields', + icon: 'error', + button: 'Close', + dangerMode: true, + }) + return + } + setLoading(true) + const formData = new FormData() + formData.set('name', data.name) + + formData.set('description', data.description) + formData.set('base_Price', data.base_Price) + formData.set('price_Level_2', data.price_Level_2) + formData.set('price_Level_3', data.price_Level_3) + formData.append('image', data.image) + + + axios + .put(`/api//product/update/${id}`, formData, { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then((res) => { + swal({ + title: 'Added', + text: 'Product Edited successfully!', + icon: 'success', + button: 'Return', + }) + setLoading(false) + navigate('/products', { replace: true }) + }) + .catch((err) => { + setLoading(false) + const message = err.response?.data?.message || 'Something went wrong!' + swal({ + title: 'Warning', + text: message, + icon: 'error', + button: 'Retry', + dangerMode: true, + }) + }) + } + console.log(data) + return ( +
+
+
+
+
+ Edit Product +
+
+

+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+ + handleChange(e)} + /> + {data.name ? <> + {25 - data.name.length} characters left + : <> + + }
+ +
+ + handleChange(e)} + /> + {data.description ? <> + {100 - data.description.length} characters left + : <> + } +
+ + +
+ + handleChange(e)} + /> +

Upload jpg, jpeg and png only*

+
+
+ Uploaded Image will be shown here + +
+ + +
+
+
+
+
+
+ +
+ + handleChange(e)} + + /> +
+
+ + handleChange(e)} + + + /> +
+
+ + handleChange(e)} + + + /> +
+
+
+
+
+
+ ) +} + +export default EditProduct diff --git a/src/views/Products/Products.js b/src/views/Products/Products.js index 441f730..a4dbc81 100644 --- a/src/views/Products/Products.js +++ b/src/views/Products/Products.js @@ -21,15 +21,17 @@ const Products = () => { setItemPerPage(e.target.value) } + + const getProductsData = async () => { axios - .get(`/api/product`, { + .get(`/api/product/getAll/`, { headers: { Authorization: `Bearer ${token}`, }, }) .then((res) => { - setProductsData(res.data?.data) + setProductsData(res.data?.product) setLoading(false) }) .catch((err) => { @@ -58,7 +60,7 @@ const Products = () => { }).then((value) => { if (value === true) { axios - .delete(`/api/product/${id}`, { + .delete(`/api/product/delete/${id}`, { headers: { 'Access-Control-Allow-Origin': '*', Authorization: `Bearer ${token}`, @@ -108,7 +110,7 @@ const Products = () => { textTransform: 'capitalize', }} onClick={() => { - navigate('/products/add', { replace: true }) + navigate('/product/add', { replace: true }) }} > Add Product @@ -155,10 +157,10 @@ const Products = () => { > + Product Name - Category - Preview - Master Price + Thumbnail + Base Price Added On Actions @@ -182,15 +184,14 @@ const Products = () => { return ( {product.name} - {product.category?.name} - {product?.images && ( + {product?.image && ( <> - preview + preview )} - ₹ {product.master_price} + ₹{product.base_Price} {new Date(product.createdAt).toLocaleString('en-IN', { weekday: 'short', @@ -203,22 +204,8 @@ const Products = () => { })} - - - - + + - + + {/*
+
    +
  1. + CMD-App +
  2. +
  3. CMD-Category
  4. +
+
*/} + + + + {/* */} + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + {/* + */} + + + + + + + + + +
Id {product?._id}
Name {product?.name}
image + +
Description{product?.description}
Base Price{product?.base_Price}
Price Level 2{product?.price_Level_2}
Price Level 3{product?.price_Level_3}
Product Time{product?.time}
Location{product?.location}
Created On + {new Date(`${product?.createdAt}`).toDateString()} , {`${formatAMPM(product?.createdAt)}`} +
Updated At + {new Date(`${product?.updatedAt}`).toDateString()} , {`${formatAMPM(product?.updatedAt)}`} +
+
+ + + {/* */} +
+
+
+
+ + {/* */} + + + ); +} + +export default ViewProduct;