import React, { useEffect, useState } from "react";
import { Route, Routes, useNavigate } from "react-router-dom";
import "../Dashboard/dashboard.css";
import axios from "axios";
import TopNavbar from "./TopNavBar/TopNavbar";
import SideNavbar from "./SideNavBar/SideNavbar";
import Shareholder from "./Shareholder/Shareholder";
import DefaultDashboard from "./DefaultDashboard";
import News from "./News/News";
import Announcement from "./Announcement/Announcement";
import Profile from "./Profile/Profile";
import BonusList from "./Bonus/BonusList";
import Share from "./Share/Share";
import LogoutModal from "./TopNavBar/Logout/LogoutModal";
import BarChart from "../../component/BarChart/BarChart";
import baseUrl from "../../array/base/config";
import NewsDetail from "./News/NewsDetail";
import Certificate from "./ShareCertificate/Certificate";
import Events from "./Events/Events";
import SingleEventPage from "./Events/SingleEventPage";
import CompanyDetailsPage from "./Company/CompanyDetailsPage";
import ShareholderList from "./Sharetransfer/ShareholderList";
import Sharetransfer from "./Sharetransfer/Sharetransfer";
import ApplyShare from "./ApplyShare/ApplyShare";
import ShareContract from "./ShareContract/ShareContract";
import Karanama from "./ShareContract/Karanama";
import Documents from "./Documents/Documents";
import MultiStepForm from "./Sharetransferrequests/MultiStepForm";
import DocumentSinglePage from "./Documents/DocumentSinglePage";
import Report from "./Report/Report";
import ReportSinglePage from "./Report/ReportSinglePage";
import ShareTransfers from "./Sharetransferrequests/ShareTransfers";
import ShareFileSinglePage from "./ShareContract/ShareFileSinglePage";
import AnnouncementSinglePage from "./Announcement/AnnouncementSinglePage";
import PaymentProofForm from "./ShareContract/PaymentProofForm";
import { useGetUser, useGetUserRoles } from "../../apis/User";
import { useMemo } from "react";
import LoadingAnimation from "./Loading/LoadingAnimation";
import Invoice from "./ShareContract/Invoice";
const PageNotFound = React.lazy(() => import("../Pagenotfound"));
const ShareHistory = React.lazy(() => import("./Sharehistory/Sharehistory"));
/**
* Represents the dashboard page component.
* @module Dashboard
* @return {JSX.Element}
*/
const Dashboard = () => {
/**
* State to toggle the logout modal.
* @type {boolean}
* @default false
* @memberof module:Dashboard
* @name showLogoutMOdal
*/
const [showLogoutMOdal, setShowLogoutModal] = useState(false);
/**
* React dom hook to navigate to different routes.
* @memberof module:Dashboard
* @name navigate
* @type {NavigateFunction}
*/
const navigate = useNavigate();
/**
* State to toggle the mobile menu.
* @type {boolean}
* @default false
* @memberof module:Dashboard
* @name mobileMenu
*/
const [mobileMenu, setMobileMenu] = useState(false);
useEffect(() => {
document.body.style.overflowY = "hidden";
}, []);
/**
* React query hook to get user data.
* @memberof module:Dashboard
* @name useGetUser
*/
const { data: userData, isLoading: userLoading } = useGetUser();
/**
* React query hook to get user roles and eligibility data.
* @memberof module:Dashboard
* @name useGetUserRoles
*/
const { data: rolesData, isLoading: rolesLoading } = useGetUserRoles();
/**
* React memo hook to memoize user data.
* @memberof module:Dashboard
* @name user
* @type {*|{}}
*/
const user = useMemo(() => {
const temp = userData?.data?.data || {};
return temp;
}, [userData?.data]);
/**
* React memo hook to memoize user roles and eligibility data.
* @memberof module:Dashboard
* @name userroles
* @type {*|{}}
*/
const userroles = useMemo(() => {
const temp = rolesData?.data?.data?.results[0] || {};
return temp;
}, [rolesData?.data]);
/**
* Function to handle the logout action.
* @memberof module:Dashboard
* @name handleSignOUt
* @function
* @param event {Event } - The event object.
*/
const handleSignOUt = (event) => {
event.preventDefault();
const detail = localStorage.getItem("token");
axios({
method: "post",
url: `${baseUrl}/api/auth/logout/`,
headers: {
Authorization: `Token ${detail}`,
},
})
.then((res) => {
localStorage.removeItem("token");
navigate("/");
})
.catch((err) => {
console.log(err);
localStorage.removeItem("token");
});
};
if (rolesLoading || userLoading) {
return <LoadingAnimation />;
}
return (
<div className="dashboard_container">
<div className="dashboard_left__Container">
<SideNavbar
userroles={userroles}
setMobileMenu={setMobileMenu}
mobileMenu={mobileMenu}
/>
</div>
{mobileMenu && (
<div className="sidebar_menu_for_mobile">
<SideNavbar
userroles={userroles}
setMobileMenu={setMobileMenu}
mobileMenu={mobileMenu}
/>
</div>
)}
<div className="dashboard_right__Container">
<div className="top_navbar">
<TopNavbar
user={user}
userroles={userroles}
showLogoutMOdal={showLogoutMOdal}
setShowLogoutModal={setShowLogoutModal}
setMobileMenu={setMobileMenu}
mobileMenu={mobileMenu}
/>
</div>
{/* notificationData={notificationData} setNotification={setNotification} notification={notification} */}
<div className="main_container">
<Routes>
<Route>
<Route
index={true}
element={<DefaultDashboard
userroles={userroles}
user={user}
/>}
/>
<Route
path="/shareholder"
element={<Shareholder userroles={userroles} />}
/>
<Route
path="/shareholderlist"
element={<ShareholderList />}
/>
<Route
path="/profile"
element={<Profile user={user} />}
/>
<Route
path="/Sharehistory"
element={<ShareHistory />}
/>
<Route
path="/barchart"
element={<BarChart />}
/>
<Route
path="/news"
element={<News />}
/>
<Route
path="/announcement"
element={<Announcement />}
/>
<Route
path="/events"
element={<Events />}
/>
<Route
path="/sharetransferrequest"
element={<ShareTransfers />}
/>
<Route
path="/shareholderdetails"
element={<MultiStepForm />}
/>
<Route
path="/events/event-detail/:id"
element={<SingleEventPage />}
/>
<Route
path="/bonus"
element={<BonusList />}
/>
<Route
path="/share"
element={<Share userroles={userroles} />}
/>
<Route
path="/share"
element={<Share />}
/>
<Route
path="/announcement/announcementdetail/:id"
element={<AnnouncementSinglePage />}
/>
<Route
path="/reports"
element={<Report />}
/>
<Route
path="/reports/reports/:id"
element={<ReportSinglePage />}
/>
<Route
path="/news/newspage/:id"
element={<NewsDetail />}
/>
<Route
path="/share/:id"
element={<NewsDetail />}
/>
<Route
path="/sharecertificate/:id"
// element={<BandipurCertificate />}
element={<Certificate />}
/>
<Route
path="/company"
element={<CompanyDetailsPage />}
/>
<Route
path="/sharetransfer/:id"
element={<Sharetransfer user={user} />}
/>
<Route
path="/applyshare/:id"
element={<ApplyShare user={user} />}
/>
<Route
path="/share_contract"
element={<ShareContract />}
/>
<Route
path="/share_invoice/:id"
element={<Invoice />}
/>
<Route
path="/documents"
element={<Documents />}
/>
<Route
path="/documents/:id"
element={<DocumentSinglePage user={user} />}
/>
<Route
path="/karanama_file/:id"
element={<ShareFileSinglePage user={user} />}
/>
<Route
path="/karanama/:id"
element={<Karanama />}
/>
<Route
path="/uploadPaymentProof/*"
element={<PaymentProofForm />}
/>
</Route>
<Route
path="*"
element={<PageNotFound />}
>
</Route>
</Routes>
</div>
{showLogoutMOdal && (
<LogoutModal
handleSignOUt={handleSignOUt}
showLogoutMOdal={showLogoutMOdal}
setShowLogoutModal={setShowLogoutModal}
/>
)}
</div>
</div>
);
};
export default Dashboard;
Source