comparison client/src/components/gauge/Waterlevel.vue @ 4125:0f69d256fa12

client: fix drawing of diagram in case reference waterlevels are missing
author Fadi Abbud <fadi.abbud@intevation.de>
date Thu, 01 Aug 2019 16:46:13 +0200
parents 5317ae66f654
children 2a3bd5f3fc99
comparison
equal deleted inserted replaced
4124:acd87a3d246b 4125:0f69d256fa12
552 .selectAll(".chart-tooltip text") 552 .selectAll(".chart-tooltip text")
553 .attr("fill", "666") 553 .attr("fill", "666")
554 .style("font-size", "0.8em"); 554 .style("font-size", "0.8em");
555 }, 555 },
556 getExtent(refWaterLevels) { 556 getExtent(refWaterLevels) {
557 let rest;
558 if (refWaterLevels) {
559 // set min/max values for the waterlevel axis
560 // including HDC (+ 1/8 HDC-LDC) and LDC (- 1/4 HDC-LDC)
561 rest = [
562 {
563 waterlevel:
564 refWaterLevels.HDC + (refWaterLevels.HDC - refWaterLevels.LDC) / 8
565 },
566 {
567 waterlevel: Math.max(
568 refWaterLevels.LDC -
569 (refWaterLevels.HDC - refWaterLevels.LDC) / 4,
570 0
571 )
572 }
573 ];
574 } else {
575 rest = [];
576 }
557 return { 577 return {
558 // set min/max values for the date axis 578 // set min/max values for the date axis
559 date: [ 579 date: [
560 this.waterlevels[0].date, 580 this.waterlevels[0].date,
561 endOfDay(this.waterlevels[this.waterlevels.length - 1].date) 581 endOfDay(this.waterlevels[this.waterlevels.length - 1].date)
562 ], 582 ],
563 // set min/max values for the waterlevel axis 583 waterlevel: d3.extent([...this.waterlevels, ...rest], d => d.waterlevel)
564 // including HDC (+ 1/8 HDC-LDC) and LDC (- 1/4 HDC-LDC)
565 waterlevel: d3.extent(
566 [
567 ...this.waterlevels,
568 {
569 waterlevel:
570 refWaterLevels.HDC +
571 (refWaterLevels.HDC - refWaterLevels.LDC) / 8
572 },
573 {
574 waterlevel: Math.max(
575 refWaterLevels.LDC -
576 (refWaterLevels.HDC - refWaterLevels.LDC) / 4,
577 0
578 )
579 }
580 ],
581 d => d.waterlevel
582 )
583 }; 584 };
584 }, 585 },
585 getScale({ dimensions, extent }) { 586 getScale({ dimensions, extent }) {
586 // scaling helpers to convert real world values into pixels 587 // scaling helpers to convert real world values into pixels
587 const x = d3.scaleTime().range([0, dimensions.width]); 588 const x = d3.scaleTime().range([0, dimensions.width]);
772 diagram.select(".prediction-area").attr("d", predictionArea()); 773 diagram.select(".prediction-area").attr("d", predictionArea());
773 }; 774 };
774 }, 775 },
775 drawRefLines({ refWaterLevels, diagram, scale, dimensions, extent }) { 776 drawRefLines({ refWaterLevels, diagram, scale, dimensions, extent }) {
776 // filling area between HDC and LDC 777 // filling area between HDC and LDC
777 diagram 778 if (refWaterLevels) {
778 .append("rect") 779 diagram
779 .attr("class", "hdc-ldc-area") 780 .append("rect")
780 .attr("x", 0) 781 .attr("class", "hdc-ldc-area")
781 .attr("y", scale.y(refWaterLevels.HDC)) 782 .attr("x", 0)
782 .attr("width", dimensions.width) 783 .attr("y", scale.y(refWaterLevels.HDC))
783 .attr( 784 .attr("width", dimensions.width)
784 "height", 785 .attr(
785 scale.y(refWaterLevels.LDC) - scale.y(refWaterLevels.HDC) 786 "height",
786 ); 787 scale.y(refWaterLevels.LDC) - scale.y(refWaterLevels.HDC)
788 );
789 }
787 790
788 const refWaterlevelLine = d3 791 const refWaterlevelLine = d3
789 .line() 792 .line()
790 .x(d => scale.x(d.x)) 793 .x(d => scale.x(d.x))
791 .y(d => scale.y(d.y)); 794 .y(d => scale.y(d.y));