Skip to content

Commit dbd0b0a

Browse files
authored
fix: correctly show +more buttons on slots with hidden spanning events (jquense#2744)
Correctly show +more buttons on slots with hidden spanning events
1 parent c3af945 commit dbd0b0a

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

src/EventEndingRow.js

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import EventRowMixin from './EventRowMixin'
55
import { eventLevels } from './utils/eventLevels'
66
import range from 'lodash/range'
77

8+
// Modified: Check if a segment spans through this slot (including events that started earlier)
89
let isSegmentInSlot = (seg, slot) => seg.left <= slot && seg.right >= slot
910
let eventsInSlot = (segments, slot) =>
1011
segments.filter((seg) => isSegmentInSlot(seg, slot)).map((seg) => seg.event)
@@ -24,10 +25,31 @@ class EventEndingRow extends React.Component {
2425
while (current <= slots) {
2526
let key = '_lvl_' + current
2627

28+
// Find segment that starts at or spans through current slot
2729
let { event, left, right, span } =
28-
rowSegments.filter((seg) => isSegmentInSlot(seg, current))[0] || {} //eslint-disable-line
30+
rowSegments.filter((seg) => isSegmentInSlot(seg, current))[0] || {}
2931

3032
if (!event) {
33+
// No visible event starts at this slot, but check if we need a "more" button
34+
// for hidden events that span this slot
35+
const hiddenEvents = this.getHiddenEventsForSlot(segments, current)
36+
if (hiddenEvents.length > 0) {
37+
let gap = current - lastEnd
38+
if (gap) {
39+
row.push(EventRowMixin.renderSpan(slots, gap, key + '_gap'))
40+
}
41+
row.push(
42+
EventRowMixin.renderSpan(
43+
slots,
44+
1,
45+
key,
46+
this.renderShowMore(segments, current)
47+
)
48+
)
49+
lastEnd = current = current + 1
50+
continue
51+
}
52+
3153
current++
3254
continue
3355
}
@@ -64,6 +86,23 @@ class EventEndingRow extends React.Component {
6486
return <div className="rbc-row">{row}</div>
6587
}
6688

89+
// New helper method to find hidden events for a slot
90+
getHiddenEventsForSlot(segments, slot) {
91+
// Get all events (visible and hidden) for this slot
92+
const allEventsInSlot = eventsInSlot(segments, slot)
93+
94+
// Get visible events for this slot from the first level
95+
const rowSegments = eventLevels(segments).levels[0]
96+
const visibleEventsInSlot = rowSegments
97+
.filter(seg => isSegmentInSlot(seg, slot))
98+
.map(seg => seg.event)
99+
100+
// Return events that are in allEventsInSlot but not in visibleEventsInSlot
101+
return allEventsInSlot.filter(
102+
event => !visibleEventsInSlot.some(visEvent => visEvent === event)
103+
)
104+
}
105+
67106
canRenderSlotEvent(slot, span) {
68107
let { segments } = this.props
69108

0 commit comments

Comments
 (0)