diff --git a/src/_nav.js b/src/_nav.js
index f2b1fee..fdc6272 100644
--- a/src/_nav.js
+++ b/src/_nav.js
@@ -38,14 +38,6 @@ const _nav = [
icon: ,
group: "",
},
- {
- component: CNavItem,
- name: "Principal Distributor",
- icon: ,
- to: "/principal-distributor",
- group: "PrincipalDistributor",
- },
-
{
component: CNavGroup,
name: "Product Management",
@@ -76,6 +68,13 @@ const _nav = [
},
],
},
+ {
+ component: CNavItem,
+ name: "Principal Distributor",
+ icon: ,
+ to: "/principal-distributor",
+ group: "PrincipalDistributor",
+ },
{
component: CNavItem,
name: "Sales Coordinator",
@@ -90,6 +89,13 @@ const _nav = [
to: "/territorymanagers",
group: "TerritoryManager",
},
+ // {
+ // component: CNavItem,
+ // name: "retail Distributor",
+ // icon: ,
+ // to: "/retail-distributor",
+ // group: "RetailDistributor",
+ // },
{
component: CNavItem,
name: "Attendance",
diff --git a/src/routes.js b/src/routes.js
index 150b499..af91697 100644
--- a/src/routes.js
+++ b/src/routes.js
@@ -139,6 +139,7 @@ import AttendanceTerritoryManager from "./views/Attendance/AttendanceTerritoryMa
import SingleUserAttendance from "./views/Attendance/SingleUserAttendance";
import SingleUserleave from "./views/Leaves/SingleUserLeave";
import LeaveTerritoryManager from "./views/Leaves/LeaveTerritoryManager";
+import RetailDistributor from "./views/RetailDistributors/RetailDistributor";
const routes = [
//dashboard
@@ -294,6 +295,13 @@ const routes = [
element: Edittax,
navName: "Product Management",
},
+ // RetailDistributor
+ {
+ path: "/retail-distributor",
+ name: "RetailDistributor",
+ element: RetailDistributor,
+ navName: "RetailDistributor",
+ },
//----------------------- End Product Management Routes------------------------------------------------
//Departure
diff --git a/src/views/Attendance/AttendanceSalesCoordinator.js b/src/views/Attendance/AttendanceSalesCoordinator.js
index a61dd41..6d0db84 100644
--- a/src/views/Attendance/AttendanceSalesCoordinator.js
+++ b/src/views/Attendance/AttendanceSalesCoordinator.js
@@ -1,10 +1,11 @@
-import React, { useState, useEffect, useRef } from "react";
+import React, { useState, useEffect, useRef,useCallback } from "react";
import { Link } from "react-router-dom";
import axios from "axios";
import Button from "@material-ui/core/Button";
import { useNavigate } from "react-router-dom";
import { isAutheticated } from "src/auth";
import swal from "sweetalert";
+import debounce from 'lodash.debounce';
const AttendanceSalesCoordinator = () => {
const token = isAutheticated();
@@ -55,7 +56,14 @@ const AttendanceSalesCoordinator = () => {
useEffect(() => {
getSalesCoOrdinatorsData();
}, [success, itemPerPage, currentPage]);
+ const debouncedSearch = useCallback(debounce(() => {
+ setCurrentPage(1);
+ getSalesCoOrdinatorsData();
+ }, 500), []);
+ const handleSearchChange = () => {
+ debouncedSearch();
+ };
return (
@@ -119,6 +127,7 @@ const AttendanceSalesCoordinator = () => {
placeholder="SalesCoOrdinator name"
className="form-control"
ref={nameRef}
+ onChange={handleSearchChange}
disabled={loading}
/>
@@ -129,6 +138,7 @@ const AttendanceSalesCoordinator = () => {
placeholder="Mobile Number"
className="form-control"
ref={mobileRef}
+ onChange={handleSearchChange}
disabled={loading}
/>
@@ -137,6 +147,7 @@ const AttendanceSalesCoordinator = () => {
-
-
-
diff --git a/src/views/Attendance/AttendanceTerritoryManager.js b/src/views/Attendance/AttendanceTerritoryManager.js
index a54a817..d346bf6 100644
--- a/src/views/Attendance/AttendanceTerritoryManager.js
+++ b/src/views/Attendance/AttendanceTerritoryManager.js
@@ -1,10 +1,11 @@
-import React, { useState, useEffect, useRef } from "react";
+import React, { useState, useEffect, useRef,useCallback } from "react";
import { Link } from "react-router-dom";
import axios from "axios";
import Button from "@material-ui/core/Button";
import { useNavigate } from "react-router-dom";
import { isAutheticated } from "src/auth";
import swal from "sweetalert";
+import debounce from 'lodash.debounce';
const AttendanceTerritoryManager = () => {
const token = isAutheticated();
@@ -55,7 +56,14 @@ const AttendanceTerritoryManager = () => {
useEffect(() => {
getterritorymanagerData();
}, [ itemPerPage, currentPage]);
+ const debouncedSearch = useCallback(debounce(() => {
+ setCurrentPage(1);
+ getterritorymanagerData();
+ }, 500), []);
+ const handleSearchChange = () => {
+ debouncedSearch();
+ };
return (
@@ -119,6 +127,7 @@ const AttendanceTerritoryManager = () => {
placeholder="territorymanager name"
className="form-control"
ref={nameRef}
+ onChange={handleSearchChange}
disabled={loading}
/>
@@ -129,6 +138,7 @@ const AttendanceTerritoryManager = () => {
placeholder="Mobile Number"
className="form-control"
ref={mobileRef}
+ onChange={handleSearchChange}
disabled={loading}
/>
@@ -137,6 +147,7 @@ const AttendanceTerritoryManager = () => {
-
-
-
diff --git a/src/views/Leaves/LeaveSalesCoordinator.js b/src/views/Leaves/LeaveSalesCoordinator.js
index 37212ed..90ee797 100644
--- a/src/views/Leaves/LeaveSalesCoordinator.js
+++ b/src/views/Leaves/LeaveSalesCoordinator.js
@@ -1,10 +1,11 @@
-import React, { useState, useEffect, useRef } from "react";
+import React, { useState, useEffect, useRef,useCallback } from "react";
import { Link } from "react-router-dom";
import axios from "axios";
import Button from "@material-ui/core/Button";
import { useNavigate } from "react-router-dom";
import { isAutheticated } from "src/auth";
import swal from "sweetalert";
+import debounce from 'lodash.debounce';
const LeaveSalesCoordinator = () => {
const token = isAutheticated();
@@ -53,9 +54,13 @@ const LeaveSalesCoordinator = () => {
getSalesCoOrdinatorsData();
}, [currentPage, itemPerPage]);
- const handleFilter = () => {
+ const debouncedSearch = useCallback(debounce(() => {
setCurrentPage(1);
getSalesCoOrdinatorsData();
+ }, 500), []);
+
+ const handleSearchChange = () => {
+ debouncedSearch();
};
return (
@@ -121,6 +126,7 @@ const LeaveSalesCoordinator = () => {
placeholder="Sales Coordinator name"
className="form-control"
ref={nameRef}
+ onChange={handleSearchChange}
disabled={loading}
/>
@@ -131,6 +137,7 @@ const LeaveSalesCoordinator = () => {
placeholder="Mobile Number"
className="form-control"
ref={mobileRef}
+ onChange={handleSearchChange}
disabled={loading}
/>
@@ -139,6 +146,7 @@ const LeaveSalesCoordinator = () => {
-
-
-
diff --git a/src/views/Leaves/LeaveTerritoryManager.js b/src/views/Leaves/LeaveTerritoryManager.js
index 29e7e1c..ad57c29 100644
--- a/src/views/Leaves/LeaveTerritoryManager.js
+++ b/src/views/Leaves/LeaveTerritoryManager.js
@@ -1,10 +1,11 @@
-import React, { useState, useEffect, useRef } from "react";
+import React, { useState, useEffect, useRef,useCallback } from "react";
import { Link } from "react-router-dom";
import axios from "axios";
import Button from "@material-ui/core/Button";
import { useNavigate } from "react-router-dom";
import { isAutheticated } from "src/auth";
import swal from "sweetalert";
+import debounce from 'lodash.debounce';
const LeaveTerritoryManager = () => {
const token = isAutheticated();
@@ -53,9 +54,13 @@ const LeaveTerritoryManager = () => {
getterritorymanagersData();
}, [currentPage, itemPerPage]);
- const handleFilter = () => {
+ const debouncedSearch = useCallback(debounce(() => {
setCurrentPage(1);
- getterritorymanagersData();
+ getterritorymanagerData();
+ }, 500), []);
+
+ const handleSearchChange = () => {
+ debouncedSearch();
};
return (
@@ -121,6 +126,7 @@ const LeaveTerritoryManager = () => {
placeholder="Territory Manager name"
className="form-control"
ref={nameRef}
+ onChange={handleSearchChange}
disabled={loading}
/>
@@ -131,6 +137,7 @@ const LeaveTerritoryManager = () => {
placeholder="Mobile Number"
className="form-control"
ref={mobileRef}
+ onChange={handleSearchChange}
disabled={loading}
/>
@@ -139,6 +146,7 @@ const LeaveTerritoryManager = () => {
-
-
-
diff --git a/src/views/RetailDistributors/RetailDistributor.js b/src/views/RetailDistributors/RetailDistributor.js
new file mode 100644
index 0000000..b623087
--- /dev/null
+++ b/src/views/RetailDistributors/RetailDistributor.js
@@ -0,0 +1,295 @@
+import React, { useState, useEffect, useRef, useCallback } from "react";
+import { Link } from "react-router-dom";
+import axios from "axios";
+import Button from "@material-ui/core/Button";
+import { useNavigate } from "react-router-dom";
+import { isAutheticated } from "src/auth";
+import swal from "sweetalert";
+import debounce from 'lodash.debounce';
+
+const RetailDistributor = () => {
+ const token = isAutheticated();
+ const navigate = useNavigate();
+ const [loading, setLoading] = useState(false);
+ const [success, setSuccess] = useState(true);
+ const [retailDistributorsData, setRetailDistributorsData] = useState([]);
+
+ const nameRef = useRef();
+ const mobileRef = useRef();
+ const VerifyRetailDistributorRef = useRef();
+
+ const [currentPage, setCurrentPage] = useState(1);
+ const [itemPerPage, setItemPerPage] = useState(10);
+ const [totalData, setTotalData] = useState(0);
+
+ const getRetailDistributorsData = async () => {
+ setLoading(true);
+ try {
+ const res = await axios.get(`/api/retaildistributor/getAll/`, {
+ headers: {
+ Authorization: `Bearer ${token}`,
+ },
+ params: {
+ page: currentPage,
+ show: itemPerPage,
+ name: nameRef.current.value,
+ mobileNumber: mobileRef.current.value,
+ isVerified: VerifyRetailDistributorRef.current.value,
+ },
+ });
+ setRetailDistributorsData(res.data?.retailDistributors);
+ setTotalData(res.data?.total_data);
+ } catch (err) {
+ const msg = err?.response?.data?.message || "Something went wrong!";
+ swal({
+ title: "Error",
+ text: msg,
+ icon: "error",
+ button: "Retry",
+ dangerMode: true,
+ });
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ useEffect(() => {
+ getRetailDistributorsData();
+ }, [success, itemPerPage, currentPage]);
+
+ const debouncedSearch = useCallback(debounce(() => {
+ setCurrentPage(1);
+ getRetailDistributorsData();
+ }, 500), []);
+
+ const handleSearchChange = () => {
+ debouncedSearch();
+ };
+
+ const totalPages = Math.ceil(totalData / itemPerPage);
+
+ return (
+
+
+
+
+
+
+
+ Retail Distributors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID |
+ Trade Name |
+ Created On |
+ Mapped |
+ Action |
+
+
+
+
+ {loading ? (
+
+
+ Loading...
+ |
+
+ ) : retailDistributorsData?.length > 0 ? (
+ retailDistributorsData?.map((retailDistributor, i) => {
+ return (
+
+
+ {retailDistributor?.id}
+ |
+
+ {retailDistributor?.tradeName}
+ |
+
+ {new Date(
+ retailDistributor.createdAt
+ ).toLocaleString("en-IN", {
+ weekday: "short",
+ month: "short",
+ day: "numeric",
+ year: "numeric",
+ hour: "numeric",
+ minute: "numeric",
+ hour12: true,
+ })}
+ |
+
+
+ Principal Distributor: {retailDistributor.principalDistributor || 'N/A'}
+ Territory Manager: {retailDistributor.territoryManager || 'N/A'}
+ Sales Coordinator: {retailDistributor.salesCoordinator || 'N/A'}
+
+ |
+
+
+
+
+ |
+
+ );
+ })
+ ) : (
+
+
+ No Retail Distributor found!
+ |
+
+ )}
+
+
+
+
+
+
+ Showing {currentPage * itemPerPage - itemPerPage + 1} to{" "}
+ {Math.min(currentPage * itemPerPage, totalData)} of{" "}
+ {totalData} entries
+
+
+
+
+
+
+ -
+
+ setCurrentPage((prev) =>
+ prev > 1 ? prev - 1 : prev
+ )
+ }
+ >
+ Previous
+
+
+ -
+
+ setCurrentPage((prev) =>
+ prev < totalPages ? prev + 1 : prev
+ )
+ }
+ >
+ Next
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default RetailDistributor;