Adam Shaw 4 лет назад
Родитель
Сommit
5a357bd91c

+ 2 - 2
packages/common/src/event-placement.ts

@@ -4,7 +4,7 @@ export interface SegInput {
   spanStart: number
   spanEnd: number
   thickness: number
-  forceAbsolute?: boolean // TODO: kill
+  forceAbsolute?: boolean // TODO: kill. not used within this file
 }
 
 export interface SegEntry {
@@ -15,7 +15,7 @@ export interface SegEntry {
 }
 
 export interface SegRect extends SegEntry {
-  partIndex: number
+  partIndex: number // TODO: rename to sliceIndex?
   levelCoord: number
 }
 

+ 23 - 9
packages/daygrid/src/event-placement.ts

@@ -20,7 +20,7 @@ export interface TableSegPlacement {
 }
 
 export function computeFgSegPlacement(
-  segs: TableSeg[],
+  segs: TableSeg[], // assumed already sorted
   dayMaxEvents: boolean | number,
   dayMaxEventRows: boolean | number,
   eventInstanceHeights: { [instanceId: string]: number },
@@ -40,20 +40,34 @@ export function computeFgSegPlacement(
     hierarchy.hiddenConsumes = true
   }
 
-  let segInputs: SegInput[] = segs.map((seg: TableSeg, i: number) => {
+  let hiddenEntries: SegEntry[]  = []
+  let segInputs: SegInput[] = []
+
+  for (let i = 0; i < segs.length; i++) {
+    let seg = segs[i]
     let { instanceId } = seg.eventRange.instance
     let eventHeight = eventInstanceHeights[instanceId]
-
-    return {
-      index: i,
+    let geomProps = {
       spanStart: seg.firstCol,
       spanEnd: seg.lastCol + 1,
       thickness: eventHeight || 0,
-      forceAbsolute: seg.isStart || seg.isEnd || eventHeight == null,
     }
-  })
 
-  let hiddenEntries = hierarchy.addSegs(segInputs)
+    if (eventHeight == null) {
+      hiddenEntries.push({
+        segInput: { index: i, ...geomProps, forceAbsolute: true },
+        ...geomProps
+      })
+    } else {
+      segInputs.push({
+        index: i,
+        ...geomProps,
+        forceAbsolute: seg.isStart || seg.isEnd,
+      })
+    }
+  }
+
+  hiddenEntries.push(...hierarchy.addSegs(segInputs))
   let segRects = hierarchy.toRects()
   let { placementsByFirstCol, placementsByEachCol, leftoverMarginsByCol } = placeRects(segRects, segs, colCnt)
 
@@ -131,7 +145,7 @@ function placeRects(rects: SegRect[], segs: TableSeg[], colCnt: number) {
       isHidden: false,
       absoluteTop: rect.levelCoord,
       marginTop: 0, // will compute later
-      height: rect.thickness
+      height: rect.thickness // hack. only for this function
     }
 
     placementsByFirstCol[rect.spanStart].push(placement)

+ 2 - 5
packages/timegrid/src/TimeCol.tsx

@@ -123,10 +123,7 @@ export class TimeCol extends BaseComponent<TimeColProps> {
 
   renderPrintFgSegs(segs: TimeColsSeg[]) {
     let { props } = this
-
-    // not DRY
-    segs = sortEventSegs(segs, this.context.options.eventOrder) as TimeColsSeg[]
-
+    segs = sortEventSegs(segs, this.context.options.eventOrder) as TimeColsSeg[] // not DRY
     return segs.map((seg) => (
       <div
         className="fc-timegrid-event-harness"
@@ -154,7 +151,7 @@ export class TimeCol extends BaseComponent<TimeColProps> {
   ) {
     let { props } = this
 
-    segs = sortEventSegs(segs, this.context.options.eventOrder) as TimeColsSeg[]
+    segs = sortEventSegs(segs, this.context.options.eventOrder) as TimeColsSeg[] // not DRY
     let segInputs = this.buildSegInputs(segs)
     let segRects = computeFgSegPlacements(segInputs)
 

+ 1 - 0
packages/timegrid/src/event-placement.ts

@@ -25,6 +25,7 @@ export interface TimeColSegRect extends SegRect {
   stackForward: number
 }
 
+// segInputs assumed sorted
 export function computeFgSegPlacements(segInputs: SegInput[]): TimeColSegRect[] {
   let hierarchy = new SegHierarchy()
   hierarchy.addSegs(segInputs)