Skip to content
Snippets Groups Projects
Commit 0ddec4f1 authored by Yan, Andrew N.'s avatar Yan, Andrew N.
Browse files

current range is selected for median plotting

parent 9fa88339
No related branches found
No related tags found
No related merge requests found
......@@ -27,7 +27,7 @@ const { allTimeSeriesSelector, isVisibleSelector, titleSelector,
const { createTooltipFocus, createTooltipText } = require('./tooltip');
const { coerceStatisticalSeries } = require('./statistics');
const { getCurrentVariable } = require('../../selectors/timeSeriesSelector');
const { getCurrentVariable, getCurrentDateRange } = require('../../selectors/timeSeriesSelector');
const drawMessage = function (elem, message) {
......@@ -257,19 +257,16 @@ const plotMedianPoints = function (elem, {xscale, yscale, modulo, points, showLa
* @param {Boolean} showLabel
* @param {Object} variable
*/
const plotAllMedianPoints = function (elem, {visible, xscale, yscale, seriesMap, showLabel, variable}) {
const plotAllMedianPoints = function (elem, {visible, xscale, yscale, seriesMap, showLabel, variable, dateRange}) {
elem.select('#median-points').remove();
if (!visible) {
return;
}
const container = elem
.append('g')
.attr('id', 'median-points');
console.log(seriesMap);
for (const [index, seriesID] of Object.keys(seriesMap).entries()) {
console.log(seriesMap[seriesID]);
const points = coerceStatisticalSeries(seriesMap[seriesID]);
const points = coerceStatisticalSeries(seriesMap[seriesID], dateRange);
plotMedianPoints(container, {xscale, yscale, modulo: index % 6, points, showLabel, variable});
}
};
......@@ -347,6 +344,7 @@ const timeSeriesGraph = function (elem) {
yscale: yScaleSelector,
seriesMap: currentVariableTimeSeriesSelector('median'),
variable: getCurrentVariable,
dateRange: getCurrentDateRange,
showLabel: (state) => state.timeseriesState.showMedianStatsLabel
})));
});
......
const { range } = require('lodash');
const { isLeapYear } = require('../../models');
const { calcStartTime } = require('../../utils');
/**
* Make statisical data look like a timeseries for plotting purposes
......@@ -7,8 +8,9 @@ const { isLeapYear } = require('../../models');
* @param series -- an object with the following keys: points, startTime, and endTime at a minimum. Each point should have a javascript month and day
* @returns {*[]}
*/
export const coerceStatisticalSeries = function (series) {
const startYear = series.startTime.getFullYear();
export const coerceStatisticalSeries = function (series, period) {
const startTime = calcStartTime(period, series.endTime);
const startYear = startTime.getFullYear();
const endYear = series.endTime.getFullYear();
const yearRange = range(startYear, endYear + 1);
let points = series.points;
......@@ -31,11 +33,9 @@ export const coerceStatisticalSeries = function (series) {
let sortedPoints = plotablePoints.sort(function(a, b) {
return a.dateTime - b.dateTime;
});
console.log(series.startTime);
console.log(series.endTime);
let filtered = sortedPoints.filter(x => series.startTime <= x.dateTime && x.dateTime <= series.endTime);
let filtered = sortedPoints.filter(x => startTime <= x.dateTime && x.dateTime <= series.endTime);
let first = filtered[0];
if (first.dateTime > series.startTime) {
if (first.dateTime > startTime) {
let previousIndex;
if (sortedPoints.indexOf(first) === 0) {
previousIndex = sortedPoints.length - 1;
......@@ -44,7 +44,7 @@ export const coerceStatisticalSeries = function (series) {
}
const previousVal = sortedPoints[previousIndex];
let leftVal = Object.assign({}, previousVal);
leftVal.dateTime = series.startTime;
leftVal.dateTime = startTime;
filtered.unshift(leftVal);
}
let last = filtered[filtered.length - 1];
......@@ -53,6 +53,5 @@ export const coerceStatisticalSeries = function (series) {
rightVal.dateTime = series.endTime;
filtered.push(rightVal);
}
console.log(filtered);
return filtered;
};
\ No newline at end of file
......@@ -6,6 +6,7 @@ const { default: thunk } = require('redux-thunk');
const { getMedianStatistics, getPreviousYearTimeseries, getTimeseries,
parseMedianData, sortedParameters } = require('../models');
const { calcStartTime } = require('../utils');
const { normalize } = require('../schema');
const { fetchFloodFeatures, fetchFloodExtent } = require('../floodData');
const { getCurrentParmCd, getCurrentDateRange, hasTimeSeries, getTsRequestKey} = require('../selectors/timeSeriesSelector');
......@@ -116,22 +117,8 @@ export const Actions = {
dispatch(Actions.setCurrentDateRange(period));
if (!hasTimeSeries('current', period, parmCd)(state)) {
const endTime = new Date(); //TODO get this from the current data
let startTime = new Date(endTime);
let startTime = calcStartTime(period, endTime);
switch (period) {
case 'P7D':
break;
case 'P30D':
startTime.setDate(startTime.getDate() - 30);
break;
case 'P1Y': {
startTime.setFullYear(startTime.getFullYear() - 1);
break;
}
default:
console.log('No known period specified');
}
return getTimeseries({
sites: [site],
params: [parmCd],
......
......@@ -154,3 +154,28 @@ export function wrap(text, width, break_chars=TEXT_WRAP_BREAK_CHARS) {
export const mediaQuery = function (minWidth) {
return window.matchMedia(`screen and (min-width: ${minWidth}px)`).matches;
};
/**
* Calculate the start time of a time range based on a time-delta string and the end time
*
* @param period -- an NWIS time-delta string (e.g. P7D)
* @param endTime -- the end time
* @returns {Date}
*/
export const calcStartTime = function (period, endTime) {
let startTime = new Date(endTime);
switch (period) {
case 'P7D':
startTime.setDate(startTime.getDate() - 7);
break;
case 'P30D':
startTime.setDate(startTime.getDate() - 30);
break;
case 'P1Y':
startTime.setFullYear(startTime.getFullYear() - 1);
break;
default:
console.log('No known period specified');
}
return startTime;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment