import { FC, Suspense, useEffect } from "react";
import { AppLoading } from "./app/AppLoading";
import { AppRoutes } from "./app/AppRoutes";
import { useCurrentOrg } from "./data/organizations/orgs-query";
import { useAnalyticsTracking } from "./hooks/use-analytics-tracking";
import { useUserLoader } from "./hooks/use-user-loader";
import { Login } from "./Login";
import { AppBlockingFlows } from "./app/AppBlockingFlows";
import { Route, Switch, useHistory, useLocation } from "react-router";
import { ErrorPages } from "./error-pages/ErrorPages";
import { LinkedInCallback } from "react-linkedin-login-oauth2";
import { useQueryParams } from "./hooks/use-query-params";
import { useTheme } from "./theme-context";
import QuickStart from "./components/QuickStart";
export const StartWorkspaceModalKeyBinding = `${/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform) ? "⌘" : "Ctrl﹢"}O`;
const App: FC = () => {
const { user, loading } = useUserLoader();
const currentOrgQuery = useCurrentOrg();
const history = useHistory();
const location = useLocation();
const search = useQueryParams();
const { isDark, setIsDark } = useTheme();
useEffect(() => {
const onKeyDown = (event: KeyboardEvent) => {
if ((event.metaKey || event.ctrlKey) && event.key === "o") {
event.preventDefault();
history.push("/new");
return;
} else if (event.metaKey && event.ctrlKey && event.shiftKey && event.key === "M") {
setIsDark(!isDark);
return;
}
};
window.addEventListener("keydown", onKeyDown);
return () => {
window.removeEventListener("keydown", onKeyDown);
};
}, [history, isDark, setIsDark]);
useAnalyticsTracking();
if (location.pathname === "/linkedin" && search.get("code") && search.get("state")) {
return <LinkedInCallback />;
}
if (window.location.pathname.replace(/\/$/, "") === "/quickstart") {
return <QuickStart />;
}
if (loading) {
return <AppLoading />;
}
if (!user) {
return <Login />;
}
if (currentOrgQuery.isLoading) {
return <AppLoading />;
}
return (
<Suspense fallback={<AppLoading />}>
{}
<AppBlockingFlows>
{}
<AppRoutes key={`${currentOrgQuery?.data?.id ?? "no-org"}-${user.id}`} />
</AppBlockingFlows>
</Suspense>
);
};
export const RootAppRouter: FC = () => {
return (
<Switch>
{}
<Route path="/error" component={ErrorPages} />
<Route path="*" component={App} />
</Switch>
);
};