Просмотр исходного кода

event-placement fixes for daygrid

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

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

@@ -125,7 +125,7 @@ export class SegHierarchy {
       insertAt(this.entriesByLevel[nextLevel - 1], insertion.lateralEnd, entry)
     }
 
-    this.stackCnts[hashEntry(entry)] = insertion.stackCnt
+    this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt
   }
 
   findInsertion(newEntry: SegEntry): SegInsertion {
@@ -171,7 +171,7 @@ export class SegHierarchy {
       lateralStart,
       lateralEnd,
       touchingEntry,
-      stackCnt: touchingEntry ? stackCnts[hashEntry(touchingEntry)] + 1 : 0
+      stackCnt: touchingEntry ? stackCnts[buildEntryKey(touchingEntry)] + 1 : 0
     }
   }
 
@@ -202,7 +202,7 @@ export function getEntrySpanEnd(entry: SegEntry) {
   return entry.spanEnd
 }
 
-export function hashEntry(entry: SegEntry) { // TODO: rename to something about 'key'???
+export function buildEntryKey(entry: SegEntry) {
   return entry.segInput.index + ':' + entry.spanStart
 }
 

+ 1 - 1
packages/common/src/main.ts

@@ -162,7 +162,7 @@ export { EventSourceDef } from './structs/event-source-def'
 export { EventSource, EventSourceHash } from './structs/event-source'
 export { EventSourceRefiners, EventSourceRefined } from './structs/event-source-parse'
 
-export { SegInput, SegRect, SegHierarchy, SegEntry, SegInsertion, hashEntry, getEntrySpanEnd, binarySearch } from './event-placement'
+export { SegInput, SegRect, SegHierarchy, SegEntry, SegInsertion, buildEntryKey, getEntrySpanEnd, binarySearch } from './event-placement'
 
 export {
   Interaction,

+ 2 - 2
packages/daygrid/src/TableRow.tsx

@@ -15,6 +15,7 @@ import {
   isPropsEqual,
   createRef,
   buildEventRangeKey,
+  sortEventSegs
 } from '@fullcalendar/common'
 import { TableSeg, splitSegsByFirstCol } from './TableSeg'
 import { TableCell, TableCellModel, MoreLinkArg } from './TableCell'
@@ -76,13 +77,12 @@ export class TableRow extends DateComponent<TableRowProps, TableRowState> {
     let mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt)
 
     let { placementsByFirstCol, placementsByEachCol, moreCnts, moreMarginTops, cellPaddingBottoms } = computeFgSegPlacement(
-      props.fgEventSegs,
+      sortEventSegs(props.fgEventSegs, context.options.eventOrder) as TableSeg[],
       props.dayMaxEvents,
       props.dayMaxEventRows,
       state.eventInstanceHeights,
       state.maxContentHeight,
       colCnt,
-      context.options.eventOrder,
     )
 
     let selectedInstanceHash = // TODO: messy way to compute this

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

@@ -1,13 +1,10 @@
 import {
-  sortEventSegs,
-  OrderSpec,
-  EventApi,
   SegInput,
   SegHierarchy,
   SegRect,
   SegEntry,
   SegInsertion,
-  hashEntry,
+  buildEntryKey,
 } from '@fullcalendar/common'
 import { TableSeg } from './TableSeg'
 
@@ -28,10 +25,10 @@ export function computeFgSegPlacement(
   dayMaxEventRows: boolean | number,
   eventInstanceHeights: { [instanceId: string]: number },
   maxContentHeight: number | null,
-  colCnt: number,
-  eventOrderSpecs: OrderSpec<EventApi>[],
+  colCnt: number
 ) {
   let hierarchy = new DayGridSegHierarchy()
+  hierarchy.allowReslicing = true
 
   if (dayMaxEvents === true || dayMaxEventRows === true) {
     hierarchy.maxCoord = maxContentHeight
@@ -42,7 +39,6 @@ export function computeFgSegPlacement(
     hierarchy.hiddenConsumes = true
   }
 
-  segs = sortEventSegs(segs, eventOrderSpecs) as TableSeg[]
   let segInputs: SegInput[] = segs.map((seg: TableSeg, i: number) => {
     let { instanceId } = seg.eventRange.instance
     let eventHeight = eventInstanceHeights[instanceId]
@@ -174,7 +170,7 @@ class DayGridSegHierarchy extends SegHierarchy {
   addSegs(segInputs: SegInput[]): SegEntry[] {
     const hiddenSegs = super.addSegs(segInputs)
     const { entriesByLevel } = this
-    const excludeHidden = (entry: SegEntry) => !this.forceHidden[hashEntry(entry)]
+    const excludeHidden = (entry: SegEntry) => !this.forceHidden[buildEntryKey(entry)]
 
     // remove the forced-hidden segs
     for (let level = 0; level < entriesByLevel.length; level++) {
@@ -191,7 +187,7 @@ class DayGridSegHierarchy extends SegHierarchy {
     if (this.hiddenConsumes && level >= 0) {
       for (let lateral = insertion.lateralStart; lateral < insertion.lateralEnd; lateral++) {
         const leadingEntry = entriesByLevel[level][lateral]
-        const leadingEntryId = hashEntry(leadingEntry)
+        const leadingEntryId = buildEntryKey(leadingEntry)
 
         if (!forceHidden[leadingEntryId]) {
           forceHidden[leadingEntryId] = true