From 30cce7ab15b7f6ebd9a232aa2f20e4af5b1f1ce6 Mon Sep 17 00:00:00 2001 From: dkrylov Date: Mon, 3 Dec 2018 15:34:45 +0800 Subject: [PATCH 1/3] Update TimeGrid on resources list change --- src/TimeGrid.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/TimeGrid.js b/src/TimeGrid.js index 8d27bf335..a9f70e30c 100644 --- a/src/TimeGrid.js +++ b/src/TimeGrid.js @@ -3,6 +3,7 @@ import cn from 'classnames' import raf from 'dom-helpers/util/requestAnimationFrame' import React, { Component } from 'react' import { findDOMNode } from 'react-dom' +import memoize from 'memoize-one' import dates from './utils/dates' import DayColumn from './DayColumn' @@ -14,6 +15,8 @@ import { notify } from './utils/helpers' import { inRange, sortEvents } from './utils/eventLevels' import Resources from './utils/Resources' +const memoizedResources = memoize(Resources); + export default class TimeGrid extends Component { static propTypes = { events: PropTypes.array.isRequired, @@ -65,8 +68,6 @@ export default class TimeGrid extends Component { this.state = { gutterWidth: undefined, isOverflowing: null } this.scrollRef = React.createRef() - - this.resources = Resources(props.resources, props.accessors) } componentWillMount() { @@ -95,6 +96,7 @@ export default class TimeGrid extends Component { raf.cancel(this.rafHandle) this.rafHandle = raf(this.checkOverflow) } + componentWillUnmount() { window.removeEventListener('resize', this.handleResize) @@ -144,9 +146,10 @@ export default class TimeGrid extends Component { renderEvents(range, events, now) { let { min, max, components, accessors, localizer } = this.props - const groupedEvents = this.resources.groupEvents(events) + const resources = this.getResources() + const groupedEvents = resources.groupEvents(events) - return this.resources.map(([id, resource], i) => + return resources.map(([id, resource], i) => range.map((date, jj) => { let daysEvents = (groupedEvents.get(id) || []).filter(event => dates.inRange( @@ -233,7 +236,7 @@ export default class TimeGrid extends Component { getNow={getNow} localizer={localizer} selected={selected} - resources={this.resources} + resources={this.getResources()} selectable={this.props.selectable} accessors={accessors} getters={getters} @@ -314,4 +317,8 @@ export default class TimeGrid extends Component { }) } } + + getResources = () => { + return memoizedResources(this.props.resources, this.props.accessors) + } } From b440fc355dc301d4bb23419a003186774b0975b7 Mon Sep 17 00:00:00 2001 From: dkrylov Date: Mon, 3 Dec 2018 15:46:49 +0800 Subject: [PATCH 2/3] Show all events if resources list is not provided but event objects have resourceId accessors --- src/utils/Resources.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/utils/Resources.js b/src/utils/Resources.js index d598f3e87..17d541459 100644 --- a/src/utils/Resources.js +++ b/src/utils/Resources.js @@ -11,6 +11,12 @@ export default function Resources(resources, accessors) { groupEvents(events) { const eventsByResource = new window.Map() + + if (!resources) { + // Return all events if resources are not provided + eventsByResource.set(NONE, events) + } + events.forEach(event => { const id = accessors.resource(event) || NONE let resourceEvents = eventsByResource.get(id) || [] From e09457c85fd2a8a0b53cdc03647fca429fdb5f54 Mon Sep 17 00:00:00 2001 From: dkrylov Date: Mon, 3 Dec 2018 23:22:46 +0800 Subject: [PATCH 3/3] Refactor resourcec-related fix --- src/TimeGrid.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/TimeGrid.js b/src/TimeGrid.js index a9f70e30c..7ab99fc26 100644 --- a/src/TimeGrid.js +++ b/src/TimeGrid.js @@ -15,8 +15,6 @@ import { notify } from './utils/helpers' import { inRange, sortEvents } from './utils/eventLevels' import Resources from './utils/Resources' -const memoizedResources = memoize(Resources); - export default class TimeGrid extends Component { static propTypes = { events: PropTypes.array.isRequired, @@ -146,7 +144,7 @@ export default class TimeGrid extends Component { renderEvents(range, events, now) { let { min, max, components, accessors, localizer } = this.props - const resources = this.getResources() + const resources = this.memoizedResources(this.props.resources, accessors) const groupedEvents = resources.groupEvents(events) return resources.map(([id, resource], i) => @@ -236,7 +234,7 @@ export default class TimeGrid extends Component { getNow={getNow} localizer={localizer} selected={selected} - resources={this.getResources()} + resources={this.memoizedResources(resources, accessors)} selectable={this.props.selectable} accessors={accessors} getters={getters} @@ -318,7 +316,5 @@ export default class TimeGrid extends Component { } } - getResources = () => { - return memoizedResources(this.props.resources, this.props.accessors) - } + memoizedResources = memoize((resources, accessors) => Resources(resources, accessors)) }