diff --git a/src/hooks/useDashboard_Data.jsx b/src/hooks/useDashboard_Data.jsx new file mode 100644 index 00000000..55432f8c --- /dev/null +++ b/src/hooks/useDashboard_Data.jsx @@ -0,0 +1,122 @@ +import { useState, useEffect } from "react"; +import GlobalRepository from "../repositories/GlobalRepository"; + +// 🔹 Dashboard Progression Data Hook +export const useDashboard_Data = ({ days, FromDate, projectId }) => { + const [dashboard_data, setDashboard_Data] = useState([]); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + + useEffect(() => { + if (!days) return; + + const fetchData = async () => { + setLoading(true); + setError(""); + + try { + const payload = { + days, + FromDate: FromDate || '', + projectId: projectId || 0, + }; + + const response = await GlobalRepository.getDashboardProgressionData(payload); + setDashboard_Data(response.data); + } catch (err) { + setError("Failed to fetch dashboard data."); + console.error(err); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, [days, FromDate, projectId]); + + return { dashboard_data, loading, error }; +}; + +// 🔹 Dashboard Projects Card Data Hook +export const useDashboardProjectsCardData = () => { + const [projectsCardData, setProjectsData] = useState([]); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + + 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); + } + }; + + fetchProjectsData(); + }, []); + + return { projectsCardData, loading, error }; +}; + +// 🔹 Dashboard Teams Card Data Hook +export const useDashboardTeamsCardData = () => { + const [teamsCardData, setTeamsData] = useState([]); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + + useEffect(() => { + const fetchTeamsData = async () => { + setLoading(true); + setError(""); + + try { + const response = await GlobalRepository.getDashboardTeamsCardData(); + setTeamsData(response.data); + } catch (err) { + setError("Failed to fetch teams card data."); + console.error(err); + } finally { + setLoading(false); + } + }; + + fetchTeamsData(); + }, []); + + return { teamsCardData, loading, error }; +}; + +// 🔹 Dashboard Tasks Card Data Hook +export const useDashboardTasksCardData = () => { + const [tasksCardData, setTasksData] = useState([]); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + + useEffect(() => { + const fetchTasksData = async () => { + setLoading(true); + setError(""); + + try { + const response = await GlobalRepository.getDashboardTasksCardData(); + setTasksData(response.data); + } catch (err) { + setError("Failed to fetch tasks card data."); + console.error(err); + } finally { + setLoading(false); + } + }; + + fetchTasksData(); + }, []); + + return { tasksCardData, loading, error }; +}; diff --git a/src/repositories/GlobalRepository.jsx b/src/repositories/GlobalRepository.jsx new file mode 100644 index 00000000..c87df4ec --- /dev/null +++ b/src/repositories/GlobalRepository.jsx @@ -0,0 +1,25 @@ +import { api } from "../utils/axiosClient"; + +const GlobalRepository = { + getDashboardProgressionData: ({ days = '', FromDate = '', projectId = '' }) => { + const params = new URLSearchParams({ + days: days.toString(), + FromDate, + projectId, + }); + + return api.get(`/api/Dashboard/Progression?${params.toString()}`); + }, + getDashboardProjectsCardData: () => { + return api.get(`/api/Dashboard/projects`); + }, + getDashboardTeamsCardData: () => { + return api.get(`/api/Dashboard/teams`); + }, + getDashboardTasksCardData: () => { + return api.get(`/api/Dashboard/tasks`); + }, + +}; + +export default GlobalRepository;