1+ import { FC } from "react" ;
12import { NavLink } from "react-router-dom" ;
23import { Box , Grid , IconButton , SwipeableDrawer } from "@mui/material" ;
34
45import { Background , Button , Link , Typography } from "@atoms" ;
5- import { ICONS , IMAGES , NAV_ITEMS , PATHS } from "@consts" ;
6+ import { ICONS , IMAGES , NAV_ITEMS , NavMenuItem , NavItem , PATHS } from "@consts" ;
67import { useScreenDimension , useTranslation } from "@hooks" ;
78import { useFeatureFlag , useModal } from "@context" ;
89import { openInNewTab } from "@utils" ;
@@ -13,15 +14,14 @@ import { LINKS } from "@/consts/links";
1314const DRAWER_PADDING = 2 ;
1415const CALCULATED_DRAWER_PADDING = DRAWER_PADDING * 8 * 2 ;
1516
17+ const isNavMenuItem = ( item : NavItem | NavMenuItem ) : item is NavMenuItem =>
18+ "childNavItems" in item ;
19+
1620export const DrawerMobile = ( {
1721 isConnectButton,
1822 isDrawerOpen,
1923 setIsDrawerOpen,
2024} : DrawerMobileProps ) => {
21- const {
22- isProposalDiscussionForumEnabled,
23- isGovernanceOutcomesPillarEnabled,
24- } = useFeatureFlag ( ) ;
2525 const { screenWidth } = useScreenDimension ( ) ;
2626 const { openModal } = useModal ( ) ;
2727 const { t } = useTranslation ( ) ;
@@ -85,18 +85,13 @@ export const DrawerMobile = ({
8585 < Box sx = { { display : "flex" , flex : 1 , flexDirection : "column" } } >
8686 < Grid container direction = "column" mt = { 6 } rowGap = { 4 } >
8787 { NAV_ITEMS . map ( ( navItem ) => {
88- if (
89- ! isProposalDiscussionForumEnabled &&
90- navItem . dataTestId === "proposed-governance-actions-link"
91- ) {
92- return null ;
93- }
94-
95- if (
96- ! isGovernanceOutcomesPillarEnabled &&
97- navItem . dataTestId === "governance-actions-outcomes-link"
98- ) {
99- return null ;
88+ if ( isNavMenuItem ( navItem ) ) {
89+ return (
90+ < MenuNavItem
91+ closeDrawer = { ( ) => setIsDrawerOpen ( false ) }
92+ navItem = { navItem }
93+ />
94+ ) ;
10095 }
10196 return (
10297 < Grid item key = { navItem . label } >
@@ -129,3 +124,60 @@ export const DrawerMobile = ({
129124 </ SwipeableDrawer >
130125 ) ;
131126} ;
127+
128+ const MenuNavItem : FC < {
129+ navItem : NavMenuItem ;
130+ closeDrawer : ( ) => void ;
131+ } > = ( { closeDrawer, navItem } ) => {
132+ const {
133+ isProposalDiscussionForumEnabled,
134+ isGovernanceOutcomesPillarEnabled,
135+ } = useFeatureFlag ( ) ;
136+
137+ const filterChildNavItems = ( ) => {
138+ if ( navItem . dataTestId === "governance-actions" ) {
139+ return ( navItem . childNavItems || [ ] ) . filter ( ( item ) => {
140+ if (
141+ ! isProposalDiscussionForumEnabled &&
142+ item . dataTestId === "proposed-governance-actions-link"
143+ )
144+ return false ;
145+ if (
146+ ! isGovernanceOutcomesPillarEnabled &&
147+ item . dataTestId === "governance-actions-outcomes-link"
148+ )
149+ return false ;
150+ return true ;
151+ } ) ;
152+ }
153+ return navItem . childNavItems ;
154+ } ;
155+ return (
156+ < >
157+ < Grid item key = { navItem . label } >
158+ < Link
159+ navTo = ""
160+ data-testid = { navItem . dataTestId }
161+ label = { navItem . label }
162+ size = "big"
163+ />
164+ </ Grid >
165+ { filterChildNavItems ( ) ?. map ( ( childNavItem ) => (
166+ < Grid item key = { childNavItem . label } ml = { 3 } >
167+ < Link
168+ { ...childNavItem }
169+ data-testid = { childNavItem . dataTestId }
170+ onClick = { ( ) => {
171+ if ( childNavItem . newTabLink ) {
172+ openInNewTab ( childNavItem . newTabLink ) ;
173+ }
174+ closeDrawer ( ) ;
175+ } }
176+ label = { childNavItem . label }
177+ size = "big"
178+ />
179+ </ Grid >
180+ ) ) }
181+ </ >
182+ ) ;
183+ } ;
0 commit comments