Adam Shaw 5 лет назад
Родитель
Сommit
8138dcd486

+ 8 - 9
packages/__tests__/src/legacy/eventLimitClick.js

@@ -1,6 +1,6 @@
 import DayGridViewWrapper from "../lib/wrappers/DayGridViewWrapper"
 
-describe('eventLimitClick', function() { // simulate a click
+describe('moreLinkClick', function() { // TODO: rename file
   pushOptions({
     defaultDate: '2014-08-01', // important that it is the first week, so works w/ month + week views
     defaultView: 'dayGridMonth',
@@ -16,7 +16,7 @@ describe('eventLimitClick', function() { // simulate a click
   describe('when set to "popover"', function() {
 
     pushOptions({
-      eventLimitClick: 'popover'
+      moreLinkClick: 'popover'
     })
 
     it('renders a popover upon click', function(done) {
@@ -36,7 +36,7 @@ describe('eventLimitClick', function() { // simulate a click
   describe('when set to "week"', function() {
 
     pushOptions({
-      eventLimitClick: 'week'
+      moreLinkClick: 'week'
     })
 
     it('should go to dayGridWeek if it is one of the available views', function(done) {
@@ -79,7 +79,7 @@ describe('eventLimitClick', function() { // simulate a click
   describe('when set to "day"', function() {
 
     pushOptions({
-      eventLimitClick: 'day'
+      moreLinkClick: 'day'
     })
 
     it('should go to dayGridDay if it is one of the available views', function(done) {
@@ -121,7 +121,7 @@ describe('eventLimitClick', function() { // simulate a click
 
   it('works with an explicit view name', function(done) {
     let calendar = initCalendar({
-      eventLimitClick: 'timeGridWeek',
+      moreLinkClick: 'timeGridWeek',
       header: {
         left: 'prev,next today',
         center: 'title',
@@ -140,12 +140,11 @@ describe('eventLimitClick', function() { // simulate a click
 
   it('works with custom function and all the arguments are correct', function(done) {
     let calendar = initCalendar({
-      eventLimitClick: function(arg) {
+      moreLinkClick: function(arg) {
         expect(typeof arg).toBe('object')
         expect(arg.date).toEqualDate('2014-07-29')
-        expect(arg.dayEl.getAttribute('data-date')).toBe('2014-07-29')
         expect(arg.hiddenSegs.length).toBe(2)
-        expect(arg.segs.length).toBe(4)
+        expect(arg.allSegs.length).toBe(4)
         expect(typeof arg.jsEvent).toBe('object')
       }
     })
@@ -157,7 +156,7 @@ describe('eventLimitClick', function() { // simulate a click
 
   it('works with custom function, and can return a view name', function(done) {
     let calendar = initCalendar({
-      eventLimitClick: function(cellInfo, jsEvent) {
+      moreLinkClick: function(cellInfo, jsEvent) {
         return 'timeGridDay'
       }
     })

+ 1 - 1
packages/core/src/options.ts

@@ -69,7 +69,7 @@ export const globalDefaults = {
 
   // rerenderDelay: null,
 
-  eventLimitClick: 'popover',
+  moreLinkClick: 'popover',
   dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },
 
   handleWindowResize: true,

+ 3 - 5
packages/core/src/types/input-types.ts

@@ -59,9 +59,7 @@ export interface EventSegment {
 
 export interface CellInfo {
   date: Date
-  dayEl: HTMLElement
-  moreEl: HTMLElement
-  segs: EventSegment[]
+  allSegs: EventSegment[]
   hiddenSegs: EventSegment[]
 }
 
@@ -93,8 +91,8 @@ export interface OptionsInputBase {
   windowResizeDelay?: number
   dayMaxEvents?: boolean | number
   dayMaxEventRows?: boolean | number
-  eventLimitClick?: 'popover' | 'week' | 'day' | 'timeGridWeek' | 'timeGridDay' | string |
-    ((arg: { date: Date, allDay: boolean, dayEl: HTMLElement, moreEl: HTMLElement, segs: any[], hiddenSegs: any[], jsEvent: MouseEvent, view: ViewApi }) => void),
+  moreLinkClick?: 'popover' | 'week' | 'day' | 'timeGridWeek' | 'timeGridDay' | string |
+    ((arg: { date: Date, allDay: boolean, allSegs: any[], hiddenSegs: any[], jsEvent: MouseEvent, view: ViewApi }) => void),
   timeZone?: string | boolean
   now?: DateInput | (() => DateInput)
   defaultView?: string

+ 19 - 7
packages/daygrid/src/Table.tsx

@@ -16,6 +16,7 @@ import {
   NowTimer,
   DateMarker,
   DateProfile,
+  EventApi
 } from '@fullcalendar/core'
 import TableSeg, { splitSegsByRow, splitInteractionByRow } from './TableSeg'
 import TableRow from './TableRow'
@@ -160,20 +161,31 @@ export default class Table extends DateComponent<TableProps, TableState> {
   }
 
 
-  handleMoreLinkClick = (arg: MoreLinkArg) => {
+  handleMoreLinkClick = (arg: MoreLinkArg) => { // TODO: bad names "more link click" versus "more click"
     let { calendar, view, options, dateEnv } = this.context
-    let clickOption = options.eventLimitClick
+    let clickOption = options.moreLinkClick
+
+    function segForPublic(seg: TableSeg) {
+      let { def, instance, range } = seg.eventRange
+
+      return {
+        event: new EventApi(calendar, def, instance),
+        start: dateEnv.toDate(range.start),
+        end: dateEnv.toDate(range.end),
+        isStart: seg.isStart,
+        isEnd: seg.isEnd
+      }
+    }
 
     if (typeof clickOption === 'function') {
       // the returned value can be an atomic option
-      clickOption = calendar.publiclyTrigger('eventLimitClick', [
+      // TODO: weird how we don't use the `clickOption`
+      clickOption = calendar.publiclyTrigger('moreLinkClick', [
         {
           date: dateEnv.toDate(arg.date),
           allDay: true,
-          dayEl: arg.dayEl,
-          moreEl: null, // moreEl, // TODO
-          segs: arg.allSegs,
-          hiddenSegs: arg.hiddenSegs,
+          allSegs: arg.allSegs.map(segForPublic),
+          hiddenSegs: arg.hiddenSegs.map(segForPublic),
           jsEvent: arg.ev as MouseEvent, // TODO: better
           view
         }