@dhis2-ui/table 10.16.2 → 10.16.3-alpha.1

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.
Files changed (101) hide show
  1. package/package.json +5 -4
  2. package/src/data-table/__tests__/data-table-cell.test.js +168 -0
  3. package/src/data-table/__tests__/data-table-column-header/filter-handle.test.js +43 -0
  4. package/src/data-table/__tests__/data-table-column-header/sorter.test.js +41 -0
  5. package/src/data-table/__tests__/data-table-column-header.test.js +227 -0
  6. package/src/data-table/__tests__/data-table-row/expand-handle-cell.js +32 -0
  7. package/src/data-table/__tests__/data-table-row/expanded-row.test.js +57 -0
  8. package/src/data-table/__tests__/data-table-row.test.js +162 -0
  9. package/src/data-table/__tests__/data-table.test.js +85 -0
  10. package/src/data-table/data-table-body.js +3 -0
  11. package/src/data-table/data-table-cell.js +111 -0
  12. package/src/data-table/data-table-column-header/data-table-column-header.js +130 -0
  13. package/src/data-table/data-table-column-header/data-table-column-header.styles.js +30 -0
  14. package/src/data-table/data-table-column-header/filter-handle.js +30 -0
  15. package/src/data-table/data-table-column-header/sorter.js +67 -0
  16. package/src/data-table/data-table-foot.js +3 -0
  17. package/src/data-table/data-table-head.js +3 -0
  18. package/src/data-table/data-table-row/data-table-row.js +103 -0
  19. package/src/data-table/data-table-row/data-table-row.styles.js +20 -0
  20. package/src/data-table/data-table-row/drag-handle-cell.js +9 -0
  21. package/src/data-table/data-table-row/expand-handle-cell.js +28 -0
  22. package/src/data-table/data-table-row/expanded-row.js +51 -0
  23. package/src/data-table/data-table-toolbar.js +3 -0
  24. package/src/data-table/data-table.e2e.stories.js +192 -0
  25. package/src/data-table/data-table.js +75 -0
  26. package/src/data-table/data-table.prod.stories.js +1342 -0
  27. package/src/data-table/features/can_scroll/index.js +48 -0
  28. package/src/data-table/features/can_scroll.feature +31 -0
  29. package/src/data-table/index.js +8 -0
  30. package/src/data-table/table-elements/__tests__/table-body.test.js +40 -0
  31. package/src/data-table/table-elements/__tests__/table-data-cell.test.js +123 -0
  32. package/src/data-table/table-elements/__tests__/table-foot.test.js +40 -0
  33. package/src/data-table/table-elements/__tests__/table-head.test.js +40 -0
  34. package/src/data-table/table-elements/__tests__/table-header-cell-action.test.js +46 -0
  35. package/src/data-table/table-elements/__tests__/table-header-cell.test.js +130 -0
  36. package/src/data-table/table-elements/__tests__/table-row.test.js +52 -0
  37. package/src/data-table/table-elements/__tests__/table-scroll-box.test.js +40 -0
  38. package/src/data-table/table-elements/__tests__/table-toolbar.test.js +44 -0
  39. package/src/data-table/table-elements/__tests__/table.test.js +53 -0
  40. package/src/data-table/table-elements/features/can_scroll/index.js +42 -0
  41. package/src/data-table/table-elements/features/can_scroll.feature +31 -0
  42. package/src/data-table/table-elements/index.js +10 -0
  43. package/src/data-table/table-elements/table-body.js +75 -0
  44. package/src/data-table/table-elements/table-data-cell/table-data-cell.js +126 -0
  45. package/src/data-table/table-elements/table-data-cell/table-data-cell.styles.js +42 -0
  46. package/src/data-table/table-elements/table-foot.js +35 -0
  47. package/src/data-table/table-elements/table-head.js +26 -0
  48. package/src/data-table/table-elements/table-header-cell/table-header-cell.js +121 -0
  49. package/src/data-table/table-elements/table-header-cell/table-header-cell.styles.js +71 -0
  50. package/src/data-table/table-elements/table-header-cell-action.js +62 -0
  51. package/src/data-table/table-elements/table-row.js +52 -0
  52. package/src/data-table/table-elements/table-scroll-box.js +41 -0
  53. package/src/data-table/table-elements/table-toolbar.js +50 -0
  54. package/src/data-table/table-elements/table.e2e.stories.js +190 -0
  55. package/src/data-table/table-elements/table.js +70 -0
  56. package/src/data-table/table-elements/table.stories.internal.js +1144 -0
  57. package/src/index.js +32 -0
  58. package/src/locales/ar/translations.json +4 -0
  59. package/src/locales/cs/translations.json +4 -0
  60. package/src/locales/en/translations.json +4 -0
  61. package/src/locales/es/translations.json +4 -0
  62. package/src/locales/es_419/translations.json +4 -0
  63. package/src/locales/fr/translations.json +4 -0
  64. package/src/locales/index.js +44 -0
  65. package/src/locales/km/translations.json +4 -0
  66. package/src/locales/lo/translations.json +4 -0
  67. package/src/locales/nb/translations.json +4 -0
  68. package/src/locales/nl/translations.json +4 -0
  69. package/src/locales/pt/translations.json +4 -0
  70. package/src/locales/ru/translations.json +4 -0
  71. package/src/locales/uk/translations.json +4 -0
  72. package/src/locales/uz_UZ_Cyrl/translations.json +4 -0
  73. package/src/locales/zh/translations.json +4 -0
  74. package/src/stacked-table/add-col-num-to-children.js +16 -0
  75. package/src/stacked-table/content-with-title.js +40 -0
  76. package/src/stacked-table/extract-header-labels.js +99 -0
  77. package/src/stacked-table/index.js +8 -0
  78. package/src/stacked-table/stacked-table-body.js +23 -0
  79. package/src/stacked-table/stacked-table-cell-head.js +39 -0
  80. package/src/stacked-table/stacked-table-cell.js +60 -0
  81. package/src/stacked-table/stacked-table-foot.js +24 -0
  82. package/src/stacked-table/stacked-table-head.js +23 -0
  83. package/src/stacked-table/stacked-table-row-head.js +19 -0
  84. package/src/stacked-table/stacked-table-row.js +50 -0
  85. package/src/stacked-table/stacked-table.js +33 -0
  86. package/src/stacked-table/stacked-table.prod.stories.js +463 -0
  87. package/src/stacked-table/stacked-table.test.js +127 -0
  88. package/src/stacked-table/supply-header-labels-to-children.js +7 -0
  89. package/src/stacked-table/table-context.js +4 -0
  90. package/src/stacked-table/table.js +28 -0
  91. package/src/table/index.js +8 -0
  92. package/src/table/table-body.js +21 -0
  93. package/src/table/table-cell-head.js +56 -0
  94. package/src/table/table-cell.js +56 -0
  95. package/src/table/table-context.js +7 -0
  96. package/src/table/table-foot.js +21 -0
  97. package/src/table/table-head.js +21 -0
  98. package/src/table/table-row-head.js +30 -0
  99. package/src/table/table-row.js +51 -0
  100. package/src/table/table.js +41 -0
  101. package/src/table/table.prod.stories.js +724 -0
