Skip to content

Commit c0be209

Browse files
committed
feat(table): include table cell value formatting
1 parent 941d6d3 commit c0be209

File tree

2 files changed

+93
-41
lines changed

2 files changed

+93
-41
lines changed

demo/demo.jsx

+82-40
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import {
1414

1515
ReactDOM.render(
1616
<div>
17-
<h1 className="mt-3">Forms</h1>
17+
{/* <h1 className="mt-3">Forms</h1>
1818
<FormExamples />
19-
<hr className="my-5" />
19+
<hr className="my-5" /> */}
2020
<h1 className="mt-3">Tables</h1>
2121
<TableExamples />
2222
</div>,
@@ -135,45 +135,87 @@ function FormExamples() {
135135
function TableExamples() {
136136
return (
137137
<div>
138-
<h2>Simple Table</h2>
139-
<Table
140-
columns={['a', 'b', 'c']}
141-
docs={[
142-
{ a: 1, b: 2, c: 3 },
143-
{ a: 4, b: 5, c: 6 },
144-
{ a: 7, b: 8, c: 9 },
145-
]}
146-
/>
147-
148-
<h2>Table with formated colums</h2>
149-
<Table
150-
columns={[
151-
{ attribute: 'a', label: 'A', align: 'center' },
152-
{ attribute: 'b', label: 'B', align: 'right' },
153-
{ attribute: 'c', label: 'C' },
154-
]}
155-
docs={[
156-
{ a: 1, b: 2, c: 3 },
157-
{ a: 4, b: 5, c: 6 },
158-
{ a: 7, b: 8, c: 9 },
159-
]}
160-
/>
138+
<div className="row">
139+
<div className="col">
140+
<h2>Simple Table</h2>
141+
<Table
142+
columns={['a', 'b', 'c']}
143+
docs={[
144+
{ a: 1, b: 2, c: 3 },
145+
{ a: 4, b: 5, c: 6 },
146+
{ a: 7, b: 8, c: 9 },
147+
]}
148+
/>
149+
</div>
150+
<div className="col">
151+
<h2>Table with formated colums</h2>
152+
<Table
153+
columns={[
154+
{ attribute: 'a', label: 'A', align: 'center' },
155+
{ attribute: 'b', label: 'B', align: 'right' },
156+
{ attribute: 'c', label: 'C' },
157+
]}
158+
docs={[
159+
{ a: 1, b: 2, c: 3 },
160+
{ a: 4, b: 5, c: 6 },
161+
{ a: 7, b: 8, c: 9 },
162+
]}
163+
/>
164+
</div>
165+
<div className="col">
166+
<h2>Table with formatted values </h2>
167+
<Table
168+
columns={[
169+
{
170+
attribute: 'a',
171+
label: 'A',
172+
format(v) {
173+
return v + '*';
174+
},
175+
},
176+
{
177+
attribute: 'b',
178+
label: 'B',
179+
format(v, doc) {
180+
return v + doc.a;
181+
},
182+
},
183+
{
184+
attribute: 'c',
185+
label: 'C',
186+
format(v, doc) {
187+
return v + doc.c;
188+
},
189+
},
190+
]}
191+
docs={[
192+
{ a: 1, b: 2, c: 3 },
193+
{ a: 4, b: 5, c: 6 },
194+
{ a: 7, b: 8, c: 9 },
195+
]}
196+
/>
197+
</div>
198+
</div>
161199

162-
<h2>Table with custom styles</h2>
163-
<Table
164-
columns={['a', 'b', 'c']}
165-
docs={[
166-
{ a: 1, b: 2, c: 3 },
167-
{ a: 4, b: 5, c: 6 },
168-
{ a: 7, b: 8, c: 9 },
169-
]}
170-
dark={true}
171-
small={false}
172-
hover={false}
173-
striped={false}
174-
bordered={true}
175-
rowClass={(doc) => (doc.b % 2 === 1 ? 'table-primary' : '')}
176-
/>
200+
<div className="row">
201+
<div className="col">
202+
<h2>Table with custom styles</h2>
203+
<Table
204+
columns={['a', 'b', 'c']}
205+
docs={[
206+
{ a: 1, b: 2, c: 3 },
207+
{ a: 4, b: 5, c: 6 },
208+
{ a: 7, b: 8, c: 9 },
209+
]}
210+
dark={true}
211+
small={false}
212+
hover={false}
213+
striped={false}
214+
bordered={true}
215+
rowClass={(doc) => (doc.b % 2 === 1 ? 'table-primary' : '')}
216+
/>
217+
</div>
218+
</div>
177219
</div>
178220
);
179221
}

src/table/TableBody.jsx

+11-1
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,21 @@ export function TableBody({ columns, docs, rowClass }) {
88
<tr key={docIndex} className={rowClass(doc)}>
99
{columns.map((column, columnIndex) => (
1010
<td key={columnIndex} className={getColumnClass(column)}>
11-
{doc[column.attribute]}
11+
{getColumnValue(doc, column)}
1212
</td>
1313
))}
1414
</tr>
1515
))}
1616
</tbody>
1717
);
1818
}
19+
20+
function getColumnValue(doc, column) {
21+
let rawValue = doc[column.attribute];
22+
23+
if (!column.format) {
24+
return rawValue;
25+
}
26+
27+
return column.format(rawValue, doc);
28+
}

0 commit comments

Comments
 (0)