kevinkhill/lavacharts

event Object Passed in is null

jmichaelterenin opened this issue · 1 comments

What Version?

3.1.14

Issue

Please describe the issue.
I've had Lavacharts installed and used for many years. I recently had a requirement whereby I needed to access the event object for mouse coordinates when clicking on a point in the Combochart. I Was already using event.ready for doing some small UI changes to the resulting chart. I added the event.select and I am able to access the chart object.

However, in neither callback is the event object made available (is null). The injected script is below:


<script type="text/javascript">
								
									function chartReady (event, chart) {
										console.log('INSIDE chartReady', event);
										$.each($('text'), function (index, label) {
												var labelText = $(label).text();
												if (labelText.indexOf('TT') == 0) {
													labelText = '<tspan class="spread">'+labelText.substr(2)+'</tspan>';						        	
													$(label).html(labelText);
												}
												if (labelText.split(' ').length == 2) {
													labelText = '<tspan class="newday">'+labelText+'</tspan>';						        	
													$(label).html(labelText);							        
												}    
										});										
									}
																		
									function selectHandler (weirdNull, chart, data) {
										// Useful for using chart methods such as chart.getSelection();										
										console.log(chart.getSelection());
										console.log(weirdNull);
										console.log(chart.container);
										console.log(data);
										if (chart.getSelection().length == 1) {		
											console.log(chart.getSelection()[0].row);
											console.log(data.Wf[chart.getSelection()[0].row].c[10]);		
										}	
									}
								
								</script>
								@combochart('Spread', 'spreadgraph')

I see the code that does what you indicate in the docs:
*** Note: When the chart is rendered, your function will be wrapped with lava.event() which will give your function access to the event and chart objects. ***

                                            google.visualization.events.addListener(this.chart, "ready", function(event) {
                                                return lava.event(event, this, chartReady);
                                            }
                                            .bind(this));

                                            google.visualization.events.addListener(this.chart, "select", function(event) {
                                                return lava.event(event, this, selectHandler);
                                            }
                                            .bind(this));

Controller Code (chart creation code)

$linechart = Lava::ComboChart('Spread', $spreadlines,
						[
							'title' => 'Spread Graph',						
							'height' =>  1200,
							'width' => 1600,
							'events' => [
								'ready' => 'chartReady',
						                'select' => 'selectHandler'
							],
						]
					);

I've searched for existing issues )open or closed) that experience this, but nothing is clearly stated indicating this as a problem.
Something I'm doing wrong?

I've gotten around the issue by adding a click handler for any chart interaction in the chartReady function, and adding the mouse X/Y coordinates to the element's dataset, to be picked up by the selectHandler function. If there's a simpler solution to my problem that provides the event object within chartReady and selectHandler, please share (anyone) at your convenience.