Browse Source

eventOrder should look at miscProps. fixes #3950

Adam Shaw 8 years ago
parent
commit
38827291b1
2 changed files with 28 additions and 13 deletions
  1. 12 8
      src/component/renderers/EventRenderer.ts
  2. 16 5
      src/util.ts

+ 12 - 8
src/component/renderers/EventRenderer.ts

@@ -427,18 +427,22 @@ export default class EventRenderer {
 
   // A cmp function for determining which segments should take visual priority
   compareEventSegs(seg1, seg2) {
-    let f1 = seg1.footprint.componentFootprint
-    let r1 = f1.unzonedRange
-    let f2 = seg2.footprint.componentFootprint
-    let r2 = f2.unzonedRange
+    let f1 = seg1.footprint
+    let f2 = seg2.footprint
+    let cf1 = f1.componentFootprint
+    let cf2 = f2.componentFootprint
+    let r1 = cf1.unzonedRange
+    let r2 = cf2.unzonedRange
 
     return r1.startMs - r2.startMs || // earlier events go first
       (r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first
-      f2.isAllDay - f1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)
+      cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)
       compareByFieldSpecs(
-        seg1.footprint.eventDef,
-        seg2.footprint.eventDef,
-        this.view.eventOrderSpecs
+        f1.eventDef,
+        f2.eventDef,
+        this.view.eventOrderSpecs,
+        f1.eventDef.miscProps,
+        f2.eventDef.miscProps
       )
   }
 

+ 16 - 5
src/util.ts

@@ -431,12 +431,12 @@ export function parseFieldSpecs(input) {
 }
 
 
-export function compareByFieldSpecs(obj1, obj2, fieldSpecs) {
+export function compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback?, obj2fallback?) {
   let i
   let cmp
 
   for (i = 0; i < fieldSpecs.length; i++) {
-    cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i])
+    cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback)
     if (cmp) {
       return cmp
     }
@@ -446,12 +446,23 @@ export function compareByFieldSpecs(obj1, obj2, fieldSpecs) {
 }
 
 
-export function compareByFieldSpec(obj1, obj2, fieldSpec) {
+export function compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {
   if (fieldSpec.func) {
     return fieldSpec.func(obj1, obj2)
   }
-  return flexibleCompare(obj1[fieldSpec.field], obj2[fieldSpec.field]) *
-    (fieldSpec.order || 1)
+
+  let val1 = obj1[fieldSpec.field]
+  let val2 = obj2[fieldSpec.field]
+
+  if (val1 == undefined && obj1fallback) {
+    val1 = obj1fallback[fieldSpec.field]
+  }
+
+  if (val2 == undefined && obj2fallback) {
+    val2 = obj2fallback[fieldSpec.field]
+  }
+
+  return flexibleCompare(val1, val2) * (fieldSpec.order || 1)
 }