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;