Skip to content
This repository was archived by the owner on May 19, 2025. It is now read-only.

Commit e140275

Browse files
committed
Allow disabling of drag-based selection
We have a use case where we need to prevent the user from dragging to select a date range. This `dragSelectionEnabled` property, which is true by default, determines whether to allow drag-based selection.
1 parent ccee480 commit e140275

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

demo/src/components/Main.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ export default class Main extends Component {
165165
months={2}
166166
ranges={[this.state.dateRangePicker.selection]}
167167
direction="horizontal"
168+
dragSelectionEnabled={false}
168169
/>
169170
</div>
170171
</Section>

src/components/Calendar.js

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -272,17 +272,20 @@ class Calendar extends PureComponent {
272272
);
273273
}
274274
onDragSelectionStart(date) {
275-
this.setState({
276-
drag: {
277-
status: true,
278-
range: { startDate: date, endDate: date },
279-
disablePreview: true,
280-
},
281-
});
275+
if (this.props.dragSelectionEnabled) {
276+
this.setState({
277+
drag: {
278+
status: true,
279+
range: { startDate: date, endDate: date },
280+
disablePreview: true,
281+
},
282+
});
283+
}
282284
}
283285
onDragSelectionEnd(date) {
284-
const { updateRange, displayMode, onChange } = this.props;
285-
if (displayMode === 'date' || !this.state.drag.status) {
286+
const { updateRange, displayMode, onChange, dragSelectionEnabled } = this.props;
287+
288+
if (!dragSelectionEnabled || displayMode === 'date' || !this.state.drag.status) {
286289
onChange && onChange(date);
287290
return;
288291
}
@@ -299,15 +302,17 @@ class Calendar extends PureComponent {
299302
}
300303
}
301304
onDragSelectionMove(date) {
302-
const { drag } = this.state;
303-
if (!drag.status) return;
304-
this.setState({
305-
drag: {
306-
status: drag.status,
307-
range: { startDate: drag.range.startDate, endDate: date },
308-
disablePreview: true,
309-
},
310-
});
305+
if (this.props.dragSelectionEnabled) {
306+
const { drag } = this.state;
307+
if (!drag.status) return;
308+
this.setState({
309+
drag: {
310+
status: drag.status,
311+
range: { startDate: drag.range.startDate, endDate: date },
312+
disablePreview: true,
313+
},
314+
});
315+
}
311316
}
312317

313318
estimateMonthSize(index, cache) {
@@ -465,6 +470,7 @@ Calendar.defaultProps = {
465470
maxDate: addYears(new Date(), 20),
466471
minDate: addYears(new Date(), -100),
467472
rangeColors: ['#3d91ff', '#3ecf8e', '#fed14c'],
473+
dragSelectionEnabled: true,
468474
};
469475

470476
Calendar.propTypes = {
@@ -507,6 +513,7 @@ Calendar.propTypes = {
507513
direction: PropTypes.oneOf(['vertical', 'horizontal']),
508514
navigatorRenderer: PropTypes.func,
509515
rangeColors: PropTypes.arrayOf(PropTypes.string),
516+
dragSelectionEnabled: PropTypes.bool,
510517
};
511518

512519
export default Calendar;

0 commit comments

Comments
 (0)