11import { Loading } from '@/components/Loading' ;
2+ import { useInstanceManagePermission } from '@/hooks/usePermissions' ;
23import { buildAbsoluteLinkToPage } from '@/lib/urls/buildAbsoluteLinkToPage' ;
34import { Link , Outlet , useParams } from '@tanstack/react-router' ;
4- import { Handshake , PieChartIcon , Users } from 'lucide-react' ;
5+ import { HandshakeIcon , KeyIcon , PieChartIcon , UsersIcon } from 'lucide-react' ;
56import { Suspense } from 'react' ;
67
78const sharedClasses = 'flex items-center p-2 rounded-lg group' ;
@@ -27,6 +28,8 @@ export function ConfigIndex() {
2728
2829function DesktopConfigNavBar ( ) {
2930 const params = useParams ( { strict : false } ) ;
31+ const canManage = useInstanceManagePermission ( ) ;
32+
3033 return (
3134 < div className = "hidden md:block pl-4 pt-4" >
3235 < Link
@@ -39,24 +42,31 @@ function DesktopConfigNavBar() {
3942 < PieChartIcon className = "inline-block" /> < span className = "ms-3" > Overview</ span >
4043 </ Link >
4144
42- < ul className = "border-t border-gray-700 pt-4 mt-4 space-y-2" >
45+ { canManage && < ul className = "border-t border-gray-700 pt-4 mt-4 space-y-2" >
4346 < li >
4447 < Link to = { buildAbsoluteLinkToPage ( params , 'config/users' ) } className = { sharedClasses } inactiveProps = { inactiveProps } activeProps = { activeProps } >
45- < Users className = "inline-block" /> < span className = "ms-3" > Users</ span >
48+ < UsersIcon className = "inline-block" /> < span className = "ms-3" > Users</ span >
4649 </ Link >
4750 </ li >
4851 < li >
4952 < Link to = { buildAbsoluteLinkToPage ( params , 'config/roles' ) } className = { sharedClasses } inactiveProps = { inactiveProps } activeProps = { activeProps } >
50- < Handshake className = "inline-block" /> < span className = "ms-3" > Roles</ span >
53+ < HandshakeIcon className = "inline-block" /> < span className = "ms-3" > Roles</ span >
54+ </ Link >
55+ </ li >
56+ < li >
57+ < Link to = { buildAbsoluteLinkToPage ( params , 'config/ssh-keys' ) } className = { sharedClasses } inactiveProps = { inactiveProps } activeProps = { activeProps } >
58+ < KeyIcon className = "inline-block" /> < span className = "ms-3" > SSH Keys</ span >
5159 </ Link >
5260 </ li >
53- </ ul >
61+ </ ul > }
5462 </ div >
5563 ) ;
5664}
5765
5866function MobileConfigNavBar ( ) {
5967 const params = useParams ( { strict : false } ) ;
68+ const canManage = useInstanceManagePermission ( ) ;
69+
6070 return (
6171 < ul className = "flex space-x-4 md:hidden py-2 px-4" >
6272 < li >
@@ -70,16 +80,23 @@ function MobileConfigNavBar() {
7080 < PieChartIcon className = "inline-block" /> < span className = "ms-3" > Overview</ span >
7181 </ Link >
7282 </ li >
73- < li >
74- < Link to = { buildAbsoluteLinkToPage ( params , 'config/users' ) } className = { sharedClasses } inactiveProps = { inactiveProps } activeProps = { activeProps } >
75- < Users className = "inline-block" /> < span className = "ms-3" > Users</ span >
76- </ Link >
77- </ li >
78- < li >
79- < Link to = { buildAbsoluteLinkToPage ( params , 'config/roles' ) } className = { sharedClasses } inactiveProps = { inactiveProps } activeProps = { activeProps } >
80- < Handshake className = "inline-block" /> < span className = "ms-3" > Roles</ span >
81- </ Link >
82- </ li >
83+ { canManage && ( < >
84+ < li >
85+ < Link to = { buildAbsoluteLinkToPage ( params , 'config/users' ) } className = { sharedClasses } inactiveProps = { inactiveProps } activeProps = { activeProps } >
86+ < UsersIcon className = "inline-block" /> < span className = "ms-3" > Users</ span >
87+ </ Link >
88+ </ li >
89+ < li >
90+ < Link to = { buildAbsoluteLinkToPage ( params , 'config/roles' ) } className = { sharedClasses } inactiveProps = { inactiveProps } activeProps = { activeProps } >
91+ < HandshakeIcon className = "inline-block" /> < span className = "ms-3" > Roles</ span >
92+ </ Link >
93+ </ li >
94+ < li >
95+ < Link to = { buildAbsoluteLinkToPage ( params , 'config/ssh-keys' ) } className = { sharedClasses } inactiveProps = { inactiveProps } activeProps = { activeProps } >
96+ < KeyIcon className = "inline-block" /> < span className = "ms-3" > SSH Keys</ span >
97+ </ Link >
98+ </ li >
99+ </ > ) }
83100 </ ul >
84101 ) ;
85102}
0 commit comments