Adam Shaw 7 éve
szülő
commit
c03a21f628
4 módosított fájl, 69 hozzáadás és 69 törlés
  1. 2 2
      src/agenda/AgendaView.ts
  2. 41 50
      src/agenda/SimpleTimeGrid.ts
  3. 16 14
      src/basic/SimpleDayGrid.ts
  4. 10 3
      src/exports.ts

+ 2 - 2
src/agenda/AgendaView.ts

@@ -50,7 +50,7 @@ export default class AgendaView extends AbstractAgendaView {
   }
   }
 
 
   render(props: ViewProps) {
   render(props: ViewProps) {
-    super.render(props)
+    super.render(props) // for flags for updateSize
 
 
     let { dateProfile, dateSelection } = this.props
     let { dateProfile, dateSelection } = this.props
     let dayTable = this.buildDayTable(dateProfile, this.dateProfileGenerator)
     let dayTable = this.buildDayTable(dateProfile, this.dateProfileGenerator)
@@ -100,7 +100,7 @@ export default class AgendaView extends AbstractAgendaView {
 }
 }
 
 
 function buildDayTable(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): DayTable {
 function buildDayTable(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): DayTable {
-  let daySeries = new DaySeries(dateProfile.renderRange, this.dateProfileGenerator)
+  let daySeries = new DaySeries(dateProfile.renderRange, dateProfileGenerator)
 
 
   return new DayTable(daySeries, false)
   return new DayTable(daySeries, false)
 }
 }

+ 41 - 50
src/agenda/SimpleTimeGrid.ts

@@ -11,7 +11,7 @@ import { sliceBusinessHours } from '../structs/business-hours'
 import DayTable from '../common/DayTable'
 import DayTable from '../common/DayTable'
 import { DateEnv } from '../datelib/env'
 import { DateEnv } from '../datelib/env'
 import { DateMarker, addMs } from '../datelib/marker'
 import { DateMarker, addMs } from '../datelib/marker'
-import { EventSegUiInteractionState } from '../component/DateComponent'
+import DateComponent, { EventSegUiInteractionState } from '../component/DateComponent'
 
 
 export interface SimpleTimeGridProps {
 export interface SimpleTimeGridProps {
   dateProfile: DateProfile | null
   dateProfile: DateProfile | null
@@ -28,9 +28,9 @@ export interface SimpleTimeGridProps {
 export default class SimpleTimeGrid extends Component<SimpleTimeGridProps> {
 export default class SimpleTimeGrid extends Component<SimpleTimeGridProps> {
 
 
   timeGrid: TimeGrid
   timeGrid: TimeGrid
-  colRanges: DateRange[]
+  dayRanges: DateRange[]
 
 
-  buildColRanges = reselector(buildColRanges)
+  buildDayRanges = reselector(buildDayRanges)
   eventStoreToSegs = reselector(eventStoreToSegs)
   eventStoreToSegs = reselector(eventStoreToSegs)
   businessHoursToSegs = reselector(businessHoursToSegs)
   businessHoursToSegs = reselector(businessHoursToSegs)
   selectionToSegs = reselector(dateSpanToSegs)
   selectionToSegs = reselector(dateSpanToSegs)
@@ -47,18 +47,18 @@ export default class SimpleTimeGrid extends Component<SimpleTimeGridProps> {
     let { timeGrid } = this
     let { timeGrid } = this
     let { dateProfile, dayTable } = props
     let { dateProfile, dayTable } = props
 
 
-    let colRanges = this.colRanges =
-      this.buildColRanges(dayTable, dateProfile, this.dateEnv)
+    let dayRanges = this.dayRanges =
+      this.buildDayRanges(dayTable, dateProfile, this.dateEnv)
 
 
     timeGrid.receiveProps({
     timeGrid.receiveProps({
       dateProfile,
       dateProfile,
       cells: dayTable.cells[0],
       cells: dayTable.cells[0],
-      businessHourSegs: this.businessHoursToSegs(props.businessHours, dateProfile, colRanges, timeGrid),
-      eventSegs: this.eventStoreToSegs(props.eventStore, props.eventUis, dateProfile, colRanges, timeGrid),
-      dateSelectionSegs: this.selectionToSegs(props.dateSelection, colRanges, timeGrid),
+      businessHourSegs: this.businessHoursToSegs(props.businessHours, dateProfile, dayRanges, timeGrid),
+      eventSegs: this.eventStoreToSegs(props.eventStore, props.eventUis, dateProfile, dayRanges, timeGrid),
+      dateSelectionSegs: this.selectionToSegs(props.dateSelection, dayRanges, timeGrid),
       eventSelection: props.eventSelection,
       eventSelection: props.eventSelection,
-      eventDrag: this.buildEventDrag(props.eventDrag, dateProfile, colRanges, timeGrid),
-      eventResize: this.buildEventResize(props.eventResize, dateProfile, colRanges, timeGrid)
+      eventDrag: this.buildEventDrag(props.eventDrag, dateProfile, dayRanges, timeGrid),
+      eventResize: this.buildEventResize(props.eventResize, dateProfile, dayRanges, timeGrid)
     })
     })
   }
   }
 
 
@@ -73,7 +73,7 @@ export default class SimpleTimeGrid extends Component<SimpleTimeGridProps> {
           end: addMs(date, 1) // protect against null range
           end: addMs(date, 1) // protect against null range
         },
         },
         allDay: false
         allDay: false
-      }, this.colRanges, this.timeGrid),
+      }, this.dayRanges, this.timeGrid),
 
 
       date
       date
     )
     )
