You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.3 KiB
64 lines
2.3 KiB
export default { |
|
template: "<div></div>", |
|
mounted() { |
|
setTimeout(() => { |
|
const imports = this.extras.map((extra) => import(window.path_prefix + extra)); |
|
Promise.allSettled(imports).then(() => { |
|
this.seriesCount = this.options.series ? this.options.series.length : 0; |
|
this.options.plotOptions = this.options.plotOptions ?? {}; |
|
this.options.plotOptions.series = this.options.plotOptions.series ?? {}; |
|
this.options.plotOptions.series.point = this.options.plotOptions.series.point ?? {}; |
|
this.options.plotOptions.series.point.events = this.options.plotOptions.series.point.events ?? {}; |
|
function uncycle(e) { |
|
// Highcharts events are cyclic, so we need to uncycle them |
|
let { point, target, ...rest } = e; |
|
point = point ?? target; |
|
return { |
|
...rest, |
|
point_index: point?.index, |
|
point_x: point?.x, |
|
point_y: point?.y, |
|
series_index: point?.series?.index, |
|
}; |
|
} |
|
this.options.plotOptions.series.point.events.click = (e) => this.$emit("pointClick", uncycle(e)); |
|
this.options.plotOptions.series.point.events.dragStart = (e) => this.$emit("pointDragStart", uncycle(e)); |
|
this.options.plotOptions.series.point.events.drag = (e) => this.$emit("pointDrag", uncycle(e)); |
|
this.options.plotOptions.series.point.events.drop = (e) => this.$emit("pointDrop", uncycle(e)); |
|
this.chart = Highcharts[this.type](this.$el, this.options); |
|
this.chart.reflow(); |
|
}); |
|
}, 0); // NOTE: wait for window.path_prefix to be set in app.mounted() |
|
}, |
|
beforeDestroy() { |
|
this.destroyChart(); |
|
}, |
|
beforeUnmount() { |
|
this.destroyChart(); |
|
}, |
|
methods: { |
|
update_chart() { |
|
if (this.chart) { |
|
while (this.seriesCount > this.options.series.length) { |
|
this.chart.series[0].remove(); |
|
this.seriesCount--; |
|
} |
|
while (this.seriesCount < this.options.series.length) { |
|
this.chart.addSeries({}, false); |
|
this.seriesCount++; |
|
} |
|
this.chart.update(this.options); |
|
} |
|
}, |
|
destroyChart() { |
|
if (this.chart) { |
|
this.chart.destroy(); |
|
} |
|
}, |
|
}, |
|
props: { |
|
type: String, |
|
options: Object, |
|
extras: Array, |
|
}, |
|
};
|
|
|