admin/src/components/AppContent.js
2024-05-06 14:11:14 +05:30

75 lines
2.1 KiB
JavaScript

import React, { Suspense, useEffect, useState } from "react";
import { Navigate, Route, Routes } from "react-router-dom";
import { CContainer, CSpinner } from "@coreui/react";
// routes config
import routes from "../routes";
import { isAutheticated } from "src/auth";
import axios from "axios";
import toast from "react-hot-toast";
const AppContent = () => {
const [userper, setuserper] = useState(null);
const token = isAutheticated();
useEffect(() => {
const getUser = async () => {
let existanceData = localStorage.getItem("authToken");
if (!existanceData) {
setuserper(null);
} else {
try {
let response = await axios.get(`/api/v1/user/details`, {
headers: {
Authorization: `Bearer ${token}`,
},
});
const data = response?.data;
if (
data?.success &&
(data?.user?.role === "admin" || data?.user?.role === "Employee")
) {
setuserper(data?.user);
} else {
setuserper(null);
}
} catch (err) {
setuserper(null);
console.log(err);
}
}
};
getUser();
}, []);
const [appRoutes, setAppRoutes] = useState(routes);
return (
<CContainer lg>
<Suspense fallback={<CSpinner color="primary" />}>
<Routes>
{appRoutes.map((route, idx) => {
if (
userper?.role === "admin" ||
route.navName?.trim() === "" ||
(userper?.accessTo && userper?.accessTo[route?.navName] === true)
) {
return (
route.element && (
<Route
key={idx}
path={route.path}
exact={route.exact}
name={route.name}
element={<route.element />}
/>
)
);
}
})}
<Route path="/" element={<Navigate to="dashboard" replace />} />
</Routes>
</Suspense>
</CContainer>
);
};
export default React.memo(AppContent);