diff --git a/apps/dashboard/src/@/actions/joinWaitlist.ts b/apps/dashboard/src/@/actions/joinWaitlist.ts deleted file mode 100644 index cdc7ce0d5e5..00000000000 --- a/apps/dashboard/src/@/actions/joinWaitlist.ts +++ /dev/null @@ -1,40 +0,0 @@ -"use server"; - -import { getAuthToken } from "../../app/api/lib/getAuthToken"; -import { API_SERVER_URL } from "../constants/env"; - -export async function joinTeamWaitlist(options: { - teamSlug: string; - // currently only 'nebula' is supported - scope: "nebula"; -}) { - const { teamSlug, scope } = options; - const token = await getAuthToken(); - - if (!token) { - return { - errorMessage: "You are not authorized to perform this action", - }; - } - - const res = await fetch(`${API_SERVER_URL}/v1/teams/${teamSlug}/waitlist`, { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${token}`, - }, - body: JSON.stringify({ - scope, - }), - }); - - if (!res.ok) { - return { - errorMessage: "Failed to join waitlist", - }; - } - - return { - success: true, - }; -} diff --git a/apps/dashboard/src/@/api/team.ts b/apps/dashboard/src/@/api/team.ts index b0c862090d4..52c66d8e2df 100644 --- a/apps/dashboard/src/@/api/team.ts +++ b/apps/dashboard/src/@/api/team.ts @@ -74,31 +74,3 @@ export async function getDefaultTeam() { } return null; } - -type TeamNebulaWaitList = { - onWaitlist: boolean; - createdAt: null | string; -}; - -export async function getTeamNebulaWaitList(teamSlug: string) { - const token = await getAuthToken(); - - if (!token) { - return null; - } - - const res = await fetch( - `${API_SERVER_URL}/v1/teams/${teamSlug}/waitlist?scope=nebula`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - }, - ); - - if (res.ok) { - return (await res.json()).result as TeamNebulaWaitList; - } - - return null; -} diff --git a/apps/dashboard/src/app/nebula-app/(app)/layout.tsx b/apps/dashboard/src/app/nebula-app/(app)/layout.tsx index 0af841ceff0..6aba916681e 100644 --- a/apps/dashboard/src/app/nebula-app/(app)/layout.tsx +++ b/apps/dashboard/src/app/nebula-app/(app)/layout.tsx @@ -1,6 +1,4 @@ -import { type Team, getTeams } from "@/api/team"; -import type { Account } from "@3rdweb-sdk/react/hooks/useApi"; -import Link from "next/link"; +import { getTeams } from "@/api/team"; import type React from "react"; import { getValidAccount } from "../../account/settings/getAccount"; import { @@ -8,11 +6,8 @@ import { getAuthTokenWalletAddress, } from "../../api/lib/getAuthToken"; import { loginRedirect } from "../../login/loginRedirect"; -import { NebulaWaitListPage } from "../../team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page"; import { getSessions } from "./api/session"; import { ChatPageLayout } from "./components/ChatPageLayout"; -import { NebulaAccountButton } from "./components/NebulaAccountButton"; -import { NebulaIcon } from "./icons/NebulaIcon"; export default async function Layout(props: { children: React.ReactNode; @@ -37,15 +32,6 @@ export default async function Layout(props: { loginRedirect(); } - const teamWithNebulaAccess = teams.find((team) => - team.enabledScopes.includes("nebula"), - ); - - // if none of them teams have nebula access, request access on first team, and show waitlist page - if (!teamWithNebulaAccess) { - return ; - } - const sessions = await getSessions({ authToken, }).catch(() => []); @@ -61,43 +47,3 @@ export default async function Layout(props: { ); } - -function NebulaWaitlistPage(props: { - account: Account; - team: Team; -}) { - return ( -
-
-
-
- - Nebula -
-
- - Support - - - - Docs - - - -
-
-
- - {/* page */} - -
- ); -} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/ProjectSidebarLayout.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/ProjectSidebarLayout.tsx index 42e28684de2..99fe01ecb65 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/ProjectSidebarLayout.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/ProjectSidebarLayout.tsx @@ -16,9 +16,8 @@ import { NebulaIcon } from "../../../../nebula-app/(app)/icons/NebulaIcon"; export function ProjectSidebarLayout(props: { layoutPath: string; children: React.ReactNode; - showNebula: boolean; }) { - const { layoutPath, children, showNebula } = props; + const { layoutPath, children } = props; const tracking = (label: string) => ({ category: "project-sidebar", @@ -60,16 +59,12 @@ export function ProjectSidebarLayout(props: { icon: ContractIcon, tracking: tracking("contracts"), }, - ...(showNebula - ? [ - { - href: `${layoutPath}/nebula`, - label: "Nebula", - icon: NebulaIcon, - tracking: tracking("nebula"), - }, - ] - : []), + { + href: `${layoutPath}/nebula`, + label: "Nebula", + icon: NebulaIcon, + tracking: tracking("nebula"), + }, { href: `${layoutPath}/insight`, label: "Insight", diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/layout.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/layout.tsx index e5a14936c6d..309345de817 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/layout.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/layout.tsx @@ -1,5 +1,5 @@ import { getProjects } from "@/api/projects"; -import { getTeamNebulaWaitList, getTeams } from "@/api/team"; +import { getTeams } from "@/api/team"; import { SidebarProvider } from "@/components/ui/sidebar"; import { redirect } from "next/navigation"; import { AnnouncementBanner } from "../../../../components/notices/AnnouncementBanner"; @@ -49,9 +49,6 @@ export default async function ProjectLayout(props: { redirect(`/team/${params.team_slug}`); } - const isOnNebulaWaitList = (await getTeamNebulaWaitList(team.slug)) - ?.onWaitlist; - const layoutPath = `/team/${params.team_slug}/${params.project_slug}`; return ( @@ -67,10 +64,7 @@ export default async function ProjectLayout(props: { accountAddress={accountAddress} /> - + {props.children} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page-ui.client.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page-ui.client.tsx deleted file mode 100644 index 9c28e36478e..00000000000 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page-ui.client.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { cn } from "@/lib/utils"; -import Link from "next/link"; -import { NebulaIcon } from "../../../../../nebula-app/(app)/icons/NebulaIcon"; -import { ShareButton } from "./share-button.client"; - -export function NebulaWaitListPageUI(props: { - teamId: string; - className?: string; - hideHeader?: boolean; -}) { - return ( -
- {/* Header */} - {!props.hideHeader && ( -
-
-

Nebula

- -
-
- )} - -
- - -

- Share this invite link and get moved up the list when your - friends sign up! -

-
- } - /> -
- - ); -} - -function CenteredCard(props: { - footer: React.ReactNode; - title: React.ReactNode; - description: string; -}) { - return ( -
-
- {/* fancy borders */} -
- {/* top */} - - {/* bottom */} - - {/* left */} - - {/* right */} - -
- -
-
- {/* Icon */} -
-
- -
-
- -
- -

- {props.title} -

- -
- -

- {props.description} -

- -
- - {props.footer} -
-
-
-
- ); -} - -function DashedBgDiv(props: { - className?: string; - type: "horizontal" | "vertical"; -}) { - return ( -
- ); -} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page.tsx deleted file mode 100644 index f1ee414322c..00000000000 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { joinTeamWaitlist } from "@/actions/joinWaitlist"; -import { type Team, getTeamNebulaWaitList } from "@/api/team"; -import { Button } from "@/components/ui/button"; -import Link from "next/link"; -import { NebulaWaitListPageUI } from "./nebula-waitlist-page-ui.client"; - -export async function NebulaWaitListPage(props: { - team: Team; - className?: string; - hideHeader?: boolean; -}) { - const nebulaWaitList = await getTeamNebulaWaitList(props.team.slug); - - // this should never happen - if (!nebulaWaitList) { - return ( - - ); - } - - // if not already on the waitlist, join the waitlist - if (!nebulaWaitList.onWaitlist) { - const res = await joinTeamWaitlist({ - scope: "nebula", - teamSlug: props.team.slug, - }).catch(() => null); - - // this should never happen - if (!res?.success) { - return ( - - ); - } - } - - return ( - - ); -} - -function UnexpectedErrorPage(props: { - message: string; -}) { - return ( -
-
-
- {props.message} - -
-
-
- ); -} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist.stories.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist.stories.tsx deleted file mode 100644 index dc98b66fb52..00000000000 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist.stories.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { NebulaWaitListPageUI } from "./nebula-waitlist-page-ui.client"; - -const meta = { - title: "nebula/waitlist", - component: Story, - parameters: { - nextjs: { - appDirectory: true, - }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Variants: Story = { - args: { - inWaitlist: false, - }, -}; - -function Story() { - return ; -} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/share-button.client.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/share-button.client.tsx deleted file mode 100644 index a5ef6a71ac5..00000000000 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/share-button.client.tsx +++ /dev/null @@ -1,36 +0,0 @@ -"use client"; - -import { Button } from "@/components/ui/button"; -import { ToolTipLabel } from "@/components/ui/tooltip"; -import { CheckIcon, ShareIcon } from "lucide-react"; -import { useState } from "react"; - -export function ShareButton(props: { - teamId: string; -}) { - const [isCopied, setIsCopied] = useState(false); - - return ( - - - - ); -} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/page.tsx index 059430bccc7..17d1d271d55 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/page.tsx @@ -5,7 +5,6 @@ import { redirect } from "next/navigation"; import { getAuthToken } from "../../../../api/lib/getAuthToken"; import { loginRedirect } from "../../../../login/loginRedirect"; import { NebulaAnalyticsPage } from "./components/analytics/nebula-analytics-page"; -import { NebulaWaitListPage } from "./components/nebula-waitlist-page"; import { NebulaFTUX } from "./nebula-ftux"; export default async function Page(props: { @@ -42,8 +41,6 @@ export default async function Page(props: { loginRedirect(`/team/${params.team_slug}/${params.project_slug}/nebula`); } - const hasNebulaAccess = team.enabledScopes.includes("nebula"); - const activeResponse = await isProjectActive({ teamId: team.id, projectId: project.id, @@ -51,35 +48,31 @@ export default async function Page(props: { const showFTUX = !activeResponse.nebula; - if (hasNebulaAccess) { - if (showFTUX) { - return ( -
-
-
-

Nebula

-
-
- -
- + if (showFTUX) { + return ( +
+
+
+

Nebula

- ); - } - return ( - +
+ +
+
); } - return ; + return ( + + ); }