11"use client" ;
22import { Badge } from "@workspace/ui/components/badge" ;
33import {
4- BookTextIcon ,
5- BoxIcon ,
6- DatabaseIcon ,
7- HomeIcon ,
8- RssIcon ,
9- Settings2Icon ,
10- WebhookIcon ,
4+ BookTextIcon ,
5+ BoxIcon ,
6+ DatabaseIcon ,
7+ HomeIcon ,
8+ RssIcon ,
9+ Settings2Icon ,
10+ WebhookIcon ,
1111} from "lucide-react" ;
1212import {
13- FullWidthSidebarLayout ,
14- type ShadcnSidebarLink ,
13+ FullWidthSidebarLayout ,
14+ type ShadcnSidebarLink ,
1515} from "@/components/blocks/full-width-sidebar-layout" ;
1616import { BridgeIcon } from "@/icons/BridgeIcon" ;
1717import { ContractIcon } from "@/icons/ContractIcon" ;
@@ -21,135 +21,135 @@ import { TokenIcon } from "@/icons/TokenIcon";
2121import { WalletProductIcon } from "@/icons/WalletProductIcon" ;
2222
2323export function ProjectSidebarLayout ( props : {
24- layoutPath : string ;
25- children : React . ReactNode ;
26- hasEngines : boolean ;
24+ layoutPath : string ;
25+ children : React . ReactNode ;
26+ hasEngines : boolean ;
2727} ) {
28- const contentSidebarLinks = [
29- {
30- exactMatch : true ,
31- href : props . layoutPath ,
32- icon : HomeIcon ,
33- label : "Overview" ,
34- } ,
35- {
36- separator : true ,
37- } ,
38- {
39- subMenu : {
40- icon : WalletProductIcon ,
41- label : "Wallets" ,
42- } ,
43- links : [
44- {
45- href : `${ props . layoutPath } /wallets/user-wallets` ,
46- label : "User Wallets" ,
47- } ,
48- {
49- href : `${ props . layoutPath } /wallets/server-wallets` ,
50- label : "Server Wallets" ,
51- } ,
52- {
53- href : `${ props . layoutPath } /wallets/sponsored-gas` ,
54- label : "Gas Sponsorship" ,
55- } ,
56- ] ,
57- } ,
58- {
59- href : `${ props . layoutPath } /x402` ,
60- icon : PayIcon ,
61- label : (
62- < span className = "flex items-center gap-2" >
63- x402 < Badge > New</ Badge >
64- </ span >
65- ) ,
66- } ,
67- {
68- href : `${ props . layoutPath } /bridge` ,
69- icon : BridgeIcon ,
70- label : "Bridge" ,
71- } ,
72- {
73- href : `${ props . layoutPath } /tokens` ,
74- icon : TokenIcon ,
75- label : "Tokens" ,
76- } ,
77- {
78- href : `${ props . layoutPath } /ai` ,
79- icon : NebulaIcon ,
80- label : "AI" ,
81- } ,
82- {
83- href : `${ props . layoutPath } /contracts` ,
84- icon : ContractIcon ,
85- label : "Contracts" ,
86- } ,
87- {
88- subMenu : {
89- icon : RssIcon ,
90- label : "Gateway" ,
91- } ,
92- links : [
93- {
94- href : `${ props . layoutPath } /gateway/rpc` ,
95- label : "RPC" ,
96- } ,
97- {
98- href : `${ props . layoutPath } /gateway/indexer` ,
99- label : "Indexer" ,
100- } ,
101- ] ,
102- } ,
103- // only show engine link if there the user already has an engine instance
104- ...( props . hasEngines
105- ? [
106- {
107- href : `${ props . layoutPath } /engine` ,
108- icon : DatabaseIcon ,
109- label : "Engine" ,
110- } ,
111- ]
112- : [ ] ) ,
113- ] satisfies ShadcnSidebarLink [ ] ;
28+ const contentSidebarLinks = [
29+ {
30+ exactMatch : true ,
31+ href : props . layoutPath ,
32+ icon : HomeIcon ,
33+ label : "Overview" ,
34+ } ,
35+ {
36+ separator : true ,
37+ } ,
38+ {
39+ subMenu : {
40+ icon : WalletProductIcon ,
41+ label : "Wallets" ,
42+ } ,
43+ links : [
44+ {
45+ href : `${ props . layoutPath } /wallets/user-wallets` ,
46+ label : "User Wallets" ,
47+ } ,
48+ {
49+ href : `${ props . layoutPath } /wallets/server-wallets` ,
50+ label : "Server Wallets" ,
51+ } ,
52+ {
53+ href : `${ props . layoutPath } /wallets/sponsored-gas` ,
54+ label : "Gas Sponsorship" ,
55+ } ,
56+ ] ,
57+ } ,
58+ {
59+ href : `${ props . layoutPath } /x402` ,
60+ icon : PayIcon ,
61+ label : (
62+ < span className = "flex items-center gap-2" >
63+ x402 < Badge > New</ Badge >
64+ </ span >
65+ ) ,
66+ } ,
67+ {
68+ href : `${ props . layoutPath } /bridge` ,
69+ icon : BridgeIcon ,
70+ label : "Bridge" ,
71+ } ,
72+ {
73+ href : `${ props . layoutPath } /tokens` ,
74+ icon : TokenIcon ,
75+ label : "Tokens" ,
76+ } ,
77+ {
78+ href : `${ props . layoutPath } /ai` ,
79+ icon : NebulaIcon ,
80+ label : "AI" ,
81+ } ,
82+ {
83+ href : `${ props . layoutPath } /contracts` ,
84+ icon : ContractIcon ,
85+ label : "Contracts" ,
86+ } ,
87+ {
88+ subMenu : {
89+ icon : RssIcon ,
90+ label : "Gateway" ,
91+ } ,
92+ links : [
93+ {
94+ href : `${ props . layoutPath } /gateway/rpc` ,
95+ label : "RPC" ,
96+ } ,
97+ {
98+ href : `${ props . layoutPath } /gateway/indexer` ,
99+ label : "Indexer" ,
100+ } ,
101+ ] ,
102+ } ,
103+ // only show engine link if there the user already has an engine instance
104+ ...( props . hasEngines
105+ ? [
106+ {
107+ href : `${ props . layoutPath } /engine` ,
108+ icon : DatabaseIcon ,
109+ label : "Engine" ,
110+ } ,
111+ ]
112+ : [ ] ) ,
113+ ] satisfies ShadcnSidebarLink [ ] ;
114114
115- const footerSidebarLinks = [
116- {
117- separator : true ,
118- } ,
119- {
120- href : `${ props . layoutPath } /webhooks/contracts` ,
121- icon : WebhookIcon ,
122- isActive : ( pathname ) => {
123- return pathname . startsWith ( `${ props . layoutPath } /webhooks` ) ;
124- } ,
125- label : "Webhooks" ,
126- } ,
127- {
128- href : `${ props . layoutPath } /settings` ,
129- icon : Settings2Icon ,
130- label : "Project Settings" ,
131- } ,
132- {
133- separator : true ,
134- } ,
135- {
136- href : "https://portal.thirdweb.com" ,
137- icon : BookTextIcon ,
138- label : "Documentation" ,
139- } ,
140- {
141- href : "https://playground.thirdweb.com/wallets/sign-in/button" ,
142- icon : BoxIcon ,
143- label : "Playground" ,
144- } ,
145- ] satisfies ShadcnSidebarLink [ ] ;
115+ const footerSidebarLinks = [
116+ {
117+ separator : true ,
118+ } ,
119+ {
120+ href : `${ props . layoutPath } /webhooks/contracts` ,
121+ icon : WebhookIcon ,
122+ isActive : ( pathname ) => {
123+ return pathname . startsWith ( `${ props . layoutPath } /webhooks` ) ;
124+ } ,
125+ label : "Webhooks" ,
126+ } ,
127+ {
128+ href : `${ props . layoutPath } /settings` ,
129+ icon : Settings2Icon ,
130+ label : "Project Settings" ,
131+ } ,
132+ {
133+ separator : true ,
134+ } ,
135+ {
136+ href : "https://portal.thirdweb.com" ,
137+ icon : BookTextIcon ,
138+ label : "Documentation" ,
139+ } ,
140+ {
141+ href : "https://playground.thirdweb.com/wallets/sign-in/button" ,
142+ icon : BoxIcon ,
143+ label : "Playground" ,
144+ } ,
145+ ] satisfies ShadcnSidebarLink [ ] ;
146146
147- return (
148- < FullWidthSidebarLayout
149- contentSidebarLinks = { contentSidebarLinks }
150- footerSidebarLinks = { footerSidebarLinks }
151- >
152- { props . children }
153- </ FullWidthSidebarLayout >
154- ) ;
147+ return (
148+ < FullWidthSidebarLayout
149+ contentSidebarLinks = { contentSidebarLinks }
150+ footerSidebarLinks = { footerSidebarLinks }
151+ >
152+ { props . children }
153+ </ FullWidthSidebarLayout >
154+ ) ;
155155}
0 commit comments