Added deeplinks, added qr code login, added settings, other stuff

This commit is contained in:
Alois 2026-04-10 19:44:08 +02:00
commit 8ff8bd9528
32 changed files with 917 additions and 78 deletions

View file

@ -10,8 +10,9 @@ import "./index.css";
import NotFound from "@/routes/404";
import RootLayout from "./routes/layout";
import AppLayout from "./routes/app/layout";
import RootLayout from "@/routes/layout";
import AppLayout from "@/routes/app/layout";
import SettingsLayout from "@/features/settings/layout";
import Home from "@/routes/app/home";
import ChatScreen from "@tensamin/chat/screen";
@ -22,6 +23,7 @@ import ChatContext from "@tensamin/chat/context";
import CallContext from "@tensamin/call/context";
import SocketContext from "@tensamin/ttp/context";
import UserContext from "@tensamin/user/context";
import DeeplinkContext from "@tensamin/tauri/deeplinkHandler";
import { ThemeProvider } from "@tensamin/ui/theme";
import z from "zod";
@ -47,13 +49,15 @@ window.setLogLevelToMax = () => {
function RootShell() {
return (
<ThemeProvider>
<div className="w-screen h-screen overflow-hidden">
<RootLayout>
<Outlet />
</RootLayout>
</div>
</ThemeProvider>
<DeeplinkContext>
<ThemeProvider>
<div className="w-screen h-screen overflow-hidden">
<RootLayout>
<Outlet />
</RootLayout>
</div>
</ThemeProvider>
</DeeplinkContext>
);
}
@ -89,10 +93,55 @@ const appRoute = createRoute({
component: AppShell,
});
const settingsRoute = createRoute({
getParentRoute: () => appRoute,
path: "settings",
component: SettingsLayout,
staticData: {
showMobileNavbar: true,
},
});
type SettingsRouteModule = {
default?: () => React.JSX.Element;
component?: () => React.JSX.Element;
};
const settingsRouteModules = import.meta.glob<SettingsRouteModule>(
"./routes/settings/*.tsx",
{ eager: true },
);
const settingsChildren = Object.entries(settingsRouteModules).map(
([filePath, module]) => {
const fileName = filePath.split("/").pop()?.replace(".tsx", "") ?? "";
const path = fileName === "index" ? "/" : fileName;
const component = module.component ?? module.default;
if (!component) {
throw new Error(
`Settings route module "${filePath}" must export a default component`,
);
}
return createRoute({
getParentRoute: () => settingsRoute,
path,
component,
staticData: {
showMobileNavbar: true,
},
});
},
);
const homeRoute = createRoute({
getParentRoute: () => appRoute,
path: "/",
component: Home,
staticData: {
showMobileNavbar: true,
},
});
const chatRoute = createRoute({
@ -102,22 +151,36 @@ const chatRoute = createRoute({
validateSearch: z.object({
id: z.number().optional(),
}),
staticData: {
showMobileNavbar: false,
},
});
const callRoute = createRoute({
getParentRoute: () => appRoute,
path: "call",
component: CallScreen,
staticData: {
showMobileNavbar: false,
},
});
const loginRoute = createRoute({
getParentRoute: () => rootRoute,
path: "login",
component: Login,
staticData: {
showMobileNavbar: false,
},
});
const routeTree = rootRoute.addChildren([
appRoute.addChildren([homeRoute, chatRoute, callRoute]),
appRoute.addChildren([
homeRoute,
chatRoute,
callRoute,
settingsRoute.addChildren(settingsChildren),
]),
loginRoute,
]);