From 9a586eeee7d8043289fa566ee2db36f512b5de7b Mon Sep 17 00:00:00 2001
From: Andrew Yan <ayan@usgs.gov>
Date: Fri, 20 Apr 2018 14:57:10 -0500
Subject: [PATCH] rough version of working step function for median data

---
 .../scripts/components/hydrograph/index.js    | 34 ++++++++++++++++---
 assets/src/scripts/models.js                  | 23 +++++++++++--
 assets/src/styles/components/_hydrograph.scss | 15 ++++++++
 3 files changed, 65 insertions(+), 7 deletions(-)

diff --git a/assets/src/scripts/components/hydrograph/index.js b/assets/src/scripts/components/hydrograph/index.js
index a63cf14a9..d335e12ca 100644
--- a/assets/src/scripts/components/hydrograph/index.js
+++ b/assets/src/scripts/components/hydrograph/index.js
@@ -2,7 +2,7 @@
  * Hydrograph charting module.
  */
 const { extent } = require('d3-array');
-const { line: d3Line } = require('d3-shape');
+const { line: d3Line, curveStepAfter } = require('d3-shape');
 const { select } = require('d3-selection');
 
 const { createStructuredSelector } = require('reselect');
@@ -184,13 +184,40 @@ const timeSeriesLegend = function(elem) {
  * @param  {Object} variable
  */
 const plotMedianPoints = function (elem, {xscale, yscale, modulo, points, showLabel, variable}) {
-    elem.selectAll('medianPoint')
+    let stepFunction = d3Line()
+        .curve(curveStepAfter)
+        .x(function(d) {
+            return xscale(d.dateTime);
+        })
+        .y(function(d) {
+            return yscale(d.value);
+        });
+    let medianGrp = elem.append('g');
+
+    medianGrp.append('path')
+        .datum(points)
+        .classed('median-data-series', true)
+        .classed(`median-step-${modulo}`, true)
+        .attr('d', stepFunction);
+
+    medianGrp.selectAll('medianPoint')
         .data(points)
         .enter()
         .append('circle')
             .classed('median-data-series', true)
             .classed(`median-modulo-${modulo}`, true)
-            .attr('r', CIRCLE_RADIUS)
+            .attr('r', function(d, i) {
+                if (points[0].dateTime.getDate() < points[1].dateTime.getDate() &&
+                points[points.length - 1].dateTime.getDate() === points[points.length - 2].dateTime.getDate()) {
+                    if (i === 0 || i === points.length - 1) {
+                        return 0;
+                    } else {
+                        return CIRCLE_RADIUS;
+                    }
+                } else {
+                    return CIRCLE_RADIUS;
+                }
+            })
             .attr('cx', function(d) {
                 return xscale(d.dateTime);
             })
@@ -200,7 +227,6 @@ const plotMedianPoints = function (elem, {xscale, yscale, modulo, points, showLa
             .on('click', dispatch(function() {
                 return Actions.showMedianStatsLabel(!showLabel);
             }));
-
     if (showLabel) {
         elem.selectAll('medianPointText')
             .data(points)
diff --git a/assets/src/scripts/models.js b/assets/src/scripts/models.js
index 703f37423..1641ff347 100644
--- a/assets/src/scripts/models.js
+++ b/assets/src/scripts/models.js
@@ -152,7 +152,26 @@ export function mergeMedianTimeseries(collection, medianData, timeSeriesStartDat
             values.push(median);
         }
     }
+    let sortedValues = values.sort(function (a, b) {
+        return a.dateTime - b.dateTime;
+    });
+
+    let plotValues = sortedValues.slice(values.length - days, values.length);
 
+    let first = sortedValues[values.length - days -1];
+    if (plotValues[0].dateTime > timeSeriesStartDateTime) {
+        plotValues.unshift({
+            dateTime: timeSeriesStartDateTime,
+            value: first.value
+        });
+    }
+    let last = sortedValues[sortedValues.length - 1];
+    if (plotValues[plotValues.length - 1].dateTime < timeSeriesEndDateTime) {
+        plotValues.push({
+            dateTime: timeSeriesEndDateTime,
+            value: last.value
+        });
+    }
     const tsId = `${medianData[0].parameter_cd}:${medianData[0].ts_id}:median`;
     const tsCollectionId = `${medianData[0].site_no}:${medianData[0].parameter_cd}:median`;
 
@@ -172,9 +191,7 @@ export function mergeMedianTimeseries(collection, medianData, timeSeriesStartDat
         timeSeries: {
             ...collection.timeSeries || {},
             [tsId]: {
-                points: values.sort(function (a, b) {
-                    return a.dateTime - b.dateTime;
-                }).slice(values.length - days, values.length),
+                points: plotValues,
                 startTime: timeSeriesStartDateTime,
                 endTime: timeSeriesEndDateTime,
                 tsKey: 'median',
diff --git a/assets/src/styles/components/_hydrograph.scss b/assets/src/styles/components/_hydrograph.scss
index addab2ba0..2aa3c7308 100644
--- a/assets/src/styles/components/_hydrograph.scss
+++ b/assets/src/styles/components/_hydrograph.scss
@@ -212,12 +212,27 @@ $highlight: $color-gray-lightest;
             &.median-modulo-0 {
                 fill: #f96713;
             }
+            &.median-step-0 {
+                fill: none;
+                stroke: #f96713;
+                stroke-width: 2px;
+            }
             &.median-modulo-1 {
                 fill: #0c7d40;
             }
+            &.median-step-1 {
+                fill: none;
+                stroke: #0c7d40;
+                stroke-width: 2px;
+            }
             &.median-modulo-2 {
                 fill: #0557fc;
             }
+            &.median-step-2 {
+                fill: none;
+                stroke: #0557fc;
+                stroke-width: 2px;
+            }
             &.median-modulo-3 {
                 fill: #f4f727;
             }
-- 
GitLab