Adam Shaw 6 лет назад
Родитель
Сommit
9d7ccede40
1 измененных файлов с 32 добавлено и 17 удалено
  1. 32 17
      packages/core/src/Calendar.tsx

+ 32 - 17
packages/core/src/Calendar.tsx

@@ -102,6 +102,8 @@ export default class Calendar {
   interactionsStore: { [componentUid: string]: Interaction[] } = {}
   interactionsStore: { [componentUid: string]: Interaction[] } = {}
 
 
   state: CalendarState
   state: CalendarState
+  isRendering = false
+  isRendered = false
   renderRunner: DelayedRunner
   renderRunner: DelayedRunner
   actionRunner: TaskRunner<Action> // for reducer. bad name
   actionRunner: TaskRunner<Action> // for reducer. bad name
   afterSizingTriggers: any = {}
   afterSizingTriggers: any = {}
@@ -125,7 +127,6 @@ export default class Calendar {
     let renderRunner = this.renderRunner = new DelayedRunner(
     let renderRunner = this.renderRunner = new DelayedRunner(
       this.updateComponent.bind(this)
       this.updateComponent.bind(this)
     )
     )
-    renderRunner.pause() // start out paused, until .render() is called
 
 
     let actionRunner = this.actionRunner = new TaskRunner(
     let actionRunner = this.actionRunner = new TaskRunner(
       this.runAction.bind(this),
       this.runAction.bind(this),
@@ -164,25 +165,18 @@ export default class Calendar {
 
 
 
 
   render() {
   render() {
-    if (!this.component) {
+    if (!this.isRendering) {
+      this.isRendering = true
       this.renderableEventStore = createEmptyEventStore()
       this.renderableEventStore = createEmptyEventStore()
+      this.renderRunner.request()
     }
     }
-
-    this.renderRunner.resume() // will run tasks immediately and ignore any delay
   }
   }
 
 
 
 
   destroy() {
   destroy() {
-    this.renderRunner.pause()
-
-    if (this.component) {
-      render(null, this.el)
-
-      for (let interaction of this.calendarInteractions) {
-        interaction.destroy()
-      }
-
-      this.publiclyTrigger('_destroyed')
+    if (this.isRendering) {
+      this.isRendering = false
+      this.renderRunner.request()
     }
     }
   }
   }
 
 
@@ -302,10 +296,20 @@ export default class Calendar {
   }
   }
 
 
 
 
-  /*
-  don't call this directly. use executeRender instead
-  */
   updateComponent() {
   updateComponent() {
+    if (this.isRendering) {
+      this.renderComponent()
+      this.isRendered = true
+    } else {
+      if (this.isRendered) {
+        this.destroyComponent()
+        this.isRendered = false
+      }
+    }
+  }
+
+
+  renderComponent() {
     let { context, state } = this
     let { context, state } = this
     let { viewType } = state
     let { viewType } = state
     let viewSpec = this.viewSpecs[viewType]
     let viewSpec = this.viewSpecs[viewType]
@@ -377,6 +381,17 @@ export default class Calendar {
   }
   }
 
 
 
 
+  destroyComponent() {
+    render(null, this.el)
+
+    for (let interaction of this.calendarInteractions) {
+      interaction.destroy()
+    }
+
+    this.publiclyTrigger('_destroyed')
+  }
+
+
   // Options
   // Options
   // -----------------------------------------------------------------------------------------------------------------
   // -----------------------------------------------------------------------------------------------------------------