diff --git a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx index 9cae81b66cd..5fa0a02e62a 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx @@ -150,7 +150,7 @@ export const CustomConnectWallet = (props: { - Sign In + Connect Wallet diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx index f10cd47c4ed..b8d8eb66e78 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx @@ -146,7 +146,7 @@ export function FaucetButton({ - Sign In + Connect Wallet ); diff --git a/apps/dashboard/src/app/login/LoginPage.tsx b/apps/dashboard/src/app/login/LoginPage.tsx index 43b3762c03f..ed3c9641061 100644 --- a/apps/dashboard/src/app/login/LoginPage.tsx +++ b/apps/dashboard/src/app/login/LoginPage.tsx @@ -123,11 +123,7 @@ function PageContent(props: { | { id: "complete"; } - >( - props.account - ? { id: "onboarding", account: props.account } - : { id: "login" }, - ); + >({ id: "login" }); const router = useDashboardRouter(); const connectionStatus = useActiveWalletConnectionStatus(); diff --git a/apps/dashboard/src/app/login/page.tsx b/apps/dashboard/src/app/login/page.tsx index f8850979f5f..9d86a8e0224 100644 --- a/apps/dashboard/src/app/login/page.tsx +++ b/apps/dashboard/src/app/login/page.tsx @@ -1,7 +1,5 @@ -import { redirect } from "next/navigation"; import { getRawAccount } from "../account/settings/getAccount"; import { LoginAndOnboardingPage } from "./LoginPage"; -import { isOnboardingComplete } from "./onboarding/isOnboardingRequired"; export default async function Page(props: { searchParams: Promise<{ @@ -11,13 +9,11 @@ export default async function Page(props: { const nextPath = (await props.searchParams).next; const account = await getRawAccount(); - if (account && isOnboardingComplete(account)) { - if (nextPath) { - redirect(nextPath); - } else { - redirect("/team"); - } - } + // don't redirect away from login page if authToken is already present and onboarding is done + // so that if user is stuck in a state where cookie is set, account onboarding is complete but the wallet is not connected, they can connect wallet, sign in and continue + + // if the user is already logged in, wallet is connected and onboarding is complete + // user will be redirected to the next path on the client side without having to do anything return ; } diff --git a/apps/dashboard/src/app/team/[team_slug]/(team)/layout.tsx b/apps/dashboard/src/app/team/[team_slug]/(team)/layout.tsx index 387a7a3b039..2cb3232d4f9 100644 --- a/apps/dashboard/src/app/team/[team_slug]/(team)/layout.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/(team)/layout.tsx @@ -2,6 +2,7 @@ import { getProjects } from "@/api/projects"; import { getTeamNebulaWaitList, getTeams } from "@/api/team"; import { TabPathLinks } from "@/components/ui/tabs"; import { notFound, redirect } from "next/navigation"; +import { getValidAccount } from "../../../account/settings/getAccount"; import { TeamHeaderLoggedIn } from "../../components/TeamHeader/team-header-logged-in.client"; export default async function TeamLayout(props: { @@ -9,7 +10,11 @@ export default async function TeamLayout(props: { params: Promise<{ team_slug: string }>; }) { const params = await props.params; - const teams = await getTeams(); + + const [account, teams] = await Promise.all([ + getValidAccount(`/team/${params.team_slug}`), + getTeams(), + ]); if (!teams) { redirect("/login"); @@ -37,6 +42,7 @@ export default async function TeamLayout(props: { currentTeam={team} teamsAndProjects={teamsAndProjects} currentProject={undefined} + account={account} /> ; }) { const params = await props.params; - const teams = await getTeams(); + const [teams, account] = await Promise.all([ + getTeams(), + getValidAccount(`/team/${params.team_slug}/${params.project_slug}`), + ]); if (!teams) { redirect("/login"); @@ -49,6 +53,7 @@ export default async function TeamLayout(props: { currentProject={project} currentTeam={team} teamsAndProjects={teamsAndProjects} + account={account} /> - Sign in + Connect Wallet @@ -64,7 +64,7 @@ export function TeamHeaderLoggedOutMobileUI(props: { - Sign in + Connect Wallet diff --git a/apps/dashboard/src/app/team/components/TeamHeader/team-header-logged-in.client.tsx b/apps/dashboard/src/app/team/components/TeamHeader/team-header-logged-in.client.tsx index db2188bdab7..e2d06acfddf 100644 --- a/apps/dashboard/src/app/team/components/TeamHeader/team-header-logged-in.client.tsx +++ b/apps/dashboard/src/app/team/components/TeamHeader/team-header-logged-in.client.tsx @@ -5,7 +5,7 @@ import type { Team } from "@/api/team"; import { getThirdwebClient } from "@/constants/thirdweb.server"; import { useDashboardRouter } from "@/lib/DashboardRouter"; import { CustomConnectWallet } from "@3rdweb-sdk/react/components/connect-wallet"; -import { useAccount } from "@3rdweb-sdk/react/hooks/useApi"; +import type { Account } from "@3rdweb-sdk/react/hooks/useApi"; import { useCallback, useState } from "react"; import { useActiveWallet, useDisconnect } from "thirdweb/react"; import { LazyCreateAPIKeyDialog } from "../../../../components/settings/ApiKeys/Create/LazyCreateAPIKeyDialog"; @@ -20,10 +20,10 @@ export function TeamHeaderLoggedIn(props: { currentTeam: Team; teamsAndProjects: Array<{ team: Team; projects: Project[] }>; currentProject: Project | undefined; + account: Pick; }) { const [isCreateProjectDialogOpen, setIsCreateProjectDialogOpen] = useState(false); - const myAccountQuery = useAccount(); const activeWallet = useActiveWallet(); const { disconnect } = useDisconnect(); const router = useDashboardRouter(); @@ -45,7 +45,7 @@ export function TeamHeaderLoggedIn(props: { currentProject: props.currentProject, currentTeam: props.currentTeam, teamsAndProjects: props.teamsAndProjects, - account: myAccountQuery.data, + account: props.account, logout: logout, connectButton: , createProject: () => setIsCreateProjectDialogOpen(true), diff --git a/apps/dashboard/src/app/team/components/TeamHeader/team-header.tsx b/apps/dashboard/src/app/team/components/TeamHeader/team-header.tsx index 868af34cb24..b662b528da4 100644 --- a/apps/dashboard/src/app/team/components/TeamHeader/team-header.tsx +++ b/apps/dashboard/src/app/team/components/TeamHeader/team-header.tsx @@ -1,13 +1,13 @@ import { getProjects } from "@/api/projects"; import { getTeams } from "@/api/team"; -import { getAuthToken } from "../../../api/lib/getAuthToken"; +import { getRawAccount } from "../../../account/settings/getAccount"; import { TeamHeaderLoggedOut } from "./TeamHeaderLoggedOut"; import { TeamHeaderLoggedIn } from "./team-header-logged-in.client"; export async function TeamHeader() { - const authToken = await getAuthToken(); + const account = await getRawAccount(); - if (!authToken) { + if (!account) { return ; } @@ -34,6 +34,7 @@ export async function TeamHeader() { currentTeam={firstTeam} teamsAndProjects={teamsAndProjects} currentProject={undefined} + account={account} /> ); } diff --git a/apps/dashboard/src/components/buttons/MismatchButton.tsx b/apps/dashboard/src/components/buttons/MismatchButton.tsx index 767958b8486..9a7dc57f7e2 100644 --- a/apps/dashboard/src/components/buttons/MismatchButton.tsx +++ b/apps/dashboard/src/components/buttons/MismatchButton.tsx @@ -108,7 +108,7 @@ export const MismatchButton = forwardRef< - Sign In + Connect Wallet );