@loadsmart/loadsmart-ui 5.3.0 → 5.4.0

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": "5.3.0",
3
+ "version": "5.4.0",
4
4
  "description": "Miranda UI, a React UI library",
5
5
  "main": "dist",
6
6
  "files": [
@@ -103,7 +103,6 @@
103
103
  "@testing-library/react-hooks": "5.1.2",
104
104
  "@testing-library/user-event": "13.1.9",
105
105
  "@types/chance": "1.1.1",
106
- "@types/enzyme": "3.10.8",
107
106
  "@types/jest": "26.0.23",
108
107
  "@types/lodash.debounce": "4.0.6",
109
108
  "@types/lodash.flatten": "4.4.6",
@@ -117,7 +116,6 @@
117
116
  "@types/styled-components": "5.1.9",
118
117
  "@typescript-eslint/eslint-plugin": "4.22.1",
119
118
  "@typescript-eslint/parser": "4.22.1",
120
- "@wojtekmaj/enzyme-adapter-react-17": "0.6.1",
121
119
  "@zerollup/ts-transform-paths": "1.7.18",
122
120
  "autoprefixer": "9",
123
121
  "babel-jest": "26.6.3",
@@ -130,7 +128,6 @@
130
128
  "commitizen": "4.2.4",
131
129
  "cross-env": "7.0.3",
132
130
  "cz-conventional-changelog": "3.3.0",
133
- "enzyme": "3.11.0",
134
131
  "eslint": "7.26.0",
135
132
  "eslint-config-prettier": "8.3.0",
136
133
  "eslint-plugin-jest-dom": "3.8.1",
@@ -14,7 +14,7 @@ describe('<Breadcrumbs />', () => {
14
14
 
15
15
  setup({ entries })
16
16
 
17
- expect(screen.getByTestId('breadcrumbs')).not.toBeEmptyDOMElement()
17
+ expect(screen.getByRole('list')).not.toBeEmptyDOMElement()
18
18
 
19
19
  for (let i = 0; i < entries.length; i++) {
20
20
  screen.getByText(entries[i].label)
@@ -26,7 +26,7 @@ describe('<Breadcrumbs />', () => {
26
26
 
27
27
  setup({ entries })
28
28
 
29
- expect(screen.getByTestId('breadcrumbs')).toBeEmptyDOMElement()
29
+ expect(screen.getByRole('list')).toBeEmptyDOMElement()
30
30
  })
31
31
 
32
32
  it('renders active breadcrumb correctly', () => {
@@ -36,13 +36,15 @@ describe('<Breadcrumbs />', () => {
36
36
  ({ index }) => ({
37
37
  label: generator.word(),
38
38
  active: index === activeIndex,
39
+ url: '/',
39
40
  }),
40
41
  9
41
42
  )
42
43
 
43
44
  setup({ entries })
44
45
 
45
- expect(screen.getAllByTestId('breadcrumb')[activeIndex]).toHaveClass('is-active')
46
+ expect(screen.getAllByRole('listitem')[activeIndex]).toHaveClass('is-active')
47
+ expect(screen.getAllByRole('link')[activeIndex]).toHaveAttribute('aria-current', 'page')
46
48
  })
47
49
 
48
50
  it('render non-url and non-onClick breadcrumb correctly', () => {
@@ -114,6 +116,10 @@ describe('<Breadcrumbs />', () => {
114
116
 
115
117
  setup({ entries, onBack: jest.fn() })
116
118
 
117
- expect(screen.getByTestId('breadcrumbs-back')).toBeInTheDocument()
119
+ expect(
120
+ screen.getByRole('button', {
121
+ name: 'Back to previous page',
122
+ })
123
+ ).toBeInTheDocument()
118
124
  })
119
125
  })
@@ -47,22 +47,30 @@ const StyledLi = styled.li<BreadcrumbProps>`
47
47
  position: absolute;
48
48
  left: calc(100% + 14px);
49
49
 
50
- font-weight: normal;
50
+ font-weight: ${token('font-weight-bold')};
51
51
  font-size: ${token('breadcrumbs-font-size')};
52
52
 
53
+ line-height: ${token('breadcrumbs-font-height')};
54
+
53
55
  content: '/';
54
56
  }
55
57
  `
56
58
 
57
59
  function getWrappedLabel(props: Partial<BreadcrumbProps>) {
58
- const { url, label, onClick, ...rest } = props
60
+ const { url, label, onClick, active, ...rest } = props
59
61
 
60
62
  if (isNil(url) && !onClick) {
61
63
  return label
62
64
  }
63
65
 
64
66
  return (
65
- <StyledLink href={url} target="_self" onClick={onClick} {...rest}>
67
+ <StyledLink
68
+ href={url}
69
+ target="_self"
70
+ onClick={onClick}
71
+ {...(active && {'aria-current': 'page'})}
72
+ {...rest}
73
+ >
66
74
  {label}
67
75
  </StyledLink>
68
76
  )
@@ -76,7 +84,7 @@ function Breadcrumb({ active, label, url, ...rest }: BreadcrumbProps): JSX.Eleme
76
84
  data-testid="breadcrumb"
77
85
  active={active}
78
86
  >
79
- {getWrappedLabel({ label, url, ...rest })}
87
+ {getWrappedLabel({ label, url, active, ...rest })}
80
88
  </StyledLi>
81
89
  )
82
90
  }
@@ -12,12 +12,12 @@ export interface BreadcrumbsProps {
12
12
  onBack?: (e: MouseEvent<HTMLButtonElement>) => void
13
13
  }
14
14
 
15
- const StyledWrapper = styled.div`
15
+ const StyledWrapper = styled.nav`
16
16
  display: flex;
17
17
  flex-direction: row;
18
18
  `
19
19
 
20
- const StyledUl = styled.ul`
20
+ const StyledOl = styled.ol`
21
21
  display: flex;
22
22
  flex-direction: row;
23
23
  margin: 0;
@@ -31,18 +31,23 @@ const StyledBackButton = styled(BackButton)`
31
31
  margin: 0 ${token('space-m')} 0 0;
32
32
  `
33
33
 
34
- function Breadcrumbs({ entries, onBack, disabled, ...others }: BreadcrumbsProps): JSX.Element {
34
+ function Breadcrumbs({ entries = [], onBack, disabled, ...others }: BreadcrumbsProps): JSX.Element {
35
35
  return (
36
- <StyledWrapper {...others}>
36
+ <StyledWrapper aria-label="Breadcrumb" {...others}>
37
37
  {onBack && (
38
- <StyledBackButton data-testid="breadcrumbs-back" onClick={onBack} disabled={disabled} />
38
+ <StyledBackButton
39
+ data-testid="breadcrumbs-back"
40
+ onClick={onBack}
41
+ disabled={disabled}
42
+ aria-label="Back to previous page"
43
+ />
39
44
  )}
40
45
 
41
- <StyledUl data-testid="breadcrumbs">
42
- {(entries || []).map((entry: BreadcrumbProps) => {
46
+ <StyledOl data-testid="breadcrumbs">
47
+ {entries.map((entry: BreadcrumbProps) => {
43
48
  return <Breadcrumb key={entry.label} {...entry} />
44
49
  })}
45
- </StyledUl>
50
+ </StyledOl>
46
51
  </StyledWrapper>
47
52
  )
48
53
  }
@@ -60,11 +60,6 @@ const Container = styled.div<{ flagged: boolean }>`
60
60
  flex: 1;
61
61
  flex-direction: column;
62
62
 
63
- margin-left: ${conditional({
64
- 'space-s': whenProps({ flagged: true }),
65
- 'space-none': whenProps({ flagged: false }),
66
- })};
67
-
68
63
  line-height: ${token('card-font-height')};
69
64
 
70
65
  ${({ flagged }) =>
@@ -15,6 +15,11 @@ export const Playground: Story<TablePaginationProps> = (args: TablePaginationPro
15
15
  const [page, setPage] = useState(args.page)
16
16
  const [rowsPerPage, setRowsPerPage] = useState(args.rowsPerPage)
17
17
 
18
+ const handleRowsPerPageChange = (rowsPerPage: number) => {
19
+ setRowsPerPage(rowsPerPage)
20
+ setPage(0)
21
+ }
22
+
18
23
  return (
19
24
  <Layout.Group>
20
25
  <TablePagination
@@ -22,7 +27,7 @@ export const Playground: Story<TablePaginationProps> = (args: TablePaginationPro
22
27
  onPageChange={(page) => setPage(page)}
23
28
  page={page}
24
29
  rowsPerPage={rowsPerPage}
25
- onRowsPerPageChange={setRowsPerPage}
30
+ onRowsPerPageChange={handleRowsPerPageChange}
26
31
  />
27
32
  </Layout.Group>
28
33
  )
@@ -70,7 +70,6 @@ describe('TablePagination', () => {
70
70
  userEvent.click(screen.getByText(/50 per page/i))
71
71
 
72
72
  expect(onRowsPerPageChange).toHaveBeenLastCalledWith(50)
73
- expect(onPageChange).toHaveBeenLastCalledWith(0)
74
73
  })
75
74
 
76
75
  it('hides some actions for the compact variant', () => {
@@ -20,17 +20,12 @@ function TablePagination(props: TablePaginationProps): JSX.Element {
20
20
  ...rest
21
21
  } = props
22
22
 
23
- const handleRowsPerPageChange = (selectedOption: number) => {
24
- onRowsPerPageChange(selectedOption)
25
- onPageChange(0)
26
- }
27
-
28
23
  return (
29
24
  <Layout.Group space="xl" align="center" justify="space-between" {...rest}>
30
25
  <RowsPerPage
31
26
  page={page}
32
27
  count={count}
33
- onRowsPerPageChange={handleRowsPerPageChange}
28
+ onRowsPerPageChange={onRowsPerPageChange}
34
29
  rowsPerPage={rowsPerPage}
35
30
  rowsPerPageOptions={rowsPerPageOptions}
36
31
  labelRowsPerPage={labelRowsPerPage}
@@ -21,6 +21,9 @@ export interface TablePaginationProps extends GroupProps {
21
21
  onPageChange: (page: number) => void
22
22
  /**
23
23
  * Callback fired when the number of rows per page is changed.
24
+ *
25
+ * Note: Resetting the page to zero after the number of rows per page is changed isn't part of
26
+ * the component and has to be implemented where it's necessary
24
27
  */
25
28
  onRowsPerPageChange: (rowsPerPage: number) => void
26
29
  /**