Skip to content

Commit 6fbe699

Browse files
fabienCambournactgalopin
authored andcommitted
[Chart.js] Add "pre-connect" event
1 parent 3847e39 commit 6fbe699

File tree

4 files changed

+40
-2
lines changed

4 files changed

+40
-2
lines changed

src/Chartjs/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,34 @@ import { Controller } from 'stimulus';
7979

8080
export default class extends Controller {
8181
connect() {
82+
this.element.addEventListener('chartjs:pre-connect', this._onPreConnect);
8283
this.element.addEventListener('chartjs:connect', this._onConnect);
8384
}
8485

8586
disconnect() {
8687
// You should always remove listeners when the controller is disconnected to avoid side effects
88+
this.element.removeEventListener('chartjs:pre-connect', this._onPreConnect);
8789
this.element.removeEventListener('chartjs:connect', this._onConnect);
8890
}
8991

92+
_onPreConnect(event) {
93+
// The chart is not yet created
94+
console.log(event.detail.options); // You can access the chart options using the event details
95+
96+
// For instance you can format Y axis
97+
event.detail.options.scales = {
98+
yAxes: [
99+
{
100+
ticks: {
101+
callback: function (value, index, values) {
102+
/* ... */
103+
},
104+
},
105+
},
106+
],
107+
};
108+
}
109+
90110
_onConnect(event) {
91111
// The chart was just created
92112
console.log(event.detail.chart); // You can access the chart instance using the event details

src/Chartjs/Resources/assets/dist/controller.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ var _default = /*#__PURE__*/function (_Controller) {
5959
payload.options = {};
6060
}
6161

62+
this._dispatchEvent('chartjs:pre-connect', {
63+
options: payload.options
64+
});
65+
6266
var chart = new _chart.Chart(this.element.getContext('2d'), payload);
6367

6468
this._dispatchEvent('chartjs:connect', {

src/Chartjs/Resources/assets/src/controller.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ export default class extends Controller {
1919
payload.options = {};
2020
}
2121

22+
this._dispatchEvent('chartjs:pre-connect', { options: payload.options });
23+
2224
const chart = new Chart(this.element.getContext('2d'), payload);
2325

2426
this._dispatchEvent('chartjs:connect', { chart });

src/Chartjs/Resources/assets/test/controller.test.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import ChartjsController from '../dist/controller';
1717
// Controller used to check the actual controller was properly booted
1818
class CheckController extends Controller {
1919
connect() {
20+
this.element.addEventListener('chartjs:pre-connect', () => {
21+
this.element.classList.add('pre-connected');
22+
});
23+
2024
this.element.addEventListener('chartjs:connect', (event) => {
2125
this.element.classList.add('connected');
2226
this.element.chart = event.detail.chart;
@@ -46,10 +50,14 @@ describe('ChartjsController', () => {
4650
></canvas>
4751
`);
4852

53+
expect(getByTestId(container, 'canvas')).not.toHaveClass('pre-connected');
4954
expect(getByTestId(container, 'canvas')).not.toHaveClass('connected');
5055

5156
startStimulus();
52-
await waitFor(() => expect(getByTestId(container, 'canvas')).toHaveClass('connected'));
57+
await waitFor(() => {
58+
expect(getByTestId(container, 'canvas')).toHaveClass('pre-connected');
59+
expect(getByTestId(container, 'canvas')).toHaveClass('connected');
60+
});
5361

5462
const chart = getByTestId(container, 'canvas').chart;
5563
expect(chart.options.showLines).toBe(true);
@@ -64,10 +72,14 @@ describe('ChartjsController', () => {
6472
></canvas>
6573
`);
6674

75+
expect(getByTestId(container, 'canvas')).not.toHaveClass('pre-connected');
6776
expect(getByTestId(container, 'canvas')).not.toHaveClass('connected');
6877

6978
startStimulus();
70-
await waitFor(() => expect(getByTestId(container, 'canvas')).toHaveClass('connected'));
79+
await waitFor(() => {
80+
expect(getByTestId(container, 'canvas')).toHaveClass('pre-connected');
81+
expect(getByTestId(container, 'canvas')).toHaveClass('connected');
82+
});
7183

7284
const chart = getByTestId(container, 'canvas').chart;
7385
expect(chart.options.showLines).toBe(false);

0 commit comments

Comments
 (0)