Newer
Older
// Required to initialize USWDS components after page load (WaterAlert ToolTips)
import {tooltip} from 'uswds-components';
Bucknell, Mary S.
committed
Bucknell, Mary S.
committed
import {link} from 'ui/lib/d3-redux';
Bucknell, Mary S.
committed
Bucknell, Mary S.
committed
import {appendInfoTooltip} from 'd3render/info-tooltip';
Bucknell, Mary S.
committed
Bucknell, Mary S.
committed
import {getInputsForRetrieval, getSelectedParameterCode} from 'ml/selectors/hydrograph-state-selector';
Bucknell, Mary S.
committed
import {setSelectedParameterCode} from 'ml/store/hydrograph-state';
import {retrieveHydrographData} from 'ml/store/hydrograph-data';
Bucknell, Mary S.
committed
import {getMainLayout} from './selectors/layout';
import {getAvailableParameters} from './selectors/parameter-data';
import {showDataLoadingIndicator} from './data-loading-indicator';
Bucknell, Mary S.
committed
Bucknell, Mary S.
committed
/**
* Draws a table with clickable rows of time series parameter codes. Selecting
* a row changes the active parameter code.
*/
Bucknell, Mary S.
committed
export const drawSelectionTable = function(container, store, siteno) {
const parameters = getAvailableParameters(store.getState());
if (!Object.keys(parameters).length) {
Bucknell, Mary S.
committed
const columnHeaders = [' ', 'Parameter', 'Period of Record', 'WaterAlert'];
const tableContainer = container.append('div')
.attr('id', 'select-time-series');
Bucknell, Mary S.
committed
tableContainer.append('label')
.attr('id', 'select-time-series-label')
.text('Select a time series');
Bucknell, Mary S.
committed
const table = tableContainer.append('table')
.classed('usa-table', true)
.classed('usa-table--borderless', true)
.attr('aria-labelledby', 'select-time-series-label')
Bucknell, Mary S.
committed
.attr('tabindex', 0)
.attr('role', 'listbox');
table.append('thead')
.append('tr')
.selectAll('th')
.data(columnHeaders)
.enter().append('th')
.selectAll('tr')
.data(Object.values(parameters))
.enter().append('tr')
Bucknell, Mary S.
committed
.attr('id', d => `time-series-select-table-row-${d.parameterCode}`)
.attr('ga-on', 'click')
.attr('ga-event-category', 'selectTimeSeries')
Bucknell, Mary S.
committed
.attr('ga-event-action', (d) => `time-series-parmcd-${d.parameterCode}`)
Bucknell, Mary S.
committed
.call(link(store, (trElem, selectedParameterCode) => {
trElem
.classed('selected', d => d.parameterCode === selectedParameterCode)
.attr('aria-selected', d => d.parameterCode === selectedParameterCode);
}, getSelectedParameterCode))
Bucknell, Mary S.
committed
.on('click', function(event, d) {
Bucknell, Mary S.
committed
const thisClass = select(this).attr('class');
if (!thisClass || !thisClass.includes('selected')) {
store.dispatch(setSelectedParameterCode(d.parameterCode));
Bucknell, Mary S.
committed
showDataLoadingIndicator(true, getMainLayout(store.getState()).height);
store.dispatch(retrieveHydrographData(siteno, getInputsForRetrieval(store.getState())))
Bucknell, Mary S.
committed
.then(() => {
Bucknell, Mary S.
committed
showDataLoadingIndicator(false);
Bucknell, Mary S.
committed
});
Bucknell, Mary S.
committed
.attr('id', d => `time-series-select-radio-button-${d.parameterCode}`)
.attr('name', 'param-select-radio-input')
.attr('class', 'usa-radio__input')
Bucknell, Mary S.
committed
.attr('value', d => `${d.parameterCode}`)
.call(link(store, (inputElem, selectedParameterCode) => {
inputElem.property('checked', d => d.parameterCode === selectedParameterCode ? true : null);
}, getSelectedParameterCode));
paramSelectCol.append('label')
.attr('class', 'usa-radio__label');
Bucknell, Mary S.
committed
.text(d => d.description)
.each(function(d) {
appendInfoTooltip(select(this), `Parameter code: ${d.parameterCode}`);
Bucknell, Mary S.
committed
});
Bucknell, Mary S.
committed
.text(d => d.periodOfRecord ?
`${d.periodOfRecord.begin_date} to ${d.periodOfRecord.end_date}` : '');
.append('div')
.attr('class', 'wateralert-link');
// WaterAlert does not support every parameter code, so lets take that into account when adding the links
table.selectAll('.wateralert-link').each(function(d) {
let selection = select(this);
Bucknell, Mary S.
committed
let waterAlertCell;
if (d.waterAlert.hasWaterAlert) {
waterAlertCell = selection.append('a')
.attr('href', `${config.WATERALERT_SUBSCRIPTION}/?site_no=${siteno}&parm=${d.waterAlert.subscriptionParameterCode}`);
Bucknell, Mary S.
committed
waterAlertCell = selection;
Bucknell, Mary S.
committed
waterAlertCell.attr('class', 'water-alert-cell usa-tooltip')
.attr('data-position', 'left')
.attr('data-classes', 'width-full tablet:width-auto')
.attr('title', d.waterAlert.tooltipText)
.text(d.waterAlert.displayText);
// Activate the USWDS toolTips for WaterAlert subscriptions