import {createStructuredSelector} from 'reselect'; import config from 'ui/config'; import {link} from 'ui/lib/d3-redux'; import {getSelectedParameterCode, getSelectedDateRange} from 'ml/selectors/hydrograph-state-selector'; import {getTimeRange} from 'ml/selectors/hydrograph-data-selector'; import {retrieveMedianStatistics, retrievePriorYearIVData} from 'ml/store/hydrograph-data'; import {setCompareDataVisibility, setMedianDataVisibility} from 'ml/store/hydrograph-state'; import {getMainLayout} from './selectors/layout'; import {isVisible} from './selectors/time-series-data'; import {showDataLoadingIndicator} from './data-loading-indicator'; /* * Create the last year toggle, and median toggle for the time series graph. * @param {Object} elem - D3 selection */ export const drawGraphControls = function(elem, store, siteno) { const graphControlDiv = elem.append('ul') .classed('usa-fieldset', true) .classed('usa-list--unstyled', true) .classed('graph-controls-container', true); const compareControlDiv = graphControlDiv.append('li') .classed('usa-checkbox', true); compareControlDiv.append('input') .classed('usa-checkbox__input', true) .attr('type', 'checkbox') .attr('id', 'last-year-checkbox') .attr('aria-labelledby', 'last-year-label') .attr('ga-on', 'click') .attr('ga-event-category', 'TimeSeriesGraph') .attr('ga-event-action', 'toggleCompare') .on('click', function() { const state = store.getState(); const currentTimeRange = getTimeRange('current')(state); store.dispatch(setCompareDataVisibility(this.checked)); if (this.checked) { showDataLoadingIndicator(true, getMainLayout(store.getState()).height); store.dispatch(retrievePriorYearIVData(siteno, { parameterCode: getSelectedParameterCode(state), startTime: currentTimeRange.start, endTime: currentTimeRange.end })) .then(() => { showDataLoadingIndicator(false); }); } }) // Sets the state of the toggle .call(link(store,function(elem, {checked, selectedDateRange}) { elem.property('checked', checked) .attr('disabled', selectedDateRange !== 'custom' && config.ALLOW_COMPARE_DATA_FOR_PERIODS.includes(selectedDateRange) ? null : true); }, createStructuredSelector({ checked: isVisible('compare'), selectedDateRange: getSelectedDateRange }))); compareControlDiv.append('label') .classed('usa-checkbox__label', true) .attr('id', 'last-year-label') .attr('for', 'last-year-checkbox') .text('Compare to last year'); const medianControlDiv = graphControlDiv.append('li') .classed('usa-checkbox', true); medianControlDiv.append('input') .classed('usa-checkbox__input', true) .attr('type', 'checkbox') .attr('id', 'median-checkbox') .attr('aria-labelledby', 'median-label') .attr('ga-on', 'click') .attr('ga-event-category', 'TimeSeriesGraph') .attr('ga-event-action', 'toggleMedian') .on('click', function() { store.dispatch(setMedianDataVisibility(this.checked)); if (this.checked) { showDataLoadingIndicator(true, getMainLayout(store.getState()).height); store.dispatch(retrieveMedianStatistics(siteno, getSelectedParameterCode(store.getState()))) .then(() => { showDataLoadingIndicator(false); }); } }) // Sets the state of the toggle .call(link(store,function(elem, checked) { elem.property('checked', checked); }, isVisible('median'))); medianControlDiv.append('label') .classed('usa-checkbox__label', true) .attr('id', 'median-label') .attr('for', 'median-checkbox') .text('Display median'); };