From 3eaff970cee6a6bcf6b6d346b2a9759335b1e2ca Mon Sep 17 00:00:00 2001 From: ghaddaditw <40211818-ghaddaditw@users.noreply.replit.com> Date: Sun, 8 Jun 2025 16:16:36 +0000 Subject: [PATCH] Enhance user experience with protected routes and AI chat improvements Adds protected routes with loading skeletons, fixes AI chat data handling, and handles task array checks. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 6bac2659-689a-442d-ae16-f45f8d1450c7 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/9777c70b-fc38-4831-8d6b-78dfffe041b0/b010d0e6-5a54-4e9e-b559-909112e9dc8a.jpg --- client/src/App.tsx | 92 +++++++++++++++++++++++++++------- client/src/pages/AIPage.tsx | 8 ++- client/src/pages/TasksPage.tsx | 8 +-- 3 files changed, 81 insertions(+), 27 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 9fffd7c..3fc08f7 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,10 +1,10 @@ -import { Switch, Route } from "wouter"; +import { Switch, Route, Redirect } from "wouter"; import { queryClient } from "./lib/queryClient"; import { QueryClientProvider } from "@tanstack/react-query"; import { Toaster } from "@/components/ui/toaster"; import { TooltipProvider } from "@/components/ui/tooltip"; import { FloatingVoiceControl } from "@/components/voice/FloatingVoiceControl"; -import { AuthProvider } from "@/context/AuthContext"; +import { AuthProvider, useAuth } from "@/context/AuthContext"; import { ThemeProvider } from "@/context/ThemeContext"; import { AdaptiveThemeProvider } from "@/context/AdaptiveThemeContext"; import { VoiceProvider } from "@/context/VoiceProvider"; @@ -12,6 +12,7 @@ import { NotificationProvider } from "@/context/NotificationProvider"; import { TourManagerProvider } from "@/components/onboarding/TourManager"; import { MoodDetector } from "@/components/MoodDetector"; import { RTLProvider } from "@/components/RTLProvider"; +import { Skeleton } from "@/components/ui/skeleton"; import LandingPage from "@/pages/LandingPage"; import DashboardPage from "@/pages/DashboardPage"; import LoginPage from "@/pages/LoginPage"; @@ -31,26 +32,81 @@ import ChatPage from "@/pages/ChatPage"; import ComfortHubPage from "@/pages/ComfortHubPage"; import NotFound from "@/pages/not-found"; +// Protected Route wrapper +function ProtectedRoute({ component: Component }: { component: React.ComponentType }) { + const { user, isLoading } = useAuth(); + + if (isLoading) { + return ( +