import React from 'react'; import { HashRouter, Routes, Route, Navigate, useParams } from 'react-router-dom'; import { ThemeProvider } from './contexts/ThemeContext'; import { AuthProvider, useAuth } from './contexts/AuthContext'; import { UserOrganizationsProvider, useUserOrganizations } from './contexts/UserOrganizationsContext'; import { OrgProvider, useOrg } from './contexts/OrgContext'; import { Layout } from './components/UiKit'; import CompanyWiki from './pages/CompanyWiki'; import EmployeeData from './pages/EmployeeData'; import Chat from './pages/Chat'; import HelpAndSettings from './pages/HelpAndSettings'; import Login from './pages/Login'; import ModernLogin from './pages/ModernLogin'; import OrgSelection from './pages/OrgSelection'; import Onboarding from './pages/Onboarding'; import EmployeeQuestionnaire from './pages/EmployeeQuestionnaire'; import EmployeeQuestionnaireSteps from './pages/EmployeeQuestionnaireSteps'; import QuestionTypesDemo from './pages/QuestionTypesDemo'; import FormsDashboard from './pages/FormsDashboard'; import DebugEmployee from './pages/DebugEmployee'; import QuestionnaireComplete from './pages/QuestionnaireComplete'; import SubscriptionSetup from './pages/SubscriptionSetup'; import { isFirebaseConfigured } from './services/firebase'; const RequireAuth: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { user, loading } = useAuth(); if (loading) return
Loading...
; if (!user) return ; return <>{children}; }; const RequireOrgSelection: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { selectedOrgId, loading } = useUserOrganizations(); if (loading) return
Loading your organizations...
; if (!selectedOrgId) return ; return <>{children}; }; const RequireOnboarding: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { org } = useOrg(); const { user } = useAuth(); const { organizations } = useUserOrganizations(); if (!org) return
Loading organization...
; if (!org.onboardingCompleted) { // Only org owners should be redirected to onboarding const userOrgRelation = organizations.find(o => o.orgId === org.orgId); const isOrgOwner = userOrgRelation?.role === 'owner'; if (isOrgOwner) { return ; } else { // Non-owners should see a waiting message return (

Organization Setup In Progress

Your organization is currently being set up by the administrator. Please check back later or contact your administrator for more information.

); } } return <>{children}; }; // Wrapper component that provides selected org to OrgProvider const OrgProviderWrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { selectedOrgId } = useUserOrganizations(); if (!selectedOrgId) { return
No organization selected
; } return ( {children} ); }; // Redirect invite URLs directly to employee questionnaire (no auth needed) const InviteRedirect: React.FC = () => { const { inviteCode } = useParams<{ inviteCode: string }>(); return ; }; function App() { return ( } /> } /> } /> } /> {/* Employee questionnaire - no auth needed, uses invite code */} } /> {/* Organization Selection - after auth, before entering app */} } /> {/* Subscription Setup - after organization creation */} } /> {/* Routes that require both auth and org selection */} } /> } /> } /> } /> {/* Main app routes - require auth, org selection, and completed onboarding */} } > } /> } /> } /> } /> } /> } /> } /> {/* Debug routes */} } /> } /> } /> ); } export default App;