Skip to content

Commit 91c6ec0

Browse files
dmitrykrylovjquense
authored andcommitted
fix: update TimeGrid on resources list change (jquense#1135)
* Update TimeGrid on resources list change * Show all events if resources list is not provided but event objects have resourceId accessors * Refactor resourcec-related fix
1 parent 13459b0 commit 91c6ec0

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

src/TimeGrid.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import cn from 'classnames'
33
import raf from 'dom-helpers/util/requestAnimationFrame'
44
import React, { Component } from 'react'
55
import { findDOMNode } from 'react-dom'
6+
import memoize from 'memoize-one'
67

78
import dates from './utils/dates'
89
import DayColumn from './DayColumn'
@@ -65,8 +66,6 @@ export default class TimeGrid extends Component {
6566
this.state = { gutterWidth: undefined, isOverflowing: null }
6667

6768
this.scrollRef = React.createRef()
68-
69-
this.resources = Resources(props.resources, props.accessors)
7069
}
7170

7271
componentWillMount() {
@@ -95,6 +94,7 @@ export default class TimeGrid extends Component {
9594
raf.cancel(this.rafHandle)
9695
this.rafHandle = raf(this.checkOverflow)
9796
}
97+
9898
componentWillUnmount() {
9999
window.removeEventListener('resize', this.handleResize)
100100

@@ -144,9 +144,10 @@ export default class TimeGrid extends Component {
144144
renderEvents(range, events, now) {
145145
let { min, max, components, accessors, localizer } = this.props
146146

147-
const groupedEvents = this.resources.groupEvents(events)
147+
const resources = this.memoizedResources(this.props.resources, accessors)
148+
const groupedEvents = resources.groupEvents(events)
148149

149-
return this.resources.map(([id, resource], i) =>
150+
return resources.map(([id, resource], i) =>
150151
range.map((date, jj) => {
151152
let daysEvents = (groupedEvents.get(id) || []).filter(event =>
152153
dates.inRange(
@@ -233,7 +234,7 @@ export default class TimeGrid extends Component {
233234
getNow={getNow}
234235
localizer={localizer}
235236
selected={selected}
236-
resources={this.resources}
237+
resources={this.memoizedResources(resources, accessors)}
237238
selectable={this.props.selectable}
238239
accessors={accessors}
239240
getters={getters}
@@ -314,4 +315,6 @@ export default class TimeGrid extends Component {
314315
})
315316
}
316317
}
318+
319+
memoizedResources = memoize((resources, accessors) => Resources(resources, accessors))
317320
}

src/utils/Resources.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ export default function Resources(resources, accessors) {
1111

1212
groupEvents(events) {
1313
const eventsByResource = new window.Map()
14+
15+
if (!resources) {
16+
// Return all events if resources are not provided
17+
eventsByResource.set(NONE, events)
18+
}
19+
1420
events.forEach(event => {
1521
const id = accessors.resource(event) || NONE
1622
let resourceEvents = eventsByResource.get(id) || []

0 commit comments

Comments
 (0)