diff --git a/resources/wireguard/windows/wg0.conf b/resources/wireguard/windows/wg0.conf index e47a3c7..6210f37 100644 --- a/resources/wireguard/windows/wg0.conf +++ b/resources/wireguard/windows/wg0.conf @@ -9,3 +9,4 @@ PublicKey = jG+7H5thEiNjxY1XqI1R9oyMAMTIegLwE3tZkS1Rj2U= Endpoint = 35.95.209.161:51820 AllowedIPs = 10.0.0.0/24 PersistentKeepalive = 25 + diff --git a/src/ui/pages/Dashboard.tsx b/src/ui/pages/Dashboard.tsx index 46c89f5..9216697 100644 --- a/src/ui/pages/Dashboard.tsx +++ b/src/ui/pages/Dashboard.tsx @@ -152,6 +152,14 @@ const Dashboard: React.FC = () => { }) ); + // FIX: Check if we have any projects + if (res.data.length === 0) { + // No projects available, clear selected project + dispatch(setSelectedProjectSlice(null)); + // fetchProfile(); + return; + } + // Check if we already have a selected project that's being tracked const currentlySelected = selectedProject; const currentlyTracking = isTracking; @@ -208,9 +216,13 @@ const Dashboard: React.FC = () => { fetchProfile(); } else { console.warn("⚠️ Unexpected response:", res); + // FIX: Also clear selected project on unexpected response + dispatch(setSelectedProjectSlice(null)); } } catch (err) { console.error("❌ Error fetching projects:", err); + // FIX: Clear selected project on error + dispatch(setSelectedProjectSlice(null)); } finally { setIsRefreshing(false); } @@ -218,6 +230,7 @@ const Dashboard: React.FC = () => { useEffect(() => { fetchProjects(); + fetchProfile() }, []); const handleRefresh = async () => { @@ -285,6 +298,7 @@ const Dashboard: React.FC = () => {

Dashboard

{/* Tracking Section */} + {/* Tracking Section */}
@@ -305,11 +319,6 @@ const Dashboard: React.FC = () => {

{formatTime(displayTime)}

- - {/*

- {formatTime(displayTime)} - {isLimitReached && " ⚠️"} -

*/}
Project:{" "} @@ -356,7 +365,9 @@ const Dashboard: React.FC = () => { ) : (

- Select a project below to start tracking. + {projectsData.length === 0 + ? "No projects available." + : "Select a project below to start tracking."}

)}
@@ -368,16 +379,16 @@ const Dashboard: React.FC = () => { {/* 🔹 Sticky Header */}

Projects

- {!selectedData?.isTracking && - } + {!selectedData?.isTracking && + }
{/* 🔹 Table or Empty State or Skeleton */} diff --git a/src/ui/pages/PaySlips/PaysSlips.tsx b/src/ui/pages/PaySlips/PaysSlips.tsx index 5c9b931..0e1a51e 100644 --- a/src/ui/pages/PaySlips/PaysSlips.tsx +++ b/src/ui/pages/PaySlips/PaysSlips.tsx @@ -9,6 +9,8 @@ const PaysSlips = () => { const [error, setError] = useState(null); const [rows, setRows] = useState([]); + + useEffect(() => { if (!projectSummary?.vaId) return; diff --git a/src/ui/pages/Timesheets/Timesheets.tsx b/src/ui/pages/Timesheets/Timesheets.tsx index 8ca6afc..49cdb60 100644 --- a/src/ui/pages/Timesheets/Timesheets.tsx +++ b/src/ui/pages/Timesheets/Timesheets.tsx @@ -64,13 +64,11 @@ const Timesheets: React.FC = () => { const [lastRefreshed, setLastRefreshed] = useState(null); const [initialLoading, setInitialLoading] = useState(true); const [tick, setTick] = useState(0); - const { selectedProject } = - useSelector((state: any) => state.projects); + const { selectedProject } = useSelector((state: any) => state.projects); + const selectedProjectId = selectedProject?.projectId ?? null; const activeProjects = projectsData.filter(p => p.status === "ACTIVE"); - console.log("selectedProject", selectedProject.projectId) - useEffect(() => { const interval = setInterval(() => { @@ -225,13 +223,13 @@ const Timesheets: React.FC = () => { {formatWorkTime(entry.totalWorkTime)}