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

improve interface for splitter

Adam Shaw 7 лет назад
Родитель
Сommit
8278bbe221
3 измененных файлов с 19 добавлено и 28 удалено
  1. 2 4
      src/agenda/AgendaView.ts
  2. 5 2
      src/agenda/AllDaySplitter.ts
  3. 12 22
      src/component/event-splitting.ts

+ 2 - 4
src/agenda/AgendaView.ts

@@ -58,7 +58,7 @@ export default class AgendaView extends AbstractAgendaView {
   render(props: ViewProps) {
     super.render(props) // for flags for updateSize
 
-    let { dateProfile, businessHours } = this.props
+    let { dateProfile } = this.props
     let dayTable = this.buildDayTable(dateProfile, this.dateProfileGenerator)
     let splitProps = this.splitter.splitProps(props)
 
@@ -74,8 +74,7 @@ export default class AgendaView extends AbstractAgendaView {
     this.simpleTimeGrid.receiveProps(
       Object.assign({}, splitProps['timed'], {
         dateProfile,
-        dayTable,
-        businessHours
+        dayTable
       })
     )
 
@@ -84,7 +83,6 @@ export default class AgendaView extends AbstractAgendaView {
         Object.assign({}, splitProps['allDay'], {
           dateProfile,
           dayTable,
-          businessHours,
           nextDayThreshold: this.nextDayThreshold,
           isRigid: false
         })

+ 5 - 2
src/agenda/AllDaySplitter.ts

@@ -5,8 +5,11 @@ import { DateSpan } from '../structs/date-span'
 
 export default class AllDaySplitter extends Splitter {
 
-  getAllKeys() {
-    return [ 'allDay', 'timed' ]
+  getKeyInfo() {
+    return {
+      allDay: {},
+      timed: {}
+    }
   }
 
   getKeysForDateSpan(dateSpan: DateSpan): string[] {

+ 12 - 22
src/component/event-splitting.ts

@@ -26,45 +26,35 @@ export default abstract class Splitter<PropsType extends SplittableProps = Split
   private splitIndividualUi = memoize(this._splitIndividualUi)
   private splitEventDrag = memoize(this._splitInteraction)
   private splitEventResize = memoize(this._splitInteraction)
-  protected eventUiBuilders: { [key: string]: typeof buildEventUiForKey } = {}
+  private eventUiBuilders: { [key: string]: typeof buildEventUiForKey } = {}
 
-  abstract getAllKeys(props: PropsType): string[]
+  abstract getKeyInfo(props: PropsType): { [key: string]: { ui?: EventUi, businessHours?: EventStore } }
   abstract getKeysForDateSpan(dateSpan: DateSpan): string[]
   abstract getKeysForEventDef(eventDef: EventDef): string[]
 
-  getKeyEventUis(props: PropsType): EventUiHash {
-    return {}
-  }
-
-  getKeyBusinessHours(props: PropsType): { [key: string]: EventStore } {
-    return {}
-  }
-
   splitProps(props: PropsType): { [key: string]: SplittableProps } {
     let oldEventUiBuilders = this.eventUiBuilders
     this.eventUiBuilders = {}
 
-    let keys = this.getAllKeys(props)
-    let keyEventUis = this.getKeyEventUis(props)
-    let keyBusinessHours = this.getKeyBusinessHours(props)
-
-    let keysByDefId = this.getKeysForEventDefs(props.eventStore)
+    let keyInfos = this.getKeyInfo(props)
+    let defIdKeys = this.getKeysForEventDefs(props.eventStore)
     let dateSelections = this.splitDateSelection(props.dateSelection)
-    let individualUi = this.splitIndividualUi(props.eventUiBases, keysByDefId)
-    let eventStores = this.splitEventStore(props.eventStore, keysByDefId)
-    let eventDrags = this.splitEventDrag(props.eventDrag, keysByDefId)
-    let eventResizes = this.splitEventResize(props.eventResize, keysByDefId)
+    let individualUi = this.splitIndividualUi(props.eventUiBases, defIdKeys)
+    let eventStores = this.splitEventStore(props.eventStore, defIdKeys)
+    let eventDrags = this.splitEventDrag(props.eventDrag, defIdKeys)
+    let eventResizes = this.splitEventResize(props.eventResize, defIdKeys)
     let splitProps: { [key: string]: SplittableProps } = {}
 
-    for (let key of keys) {
+    for (let key in keyInfos) {
+      let keyInfo = keyInfos[key]
       let eventStore = eventStores[key] || EMPTY_EVENT_STORE
       let buildEventUi = this.eventUiBuilders[key] = oldEventUiBuilders[key] || memoize(buildEventUiForKey)
 
       splitProps[key] = {
-        businessHours: keyBusinessHours[key] || props.businessHours,
+        businessHours: keyInfo.businessHours || props.businessHours,
         dateSelection: dateSelections[key] || null,
         eventStore,
-        eventUiBases: buildEventUi(props.eventUiBases[''], keyEventUis[key], individualUi[key]),
+        eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),
         eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',
         eventDrag: eventDrags[key] || null,
         eventResize: eventResizes[key] || null