Skip to content

Commit 86e4887

Browse files
authored
Merge pull request #334 from outerbase/develop
deployment 2025-02-03
2 parents 1ad0767 + 03899fd commit 86e4887

File tree

4 files changed

+48
-26
lines changed

4 files changed

+48
-26
lines changed

src/app/(outerbase)/session-provider.tsx

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
2-
import { useRouter } from "next/navigation";
3-
import { createContext, PropsWithChildren, useContext } from "react";
2+
import { usePathname, useRouter } from "next/navigation";
3+
import { createContext, PropsWithChildren, useContext, useEffect } from "react";
44
import useSWR from "swr";
55
import { getOuterbaseSession } from "../../outerbase-cloud/api";
66
import {
@@ -24,9 +24,11 @@ export function useSession() {
2424

2525
export function OuterbaseSessionProvider({ children }: PropsWithChildren) {
2626
const router = useRouter();
27+
const pathname = usePathname();
28+
const token = localStorage.getItem("ob-token");
2729

2830
const { data, isLoading } = useSWR(
29-
"session",
31+
token ? "session-" + localStorage.getItem("ob-token") : undefined,
3032
() => {
3133
return getOuterbaseSession();
3234
},
@@ -37,13 +39,16 @@ export function OuterbaseSessionProvider({ children }: PropsWithChildren) {
3739
}
3840
);
3941

40-
if (isLoading) {
41-
return <div>Session Loading...</div>;
42-
}
42+
useEffect(() => {
43+
if (isLoading) return;
44+
if (!data?.session || !data?.user) {
45+
localStorage.setItem("continue-redirect", pathname);
46+
router.push("/signin");
47+
}
48+
}, [isLoading, data, pathname, router]);
4349

44-
if (!data?.session || !data?.user) {
45-
router.push("/signin");
46-
return <div>Redirecting...</div>;
50+
if (isLoading || !data) {
51+
return <div>Session Loading...</div>;
4752
}
4853

4954
return (

src/app/signin/page.tsx

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ import {
55
getOuterbaseWorkspace,
66
loginOuterbaseByPassword,
77
} from "@/outerbase-cloud/api";
8-
import { OuterbaseAPIError } from "@/outerbase-cloud/api-type";
8+
import {
9+
OuterbaseAPIError,
10+
OuterbaseAPISession,
11+
} from "@/outerbase-cloud/api-type";
912
import { LucideLoader } from "lucide-react";
1013
import Link from "next/link";
1114
import { useRouter } from "next/navigation";
12-
import { useCallback, useState } from "react";
15+
import { useCallback, useEffect, useState } from "react";
1316
import ThemeLayout from "../(theme)/theme_layout";
1417
import { LoginBaseSpaceship } from "./starbase-portal";
1518

@@ -19,6 +22,7 @@ export default function SigninPage() {
1922
const [error, setError] = useState("");
2023
const router = useRouter();
2124
const [loading, setLoading] = useState(false);
25+
const [session, setSession] = useState<OuterbaseAPISession>();
2226

2327
const onLoginClicked = useCallback(() => {
2428
setLoading(true);
@@ -28,22 +32,35 @@ export default function SigninPage() {
2832
localStorage.setItem("session", JSON.stringify(session));
2933
localStorage.setItem("ob-token", session.token);
3034

31-
getOuterbaseWorkspace()
32-
.then((w) => {
33-
router.push(`/w/${w.items[0].short_name}`);
34-
})
35-
.catch(console.error)
36-
.finally(() => {
37-
setLoading(false);
38-
});
35+
setSession(session);
3936
})
4037
.catch((e) => {
4138
setLoading(false);
4239
if (e instanceof OuterbaseAPIError) {
4340
setError(e.description);
4441
}
4542
});
46-
}, [email, password, router]);
43+
}, [email, password]);
44+
45+
useEffect(() => {
46+
if (!session) return;
47+
48+
const redirect = localStorage.getItem("continue-redirect");
49+
if (redirect) {
50+
localStorage.removeItem("continue-redirect");
51+
router.push(redirect);
52+
return;
53+
}
54+
55+
getOuterbaseWorkspace()
56+
.then((w) => {
57+
router.push(`/w/${w.items[0].short_name}`);
58+
})
59+
.catch(console.error)
60+
.finally(() => {
61+
setLoading(false);
62+
});
63+
}, [session, router]);
4764

4865
return (
4966
<ThemeLayout overrideTheme="dark">

src/components/gui/json-editor/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ interface JsonEditorProps {
1313
}
1414

1515
function useJsonTheme() {
16-
const { resolvedTheme } = useTheme();
16+
const { resolvedTheme, forcedTheme } = useTheme();
1717

1818
return useMemo(() => {
19-
if (resolvedTheme === "light") {
19+
if ((forcedTheme ?? resolvedTheme) === "light") {
2020
return createTheme({
2121
theme: "light",
2222
settings: {
@@ -69,7 +69,7 @@ function useJsonTheme() {
6969
],
7070
});
7171
}
72-
}, [resolvedTheme]);
72+
}, [resolvedTheme, forcedTheme]);
7373
}
7474

7575
const JsonEditor = forwardRef<ReactCodeMirrorRef, JsonEditorProps>(

src/components/gui/sql-editor/use-editor-theme.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ export default function useCodeEditorTheme({
88
}: {
99
fontSize?: number;
1010
}) {
11-
const { resolvedTheme } = useTheme();
11+
const { resolvedTheme, forcedTheme } = useTheme();
1212

1313
return useMemo(() => {
14-
if (resolvedTheme === "light") {
14+
if ((forcedTheme ?? resolvedTheme) === "light") {
1515
return createTheme({
1616
theme: "light",
1717
settings: {
@@ -73,5 +73,5 @@ export default function useCodeEditorTheme({
7373
],
7474
});
7575
}
76-
}, [resolvedTheme, fontSize]);
76+
}, [resolvedTheme, forcedTheme, fontSize]);
7777
}

0 commit comments

Comments
 (0)