Skip to content

Commit c07d0ab

Browse files
committed
[changed] better event overlays for overlapping events
1 parent c787c31 commit c07d0ab

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

src/DaySlot.jsx

+15-8
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,21 @@ function positionFromDate(date, min, step){
2121
return dates.diff(min, dates.merge(min, date), 'minutes')
2222
}
2323

24-
function overlaps(event, events, { startAccessor, endAccessor }){
24+
function overlaps(event, events, { startAccessor, endAccessor }, last) {
2525
let eStart = get(event, startAccessor);
26+
let offset = last;
2627

2728
function overlap(eventB){
2829
return dates.lt(eStart, get(eventB, endAccessor))
2930
}
3031

31-
return events.reduce((sum, otherEvent) => {
32-
return sum + (overlap(otherEvent) ? 1 : 0)
33-
}, 0)
32+
if (!events.length) return last - 1
33+
events.reverse().some(prevEvent => {
34+
if (overlap(prevEvent)) return true
35+
offset = offset - 1
36+
})
37+
38+
return offset
3439
}
3540

3641
let DaySlot = React.createClass({
@@ -120,7 +125,8 @@ let DaySlot = React.createClass({
120125
, selected, eventTimeRangeFormat, eventComponent
121126
, startAccessor, endAccessor, titleAccessor } = this.props;
122127

123-
let EventComponent = eventComponent;
128+
let EventComponent = eventComponent
129+
, lastLeftOffset = 0;
124130

125131
events.sort((a, b) => +get(a, startAccessor) - +get(b, startAccessor))
126132

@@ -130,9 +136,10 @@ let DaySlot = React.createClass({
130136
let startSlot = positionFromDate(start, min, step);
131137
let endSlot = positionFromDate(end, min, step);
132138

133-
let leftOffset = overlaps(event, events.slice(0, idx), this.props)
139+
lastLeftOffset = Math.max(0,
140+
overlaps(event, events.slice(0, idx), this.props, lastLeftOffset + 1))
134141

135-
let style = this._slotStyle(startSlot, endSlot, leftOffset)
142+
let style = this._slotStyle(startSlot, endSlot, lastLeftOffset)
136143

137144
let title = get(event, titleAccessor)
138145
let label = localizer.format({ start, end }, eventTimeRangeFormat, culture);
@@ -149,7 +156,7 @@ let DaySlot = React.createClass({
149156
onClick={this._select.bind(null, event)}
150157
className={cn('rbc-event', className, {
151158
'rbc-selected': _isSelected,
152-
'rbc-event-overlaps': leftOffset !== 0
159+
'rbc-event-overlaps': lastLeftOffset !== 0
153160
})}
154161
>
155162
<div className='rbc-event-label'>{label}</div>

0 commit comments

Comments
 (0)