diff --git a/space/components/accounts/sign-in.tsx b/space/components/accounts/sign-in.tsx
index c6a151d4423..8f6d1c5f14a 100644
--- a/space/components/accounts/sign-in.tsx
+++ b/space/components/accounts/sign-in.tsx
@@ -19,6 +19,7 @@ export const SignInView = observer(() => {
const { user: userStore } = useMobxStore();
const router = useRouter();
+ const { next_path } = router.query as { next_path: string };
const { setToastAlert } = useToast();
@@ -31,17 +32,17 @@ export const SignInView = observer(() => {
};
const onSignInSuccess = (response: any) => {
- const isOnboarded = response?.user?.onboarding_step?.profile_complete || false;
-
- const nextPath = router.asPath.includes("next_path") ? router.asPath.split("/?next_path=")[1] : "/login";
-
userStore.setCurrentUser(response?.user);
- if (!isOnboarded) {
- router.push(`/onboarding?next_path=${nextPath}`);
- return;
+ const isOnboard = response?.user?.onboarding_step?.profile_complete || false;
+
+ if (isOnboard) {
+ if (next_path) router.push(next_path);
+ else router.push("/login");
+ } else {
+ if (next_path) router.push(`/onboarding?next_path=${next_path}`);
+ else router.push("/onboarding");
}
- router.push((nextPath ?? "/login").toString());
};
const handleGoogleSignIn = async ({ clientId, credential }: any) => {
diff --git a/space/components/issues/navbar/index.tsx b/space/components/issues/navbar/index.tsx
index 35ffbe289c2..03f082f33a3 100644
--- a/space/components/issues/navbar/index.tsx
+++ b/space/components/issues/navbar/index.tsx
@@ -129,7 +129,7 @@ const IssueNavbar = observer(() => {
) : (
-
+
Sign in
diff --git a/space/components/views/login.tsx b/space/components/views/login.tsx
index d01a226811f..406d6be9877 100644
--- a/space/components/views/login.tsx
+++ b/space/components/views/login.tsx
@@ -7,7 +7,13 @@ import { SignInView, UserLoggedIn } from "components/accounts";
export const LoginView = observer(() => {
const { user: userStore } = useMobxStore();
- if (!userStore.currentUser) return ;
-
- return ;
+ return (
+ <>
+ {userStore?.loader ? (
+ Loading
+ ) : (
+ <>{userStore.currentUser ? : }>
+ )}
+ >
+ );
});
diff --git a/space/lib/mobx/store-init.tsx b/space/lib/mobx/store-init.tsx
index 6e38d9c6d17..4fc761ad194 100644
--- a/space/lib/mobx/store-init.tsx
+++ b/space/lib/mobx/store-init.tsx
@@ -3,12 +3,14 @@
import { useEffect } from "react";
// next imports
import { useRouter } from "next/router";
+// js cookie
+import Cookie from "js-cookie";
// mobx store
import { useMobxStore } from "lib/mobx/store-provider";
import { RootStore } from "store/root";
const MobxStoreInit = () => {
- const store: RootStore = useMobxStore();
+ const { user: userStore }: RootStore = useMobxStore();
const router = useRouter();
const { states, labels, priorities } = router.query as { states: string[]; labels: string[]; priorities: string[] };
@@ -19,6 +21,11 @@ const MobxStoreInit = () => {
// store.issue.userSelectedStates = states || [];
// }, [store.issue]);
+ useEffect(() => {
+ const authToken = Cookie.get("accessToken") || null;
+ if (authToken) userStore.fetchCurrentUser();
+ }, [userStore]);
+
return <>>;
};
diff --git a/space/pages/index.tsx b/space/pages/index.tsx
new file mode 100644
index 00000000000..1ff239253ac
--- /dev/null
+++ b/space/pages/index.tsx
@@ -0,0 +1,19 @@
+import { useEffect } from "react";
+
+// next
+import { NextPage } from "next";
+import { useRouter } from "next/router";
+
+const Index: NextPage = () => {
+ const router = useRouter();
+ const { next_path } = router.query as { next_path: string };
+
+ useEffect(() => {
+ if (next_path) router.push(`/login?next_path=${next_path}`);
+ else router.push(`/login`);
+ }, [router, next_path]);
+
+ return null;
+};
+
+export default Index;
diff --git a/space/pages/login/index.tsx b/space/pages/login/index.tsx
index a80eff8736d..9f20f099f4a 100644
--- a/space/pages/login/index.tsx
+++ b/space/pages/login/index.tsx
@@ -5,4 +5,4 @@ import { LoginView } from "components/views";
const LoginPage = () => ;
-export default LoginPage;
\ No newline at end of file
+export default LoginPage;
diff --git a/space/store/user.ts b/space/store/user.ts
index 3a76c211177..cc7334e872e 100644
--- a/space/store/user.ts
+++ b/space/store/user.ts
@@ -7,12 +7,17 @@ import { ActorDetail } from "types/issue";
import { IUser } from "types/user";
export interface IUserStore {
+ loader: boolean;
+ error: any | null;
currentUser: any | null;
fetchCurrentUser: () => void;
currentActor: () => any;
}
class UserStore implements IUserStore {
+ loader: boolean = false;
+ error: any | null = null;
+
currentUser: IUser | null = null;
// root store
rootStore;
@@ -73,14 +78,19 @@ class UserStore implements IUserStore {
fetchCurrentUser = async () => {
try {
+ this.loader = true;
+ this.error = null;
const response = await this.userService.currentUser();
if (response) {
runInAction(() => {
+ this.loader = false;
this.currentUser = response;
});
}
} catch (error) {
console.error("Failed to fetch current user", error);
+ this.loader = false;
+ this.error = error;
}
};
}