@dhis2-ui/table 10.16.1 → 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.
- package/package.json +5 -4
- package/src/data-table/__tests__/data-table-cell.test.js +168 -0
- package/src/data-table/__tests__/data-table-column-header/filter-handle.test.js +43 -0
- package/src/data-table/__tests__/data-table-column-header/sorter.test.js +41 -0
- package/src/data-table/__tests__/data-table-column-header.test.js +227 -0
- package/src/data-table/__tests__/data-table-row/expand-handle-cell.js +32 -0
- package/src/data-table/__tests__/data-table-row/expanded-row.test.js +57 -0
- package/src/data-table/__tests__/data-table-row.test.js +162 -0
- package/src/data-table/__tests__/data-table.test.js +85 -0
- package/src/data-table/data-table-body.js +3 -0
- package/src/data-table/data-table-cell.js +111 -0
- package/src/data-table/data-table-column-header/data-table-column-header.js +130 -0
- package/src/data-table/data-table-column-header/data-table-column-header.styles.js +30 -0
- package/src/data-table/data-table-column-header/filter-handle.js +30 -0
- package/src/data-table/data-table-column-header/sorter.js +67 -0
- package/src/data-table/data-table-foot.js +3 -0
- package/src/data-table/data-table-head.js +3 -0
- package/src/data-table/data-table-row/data-table-row.js +103 -0
- package/src/data-table/data-table-row/data-table-row.styles.js +20 -0
- package/src/data-table/data-table-row/drag-handle-cell.js +9 -0
- package/src/data-table/data-table-row/expand-handle-cell.js +28 -0
- package/src/data-table/data-table-row/expanded-row.js +51 -0
- package/src/data-table/data-table-toolbar.js +3 -0
- package/src/data-table/data-table.e2e.stories.js +192 -0
- package/src/data-table/data-table.js +75 -0
- package/src/data-table/data-table.prod.stories.js +1342 -0
- package/src/data-table/features/can_scroll/index.js +48 -0
- package/src/data-table/features/can_scroll.feature +31 -0
- package/src/data-table/index.js +8 -0
- package/src/data-table/table-elements/__tests__/table-body.test.js +40 -0
- package/src/data-table/table-elements/__tests__/table-data-cell.test.js +123 -0
- package/src/data-table/table-elements/__tests__/table-foot.test.js +40 -0
- package/src/data-table/table-elements/__tests__/table-head.test.js +40 -0
- package/src/data-table/table-elements/__tests__/table-header-cell-action.test.js +46 -0
- package/src/data-table/table-elements/__tests__/table-header-cell.test.js +130 -0
- package/src/data-table/table-elements/__tests__/table-row.test.js +52 -0
- package/src/data-table/table-elements/__tests__/table-scroll-box.test.js +40 -0
- package/src/data-table/table-elements/__tests__/table-toolbar.test.js +44 -0
- package/src/data-table/table-elements/__tests__/table.test.js +53 -0
- package/src/data-table/table-elements/features/can_scroll/index.js +42 -0
- package/src/data-table/table-elements/features/can_scroll.feature +31 -0
- package/src/data-table/table-elements/index.js +10 -0
- package/src/data-table/table-elements/table-body.js +75 -0
- package/src/data-table/table-elements/table-data-cell/table-data-cell.js +126 -0
- package/src/data-table/table-elements/table-data-cell/table-data-cell.styles.js +42 -0
- package/src/data-table/table-elements/table-foot.js +35 -0
- package/src/data-table/table-elements/table-head.js +26 -0
- package/src/data-table/table-elements/table-header-cell/table-header-cell.js +121 -0
- package/src/data-table/table-elements/table-header-cell/table-header-cell.styles.js +71 -0
- package/src/data-table/table-elements/table-header-cell-action.js +62 -0
- package/src/data-table/table-elements/table-row.js +52 -0
- package/src/data-table/table-elements/table-scroll-box.js +41 -0
- package/src/data-table/table-elements/table-toolbar.js +50 -0
- package/src/data-table/table-elements/table.e2e.stories.js +190 -0
- package/src/data-table/table-elements/table.js +70 -0
- package/src/data-table/table-elements/table.stories.internal.js +1144 -0
- package/src/index.js +32 -0
- package/src/locales/ar/translations.json +4 -0
- package/src/locales/cs/translations.json +4 -0
- package/src/locales/en/translations.json +4 -0
- package/src/locales/es/translations.json +4 -0
- package/src/locales/es_419/translations.json +4 -0
- package/src/locales/fr/translations.json +4 -0
- package/src/locales/index.js +44 -0
- package/src/locales/km/translations.json +4 -0
- package/src/locales/lo/translations.json +4 -0
- package/src/locales/nb/translations.json +4 -0
- package/src/locales/nl/translations.json +4 -0
- package/src/locales/pt/translations.json +4 -0
- package/src/locales/ru/translations.json +4 -0
- package/src/locales/uk/translations.json +4 -0
- package/src/locales/uz_UZ_Cyrl/translations.json +4 -0
- package/src/locales/zh/translations.json +4 -0
- package/src/stacked-table/add-col-num-to-children.js +16 -0
- package/src/stacked-table/content-with-title.js +40 -0
- package/src/stacked-table/extract-header-labels.js +99 -0
- package/src/stacked-table/index.js +8 -0
- package/src/stacked-table/stacked-table-body.js +23 -0
- package/src/stacked-table/stacked-table-cell-head.js +39 -0
- package/src/stacked-table/stacked-table-cell.js +60 -0
- package/src/stacked-table/stacked-table-foot.js +24 -0
- package/src/stacked-table/stacked-table-head.js +23 -0
- package/src/stacked-table/stacked-table-row-head.js +19 -0
- package/src/stacked-table/stacked-table-row.js +50 -0
- package/src/stacked-table/stacked-table.js +33 -0
- package/src/stacked-table/stacked-table.prod.stories.js +463 -0
- package/src/stacked-table/stacked-table.test.js +127 -0
- package/src/stacked-table/supply-header-labels-to-children.js +7 -0
- package/src/stacked-table/table-context.js +4 -0
- package/src/stacked-table/table.js +28 -0
- package/src/table/index.js +8 -0
- package/src/table/table-body.js +21 -0
- package/src/table/table-cell-head.js +56 -0
- package/src/table/table-cell.js +56 -0
- package/src/table/table-context.js +7 -0
- package/src/table/table-foot.js +21 -0
- package/src/table/table-head.js +21 -0
- package/src/table/table-row-head.js +30 -0
- package/src/table/table-row.js +51 -0
- package/src/table/table.js +41 -0
- 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
|
+
}
|