Skip to content

Commit 228010d

Browse files
authored
Merge pull request #1942 from nickmelnikov82/fix-graph-customdata-for-pointnumbers
Fix graph customdata for pointnumbers
2 parents f378199 + ecc48d9 commit 228010d

File tree

3 files changed

+53
-6
lines changed

3 files changed

+53
-6
lines changed

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ This project adheres to [Semantic Versioning](https://semver.org/).
2626

2727
- [#1953](https://github.com/plotly/dash/pull/1953) Fix bug [#1783](https://github.com/plotly/dash/issues/1783) in which a failed hot reloader blocks the UI with alerts.
2828

29+
- [#1942](https://github.com/plotly/dash/pull/1942) Fix bug [#1663](https://github.com/plotly/dash/issues/1663) preventing pie traces from sending `customdata` with `clickData` and other events.
30+
2931
## [2.2.0] - 2022-02-18
3032

3133
### Added

Diff for: components/dash-core-components/src/fragments/Graph.react.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,18 @@ const filterEventData = (gd, eventData, event) => {
8484

8585
if (
8686
has('curveNumber', fullPoint) &&
87-
has('pointNumber', fullPoint) &&
8887
has('customdata', data[pointData.curveNumber])
8988
) {
90-
pointData.customdata =
91-
data[pointData.curveNumber].customdata[
92-
fullPoint.pointNumber
93-
];
89+
if (has('pointNumber', fullPoint)) {
90+
pointData.customdata =
91+
data[pointData.curveNumber].customdata[
92+
fullPoint.pointNumber
93+
];
94+
} else if (has('pointNumbers', fullPoint)) {
95+
pointData.customdata = fullPoint.pointNumbers.map(point => {
96+
return data[pointData.curveNumber].customdata[point];
97+
});
98+
}
9499
}
95100

96101
// specific to histogram. see https://github.com/plotly/plotly.js/pull/2113/

Diff for: components/dash-core-components/tests/integration/graph/test_graph_basics.py

+41-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from multiprocessing import Value, Lock
55
import numpy as np
66
from time import sleep
7+
import plotly.express as px
78
import plotly.graph_objects as go
89
from dash import Dash, Input, Output, dcc, html
910

@@ -165,7 +166,46 @@ def update_graph(n_clicks):
165166
assert dash_dcc.get_logs() == []
166167

167168

168-
def test_grbs005_graph_update_frames(dash_dcc):
169+
def test_grbs005_graph_customdata(dash_dcc):
170+
app = Dash(__name__)
171+
172+
df = px.data.tips()
173+
df["id"] = df.index
174+
175+
app.layout = html.Div(
176+
[
177+
dcc.Graph(
178+
id="pie-chart",
179+
figure=go.Figure(
180+
data=[
181+
go.Pie(
182+
labels=df["day"], ids=df["id"].map(str), customdata=df["id"]
183+
)
184+
]
185+
),
186+
),
187+
dcc.Textarea(id="text-area"),
188+
]
189+
)
190+
191+
@app.callback(Output("text-area", "value"), Input("pie-chart", "clickData"))
192+
def handleClick(clickData):
193+
return json.dumps(clickData)
194+
195+
dash_dcc.start_server(app)
196+
dash_dcc.wait_for_element("#pie-chart")
197+
198+
dash_dcc.find_elements("g .slice")[0].click()
199+
200+
data = dash_dcc.wait_for_element("#text-area").get_attribute("value")
201+
assert data != "", "graph clickData must contain data"
202+
203+
data = json.loads(data)
204+
assert "customdata" in data["points"][0], "graph clickData must contain customdata"
205+
assert data["points"][0]["customdata"][0] == data["points"][0]["pointNumbers"][0]
206+
207+
208+
def test_grbs006_graph_update_frames(dash_dcc):
169209
app = Dash(__name__)
170210

171211
def get_scatter(multiplier, offset):

0 commit comments

Comments
 (0)