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,