Преглед изворни кода

fix: event start time is limited by what is visible by slotMinTime. fixes #6162

Adam Shaw пре 4 година
родитељ
комит
1fa292f9b7

+ 1 - 0
CHANGELOG.md

@@ -4,6 +4,7 @@ v5.6.0
 
 - feature: icalendar events receive URL (#6173)
 - feature: icalendar events receive location, organizer, description in extendedProps (#6097)
+- fix: event start time is limited by what is visible by slotMinTime (#6162)
 - fix: Event::setProp can't change the id (#4730)
 - fix: icalendar event source does not update on refreshEvents (#6194)
 - fix: business hours per resource do not fill row height with expandRows (#6134)

+ 16 - 0
packages/__tests__/src/event-render/minTime.ts

@@ -27,6 +27,22 @@ describe('slotMinTime', () => { // TODO: rename file
         expect(res.isMatch).toBe(true)
       })
     })
+
+    describe('when event start cut off by positive slotMinTime', () => {
+      pushOptions({
+        slotMinTime: { hours: 12 },
+        events: [
+          { start: '2017-03-22T10:00:00', end: '2017-03-22T14:00:00' }
+        ]
+      })
+
+      it('shows time-text as original event start time', () => {
+        let calendar = initCalendar()
+        let timeGridWrapper = new TimeGridViewWrapper(calendar).timeGrid
+        let timeTexts = timeGridWrapper.getEventTimeTexts()
+        expect(timeTexts[0]).toBe('10:00 - 2:00')
+      })
+    })
   })
 
   it('can be changed dynamically', () => {

+ 11 - 4
packages/common/src/component/event-rendering.ts

@@ -11,7 +11,7 @@ import { EventUi, EventUiHash, combineEventUis } from './event-ui'
 import { mapHash } from '../util/object'
 import { ViewContext } from '../ViewContext'
 import { DateFormatter } from '../datelib/DateFormatter'
-import { DateMarker } from '../datelib/marker'
+import { addMs, DateMarker, startOfDay } from '../datelib/marker'
 import { ViewApi } from '../ViewApi'
 import { MountArg } from '../common/render-hook'
 
@@ -247,9 +247,16 @@ export function buildSegTimeText(
   if (displayEventTime == null) { displayEventTime = defaultDisplayEventTime !== false }
   if (displayEventEnd == null) { displayEventEnd = defaultDisplayEventEnd !== false }
 
-  if (displayEventTime && !eventDef.allDay && (seg.isStart || seg.isEnd)) {
-    let segStart = startOverride || (seg.isStart ? eventInstance.range.start : (seg.start || seg.eventRange.range.start))
-    let segEnd = endOverride || (seg.isEnd ? eventInstance.range.end : (seg.end || seg.eventRange.range.end))
+  let wholeEventStart = eventInstance.range.start
+  let wholeEventEnd = eventInstance.range.end
+  let segStart = startOverride || seg.start || seg.eventRange.range.start
+  let segEnd = endOverride || seg.end || seg.eventRange.range.end
+  let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf()
+  let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf()
+
+  if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {
+    segStart = isStartDay ? wholeEventStart : segStart
+    segEnd = isEndDay ? wholeEventEnd : segEnd
 
     if (displayEventEnd && eventDef.hasEnd) {
       return dateEnv.formatRange(segStart, segEnd, timeFormat, {