Adam Shaw 7 лет назад
Родитель
Сommit
5193418d47

+ 2 - 2
src/agenda/AgendaView.ts

@@ -363,7 +363,7 @@ agendaTimeGridMethods = {
 
   // Generates the HTML that will go before the day-of week header cells
   renderHeadIntroHtml(this: TimeGrid) {
-    let { view, theme, dateEnv } = this
+    let { view, theme, dateEnv, dayTable } = this
     let weekStart = this.props.dateProfile.renderRange.start
     let weekText
 
@@ -374,7 +374,7 @@ agendaTimeGridMethods = {
         '<th class="fc-axis fc-week-number ' + theme.getClass('widgetHeader') + '" ' + (view as AgendaView).axisStyleAttr() + '>' +
           buildGotoAnchorHtml( // aside from link, important for matchCellWidths
             view,
-            { date: weekStart, type: 'week', forceOff: this.colCnt > 1 },
+            { date: weekStart, type: 'week', forceOff: dayTable.colCnt > 1 },
             htmlEscape(weekText) // inner HTML
           ) +
         '</th>'

+ 24 - 22
src/agenda/TimeGrid.ts

@@ -1,6 +1,6 @@
 import { htmlEscape } from '../util/html'
 import { htmlToElement, findElements, createElement, removeElement, applyStyle } from '../util/dom-manip'
-import { default as DayTableMixin, DayTableInterface } from '../component/DayTableMixin'
+import { default as DayTableMixin } from '../component/DayTableMixin'
 import PositionCache from '../common/PositionCache'
 import { DateRange, intersectRanges } from '../datelib/date-range'
 import TimeGridEventRenderer from './TimeGridEventRenderer'
@@ -34,12 +34,7 @@ const AGENDA_STOCK_SUB_DURATIONS = [
 
 export default class TimeGrid extends StandardDateComponent {
 
-  dayDates: DayTableInterface['dayDates']
-  daysPerRow: DayTableInterface['daysPerRow']
-  colCnt: DayTableInterface['colCnt']
-  updateDayTable: DayTableInterface['updateDayTable']
-  getCellDate: DayTableInterface['getCellDate']
-
+  dayTable: DayTableMixin
   mirrorRenderer: any
 
   dayRanges: DateRange[] // of start-end of each day
@@ -97,6 +92,8 @@ export default class TimeGrid extends StandardDateComponent {
 
   // Slices up the given span (unzoned start/end with other misc data) into an array of segments
   rangeToSegs(range: DateRange): Seg[] {
+    let { dayTable } = this
+
     range = intersectRanges(range, this.props.dateProfile.validRange)
 
     if (range) {
@@ -105,7 +102,7 @@ export default class TimeGrid extends StandardDateComponent {
 
       for (i = 0; i < segs.length; i++) {
         if (this.isRtl) {
-          segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex
+          segs[i].col = dayTable.daysPerRow - 1 - segs[i].dayIndex
         } else {
           segs[i].col = segs[i].dayIndex
         }
@@ -125,11 +122,12 @@ export default class TimeGrid extends StandardDateComponent {
 
 
   sliceRangeByTimes(range) {
+    let { dayTable } = this
     let segs = []
     let segRange
     let dayIndex
 
-    for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {
+    for (dayIndex = 0; dayIndex < dayTable.daysPerRow; dayIndex++) {
 
       segRange = intersectRanges(range, this.dayRanges[dayIndex])
 
@@ -217,8 +215,13 @@ export default class TimeGrid extends StandardDateComponent {
   ------------------------------------------------------------------------------------------------------------------*/
 
 
-  renderDates() {
-    this.updateDayTable()
+  renderDates(dateProfile) {
+    this.dayTable = new DayTableMixin(
+      dateProfile,
+      this.view.dateProfileGenerator,
+      false
+    )
+
     this.renderSlats()
     this.renderColumns()
   }
@@ -310,10 +313,11 @@ export default class TimeGrid extends StandardDateComponent {
 
 
   renderColumns() {
-    let { theme, dateEnv } = this
+    let { theme, dateEnv, dayTable} = this
+    let { dayDates } = dayTable
     let dateProfile = this.props.dateProfile
 
-    this.dayRanges = this.dayDates.map(function(dayDate) {
+    this.dayRanges = dayDates.map(function(dayDate) {
       return {
         start: dateEnv.add(dayDate, dateProfile.minTime),
         end: dateEnv.add(dayDate, dateProfile.maxTime)
@@ -325,7 +329,7 @@ export default class TimeGrid extends StandardDateComponent {
       let header = new DayTableHeader(this.context, this.headContainerEl)
       header.receiveProps({
         dateProfile,
-        dates: this.dayDates,
+        dates: dayDates,
         datesRepDistinctDays: true,
         renderIntroHtml: this.renderHeadIntroHtml.bind(this)
       })
@@ -335,7 +339,7 @@ export default class TimeGrid extends StandardDateComponent {
     this.rootBgContainerEl.innerHTML =
       '<table class="' + theme.getClass('tableGrid') + '">' +
         bgRow.renderHtml({
-          dates: this.dayDates,
+          dates: dayDates,
           dateProfile,
           renderIntroHtml: this.renderBgIntroHtml.bind(this)
         }) +
@@ -370,7 +374,7 @@ export default class TimeGrid extends StandardDateComponent {
 
     parts.push(this.renderIntroHtml())
 
-    for (let i = 0; i < this.colCnt; i++) {
+    for (let i = 0; i < this.dayTable.colCnt; i++) {
       parts.push(
         '<td>' +
           '<div class="fc-content-col">' +
@@ -417,7 +421,7 @@ export default class TimeGrid extends StandardDateComponent {
     let segsByCol = []
     let i
 
-    for (i = 0; i < this.colCnt; i++) {
+    for (i = 0; i < this.dayTable.colCnt; i++) {
       segsByCol.push([])
     }
 
@@ -436,7 +440,7 @@ export default class TimeGrid extends StandardDateComponent {
     let segs
     let i
 
-    for (col = 0; col < this.colCnt; col++) { // iterate each column grouping
+    for (col = 0; col < this.dayTable.colCnt; col++) { // iterate each column grouping
       segs = segsByCol[col]
 
       for (i = 0; i < segs.length; i++) {
@@ -556,7 +560,7 @@ export default class TimeGrid extends StandardDateComponent {
 
     for (i = 0; i < segs.length; i++) {
       seg = segs[i]
-      dayDate = this.dayDates[seg.dayIndex]
+      dayDate = this.dayTable.dayDates[seg.dayIndex]
 
       seg.top = this.computeDateTop(seg.start, dayDate)
       seg.bottom = Math.max(
@@ -629,7 +633,7 @@ export default class TimeGrid extends StandardDateComponent {
         let localSnapIndex = Math.floor(partial * snapsPerSlot) // the snap # relative to start of slat
         let snapIndex = slatIndex * snapsPerSlot + localSnapIndex
 
-        let dayDate = this.getCellDate(0, colIndex) // row=0
+        let dayDate = this.dayTable.getCellDate(0, colIndex) // row=0
         let time = addDurations(
           this.props.dateProfile.minTime,
           multiplyDuration(this.snapDuration, snapIndex)
@@ -688,5 +692,3 @@ export default class TimeGrid extends StandardDateComponent {
 TimeGrid.prototype.isInteractable = true
 TimeGrid.prototype.doesDragMirror = true
 TimeGrid.prototype.doesDragHighlight = false
-
-DayTableMixin.mixInto(TimeGrid)

+ 4 - 2
src/agenda/TimeGridEventRenderer.ts

@@ -49,9 +49,10 @@ export default class TimeGridEventRenderer extends FgEventRenderer {
 
   computeSizes() {
     let { timeGrid, segsByCol } = this
+    let colCnt = timeGrid.dayTable.colCnt
 
     if (segsByCol) {
-      for (let col = 0; col < timeGrid.colCnt; col++) {
+      for (let col = 0; col < colCnt; col++) {
         let segs = segsByCol[col]
 
         timeGrid.computeSegVerticals(segs) // horizontals relies on this
@@ -63,9 +64,10 @@ export default class TimeGridEventRenderer extends FgEventRenderer {
 
   assignSizes() {
     let { timeGrid, segsByCol } = this
+    let colCnt = timeGrid.dayTable.colCnt
 
     if (segsByCol) {
-      for (let col = 0; col < timeGrid.colCnt; col++) {
+      for (let col = 0; col < colCnt; col++) {
         let segs = segsByCol[col]
 
         timeGrid.assignSegVerticals(segs)

+ 8 - 13
src/basic/BasicView.ts

@@ -13,9 +13,9 @@ import ScrollComponent from '../common/ScrollComponent'
 import View from '../View'
 import BasicViewDateProfileGenerator from './BasicViewDateProfileGenerator'
 import DayGrid from './DayGrid'
-import { DateProfile } from '../DateProfileGenerator'
 import { buildGotoAnchorHtml } from '../component/date-rendering'
 import { StandardDateComponentProps } from '../component/StandardDateComponent'
+import { assignTo } from '../util/object'
 
 const WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' })
 
@@ -94,16 +94,11 @@ export default class BasicView extends View {
   render(props: StandardDateComponentProps) {
     super.render(props)
 
-    this.dayGrid.receiveProps(props)
-  }
-
-
-  renderDates(dateProfile: DateProfile) {
-    this.dayGrid.breakOnWeeks = /year|month|week/.test(
-      this.props.dateProfile.currentRangeUnit
+    this.dayGrid.receiveProps(
+      assignTo({}, props, {
+        breakOnWeeks: /year|month|week/.test(props.dateProfile.currentRangeUnit)
+      })
     )
-
-    super.renderDates(dateProfile)
   }
 
 
@@ -302,15 +297,15 @@ function makeDayGridSubclass(SuperClass) {
 
     // Generates the HTML that will go before content-skeleton cells that display the day/week numbers
     renderNumberIntroHtml(this: DayGrid, row) {
-      let { view, dateEnv } = this
-      let weekStart = this.getCellDate(row, 0)
+      let { view, dateEnv, dayTable } = this
+      let weekStart = dayTable.getCellDate(row, 0)
 
       if ((view as BasicView).colWeekNumbersVisible) {
         return '' +
           '<td class="fc-week-number" ' + (view as BasicView).weekNumberStyleAttr() + '>' +
             buildGotoAnchorHtml( // aside from link, important for matchCellWidths
               view,
-              { date: weekStart, type: 'week', forceOff: this.colCnt === 1 },
+              { date: weekStart, type: 'week', forceOff: dayTable.colCnt === 1 },
               dateEnv.format(weekStart, WEEK_NUM_FORMAT) // inner HTML
             ) +
           '</td>'

+ 41 - 40
src/basic/DayGrid.ts

@@ -7,10 +7,9 @@ import {
   removeElement
 } from '../util/dom-manip'
 import { computeRect } from '../util/dom-geom'
-import View from '../View'
 import PositionCache from '../common/PositionCache'
 import Popover from '../common/Popover'
-import { default as DayTableMixin, DayTableInterface } from '../component/DayTableMixin'
+import { default as DayTableMixin } from '../component/DayTableMixin'
 import DayGridEventRenderer from './DayGridEventRenderer'
 import DayGridMirrorRenderer from './DayGridMirrorRenderer'
 import DayGridFillRenderer from './DayGridFillRenderer'
@@ -35,18 +34,13 @@ const WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' })
 /* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.
 ----------------------------------------------------------------------------------------------------------------------*/
 
-export default class DayGrid extends StandardDateComponent {
+export interface DayGridProps extends StandardDateComponent {
+  breakOnWeeks: boolean
+}
 
-  rowCnt: DayTableInterface['rowCnt']
-  colCnt: DayTableInterface['colCnt']
-  dayDates: DayTableInterface['dayDates']
-  daysPerRow: DayTableInterface['daysPerRow']
-  sliceRangeByRow: DayTableInterface['sliceRangeByRow']
-  updateDayTable: DayTableInterface['updateDayTable']
-  getCellDate: DayTableInterface['getCellDate']
-  getCellRange: DayTableInterface['getCellRange']
-  breakOnWeeks: DayTableInterface['breakOnWeeks']
+export default class DayGrid extends StandardDateComponent {
 
+  dayTable: DayTableMixin
   eventRenderer: DayGridEventRenderer
 
   cellWeekNumbersVisible: boolean = false // display week numbers in day cell?
@@ -83,18 +77,20 @@ export default class DayGrid extends StandardDateComponent {
 
   // Slices up the given span (unzoned start/end with other misc data) into an array of segments
   rangeToSegs(range: DateRange): Seg[] {
+    let { dayTable } = this
+
     range = intersectRanges(range, this.props.dateProfile.validRange)
 
     if (range) {
-      let segs = this.sliceRangeByRow(range)
+      let segs = dayTable.sliceRangeByRow(range)
 
       for (let i = 0; i < segs.length; i++) {
         let seg = segs[i]
         seg.component = this
 
         if (this.isRtl) {
-          seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex
-          seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex
+          seg.leftCol = dayTable.daysPerRow - 1 - seg.lastRowDayIndex
+          seg.rightCol = dayTable.daysPerRow - 1 - seg.firstRowDayIndex
         } else {
           seg.leftCol = seg.firstRowDayIndex
           seg.rightCol = seg.lastRowDayIndex
@@ -132,8 +128,13 @@ export default class DayGrid extends StandardDateComponent {
   ------------------------------------------------------------------------------------------------------------------*/
 
 
-  renderDates() {
-    this.updateDayTable()
+  renderDates(dateProfile) {
+    this.dayTable = new DayTableMixin(
+      dateProfile,
+      this.view.dateProfileGenerator,
+      (this.props as any).breakOnWeeks // HACK
+    )
+
     this.renderGrid()
   }
 
@@ -145,9 +146,9 @@ export default class DayGrid extends StandardDateComponent {
 
   // Renders the rows and columns into the component's `this.el`, which should already be assigned.
   renderGrid() {
-    let { view, dateEnv } = this
-    let rowCnt = this.rowCnt
-    let colCnt = this.colCnt
+    let { view, dateEnv, dayTable } = this
+    let rowCnt = dayTable.rowCnt
+    let colCnt = dayTable.colCnt
     let html = ''
     let row
     let col
@@ -157,8 +158,8 @@ export default class DayGrid extends StandardDateComponent {
       let header = new DayTableHeader(this.context, this.headerContainerEl)
       header.receiveProps({
         dateProfile: this.props.dateProfile,
-        dates: this.dayDates.slice(0, this.colCnt), // because might be mult rows
-        datesRepDistinctDays: this.rowCnt === 1,
+        dates: dayTable.dayDates.slice(0, dayTable.colCnt), // because might be mult rows
+        datesRepDistinctDays: dayTable.rowCnt === 1,
         renderIntroHtml: this.renderHeadIntroHtml.bind(this)
       })
     }
@@ -180,7 +181,7 @@ export default class DayGrid extends StandardDateComponent {
 
     this.colPositions = new PositionCache(
       this.el,
-      this.cellEls.slice(0, this.colCnt), // only the first row
+      this.cellEls.slice(0, dayTable.colCnt), // only the first row
       true,
       false // horizontal
     )
@@ -190,7 +191,7 @@ export default class DayGrid extends StandardDateComponent {
       for (col = 0; col < colCnt; col++) {
         this.publiclyTrigger('dayRender', [
           {
-            date: dateEnv.toDate(this.getCellDate(row, col)),
+            date: dateEnv.toDate(dayTable.getCellDate(row, col)),
             el: this.getCellEl(row, col),
             view
           }
@@ -203,14 +204,15 @@ export default class DayGrid extends StandardDateComponent {
   // Generates the HTML for a single row, which is a div that wraps a table.
   // `row` is the row number.
   renderDayRowHtml(row, isRigid) {
-    let { theme, daysPerRow } = this
+    let { theme, dayTable } = this
+    let { daysPerRow } = dayTable
     let classes = [ 'fc-row', 'fc-week', theme.getClass('dayRow') ]
 
     if (isRigid) {
       classes.push('fc-rigid')
     }
 
-    let dates = this.dayDates.slice(
+    let dates = dayTable.dayDates.slice(
       row * daysPerRow,
       (row + 1) * daysPerRow
     )
@@ -248,7 +250,7 @@ export default class DayGrid extends StandardDateComponent {
 
 
   getIsDayNumbersVisible() {
-    return this.rowCnt > 1
+    return this.dayTable.rowCnt > 1
   }
 
 
@@ -287,12 +289,13 @@ export default class DayGrid extends StandardDateComponent {
 
 
   renderNumberCellsHtml(row) {
+    let { dayTable } = this
     let htmls = []
     let col
     let date
 
-    for (col = 0; col < this.colCnt; col++) {
-      date = this.getCellDate(row, col)
+    for (col = 0; col < dayTable.colCnt; col++) {
+      date = dayTable.getCellDate(row, col)
       htmls.push(this.renderNumberCellHtml(date))
     }
 
@@ -360,7 +363,7 @@ export default class DayGrid extends StandardDateComponent {
   buildPositionCaches() {
     this.colPositions.build()
     this.rowPositions.build()
-    this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding // hack
+    this.rowPositions.bottoms[this.dayTable.rowCnt - 1] += this.bottomCoordPadding // hack
   }
 
 
@@ -379,7 +382,7 @@ export default class DayGrid extends StandardDateComponent {
 
 
   queryHit(leftOffset, topOffset): Hit {
-    let { colPositions, rowPositions, offsetTracker } = this
+    let { colPositions, rowPositions, offsetTracker, dayTable } = this
 
     if (offsetTracker.isWithinClipping(leftOffset, topOffset)) {
       let leftOrigin = offsetTracker.computeLeft()
@@ -391,7 +394,7 @@ export default class DayGrid extends StandardDateComponent {
         return {
           component: this,
           dateSpan: {
-            range: this.getCellRange(row, col),
+            range: dayTable.getCellRange(row, col),
             allDay: true
           },
           dayEl: this.getCellEl(row, col),
@@ -414,7 +417,7 @@ export default class DayGrid extends StandardDateComponent {
 
 
   getCellEl(row, col) {
-    return this.cellEls[row * this.colCnt + col]
+    return this.cellEls[row * this.dayTable.colCnt + col]
   }
 
 
@@ -600,7 +603,7 @@ export default class DayGrid extends StandardDateComponent {
         }
       }
 
-      emptyCellsUntil(this.colCnt) // finish off the level
+      emptyCellsUntil(this.dayTable.colCnt) // finish off the level
       rowStruct.moreEls = moreNodes // for easy undoing later
       rowStruct.limitedEls = limitedNodes // for easy undoing later
     }
@@ -635,7 +638,7 @@ export default class DayGrid extends StandardDateComponent {
     a.innerText = this.getMoreLinkText(hiddenSegs.length)
     a.addEventListener('click', (ev) => {
       let clickOption = this.opt('eventLimitClick')
-      let date = this.getCellDate(row, col)
+      let date = this.dayTable.getCellDate(row, col)
       let moreEl = ev.currentTarget as HTMLElement
       let dayEl = this.getCellEl(row, col)
       let allSegs = this.getCellSegs(row, col)
@@ -673,12 +676,12 @@ export default class DayGrid extends StandardDateComponent {
 
   // Reveals the popover that displays all events within a cell
   showSegPopover(row, col, moreLink: HTMLElement, segs) {
-    let { calendar, view, theme } = this
+    let { calendar, view, theme, dayTable } = this
     let moreWrap = moreLink.parentNode as HTMLElement // the <div> wrapper around the <a>
     let topEl: HTMLElement // the element we want to match the top coordinate of
     let options
 
-    if (this.rowCnt === 1) {
+    if (dayTable.rowCnt === 1) {
       topEl = view.el // will cause the popover to cover any sort of header
     } else {
       topEl = this.rowEls[row] // will align with top of row
@@ -695,7 +698,7 @@ export default class DayGrid extends StandardDateComponent {
           el
         )
         this.updateSegPopoverTile(
-          this.getCellDate(row, col),
+          dayTable.getCellDate(row, col),
           segs
         )
       },
@@ -789,5 +792,3 @@ export default class DayGrid extends StandardDateComponent {
 DayGrid.prototype.isInteractable = true
 DayGrid.prototype.doesDragMirror = false
 DayGrid.prototype.doesDragHighlight = true
-
-DayTableMixin.mixInto(DayGrid)

+ 3 - 3
src/basic/DayGridEventRenderer.ts

@@ -72,7 +72,7 @@ export default class DayGridEventRenderer extends SimpleDayGridEventRenderer {
   // NOTE: modifies rowSegs
   renderSegRow(row, rowSegs) {
     let { dayGrid } = this
-    let colCnt = dayGrid.colCnt
+    let colCnt = dayGrid.dayTable.colCnt
     let segLevels = this.buildSegLevels(rowSegs) // group into sub-arrays of levels
     let levelCnt = Math.max(1, segLevels.length) // ensure at least one level
     let tbody = document.createElement('tbody')
@@ -206,7 +206,7 @@ export default class DayGridEventRenderer extends SimpleDayGridEventRenderer {
     let segRows = []
     let i
 
-    for (i = 0; i < this.dayGrid.rowCnt; i++) {
+    for (i = 0; i < this.dayGrid.dayTable.rowCnt; i++) {
       segRows.push([])
     }
 
@@ -220,7 +220,7 @@ export default class DayGridEventRenderer extends SimpleDayGridEventRenderer {
 
   // Computes a default `displayEventEnd` value if one is not expliclty defined
   computeDisplayEventEnd() {
-    return this.dayGrid.colCnt === 1 // we'll likely have space if there's only one day
+    return this.dayGrid.dayTable.colCnt === 1 // we'll likely have space if there's only one day
   }
 
 }

+ 1 - 1
src/basic/DayGridFillRenderer.ts

@@ -34,7 +34,7 @@ export default class DayGridFillRenderer extends FillRenderer {
   // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.
   renderFillRow(type, seg: Seg): HTMLElement {
     let { dayGrid } = this
-    let colCnt = dayGrid.colCnt
+    let colCnt = dayGrid.dayTable.colCnt
     let startCol = seg.leftCol
     let endCol = seg.rightCol + 1
     let className

+ 1 - 1
src/basic/MonthView.ts

@@ -14,7 +14,7 @@ export default class MonthView extends BasicView {
 
     // if auto, make the height of each row the height that it would be if there were 6 weeks
     if (isAuto) {
-      height *= this.dayGrid.rowCnt / 6
+      height *= this.dayGrid.dayTable.rowCnt / 6
     }
 
     distributeHeight(this.dayGrid.rowEls, height, !isAuto) // if auto, don't compensate for height-hogging rows

+ 8 - 29
src/component/DayTableMixin.ts

@@ -1,26 +1,13 @@
-import Mixin from '../common/Mixin'
 import { DateMarker, addDays, diffDays } from '../datelib/marker'
 import { DateRange } from '../datelib/date-range'
-
-export interface DayTableInterface {
-  dayDates: DateMarker[]
-  daysPerRow: any
-  rowCnt: any
-  colCnt: any
-  breakOnWeeks: boolean
-  updateDayTable()
-  getCellDate(row, col)
-  getCellRange(row, col): DateRange
-  sliceRangeByRow(range)
-}
+import DateProfileGenerator, { DateProfile } from 'src/DateProfileGenerator'
 
 /*
-A set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.
-Prerequisite: the object being mixed into needs to be a *Grid*
+computes date/index/cell information.
+doesn't do any rendering.
 */
-export default class DayTableMixin extends Mixin implements DayTableInterface {
+export default class DayTable { // TODO: rename file
 
-  breakOnWeeks: boolean // should create a new row for each week? not specified, so default is FALSY
   dayDates: DateMarker[] // whole-day dates for each column. left to right
   dayIndices: any // for each day from start, the offset
   daysPerRow: any
@@ -29,16 +16,8 @@ export default class DayTableMixin extends Mixin implements DayTableInterface {
 
 
   // Populates internal variables used for date calculation and rendering
-  /*
-  sets dayDates
-  sets dayIndices ( dayoffset -> something )
-  sets daysPerRow
-  sets rowCnt
-  sets colCnt
-  */
-  updateDayTable() {
-    let view = (this as any).view
-    let dateProfile = (this as any).props.dateProfile
+  // breakOnWeeks - should create a new row for each week? not specified, so default is FALSY
+  constructor(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator, breakOnWeeks: boolean) {
     let date: DateMarker = dateProfile.renderRange.start
     let end: DateMarker = dateProfile.renderRange.end
     let dayIndex = -1
@@ -49,7 +28,7 @@ export default class DayTableMixin extends Mixin implements DayTableInterface {
     let rowCnt
 
     while (date < end) { // loop each day from start to end
-      if (view.dateProfileGenerator.isHiddenDay(date)) {
+      if (dateProfileGenerator.isHiddenDay(date)) {
         dayIndices.push(dayIndex + 0.5) // mark that it's between indices
       } else {
         dayIndex++
@@ -59,7 +38,7 @@ export default class DayTableMixin extends Mixin implements DayTableInterface {
       date = addDays(date, 1)
     }
 
-    if (this.breakOnWeeks) {
+    if (breakOnWeeks) {
       // count columns until the day-of-week repeats
       firstDay = dayDates[0].getUTCDay()
       for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {