Skip to content

Commit 1bcf78f

Browse files
committed
throw an error if there is more than 5000 slider marks
1 parent 0fa0a41 commit 1bcf78f

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

components/dash-core-components/src/fragments/Slider.react.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import {
1717
} from '../utils/formatSliderTooltip';
1818
import LoadingElement from '../utils/LoadingElement';
1919

20+
const MAX_SLIDER_MARKS = 5000;
21+
2022
const sliderProps = [
2123
'min',
2224
'max',
@@ -76,6 +78,15 @@ export default class Slider extends Component {
7678
} = this.props;
7779
const value = this.state.value;
7880

81+
// Validate marks count
82+
if (marks && Object.keys(marks).length > MAX_SLIDER_MARKS) {
83+
throw new Error(
84+
'Slider marks cannot exceed 5000 items. Received ' +
85+
Object.keys(marks).length +
86+
' marks.'
87+
);
88+
}
89+
7990
let tipProps, tipFormatter;
8091
if (tooltip) {
8192
/**

components/dash-core-components/tests/integration/sliders/test_sliders.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,3 +616,24 @@ def test_sls016_sliders_format_tooltips(dash_dcc):
616616
dash_dcc.percy_snapshot("sliders-format-tooltips")
617617

618618
assert dash_dcc.get_logs() == []
619+
620+
621+
def test_slsl017_slider_marks_limit_exceeded(dash_dcc):
622+
app = Dash()
623+
624+
# Create a slider with 5001 marks (should fail)
625+
marks_5001 = {i: str(i) for i in range(5001)}
626+
627+
app.layout = html.Div(
628+
[
629+
html.Div(id="loaded", children="loaded"),
630+
dcc.Slider(id="slider-5001", min=0, max=5000, marks=marks_5001, value=2500),
631+
]
632+
)
633+
634+
dash_dcc.start_server(app)
635+
636+
dash_dcc.wait_for_text_to_equal("#loaded", "loaded")
637+
# Check that an error was logged
638+
logs = dash_dcc.get_logs()
639+
assert any("Slider marks cannot exceed 5000 items" in str(log) for log in logs)

0 commit comments

Comments
 (0)