@@ -81,12 +81,10 @@ export default class SimpleTimeGrid extends Component<SimpleTimeGridProps> {
 
 
 }
 }
 
 
-function buildColRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: DateEnv): DateRange[] {
+export function buildDayRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: DateEnv): DateRange[] {
   let ranges: DateRange[] = []
   let ranges: DateRange[] = []
 
 
-  for (let col = 0; col < dayTable.colCnt; col++) {
-    let date = dayTable.cells[0][col].date
-
+  for (let date of dayTable.headerDates) {
     ranges.push({
     ranges.push({
       start: dateEnv.add(date, dateProfile.minTime),
       start: dateEnv.add(date, dateProfile.minTime),
       end: dateEnv.add(date, dateProfile.maxTime)
       end: dateEnv.add(date, dateProfile.maxTime)
@@ -96,23 +94,23 @@ function buildColRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: D
   return ranges
   return ranges
 }
 }
 
 
-function eventStoreToSegs(eventStore: EventStore, eventUis: EventUiHash, dateProfile: DateProfile, colRanges: DateRange[], timeGrid: TimeGrid) {
+function eventStoreToSegs(eventStore: EventStore, eventUis: EventUiHash, dateProfile: DateProfile, dayRanges: DateRange[], timeGrid: TimeGrid) {
   return eventRangesToSegs(
   return eventRangesToSegs(
     sliceEventStore(eventStore, eventUis, dateProfile.activeRange),
     sliceEventStore(eventStore, eventUis, dateProfile.activeRange),
-    colRanges,
+    dayRanges,
     timeGrid
     timeGrid
   )
   )
 }
 }
 
 
-function businessHoursToSegs(businessHours: EventStore, dateProfile: DateProfile, colRanges: DateRange[], timeGrid: TimeGrid) {
+function businessHoursToSegs(businessHours: EventStore, dateProfile: DateProfile, dayRanges: DateRange[], timeGrid: TimeGrid) {
   return eventRangesToSegs(
   return eventRangesToSegs(
     sliceBusinessHours(businessHours, dateProfile.activeRange, null, timeGrid.calendar),
     sliceBusinessHours(businessHours, dateProfile.activeRange, null, timeGrid.calendar),
-    colRanges,
+    dayRanges,
     timeGrid
     timeGrid
   )
   )
 }
 }
 
 
-function buildSegInteraction(interaction: EventInteractionUiState, dateProfile: DateProfile, colRanges: DateRange[], timeGrid: TimeGrid): EventSegUiInteractionState {
+function buildSegInteraction(interaction: EventInteractionUiState, dateProfile: DateProfile, dayRanges: DateRange[], timeGrid: TimeGrid): EventSegUiInteractionState {
   if (!interaction) {
   if (!interaction) {
     return null
     return null
   }
   }
@@ -120,7 +118,7 @@ function buildSegInteraction(interaction: EventInteractionUiState, dateProfile:
   return {
   return {
     segs: eventRangesToSegs(
     segs: eventRangesToSegs(
       sliceEventStore(interaction.mutatedEvents, interaction.eventUis, dateProfile.activeRange),
       sliceEventStore(interaction.mutatedEvents, interaction.eventUis, dateProfile.activeRange),
-      colRanges,
+      dayRanges,
       timeGrid
       timeGrid
     ),
     ),
     affectedInstances: interaction.affectedEvents.instances,
     affectedInstances: interaction.affectedEvents.instances,
@@ -129,60 +127,53 @@ function buildSegInteraction(interaction: EventInteractionUiState, dateProfile:
   }
   }
 }
 }
 
 
-function dateSpanToSegs(dateSpan: DateSpan, colRanges: DateRange[], timeGrid: TimeGrid): TimeGridSeg[] {
+export function dateSpanToSegs(dateSpan: DateSpan, dayRanges: DateRange[], component: DateComponent<any>): TimeGridSeg[] {
 
 
   if (!dateSpan) {
   if (!dateSpan) {
     return []
     return []
   }
   }
 
 
   let eventRange = fabricateEventRange(dateSpan)
   let eventRange = fabricateEventRange(dateSpan)
-  let { range } = dateSpan
-  let segs: TimeGridSeg[] = []
 
 
-  for (let col = 0; col < colRanges.length; col++) {
-    let segRange = intersectRanges(range, colRanges[col])
+  return buildSegs(dateSpan.range, dayRanges, eventRange, component)
+}
 
 
-    if (segRange) {
-      segs.push({
-        component: timeGrid,
-        eventRange,
-        start: segRange.start,
-        end: segRange.end,
-        isStart: segRange.start.valueOf() === range.start.valueOf(),
-        isEnd: segRange.end.valueOf() === range.end.valueOf(),
-        col
-      })
-    }
+function eventRangesToSegs(eventRanges: EventRenderRange[], dayRanges: DateRange[], timeGrid: TimeGrid): TimeGridSeg[] {
+  let segs = []
+
+  for (let eventRange of eventRanges) {
+    segs.push(...eventRangeToSegs(eventRange, dayRanges, timeGrid))
   }
   }
 
 
   return segs
   return segs
 }
 }
 
 
-function eventRangesToSegs(eventRanges: EventRenderRange[], colRanges: DateRange[], timeGrid: TimeGrid): TimeGridSeg[] {
-  let segs = []
+export function eventRangeToSegs(eventRange: EventRenderRange, dayRanges: DateRange[], component: DateComponent<any>): TimeGridSeg[] {
+  let segs = buildSegs(eventRange.range, dayRanges, eventRange, component)
 
 
-  for (let eventRange of eventRanges) {
-    segs.push(...eventRangeToSegs(eventRange, colRanges, timeGrid))
+  for (let seg of segs) {
+    seg.isStart = eventRange.isStart && seg.isStart
+    seg.isEnd = eventRange.isEnd && seg.isEnd
   }
   }
 
 
   return segs
   return segs
 }
 }
 
 
-function eventRangeToSegs(eventRange: EventRenderRange, colRanges: DateRange[], timeGrid: TimeGrid): TimeGridSeg[] {
-  let { range } = eventRange
-  let segs = []
 
 
-  for (let col = 0; col < colRanges.length; col++) {
-    let segRange = intersectRanges(range, colRanges[col])
+function buildSegs(range: DateRange, dayRanges: DateRange[], eventRange: EventRenderRange, component: DateComponent<any>): TimeGridSeg[] {
+  let segs: TimeGridSeg[] = []
+
+  for (let col = 0; col < dayRanges.length; col++) {
+    let segRange = intersectRanges(range, dayRanges[col])
 
 
     if (segRange) {
     if (segRange) {
       segs.push({
       segs.push({
-        component: timeGrid,
-        eventRange,
+        component,
+        eventRange: eventRange,
         start: segRange.start,
         start: segRange.start,
         end: segRange.end,
         end: segRange.end,
-        isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
-        isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
+        isStart: segRange.start.valueOf() === range.start.valueOf(),
+        isEnd: segRange.end.valueOf() === range.end.valueOf(),
         col
         col
       })
       })
     }
     }

+ 16 - 14
src/basic/SimpleDayGrid.ts

@@ -10,6 +10,7 @@ import reselector from '../util/reselector'
 import { sliceBusinessHours } from '../structs/business-hours'
 import { sliceBusinessHours } from '../structs/business-hours'
 import Component from '../component/Component'
 import Component from '../component/Component'
 import { EventSegUiInteractionState } from '../component/DateComponent'
 import { EventSegUiInteractionState } from '../component/DateComponent'
+import { DateRange } from '../datelib/date-range'
 
 
 export interface SimpleDayGridProps {
 export interface SimpleDayGridProps {
   dateProfile: DateProfile | null
   dateProfile: DateProfile | null
@@ -76,7 +77,7 @@ function businessHoursToSegs(businessHours: EventStore, dateProfile: DateProfile
   )
   )
 }
 }
 
 
-function dateSpanToSegs(dateSpan: DateSpan, dayTable: DayTable, dayGrid: DayGrid) {
+export function dateSpanToSegs(dateSpan: DateSpan, dayTable: DayTable, dayGrid: DayGrid) {
   return dateSpan ? sliceDateSpan(dateSpan, dayTable, dayGrid) : null
   return dateSpan ? sliceDateSpan(dateSpan, dayTable, dayGrid) : null
 }
 }
 
 
@@ -107,24 +108,25 @@ function eventRangesToSegs(eventRanges: EventRenderRange[], dayTable: DayTable,
   return segs
   return segs
 }
 }
 
 
-function eventRangeToSegs(eventRange: EventRenderRange, dayTable: DayTable, dayGrid: DayGrid): DayGridSeg[] {
-  return dayTable.sliceRange(eventRange.range).map(function(seg) {
-    return {
-      eventRange,
-      component: dayGrid,
-      isStart: eventRange.isStart && seg.isStart,
-      isEnd: eventRange.isEnd && seg.isEnd,
-      row: seg.row,
-      leftCol: dayGrid.isRtl ? (dayTable.colCnt - 1 - seg.lastCol) : seg.firstCol,
-      rightCol: dayGrid.isRtl ? (dayTable.colCnt - 1 - seg.firstCol) : seg.lastCol
-    }
-  })
+export function eventRangeToSegs(eventRange: EventRenderRange, dayTable: DayTable, dayGrid: DayGrid): DayGridSeg[] {
+  let segs = buildSegs(eventRange.range, dayTable, eventRange, dayGrid)
+
+  for (let seg of segs) {
+    seg.isStart = eventRange.isStart && seg.isStart
+    seg.isEnd = eventRange.isEnd && seg.isEnd
+  }
+
+  return segs
 }
 }
 
 
 function sliceDateSpan(dateSpan: DateSpan, dayTable: DayTable, dayGrid: DayGrid): DayGridSeg[] {
 function sliceDateSpan(dateSpan: DateSpan, dayTable: DayTable, dayGrid: DayGrid): DayGridSeg[] {
   let eventRange = fabricateEventRange(dateSpan)
   let eventRange = fabricateEventRange(dateSpan)
 
 
-  return dayTable.sliceRange(dateSpan.range).map(function(seg) {
+  return buildSegs(dateSpan.range, dayTable, eventRange, dayGrid)
+}
+
+function buildSegs(range: DateRange, dayTable: DayTable, eventRange: EventRenderRange, dayGrid: DayGrid): DayGridSeg[] {
+  return dayTable.sliceRange(range).map(function(seg) {
     return {
     return {
       component: dayGrid,
       component: dayGrid,
       eventRange,
       eventRange,

+ 10 - 3
src/exports.ts

@@ -88,7 +88,7 @@ export { default as PositionCache } from './common/PositionCache'
 export { default as ScrollComponent, ScrollbarWidths } from './common/ScrollComponent'
 export { default as ScrollComponent, ScrollbarWidths } from './common/ScrollComponent'
 export { default as Theme } from './theme/Theme'
 export { default as Theme } from './theme/Theme'
 export { default as Component, ComponentContext } from './component/Component'
 export { default as Component, ComponentContext } from './component/Component'
-export { default as DateComponent, Seg } from './component/DateComponent'
+export { default as DateComponent, Seg, EventSegUiInteractionState } from './component/DateComponent'
 export { default as Calendar } from './Calendar'
 export { default as Calendar } from './Calendar'
 export { default as View, ViewProps } from './View'
 export { default as View, ViewProps } from './View'
 export { defineView, getViewConfig } from './ViewRegistry'
 export { defineView, getViewConfig } from './ViewRegistry'
@@ -96,8 +96,13 @@ export { default as FgEventRenderer } from './component/renderers/FgEventRendere
 export { default as FillRenderer } from './component/renderers/FillRenderer'
 export { default as FillRenderer } from './component/renderers/FillRenderer'
 export { default as AgendaView } from './agenda/AgendaView'
 export { default as AgendaView } from './agenda/AgendaView'
 export { default as AbstractAgendaView} from './agenda/AbstractAgendaView'
 export { default as AbstractAgendaView} from './agenda/AbstractAgendaView'
-export { default as TimeGrid } from './agenda/TimeGrid'
-export { default as DayGrid } from './basic/DayGrid'
+export { default as TimeGrid, TimeGridSeg } from './agenda/TimeGrid'
+export { dateSpanToSegs, eventRangeToSegs, buildDayRanges } from './agenda/SimpleTimeGrid'
+export {
+  eventRangeToSegs as DayGrid_eventRangeToSegs,
+  dateSpanToSegs as DayGrid_dateSpanToSegs
+} from './basic/SimpleDayGrid'
+export { default as DayGrid, DayGridSeg } from './basic/DayGrid'
 export { default as BasicView } from './basic/BasicView'
 export { default as BasicView } from './basic/BasicView'
 export { default as MonthView } from './basic/MonthView'
 export { default as MonthView } from './basic/MonthView'
 export { default as ListView } from './list/ListView'
 export { default as ListView } from './list/ListView'
@@ -147,3 +152,5 @@ export { default as DaySeries } from './common/DaySeries'
 
 
 export { EventInteractionUiState } from './interactions/event-interaction-state'
 export { EventInteractionUiState } from './interactions/event-interaction-state'
 export { EventRenderRange, sliceEventStore } from './component/event-rendering'
 export { EventRenderRange, sliceEventStore } from './component/event-rendering'
+
+export { default as DayTable, DayTableSeg, DayTableCell } from './common/DayTable'