1import SingleEventDef from '../../models/event/SingleEventDef'
2import EventFootprint from '../../models/event/EventFootprint'
3import EventSource from '../../models/event-source/EventSource'
4
5
6export default class HelperRenderer {
7
8  view: any
9  component: any
10  eventRenderer: any
11  helperEls: any
12
13
14  constructor(component, eventRenderer) {
15    this.view = component._getView()
16    this.component = component
17    this.eventRenderer = eventRenderer
18  }
19
20
21  renderComponentFootprint(componentFootprint) {
22    this.renderEventFootprints([
23      this.fabricateEventFootprint(componentFootprint)
24    ])
25  }
26
27
28  renderEventDraggingFootprints(eventFootprints, sourceSeg, isTouch) {
29    this.renderEventFootprints(
30      eventFootprints,
31      sourceSeg,
32      'fc-dragging',
33      isTouch ? null : this.view.opt('dragOpacity')
34    )
35  }
36
37
38  renderEventResizingFootprints(eventFootprints, sourceSeg, isTouch) {
39    this.renderEventFootprints(
40      eventFootprints,
41      sourceSeg,
42      'fc-resizing'
43    )
44  }
45
46
47  renderEventFootprints(eventFootprints, sourceSeg?, extraClassNames?, opacity?) {
48    let segs = this.component.eventFootprintsToSegs(eventFootprints)
49    let classNames = 'fc-helper ' + (extraClassNames || '')
50    let i
51
52    // assigns each seg's el and returns a subset of segs that were rendered
53    segs = this.eventRenderer.renderFgSegEls(segs)
54
55    for (i = 0; i < segs.length; i++) {
56      segs[i].el.addClass(classNames)
57    }
58
59    if (opacity != null) {
60      for (i = 0; i < segs.length; i++) {
61        segs[i].el.css('opacity', opacity)
62      }
63    }
64
65    this.helperEls = this.renderSegs(segs, sourceSeg)
66  }
67
68
69  /*
70  Must return all mock event elements
71  */
72  renderSegs(segs, sourceSeg?) {
73    // Subclasses must implement
74  }
75
76
77  unrender() {
78    if (this.helperEls) {
79      this.helperEls.remove()
80      this.helperEls = null
81    }
82  }
83
84
85  fabricateEventFootprint(componentFootprint) {
86    let calendar = this.view.calendar
87    let eventDateProfile = calendar.footprintToDateProfile(componentFootprint)
88    let dummyEvent = new SingleEventDef(new EventSource(calendar))
89    let dummyInstance
90
91    dummyEvent.dateProfile = eventDateProfile
92    dummyInstance = dummyEvent.buildInstance()
93
94    return new EventFootprint(componentFootprint, dummyEvent, dummyInstance)
95  }
96
97}
98