@@ -63,4 +74,4 @@ const Teams = () => {
);
};
-export default Teams;
\ No newline at end of file
+export default Teams;
diff --git a/src/components/Project/ProjectNav.jsx b/src/components/Project/ProjectNav.jsx
index 43ba0795..f7c1ad06 100644
--- a/src/components/Project/ProjectNav.jsx
+++ b/src/components/Project/ProjectNav.jsx
@@ -1,5 +1,4 @@
import React from "react";
-import { hasUserPermission } from "../../utils/authUtils";
import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import {
DIRECTORY_ADMIN,
diff --git a/src/components/Tenant/Profile.jsx b/src/components/Tenant/Profile.jsx
index 50cd99a4..963f6ce3 100644
--- a/src/components/Tenant/Profile.jsx
+++ b/src/components/Tenant/Profile.jsx
@@ -5,12 +5,12 @@ import GlobalModel from "../common/GlobalModel";
import { useTenantContext } from "../../pages/Tenant/TenantPage";
import { useTenantDetailsContext } from "../../pages/Tenant/TenantDetails";
import IconButton from "../common/IconButton";
-import { hasUserPermission } from "../../utils/authUtils";
import { MANAGE_TENANTS } from "../../utils/constants";
+import { useHasUserPermission } from "../../hooks/useHasUserPermission";
const Profile = ({ data }) => {
const {setEditTenant} = useTenantDetailsContext()
- const canUpdateTenant = hasUserPermission(MANAGE_TENANTS)
+ const canUpdateTenant = useHasUserPermission(MANAGE_TENANTS)
return (
<>
diff --git a/src/hooks/useAuth.jsx b/src/hooks/useAuth.jsx
index 570e0454..2790558d 100644
--- a/src/hooks/useAuth.jsx
+++ b/src/hooks/useAuth.jsx
@@ -28,13 +28,18 @@ export const useSelectTenant = (onSuccessCallBack) => {
const res = await AuthRepository.selectTenant(tenantId);
return res.data;
},
+
onSuccess: (data) => {
- localStorage.setItem("ltkn", data.token);
- localStorage.setItem("rtkn", data.refreshToken);
+ localStorage.setItem("jwtToken", data.token);
+ localStorage.setItem("refreshToken", data.refreshToken);
if (onSuccessCallBack) onSuccessCallBack();
},
+
onError: (error) => {
showToast(error.message || "Error while creating project", "error");
+ localStorage.removeItem("jwtToken");
+ localStorage.removeItem("refreshToken")
+ localStorage.removeItem("ctnt")
},
});
};
diff --git a/src/hooks/useDashboard_Data.jsx b/src/hooks/useDashboard_Data.jsx
index 0322566a..b9c393b7 100644
--- a/src/hooks/useDashboard_Data.jsx
+++ b/src/hooks/useDashboard_Data.jsx
@@ -1,7 +1,8 @@
import { useState, useEffect } from "react";
import GlobalRepository from "../repositories/GlobalRepository";
+import { useQuery } from "@tanstack/react-query";
+
-// 🔹 Dashboard Progression Data Hook
export const useDashboard_Data = ({ days, FromDate, projectId }) => {
const [dashboard_data, setDashboard_Data] = useState([]);
const [isLineChartLoading, setLoading] = useState(false);
@@ -38,120 +39,120 @@ export const useDashboard_Data = ({ days, FromDate, projectId }) => {
};
-export const useDashboard_AttendanceData = (date, projectId) => {
- const [dashboard_Attendancedata, setDashboard_AttendanceData] = useState([]);
- const [isLineChartLoading, setLoading] = useState(false);
- const [error, setError] = useState("");
+// export const useDashboard_AttendanceData = (date, projectId) => {
+// const [dashboard_Attendancedata, setDashboard_AttendanceData] = useState([]);
+// const [isLineChartLoading, setLoading] = useState(false);
+// const [error, setError] = useState("");
- useEffect(() => {
- const fetchData = async () => {
- setLoading(true);
- setError("");
+// useEffect(() => {
+// const fetchData = async () => {
+// setLoading(true);
+// setError("");
- try {
- const response = await GlobalRepository.getDashboardAttendanceData(date, projectId); // date in 2nd param
- setDashboard_AttendanceData(response.data);
- } catch (err) {
- setError("Failed to fetch dashboard data.");
- console.error(err);
- } finally {
- setLoading(false);
- }
- };
+// try {
+// const response = await GlobalRepository.getDashboardAttendanceData(date, projectId); // date in 2nd param
+// setDashboard_AttendanceData(response.data);
+// } catch (err) {
+// setError("Failed to fetch dashboard data.");
+// console.error(err);
+// } finally {
+// setLoading(false);
+// }
+// };
- if (date && projectId !== null) {
- fetchData();
- }
- }, [date, projectId]);
+// if (date && projectId !== null) {
+// fetchData();
+// }
+// }, [date, projectId]);
- return { dashboard_Attendancedata, isLineChartLoading: isLineChartLoading, error };
-};
+// return { dashboard_Attendancedata, isLineChartLoading: isLineChartLoading, error };
+// };
// 🔹 Dashboard Projects Card Data Hook
-export const useDashboardProjectsCardData = () => {
- const [projectsCardData, setProjectsData] = useState([]);
- const [loading, setLoading] = useState(false);
- const [error, setError] = useState("");
+// export const useDashboardProjectsCardData = () => {
+// const [projectsCardData, setProjectsData] = useState([]);
+// const [loading, setLoading] = useState(false);
+// const [error, setError] = useState("");
- useEffect(() => {
- const fetchProjectsData = async () => {
- setLoading(true);
- setError("");
+// useEffect(() => {
+// const fetchProjectsData = async () => {
+// setLoading(true);
+// setError("");
- try {
- const response = await GlobalRepository.getDashboardProjectsCardData();
- setProjectsData(response.data);
- } catch (err) {
- setError("Failed to fetch projects card data.");
- console.error(err);
- } finally {
- setLoading(false);
- }
- };
+// try {
+// const response = await GlobalRepository.getDashboardProjectsCardData();
+// setProjectsData(response.data);
+// } catch (err) {
+// setError("Failed to fetch projects card data.");
+// console.error(err);
+// } finally {
+// setLoading(false);
+// }
+// };
- fetchProjectsData();
- }, []);
+// fetchProjectsData();
+// }, []);
- return { projectsCardData, loading, error };
-};
+// return { projectsCardData, loading, error };
+// };
// 🔹 Dashboard Teams Card Data Hook
-export const useDashboardTeamsCardData = (projectId) => {
- const [teamsCardData, setTeamsData] = useState({});
- const [loading, setLoading] = useState(false);
- const [error, setError] = useState("");
+// export const useDashboardTeamsCardData = (projectId) => {
+// const [teamsCardData, setTeamsData] = useState({});
+// const [loading, setLoading] = useState(false);
+// const [error, setError] = useState("");
- useEffect(() => {
- const fetchTeamsData = async () => {
- setLoading(true);
- setError("");
+// useEffect(() => {
+// const fetchTeamsData = async () => {
+// setLoading(true);
+// setError("");
- try {
- const response = await GlobalRepository.getDashboardTeamsCardData(projectId);
- setTeamsData(response.data || {});
- } catch (err) {
- setError("Failed to fetch teams card data.");
- console.error("Error fetching teams card data:", err);
- setTeamsData({});
- } finally {
- setLoading(false);
- }
- };
+// try {
+// const response = await GlobalRepository.getDashboardTeamsCardData(projectId);
+// setTeamsData(response.data || {});
+// } catch (err) {
+// setError("Failed to fetch teams card data.");
+// console.error("Error fetching teams card data:", err);
+// setTeamsData({});
+// } finally {
+// setLoading(false);
+// }
+// };
- fetchTeamsData();
- }, [projectId]);
+// fetchTeamsData();
+// }, [projectId]);
- return { teamsCardData, loading, error };
-};
+// return { teamsCardData, loading, error };
+// };
-export const useDashboardTasksCardData = (projectId) => {
- const [tasksCardData, setTasksData] = useState({});
- const [loading, setLoading] = useState(false);
- const [error, setError] = useState("");
+// export const useDashboardTasksCardData = (projectId) => {
+// const [tasksCardData, setTasksData] = useState({});
+// const [loading, setLoading] = useState(false);
+// const [error, setError] = useState("");
- useEffect(() => {
- const fetchTasksData = async () => {
- setLoading(true);
- setError("");
+// useEffect(() => {
+// const fetchTasksData = async () => {
+// setLoading(true);
+// setError("");
- try {
- const response = await GlobalRepository.getDashboardTasksCardData(projectId);
- setTasksData(response.data);
- } catch (err) {
- setError("Failed to fetch tasks card data.");
- console.error(err);
- setTasksData({});
- } finally {
- setLoading(false);
- }
- };
+// try {
+// const response = await GlobalRepository.getDashboardTasksCardData(projectId);
+// setTasksData(response.data);
+// } catch (err) {
+// setError("Failed to fetch tasks card data.");
+// console.error(err);
+// setTasksData({});
+// } finally {
+// setLoading(false);
+// }
+// };
- fetchTasksData();
- }, [projectId]);
+// fetchTasksData();
+// }, [projectId]);
- return { tasksCardData, loading, error };
-};
+// return { tasksCardData, loading, error };
+// };
export const useAttendanceOverviewData = (projectId, days) => {
@@ -180,3 +181,75 @@ export const useAttendanceOverviewData = (projectId, days) => {
return { attendanceOverviewData, loading, error };
};
+
+
+// -------------------Query----------------------------
+
+// export const useDashboard_Data = (days, FromDate, projectId)=>{
+// return useQuery({
+// queryKey:["dashboardProjectProgress"],
+// queryFn:async()=> {
+// const payload = {
+// days,
+// FromDate: FromDate || '',
+// projectId: projectId || null,
+// };
+// const resp = await GlobalRepository.getDashboardProgressionData(payload);
+// return resp.data;
+// }
+// })
+// }
+
+export const useDashboard_AttendanceData = (date,projectId)=>{
+ return useQuery({
+ queryKey:["dashboardAttendances",date,projectId],
+ queryFn:async()=> {
+
+ const resp = await await GlobalRepository.getDashboardAttendanceData(date, projectId)
+ return resp.data;
+ }
+ })
+}
+
+export const useDashboardTeamsCardData =(projectId)=>{
+ return useQuery({
+ queryKey:["dashboardTeams",projectId],
+ queryFn:async()=> {
+
+ const resp = await GlobalRepository.getDashboardTeamsCardData(projectId)
+ return resp.data;
+ }
+ })
+}
+
+export const useDashboardTasksCardData = (projectId) => {
+ return useQuery({
+ queryKey:["dashboardTasks",projectId],
+ queryFn:async()=> {
+
+ const resp = await GlobalRepository.getDashboardTasksCardData(projectId)
+ return resp.data;
+ }
+ })
+}
+// export const useAttendanceOverviewData = (projectId, days) => {
+// return useQuery({
+// queryKey:["dashboardAttendanceOverView",projectId],
+// queryFn:async()=> {
+
+// const resp = await GlobalRepository.getAttendanceOverview(projectId, days);
+// return resp.data;
+// }
+// })
+// }
+
+export const useDashboardProjectsCardData = () => {
+ return useQuery({
+ queryKey:["dashboardProjects"],
+ queryFn:async()=> {
+
+ const resp = await GlobalRepository.getDashboardProjectsCardData();
+ return resp.data;
+ }
+ })
+}
\ No newline at end of file
diff --git a/src/pages/Activities/AttendancePage.jsx b/src/pages/Activities/AttendancePage.jsx
index cef91843..5c88d1ee 100644
--- a/src/pages/Activities/AttendancePage.jsx
+++ b/src/pages/Activities/AttendancePage.jsx
@@ -13,7 +13,6 @@ import Regularization from "../../components/Activities/Regularization";
import { useAttendance } from "../../hooks/useAttendance";
import { useDispatch, useSelector } from "react-redux";
import { setProjectId } from "../../slices/localVariablesSlice";
-import { hasUserPermission } from "../../utils/authUtils";
import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import { REGULARIZE_ATTENDANCE } from "../../utils/constants";
import eventBus from "../../services/eventBus";
diff --git a/src/pages/Tenant/SelfTenantDetails.jsx b/src/pages/Tenant/SelfTenantDetails.jsx
index 5375bcc3..ea4b107d 100644
--- a/src/pages/Tenant/SelfTenantDetails.jsx
+++ b/src/pages/Tenant/SelfTenantDetails.jsx
@@ -1,16 +1,16 @@
import React, { useEffect, useMemo } from "react";
import { useProfile } from "../../hooks/useProfile";
import TenantDetails from "./TenantDetails";
-import { hasUserPermission } from "../../utils/authUtils";
import { VIEW_TENANTS } from "../../utils/constants";
import { useNavigate } from "react-router-dom";
import Loader from "../../components/common/Loader";
+import { useHasUserPermission } from "../../hooks/useHasUserPermission";
const SelfTenantDetails = () => {
const { profile, loading } = useProfile();
const tenantId = profile?.employeeInfo?.tenantId;
const navigate = useNavigate();
- const isSelfTenantView = hasUserPermission(VIEW_TENANTS);
+ const isSelfTenantView = useHasUserPermission(VIEW_TENANTS);
useEffect(() => {
if (!isSelfTenantView) {
diff --git a/src/pages/Tenant/TenantPage.jsx b/src/pages/Tenant/TenantPage.jsx
index ef33efbf..640c8fc2 100644
--- a/src/pages/Tenant/TenantPage.jsx
+++ b/src/pages/Tenant/TenantPage.jsx
@@ -20,7 +20,6 @@ import TenantFilterPanel from "../../components/Tenant/TenantFilterPanel";
import { useDebounce } from "../../utils/appUtils";
import { useFab } from "../../Context/FabContext";
import { setCurrentTenant } from "../../slices/globalVariablesSlice";
-import { hasUserPermission } from "../../utils/authUtils";
// ------ Schema -------
import {
@@ -35,6 +34,7 @@ import {
VIEW_TENANTS,
} from "../../utils/constants";
import { useProfile } from "../../hooks/useProfile";
+import { useHasUserPermission } from "../../hooks/useHasUserPermission";
// ---------- Context ----------
export const TenantContext = createContext();
@@ -63,9 +63,9 @@ const TenantPage = () => {
const debouncedSearch = useDebounce(searchText, 500);
const { setOffcanvasContent, setShowTrigger } = useFab();
- const isSuperTenant = hasUserPermission(SUPPER_TENANT);
- const canManageTenants = hasUserPermission(MANAGE_TENANTS);
- const isSelfTenant = hasUserPermission(VIEW_TENANTS);
+ const isSuperTenant = useHasUserPermission(SUPPER_TENANT);
+ const canManageTenants = useHasUserPermission(MANAGE_TENANTS);
+ const isSelfTenant = useHasUserPermission(VIEW_TENANTS);
const methods = useForm({
resolver: zodResolver(filterSchema),
diff --git a/src/pages/authentication/SwitchTenant.jsx b/src/pages/authentication/SwitchTenant.jsx
index e36ede07..e07a3416 100644
--- a/src/pages/authentication/SwitchTenant.jsx
+++ b/src/pages/authentication/SwitchTenant.jsx
@@ -4,6 +4,7 @@ import { useAuthModal, useSelectTenant, useTenants } from "../../hooks/useAuth";
import { useProfile } from "../../hooks/useProfile";
import { useQueryClient } from "@tanstack/react-query";
import AuthRepository from "../../repositories/AuthRepository";
+import Loader from "../../components/common/Loader";
const SwitchTenant = () => {
const queryClient = useQueryClient();
@@ -27,6 +28,8 @@ const SwitchTenant = () => {
localStorage.setItem("ctnt", tenantId);
chooseTenant(tenantId);
};
+
+
const contentBody = (
Switch Workplace
@@ -82,7 +85,7 @@ const SwitchTenant = () => {
:contentBody} />;
};
export default SwitchTenant;
\ No newline at end of file
diff --git a/src/pages/authentication/TenantSelectionPage.jsx b/src/pages/authentication/TenantSelectionPage.jsx
index 5e748548..39318820 100644
--- a/src/pages/authentication/TenantSelectionPage.jsx
+++ b/src/pages/authentication/TenantSelectionPage.jsx
@@ -2,6 +2,7 @@ import { useEffect, useState } from "react";
import { useTenants, useSelectTenant } from "../../hooks/useAuth.jsx";
import { Link, useNavigate } from "react-router-dom";
import Dashboard from "../../components/Dashboard/Dashboard.jsx";
+import Loader from "../../components/common/Loader.jsx";
const TenantSelectionPage = () => {
const [pendingTenant, setPendingTenant] = useState(null);
@@ -19,26 +20,48 @@ const TenantSelectionPage = () => {
useEffect(() => {
if (localStorage.getItem("ctnt")) {
- return navigate("/dashboard");
+ navigate("/dashboard");
}
- }, []);
+ }, [navigate]);
+
+ useEffect(() => {
+ if (!isLoading && data?.data?.length === 1) {
+ const tenant = data.data[0];
+ handleTenantselection(tenant.id);
+ }
+ }, [isLoading, data]);
+
+ if (isLoading) return