diff --git a/examples/demo_live.html b/examples/demo_live.html index a8f80dd..072a77c 100755 --- a/examples/demo_live.html +++ b/examples/demo_live.html @@ -15,9 +15,9 @@ const startTime = 1590590148; const arrayLength = 100; this.isZoomed = false; // TODO: temporary hack to have zoomin|zoomout with `appendData`. It will be moved to Pod. - const data1 = Array.from({ length: arrayLength }, (el, idx) => [startTime + idx * 10000, Math.floor(Math.random() * 40)]); - const data2 = Array.from({ length: arrayLength }, (el, idx) => [startTime + idx * 10000, Math.floor(Math.random() * 100)]); - const data3 = Array.from({ length: arrayLength }, (el, idx) => [startTime + idx * 10000, Math.floor(Math.random() * 20) + 90]); + var data1 = Array.from({ length: arrayLength }, (el, idx) => [startTime + idx * 10000, Math.floor(Math.random() * 40)]); + var data2 = Array.from({ length: arrayLength }, (el, idx) => [startTime + idx * 10000, Math.floor(Math.random() * 100)]); + var data3 = Array.from({ length: arrayLength }, (el, idx) => [startTime + idx * 10000, Math.floor(Math.random() * 20) + 90]); const zoomIn = (ranges) => { const xRange = ranges[0]; options.axis.x.range = xRange; pod.updateData(undefined, options); this.isZoomed = true } const zoomOut = (ranges) => { options.axis.x.range = undefined; pod.updateData(undefined, options); this.isZoomed = false } let options = { renderLegend: false, axis: { y: { invert: false, range: [0, 350] }, x: { format: 'time' } }, eventsCallbacks: { zoomIn: zoomIn, zoomOut } }; @@ -37,9 +37,17 @@ const d1 = [startTime + rerenderIdx * 10000, Math.floor(Math.random() * 20) + 90]; const d2 = [startTime + rerenderIdx * 10000, Math.floor(Math.random() * 100)]; const d3 = [startTime + rerenderIdx * 10000, Math.floor(Math.random() * 20) + 90]; + console.log('d1', data1) const shouldRerender = !this.isZoomed; console.time('rerender'); - pod.appendData([d1, d2, d3], shouldRerender); + data1.push(d1); + data2.push(d2); + data3.push(d3); + pod.updateData([ + { target: 'test1', datapoints: data1, color: 'green', maxLength: arrayLength + 30, renderDots: false }, + { target: 'test2', datapoints: data2, color: 'blue', maxLength: arrayLength + 30, renderDots: false }, + { target: 'test3', datapoints: data3, color: 'orange', maxLength: arrayLength + 30, renderDots: false }, + ]); console.timeEnd('rerender'); if(rerenderIdx > arrayLength + 100) { clearInterval(test); diff --git a/src/index.ts b/src/index.ts index 1651166..b1e8dd2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -62,38 +62,6 @@ export class LinePod extends ChartwerkPod { return this.lineGenerator; } - public appendData(data: [number, number][], shouldRerender = true): void { - for(const serie of this.coreSeries.visibleSeries) { - serie.datapoints.push(data[serie.idx]); - const maxLength = serie.maxLength; - if(maxLength !== undefined && serie.datapoints.length > maxLength) { - serie.datapoints.shift(); - } - } - - for(const serie of this.coreSeries.visibleSeries) { - this.metricContainer.select(`.metric-path-${serie.idx}`) - .datum(serie.datapoints) - .attr('d', this.getRenderGenerator(serie.renderArea)); - - if(serie.renderDots === true) { - this.metricContainer.selectAll(`.metric-circle-${serie.idx}`) - .data(serie.datapoints) - .attr('cx', d => this.state.xScale(d[0])) - .attr('cy', d => this.state.yScale(d[1])); - - this._renderDots(serie); - } - } - if(shouldRerender) { - const rightBorder = _.last(data)[0]; - this.state.xValueRange = [this.state.getMinValueX(), rightBorder]; - this.renderXAxis(); - this.renderYAxis(); - this.renderGrid(); - } - } - _renderDots(serie: LineTimeSerie): void { this.metricContainer.selectAll(null) .data(serie.datapoints)