From f797f442be7914259857fdca7832a13dcbd03003 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Mon, 27 Feb 2023 18:12:22 +0530 Subject: [PATCH] contact req --- src/_nav.js | 8 + src/index.js | 4 +- src/routes.js | 6 + src/views/Complaints/Complaints.js | 3 +- .../ContactRequests/AddContactRequest.js | 242 +++++++++++++ src/views/ContactRequests/ContactRequests.js | 338 ++++++++++++++++++ 6 files changed, 598 insertions(+), 3 deletions(-) create mode 100644 src/views/ContactRequests/AddContactRequest.js create mode 100644 src/views/ContactRequests/ContactRequests.js diff --git a/src/_nav.js b/src/_nav.js index 5b6f404..c1a0113 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -11,6 +11,7 @@ import { cilClipboard, cilCommand, cilCompress, + cilContact, cilCursor, cilDrop, cilFace, @@ -64,6 +65,13 @@ const _nav = [ icon: , to: '/complaints', }, + { + component: CNavItem, + name: 'Contact Requests', + icon: , + to: '/contact/request', + }, + { component: CNavItem, name: 'Information', diff --git a/src/index.js b/src/index.js index 2ede575..c7cc467 100644 --- a/src/index.js +++ b/src/index.js @@ -11,8 +11,8 @@ import axios from 'axios' import { store } from './redux/store'; const setupAxios = () => { - //axios.defaults.baseURL = 'https://atpapi.checkapp.one' - 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 cd7cd23..598d831 100644 --- a/src/routes.js +++ b/src/routes.js @@ -56,6 +56,8 @@ import AddComplaint from './views/Complaints/AddComplaint' import ViewComplaint from './views/Complaints/ViewComplaint' import ApplicationName from './views/configuration/ApplicationName' import CopyrightMessage from './views/configuration/CopyrightMessage' +import ContactRequests from './views/ContactRequests/ContactRequests' +import AddContactRequest from './views/ContactRequests/AddContactRequest' const routes = [ @@ -75,6 +77,10 @@ const routes = [ { path: '/departure/add', name: 'Add Departure', element: AddDeparture }, { path: '/product/edit/:id', name: 'Edit products', element: EditProduct }, { path: '/product/view/:id', name: 'view products', element: ViewProduct }, + //Contact Requests + { path: '/contact/request', name: 'Contact Requests', element: ContactRequests }, + { path: '/contact/request/new', name: 'AddContact Request', element: AddContactRequest }, + // { path: '/complaint/view/:id', name: 'view Complain', element: ViewComplaint }, //Complaints { path: '/complaints', name: 'Complaints', element: Complaints }, { path: '/complaint/new', name: 'Add Complaint', element: AddComplaint }, diff --git a/src/views/Complaints/Complaints.js b/src/views/Complaints/Complaints.js index 8af0336..54940a0 100644 --- a/src/views/Complaints/Complaints.js +++ b/src/views/Complaints/Complaints.js @@ -162,8 +162,9 @@ const Complaints = () => { - ID + Mobile or EMail + Complaints Date & Time diff --git a/src/views/ContactRequests/AddContactRequest.js b/src/views/ContactRequests/AddContactRequest.js new file mode 100644 index 0000000..9a7faff --- /dev/null +++ b/src/views/ContactRequests/AddContactRequest.js @@ -0,0 +1,242 @@ + + + + + + + + + + + +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 AddContactRequest = () => { + const token = isAutheticated() + const navigate = useNavigate() + const [data, setData] = useState({ + + name: '', + EmailOrMobile: '', + message: '', + + + + }) + + + const [loading, setLoading] = useState(false) + + + + + + + + const handleChange = (e) => { + + + setData((prev) => ({ ...prev, [e.target.id]: e.target.value })) + } + + + + + const handleSubmit = () => { + if ( + data.name.trim() === '' || + data.EmailOrMobile.trim() === '' || + + + data.message.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('EmailOrMobile', data.EmailOrMobile) + + + formData.set('message', data.message) + + + + axios + .post(`/api/contact/request/new/`, formData, { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/formdata', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then((res) => { + swal({ + title: 'Added', + text: 'Contact Requests added successfully!', + icon: 'success', + button: 'ok', + }) + setLoading(false) + navigate('/contact/request', { 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 ( +
+
+
+
+
+ New Contact Request +
+
+

+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+ + handleChange(e)} + /> + {data.name ? <> + {25 - data.name.length} characters left + : <> + + }
+
+ + handleChange(e)} + /> + {data.EmailOrMobile ? <> + {25 - data.EmailOrMobile.length} characters left + : <> + + }
+ +
+ + + + {data.message ? <> + {500 - data.message.length} characters left + : <> + } +
+ + + {/*
+ +
+ +
*/} +
+
+
+ +
+
+ ) +} + +export default AddContactRequest diff --git a/src/views/ContactRequests/ContactRequests.js b/src/views/ContactRequests/ContactRequests.js new file mode 100644 index 0000000..469a076 --- /dev/null +++ b/src/views/ContactRequests/ContactRequests.js @@ -0,0 +1,338 @@ + +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 ContactRequests = () => { + const token = isAutheticated() + const navigate = useNavigate() + const [loading, setLoading] = useState(true) + const [success, setSuccess] = useState(true) + const [ContactRequestsData, setContactRequestsData] = useState([]) + + const [currentPage, setCurrentPage] = useState(1) + const [itemPerPage, setItemPerPage] = useState(10) + const [showData, setShowData] = useState(ContactRequestsData) + + const handleShowEntries = (e) => { + setCurrentPage(1) + setItemPerPage(e.target.value) + } + + + + const getContactRequestsData = async () => { + axios + .get(`/api/contact/request/getAll/`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => { + console.log(res.data) + setContactRequestsData(res.data?.contactRequest) + setLoading(false) + }) + .catch((err) => { + setLoading(false) + }) + } + + useEffect(() => { + getContactRequestsData() + }, [success]) + + useEffect(() => { + const loadData = () => { + const indexOfLastPost = currentPage * itemPerPage + const indexOfFirstPost = indexOfLastPost - itemPerPage + setShowData(ContactRequestsData.slice(indexOfFirstPost, indexOfLastPost)) + } + loadData() + }, [currentPage, itemPerPage, ContactRequestsData]) + + 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/delete/${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 ( +
+
+
+
+
+
+
+ Contact Requests +
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + + + + + {/* */} + + + + {!loading && showData.length === 0 && ( + + + + )} + {loading ? ( + + + + ) : ( + showData.map((product, i) => { + return ( + + + + + + + + + {/* */} + + + ) + }) + )} + +
NameEmail/MobileMessageDate & TimeAction
+
No Data Available
+
+ Loading... +
{product.name}{product.EmailOrMobile}{product.message} + {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, ContactRequestsData.length)} of{' '} + {ContactRequestsData.length} entries +
+
+ +
+
+
    +
  • + setCurrentPage((prev) => prev - 1)} + > + Previous + +
  • + + {!(currentPage - 1 < 1) && ( +
  • + setCurrentPage((prev) => prev - 1)} + > + {currentPage - 1} + +
  • + )} + +
  • + + {currentPage} + +
  • + + {!( + (currentPage + 1) * itemPerPage - itemPerPage > + ContactRequestsData.length - 1 + ) && ( +
  • + { + setCurrentPage((prev) => prev + 1) + }} + > + {currentPage + 1} + +
  • + )} + +
  • + ContactRequestsData.length - 1 + ) + ? 'paginate_button page-item next' + : 'paginate_button page-item next disabled' + } + > + setCurrentPage((prev) => prev + 1)} + > + Next + +
  • +
+
+
+
+
+
+
+
+
+
+
+ ) +} + +export default ContactRequests