From f4bbc956f96bea843788b237c7f45f0c3d9a69d8 Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 14 Nov 2025 01:23:02 +0700 Subject: [PATCH 1/3] [Dashboard] MoveContracts back to top level sidebar --- .../components/ProjectSidebarLayout.tsx | 274 +++++++++--------- 1 file changed, 138 insertions(+), 136 deletions(-) diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx index f92b3b78fe7..f381cc5e9fa 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx @@ -1,153 +1,155 @@ "use client"; import { Badge } from "@workspace/ui/components/badge"; import { - BookTextIcon, - BoxIcon, - DatabaseIcon, - HomeIcon, - RssIcon, - Settings2Icon, - WebhookIcon, + BookTextIcon, + BoxIcon, + DatabaseIcon, + HomeIcon, + RssIcon, + Settings2Icon, + WebhookIcon, } from "lucide-react"; import { - FullWidthSidebarLayout, - type ShadcnSidebarLink, + FullWidthSidebarLayout, + type ShadcnSidebarLink, } from "@/components/blocks/full-width-sidebar-layout"; import { BridgeIcon } from "@/icons/BridgeIcon"; +import { ContractIcon } from "@/icons/ContractIcon"; import { NebulaIcon } from "@/icons/NebulaIcon"; import { PayIcon } from "@/icons/PayIcon"; import { TokenIcon } from "@/icons/TokenIcon"; import { WalletProductIcon } from "@/icons/WalletProductIcon"; export function ProjectSidebarLayout(props: { - layoutPath: string; - children: React.ReactNode; - hasEngines: boolean; + layoutPath: string; + children: React.ReactNode; + hasEngines: boolean; }) { - const contentSidebarLinks = [ - { - exactMatch: true, - href: props.layoutPath, - icon: HomeIcon, - label: "Overview", - }, - { - separator: true, - }, - { - subMenu: { - icon: WalletProductIcon, - label: "Wallets", - }, - links: [ - { - href: `${props.layoutPath}/wallets/user-wallets`, - label: "User Wallets", - }, - { - href: `${props.layoutPath}/wallets/server-wallets`, - label: "Server Wallets", - }, - { - href: `${props.layoutPath}/wallets/sponsored-gas`, - label: "Gas Sponsorship", - }, - ], - }, - { - href: `${props.layoutPath}/x402`, - icon: PayIcon, - label: ( - - x402 New - - ), - }, - { - href: `${props.layoutPath}/bridge`, - icon: BridgeIcon, - label: "Bridge", - }, - { - href: `${props.layoutPath}/tokens`, - icon: TokenIcon, - label: "Tokens", - }, - { - href: `${props.layoutPath}/ai`, - icon: NebulaIcon, - label: "AI", - }, - { - subMenu: { - icon: RssIcon, - label: "Gateway", - }, - links: [ - { - href: `${props.layoutPath}/gateway/rpc`, - label: "RPC", - }, - { - href: `${props.layoutPath}/gateway/indexer`, - label: "Indexer", - }, - { - href: `${props.layoutPath}/contracts`, - label: "Contracts", - }, - ], - }, - // only show engine link if there the user already has an engine instance - ...(props.hasEngines - ? [ - { - href: `${props.layoutPath}/engine`, - icon: DatabaseIcon, - label: "Engine", - }, - ] - : []), - ] satisfies ShadcnSidebarLink[]; + const contentSidebarLinks = [ + { + exactMatch: true, + href: props.layoutPath, + icon: HomeIcon, + label: "Overview", + }, + { + separator: true, + }, + { + subMenu: { + icon: WalletProductIcon, + label: "Wallets", + }, + links: [ + { + href: `${props.layoutPath}/wallets/user-wallets`, + label: "User Wallets", + }, + { + href: `${props.layoutPath}/wallets/server-wallets`, + label: "Server Wallets", + }, + { + href: `${props.layoutPath}/wallets/sponsored-gas`, + label: "Gas Sponsorship", + }, + ], + }, + { + href: `${props.layoutPath}/x402`, + icon: PayIcon, + label: ( + + x402 New + + ), + }, + { + href: `${props.layoutPath}/bridge`, + icon: BridgeIcon, + label: "Bridge", + }, + { + href: `${props.layoutPath}/tokens`, + icon: TokenIcon, + label: "Tokens", + }, + { + href: `${props.layoutPath}/ai`, + icon: NebulaIcon, + label: "AI", + }, + { + href: `${props.layoutPath}/contracts`, + icon: ContractIcon, + label: "Contracts", + }, + { + subMenu: { + icon: RssIcon, + label: "Gateway", + }, + links: [ + { + href: `${props.layoutPath}/gateway/rpc`, + label: "RPC", + }, + { + href: `${props.layoutPath}/gateway/indexer`, + label: "Indexer", + }, + ], + }, + // only show engine link if there the user already has an engine instance + ...(props.hasEngines + ? [ + { + href: `${props.layoutPath}/engine`, + icon: DatabaseIcon, + label: "Engine", + }, + ] + : []), + ] satisfies ShadcnSidebarLink[]; - const footerSidebarLinks = [ - { - separator: true, - }, - { - href: `${props.layoutPath}/webhooks/contracts`, - icon: WebhookIcon, - isActive: (pathname) => { - return pathname.startsWith(`${props.layoutPath}/webhooks`); - }, - label: "Webhooks", - }, - { - href: `${props.layoutPath}/settings`, - icon: Settings2Icon, - label: "Project Settings", - }, - { - separator: true, - }, - { - href: "https://portal.thirdweb.com", - icon: BookTextIcon, - label: "Documentation", - }, - { - href: "https://playground.thirdweb.com/wallets/sign-in/button", - icon: BoxIcon, - label: "Playground", - }, - ] satisfies ShadcnSidebarLink[]; + const footerSidebarLinks = [ + { + separator: true, + }, + { + href: `${props.layoutPath}/webhooks/contracts`, + icon: WebhookIcon, + isActive: (pathname) => { + return pathname.startsWith(`${props.layoutPath}/webhooks`); + }, + label: "Webhooks", + }, + { + href: `${props.layoutPath}/settings`, + icon: Settings2Icon, + label: "Project Settings", + }, + { + separator: true, + }, + { + href: "https://portal.thirdweb.com", + icon: BookTextIcon, + label: "Documentation", + }, + { + href: "https://playground.thirdweb.com/wallets/sign-in/button", + icon: BoxIcon, + label: "Playground", + }, + ] satisfies ShadcnSidebarLink[]; - return ( - - {props.children} - - ); + return ( + + {props.children} + + ); } From 8d22be89e118e932a80d10e27f4f22de45d89dd7 Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 14 Nov 2025 01:24:19 +0700 Subject: [PATCH 2/3] fmt --- .../components/ProjectSidebarLayout.tsx | 274 +++++++++--------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx index f381cc5e9fa..57506a9d369 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx @@ -1,17 +1,17 @@ "use client"; import { Badge } from "@workspace/ui/components/badge"; import { - BookTextIcon, - BoxIcon, - DatabaseIcon, - HomeIcon, - RssIcon, - Settings2Icon, - WebhookIcon, + BookTextIcon, + BoxIcon, + DatabaseIcon, + HomeIcon, + RssIcon, + Settings2Icon, + WebhookIcon, } from "lucide-react"; import { - FullWidthSidebarLayout, - type ShadcnSidebarLink, + FullWidthSidebarLayout, + type ShadcnSidebarLink, } from "@/components/blocks/full-width-sidebar-layout"; import { BridgeIcon } from "@/icons/BridgeIcon"; import { ContractIcon } from "@/icons/ContractIcon"; @@ -21,135 +21,135 @@ import { TokenIcon } from "@/icons/TokenIcon"; import { WalletProductIcon } from "@/icons/WalletProductIcon"; export function ProjectSidebarLayout(props: { - layoutPath: string; - children: React.ReactNode; - hasEngines: boolean; + layoutPath: string; + children: React.ReactNode; + hasEngines: boolean; }) { - const contentSidebarLinks = [ - { - exactMatch: true, - href: props.layoutPath, - icon: HomeIcon, - label: "Overview", - }, - { - separator: true, - }, - { - subMenu: { - icon: WalletProductIcon, - label: "Wallets", - }, - links: [ - { - href: `${props.layoutPath}/wallets/user-wallets`, - label: "User Wallets", - }, - { - href: `${props.layoutPath}/wallets/server-wallets`, - label: "Server Wallets", - }, - { - href: `${props.layoutPath}/wallets/sponsored-gas`, - label: "Gas Sponsorship", - }, - ], - }, - { - href: `${props.layoutPath}/x402`, - icon: PayIcon, - label: ( - - x402 New - - ), - }, - { - href: `${props.layoutPath}/bridge`, - icon: BridgeIcon, - label: "Bridge", - }, - { - href: `${props.layoutPath}/tokens`, - icon: TokenIcon, - label: "Tokens", - }, - { - href: `${props.layoutPath}/ai`, - icon: NebulaIcon, - label: "AI", - }, - { - href: `${props.layoutPath}/contracts`, - icon: ContractIcon, - label: "Contracts", - }, - { - subMenu: { - icon: RssIcon, - label: "Gateway", - }, - links: [ - { - href: `${props.layoutPath}/gateway/rpc`, - label: "RPC", - }, - { - href: `${props.layoutPath}/gateway/indexer`, - label: "Indexer", - }, - ], - }, - // only show engine link if there the user already has an engine instance - ...(props.hasEngines - ? [ - { - href: `${props.layoutPath}/engine`, - icon: DatabaseIcon, - label: "Engine", - }, - ] - : []), - ] satisfies ShadcnSidebarLink[]; + const contentSidebarLinks = [ + { + exactMatch: true, + href: props.layoutPath, + icon: HomeIcon, + label: "Overview", + }, + { + separator: true, + }, + { + subMenu: { + icon: WalletProductIcon, + label: "Wallets", + }, + links: [ + { + href: `${props.layoutPath}/wallets/user-wallets`, + label: "User Wallets", + }, + { + href: `${props.layoutPath}/wallets/server-wallets`, + label: "Server Wallets", + }, + { + href: `${props.layoutPath}/wallets/sponsored-gas`, + label: "Gas Sponsorship", + }, + ], + }, + { + href: `${props.layoutPath}/x402`, + icon: PayIcon, + label: ( + + x402 New + + ), + }, + { + href: `${props.layoutPath}/bridge`, + icon: BridgeIcon, + label: "Bridge", + }, + { + href: `${props.layoutPath}/tokens`, + icon: TokenIcon, + label: "Tokens", + }, + { + href: `${props.layoutPath}/ai`, + icon: NebulaIcon, + label: "AI", + }, + { + href: `${props.layoutPath}/contracts`, + icon: ContractIcon, + label: "Contracts", + }, + { + subMenu: { + icon: RssIcon, + label: "Gateway", + }, + links: [ + { + href: `${props.layoutPath}/gateway/rpc`, + label: "RPC", + }, + { + href: `${props.layoutPath}/gateway/indexer`, + label: "Indexer", + }, + ], + }, + // only show engine link if there the user already has an engine instance + ...(props.hasEngines + ? [ + { + href: `${props.layoutPath}/engine`, + icon: DatabaseIcon, + label: "Engine", + }, + ] + : []), + ] satisfies ShadcnSidebarLink[]; - const footerSidebarLinks = [ - { - separator: true, - }, - { - href: `${props.layoutPath}/webhooks/contracts`, - icon: WebhookIcon, - isActive: (pathname) => { - return pathname.startsWith(`${props.layoutPath}/webhooks`); - }, - label: "Webhooks", - }, - { - href: `${props.layoutPath}/settings`, - icon: Settings2Icon, - label: "Project Settings", - }, - { - separator: true, - }, - { - href: "https://portal.thirdweb.com", - icon: BookTextIcon, - label: "Documentation", - }, - { - href: "https://playground.thirdweb.com/wallets/sign-in/button", - icon: BoxIcon, - label: "Playground", - }, - ] satisfies ShadcnSidebarLink[]; + const footerSidebarLinks = [ + { + separator: true, + }, + { + href: `${props.layoutPath}/webhooks/contracts`, + icon: WebhookIcon, + isActive: (pathname) => { + return pathname.startsWith(`${props.layoutPath}/webhooks`); + }, + label: "Webhooks", + }, + { + href: `${props.layoutPath}/settings`, + icon: Settings2Icon, + label: "Project Settings", + }, + { + separator: true, + }, + { + href: "https://portal.thirdweb.com", + icon: BookTextIcon, + label: "Documentation", + }, + { + href: "https://playground.thirdweb.com/wallets/sign-in/button", + icon: BoxIcon, + label: "Playground", + }, + ] satisfies ShadcnSidebarLink[]; - return ( - - {props.children} - - ); + return ( + + {props.children} + + ); } From 1a3008b742c11e0f379f866685802d01550b2e76 Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 14 Nov 2025 01:36:19 +0700 Subject: [PATCH 3/3] move contracts up --- .../(sidebar)/components/ProjectSidebarLayout.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx index 57506a9d369..009229c4ac2 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx @@ -55,6 +55,11 @@ export function ProjectSidebarLayout(props: { }, ], }, + { + href: `${props.layoutPath}/contracts`, + icon: ContractIcon, + label: "Contracts", + }, { href: `${props.layoutPath}/x402`, icon: PayIcon, @@ -79,11 +84,6 @@ export function ProjectSidebarLayout(props: { icon: NebulaIcon, label: "AI", }, - { - href: `${props.layoutPath}/contracts`, - icon: ContractIcon, - label: "Contracts", - }, { subMenu: { icon: RssIcon,