@@ -0,0 +1,62 @@
1
+ import { colors } from '@dhis2/ui-constants'
2
+ import PropTypes from 'prop-types'
3
+ import React, { forwardRef } from 'react'
4
+
5
+ export const TableHeaderCellAction = forwardRef(
6
+ (
7
+ {
8
+ onClick,
9
+ children,
10
+ className,
11
+ dataTest = 'dhis2-uicore-tableheadercellaction',
12
+ title,
13
+ ...props
14
+ },
15
+ ref
16
+ ) => (
17
+ <button
18
+ {...props}
19
+ className={className}
20
+ data-test={dataTest}
21
+ onClick={onClick}
22
+ title={title}
23
+ ref={ref}
24
+ >
25
+ {children}
26
+ <style jsx>{`
27
+ button {
28
+ border: none;
29
+ padding: 0;
30
+ background: transparent;
31
+ width: 24px;
32
+ height: 24px;
33
+ display: inline-flex;
34
+ align-items: center;
35
+ justify-content: center;
36
+ flex-shrink: 0;
37
+ cursor: pointer;
38
+ border-radius: 4px;
39
+ margin-inline-start: 2px;
40
+ }
41
+ button:hover,
42
+ button:focus-visible {
43
+ background: ${colors.grey400};
44
+ }
45
+ button:active,
46
+ button:focus {
47
+ outline: none;
48
+ }
49
+ `}</style>
50
+ </button>
51
+ )
52
+ )
53
+
54
+ TableHeaderCellAction.displayName = 'TableHeaderCellAction'
55
+
56
+ TableHeaderCellAction.propTypes = {
57
+ children: PropTypes.node,
58
+ className: PropTypes.string,
59
+ dataTest: PropTypes.string,
60
+ title: PropTypes.string,
61
+ onClick: PropTypes.func,
62
+ }
@@ -0,0 +1,52 @@
1
+ import cx from 'classnames'
2
+ import PropTypes from 'prop-types'
3
+ import React, { forwardRef } from 'react'
4
+
5
+ export const TableRow = forwardRef(
6
+ (
7
+ {
8
+ children,
9
+ className,
10
+ dataTest = 'dhis2-uicore-tablerow',
11
+ draggable,
12
+ role,
13
+ selected,
14
+ ...props
15
+ },
16
+ ref
17
+ ) => (
18
+ <tr
19
+ {...props}
20
+ ref={ref}
21
+ className={cx(className, {
22
+ selected,
23
+ draggable,
24
+ })}
25
+ data-test={dataTest}
26
+ role={role}
27
+ >
28
+ {children}
29
+ <style jsx>{`
30
+ :global(tbody) > tr.draggable,
31
+ :global(tfoot) > tr.draggable {
32
+ cursor: move;
33
+ user-select: none;
34
+ }
35
+ `}</style>
36
+ </tr>
37
+ )
38
+ )
39
+
40
+ TableRow.displayName = 'TableRow'
41
+
42
+ TableRow.propTypes = {
43
+ /** Should be `<TableDataCell>` or `<TableDataCellHead>` components */
44
+ children: PropTypes.node,
45
+ className: PropTypes.string,
46
+ dataTest: PropTypes.string,
47
+ /** Applies draggable cursor styles */
48
+ draggable: PropTypes.bool,
49
+ role: PropTypes.string,
50
+ /** Sets a selected (teal) background color */
51
+ selected: PropTypes.bool,
52
+ }
@@ -0,0 +1,41 @@
1
+ import { colors } from '@dhis2/ui-constants'
2
+ import PropTypes from 'prop-types'
3
+ import React, { forwardRef } from 'react'
4
+
5
+ export const TableScrollBox = forwardRef(
6
+ (
7
+ {
8
+ children,
9
+ className,
10
+ dataTest = 'dhis2-uicore-tablescrollbox',
11
+ maxHeight = 'auto',
12
+ maxWidth = 'auto',
13
+ ...props
14
+ },
15
+ ref
16
+ ) => (
17
+ <div {...props} className={className} data-test={dataTest} ref={ref}>
18
+ {children}
19
+ <style jsx>{`
20
+ div {
21
+ border: 1px solid ${colors.grey300};
22
+ border-top: none;
23
+ box-sizing: border-box;
24
+ max-height: ${maxHeight};
25
+ max-width: ${maxWidth};
26
+ overflow: auto;
27
+ }
28
+ `}</style>
29
+ </div>
30
+ )
31
+ )
32
+
33
+ TableScrollBox.displayName = 'TableScrollBox'
34
+
35
+ TableScrollBox.propTypes = {
36
+ children: PropTypes.node,
37
+ className: PropTypes.string,
38
+ dataTest: PropTypes.string,
39
+ maxHeight: PropTypes.string,
40
+ maxWidth: PropTypes.string,
41
+ }
@@ -0,0 +1,50 @@
1
+ import { colors, spacers } from '@dhis2/ui-constants'
2
+ import cx from 'classnames'
3
+ import PropTypes from 'prop-types'
4
+ import React, { forwardRef } from 'react'
5
+
6
+ export const TableToolbar = forwardRef(
7
+ (
8
+ {
9
+ children,
10
+ className,
11
+ dataTest = 'dhis2-uicore-tabletoolbar',
12
+ position = 'top',
13
+ ...props
14
+ },
15
+ ref
16
+ ) => (
17
+ <div
18
+ {...props}
19
+ data-test={dataTest}
20
+ className={cx(className, position)}
21
+ ref={ref}
22
+ >
23
+ {children}
24
+ <style jsx>{`
25
+ div {
26
+ width: 100%;
27
+ box-sizing: border-box;
28
+ display: flex;
29
+ border: 1px solid ${colors.grey300};
30
+ padding: ${spacers.dp12};
31
+ }
32
+ div.top {
33
+ border-bottom: none;
34
+ }
35
+ div.bottom {
36
+ border-top: none;
37
+ }
38
+ `}</style>
39
+ </div>
40
+ )
41
+ )
42
+
43
+ TableToolbar.displayName = 'TableToolbar'
44
+
45
+ TableToolbar.propTypes = {
46
+ children: PropTypes.node,
47
+ className: PropTypes.string,
48
+ dataTest: PropTypes.string,
49
+ position: PropTypes.oneOf(['top', 'bottom']),
50
+ }
@@ -0,0 +1,190 @@
1
+ import React from 'react'
2
+ import { TableBody } from './table-body.js'
3
+ import { TableDataCell } from './table-data-cell/table-data-cell.js'
4
+ import { TableHead } from './table-head.js'
5
+ import { TableHeaderCell } from './table-header-cell/table-header-cell.js'
6
+ import { TableRow } from './table-row.js'
7
+ import { TableScrollBox } from './table-scroll-box.js'
8
+ import { Table } from './table.js'
9
+
10
+ export default {
11
+ title: 'Table',
12
+ component: Table,
13
+ }
14
+
15
+ export const FixedHeaderAndColumns = () => (
16
+ <TableScrollBox maxHeight="350px" maxWidth="500px">
17
+ <Table layout="fixed" borderless width="1000px">
18
+ <TableHead>
19
+ <TableRow>
20
+ <TableHeaderCell fixed top="0" left="0" width="120px">
21
+ Header fixed-left 1
22
+ </TableHeaderCell>
23
+ <TableHeaderCell fixed top="0" left="120px">
24
+ Header fixed-left 2
25
+ </TableHeaderCell>
26
+ <TableHeaderCell fixed top="0">
27
+ Header fixed
28
+ </TableHeaderCell>
29
+ <TableHeaderCell fixed top="0">
30
+ Header fixed
31
+ </TableHeaderCell>
32
+ <TableHeaderCell fixed top="0">
33
+ Header fixed
34
+ </TableHeaderCell>
35
+ <TableHeaderCell fixed top="0">
36
+ Header fixed
37
+ </TableHeaderCell>
38
+ <TableHeaderCell fixed top="0">
39
+ Header fixed
40
+ </TableHeaderCell>
41
+ <TableHeaderCell fixed top="0">
42
+ Header fixed
43
+ </TableHeaderCell>
44
+ </TableRow>
45
+ </TableHead>
46
+ <TableBody>
47
+ <TableRow>
48
+ <TableHeaderCell fixed left="0" width="120px">
49
+ fixed
50
+ </TableHeaderCell>
51
+ <TableHeaderCell fixed left="120px">
52
+ fixed
53
+ </TableHeaderCell>
54
+ <TableDataCell>scrolling top-left</TableDataCell>
55
+ <TableDataCell>...</TableDataCell>
56
+ <TableDataCell>...</TableDataCell>
57
+ <TableDataCell>...</TableDataCell>
58
+ <TableDataCell>...</TableDataCell>
59
+ <TableDataCell>scrolling top-right</TableDataCell>
60
+ </TableRow>
61
+ <TableRow>
62
+ <TableHeaderCell fixed left="0" width="120px">
63
+ fixed
64
+ </TableHeaderCell>
65
+ <TableHeaderCell fixed left="120px">
66
+ fixed
67
+ </TableHeaderCell>
68
+ <TableDataCell>...</TableDataCell>
69
+ <TableDataCell>...</TableDataCell>
70
+ <TableDataCell>...</TableDataCell>
71
+ <TableDataCell>...</TableDataCell>
72
+ <TableDataCell>...</TableDataCell>
73
+ <TableDataCell>...</TableDataCell>
74
+ </TableRow>
75
+ <TableRow>
76
+ <TableHeaderCell fixed left="0" width="120px">
77
+ fixed
78
+ </TableHeaderCell>
79
+ <TableHeaderCell fixed left="120px">
80
+ fixed
81
+ </TableHeaderCell>
82
+ <TableDataCell>...</TableDataCell>
83
+ <TableDataCell>...</TableDataCell>
84
+ <TableDataCell>...</TableDataCell>
85
+ <TableDataCell>...</TableDataCell>
86
+ <TableDataCell>...</TableDataCell>
87
+ <TableDataCell>...</TableDataCell>
88
+ </TableRow>
89
+ <TableRow>
90
+ <TableHeaderCell fixed left="0" width="120px">
91
+ fixed
92
+ </TableHeaderCell>
93
+ <TableHeaderCell fixed left="120px">
94
+ fixed
95
+ </TableHeaderCell>
96
+ <TableDataCell>...</TableDataCell>
97
+ <TableDataCell>...</TableDataCell>
98
+ <TableDataCell>...</TableDataCell>
99
+ <TableDataCell>...</TableDataCell>
100
+ <TableDataCell>...</TableDataCell>
101
+ <TableDataCell>...</TableDataCell>
102
+ </TableRow>
103
+ <TableRow>
104
+ <TableHeaderCell fixed left="0" width="120px">
105
+ fixed
106
+ </TableHeaderCell>
107
+ <TableHeaderCell fixed left="120px">
108
+ fixed
109
+ </TableHeaderCell>
110
+ <TableDataCell>...</TableDataCell>
111
+ <TableDataCell>...</TableDataCell>
112
+ <TableDataCell>...</TableDataCell>
113
+ <TableDataCell>...</TableDataCell>
114
+ <TableDataCell>...</TableDataCell>
115
+ <TableDataCell>...</TableDataCell>
116
+ </TableRow>
117
+ <TableRow>
118
+ <TableHeaderCell fixed left="0" width="120px">
119
+ fixed
120
+ </TableHeaderCell>
121
+ <TableHeaderCell fixed left="120px">
122
+ fixed
123
+ </TableHeaderCell>
124
+ <TableDataCell>...</TableDataCell>
125
+ <TableDataCell>...</TableDataCell>
126
+ <TableDataCell>...</TableDataCell>
127
+ <TableDataCell>...</TableDataCell>
128
+ <TableDataCell>...</TableDataCell>
129
+ <TableDataCell>...</TableDataCell>
130
+ </TableRow>
131
+ <TableRow>
132
+ <TableHeaderCell fixed left="0" width="120px">
133
+ fixed
134
+ </TableHeaderCell>
135
+ <TableHeaderCell fixed left="120px">
136
+ fixed
137
+ </TableHeaderCell>
138
+ <TableDataCell>...</TableDataCell>
139
+ <TableDataCell>...</TableDataCell>
140
+ <TableDataCell>...</TableDataCell>
141
+ <TableDataCell>...</TableDataCell>
142
+ <TableDataCell>...</TableDataCell>
143
+ <TableDataCell>...</TableDataCell>
144
+ </TableRow>
145
+ <TableRow>
146
+ <TableHeaderCell fixed left="0" width="120px">
147
+ fixed
148
+ </TableHeaderCell>
149
+ <TableHeaderCell fixed left="120px">
150
+ fixed
151
+ </TableHeaderCell>
152
+ <TableDataCell>...</TableDataCell>
153
+ <TableDataCell>...</TableDataCell>
154
+ <TableDataCell>...</TableDataCell>
155
+ <TableDataCell>...</TableDataCell>
156
+ <TableDataCell>...</TableDataCell>
157
+ <TableDataCell>...</TableDataCell>
158
+ </TableRow>
159
+ <TableRow>
160
+ <TableHeaderCell fixed left="0" width="120px">
161
+ fixed
162
+ </TableHeaderCell>
163
+ <TableHeaderCell fixed left="120px">
164
+ fixed
165
+ </TableHeaderCell>
166
+ <TableDataCell>...</TableDataCell>
167
+ <TableDataCell>...</TableDataCell>
168
+ <TableDataCell>...</TableDataCell>
169
+ <TableDataCell>...</TableDataCell>
170
+ <TableDataCell>...</TableDataCell>
171
+ <TableDataCell>...</TableDataCell>
172
+ </TableRow>
173
+ <TableRow>
174
+ <TableHeaderCell fixed left="0" width="120px">
175
+ fixed
176
+ </TableHeaderCell>
177
+ <TableHeaderCell fixed left="120px">
178
+ fixed
179
+ </TableHeaderCell>
180
+ <TableDataCell>scrolling bottom-left</TableDataCell>
181
+ <TableDataCell>...</TableDataCell>
182
+ <TableDataCell>...</TableDataCell>
183
+ <TableDataCell>...</TableDataCell>
184
+ <TableDataCell>...</TableDataCell>
185
+ <TableDataCell>scrolling bottom-right</TableDataCell>
186
+ </TableRow>
187
+ </TableBody>
188
+ </Table>
189
+ </TableScrollBox>
190
+ )
@@ -0,0 +1,70 @@
1
+ import { colors } from '@dhis2/ui-constants'
2
+ import cx from 'classnames'
3
+ import PropTypes from 'prop-types'
4
+ import React, { forwardRef } from 'react'
5
+
6
+ export const Table = forwardRef(
7
+ (
8
+ {
9
+ children,
10
+ className,
11
+ dataTest = 'dhis2-uicore-table',
12
+ layout = 'auto',
13
+ role,
14
+ borderless,
15
+ width = '100%',
16
+ ...props
17
+ },
18
+ ref
19
+ ) => (
20
+ <table
21
+ {...props}
22
+ className={cx(className, { borderless })}
23
+ data-test={dataTest}
24
+ ref={ref}
25
+ role={role}
26
+ >
27
+ {children}
28
+ <style jsx>{`
29
+ table {
30
+ table-layout: ${layout};
31
+ border-collapse: separate;
32
+ border-spacing: 0;
33
+ width: ${width};
34
+ box-sizing: border-box;
35
+ border: 1px solid ${colors.grey300};
36
+ }
37
+ table.borderless {
38
+ border: none;
39
+ }
40
+ `}</style>
41
+ </table>
42
+ )
43
+ )
44
+
45
+ Table.displayName = 'Table'
46
+
47
+ Table.propTypes = {
48
+ /**
49
+ * Removes border from the table
50
+ */
51
+ borderless: PropTypes.bool,
52
+ /**
53
+ * Should be `<TableHead>`, `<TableBody>`, and `<TableFoot>` components
54
+ */
55
+ children: PropTypes.node,
56
+ className: PropTypes.string,
57
+ dataTest: PropTypes.string,
58
+ /**
59
+ * Sets the `table-layout` property. Switching to `fixed` can prevent style
60
+ * issues when dealing with a table with multiple frozen columns or when dealing
61
+ * with filter elements in the table headers.
62
+ */
63
+ layout: PropTypes.oneOf(['auto', 'fixed', 'initial', 'inherit']),
64
+ role: PropTypes.string,
65
+ /**
66
+ * Sets the `width` property. Providing an explicit width can prevent style
67
+ * issues when dealing with horizontally scrolling tables with a fixed layout.
68
+ */
69
+ width: PropTypes.string,
70
+ }