Adam Shaw 7 лет назад
Родитель
Сommit
ef657d30e0

+ 8 - 7
src/View.ts

@@ -74,10 +74,11 @@ export default abstract class View extends DateComponent {
     this.dateProfileGenerator = new this.dateProfileGeneratorClass(this)
     this.eventOrderSpecs = parseFieldSpecs(this.opt('eventOrder'))
 
-    // legacy
-    if (this['initialize']) {
-      this['initialize']()
-    }
+    this.initialize()
+  }
+
+
+  initialize() { // convenient for sublcasses
   }
 
 
@@ -182,9 +183,9 @@ export default abstract class View extends DateComponent {
 
 
   // if dateProfile not specified, uses current
-  renderDates() {
-    this.updateMiscDateProps(this.dateProfile)
-    super.renderDates()
+  renderDates(dateProfile: DateProfile) {
+    this.updateMiscDateProps(dateProfile)
+    super.renderDates(dateProfile)
     this.addScroll({ isDateInit: true })
     this.startNowIndicator() // shouldn't render yet because updateSize will be called soon
     this.triggerRenderedDates()

+ 1 - 1
src/agenda/TimeGridEventRenderer.ts

@@ -90,7 +90,7 @@ export default class TimeGridEventRenderer extends EventRenderer {
   // Renders the HTML for a single event segment's default rendering
   fgSegHtml(seg: Seg) {
     let eventRange = seg.eventRange
-    let eventDef = eventRange.eventDef
+    let eventDef = eventRange.def
     let eventUi = eventRange.ui
     let isAllDay = eventDef.isAllDay
     let isDraggable = eventUi.startEditable

+ 3 - 2
src/basic/BasicView.ts

@@ -13,6 +13,7 @@ import ScrollComponent from '../common/ScrollComponent'
 import View from '../View'
 import BasicViewDateProfileGenerator from './BasicViewDateProfileGenerator'
 import DayGrid from './DayGrid'
+import { DateProfile } from '../DateProfileGenerator'
 
 const WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' })
 
@@ -70,12 +71,12 @@ export default class BasicView extends View {
   }
 
 
-  renderDates() {
+  renderDates(dateProfile: DateProfile) {
     this.dayGrid.breakOnWeeks = /year|month|week/.test(
       this.dateProfile.currentRangeUnit
     )
 
-    super.renderDates()
+    super.renderDates(dateProfile)
   }
 
 

+ 4 - 4
src/basic/DayGrid.ts

@@ -697,10 +697,10 @@ export default class DayGrid extends DateComponent {
         newSegs.push(
           assignTo({}, seg, {
             eventRange: {
-              eventDef: eventRange.eventDef,
-              eventInstance: eventRange.eventInstance,
-              range: slicedRange,
-              ui: assignTo({}, eventRange.ui, { durationEditable: false }) // hack to disable resizing
+              def: eventRange.def,
+              ui: assignTo({}, eventRange.ui, { durationEditable: false }), // hack to disable resizing
+              instance: eventRange.instance,
+              range: slicedRange
             } as EventRenderRange,
             isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(),
             isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf()

+ 2 - 2
src/basic/DayGridEventRenderer.ts

@@ -23,7 +23,7 @@ export default class DayGridEventRenderer extends EventRenderer {
   renderBgSegs(segs: Seg[]) {
     // don't render timed background events
     segs = segs.filter(function(seg) {
-      return seg.eventRange.eventDef.isAllDay
+      return seg.eventRange.def.isAllDay
     })
 
     return super.renderBgSegs(segs)
@@ -238,7 +238,7 @@ export default class DayGridEventRenderer extends EventRenderer {
   // Builds the HTML to be used for the default element for an individual segment
   fgSegHtml(seg: Seg) {
     let eventRange = seg.eventRange
-    let eventDef = eventRange.eventDef
+    let eventDef = eventRange.def
     let eventUi = eventRange.ui
     let isAllDay = eventDef.isAllDay
     let isDraggable = eventUi.startEditable

+ 15 - 15
src/component/DateComponent.ts

@@ -275,8 +275,8 @@ export default abstract class DateComponent extends Component {
           {
             event: new EventApi(
               calendar,
-              seg.eventRange.eventDef,
-              seg.eventRange.eventInstance
+              seg.eventRange.def,
+              seg.eventRange.instance
             ),
             el: seg.el,
             view: this
@@ -296,8 +296,8 @@ export default abstract class DateComponent extends Component {
           {
             event: new EventApi(
               calendar,
-              seg.eventRange.eventDef,
-              seg.eventRange.eventInstance
+              seg.eventRange.def,
+              seg.eventRange.instance
             ),
             el: seg.el,
             view: this
@@ -368,7 +368,7 @@ export default abstract class DateComponent extends Component {
     }
 
     if (flags.dates && renderState.dateProfile) {
-      this.renderDates() // pass in dateProfile too?
+      this.renderDates(renderState.dateProfile)
       renderedFlags.dates = true
       dirtySizeFlags.dates = true
     }
@@ -487,7 +487,7 @@ export default abstract class DateComponent extends Component {
 
 
   // date-cell content only
-  renderDates() {
+  renderDates(dateProfile: DateProfile) {
     // subclasses should implement
   }
 
@@ -547,7 +547,7 @@ export default abstract class DateComponent extends Component {
         this.eventRangesToSegs(eventRanges),
         {
           getClasses(seg) {
-            return [ 'fc-bgevent' ].concat(seg.eventRange.eventDef.className)
+            return [ 'fc-bgevent' ].concat(seg.eventRange.def.className)
           }
         }
       )
@@ -728,7 +728,7 @@ export default abstract class DateComponent extends Component {
 
   hideSegsByHash(hash) {
     this.getAllEventSegs().forEach(function(seg) {
-      if (hash[seg.eventRange.eventInstance.instanceId]) {
+      if (hash[seg.eventRange.instance.instanceId]) {
         seg.el.style.visibility = 'hidden'
       }
     })
@@ -737,7 +737,7 @@ export default abstract class DateComponent extends Component {
 
   showSegsByHash(hash) {
     this.getAllEventSegs().forEach(function(seg) {
-      if (hash[seg.eventRange.eventInstance.instanceId]) {
+      if (hash[seg.eventRange.instance.instanceId]) {
         seg.el.style.visibility = ''
       }
     })
@@ -760,7 +760,7 @@ export default abstract class DateComponent extends Component {
 
   selectEventsByInstanceId(instanceId) {
     this.getAllEventSegs().forEach(function(seg) {
-      let eventInstance = seg.eventRange.eventInstance
+      let eventInstance = seg.eventRange.instance
       if (
         eventInstance && eventInstance.instanceId === instanceId &&
         seg.el // necessary?
@@ -891,7 +891,7 @@ export default abstract class DateComponent extends Component {
     let allSegs: Seg[] = []
 
     for (let eventRenderRange of eventRenderRanges) {
-      let segs = this.rangeToSegs(eventRenderRange.range, eventRenderRange.eventDef.isAllDay)
+      let segs = this.rangeToSegs(eventRenderRange.range, eventRenderRange.def.isAllDay)
 
       for (let seg of segs) {
         seg.eventRange = eventRenderRange
@@ -915,12 +915,12 @@ export default abstract class DateComponent extends Component {
       // TODO: make a separate utility for this?
       let def = parseEventDef({ editable: false }, '', selection.isAllDay, true)
       let eventRange = {
-        eventDef: def,
-        eventInstance: createEventInstance(def.defId, selection.range),
+        def,
+        ui: computeEventDefUi(def, {}, {}),
+        instance: createEventInstance(def.defId, selection.range),
         range: selection.range,
         isStart: true,
-        isEnd: true,
-        ui: computeEventDefUi(def, {}, {})
+        isEnd: true
       }
 
       for (let seg of segs) {

+ 14 - 14
src/component/event-rendering.ts

@@ -20,12 +20,12 @@ export interface EventUi {
 export type EventUiHash = { [defId: string]: EventUi }
 
 export interface EventRenderRange {
-  eventDef: EventDef
-  eventInstance?: EventInstance
-  range: DateRange,
+  def: EventDef
+  ui: EventUi
+  instance?: EventInstance
+  range: DateRange
   isStart: boolean
   isEnd: boolean
-  ui: EventUi
 }
 
 
@@ -77,12 +77,12 @@ export function sliceEventStore(eventStore: EventStore, eventUis: EventUiHash, f
         }
       } else {
         renderRanges.push({
-          eventDef: def,
-          eventInstance: instance,
+          def,
+          ui,
+          instance,
           range: visibleRange,
           isStart: origRange.start.valueOf() === slicedRange.start.valueOf(),
-          isEnd: origRange.end.valueOf() === slicedRange.end.valueOf(),
-          ui
+          isEnd: origRange.end.valueOf() === slicedRange.end.valueOf()
         })
       }
     }
@@ -97,11 +97,11 @@ export function sliceEventStore(eventStore: EventStore, eventUis: EventUiHash, f
       let ui = eventUis[def.defId]
 
       renderRanges.push({
-        eventDef: def,
+        def,
+        ui,
         range: invertedRange,
         isStart: false,
-        isEnd: false,
-        ui
+        isEnd: false
       })
     }
   }
@@ -112,11 +112,11 @@ export function sliceEventStore(eventStore: EventStore, eventUis: EventUiHash, f
 
     for (let invertedRange of invertedRanges) {
       renderRanges.push({
-        eventDef: eventStore.defs[defId],
+        def: eventStore.defs[defId],
+        ui: eventUis[defId],
         range: invertedRange,
         isStart: false,
-        isEnd: false,
-        ui: eventUis[defId]
+        isEnd: false
       })
     }
   }

+ 9 - 9
src/component/renderers/EventRenderer.ts

@@ -200,7 +200,7 @@ export default class EventRenderer {
     }
 
     // event is currently selected? attach a className.
-    if (seg.eventRange.eventInstance.instanceId === this.component.eventSelection) {
+    if (seg.eventRange.instance.instanceId === this.component.eventSelection) {
       classes.push('fc-selected')
     }
 
@@ -216,8 +216,8 @@ export default class EventRenderer {
       {
         event: new EventApi(
           this.view.calendar,
-          eventRange.eventDef,
-          eventRange.eventInstance
+          eventRange.def,
+          eventRange.instance
         ),
         el,
         view: this.view
@@ -240,16 +240,16 @@ export default class EventRenderer {
   // If not specified, formatter will default to the eventTimeFormat setting,
   // and displayEnd will default to the displayEventEnd setting.
   getTimeText(eventRange: EventRenderRange, formatter?, displayEnd?) {
-    let { eventDef, eventInstance } = eventRange
+    let { def, instance } = eventRange
 
     return this._getTimeText(
-      eventInstance.range.start,
-      eventDef.hasEnd ? eventInstance.range.end : null,
-      eventDef.isAllDay,
+      instance.range.start,
+      def.hasEnd ? instance.range.end : null,
+      def.isAllDay,
       formatter,
       displayEnd,
-      eventInstance.forcedStartTzo,
-      eventInstance.forcedEndTzo
+      instance.forcedStartTzo,
+      instance.forcedEndTzo
     )
   }
 

+ 2 - 2
src/interactions/EventClicking.ts

@@ -38,8 +38,8 @@ export default class EventClicking {
         {
           event: new EventApi(
             component.getCalendar(),
-            seg.eventRange.eventDef,
-            seg.eventRange.eventInstance
+            seg.eventRange.def,
+            seg.eventRange.instance
           ),
           jsEvent: ev,
           view: component.view

+ 5 - 4
src/interactions/EventDragging.ts

@@ -57,7 +57,7 @@ export default class EventDragging { // TODO: rename to EventSelectingAndDraggin
     let initialCalendar = component.getCalendar()
     let subjectSeg = this.subjectSeg = getElSeg(ev.subjectEl as HTMLElement)!
     let eventRange = this.eventRange = subjectSeg.eventRange!
-    let eventInstanceId = eventRange.eventInstance!.instanceId
+    let eventInstanceId = eventRange.instance!.instanceId
 
     this.relatedEvents = getRelatedEvents(
       initialCalendar.state.eventStore,
@@ -93,7 +93,7 @@ export default class EventDragging { // TODO: rename to EventSelectingAndDraggin
   handleDragStart = (ev: PointerDragEvent) => {
     let initialCalendar = this.component.getCalendar()
     let eventRange = this.eventRange!
-    let eventInstanceId = eventRange.eventInstance.instanceId
+    let eventInstanceId = eventRange.instance.instanceId
 
     if (ev.isTouch) {
 
@@ -117,7 +117,7 @@ export default class EventDragging { // TODO: rename to EventSelectingAndDraggin
       initialCalendar.publiclyTrigger('eventDragStart', [
         {
           el: this.subjectSeg.el,
-          event: new EventApi(initialCalendar, eventRange.eventDef, eventRange.eventInstance),
+          event: new EventApi(initialCalendar, eventRange.def, eventRange.instance),
           jsEvent: ev.origEvent,
           view: this.component.view
         }
@@ -213,7 +213,8 @@ export default class EventDragging { // TODO: rename to EventSelectingAndDraggin
       let initialCalendar = this.component.getCalendar()
       let initialView = this.component.view
       let { receivingCalendar } = this
-      let { eventDef, eventInstance } = this.eventRange!
+      let eventDef = this.eventRange!.def
+      let eventInstance = this.eventRange!.instance
       let eventApi = new EventApi(initialCalendar, eventDef, eventInstance)
       let relatedEvents = this.relatedEvents!
       let mutatedRelatedEvents = this.mutatedRelatedEvents!

+ 2 - 2
src/interactions/EventHovering.ts

@@ -61,8 +61,8 @@ export default class EventHovering {
           el: segEl,
           event: new EventApi(
             this.component.getCalendar(),
-            seg.eventRange.eventDef,
-            seg.eventRange.eventInstance
+            seg.eventRange.def,
+            seg.eventRange.instance
           ),
           jsEvent: ev,
           view: component.view

+ 6 - 5
src/interactions/EventResizing.ts

@@ -54,7 +54,7 @@ export default class EventDragging {
     // if touch, need to be working with a selected event
     this.dragging.setIgnoreMove(
       !this.component.isValidSegDownEl(ev.origEvent.target as HTMLElement) ||
-      (ev.isTouch && this.component.eventSelection !== eventRange.eventInstance!.instanceId)
+      (ev.isTouch && this.component.eventSelection !== eventRange.instance!.instanceId)
     )
   }
 
@@ -64,7 +64,7 @@ export default class EventDragging {
 
     this.relatedEvents = getRelatedEvents(
       calendar.state.eventStore,
-      this.eventRange.eventInstance!.instanceId
+      this.eventRange.instance!.instanceId
     )
 
     this.draggingSeg = this.querySeg(ev)
@@ -72,7 +72,7 @@ export default class EventDragging {
     calendar.publiclyTrigger('eventResizeStart', [
       {
         el: this.draggingSeg.el,
-        event: new EventApi(calendar, eventRange.eventDef, eventRange.eventInstance),
+        event: new EventApi(calendar, eventRange.def, eventRange.instance),
         jsEvent: ev.origEvent,
         view: this.component.view
       }
@@ -83,7 +83,7 @@ export default class EventDragging {
     let calendar = this.component.getCalendar()
     let relatedEvents = this.relatedEvents!
     let initialHit = this.hitDragging.initialHit!
-    let eventInstance = this.eventRange.eventInstance!
+    let eventInstance = this.eventRange.instance!
     let mutation: EventMutation | null = null
     let mutatedRelatedEvents: EventStore | null = null
     let isInvalid = false
@@ -141,7 +141,8 @@ export default class EventDragging {
   handleDragEnd = (ev: PointerDragEvent) => {
     let calendar = this.component.getCalendar()
     let view = this.component.view
-    let { eventDef, eventInstance } = this.eventRange!
+    let eventDef = this.eventRange!.def
+    let eventInstance = this.eventRange!.instance
     let eventApi = new EventApi(calendar, eventDef, eventInstance)
     let relatedEvents = this.relatedEvents!
     let mutatedRelatedEvents = this.mutatedRelatedEvents!

+ 2 - 2
src/list/ListEventRenderer.ts

@@ -23,8 +23,8 @@ export default class ListEventRenderer extends EventRenderer {
     let calendar = view.calendar
     let theme = calendar.theme
     let eventRange = seg.eventRange
-    let eventDef = eventRange.eventDef
-    let eventInstance = eventRange.eventInstance
+    let eventDef = eventRange.def
+    let eventInstance = eventRange.instance
     let eventUi = eventRange.ui
     let url = eventDef.url
     let classes = [ 'fc-list-item' ].concat(eventUi.classNames)

+ 3 - 3
src/list/ListView.ts

@@ -7,6 +7,7 @@ import ListEventRenderer from './ListEventRenderer'
 import { DateMarker, addDays, startOfDay } from '../datelib/marker'
 import { createFormatter } from '../datelib/formatting'
 import { DateRange, intersectRanges } from '../datelib/date-range'
+import { DateProfile } from '../DateProfileGenerator'
 
 /*
 Responsible for the scroller, and forwarding event-related actions into the "grid".
@@ -72,8 +73,7 @@ export default class ListView extends View {
   }
 
 
-  renderDates() {
-    let dateProfile = this.dateProfile
+  renderDates(dateProfile: DateProfile) {
     let dayStart = startOfDay(dateProfile.renderRange.start)
     let viewEnd = dateProfile.renderRange.end
     let dayDates: DateMarker[] = []
@@ -96,7 +96,7 @@ export default class ListView extends View {
 
     // all real rendering happens in EventRenderer
 
-    super.renderDates() // important for firing viewRender
+    super.renderDates(dateProfile) // important for firing viewRender
   }