@@ -45,12 +45,13 @@ const startOf = (interval, value) => {
4545 }
4646}
4747
48- const groupData = (min , max , data ) => {
48+ const formatDay = (min , max , day ) => {
4949 const interval = calculateInterval (min, max)
50+ return format (startOf (interval, parseDate (day)), ' YYYY-MM-DDTHH:mm:ss.SSSZ' )
51+ }
5052
51- const formatDay = day =>
52- format (startOf (interval, parseDate (day .x )), ' YYYY-MM-DDTHH:mm:ss.SSSZ' )
53- const groupedResults = groupBy (data, formatDay)
53+ const groupData = (min , max , data ) => {
54+ const groupedResults = groupBy (data, day => formatDay (min, max, day .x ))
5455
5556 const result = Object .keys (groupedResults).map (key => ({
5657 x: key,
@@ -60,18 +61,55 @@ const groupData = (min, max, data) => {
6061 return result
6162}
6263
64+ const normalizeData = (primary , secondary ) =>
65+ primary
66+ .filter ((o , index ) => secondary[index])
67+ .map ((o , index ) => {
68+ const hasSecondary = secondary[index]
69+ return {
70+ x: o .x ,
71+ y: secondary[index].y ,
72+ secondary: secondary[index].x ,
73+ }
74+ })
75+
6376const options = vm => ({
6477 legend: {
6578 display: false ,
6679 },
80+ tooltips: {
81+ mode: ' index' ,
82+ position: ' nearest' ,
83+ intersect: false ,
84+ callbacks: {
85+ label : (item , data ) => {
86+ const {datasets } = data
87+
88+ const originalItem = datasets[item .datasetIndex ].data [item .index ]
89+
90+ let xLabel = item .xLabel
91+ if (originalItem .secondary ) {
92+ xLabel = originalItem .secondary
93+ }
94+
95+ xLabel = format (xLabel, ' MM/YYYY' )
96+ return ` ${ xLabel} : ${ item .yLabel } ` ;
97+ },
98+ title : () => ' ' ,
99+ },
100+ },
101+ hover: {
102+ mode: ' index' ,
103+ intersect: true
104+ },
67105 scales: {
68106 yAxes: [
69107 {
108+ type: ' linear' ,
109+ position: ' left' ,
110+ id: ' primary' ,
70111 ticks: {
71112 beginAtZero: true ,
72- callback : value => {
73- return value
74- }, // this.yAxesCallback.bind(this),
75113 },
76114 },
77115 ],
@@ -94,36 +132,50 @@ export default {
94132 props: [
95133 ' start' ,
96134 ' end' ,
97- ' chartData'
135+ ' chartData' ,
136+ ' secondaryChartData' ,
98137 ],
99- // render() {
100- // return (
101- // <Chart
102- // chartData={this.transformedData}
103- // options={this.options}
104- // min={this.min}
105- // max={this.max}
106- // width={900}
107- // />
108- // )
109- // },
110138 computed: {
111- transformedData : ({ chartData, min, max }) => ({
112- datasets: [
113- {
114- label: ' ' ,
115- lineTension: 0 ,
116- data: groupData (min, max, chartData),
117- backgroundColor: ' #36a2eb' ,
118- },
119- ],
120- }),
139+ transformedData : ({ chartData, secondaryChartData, min, max }) => {
140+
141+ const groupedData = groupData (min, max, chartData)
142+ const datasets = {
143+ datasets: [
144+ {
145+ label: ' Current' ,
146+ // lineTension: 0,
147+ data: groupedData,
148+ backgroundColor: ' rgb(54, 162, 235)' ,
149+ borderColor: ' rgb(54, 162, 235)' ,
150+ fill: false ,
151+ },
152+ ],
153+ }
154+
155+ if (secondaryChartData) {
156+ datasets .datasets .push ({
157+ label: ' Previous' ,
158+ display: true ,
159+ data: normalizeData (groupedData, groupData (min, max, secondaryChartData)),
160+ backgroundColor: ' rgba(75, 192, 192, 0.5)' ,
161+ borderColor: ' rgba(75, 192, 192, 0.5)' ,
162+ fill: false ,
163+ })
164+ }
165+
166+ return datasets
167+ },
121168 min : ({ start }) => parseDate (start),
122169 max : ({ end }) => parseDate (end),
123170 },
124171 watch: {
125172 transformedData () {
126173 this .chart .data .datasets [0 ].data = this .transformedData .datasets [0 ].data
174+
175+ if (this .secondaryChartData ) {
176+ this .chart .data .datasets [1 ].data = this .transformedData .datasets [1 ].data
177+ }
178+
127179 this .chart .options = options (this )
128180 this .chart .update ()
129181 },
0 commit comments