@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loadsmart/loadsmart-ui",
3
- "version": "6.0.1",
3
+ "version": "6.0.2",
4
4
  "description": "Miranda UI, a React UI library",
5
5
  "main": "dist",
6
6
  "files": [
@@ -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: string
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 label="Log Out" url="#" />
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>