rewrite client providing & fix sign in redirect

This commit is contained in:
thislight 2024-07-15 13:59:10 +08:00
parent 942b9dcce8
commit 0caa9aab88
5 changed files with 106 additions and 53 deletions

View file

@ -1,12 +1,27 @@
import { Route, Router } from "@solidjs/router";
import { ThemeProvider } from "@suid/material";
import { Component, lazy } from "solid-js";
import {
Component,
createRenderEffect,
createSignal,
ErrorBoundary,
lazy,
} from "solid-js";
import { useRootTheme } from "./material/mui.js";
import "./App.css"
import {
Provider as ClientProvider,
createMastoClientFor,
type Session,
} from "./masto/clients.js";
import "./App.css";
import { $accounts } from "./accounts/stores.js";
import { useStore } from "@nanostores/solid";
const AccountSignIn = lazy(() => import("./accounts/SignIn.js"));
const AccountMastodonOAuth2Callback = lazy(() => import("./accounts/MastodonOAuth2Callback.js"))
const TimelineHome = lazy(() => import("./timelines/Home.js"))
const AccountMastodonOAuth2Callback = lazy(
() => import("./accounts/MastodonOAuth2Callback.js"),
);
const TimelineHome = lazy(() => import("./timelines/Home.js"));
const Routing: Component = () => {
return (
@ -14,7 +29,10 @@ const Routing: Component = () => {
<Route path="/" component={TimelineHome}></Route>
<Route path={"/accounts"}>
<Route path={"/sign-in"} component={AccountSignIn} />
<Route path={"/oauth2/mastodon"} component={AccountMastodonOAuth2Callback} />
<Route
path={"/oauth2/mastodon"}
component={AccountMastodonOAuth2Callback}
/>
</Route>
</Router>
);
@ -22,10 +40,29 @@ const Routing: Component = () => {
const App: Component = () => {
const theme = useRootTheme();
const accts = useStore($accounts);
const clientStore = createSignal<Session[]>([]);
createRenderEffect(() => {
const [, setClients] = clientStore;
setClients(
accts().map((x) => ({ account: x, client: createMastoClientFor(x) })),
);
});
return (
<ThemeProvider theme={theme()}>
<Routing />
</ThemeProvider>
<ErrorBoundary
fallback={(err, reset) => {
console.error(err);
return <></>;
}}
>
<ThemeProvider theme={theme()}>
<ClientProvider value={clientStore}>
<Routing />
</ClientProvider>
</ThemeProvider>
</ErrorBoundary>
);
};