|
|
@@ -6,6 +6,7 @@ import { compareByFieldSpecs } from '../../util/misc'
|
|
|
import { EventRenderRange, EventUi, hasBgRendering } from '../event-rendering'
|
|
|
import { Seg } from '../DateComponent'
|
|
|
import EventApi from '../../api/EventApi'
|
|
|
+import { assignTo } from '../../util/object'
|
|
|
|
|
|
|
|
|
export default class EventRenderer {
|
|
|
@@ -320,32 +321,16 @@ export default class EventRenderer {
|
|
|
|
|
|
|
|
|
sortEventSegs(segs): Seg[] {
|
|
|
- segs = segs.slice() // copy
|
|
|
- segs.sort(this.compareEventSegs.bind(this))
|
|
|
- return segs
|
|
|
- }
|
|
|
+ let objs = segs.map(buildSegCompareObj)
|
|
|
+ let specs = this.view.eventOrderSpecs
|
|
|
|
|
|
+ objs.sort(function(obj0, obj1) {
|
|
|
+ return compareByFieldSpecs(obj0, obj1, specs)
|
|
|
+ })
|
|
|
|
|
|
- // A cmp function for determining which segments should take visual priority
|
|
|
- compareEventSegs(seg1: Seg, seg2: Seg) {
|
|
|
- let eventDef1 = seg1.eventRange.def
|
|
|
- let eventDef2 = seg2.eventRange.def
|
|
|
- let r1 = seg1.eventRange.instance.range
|
|
|
- let r2 = seg2.eventRange.instance.range
|
|
|
-
|
|
|
- let eventApi1 = new EventApi(this.view.calendar, eventDef1)
|
|
|
- let eventApi2 = new EventApi(this.view.calendar, eventDef2)
|
|
|
-
|
|
|
- return r1.start.valueOf() - r2.start.valueOf() || // earlier events go first
|
|
|
- (r2.end.valueOf() - r2.start.valueOf()) - (r1.end.valueOf() - r1.start.valueOf()) || // tie? longer events go first
|
|
|
- Number(eventDef1.isAllDay) - Number(eventDef2.isAllDay) || // tie? put all-day events first
|
|
|
- compareByFieldSpecs(
|
|
|
- eventApi1,
|
|
|
- eventApi2,
|
|
|
- this.view.eventOrderSpecs,
|
|
|
- eventDef1.extendedProps,
|
|
|
- eventDef2.extendedProps
|
|
|
- )
|
|
|
+ return objs.map(function(c) {
|
|
|
+ return c._seg
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -358,6 +343,7 @@ export default class EventRenderer {
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
function setElSeg(el: HTMLElement, seg: Seg) {
|
|
|
(el as any).fcSeg = seg
|
|
|
}
|
|
|
@@ -365,3 +351,26 @@ function setElSeg(el: HTMLElement, seg: Seg) {
|
|
|
export function getElSeg(el: HTMLElement): Seg | null {
|
|
|
return (el as any).fcSeg || null
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+// returns a object with all primitive props that can be compared
|
|
|
+export function buildSegCompareObj(seg: Seg) {
|
|
|
+ let eventDef = seg.eventRange.def
|
|
|
+ let range = seg.eventRange.instance.range
|
|
|
+ let start = range.start.valueOf()
|
|
|
+ let end = range.end.valueOf()
|
|
|
+
|
|
|
+ return assignTo(
|
|
|
+ {},
|
|
|
+ eventDef.extendedProps,
|
|
|
+ eventDef,
|
|
|
+ {
|
|
|
+ id: eventDef.publicId,
|
|
|
+ start,
|
|
|
+ end,
|
|
|
+ duration: end - start,
|
|
|
+ isAllDay: Number(eventDef.isAllDay),
|
|
|
+ _seg: seg // for later retrieval
|
|
|
+ }
|
|
|
+ )
|
|
|
+}
|