Ver código fonte

change where eventUis are generates

Adam Shaw 7 anos atrás
pai
commit
4453469680

+ 2 - 1
src/Calendar.ts

@@ -575,7 +575,8 @@ export default class Calendar {
         this.renderableEventStore :
         state.eventStore
 
-    let eventUis = this.computeEventDefUis(
+    // setting state here, eek
+    let eventUis = this.state.eventUis = this.computeEventDefUis(
       renderableEventStore.defs,
       state.eventSources,
       renderedView.options

+ 13 - 11
src/agenda/AgendaView.ts

@@ -198,8 +198,8 @@ export default class AgendaView extends View {
       eventUis: renderState.eventUis,
       dateSelection: timedSelection,
       eventSelection: renderState.eventSelection,
-      eventDrag: this.buildEventDragForTimeGrid(renderState.eventDrag, renderState.eventUis),
-      eventResize: this.buildEventResizeForTimeGrid(renderState.eventResize, renderState.eventUis),
+      eventDrag: this.buildEventDragForTimeGrid(renderState.eventDrag),
+      eventResize: this.buildEventResizeForTimeGrid(renderState.eventResize),
       businessHours: renderState.businessHours
     }, forceFlags)
 
@@ -210,8 +210,8 @@ export default class AgendaView extends View {
         eventUis: renderState.eventUis,
         dateSelection: allDaySeletion,
         eventSelection: renderState.eventSelection,
-        eventDrag: this.buildEventDragForDayGrid(renderState.eventDrag, renderState.eventUis),
-        eventResize: this.buildEventResizeForDayGrid(renderState.eventResize, renderState.eventUis),
+        eventDrag: this.buildEventDragForDayGrid(renderState.eventDrag),
+        eventResize: this.buildEventResizeForDayGrid(renderState.eventResize),
         businessHours: renderState.businessHours
       }, forceFlags)
     }
@@ -429,15 +429,16 @@ function filterEventsForTimeGrid(eventStore: EventStore, eventUis: EventUiHash):
 
 function filterEventsForDayGrid(eventStore: EventStore, eventUis: EventUiHash): EventStore {
   return filterEventStoreDefs(eventStore, function(eventDef) {
-    return eventDef.isAllDay || hasBgRendering(eventUis[eventDef.defId])
+    return eventDef.isAllDay
   })
 }
 
