SimpleDayGrid.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import DayGrid, { DayGridSeg } from './DayGrid'
  2. import { DateProfile } from '../DateProfileGenerator'
  3. import { EventStore } from '../structs/event-store'
  4. import { EventUiHash } from '../component/event-rendering'
  5. import { DateSpan } from '../structs/date-span'
  6. import { EventInteractionUiState } from '../interactions/event-interaction-state'
  7. import DayTable from '../common/DayTable'
  8. import { Duration } from '../datelib/duration'
  9. import Component from '../component/Component'
  10. import { DateRange } from '../datelib/date-range'
  11. import { Slicer } from '../common/slicing-utils'
  12. export interface SimpleDayGridProps {
  13. dateProfile: DateProfile | null
  14. dayTable: DayTable
  15. nextDayThreshold: Duration
  16. businessHours: EventStore
  17. eventStore: EventStore
  18. eventUis: EventUiHash
  19. dateSelection: DateSpan | null
  20. eventSelection: string
  21. eventDrag: EventInteractionUiState | null
  22. eventResize: EventInteractionUiState | null
  23. isRigid: boolean
  24. }
  25. export default class SimpleDayGrid extends Component<SimpleDayGridProps> {
  26. dayGrid: DayGrid
  27. private slicer = new Slicer(sliceSegs)
  28. constructor(context, dayGrid: DayGrid) {
  29. super(context)
  30. this.dayGrid = dayGrid
  31. this.slicer.component = dayGrid
  32. }
  33. render(props: SimpleDayGridProps) {
  34. let { dayGrid, slicer, isRtl } = this
  35. let { dateProfile, dayTable, nextDayThreshold } = props
  36. dayGrid.receiveProps({
  37. dateProfile,
  38. cells: dayTable.cells,
  39. businessHourSegs: slicer.businessHoursToSegs(props.businessHours, dateProfile, nextDayThreshold, dayTable, isRtl),
  40. eventSegs: slicer.eventStoreToSegs(props.eventStore, props.eventUis, dateProfile, nextDayThreshold, dayTable, isRtl),
  41. dateSelectionSegs: slicer.selectionToSegs(props.dateSelection, dayTable, isRtl),
  42. eventSelection: props.eventSelection,
  43. eventDrag: slicer.buildEventDrag(props.eventDrag, dateProfile, dayTable, isRtl),
  44. eventResize: slicer.buildEventResize(props.eventResize, dateProfile, dayTable, isRtl),
  45. isRigid: props.isRigid
  46. })
  47. }
  48. }
  49. function sliceSegs(range: DateRange, dayTable: DayTable, isRtl: boolean): DayGridSeg[] {
  50. return dayTable.sliceRange(range).map(function(seg) {
  51. return {
  52. isStart: seg.isStart,
  53. isEnd: seg.isEnd,
  54. row: seg.row,
  55. leftCol: isRtl ? (dayTable.colCnt - 1 - seg.lastCol) : seg.firstCol,
  56. rightCol: isRtl ? (dayTable.colCnt - 1 - seg.firstCol) : seg.lastCol
  57. }
  58. })
  59. }