@loadsmart/loadsmart-ui 6.0.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/TopNavigation/Menu/MenuItemDropdown.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/TopNavigation/Menu/Menu.test.tsx +33 -0
- package/src/components/TopNavigation/Menu/MenuItemDropdown.tsx +6 -2
- package/src/components/TopNavigation/TopNavigation.stories.tsx +4 -1
package/package.json
CHANGED
|
@@ -55,6 +55,39 @@ describe('Menu', () => {
|
|
|
55
55
|
expect(screen.getByRole('link', { name: 'Schedule' })).toHaveAttribute('href', '/schedule')
|
|
56
56
|
})
|
|
57
57
|
|
|
58
|
+
it('renders dropdown menu when subitems are provided', () => {
|
|
59
|
+
const username = 'Username'
|
|
60
|
+
const link = { label: 'Link', url: '/url' }
|
|
61
|
+
const action = { label: 'Logout', click: jest.fn() }
|
|
62
|
+
|
|
63
|
+
setup({
|
|
64
|
+
children: (
|
|
65
|
+
<Menu.Item label={username}>
|
|
66
|
+
<Menu.SubItem label={link.label} url={link.url} />
|
|
67
|
+
<Menu.SubItem label={action.label} onClick={action.click} />
|
|
68
|
+
</Menu.Item>
|
|
69
|
+
),
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
expect(screen.getByText(username)).toBeInTheDocument()
|
|
73
|
+
expect(screen.queryByText(link.label)).not.toBeInTheDocument()
|
|
74
|
+
expect(screen.queryByText(action.label)).not.toBeInTheDocument()
|
|
75
|
+
|
|
76
|
+
user.click(screen.getByRole('button', { name: username }))
|
|
77
|
+
|
|
78
|
+
const linkSubItem = screen.getByRole('link', { name: link.label })
|
|
79
|
+
const buttonSubItem = screen.getByRole('menuitem', { name: action.label })
|
|
80
|
+
|
|
81
|
+
expect(linkSubItem).toBeVisible()
|
|
82
|
+
expect(linkSubItem).toHaveAttribute('href', link.url)
|
|
83
|
+
|
|
84
|
+
expect(buttonSubItem).toBeVisible()
|
|
85
|
+
|
|
86
|
+
user.click(buttonSubItem)
|
|
87
|
+
|
|
88
|
+
expect(action.click).toBeCalled()
|
|
89
|
+
})
|
|
90
|
+
|
|
58
91
|
// FIXME: Skipping as it's preventing test pipeline from being finished
|
|
59
92
|
it.skip('renders an accessible dropdown menu when children are provided', () => {
|
|
60
93
|
const username = 'Username'
|
|
@@ -68,7 +68,7 @@ const MenuDropdownSubItemLink = styled(BaseLink)`
|
|
|
68
68
|
|
|
69
69
|
type MenuDropdownSubItemProps = HTMLAttributes<HTMLElement> & {
|
|
70
70
|
label: string
|
|
71
|
-
url
|
|
71
|
+
url?: string
|
|
72
72
|
icon?: ReactNode
|
|
73
73
|
separator?: boolean
|
|
74
74
|
}
|
|
@@ -79,12 +79,16 @@ export function MenuDropdownSubItem({
|
|
|
79
79
|
url,
|
|
80
80
|
...rest
|
|
81
81
|
}: MenuDropdownSubItemProps): JSX.Element {
|
|
82
|
-
return (
|
|
82
|
+
return url ? (
|
|
83
83
|
<MenuDropdownSubItemLink {...rest} href={url}>
|
|
84
84
|
<DropdownMenuItem tabIndex={-1} leading={<IconWrapper>{icon}</IconWrapper>}>
|
|
85
85
|
{label}
|
|
86
86
|
</DropdownMenuItem>
|
|
87
87
|
</MenuDropdownSubItemLink>
|
|
88
|
+
) : (
|
|
89
|
+
<DropdownMenuItem leading={<IconWrapper>{icon}</IconWrapper>} {...rest}>
|
|
90
|
+
{label}
|
|
91
|
+
</DropdownMenuItem>
|
|
88
92
|
)
|
|
89
93
|
}
|
|
90
94
|
|
|
@@ -31,7 +31,10 @@ export function Playground(): JSX.Element {
|
|
|
31
31
|
url="#"
|
|
32
32
|
/>
|
|
33
33
|
<TopNavigation.Menu.Separator />
|
|
34
|
-
<TopNavigation.Menu.SubItem
|
|
34
|
+
<TopNavigation.Menu.SubItem
|
|
35
|
+
label="Logout"
|
|
36
|
+
onClick={() => alert('Logout button clicked')}
|
|
37
|
+
/>
|
|
35
38
|
</TopNavigation.Menu.Item>
|
|
36
39
|
</TopNavigation.Menu>
|
|
37
40
|
</TopNavigation>
|