|
1 | 1 | import React, {Component, PropTypes} from 'react';
|
2 |
| -import {contains, filter, has, type} from 'ramda'; |
| 2 | +import {contains, filter, has, isNil, type} from 'ramda'; |
3 | 3 | /* global Plotly:true */
|
4 | 4 |
|
5 | 5 | const filterEventData = (gd, eventData, event) => {
|
6 | 6 | let filteredEventData;
|
7 | 7 | if (contains(event, ['click', 'hover', 'selected'])) {
|
8 | 8 | const points = [];
|
9 | 9 |
|
| 10 | + if (isNil(eventData)) { |
| 11 | + return null; |
| 12 | + } |
| 13 | + |
10 | 14 | /*
|
11 | 15 | * remove `data`, `layout`, `xaxis`, etc
|
12 | 16 | * objects from the event data since they're so big
|
@@ -80,23 +84,35 @@ export default class PlotlyGraph extends Component {
|
80 | 84 |
|
81 | 85 | gd.on('plotly_click', (eventData) => {
|
82 | 86 | const clickData = filterEventData(gd, eventData, 'click');
|
83 |
| - if (setProps) setProps({clickData}); |
84 |
| - if (fireEvent) fireEvent({event: 'click'}); |
| 87 | + if (!isNil(clickData)) { |
| 88 | + if (setProps) setProps({clickData}); |
| 89 | + if (fireEvent) fireEvent({event: 'click'}); |
| 90 | + } |
85 | 91 | });
|
86 | 92 | gd.on('plotly_hover', (eventData) => {
|
87 | 93 | const hoverData = filterEventData(gd, eventData, 'hover');
|
88 |
| - if (setProps) setProps({hoverData}); |
89 |
| - if (fireEvent) fireEvent({event: 'hover'}) |
| 94 | + if (!isNil(hoverData)) { |
| 95 | + if (setProps) setProps({hoverData}); |
| 96 | + if (fireEvent) fireEvent({event: 'hover'}) |
| 97 | + } |
90 | 98 | });
|
91 | 99 | gd.on('plotly_selected', (eventData) => {
|
92 | 100 | const selectedData = filterEventData(gd, eventData, 'selected');
|
93 |
| - if (setProps) setProps({selectedData}); |
| 101 | + if (!isNil(selectedData)) { |
| 102 | + if (setProps) setProps({selectedData}); |
| 103 | + if (fireEvent) fireEvent({event: 'selected'}); |
| 104 | + } |
| 105 | + }); |
| 106 | + gd.on('plotly_deselect', () => { |
| 107 | + if (setProps) setProps({selectedData: null}); |
94 | 108 | if (fireEvent) fireEvent({event: 'selected'});
|
95 | 109 | });
|
96 | 110 | gd.on('plotly_relayout', (eventData) => {
|
97 | 111 | const relayoutData = filterEventData(gd, eventData, 'relayout');
|
98 |
| - if (setProps) setProps({relayoutData}); |
99 |
| - if (fireEvent) fireEvent({event: 'relayout'}); |
| 112 | + if (!isNil(relayoutData)) { |
| 113 | + if (setProps) setProps({relayoutData}); |
| 114 | + if (fireEvent) fireEvent({event: 'relayout'}); |
| 115 | + } |
100 | 116 | });
|
101 | 117 | gd.on('plotly_unhover', () => {
|
102 | 118 | if (clear_on_unhover) {
|
|
0 commit comments