Selaa lähdekoodia

start using EventApi

Adam Shaw 7 vuotta sitten
vanhempi
sitoutus
9992157b29

+ 16 - 0
src/api/EventApi.ts

@@ -0,0 +1,16 @@
+import Calendar from '../Calendar'
+import { EventDef, EventInstance } from '../structs/event'
+
+export default class EventApi {
+
+  calendar: Calendar
+  def: EventDef
+  instance: EventInstance
+
+  constructor(calendar: Calendar, def: EventDef, instance?: EventInstance) {
+    this.calendar = calendar
+    this.def = def
+    this.instance = instance || null
+  }
+
+}

+ 15 - 2
src/component/DateComponent.ts

@@ -18,6 +18,7 @@ import browserContext from '../common/browser-context'
 import { Hit } from '../interactions/HitDragging'
 import { computeVisibleDayRange } from '../util/misc'
 import { DateRange, rangeContainsMarker } from '../datelib/date-range'
+import EventApi from '../api/EventApi'
 
 
 export interface DateComponentRenderState {
@@ -272,10 +273,16 @@ export default abstract class DateComponent extends Component {
 
   triggerRenderedSegs(segs: Seg[]) {
     if (this.hasPublicHandlers('eventAfterRender')) {
+      let calendar = this.getCalendar()
+
       for (let seg of segs) {
         this.publiclyTriggerAfterSizing('eventAfterRender', [
           {
-            event: seg.eventRange, // what to do here?
+            event: new EventApi(
+              calendar,
+              seg.eventRange.eventDef,
+              seg.eventRange.eventInstance
+            ),
             el: seg.el,
             view: this
           }
@@ -287,10 +294,16 @@ export default abstract class DateComponent extends Component {
 
   triggerWillRemoveSegs(segs: Seg[]) {
     if (this.hasPublicHandlers('eventDestroy')) {
+      let calendar = this.getCalendar()
+
       for (let seg of segs) {
         this.publiclyTrigger('eventDestroy', [
           {
-            event: seg.eventRange, // what to do here?
+            event: new EventApi(
+              calendar,
+              seg.eventRange.eventDef,
+              seg.eventRange.eventInstance
+            ),
             el: seg.el,
             view: this
           }

+ 6 - 1
src/component/renderers/EventRenderer.ts

@@ -5,6 +5,7 @@ import { htmlToElements } from '../../util/dom-manip'
 import { compareByFieldSpecs } from '../../util/misc'
 import { EventRenderRange } from '../event-rendering'
 import { Seg } from '../DateComponent'
+import EventApi from '../../api/EventApi'
 
 
 export default class EventRenderer {
@@ -217,7 +218,11 @@ export default class EventRenderer {
 
     let custom = this.view.publiclyTrigger('eventRender', [
       {
-        event: eventRange, // what to do here?
+        event: new EventApi(
+          this.view.calendar,
+          eventRange.eventDef,
+          eventRange.eventInstance
+        ),
         el,
         view: this.view
       }

+ 6 - 1
src/interactions-external/ExternalElementDragging.ts

@@ -9,6 +9,7 @@ import { DateSpan } from '../structs/date-span'
 import Calendar from '../Calendar'
 import { EventInteractionState } from '../interactions/event-interaction-state'
 import { DragMetaInput, DragMeta, parseDragMeta } from '../structs/drag-meta'
+import EventApi from '../api/EventApi'
 
 export interface EventRes { // TODO: relate this to EventRenderRange?
   def: EventDef
@@ -113,7 +114,11 @@ export default class ExternalElementDragging {
         receivingCalendar.publiclyTrigger('eventReceive', [
           {
             draggedEl: pev.subjectEl,
-            event: droppableEvent.instance, // TODO: what to transmit here?
+            event: new EventApi(
+              receivingCalendar,
+              droppableEvent.def,
+              droppableEvent.instance
+            ),
             view: finalView
           }
         ])

+ 6 - 1
src/interactions/EventClicking.ts

@@ -1,6 +1,7 @@
 import DateComponent from '../component/DateComponent'
 import { listenBySelector } from '../util/dom-event'
 import { getElSeg } from '../component/renderers/EventRenderer'
+import EventApi from '../api/EventApi'
 
 /*
 Detects when the user clicks on an event within a DateComponent
@@ -28,7 +29,11 @@ export default class EventClicking {
     if (component.isValidSegDownEl(ev.target as HTMLElement)) {
       component.publiclyTrigger('eventClick', [
         {
-          event: seg.eventRange!.eventInstance, // TODO: correct arg!
+          event: new EventApi(
+            component.getCalendar(),
+            seg.eventRange.eventDef,
+            seg.eventRange.eventInstance
+          ),
           jsEvent: ev,
           view: component.view
         }

+ 6 - 1
src/interactions/EventHovering.ts

@@ -1,6 +1,7 @@
 import DateComponent from '../component/DateComponent'
 import { listenToHoverBySelector } from '../util/dom-event'
 import { getElSeg } from '../component/renderers/EventRenderer'
+import EventApi from '../api/EventApi'
 
 /*
 Triggers events and adds/removes core classNames when the user's pointer
@@ -39,7 +40,11 @@ export default class EventHovering {
     if (component.isValidSegDownEl(ev.target as HTMLElement)) {
       component.publiclyTrigger(publicEvName, [
         {
-          event: seg.eventRange!.eventInstance, // TODO: correct arg!
+          event: new EventApi(
+            this.component.getCalendar(),
+            seg.eventRange.eventDef,
+            seg.eventRange.eventInstance
+          ),
           jsEvent: ev,
           view: component.view
         }

+ 1 - 1
src/types/input-types.ts

@@ -11,10 +11,10 @@ import { FormatterInput } from '../datelib/formatting'
 import { DateRangeInput } from '../datelib/date-range'
 import { BusinessHoursDef } from '../structs/business-hours'
 import { EventInput } from '../structs/event'
+import EventApi from '../api/EventApi'
 
 
 // temporary!
-export type EventApi = EventInput
 export type ConstraintInput = DateRangeInput | BusinessHoursDef | 'businessHours'