Hi,
I want to change how to load Charts.js in my vaadin from using CDN to NPMPackage so that I can develop myproject offline.
In short my script can find Chart which is imported and i dont know how to import it. Because normal import like
import Chart from 'chart.js'
window.Chart = Chart
It doesn’t work in my script. Sorry for long explanation below. Thank in advance for who is willing to help me with patience.
my before changes:
@JavaScript("https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.bundle.min.js")
@JavaScript("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js")
@JsModule("./themes/spidercharts/spiderchart.js")
public class SpiderChartView extends VerticalLayout {
and I change to
@NpmPackage(value = "jquery", version = "3.1.1")
@NpmPackage(value = "chart.js", version = "4.4.2")
@JavaScript("../node_modules/chart.js/dist/chart.js")
@JavaScript("../node_modules/jquery/dist/jquery.js")
@JsModule("./themes/spidercharts/spiderchart.js")
public class SpiderChartView extends VerticalLayout {
and this is my spiderchart.js
function createNewLegendAndAttach(chartInstance, legendOpts) {
var legend = new Chart.NewLegend({
ctx: chartInstance.chart.ctx,
options: legendOpts,
chart: chartInstance
});
if (chartInstance.legend) {
Chart.layoutService.removeBox(chartInstance, chartInstance.legend);
delete chartInstance.newLegend;
}
chartInstance.newLegend = legend;
Chart.layoutService.addBox(chartInstance, legend);
}
window.initSpiderChart = function (dataJson) {
console.log("initSpiderChart")
const canvasWrapper = document.getElementById('canvas-wrapper');
const canvas = document.getElementById('spider-chart-canvas');
canvas.width = canvasWrapper.clientWidth;
canvas.height = canvasWrapper.clientHeight;
var data = JSON.parse(dataJson);
console.log("data is parsed " + data); // For debugging purposes
// Check if data is an array
if (!Array.isArray(data)) {
console.error('Data is not an array:', data);
return;
}
var labels = data.map(item => item.label);
var values = data.map(item => item.value);
Chart.NewLegend = Chart.Legend.extend({
afterFit: function () {
this.height = this.height +10 ;
},
});
console.log("CONFIRMED::Chart.NewLegend" + Chart.NewLegend)
Chart.plugins.register({
beforeInit: function (chartInstance) {
var legendOpts = chartInstance.options.legend;
if (legendOpts) {
createNewLegendAndAttach(chartInstance, legendOpts);
}
}, beforeUpdate: function (chartInstance) {
var legendOpts = chartInstance.options.legend;
if (legendOpts) {
legendOpts = Chart.helpers.configMerge(Chart.defaults.global.legend, legendOpts);
if (chartInstance.newLegend) {
chartInstance.newLegend.options = legendOpts;
} else {
createNewLegendAndAttach(chartInstance, legendOpts);
}
} else {
Chart.layoutService.removeBox(chartInstance, chartInstance.newLegend);
delete chartInstance.newLegend;
}
}, afterEvent: function (chartInstance, e) {
var legend = chartInstance.newLegend;
if (legend) {
legend.handleEvent(e);
}
}
});
console.log('ChartsPluginsRegistered::' + Chart.plugins)
window.chartColors = {
red: 'rgb(255, 99, 132)',
orange: 'rgb(255, 159, 64)',
yellow: 'rgb(255, 205, 86)',
green: 'rgb(75, 192, 192)',
blue: 'rgb(54, 162, 235)',
purple: 'rgb(153, 102, 255)',
grey: 'rgb(231,233,237)'
};
console.log('windows.charcolors::registered' + window.chartColors)
var config = {
type: 'radar',
data: {
labels: labels,
datasets: [{
label: labels,
data: values,
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderColor: 'rgba(255, 99, 132, 1)',
borderWidth: 1
}]
},
options: {
responsive: true,
legend: {
display: true,
labels: {
padding: 10
},
},
tooltips: {
enabled: false,
},
scale: {
ticks: {
beginAtZero: true,
max: 5,
stepSize: 1
}
}
}
};
var ctx = document.getElementById("spider-chart-canvas").getContext("2d");
window.myPie = new Chart(ctx, config);
};
And I got this error in html page using debug mode:
FlowClient-urjGN_YE.js:1 Uncaught ReferenceError: Chart is not defined
Based on this how to [Integrate JQuery into Vaadin Flow | Vaadin](https://add jquery into vaadin)
i try to improvised in my spiderchart.js
import Chart from 'chart.js'
window.Chart = Chart
window.initSpiderChart = function (dataJson) {
console.log("initSpiderChart")
it returns another error XD
[ERROR] RollupError: "default" is not exported by "node_modules/chart.js/dist/chart.js", imported by "frontend/themes/spidercharts/spiderchart.js".
I am giving up. HELP .
best regards
sLawalata