@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,463 @@
|
|
|
1
|
+
import { Button } from '@dhis2-ui/button'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import { StackedTableBody } from './stacked-table-body.js'
|
|
4
|
+
import { StackedTableCellHead } from './stacked-table-cell-head.js'
|
|
5
|
+
import { StackedTableCell } from './stacked-table-cell.js'
|
|
6
|
+
import { StackedTableFoot } from './stacked-table-foot.js'
|
|
7
|
+
import { StackedTableHead } from './stacked-table-head.js'
|
|
8
|
+
import { StackedTableRowHead } from './stacked-table-row-head.js'
|
|
9
|
+
import { StackedTableRow } from './stacked-table-row.js'
|
|
10
|
+
import { StackedTable } from './stacked-table.js'
|
|
11
|
+
|
|
12
|
+
const description = `
|
|
13
|
+
Expresses tabular data such that each 'row' becomes a table section with the 'column' header in each cell. Multiple rows become multiple sections.
|
|
14
|
+
|
|
15
|
+
Compose with StackedTable child components, as seen in the examples.
|
|
16
|
+
|
|
17
|
+
\`\`\`js
|
|
18
|
+
import {
|
|
19
|
+
StackedTable,
|
|
20
|
+
StackedTableBody,
|
|
21
|
+
StackedTableCell,
|
|
22
|
+
StackedTableCellHead,
|
|
23
|
+
StackedTableFoot,
|
|
24
|
+
StackedTableHead,
|
|
25
|
+
StackedTableRow,
|
|
26
|
+
StackedTableRowHead,
|
|
27
|
+
} from 'dhis2/ui'
|
|
28
|
+
\`\`\`
|
|
29
|
+
`
|
|
30
|
+
|
|
31
|
+
const CustomCell = (props) => (
|
|
32
|
+
<td>
|
|
33
|
+
Received props:
|
|
34
|
+
<code>
|
|
35
|
+
<pre>{JSON.stringify(props, null, 2)}</pre>
|
|
36
|
+
</code>
|
|
37
|
+
</td>
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
export default {
|
|
41
|
+
title: 'Stacked Table',
|
|
42
|
+
component: StackedTable,
|
|
43
|
+
parameters: { docs: { description: { component: description } } },
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export const Default = (args) => (
|
|
47
|
+
<StackedTable {...args}>
|
|
48
|
+
<StackedTableHead>
|
|
49
|
+
<StackedTableRowHead>
|
|
50
|
+
<StackedTableCellHead>First name</StackedTableCellHead>
|
|
51
|
+
<StackedTableCellHead>Last name</StackedTableCellHead>
|
|
52
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
53
|
+
<StackedTableCellHead>Last updated</StackedTableCellHead>
|
|
54
|
+
<StackedTableCellHead>Age</StackedTableCellHead>
|
|
55
|
+
<StackedTableCellHead>Registering unit</StackedTableCellHead>
|
|
56
|
+
<StackedTableCellHead>Assigned user</StackedTableCellHead>
|
|
57
|
+
<StackedTableCellHead>Status</StackedTableCellHead>
|
|
58
|
+
</StackedTableRowHead>
|
|
59
|
+
</StackedTableHead>
|
|
60
|
+
<StackedTableBody>
|
|
61
|
+
<StackedTableRow>
|
|
62
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
63
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
64
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
65
|
+
<StackedTableCell>05/25/1972</StackedTableCell>
|
|
66
|
+
<StackedTableCell>66</StackedTableCell>
|
|
67
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
68
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
69
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
70
|
+
</StackedTableRow>
|
|
71
|
+
</StackedTableBody>
|
|
72
|
+
<StackedTableFoot>
|
|
73
|
+
<StackedTableRow>
|
|
74
|
+
<StackedTableCell colSpan="8" hideTitle>
|
|
75
|
+
<Button primary>StackedTable footer button</Button>
|
|
76
|
+
</StackedTableCell>
|
|
77
|
+
</StackedTableRow>
|
|
78
|
+
</StackedTableFoot>
|
|
79
|
+
</StackedTable>
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
export const HiddenLabel = (args) => (
|
|
83
|
+
<StackedTable {...args}>
|
|
84
|
+
<StackedTableHead>
|
|
85
|
+
<StackedTableRowHead>
|
|
86
|
+
<StackedTableCellHead>First name</StackedTableCellHead>
|
|
87
|
+
<StackedTableCellHead>Last name</StackedTableCellHead>
|
|
88
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
89
|
+
<StackedTableCellHead>Last updated</StackedTableCellHead>
|
|
90
|
+
<StackedTableCellHead>Age</StackedTableCellHead>
|
|
91
|
+
<StackedTableCellHead>Registering unit</StackedTableCellHead>
|
|
92
|
+
<StackedTableCellHead>Assigned user</StackedTableCellHead>
|
|
93
|
+
<StackedTableCellHead />
|
|
94
|
+
</StackedTableRowHead>
|
|
95
|
+
</StackedTableHead>
|
|
96
|
+
<StackedTableBody>
|
|
97
|
+
<StackedTableRow>
|
|
98
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
99
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
100
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
101
|
+
<StackedTableCell>05/25/1972</StackedTableCell>
|
|
102
|
+
<StackedTableCell>66</StackedTableCell>
|
|
103
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
104
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
105
|
+
<StackedTableCell>
|
|
106
|
+
<Button
|
|
107
|
+
primary
|
|
108
|
+
onClick={() => alert('something should happen now')}
|
|
109
|
+
>
|
|
110
|
+
A row action
|
|
111
|
+
</Button>
|
|
112
|
+
</StackedTableCell>
|
|
113
|
+
</StackedTableRow>
|
|
114
|
+
</StackedTableBody>
|
|
115
|
+
</StackedTable>
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
export const HiddenLabelInCell = (args) => (
|
|
119
|
+
<StackedTable {...args}>
|
|
120
|
+
<StackedTableHead>
|
|
121
|
+
<StackedTableRowHead>
|
|
122
|
+
<StackedTableCellHead>First name</StackedTableCellHead>
|
|
123
|
+
<StackedTableCellHead>Last name</StackedTableCellHead>
|
|
124
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
125
|
+
<StackedTableCellHead>Last updated</StackedTableCellHead>
|
|
126
|
+
<StackedTableCellHead>Age</StackedTableCellHead>
|
|
127
|
+
<StackedTableCellHead>Registering unit</StackedTableCellHead>
|
|
128
|
+
<StackedTableCellHead>Assigned user</StackedTableCellHead>
|
|
129
|
+
<StackedTableCellHead>Status</StackedTableCellHead>
|
|
130
|
+
</StackedTableRowHead>
|
|
131
|
+
</StackedTableHead>
|
|
132
|
+
<StackedTableBody>
|
|
133
|
+
<StackedTableRow>
|
|
134
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
135
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
136
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
137
|
+
<StackedTableCell>05/25/1972</StackedTableCell>
|
|
138
|
+
<StackedTableCell>66</StackedTableCell>
|
|
139
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
140
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
141
|
+
<StackedTableCell hideTitle>
|
|
142
|
+
<Button
|
|
143
|
+
primary
|
|
144
|
+
onClick={() => alert('something should happen now')}
|
|
145
|
+
>
|
|
146
|
+
A row action
|
|
147
|
+
</Button>
|
|
148
|
+
</StackedTableCell>
|
|
149
|
+
</StackedTableRow>
|
|
150
|
+
<StackedTableRow>
|
|
151
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
152
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
153
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
154
|
+
<StackedTableCell>05/25/1972</StackedTableCell>
|
|
155
|
+
<StackedTableCell>66</StackedTableCell>
|
|
156
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
157
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
158
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
159
|
+
</StackedTableRow>
|
|
160
|
+
</StackedTableBody>
|
|
161
|
+
</StackedTable>
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
export const ColspanInHeader = (args) => (
|
|
165
|
+
<StackedTable {...args}>
|
|
166
|
+
<StackedTableHead>
|
|
167
|
+
<StackedTableRowHead>
|
|
168
|
+
<StackedTableCellHead colSpan="2">Name</StackedTableCellHead>
|
|
169
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
170
|
+
<StackedTableCellHead>Last updated</StackedTableCellHead>
|
|
171
|
+
<StackedTableCellHead>Age</StackedTableCellHead>
|
|
172
|
+
<StackedTableCellHead>Registering unit</StackedTableCellHead>
|
|
173
|
+
<StackedTableCellHead>Assigned user</StackedTableCellHead>
|
|
174
|
+
<StackedTableCellHead>Status</StackedTableCellHead>
|
|
175
|
+
</StackedTableRowHead>
|
|
176
|
+
</StackedTableHead>
|
|
177
|
+
<StackedTableBody>
|
|
178
|
+
<StackedTableRow>
|
|
179
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
180
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
181
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
182
|
+
<StackedTableCell>05/25/1972</StackedTableCell>
|
|
183
|
+
<StackedTableCell>66</StackedTableCell>
|
|
184
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
185
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
186
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
187
|
+
</StackedTableRow>
|
|
188
|
+
</StackedTableBody>
|
|
189
|
+
</StackedTable>
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
export const ColspanInBody = (args) => (
|
|
193
|
+
<StackedTable {...args}>
|
|
194
|
+
<StackedTableHead>
|
|
195
|
+
<StackedTableRowHead>
|
|
196
|
+
<StackedTableCellHead>First name</StackedTableCellHead>
|
|
197
|
+
<StackedTableCellHead>Last name</StackedTableCellHead>
|
|
198
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
199
|
+
<StackedTableCellHead>Last updated</StackedTableCellHead>
|
|
200
|
+
<StackedTableCellHead>Age</StackedTableCellHead>
|
|
201
|
+
<StackedTableCellHead>Registering unit</StackedTableCellHead>
|
|
202
|
+
<StackedTableCellHead>Assigned user</StackedTableCellHead>
|
|
203
|
+
<StackedTableCellHead>Status</StackedTableCellHead>
|
|
204
|
+
</StackedTableRowHead>
|
|
205
|
+
</StackedTableHead>
|
|
206
|
+
<StackedTableBody>
|
|
207
|
+
<StackedTableRow>
|
|
208
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
209
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
210
|
+
<StackedTableCell colSpan="2">
|
|
211
|
+
{
|
|
212
|
+
"Colspan 2 here. Next cell doesn't get header 'Last updated'."
|
|
213
|
+
}
|
|
214
|
+
</StackedTableCell>
|
|
215
|
+
<StackedTableCell>66</StackedTableCell>
|
|
216
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
217
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
218
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
219
|
+
</StackedTableRow>
|
|
220
|
+
<StackedTableRow>
|
|
221
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
222
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
223
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
224
|
+
<StackedTableCell>05/25/1972</StackedTableCell>
|
|
225
|
+
<StackedTableCell>66</StackedTableCell>
|
|
226
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
227
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
228
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
229
|
+
</StackedTableRow>
|
|
230
|
+
</StackedTableBody>
|
|
231
|
+
</StackedTable>
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
export const MultipleHeaderRows = (args) => (
|
|
235
|
+
<StackedTable {...args}>
|
|
236
|
+
<StackedTableHead>
|
|
237
|
+
<StackedTableRowHead>
|
|
238
|
+
<StackedTableCellHead colSpan="2">Name</StackedTableCellHead>
|
|
239
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
240
|
+
<StackedTableCellHead>Last updated</StackedTableCellHead>
|
|
241
|
+
<StackedTableCellHead>Age</StackedTableCellHead>
|
|
242
|
+
<StackedTableCellHead>Registering unit</StackedTableCellHead>
|
|
243
|
+
<StackedTableCellHead>Assigned user</StackedTableCellHead>
|
|
244
|
+
<StackedTableCellHead>Status</StackedTableCellHead>
|
|
245
|
+
</StackedTableRowHead>
|
|
246
|
+
<StackedTableRowHead>
|
|
247
|
+
<StackedTableCellHead>First name</StackedTableCellHead>
|
|
248
|
+
<StackedTableCellHead>Last name</StackedTableCellHead>
|
|
249
|
+
<StackedTableCellHead colSpan="6"></StackedTableCellHead>
|
|
250
|
+
</StackedTableRowHead>
|
|
251
|
+
</StackedTableHead>
|
|
252
|
+
<StackedTableBody>
|
|
253
|
+
<StackedTableRow>
|
|
254
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
255
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
256
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
257
|
+
<StackedTableCell>05/25/1972</StackedTableCell>
|
|
258
|
+
<StackedTableCell>66</StackedTableCell>
|
|
259
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
260
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
261
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
262
|
+
</StackedTableRow>
|
|
263
|
+
</StackedTableBody>
|
|
264
|
+
</StackedTable>
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
export const LongTitle = (args) => (
|
|
268
|
+
<StackedTable {...args}>
|
|
269
|
+
<StackedTableHead>
|
|
270
|
+
<StackedTableRowHead>
|
|
271
|
+
<StackedTableCellHead>
|
|
272
|
+
This title is so long, it should be displayed in multiple
|
|
273
|
+
lines. Lorem ipsum dolor sit amet, consetetur sadipscing
|
|
274
|
+
elitr, sed diam nonumy eirmod tempor invidunt ut labore et
|
|
275
|
+
dolore magna aliquyam erat, sed diam voluptua. At vero eos
|
|
276
|
+
et accusam et justo duo dolores et ea rebum. Stet clita kasd
|
|
277
|
+
gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
|
278
|
+
amet. Lorem ipsum dolor sit amet, consetetur sadipscing
|
|
279
|
+
elitr, sed diam nonumy eirmod tempor invidunt ut labore et
|
|
280
|
+
dolore magna aliquyam erat, sed diam voluptua. At vero eos
|
|
281
|
+
et accusam et justo duo dolores et ea rebum. Stet clita kasd
|
|
282
|
+
gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
|
283
|
+
amet.
|
|
284
|
+
</StackedTableCellHead>
|
|
285
|
+
</StackedTableRowHead>
|
|
286
|
+
</StackedTableHead>
|
|
287
|
+
<StackedTableBody>
|
|
288
|
+
<StackedTableRow>
|
|
289
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
290
|
+
</StackedTableRow>
|
|
291
|
+
</StackedTableBody>
|
|
292
|
+
</StackedTable>
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
export const _CustomCell = (args) => (
|
|
296
|
+
<StackedTable {...args}>
|
|
297
|
+
<StackedTableHead>
|
|
298
|
+
<StackedTableRowHead>
|
|
299
|
+
<StackedTableCellHead colSpan="2">Name</StackedTableCellHead>
|
|
300
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
301
|
+
</StackedTableRowHead>
|
|
302
|
+
</StackedTableHead>
|
|
303
|
+
<StackedTableBody>
|
|
304
|
+
<StackedTableRow>
|
|
305
|
+
<CustomCell>Onyekachukwu</CustomCell>
|
|
306
|
+
<CustomCell>Kariuki</CustomCell>
|
|
307
|
+
<CustomCell>02/06/2007</CustomCell>
|
|
308
|
+
</StackedTableRow>
|
|
309
|
+
</StackedTableBody>
|
|
310
|
+
</StackedTable>
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
export const CustomCellTitle = (args) => (
|
|
314
|
+
<StackedTable {...args}>
|
|
315
|
+
<StackedTableHead>
|
|
316
|
+
<StackedTableRowHead>
|
|
317
|
+
<StackedTableCellHead colSpan="2">Name</StackedTableCellHead>
|
|
318
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
319
|
+
</StackedTableRowHead>
|
|
320
|
+
</StackedTableHead>
|
|
321
|
+
<StackedTableBody>
|
|
322
|
+
<StackedTableRow>
|
|
323
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
324
|
+
<StackedTableCell title="Custom title">
|
|
325
|
+
Kariuki
|
|
326
|
+
</StackedTableCell>
|
|
327
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
328
|
+
</StackedTableRow>
|
|
329
|
+
</StackedTableBody>
|
|
330
|
+
</StackedTable>
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
export const LargerTable = (args) => (
|
|
334
|
+
<StackedTable {...args}>
|
|
335
|
+
<StackedTableHead>
|
|
336
|
+
<StackedTableRowHead>
|
|
337
|
+
<StackedTableCellHead>First name</StackedTableCellHead>
|
|
338
|
+
<StackedTableCellHead>Last name</StackedTableCellHead>
|
|
339
|
+
<StackedTableCellHead>Incident date</StackedTableCellHead>
|
|
340
|
+
<StackedTableCellHead>Last updated</StackedTableCellHead>
|
|
341
|
+
<StackedTableCellHead>Age</StackedTableCellHead>
|
|
342
|
+
<StackedTableCellHead>Registering unit</StackedTableCellHead>
|
|
343
|
+
<StackedTableCellHead>Assigned user</StackedTableCellHead>
|
|
344
|
+
<StackedTableCellHead>Status</StackedTableCellHead>
|
|
345
|
+
</StackedTableRowHead>
|
|
346
|
+
</StackedTableHead>
|
|
347
|
+
<StackedTableBody>
|
|
348
|
+
<StackedTableRow>
|
|
349
|
+
<StackedTableCell>Onyekachukwu</StackedTableCell>
|
|
350
|
+
<StackedTableCell>Kariuki</StackedTableCell>
|
|
351
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
352
|
+
<StackedTableCell>05/25/1972</StackedTableCell>
|
|
353
|
+
<StackedTableCell>66</StackedTableCell>
|
|
354
|
+
<StackedTableCell>Jawi</StackedTableCell>
|
|
355
|
+
<StackedTableCell>Sofie Hubert</StackedTableCell>
|
|
356
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
357
|
+
</StackedTableRow>
|
|
358
|
+
<StackedTableRow>
|
|
359
|
+
<StackedTableCell>Kwasi</StackedTableCell>
|
|
360
|
+
<StackedTableCell>Okafor</StackedTableCell>
|
|
361
|
+
<StackedTableCell>08/11/2010</StackedTableCell>
|
|
362
|
+
<StackedTableCell>02/26/1991</StackedTableCell>
|
|
363
|
+
<StackedTableCell>38</StackedTableCell>
|
|
364
|
+
<StackedTableCell>Mokassie MCHP</StackedTableCell>
|
|
365
|
+
<StackedTableCell>Dashonte Clarke</StackedTableCell>
|
|
366
|
+
<StackedTableCell>Complete</StackedTableCell>
|
|
367
|
+
</StackedTableRow>
|
|
368
|
+
<StackedTableRow>
|
|
369
|
+
<StackedTableCell>Siyabonga</StackedTableCell>
|
|
370
|
+
<StackedTableCell>Abiodun</StackedTableCell>
|
|
371
|
+
<StackedTableCell>07/21/1981</StackedTableCell>
|
|
372
|
+
<StackedTableCell>02/06/2007</StackedTableCell>
|
|
373
|
+
<StackedTableCell>98</StackedTableCell>
|
|
374
|
+
<StackedTableCell>Bathurst MCHP</StackedTableCell>
|
|
375
|
+
<StackedTableCell>Unassigned</StackedTableCell>
|
|
376
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
377
|
+
</StackedTableRow>
|
|
378
|
+
<StackedTableRow>
|
|
379
|
+
<StackedTableCell>Chiyembekezo</StackedTableCell>
|
|
380
|
+
<StackedTableCell>Okeke</StackedTableCell>
|
|
381
|
+
<StackedTableCell>01/23/1982</StackedTableCell>
|
|
382
|
+
<StackedTableCell>07/15/2003</StackedTableCell>
|
|
383
|
+
<StackedTableCell>2</StackedTableCell>
|
|
384
|
+
<StackedTableCell>Mayolla MCHP</StackedTableCell>
|
|
385
|
+
<StackedTableCell>Wan Gengxin</StackedTableCell>
|
|
386
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
387
|
+
</StackedTableRow>
|
|
388
|
+
<StackedTableRow>
|
|
389
|
+
<StackedTableCell>Mtendere</StackedTableCell>
|
|
390
|
+
<StackedTableCell>Afolayan</StackedTableCell>
|
|
391
|
+
<StackedTableCell>08/12/1994</StackedTableCell>
|
|
392
|
+
<StackedTableCell>05/12/1972</StackedTableCell>
|
|
393
|
+
<StackedTableCell>37</StackedTableCell>
|
|
394
|
+
<StackedTableCell>Gbangadu MCHP</StackedTableCell>
|
|
395
|
+
<StackedTableCell>Gvozden Boskovsky</StackedTableCell>
|
|
396
|
+
<StackedTableCell>Complete</StackedTableCell>
|
|
397
|
+
</StackedTableRow>
|
|
398
|
+
<StackedTableRow>
|
|
399
|
+
<StackedTableCell>Inyene</StackedTableCell>
|
|
400
|
+
<StackedTableCell>Okonkwo</StackedTableCell>
|
|
401
|
+
<StackedTableCell>04/01/1971</StackedTableCell>
|
|
402
|
+
<StackedTableCell>03/16/2000</StackedTableCell>
|
|
403
|
+
<StackedTableCell>70</StackedTableCell>
|
|
404
|
+
<StackedTableCell>Kunike Barina</StackedTableCell>
|
|
405
|
+
<StackedTableCell>Oscar de la Cavallería</StackedTableCell>
|
|
406
|
+
<StackedTableCell>Complete</StackedTableCell>
|
|
407
|
+
</StackedTableRow>
|
|
408
|
+
<StackedTableRow>
|
|
409
|
+
<StackedTableCell>Amaka</StackedTableCell>
|
|
410
|
+
<StackedTableCell>Pretorius</StackedTableCell>
|
|
411
|
+
<StackedTableCell>01/25/1996</StackedTableCell>
|
|
412
|
+
<StackedTableCell>09/15/1986</StackedTableCell>
|
|
413
|
+
<StackedTableCell>32</StackedTableCell>
|
|
414
|
+
<StackedTableCell>Bargbo</StackedTableCell>
|
|
415
|
+
<StackedTableCell>Alberto Raya</StackedTableCell>
|
|
416
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
417
|
+
</StackedTableRow>
|
|
418
|
+
<StackedTableRow>
|
|
419
|
+
<StackedTableCell>Meti</StackedTableCell>
|
|
420
|
+
<StackedTableCell>Abiodun</StackedTableCell>
|
|
421
|
+
<StackedTableCell>10/24/2010</StackedTableCell>
|
|
422
|
+
<StackedTableCell>07/26/1989</StackedTableCell>
|
|
423
|
+
<StackedTableCell>8</StackedTableCell>
|
|
424
|
+
<StackedTableCell>Majihun MCHP</StackedTableCell>
|
|
425
|
+
<StackedTableCell>Unassigned</StackedTableCell>
|
|
426
|
+
<StackedTableCell>Complete</StackedTableCell>
|
|
427
|
+
</StackedTableRow>
|
|
428
|
+
<StackedTableRow>
|
|
429
|
+
<StackedTableCell>Eshe</StackedTableCell>
|
|
430
|
+
<StackedTableCell>Okeke</StackedTableCell>
|
|
431
|
+
<StackedTableCell>01/31/1995</StackedTableCell>
|
|
432
|
+
<StackedTableCell>01/31/1995</StackedTableCell>
|
|
433
|
+
<StackedTableCell>63</StackedTableCell>
|
|
434
|
+
<StackedTableCell>Mambiama CHP</StackedTableCell>
|
|
435
|
+
<StackedTableCell>Shadrias Pearson</StackedTableCell>
|
|
436
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
437
|
+
</StackedTableRow>
|
|
438
|
+
<StackedTableRow>
|
|
439
|
+
<StackedTableCell>Obi</StackedTableCell>
|
|
440
|
+
<StackedTableCell>Okafor</StackedTableCell>
|
|
441
|
+
<StackedTableCell>06/07/1990</StackedTableCell>
|
|
442
|
+
<StackedTableCell>01/03/2006</StackedTableCell>
|
|
443
|
+
<StackedTableCell>28</StackedTableCell>
|
|
444
|
+
<StackedTableCell>Dalakuru CHP</StackedTableCell>
|
|
445
|
+
<StackedTableCell>Anatoliy Shcherbatykh</StackedTableCell>
|
|
446
|
+
<StackedTableCell>Incomplete</StackedTableCell>
|
|
447
|
+
</StackedTableRow>
|
|
448
|
+
</StackedTableBody>
|
|
449
|
+
<StackedTableFoot>
|
|
450
|
+
<StackedTableRow>
|
|
451
|
+
<StackedTableCell colSpan="8" hideTitle>
|
|
452
|
+
<Button primary>StackedTable footer button</Button>
|
|
453
|
+
</StackedTableCell>
|
|
454
|
+
</StackedTableRow>
|
|
455
|
+
</StackedTableFoot>
|
|
456
|
+
</StackedTable>
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
export const RTL = (args) => (
|
|
460
|
+
<div dir="rtl">
|
|
461
|
+
<Default {...args} />
|
|
462
|
+
</div>
|
|
463
|
+
)
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
import { mount } from 'enzyme'
|
|
3
|
+
import React from 'react'
|
|
4
|
+
import { StackedTableBody } from './stacked-table-body.js'
|
|
5
|
+
import { StackedTableCellHead } from './stacked-table-cell-head.js'
|
|
6
|
+
import { StackedTableCell } from './stacked-table-cell.js'
|
|
7
|
+
import { StackedTableHead } from './stacked-table-head.js'
|
|
8
|
+
import { StackedTableRowHead } from './stacked-table-row-head.js'
|
|
9
|
+
import { StackedTableRow } from './stacked-table-row.js'
|
|
10
|
+
import { StackedTable } from './stacked-table.js'
|
|
11
|
+
|
|
12
|
+
const Table = ({ headerLabels, bodyLabels }) => (
|
|
13
|
+
<StackedTable>
|
|
14
|
+
<StackedTableHead>
|
|
15
|
+
<StackedTableRowHead>
|
|
16
|
+
{headerLabels.map(({ label, ...props }, index) => (
|
|
17
|
+
<StackedTableCellHead {...props} key={label + index}>
|
|
18
|
+
{label}
|
|
19
|
+
</StackedTableCellHead>
|
|
20
|
+
))}
|
|
21
|
+
</StackedTableRowHead>
|
|
22
|
+
</StackedTableHead>
|
|
23
|
+
<StackedTableBody>
|
|
24
|
+
<StackedTableRow>
|
|
25
|
+
{bodyLabels.map(({ label, ...props }) => (
|
|
26
|
+
<StackedTableCell {...props} key={label}>
|
|
27
|
+
{label}
|
|
28
|
+
</StackedTableCell>
|
|
29
|
+
))}
|
|
30
|
+
</StackedTableRow>
|
|
31
|
+
</StackedTableBody>
|
|
32
|
+
</StackedTable>
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
describe('StackedTable', () => {
|
|
36
|
+
const headerLabels = [
|
|
37
|
+
{ label: 'First name', colSpan: '1' },
|
|
38
|
+
{ label: 'Last name', colSpan: '1' },
|
|
39
|
+
{ label: 'Incident date', colSpan: '1' },
|
|
40
|
+
{ label: 'Last updated', colSpan: '1' },
|
|
41
|
+
{ label: 'Age', colSpan: '1' },
|
|
42
|
+
{ label: 'Registering unit', colSpan: '1' },
|
|
43
|
+
{ label: 'Assigned user', colSpan: '1' },
|
|
44
|
+
{ label: 'Status', colSpan: '1' },
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
const bodyLabels = [
|
|
48
|
+
{ label: 'Onyekachukwu' },
|
|
49
|
+
{ label: 'Kariuki' },
|
|
50
|
+
{ label: '02/06/2007' },
|
|
51
|
+
{ label: '05/25/1972' },
|
|
52
|
+
{ label: '66' },
|
|
53
|
+
{ label: 'Jawi' },
|
|
54
|
+
{ label: 'Sofie Hubert' },
|
|
55
|
+
{ label: 'Incomplete' },
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
it('should add the headerLabels to each cell', () => {
|
|
59
|
+
const table = mount(
|
|
60
|
+
<Table headerLabels={headerLabels} bodyLabels={bodyLabels} />
|
|
61
|
+
)
|
|
62
|
+
const cells = table.find('td')
|
|
63
|
+
|
|
64
|
+
headerLabels.forEach((label, index) => {
|
|
65
|
+
const cell = cells.at(index)
|
|
66
|
+
const title = cell.find('.title').text()
|
|
67
|
+
|
|
68
|
+
expect(title).toBe(headerLabels[index].label)
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('should not add empty header labels to the body cells', () => {
|
|
73
|
+
const emptyLabelIndex = 2
|
|
74
|
+
const headerLabelsWithEmpty = [
|
|
75
|
+
...headerLabels.slice(0, emptyLabelIndex),
|
|
76
|
+
'',
|
|
77
|
+
...headerLabels.slice(emptyLabelIndex + 1),
|
|
78
|
+
]
|
|
79
|
+
const table = mount(
|
|
80
|
+
<Table
|
|
81
|
+
headerLabels={headerLabelsWithEmpty}
|
|
82
|
+
bodyLabels={bodyLabels}
|
|
83
|
+
/>
|
|
84
|
+
)
|
|
85
|
+
const cells = table.find('td')
|
|
86
|
+
const cell = cells.at(emptyLabelIndex)
|
|
87
|
+
const title = cell.find('.title')
|
|
88
|
+
|
|
89
|
+
expect(title).toHaveLength(0)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('should add a header label with a colspan higher than 1 to multiple body cells', () => {
|
|
93
|
+
const indexWithColspan = 1
|
|
94
|
+
const colSpan = 3
|
|
95
|
+
const originalHeaderLabel = headerLabels[indexWithColspan]
|
|
96
|
+
const headerLabelsWithColspan = [
|
|
97
|
+
...headerLabels.slice(0, indexWithColspan),
|
|
98
|
+
{ ...originalHeaderLabel, colSpan: `${colSpan}` },
|
|
99
|
+
...headerLabels.slice(indexWithColspan + colSpan),
|
|
100
|
+
]
|
|
101
|
+
const table = mount(
|
|
102
|
+
<Table
|
|
103
|
+
headerLabels={headerLabelsWithColspan}
|
|
104
|
+
bodyLabels={bodyLabels}
|
|
105
|
+
/>
|
|
106
|
+
)
|
|
107
|
+
const cells = table.find('td')
|
|
108
|
+
const label = headerLabelsWithColspan[indexWithColspan].label
|
|
109
|
+
|
|
110
|
+
// all body cells that are group under the single header should share the same label
|
|
111
|
+
for (let i = 0; i < colSpan; ++i) {
|
|
112
|
+
const index = indexWithColspan + i
|
|
113
|
+
const cell = cells.at(index)
|
|
114
|
+
expect(cell).toHaveLength(1)
|
|
115
|
+
|
|
116
|
+
const title = cell.find('.title')
|
|
117
|
+
expect(title.text()).toBe(label)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// the next body cell should have the label of the next header cell
|
|
121
|
+
const titleAfterColspan =
|
|
122
|
+
headerLabelsWithColspan[indexWithColspan + 1].label
|
|
123
|
+
const cellAfterColspan = cells.at(indexWithColspan + colSpan)
|
|
124
|
+
expect(cellAfterColspan).toHaveLength(1)
|
|
125
|
+
expect(cellAfterColspan.find('.title').text()).toBe(titleAfterColspan)
|
|
126
|
+
})
|
|
127
|
+
})
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { colors } from '@dhis2/ui-constants'
|
|
2
|
+
import PropTypes from 'prop-types'
|
|
3
|
+
import React from 'react'
|
|
4
|
+
|
|
5
|
+
export const Table = ({ children, className, dataTest }) => (
|
|
6
|
+
<table className={className} data-test={dataTest}>
|
|
7
|
+
{children}
|
|
8
|
+
|
|
9
|
+
<style jsx>{`
|
|
10
|
+
table {
|
|
11
|
+
display: block;
|
|
12
|
+
border: 0;
|
|
13
|
+
background-color: ${colors.white};
|
|
14
|
+
min-width: 100%;
|
|
15
|
+
text-align: left;
|
|
16
|
+
border-collapse: collapse;
|
|
17
|
+
vertical-align: top;
|
|
18
|
+
color: ${colors.grey900};
|
|
19
|
+
}
|
|
20
|
+
`}</style>
|
|
21
|
+
</table>
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
Table.propTypes = {
|
|
25
|
+
children: PropTypes.node.isRequired,
|
|
26
|
+
className: PropTypes.string,
|
|
27
|
+
dataTest: PropTypes.string,
|
|
28
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Table } from './table.js'
|
|
2
|
+
export { TableFoot } from './table-foot.js'
|
|
3
|
+
export { TableBody } from './table-body.js'
|
|
4
|
+
export { TableHead } from './table-head.js'
|
|
5
|
+
export { TableCell } from './table-cell.js'
|
|
6
|
+
export { TableCellHead } from './table-cell-head.js'
|
|
7
|
+
export { TableRow } from './table-row.js'
|
|
8
|
+
export { TableRowHead } from './table-row-head.js'
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import PropTypes from 'prop-types'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
|
|
4
|
+
export const TableBody = ({
|
|
5
|
+
children,
|
|
6
|
+
className,
|
|
7
|
+
dataTest = 'dhis2-uicore-tablebody',
|
|
8
|
+
role,
|
|
9
|
+
}) => (
|
|
10
|
+
<tbody className={className} data-test={dataTest} role={role}>
|
|
11
|
+
{children}
|
|
12
|
+
</tbody>
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
TableBody.propTypes = {
|
|
16
|
+
/** Should be `<TableRow>` components */
|
|
17
|
+
children: PropTypes.node,
|
|
18
|
+
className: PropTypes.string,
|
|
19
|
+
dataTest: PropTypes.string,
|
|
20
|
+
role: PropTypes.string,
|
|
21
|
+
}
|