From befac9fb0e72fcfd7107cb2ee2770120eb312e04 Mon Sep 17 00:00:00 2001 From: newsiberian Date: Fri, 9 Nov 2018 21:41:48 +0700 Subject: [PATCH] feat: handleRangeChange, handleViewChange refactored to pass fresh `view` to onRangeChange when view changed; (#1100) --- src/Calendar.js | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Calendar.js b/src/Calendar.js index 5e1d52b3d..c1264cc6b 100644 --- a/src/Calendar.js +++ b/src/Calendar.js @@ -249,8 +249,14 @@ class Calendar extends React.Component { onDrillDown: PropTypes.func, /** + * + * ```js + * (dates: Date[] | { start: Date; end: Date }, view?: 'month'|'week'|'work_week'|'day'|'agenda') => void + * ``` + * * Callback fired when the visible date range changes. Returns an Array of dates - * or an object with start and end dates for BUILTIN views. + * or an object with start and end dates for BUILTIN views. Optionally new `view` + * will be returned when callback called after view change. * * Custom views may return something different. */ @@ -903,12 +909,21 @@ class Calendar extends React.Component { ) } - handleRangeChange = (date, view) => { + /** + * + * @param date + * @param viewComponent + * @param {'month'|'week'|'work_week'|'day'|'agenda'} [view] - optional + * parameter. It appears when range change on view changing. It could be handy + * when you need to have both: range and view type at once, i.e. for manage rbc + * state via url + */ + handleRangeChange = (date, viewComponent, view) => { let { onRangeChange, localizer } = this.props if (onRangeChange) { - if (view.range) { - onRangeChange(view.range(date, { localizer })) + if (viewComponent.range) { + onRangeChange(viewComponent.range(date, { localizer }), view) } else { warning(true, 'onRangeChange prop not supported for this view') } @@ -937,7 +952,7 @@ class Calendar extends React.Component { } let views = this.getViews() - this.handleRangeChange(this.props.date, views[view]) + this.handleRangeChange(this.props.date, views[view], view) } handleSelectEvent = (...args) => {