Skip to content

Commit

Permalink
fix event positioning bug in daygrid
Browse files Browse the repository at this point in the history
  • Loading branch information
arshaw committed Jun 15, 2020
1 parent e73e439 commit 45d0f25
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 11 deletions.
25 changes: 25 additions & 0 deletions packages/__tests__/src/event-render/dayGrid-events.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,31 @@ describe('dayGrid advanced event rendering', function() {
expect(anyElsIntersect(eventEls)).toBe(false)
})

it('won\'t intersect when doing custom rendering', function() {
let calendar = initCalendar({
initialView: 'dayGridMonth',
initialDate: '2020-06-01',
events: [
{ start: '2020-06-04', end: '2020-06-08', title: 'event a' },
{ start: '2020-06-05', end: '2020-06-09', title: 'event b' },
{ start: '2020-06-08T12:00:00', title: 'event c' }
],
eventContent(arg) { // creates varying-height events, which revealed the bug
return {
html:`
<b>${arg.timeText}</b>
<i>${arg.event.title}</i>
`
}
}
})

let dayGridWrapper = new DayGridViewWrapper(calendar).dayGrid
let eventEls = dayGridWrapper.getEventEls()

expect(anyElsIntersect(eventEls)).toBe(false)
})

it('renders single-day timed event as list-item', function() {
let calendar = initCalendar({
initialView: 'dayGridMonth',
Expand Down
20 changes: 9 additions & 11 deletions packages/daygrid/src/event-placement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ export function computeFgSegPlacement( // for one row. TODO: print mode?
// computes segTops/segMarginTops/moreTops/paddingBottoms
for (let col = 0; col < colCnt; col++) {
let placements = colPlacements[col]
let currentBottom = 0
let currentExtraSpace = 0
let currentNonAbsBottom = 0
let runningAbsHeight = 0

for (let placement of placements) {
let seg = placement.seg
Expand All @@ -76,24 +76,22 @@ export function computeFgSegPlacement( // for one row. TODO: print mode?
if (seg.firstCol === seg.lastCol && seg.isStart && seg.isEnd) { // TODO: simpler way? NOT DRY

segMarginTops[seg.eventRange.instance.instanceId] =
placement.top - currentBottom // from previous seg bottom
+ currentExtraSpace
placement.top - currentNonAbsBottom // from previous seg bottom

currentExtraSpace = 0
runningAbsHeight = 0
currentNonAbsBottom = placement.bottom

} else { // multi-col event, abs positioned
currentExtraSpace += placement.bottom - placement.top // for future non-abs segs
runningAbsHeight += placement.bottom - placement.top
}

currentBottom = placement.bottom
}
}

if (currentExtraSpace) {
if (runningAbsHeight) {
if (moreCnts[col]) {
moreTops[col] = currentExtraSpace
moreTops[col] = runningAbsHeight
} else {
paddingBottoms[col] = currentExtraSpace
paddingBottoms[col] = runningAbsHeight
}
}
}
Expand Down

0 comments on commit 45d0f25

Please sign in to comment.