-function buildInteractionForTimeGrid(state: EventInteractionState, eventUis: EventUiHash): EventInteractionState {
+function buildInteractionForTimeGrid(state: EventInteractionState): EventInteractionState {
   if (state) {
     return {
-      affectedEvents: filterEventsForTimeGrid(state.affectedEvents, eventUis),
-      mutatedEvents: filterEventsForTimeGrid(state.mutatedEvents, eventUis),
+      affectedEvents: filterEventsForTimeGrid(state.affectedEvents, state.eventUis),
+      mutatedEvents: filterEventsForTimeGrid(state.mutatedEvents, state.eventUis),
+      eventUis: state.eventUis,
       isEvent: state.isEvent,
       origSeg: state.origSeg
     }
@@ -445,11 +446,12 @@ function buildInteractionForTimeGrid(state: EventInteractionState, eventUis: Eve
   return null
 }
 
-function buildInteractionForDayGrid(state: EventInteractionState, eventUis: EventUiHash): EventInteractionState {
+function buildInteractionForDayGrid(state: EventInteractionState): EventInteractionState {
   if (state) {
     return {
-      affectedEvents: filterEventsForDayGrid(state.affectedEvents, eventUis),
-      mutatedEvents: filterEventsForDayGrid(state.mutatedEvents, eventUis),
+      affectedEvents: filterEventsForDayGrid(state.affectedEvents, state.eventUis),
+      mutatedEvents: filterEventsForDayGrid(state.mutatedEvents, state.eventUis),
+      eventUis: state.eventUis,
       isEvent: state.isEvent,
       origSeg: state.origSeg
     }

+ 3 - 5
src/agenda/TimeGrid.ts

@@ -14,6 +14,7 @@ import OffsetTracker from '../common/OffsetTracker'
 import { DateSpan } from '../structs/date-span'
 import { EventStore } from '../structs/event-store'
 import { Hit } from '../interactions/HitDragging'
+import { EventUiHash } from '../component/event-rendering'
 
 /* A component that renders one or more columns of vertical time slots
 ----------------------------------------------------------------------------------------------------------------------*/
@@ -639,12 +640,9 @@ export default class TimeGrid extends DateComponent {
 
 
   // Renders a visual indication of an event being resized
-  renderEventResize(eventStore: EventStore, origSeg) {
+  renderEventResize(eventStore: EventStore, eventUis: EventUiHash, origSeg) {
     let segs = this.eventRangesToSegs(
-      this.eventStoreToRanges(
-        eventStore,
-        this.eventUis // bad to use this here
-      )
+      this.eventStoreToRanges(eventStore, eventUis)
     )
 
     this.helperRenderer.renderEventResizingSegs(segs, origSeg)

+ 3 - 6
src/basic/DayGrid.ts

@@ -22,7 +22,7 @@ import DayTile from './DayTile'
 import { Hit } from '../interactions/HitDragging'
 import { DateRange, rangeContainsMarker, intersectRanges } from '../datelib/date-range'
 import OffsetTracker from '../common/OffsetTracker'
-import { EventRenderRange } from '../component/event-rendering'
+import { EventRenderRange, EventUiHash } from '../component/event-rendering'
 
 const DAY_NUM_FORMAT = createFormatter({ day: 'numeric' })
 const WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' })
@@ -395,12 +395,9 @@ export default class DayGrid extends DateComponent {
 
 
   // Renders a visual indication of an event being resized
-  renderEventResize(eventStore: EventStore, origSeg) {
+  renderEventResize(eventStore: EventStore, eventUis: EventUiHash, origSeg) {
     let segs = this.eventRangesToSegs(
-      this.eventStoreToRanges(
-        eventStore,
-        this.eventUis // bad to use this here
-      )
+      this.eventStoreToRanges(eventStore, eventUis)
     )
 
     this.renderHighlightSegs(segs)

+ 14 - 8
src/component/DateComponent.ts

@@ -636,7 +636,12 @@ export default abstract class DateComponent extends Component {
 
   renderEventDragState(state: EventInteractionState) {
     this.hideSegsByHash(state.affectedEvents.instances)
-    this.renderEventDrag(state.mutatedEvents, state.isEvent, state.origSeg)
+    this.renderEventDrag(
+      state.mutatedEvents,
+      state.eventUis,
+      state.isEvent,
+      state.origSeg
+    )
   }
 
 
@@ -648,12 +653,9 @@ export default abstract class DateComponent extends Component {
 
   // Renders a visual indication of a event or external-element drag over the given drop zone.
   // If an external-element, seg will be `null`.
-  renderEventDrag(eventStore: EventStore, isEvent: boolean, origSeg: Seg | null) {
+  renderEventDrag(eventStore: EventStore, eventUis: EventUiHash, isEvent: boolean, origSeg: Seg | null) {
     let segs = this.eventRangesToSegs(
-      this.eventStoreToRanges(
-        eventStore,
-        this.eventUis // bad to use this here
-      )
+      this.eventStoreToRanges(eventStore, eventUis)
     )
 
     // if the user is dragging something that is considered an event with real event data,
@@ -689,7 +691,11 @@ export default abstract class DateComponent extends Component {
 
   renderEventResizeState(state: EventInteractionState) {
     this.hideSegsByHash(state.affectedEvents.instances)
-    this.renderEventResize(state.mutatedEvents, state.origSeg)
+    this.renderEventResize(
+      state.mutatedEvents,
+      state.eventUis,
+      state.origSeg
+    )
   }
 
 
@@ -700,7 +706,7 @@ export default abstract class DateComponent extends Component {
 
 
   // Renders a visual indication of an event being resized.
-  renderEventResize(eventStore: EventStore, origSeg: any) {
+  renderEventResize(eventStore: EventStore, eventUis: EventUiHash, origSeg: any) {
     // subclasses can implement
   }
 

+ 7 - 3
src/component/event-rendering.ts

@@ -140,7 +140,9 @@ export function computeEventDefUi(eventDef: EventDef, eventSources: EventSourceH
   return refinedHashes.reduce(combineUis)
 }
 
-function refineScopedUi(input) { // has word "event" in prop names
+// has word "event" in prop names
+// FYI: startEditable/durationEditable might end up being null
+function refineScopedUi(input): EventUi {
   return {
     startEditable: (input.startEditable != null) ? input.startEditable : input.editable,
     durationEditable: (input.durationEditable != null) ? input.durationEditable : input.editable,
@@ -152,7 +154,9 @@ function refineScopedUi(input) { // has word "event" in prop names
   }
 }
 
-function refineUnscopedUi(input) { // does NOT have the word "event" in prop names
+// does NOT have the word "event" in prop names
+// FYI: startEditable/durationEditable might end up being null
+function refineUnscopedUi(input): EventUi {
   return {
     startEditable: (input.startEditable != null) ? input.startEditable : input.editable,
     durationEditable: (input.durationEditable != null) ? input.durationEditable : input.editable,
@@ -164,7 +168,7 @@ function refineUnscopedUi(input) { // does NOT have the word "event" in prop nam
   }
 }
 
-function combineUis(hash0, hash1) { // hash1 has higher precedence
+function combineUis(hash0, hash1): EventUi { // hash1 has higher precedence
   return {
     startEditable: (hash1.startEditable != null) ? hash1.startEditable : hash0.startEditable,
     durationEditable: (hash1.durationEditable != null) ? hash1.durationEditable : hash0.durationEditable,

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

@@ -11,6 +11,7 @@ import { EventInteractionState } from '../interactions/event-interaction-state'
 import { DragMetaInput, DragMeta, parseDragMeta } from '../structs/drag-meta'
 import EventApi from '../api/EventApi'
 import { elementMatches } from '../util/dom-manip'
+import { computeEventDefUis } from '../component/event-rendering'
 
 export interface EventRes {
   def: EventDef
@@ -66,9 +67,17 @@ export default class ExternalElementDragging {
       }
     }
 
+    // TODO: always store as event-store?
+    let droppableEventStore = droppableEvent ? toEventStore(droppableEvent) : createEmptyEventStore()
+
+    // we need to compute UI objects. no source or original calendar options,
+    // so just compute based off event defs.
+    let eventUis = computeEventDefUis(droppableEventStore.defs, {}, {})
+
     this.displayDrag(receivingCalendar, {
       affectedEvents: createEmptyEventStore(),
-      mutatedEvents: droppableEvent ? toEventStore(droppableEvent) : createEmptyEventStore(),
+      mutatedEvents: droppableEventStore,
+      eventUis,
       isEvent: this.dragMeta!.create,
       origSeg: null
     })

+ 2 - 0
src/interactions/EventDragging.ts

@@ -159,6 +159,7 @@ export default class EventDragging { // TODO: rename to EventSelectingAndDraggin
     this.displayDrag(receivingCalendar, {
       affectedEvents: relatedEvents,
       mutatedEvents: mutatedRelatedEvents || createEmptyEventStore(),
+      eventUis: initialCalendar.state.eventUis,
       isEvent: true,
       origSeg: this.subjectSeg
     })
@@ -297,6 +298,7 @@ export default class EventDragging { // TODO: rename to EventSelectingAndDraggin
           state: {
             affectedEvents: state.affectedEvents,
             mutatedEvents: createEmptyEventStore(),
+            eventUis: {},
             isEvent: true,
             origSeg: state.origSeg
           }

+ 1 - 0
src/interactions/EventResizing.ts

@@ -113,6 +113,7 @@ export default class EventDragging {
         state: {
           affectedEvents: relatedEvents,
           mutatedEvents: mutatedRelatedEvents,
+          eventUis: calendar.state.eventUis,
           isEvent: true,
           origSeg: this.draggingSeg
         }

+ 2 - 0
src/interactions/event-interaction-state.ts

@@ -1,9 +1,11 @@
 import { EventStore } from '../structs/event-store'
 import { Seg } from '../component/DateComponent'
+import { EventUiHash } from '../component/event-rendering'
 
 export interface EventInteractionState {
   affectedEvents: EventStore
   mutatedEvents: EventStore
+  eventUis: EventUiHash
   isEvent: boolean
   origSeg: Seg | null
 }