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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name |
+ Email/Mobile |
+ Message |
+
+
+ Date & Time |
+
+
+ {/* Action | */}
+
+
+
+ {!loading && showData.length === 0 && (
+
+
+ No Data Available
+ |
+
+ )}
+ {loading ? (
+
+
+ Loading...
+ |
+
+ ) : (
+ showData.map((product, i) => {
+ return (
+
+ {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