InteractiveDateComponent.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { elementClosest } from '../util/dom-manip'
  2. import DateComponent from './DateComponent'
  3. import { Selection } from '../reducers/selection'
  4. import GlobalContext from '../common/GlobalContext'
  5. export type InteractiveDateComponentHash = {
  6. [uid: string]: InteractiveDateComponent
  7. }
  8. export default abstract class InteractiveDateComponent extends DateComponent {
  9. // self-config, overridable by subclasses
  10. segSelector: string = '.fc-event-container > *' // what constitutes an event element?
  11. // if defined, holds the unit identified (ex: "year" or "month") that determines the level of granularity
  12. // of the date areas. if not defined, assumes to be day and time granularity.
  13. // TODO: port isTimeScale into same system?
  14. largeUnit: any
  15. queryHit(leftOffset, topOffset): Selection {
  16. return null // this should be abstract
  17. }
  18. buildCoordCaches() {
  19. }
  20. bindGlobalHandlers() {
  21. GlobalContext.registerComponent(this)
  22. }
  23. unbindGlobalHandlers() {
  24. GlobalContext.unregisterComponent(this)
  25. }
  26. isValidSegInteraction(evTarget: HTMLElement) {
  27. return !elementClosest(evTarget, '.fc-helper') &&
  28. !this.dragState &&
  29. !this.eventResizeState
  30. }
  31. isValidDateInteraction(evTarget: HTMLElement) {
  32. return !elementClosest(evTarget, this.segSelector) &&
  33. !elementClosest(evTarget, '.fc-more') && // a "more.." link
  34. !elementClosest(evTarget, 'a[data-goto]') // a clickable nav link
  35. }
  36. // Event Drag-n-Drop
  37. // ---------------------------------------------------------------------------------------------------------------
  38. // Computes if the given event is allowed to be dragged by the user
  39. isEventDefDraggable(eventDef) {
  40. return this.isEventDefStartEditable(eventDef)
  41. }
  42. isEventDefStartEditable(eventDef) {
  43. return false // TODO
  44. }
  45. isEventDefGenerallyEditable(eventDef) {
  46. return false // TODO
  47. }
  48. // Event Resizing
  49. // ---------------------------------------------------------------------------------------------------------------
  50. // Computes if the given event is allowed to be resized from its starting edge
  51. isEventDefResizableFromStart(eventDef) {
  52. return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef)
  53. }
  54. // Computes if the given event is allowed to be resized from its ending edge
  55. isEventDefResizableFromEnd(eventDef) {
  56. return this.isEventDefResizable(eventDef)
  57. }
  58. // Computes if the given event is allowed to be resized by the user at all
  59. isEventDefResizable(eventDef) {
  60. return false // TODO
  61. }
  62. }