Newer
Older
import List from 'list.js';
Bucknell, Mary S.
committed
import {createStructuredSelector} from 'reselect';
import {getGroundwaterLevelsTableData} from './selectors/discrete-data';
import {getIVTableData} from './selectors/iv-data';
Bucknell, Mary S.
committed
const TABLE_CAPTION = {
iv: 'Instantaneous value data',
gw: 'Field visit data'
};
Bucknell, Mary S.
committed
const COLUMN_HEADINGS = {
iv: ['Parameter', 'Time', 'Result', 'Approval', 'Masks'],
gw: ['Parameter', 'Time', 'Result']
};
Bucknell, Mary S.
committed
const VALUE_NAMES = {
iv: ['parameterName', 'dateTime', 'result', 'approvals', 'masks'],
gw: ['parameterName', 'dateTime', 'result']
};
const CONTAINER_ID = {
iv: 'iv-table-container',
gw: 'gw-table-container'
};
Bucknell, Mary S.
committed
const drawTableBody = function(table, dataKind, data) {
table.append('tbody')
.classed('list', true);
Bucknell, Mary S.
committed
const items = VALUE_NAMES[dataKind].reduce(function(total, propName, index) {
if (index === 0) {
return `${total}<th scope="row" class="${propName}"></th>`;
} else {
return `${total}<td class="${propName}"></td>`;
}
}, '');
const options = {
Bucknell, Mary S.
committed
valueNames: VALUE_NAMES[dataKind],
item: `<tr>${items}</tr>`,
page: 30,
pagination:[{
left: 1,
innerWindow: 2,
right: 1
}]
};
Bucknell, Mary S.
committed
new List(CONTAINER_ID[dataKind], options, data);
* @param {D3 selection} elem - Table is rendered within elem
* @param {String} kind - kind of data, iv or gw
* @param {Array of Object} currentData - data that will be rendered in the table.
Bucknell, Mary S.
committed
const drawDataTable = function(elem, {dataKind, currentData}) {
elem.select(`#${CONTAINER_ID[dataKind]}`).remove();
if (!currentData.length) {
return;
}
const tableContainer = elem.append('div')
Bucknell, Mary S.
committed
.attr('id', CONTAINER_ID[dataKind]);
const table = tableContainer.append('table')
.classed('usa-table', true);
tableContainer.append('ul')
.classed('pagination', true);
Bucknell, Mary S.
committed
table.append('caption')
.text(TABLE_CAPTION[dataKind]);
table.append('thead')
.append('tr')
.selectAll('th')
Bucknell, Mary S.
committed
.data(COLUMN_HEADINGS[dataKind])
.attr('scope', 'col')
Bucknell, Mary S.
committed
table.call(drawTableBody, dataKind, currentData);
};
/*
* Create the hydrograph data tables section which will update when the data
* displayed on the hydrograph changes.
* @param {D3 selection} elem
* @param {Redux store} store
*/
Bucknell, Mary S.
committed
export const drawDataTables = function(elem, store) {
elem.append('div')
Bucknell, Mary S.
committed
.call(link(store, drawDataTable, createStructuredSelector({
dataKind: () => 'iv',
currentData: getIVTableData('primary')
Bucknell, Mary S.
committed
})));
elem.append('div')
.attr('id', 'gw-hydrograph-data-table-container')
Bucknell, Mary S.
committed
.call(link(store, drawDataTable, createStructuredSelector({
dataKind: () => 'gw',
currentData: getGroundwaterLevelsTableData
Bucknell, Mary S.
committed
})));