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 ChatNew from './pages/ChatNew';
import HelpNew from './pages/HelpNew';
import SettingsNew from './pages/SettingsNew';
import HelpAndSettings from './pages/HelpAndSettings';
import ModernLogin from './pages/Login';
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';
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, selectedOrgId } = useUserOrganizations();
if (!org) return Loading organization...
;
const userOrgRelation = organizations.find(o => o.orgId === selectedOrgId);
const isOrgOwner = userOrgRelation?.role === 'owner';
const onboardingCompleted = org.onboardingCompleted === true;
console.log('RequireOnboarding check:', {
orgId: selectedOrgId,
orgOnboardingCompleted: org.onboardingCompleted,
userRole: userOrgRelation?.role,
finalDecision: onboardingCompleted
});
if (!onboardingCompleted) {
if (isOrgOwner) {
console.log('Redirecting owner to onboarding');
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 */}
}
/>
}
/>
}
/>
} />
{/* New Figma Chat Implementation - Standalone route */}
}
/>
{/* New Figma Help Implementation - Standalone route */}
}
/>
{/* New Figma Settings Implementation - Standalone route */}
}
/>
{/* Main app routes - require auth, org selection, and completed onboarding */}
}
>
} />
} />
} />
} />
} />
} />
} />
{/* Debug routes */}
}
/>
}
/>
}
/>
);
}
export default App;