Skip to content

Commit 0f802ff

Browse files
render ActionList.Item as NavItem and wrap with li
1 parent 040d09b commit 0f802ff

File tree

4 files changed

+48
-25
lines changed

4 files changed

+48
-25
lines changed

src/UnderlineNav2/UnderlineNav.tsx

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,15 @@ import CounterLabel from '../CounterLabel'
1212
import {useTheme} from '../ThemeProvider'
1313
import {ChildWidthArray, ResponsiveProps, OnScrollWithButtonEventType} from './types'
1414

15-
import {moreBtnStyles, getDividerStyle, getNavStyles, ulStyles, scrollStyles, moreMenuStyles} from './styles'
15+
import {
16+
moreBtnStyles,
17+
getDividerStyle,
18+
getNavStyles,
19+
ulStyles,
20+
scrollStyles,
21+
moreMenuStyles,
22+
menuItemStyles
23+
} from './styles'
1624
import {ArrowButton} from './UnderlineNavArrowButton'
1725
import styled from 'styled-components'
1826
import {LoadingCounter} from './LoadingCounter'
@@ -216,6 +224,8 @@ export const UnderlineNav = forwardRef(
216224

217225
const isCoarsePointer = useMedia('(pointer: coarse)')
218226

227+
const [asNavItem, setAsNavItem] = useState('a')
228+
219229
const [selectedLink, setSelectedLink] = useState<RefObject<HTMLElement> | undefined>(undefined)
220230

221231
const [focusedLink, setFocusedLink] = useState<RefObject<HTMLElement> | null>(null)
@@ -339,6 +349,7 @@ export const UnderlineNav = forwardRef(
339349
selectedLinkText,
340350
setSelectedLinkText,
341351
setFocusedLink,
352+
setAsNavItem,
342353
selectEvent,
343354
afterSelect: afterSelectHandler,
344355
variant,
@@ -375,29 +386,32 @@ export const UnderlineNav = forwardRef(
375386
{actions.map((action, index) => {
376387
const {children: actionElementChildren, ...actionElementProps} = action.props
377388
return (
378-
<ActionList.Item
379-
key={index}
380-
{...actionElementProps}
381-
onSelect={(
382-
event: React.MouseEvent<HTMLLIElement> | React.KeyboardEvent<HTMLLIElement>
383-
) => {
384-
swapMenuItemWithListItem(action, index, event, updateListAndMenu)
385-
setSelectEvent(event)
386-
}}
387-
>
388-
<Box
389-
as="span"
390-
sx={{display: 'flex', alignItems: 'center', justifyContent: 'space-between'}}
389+
<Box key={index} as="li">
390+
<ActionList.Item
391+
as={asNavItem}
392+
sx={menuItemStyles}
393+
{...actionElementProps}
394+
onSelect={(
395+
event: React.MouseEvent<HTMLLIElement> | React.KeyboardEvent<HTMLLIElement>
396+
) => {
397+
swapMenuItemWithListItem(action, index, event, updateListAndMenu)
398+
setSelectEvent(event)
399+
}}
391400
>
392-
{actionElementChildren}
393-
394-
{loadingCounters ? (
395-
<LoadingCounter />
396-
) : (
397-
<CounterLabel>{actionElementProps.counter}</CounterLabel>
398-
)}
399-
</Box>
400-
</ActionList.Item>
401+
<Box
402+
as="span"
403+
sx={{display: 'flex', alignItems: 'center', justifyContent: 'space-between'}}
404+
>
405+
{actionElementChildren}
406+
407+
{loadingCounters ? (
408+
<LoadingCounter />
409+
) : (
410+
<CounterLabel>{actionElementProps.counter}</CounterLabel>
411+
)}
412+
</Box>
413+
</ActionList.Item>
414+
</Box>
401415
)
402416
})}
403417
</ActionList>

src/UnderlineNav2/UnderlineNavContext.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const UnderlineNavContext = createContext<{
1010
selectedLinkText: string
1111
setSelectedLinkText: React.Dispatch<React.SetStateAction<string>>
1212
setFocusedLink: React.Dispatch<React.SetStateAction<RefObject<HTMLElement> | null>>
13+
setAsNavItem: React.Dispatch<React.SetStateAction<string>>
1314
selectEvent: React.MouseEvent<HTMLLIElement> | React.KeyboardEvent<HTMLLIElement> | null
1415
afterSelect?: (event: React.MouseEvent<HTMLLIElement> | React.KeyboardEvent<HTMLLIElement>) => void
1516
variant: 'default' | 'small'
@@ -24,6 +25,7 @@ export const UnderlineNavContext = createContext<{
2425
selectedLinkText: '',
2526
setSelectedLinkText: () => null,
2627
setFocusedLink: () => null,
28+
setAsNavItem: () => null,
2729
selectEvent: null,
2830
variant: 'default',
2931
loadingCounters: false,

src/UnderlineNav2/UnderlineNavItem.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export const UnderlineNavItem = forwardRef(
7272
selectedLinkText,
7373
setSelectedLinkText,
7474
setFocusedLink,
75+
setAsNavItem,
7576
selectEvent,
7677
afterSelect,
7778
variant,
@@ -107,6 +108,8 @@ export const UnderlineNavItem = forwardRef(
107108
if (typeof onSelect === 'function' && selectEvent !== null) onSelect(selectEvent)
108109
setSelectedLinkText('')
109110
}
111+
112+
setAsNavItem(Component)
110113
}, [
111114
ref,
112115
preSelected,
@@ -117,7 +120,9 @@ export const UnderlineNavItem = forwardRef(
117120
setChildrenWidth,
118121
setNoIconChildrenWidth,
119122
onSelect,
120-
selectEvent
123+
selectEvent,
124+
Component,
125+
setAsNavItem
121126
])
122127

123128
const keyPressHandler = React.useCallback(

src/UnderlineNav2/styles.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,5 +200,7 @@ export const menuItemStyles = {
200200
// This is needed to hide the selected check icon on the menu item. https://github.com/primer/react/blob/main/src/ActionList/Selection.tsx#L32
201201
'& > span': {
202202
display: 'none'
203-
}
203+
},
204+
// To reset the style when the menu items are rendered as react router links
205+
textDecoration: 'none'
204206
}

0 commit comments

Comments
 (0)