Prechádzať zdrojové kódy

beginnings of EventClicking

Adam Shaw 7 rokov pred
rodič
commit
260a5043f4

+ 4 - 1
src/common/GlobalContext.ts

@@ -1,6 +1,7 @@
 import InteractiveDateComponent from '../component/InteractiveDateComponent'
 import DateClicking from '../interactions/DateClicking'
 import DateSelecting from '../interactions/DateSelecting'
+import EventClicking from '../interactions/EventClicking'
 
 let componentCnt = 0
 let componentHash = {}
@@ -42,13 +43,15 @@ export default {
 
   bindComponent(component: InteractiveDateComponent) {
     listenerHash[component.uid] = {
-      dateClicking: new DateClicking(component)
+      dateClicking: new DateClicking(component),
+      eventClicking: new EventClicking(component)
     }
   },
 
   unbindComponent(component: InteractiveDateComponent) {
     let listeners = listenerHash[component.uid]
     listeners.dateClicking.destroy()
+    listeners.eventClicking.destroy()
     delete listenerHash[component.uid]
   }
 

+ 35 - 0
src/interactions/EventClicking.ts

@@ -0,0 +1,35 @@
+import InteractiveDateComponent from '../component/InteractiveDateComponent'
+import { listenBySelector } from '../util/dom-event'
+
+export default class EventClicking {
+
+  component: InteractiveDateComponent
+  destroy: () => void
+
+  constructor(component: InteractiveDateComponent) {
+    this.component = component
+    this.destroy = listenBySelector(component.el, 'click', component.segSelector, this.onSegClick)
+  }
+
+  // PROBLEM: it's firing twice because dayGrid is within Month view
+
+  onSegClick = (ev: UIEvent, segEl: HTMLElement) => {
+    let { component } = this
+    let seg = (segEl as any).fcSeg // put there by EventRenderer
+
+    if (component.isValidSegInteraction(segEl as HTMLElement)) {
+      let res = component.publiclyTrigger('eventClick', [ // can return `false` to cancel
+        {
+          event: seg.eventRange.eventInstance, // TODO: correct arg!
+          jsEvent: ev,
+          view: component.view
+        }
+      ])
+
+      if (res === false) {
+        ev.preventDefault() // don't visit link
+      }
+    }
+  }
+
+}