@dhis2-ui/table 10.16.2 → 10.16.3
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,103 @@
|
|
|
1
|
+
import { requiredIf } from '@dhis2/prop-types'
|
|
2
|
+
import cx from 'classnames'
|
|
3
|
+
import PropTypes from 'prop-types'
|
|
4
|
+
import React, { useState, forwardRef } from 'react'
|
|
5
|
+
import { TableRow } from '../table-elements/index.js'
|
|
6
|
+
import resolvedCss from './data-table-row.styles.js'
|
|
7
|
+
import { DragHandleCell } from './drag-handle-cell.js'
|
|
8
|
+
import { ExpandHandleCell } from './expand-handle-cell.js'
|
|
9
|
+
import { ExpandedRow } from './expanded-row.js'
|
|
10
|
+
|
|
11
|
+
export const DataTableRow = forwardRef(
|
|
12
|
+
(
|
|
13
|
+
{
|
|
14
|
+
children,
|
|
15
|
+
className,
|
|
16
|
+
dataTest = 'dhis2-uicore-datatablerow',
|
|
17
|
+
expandableContent,
|
|
18
|
+
expanded,
|
|
19
|
+
selected,
|
|
20
|
+
draggable,
|
|
21
|
+
role,
|
|
22
|
+
onExpandToggle,
|
|
23
|
+
...rest
|
|
24
|
+
},
|
|
25
|
+
ref
|
|
26
|
+
) => {
|
|
27
|
+
const [isHoveringExpandedContent, setIsHoveringExpandedContent] =
|
|
28
|
+
useState(false)
|
|
29
|
+
const classes = cx(className, resolvedCss.className, {
|
|
30
|
+
expanded,
|
|
31
|
+
selected,
|
|
32
|
+
draggable,
|
|
33
|
+
isHoveringExpandedContent,
|
|
34
|
+
})
|
|
35
|
+
const childCount = React.Children.count(children)
|
|
36
|
+
const colSpan = String(
|
|
37
|
+
draggable || expandableContent ? childCount + 1 : childCount
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<>
|
|
42
|
+
<TableRow
|
|
43
|
+
ref={ref}
|
|
44
|
+
className={classes}
|
|
45
|
+
dataTest={dataTest}
|
|
46
|
+
selected={selected}
|
|
47
|
+
draggable={draggable}
|
|
48
|
+
role={role}
|
|
49
|
+
{...rest}
|
|
50
|
+
>
|
|
51
|
+
{draggable && <DragHandleCell />}
|
|
52
|
+
{expandableContent && (
|
|
53
|
+
<ExpandHandleCell
|
|
54
|
+
expanded={expanded}
|
|
55
|
+
onClick={onExpandToggle}
|
|
56
|
+
/>
|
|
57
|
+
)}
|
|
58
|
+
{children}
|
|
59
|
+
{resolvedCss.styles}
|
|
60
|
+
</TableRow>
|
|
61
|
+
{expandableContent && expanded && (
|
|
62
|
+
<ExpandedRow
|
|
63
|
+
className={className}
|
|
64
|
+
dataTest={dataTest}
|
|
65
|
+
setIsHoveringExpandedContent={
|
|
66
|
+
setIsHoveringExpandedContent
|
|
67
|
+
}
|
|
68
|
+
colSpan={colSpan}
|
|
69
|
+
selected={selected}
|
|
70
|
+
>
|
|
71
|
+
{expandableContent}
|
|
72
|
+
</ExpandedRow>
|
|
73
|
+
)}
|
|
74
|
+
</>
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
DataTableRow.displayName = 'DataTableRow'
|
|
80
|
+
|
|
81
|
+
DataTableRow.propTypes = {
|
|
82
|
+
/** Should be `<DataTableCell>` or `<DataTableCellHead>` components */
|
|
83
|
+
children: PropTypes.node,
|
|
84
|
+
className: PropTypes.string,
|
|
85
|
+
dataTest: PropTypes.string,
|
|
86
|
+
/** Renders and additional table cell with drag icon and applies draggable styles */
|
|
87
|
+
draggable: PropTypes.bool,
|
|
88
|
+
/** This content will be rendered into an additional row with fullwidth cell and the presence of this prop will display an additional table cell with expand icon */
|
|
89
|
+
expandableContent: requiredIf(
|
|
90
|
+
(props) => props.onExpandToggle,
|
|
91
|
+
PropTypes.node
|
|
92
|
+
),
|
|
93
|
+
/** Toggles expand icon (up/down) and expandable content visibility */
|
|
94
|
+
expanded: PropTypes.bool,
|
|
95
|
+
role: PropTypes.string,
|
|
96
|
+
/** Adds a green background color */
|
|
97
|
+
selected: PropTypes.bool,
|
|
98
|
+
/** Callback for expand icon cell clicks */
|
|
99
|
+
onExpandToggle: requiredIf(
|
|
100
|
+
(props) => props.expandableContent,
|
|
101
|
+
PropTypes.func
|
|
102
|
+
),
|
|
103
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { colors } from '@dhis2/ui-constants'
|
|
2
|
+
import css from 'styled-jsx/css'
|
|
3
|
+
|
|
4
|
+
export default css.resolve`
|
|
5
|
+
tr.isHoveringExpandedContent > :global(td) {
|
|
6
|
+
background-color: ${colors.grey100};
|
|
7
|
+
}
|
|
8
|
+
tr.isHoveringExpandedContent > :global(th) {
|
|
9
|
+
background-color: ${colors.grey300};
|
|
10
|
+
}
|
|
11
|
+
tr.selected.isHoveringExpandedContent > :global(td) {
|
|
12
|
+
background-color: #cdeae8;
|
|
13
|
+
}
|
|
14
|
+
tr.expanded > :global(td) {
|
|
15
|
+
border-bottom-color: transparent;
|
|
16
|
+
}
|
|
17
|
+
tr.expanded > :global(td.bordered) {
|
|
18
|
+
border-bottom-color: ${colors.grey300};
|
|
19
|
+
}
|
|
20
|
+
`
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { IconChevronDown24, IconChevronUp24 } from '@dhis2/ui-icons'
|
|
2
|
+
import cx from 'classnames'
|
|
3
|
+
import PropTypes from 'prop-types'
|
|
4
|
+
import React from 'react'
|
|
5
|
+
import css from 'styled-jsx/css'
|
|
6
|
+
import { TableDataCell } from '../table-elements/index.js'
|
|
7
|
+
|
|
8
|
+
const pointer = css.resolve`
|
|
9
|
+
td {
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
}
|
|
12
|
+
`
|
|
13
|
+
|
|
14
|
+
export const ExpandHandleCell = ({ expanded, onClick }) => (
|
|
15
|
+
<TableDataCell
|
|
16
|
+
className={cx(pointer.className, { expanded })}
|
|
17
|
+
onClick={() => onClick({ expanded: !expanded })}
|
|
18
|
+
width="48px"
|
|
19
|
+
>
|
|
20
|
+
{expanded ? <IconChevronUp24 /> : <IconChevronDown24 />}
|
|
21
|
+
{pointer.styles}
|
|
22
|
+
</TableDataCell>
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
ExpandHandleCell.propTypes = {
|
|
26
|
+
expanded: PropTypes.bool,
|
|
27
|
+
onClick: PropTypes.func,
|
|
28
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { colors } from '@dhis2/ui-constants'
|
|
2
|
+
import cx from 'classnames'
|
|
3
|
+
import PropTypes from 'prop-types'
|
|
4
|
+
import React from 'react'
|
|
5
|
+
import css from 'styled-jsx/css'
|
|
6
|
+
import { TableRow, TableDataCell } from '../table-elements/index.js'
|
|
7
|
+
|
|
8
|
+
const { className: cellClassName, styles } = css.resolve`
|
|
9
|
+
:global(tr.expanded:hover) + :global(tr) > td {
|
|
10
|
+
background-color: ${colors.grey100};
|
|
11
|
+
}
|
|
12
|
+
:global(tr.expanded:active) + :global(tr) > td {
|
|
13
|
+
background-color: ${colors.grey200};
|
|
14
|
+
}
|
|
15
|
+
:global(tr.selected.expanded:hover) + tr > td {
|
|
16
|
+
background-color: #cdeae8;
|
|
17
|
+
}
|
|
18
|
+
`
|
|
19
|
+
|
|
20
|
+
export const ExpandedRow = ({
|
|
21
|
+
children,
|
|
22
|
+
className,
|
|
23
|
+
colSpan,
|
|
24
|
+
dataTest,
|
|
25
|
+
selected,
|
|
26
|
+
setIsHoveringExpandedContent,
|
|
27
|
+
}) => (
|
|
28
|
+
<TableRow
|
|
29
|
+
onMouseOver={() => setIsHoveringExpandedContent(true)}
|
|
30
|
+
onMouseOut={() => setIsHoveringExpandedContent(false)}
|
|
31
|
+
className={cx({
|
|
32
|
+
[`${className}-expandedrow`]: !!className,
|
|
33
|
+
})}
|
|
34
|
+
selected={selected}
|
|
35
|
+
dataTest={dataTest && `${dataTest}-expandedrow`}
|
|
36
|
+
>
|
|
37
|
+
<TableDataCell className={cellClassName} colSpan={colSpan}>
|
|
38
|
+
{children}
|
|
39
|
+
{styles}
|
|
40
|
+
</TableDataCell>
|
|
41
|
+
</TableRow>
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
ExpandedRow.propTypes = {
|
|
45
|
+
children: PropTypes.node,
|
|
46
|
+
className: PropTypes.string,
|
|
47
|
+
colSpan: PropTypes.string,
|
|
48
|
+
dataTest: PropTypes.string,
|
|
49
|
+
selected: PropTypes.bool,
|
|
50
|
+
setIsHoveringExpandedContent: PropTypes.func,
|
|
51
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { DataTableBody } from './data-table-body.js'
|
|
3
|
+
import { DataTableCell } from './data-table-cell.js'
|
|
4
|
+
import { DataTableColumnHeader } from './data-table-column-header/data-table-column-header.js'
|
|
5
|
+
import { DataTableHead } from './data-table-head.js'
|
|
6
|
+
import { DataTableRow } from './data-table-row/data-table-row.js'
|
|
7
|
+
import { DataTable } from './data-table.js'
|
|
8
|
+
|
|
9
|
+
export default {
|
|
10
|
+
title: 'DataTable',
|
|
11
|
+
component: DataTable,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const FixedHeaderAndColumns = () => (
|
|
15
|
+
<DataTable
|
|
16
|
+
layout="fixed"
|
|
17
|
+
width="1000px"
|
|
18
|
+
scrollWidth="500px"
|
|
19
|
+
scrollHeight="400px"
|
|
20
|
+
>
|
|
21
|
+
<DataTableHead>
|
|
22
|
+
<DataTableRow>
|
|
23
|
+
<DataTableColumnHeader fixed top="0" left="0" width="120px">
|
|
24
|
+
Header fixed-left 1
|
|
25
|
+
</DataTableColumnHeader>
|
|
26
|
+
<DataTableColumnHeader fixed top="0" left="120px">
|
|
27
|
+
Header fixed-left 2
|
|
28
|
+
</DataTableColumnHeader>
|
|
29
|
+
<DataTableColumnHeader fixed top="0">
|
|
30
|
+
Header fixed
|
|
31
|
+
</DataTableColumnHeader>
|
|
32
|
+
<DataTableColumnHeader fixed top="0">
|
|
33
|
+
Header fixed
|
|
34
|
+
</DataTableColumnHeader>
|
|
35
|
+
<DataTableColumnHeader fixed top="0">
|
|
36
|
+
Header fixed
|
|
37
|
+
</DataTableColumnHeader>
|
|
38
|
+
<DataTableColumnHeader fixed top="0">
|
|
39
|
+
Header fixed
|
|
40
|
+
</DataTableColumnHeader>
|
|
41
|
+
<DataTableColumnHeader fixed top="0">
|
|
42
|
+
Header fixed
|
|
43
|
+
</DataTableColumnHeader>
|
|
44
|
+
<DataTableColumnHeader fixed top="0">
|
|
45
|
+
Header fixed
|
|
46
|
+
</DataTableColumnHeader>
|
|
47
|
+
</DataTableRow>
|
|
48
|
+
</DataTableHead>
|
|
49
|
+
<DataTableBody>
|
|
50
|
+
<DataTableRow>
|
|
51
|
+
<DataTableCell fixed left="0" width="120px">
|
|
52
|
+
fixed
|
|
53
|
+
</DataTableCell>
|
|
54
|
+
<DataTableCell fixed left="120px">
|
|
55
|
+
fixed
|
|
56
|
+
</DataTableCell>
|
|
57
|
+
<DataTableCell>scrolling top-left</DataTableCell>
|
|
58
|
+
<DataTableCell>...</DataTableCell>
|
|
59
|
+
<DataTableCell>...</DataTableCell>
|
|
60
|
+
<DataTableCell>...</DataTableCell>
|
|
61
|
+
<DataTableCell>...</DataTableCell>
|
|
62
|
+
<DataTableCell>scrolling top-right</DataTableCell>
|
|
63
|
+
</DataTableRow>
|
|
64
|
+
<DataTableRow>
|
|
65
|
+
<DataTableCell fixed left="0" width="120px">
|
|
66
|
+
fixed
|
|
67
|
+
</DataTableCell>
|
|
68
|
+
<DataTableCell fixed left="120px">
|
|
69
|
+
fixed
|
|
70
|
+
</DataTableCell>
|
|
71
|
+
<DataTableCell>...</DataTableCell>
|
|
72
|
+
<DataTableCell>...</DataTableCell>
|
|
73
|
+
<DataTableCell>...</DataTableCell>
|
|
74
|
+
<DataTableCell>...</DataTableCell>
|
|
75
|
+
<DataTableCell>...</DataTableCell>
|
|
76
|
+
<DataTableCell>...</DataTableCell>
|
|
77
|
+
</DataTableRow>
|
|
78
|
+
<DataTableRow>
|
|
79
|
+
<DataTableCell fixed left="0" width="120px">
|
|
80
|
+
fixed
|
|
81
|
+
</DataTableCell>
|
|
82
|
+
<DataTableCell fixed left="120px">
|
|
83
|
+
fixed
|
|
84
|
+
</DataTableCell>
|
|
85
|
+
<DataTableCell>...</DataTableCell>
|
|
86
|
+
<DataTableCell>...</DataTableCell>
|
|
87
|
+
<DataTableCell>...</DataTableCell>
|
|
88
|
+
<DataTableCell>...</DataTableCell>
|
|
89
|
+
<DataTableCell>...</DataTableCell>
|
|
90
|
+
<DataTableCell>...</DataTableCell>
|
|
91
|
+
</DataTableRow>
|
|
92
|
+
<DataTableRow>
|
|
93
|
+
<DataTableCell fixed left="0" width="120px">
|
|
94
|
+
fixed
|
|
95
|
+
</DataTableCell>
|
|
96
|
+
<DataTableCell fixed left="120px">
|
|
97
|
+
fixed
|
|
98
|
+
</DataTableCell>
|
|
99
|
+
<DataTableCell>...</DataTableCell>
|
|
100
|
+
<DataTableCell>...</DataTableCell>
|
|
101
|
+
<DataTableCell>...</DataTableCell>
|
|
102
|
+
<DataTableCell>...</DataTableCell>
|
|
103
|
+
<DataTableCell>...</DataTableCell>
|
|
104
|
+
<DataTableCell>...</DataTableCell>
|
|
105
|
+
</DataTableRow>
|
|
106
|
+
<DataTableRow>
|
|
107
|
+
<DataTableCell fixed left="0" width="120px">
|
|
108
|
+
fixed
|
|
109
|
+
</DataTableCell>
|
|
110
|
+
<DataTableCell fixed left="120px">
|
|
111
|
+
fixed
|
|
112
|
+
</DataTableCell>
|
|
113
|
+
<DataTableCell>...</DataTableCell>
|
|
114
|
+
<DataTableCell>...</DataTableCell>
|
|
115
|
+
<DataTableCell>...</DataTableCell>
|
|
116
|
+
<DataTableCell>...</DataTableCell>
|
|
117
|
+
<DataTableCell>...</DataTableCell>
|
|
118
|
+
<DataTableCell>...</DataTableCell>
|
|
119
|
+
</DataTableRow>
|
|
120
|
+
<DataTableRow>
|
|
121
|
+
<DataTableCell fixed left="0" width="120px">
|
|
122
|
+
fixed
|
|
123
|
+
</DataTableCell>
|
|
124
|
+
<DataTableCell fixed left="120px">
|
|
125
|
+
fixed
|
|
126
|
+
</DataTableCell>
|
|
127
|
+
<DataTableCell>...</DataTableCell>
|
|
128
|
+
<DataTableCell>...</DataTableCell>
|
|
129
|
+
<DataTableCell>...</DataTableCell>
|
|
130
|
+
<DataTableCell>...</DataTableCell>
|
|
131
|
+
<DataTableCell>...</DataTableCell>
|
|
132
|
+
<DataTableCell>...</DataTableCell>
|
|
133
|
+
</DataTableRow>
|
|
134
|
+
<DataTableRow>
|
|
135
|
+
<DataTableCell fixed left="0" width="120px">
|
|
136
|
+
fixed
|
|
137
|
+
</DataTableCell>
|
|
138
|
+
<DataTableCell fixed left="120px">
|
|
139
|
+
fixed
|
|
140
|
+
</DataTableCell>
|
|
141
|
+
<DataTableCell>...</DataTableCell>
|
|
142
|
+
<DataTableCell>...</DataTableCell>
|
|
143
|
+
<DataTableCell>...</DataTableCell>
|
|
144
|
+
<DataTableCell>...</DataTableCell>
|
|
145
|
+
<DataTableCell>...</DataTableCell>
|
|
146
|
+
<DataTableCell>...</DataTableCell>
|
|
147
|
+
</DataTableRow>
|
|
148
|
+
<DataTableRow>
|
|
149
|
+
<DataTableCell fixed left="0" width="120px">
|
|
150
|
+
fixed
|
|
151
|
+
</DataTableCell>
|
|
152
|
+
<DataTableCell fixed left="120px">
|
|
153
|
+
fixed
|
|
154
|
+
</DataTableCell>
|
|
155
|
+
<DataTableCell>...</DataTableCell>
|
|
156
|
+
<DataTableCell>...</DataTableCell>
|
|
157
|
+
<DataTableCell>...</DataTableCell>
|
|
158
|
+
<DataTableCell>...</DataTableCell>
|
|
159
|
+
<DataTableCell>...</DataTableCell>
|
|
160
|
+
<DataTableCell>...</DataTableCell>
|
|
161
|
+
</DataTableRow>
|
|
162
|
+
<DataTableRow>
|
|
163
|
+
<DataTableCell fixed left="0" width="120px">
|
|
164
|
+
fixed
|
|
165
|
+
</DataTableCell>
|
|
166
|
+
<DataTableCell fixed left="120px">
|
|
167
|
+
fixed
|
|
168
|
+
</DataTableCell>
|
|
169
|
+
<DataTableCell>...</DataTableCell>
|
|
170
|
+
<DataTableCell>...</DataTableCell>
|
|
171
|
+
<DataTableCell>...</DataTableCell>
|
|
172
|
+
<DataTableCell>...</DataTableCell>
|
|
173
|
+
<DataTableCell>...</DataTableCell>
|
|
174
|
+
<DataTableCell>...</DataTableCell>
|
|
175
|
+
</DataTableRow>
|
|
176
|
+
<DataTableRow>
|
|
177
|
+
<DataTableCell fixed left="0" width="120px">
|
|
178
|
+
fixed
|
|
179
|
+
</DataTableCell>
|
|
180
|
+
<DataTableCell fixed left="120px">
|
|
181
|
+
fixed
|
|
182
|
+
</DataTableCell>
|
|
183
|
+
<DataTableCell>scrolling bottom-left</DataTableCell>
|
|
184
|
+
<DataTableCell>...</DataTableCell>
|
|
185
|
+
<DataTableCell>...</DataTableCell>
|
|
186
|
+
<DataTableCell>...</DataTableCell>
|
|
187
|
+
<DataTableCell>...</DataTableCell>
|
|
188
|
+
<DataTableCell>scrolling bottom-right</DataTableCell>
|
|
189
|
+
</DataTableRow>
|
|
190
|
+
</DataTableBody>
|
|
191
|
+
</DataTable>
|
|
192
|
+
)
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import cx from 'classnames'
|
|
2
|
+
import PropTypes from 'prop-types'
|
|
3
|
+
import React, { forwardRef } from 'react'
|
|
4
|
+
import { Table, TableScrollBox } from './table-elements/index.js'
|
|
5
|
+
|
|
6
|
+
export const DataTable = forwardRef(
|
|
7
|
+
(
|
|
8
|
+
{
|
|
9
|
+
children,
|
|
10
|
+
className,
|
|
11
|
+
dataTest = 'dhis2-uicore-datatable',
|
|
12
|
+
layout = 'auto',
|
|
13
|
+
role,
|
|
14
|
+
scrollHeight,
|
|
15
|
+
scrollWidth,
|
|
16
|
+
width = '100%',
|
|
17
|
+
},
|
|
18
|
+
ref
|
|
19
|
+
) => {
|
|
20
|
+
const scrollable = !!(scrollHeight || scrollWidth)
|
|
21
|
+
const table = (
|
|
22
|
+
<Table
|
|
23
|
+
borderless={scrollable}
|
|
24
|
+
className={className}
|
|
25
|
+
dataTest={dataTest}
|
|
26
|
+
layout={layout}
|
|
27
|
+
ref={ref}
|
|
28
|
+
role={role}
|
|
29
|
+
width={width}
|
|
30
|
+
>
|
|
31
|
+
{children}
|
|
32
|
+
</Table>
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
return !scrollable ? (
|
|
36
|
+
table
|
|
37
|
+
) : (
|
|
38
|
+
<TableScrollBox
|
|
39
|
+
className={cx(className, 'tablescrollbox')}
|
|
40
|
+
dataTest={`${dataTest}-scrollbox`}
|
|
41
|
+
maxHeight={scrollHeight}
|
|
42
|
+
maxWidth={scrollWidth}
|
|
43
|
+
>
|
|
44
|
+
{table}
|
|
45
|
+
</TableScrollBox>
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
DataTable.displayName = 'DataTable'
|
|
51
|
+
|
|
52
|
+
DataTable.propTypes = {
|
|
53
|
+
/**
|
|
54
|
+
* Should be `<DataTableHead>`, `<DataTableBody>`, and `<DataTableFoot>` components
|
|
55
|
+
*/
|
|
56
|
+
children: PropTypes.node,
|
|
57
|
+
className: PropTypes.string,
|
|
58
|
+
dataTest: PropTypes.string,
|
|
59
|
+
/**
|
|
60
|
+
* Sets the `datatable-layout` property. Switching to `fixed` can prevent style
|
|
61
|
+
* issues when dealing with a datatable with multiple frozen columns or when dealing
|
|
62
|
+
* with filter elements in the datatable headers.
|
|
63
|
+
*/
|
|
64
|
+
layout: PropTypes.oneOf(['auto', 'fixed', 'initial', 'inherit']),
|
|
65
|
+
role: PropTypes.string,
|
|
66
|
+
/** Sets max-height of scrollbox */
|
|
67
|
+
scrollHeight: PropTypes.string,
|
|
68
|
+
/** Sets max-width of scrollbox */
|
|
69
|
+
scrollWidth: PropTypes.string,
|
|
70
|
+
/**
|
|
71
|
+
* Sets the `width` property. Providing an explicit width can prevent style
|
|
72
|
+
* issues when dealing with horizontally scrolling datatables with a fixed layout.
|
|
73
|
+
*/
|
|
74
|
+
width: PropTypes.string,
|
|
75
|
+
}
|