chore: update admin signup journey

This commit is contained in:
Steven 2024-06-03 22:59:00 +08:00
parent d51d180a29
commit 769b474bdc
6 changed files with 2990 additions and 2391 deletions

View File

@ -18,7 +18,8 @@
"sign-in": "Sign in", "sign-in": "Sign in",
"sign-up": "Sign up", "sign-up": "Sign up",
"sign-out": "Sign out", "sign-out": "Sign out",
"create-your-account": "Create your account" "create-your-account": "Create your account",
"host-tip": "You are registering as Admin."
}, },
"analytics": { "analytics": {
"self": "Analytics", "self": "Analytics",

File diff suppressed because it is too large Load Diff

View File

@ -1,25 +1,21 @@
import { useColorScheme } from "@mui/joy"; import { useColorScheme } from "@mui/joy";
import { useEffect, useState } from "react"; import { useEffect } from "react";
import { Outlet } from "react-router-dom"; import { Outlet } from "react-router-dom";
import DemoBanner from "@/components/DemoBanner"; import DemoBanner from "@/components/DemoBanner";
import { useUserStore, useWorkspaceStore } from "@/stores"; import { useWorkspaceStore } from "@/stores";
import useNavigateTo from "./hooks/useNavigateTo";
function App() { function App() {
const navigateTo = useNavigateTo();
const { mode: colorScheme } = useColorScheme(); const { mode: colorScheme } = useColorScheme();
const userStore = useUserStore();
const workspaceStore = useWorkspaceStore(); const workspaceStore = useWorkspaceStore();
const [loading, setLoading] = useState(true);
// Redirect to sign up page if no instance owner.
useEffect(() => { useEffect(() => {
(async () => { if (!workspaceStore.profile.owner) {
try { navigateTo("/auth/signup");
await Promise.all([workspaceStore.fetchWorkspaceProfile(), workspaceStore.fetchWorkspaceSetting(), userStore.fetchCurrentUser()]); }
} catch (error) { }, [workspaceStore.profile]);
// Do nothing.
}
setLoading(false);
})();
}, []);
useEffect(() => { useEffect(() => {
const styleEl = document.createElement("style"); const styleEl = document.createElement("style");
@ -61,13 +57,11 @@ function App() {
} }
}, [colorScheme]); }, [colorScheme]);
return !loading ? ( return (
<> <>
<DemoBanner /> <DemoBanner />
<Outlet /> <Outlet />
</> </>
) : (
<></>
); );
} }

View File

@ -0,0 +1,42 @@
import { createContext, useContext, useEffect, useState } from "react";
import { useUserStore, useWorkspaceStore } from "@/stores";
interface Context {}
const CommonContext = createContext<Context>({});
const CommonContextProvider = ({ children }: { children: React.ReactNode }) => {
const workspaceStore = useWorkspaceStore();
const userStore = useUserStore();
const [commonContext, setCommonContext] = useState<Context>({});
const [initialized, setInitialized] = useState(false);
useEffect(() => {
(async () => {
try {
await Promise.all([workspaceStore.fetchWorkspaceProfile(), workspaceStore.fetchWorkspaceSetting(), userStore.fetchCurrentUser()]);
} catch (error) {
// Do nothing.
}
setInitialized(true);
})();
}, []);
return (
<CommonContext.Provider
value={{
...commonContext,
setLocale: (locale: string) => setCommonContext({ ...commonContext, locale }),
setAppearance: (appearance: string) => setCommonContext({ ...commonContext, appearance }),
}}
>
{!initialized ? null : <>{children}</>}
</CommonContext.Provider>
);
};
export const useCommonContext = () => {
return useContext(CommonContext);
};
export default CommonContextProvider;

View File

@ -5,6 +5,7 @@ import { RouterProvider } from "react-router-dom";
import "./css/index.css"; import "./css/index.css";
import "./css/joy-ui.css"; import "./css/joy-ui.css";
import "./i18n"; import "./i18n";
import CommonContextProvider from "./layouts/CommonContextProvider";
import router from "./routers"; import router from "./routers";
const container = document.getElementById("root"); const container = document.getElementById("root");
@ -12,7 +13,9 @@ const root = createRoot(container as HTMLElement);
root.render( root.render(
<CssVarsProvider> <CssVarsProvider>
<RouterProvider router={router} /> <CommonContextProvider>
<RouterProvider router={router} />
</CommonContextProvider>
<Toaster position="top-center" /> <Toaster position="top-center" />
</CssVarsProvider>, </CssVarsProvider>,
); );

View File

@ -113,12 +113,16 @@ const SignUp: React.FC = () => {
</Button> </Button>
</div> </div>
</form> </form>
<p className="w-full mt-4 text-sm"> {!workspaceStore.profile.owner ? (
<span className="dark:text-gray-500">{"Already has an account?"}</span> <p className="w-full mt-4 text-sm font-medium dark:text-gray-500">{t("auth.host-tip")}</p>
<Link className="cursor-pointer ml-2 text-blue-600 hover:underline" to="/auth" unstable_viewTransition> ) : (
{t("auth.sign-in")} <p className="w-full mt-4 text-sm">
</Link> <span className="dark:text-gray-500">{"Already has an account?"}</span>
</p> <Link className="cursor-pointer ml-2 text-blue-600 hover:underline" to="/auth" unstable_viewTransition>
{t("auth.sign-in")}
</Link>
</p>
)}
</div> </div>
</div> </div>
</div> </div>