Skip to content

Commit

Permalink
slicing changes
Browse files Browse the repository at this point in the history
  • Loading branch information
arshaw committed Nov 15, 2018
1 parent b6f43f1 commit c03a21f
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 69 deletions.
4 changes: 2 additions & 2 deletions src/agenda/AgendaView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export default class AgendaView extends AbstractAgendaView {
}

render(props: ViewProps) {
super.render(props)
super.render(props) // for flags for updateSize

let { dateProfile, dateSelection } = this.props
let dayTable = this.buildDayTable(dateProfile, this.dateProfileGenerator)
Expand Down Expand Up @@ -100,7 +100,7 @@ export default class AgendaView extends AbstractAgendaView {
}

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)
}
91 changes: 41 additions & 50 deletions src/agenda/SimpleTimeGrid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { sliceBusinessHours } from '../structs/business-hours'
import DayTable from '../common/DayTable'
import { DateEnv } from '../datelib/env'
import { DateMarker, addMs } from '../datelib/marker'
import { EventSegUiInteractionState } from '../component/DateComponent'
import DateComponent, { EventSegUiInteractionState } from '../component/DateComponent'

export interface SimpleTimeGridProps {
dateProfile: DateProfile | null
Expand All @@ -28,9 +28,9 @@ export interface SimpleTimeGridProps {
export default class SimpleTimeGrid extends Component<SimpleTimeGridProps> {

timeGrid: TimeGrid
colRanges: DateRange[]
dayRanges: DateRange[]

buildColRanges = reselector(buildColRanges)
buildDayRanges = reselector(buildDayRanges)
eventStoreToSegs = reselector(eventStoreToSegs)
businessHoursToSegs = reselector(businessHoursToSegs)
selectionToSegs = reselector(dateSpanToSegs)
Expand All @@ -47,18 +47,18 @@ export default class SimpleTimeGrid extends Component<SimpleTimeGridProps> {
let { timeGrid } = this
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({
dateProfile,
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,
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)
})
}

Expand All @@ -73,20 +73,18 @@ export default class SimpleTimeGrid extends Component<SimpleTimeGridProps> {
end: addMs(date, 1) // protect against null range
},
allDay: false
}, this.colRanges, this.timeGrid),
}, this.dayRanges, this.timeGrid),

date
)
}

}

function buildColRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: DateEnv): DateRange[] {
export function buildDayRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: DateEnv): 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({
start: dateEnv.add(date, dateProfile.minTime),
end: dateEnv.add(date, dateProfile.maxTime)
Expand All @@ -96,31 +94,31 @@ function buildColRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: D
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(
sliceEventStore(eventStore, eventUis, dateProfile.activeRange),
colRanges,
dayRanges,
timeGrid
)
}

function businessHoursToSegs(businessHours: EventStore, dateProfile: DateProfile, colRanges: DateRange[], timeGrid: TimeGrid) {
function businessHoursToSegs(businessHours: EventStore, dateProfile: DateProfile, dayRanges: DateRange[], timeGrid: TimeGrid) {
return eventRangesToSegs(
sliceBusinessHours(businessHours, dateProfile.activeRange, null, timeGrid.calendar),
colRanges,
dayRanges,
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) {
return null
}

return {
segs: eventRangesToSegs(
sliceEventStore(interaction.mutatedEvents, interaction.eventUis, dateProfile.activeRange),
colRanges,
dayRanges,
timeGrid
),
affectedInstances: interaction.affectedEvents.instances,
Expand All @@ -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) {
return []
}

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
}

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
}

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) {
segs.push({
component: timeGrid,
eventRange,
component,
eventRange: eventRange,
start: segRange.start,
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
})
}
Expand Down
30 changes: 16 additions & 14 deletions src/basic/SimpleDayGrid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import reselector from '../util/reselector'
import { sliceBusinessHours } from '../structs/business-hours'
import Component from '../component/Component'
import { EventSegUiInteractionState } from '../component/DateComponent'
import { DateRange } from '../datelib/date-range'

export interface SimpleDayGridProps {
dateProfile: DateProfile | null
Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -107,24 +108,25 @@ function eventRangesToSegs(eventRanges: EventRenderRange[], dayTable: DayTable,
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[] {
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 {
component: dayGrid,
eventRange,
Expand Down
13 changes: 10 additions & 3 deletions src/exports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,21 @@ export { default as PositionCache } from './common/PositionCache'
export { default as ScrollComponent, ScrollbarWidths } from './common/ScrollComponent'
export { default as Theme } from './theme/Theme'
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 View, ViewProps } from './View'
export { defineView, getViewConfig } from './ViewRegistry'
export { default as FgEventRenderer } from './component/renderers/FgEventRenderer'
export { default as FillRenderer } from './component/renderers/FillRenderer'
export { default as AgendaView } from './agenda/AgendaView'
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 MonthView } from './basic/MonthView'
export { default as ListView } from './list/ListView'
Expand Down Expand Up @@ -147,3 +152,5 @@ export { default as DaySeries } from './common/DaySeries'

export { EventInteractionUiState } from './interactions/event-interaction-state'
export { EventRenderRange, sliceEventStore } from './component/event-rendering'

export { default as DayTable, DayTableSeg, DayTableCell } from './common/DayTable'

0 comments on commit c03a21f

Please sign in to comment.