Skip to content

Commit

Permalink
Add app routing (#366)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kitenite authored Sep 16, 2024
1 parent f566f7e commit 50b3cb3
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 2 deletions.
4 changes: 2 additions & 2 deletions app/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import AppBar from './components/AppBar';
import { ThemeProvider } from './components/theme-provider';
import { Toaster } from './components/ui/toaster';
import { AuthManager } from './lib/auth';
import ProjectEditor from './routes/project';
import Routes from './routes';

const AuthContext = createContext(new AuthManager());
export const useAuthManager = () => useContext(AuthContext);
Expand All @@ -15,7 +15,7 @@ function App() {
<ThemeProvider defaultTheme="dark" storageKey="vite-ui-theme">
<TooltipProvider>
<AppBar />
<ProjectEditor />
<Routes />
<Announcement />
<Toaster />
</TooltipProvider>
Expand Down
24 changes: 24 additions & 0 deletions app/src/lib/routes/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { makeAutoObservable } from 'mobx';
import { sendAnalytics } from '../utils';

export enum Route {
EDITOR = 'editor',
LOGIN = 'login',
}

export class RouteManager {
private currentRoute: Route = Route.EDITOR;

constructor() {
makeAutoObservable(this);
}

get route() {
return this.currentRoute;
}

set route(newRoute: Route) {
this.route = newRoute;
sendAnalytics('navigate', { route: newRoute });
}
}
11 changes: 11 additions & 0 deletions app/src/routes/Provider.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { RouteManager } from '@/lib/routes';
import { createContext, ReactNode, useContext } from 'react';

const RouteContext = createContext(new RouteManager());
export const useRouteManager = () => useContext(RouteContext);

const RouteProvider = ({ children }: { children: ReactNode }) => {
return <RouteContext.Provider value={useRouteManager()}>{children}</RouteContext.Provider>;
};

export default RouteProvider;
23 changes: 23 additions & 0 deletions app/src/routes/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { Route } from '@/lib/routes';
import { observer } from 'mobx-react-lite';
import ProjectEditor from './project';
import RouteProvider, { useRouteManager } from './Provider';

const Routes = observer(() => {
const routeManager = useRouteManager();

function renderRoutes() {
switch (routeManager.route) {
case Route.EDITOR:
return <ProjectEditor />;
case Route.LOGIN:
return <div>Login</div>;
default:
return <div>404: Unknown route</div>;
}
}

return <RouteProvider>{renderRoutes()}</RouteProvider>;
});

export default Routes;
5 changes: 5 additions & 0 deletions app/src/routes/login/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const Login = () => {
return <>Login</>;
};

export default Login;

0 comments on commit 50b3cb3

Please sign in to comment.