Skip to content

Commit ac72d55

Browse files
committed
TextualSummary: client side rendering of TextualListview.
1 parent d63c9ba commit ac72d55

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

app/helpers/textual_summary_helper.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ def process_textual_info(groups, record)
4747

4848
group = {
4949
:partial => group_result.template,
50-
:locals => group_result.locals,
5150
}
5251
if (group_result.template == 'shared/summary/textual') ||
5352
(group_result.template == 'shared/summary/textual_tags') ||
@@ -69,6 +68,11 @@ def process_textual_info(groups, record)
6968
group[:title] = group_result.locals[:title]
7069
group[:rows] = group_result.locals[:rows]
7170
group[:labels] = group_result.locals[:labels]
71+
elsif (group_result.template == 'shared/summary/textual_listview')
72+
group[:title] = group_result.locals[:title]
73+
group[:headers] = group_result.locals[:headers]
74+
group[:values] = group_result.locals[:value]
75+
group[:colOrder] = group_result.locals[:col_order]
7276
else
7377
binding.pry
7478
end
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import * as React from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
const simpleRow = (row, i, colOrder) => (
5+
<tr key={i} className="no-hover">
6+
{colOrder.map(col => <td>{row[col]}</td>)}
7+
</tr>
8+
);
9+
10+
const linkClick = (row, event) => {
11+
console.log('linkClick');
12+
console.log(row);
13+
DoNav(row.link);
14+
event.preventDefault();
15+
};
16+
17+
const clickableRow = (row, i, colOrder) => {
18+
const label = __('View the table');
19+
return (
20+
<tr key={i} onClick={e => linkClick(row, e)}>
21+
{colOrder.map(col => <td title={label}>{row[col]}</td>)}
22+
</tr>
23+
);
24+
};
25+
26+
const renderRow = (row, i, colOrder) => (
27+
row.link ? clickableRow(row, i, colOrder) : simpleRow(row, i, colOrder)
28+
);
29+
30+
export default function TableListView(props) {
31+
return (
32+
<table className="table table-bordered table-hover table-striped table-summary-screen">
33+
<thead>
34+
<tr>
35+
<th colSpan={props.headers.length} align="left">{props.title}</th>
36+
</tr>
37+
<tr>
38+
{props.headers.map((header, i) => <th key={i}>{header}</th>)}
39+
</tr>
40+
</thead>
41+
<tbody>
42+
{props.values.map((row, i) => renderRow(row, i, props.colOrder))}
43+
</tbody>
44+
</table>
45+
);
46+
}
47+
48+
TableListView.propTypes = {
49+
title: PropTypes.string.isRequired,
50+
headers: PropTypes.arrayOf(PropTypes.string).isRequired,
51+
values: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)).isRequired,
52+
colOrder: PropTypes.arrayOf(PropTypes.integer).isRequired,
53+
};

app/javascript/react/textual_summary/textual_group.jsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import TagGroup from './tag_group';
55
import SimpleTable from './simple_table';
66
import OperationRanges from './operation_ranges';
77
import MultilinkTable from './multilink_table';
8+
import TableListView from './table_list_view';
89

910
const renderComponent = (props) => {
1011
switch (props.group.partial) {
@@ -25,6 +26,15 @@ const renderComponent = (props) => {
2526
return <OperationRanges items={props.group.items} title={props.group.title} />;
2627
case 'shared/summary/multilink_table':
2728
return <MultilinkTable items={props.group.items} title={props.group.title} />;
29+
case 'shared/summary/textual_listview':
30+
return (
31+
<TableListView
32+
title={props.group.title}
33+
headers={props.group.headers}
34+
values={props.group.values}
35+
colOrder={props.group.colOrder}
36+
/>
37+
);
2838
default:
2939
return <span>Error: Unknown summary group type.</span>;
3040
}

0 commit comments

Comments
 (0)