Ver código fonte

fix some bugs

Adam Shaw 5 anos atrás
pai
commit
b14608bec3

+ 1 - 1
packages-premium

@@ -1 +1 @@
-Subproject commit 3a27852b4057804601eafebc8336879434ed7599
+Subproject commit 455ebf45f2e0f68eea3813b331348c03fc7f7131

+ 3 - 1
packages/common/src/api/EventApi.ts

@@ -41,7 +41,9 @@ export class EventApi {
     } else if (name in UI_PROPS_REFINERS) {
       let ui
 
-      val = UI_PROPS_REFINERS[name](val)
+      if (UI_PROPS_REFINERS[name]) {
+        val = UI_PROPS_REFINERS[name](val)
+      }
 
       if (name === 'color') {
         ui = { backgroundColor: val, borderColor: val }

+ 4 - 2
packages/common/src/common/render-hook.tsx

@@ -199,12 +199,14 @@ export class MountHook<HookProps> extends BaseComponent<MountHookProps<HookProps
 
 
   componentDidMount() {
-    this.props.didMount({ ...this.props.hookProps, el: this.rootEl })
+    let callback = this.props.didMount
+    callback && callback({ ...this.props.hookProps, el: this.rootEl })
   }
 
 
   componentWillUnmount() {
-    this.props.willUnmount({ ...this.props.hookProps, el: this.rootEl })
+    let callback = this.props.willUnmount
+    callback && callback({ ...this.props.hookProps, el: this.rootEl })
   }
 
 

+ 2 - 2
packages/common/src/component/event-rendering.ts

@@ -3,7 +3,7 @@ import { EventTuple } from '../structs/event-parse'
 import { EventStore } from '../structs/event-store'
 import { DateRange, invertRanges, intersectRanges, rangeContainsMarker } from '../datelib/date-range'
 import { Duration } from '../datelib/duration'
-import { compareByFieldSpecs } from '../util/misc'
+import { compareByFieldSpecs, OrderSpec } from '../util/misc'
 import { computeVisibleDayRange } from '../util/date'
 import { Seg } from './DateComponent'
 import { EventApi } from '../api/EventApi'
@@ -167,7 +167,7 @@ export function compileEventUi(eventDef: EventDef, eventUiBases: EventUiHash) {
 }
 
 
-export function sortEventSegs(segs, eventOrderSpecs): Seg[] {
+export function sortEventSegs(segs, eventOrderSpecs: OrderSpec[]): Seg[] {
   let objs = segs.map(buildSegCompareObj)
 
   objs.sort(function(obj0, obj1) {

+ 4 - 5
packages/common/src/component/event-ui.ts

@@ -2,7 +2,6 @@ import { Constraint, AllowFunc, normalizeConstraint, ConstraintInput } from '../
 import { parseClassNames } from '../util/html'
 import { refineProps } from '../util/misc'
 import { CalendarContext } from '../CalendarContext'
-import { identity } from '../options'
 
 // TODO: better called "EventSettings" or "EventConfig"
 // TODO: move this file into structs
@@ -40,13 +39,13 @@ export interface EventUi {
 export type EventUiHash = { [defId: string]: EventUi }
 
 export const UI_PROPS_REFINERS = {
-  display: identity, // TODO: string?
+  display: null, // TODO: string?
   editable: Boolean,
   startEditable: Boolean,
   durationEditable: Boolean,
-  constraint: identity,
-  overlap: identity,
-  allow: identity,
+  constraint: null,
+  overlap: null,
+  allow: null,
   classNames: parseClassNames,
   color: String,
   backgroundColor: String,

+ 1 - 1
packages/common/src/main.ts

@@ -62,7 +62,7 @@ export {
 } from './util/dom-manip'
 
 export { EventStore, filterEventStoreDefs, createEmptyEventStore, mergeEventStores, getRelevantEvents, eventTupleToStore } from './structs/event-store'
-export { EventUiHash, EventUi, EVENT_SCOPED_RAW_UI_PROPS, processUiProps, combineEventUis } from './component/event-ui'
+export { EventUiHash, EventUi, UI_PROPS_REFINERS, processUiProps, combineEventUis } from './component/event-ui'
 export { Splitter, SplittableProps } from './component/event-splitting'
 export { getDayClassNames, getDateMeta, DateMeta, getSlotClassNames } from './component/date-rendering'
 export { buildNavLinkData } from './common/nav-link'

+ 2 - 3
packages/common/src/options.ts

@@ -27,7 +27,7 @@ import { ViewRootHookProps } from './common/ViewRoot'
 // base options
 // ------------
 
-const BASE_OPTION_REFINERS = {
+export const BASE_OPTION_REFINERS = {
   navLinkDayClick: identity as Identity<string | ((date: Date, jsEvent: Event) => void)>,
   navLinkWeekClick: identity as Identity<string | ((weekStart: Date, jsEvent: Event) => void)>,
   duration: createDuration,
@@ -41,7 +41,6 @@ const BASE_OPTION_REFINERS = {
   slotMinTime: createDuration,
   slotMaxTime: createDuration,
   dayPopoverFormat: createFormatter,
-  eventOrderSpecs: parseFieldSpecs,
   slotDuration: createDuration,
   snapDuration: createDuration,
   headerToolbar: identity as Identity<ToolbarInput | false>,
@@ -99,7 +98,7 @@ const BASE_OPTION_REFINERS = {
   allDayMaintainDuration: Boolean,
   unselectAuto: Boolean,
   dropAccept: identity as Identity<string | ((draggable: any) => boolean)>, // TODO: type draggable
-  eventOrder: identity as Identity<string | Array<((a: EventApi, b: EventApi) => number) | (string | ((a: EventApi, b: EventApi) => number))>>,
+  eventOrder: parseFieldSpecs,
 
   handleWindowResize: Boolean,
   windowResizeDelay: Number,

+ 6 - 6
packages/common/src/reducers/CalendarDataManager.ts

@@ -24,7 +24,7 @@ import { Emitter } from '../common/Emitter'
 import { EventUiHash, EventUi, processUiProps } from '../component/event-ui'
 import { EventDefHash } from '../structs/event-def'
 import { parseToolbars } from '../toolbar-parse'
-import { RefinedCalendarOptions, RefinedBaseOptions, RawCalendarOptions, CALENDAR_OPTION_REFINERS, RawViewOptions, RefinedViewOptions, RAW_BASE_DEFAULTS, mergeRawOptions } from '../options'
+import { RefinedCalendarOptions, RefinedBaseOptions, RawCalendarOptions, CALENDAR_OPTION_REFINERS, RawViewOptions, RefinedViewOptions, RAW_BASE_DEFAULTS, mergeRawOptions, BASE_OPTION_REFINERS, VIEW_OPTION_REFINERS } from '../options'
 import { rangeContainsMarker } from '../datelib/date-range'
 import { ViewApi } from '../ViewApi'
 import { parseBusinessHours } from '../structs/business-hours'
@@ -344,7 +344,7 @@ export class CalendarDataManager {
     // TODO: blacklist options that are handled by optionChangeHandlers
 
     let {
-      refinedOptions, pluginHooks, localeDefaults, availableLocaleData, refiners, extra
+      refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra
     } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides)
 
     warnUnknownOptions(extra)
@@ -372,7 +372,6 @@ export class CalendarDataManager {
       theme,
       toolbarConfig,
       localeDefaults,
-      refiners,
       availableRawLocales: availableLocaleData.map
     }
   }
@@ -389,7 +388,7 @@ export class CalendarDataManager {
     let availableRawLocales = availableLocaleData.map
     let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options
     let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins)
-    let refiners = { ...CALENDAR_OPTION_REFINERS, ...pluginHooks.optionRefiners }
+    let refiners = { ...BASE_OPTION_REFINERS, ...CALENDAR_OPTION_REFINERS, ...pluginHooks.optionRefiners }
     let extra = {}
 
     let raw = mergeRawOptions([
@@ -443,7 +442,7 @@ export class CalendarDataManager {
 
     let { refinedOptions, extra } = this.processRawViewOptions(
       viewSpec,
-      optionsData.refiners,
+      optionsData.pluginHooks,
       optionsData.localeDefaults,
       optionOverrides,
       dynamicOptionOverrides
@@ -475,7 +474,7 @@ export class CalendarDataManager {
   }
 
 
-  processRawViewOptions(viewSpec: ViewSpec, refiners, localeDefaults: RawCalendarOptions, optionOverrides: RawCalendarOptions, dynamicOptionOverrides: RawCalendarOptions) {
+  processRawViewOptions(viewSpec: ViewSpec, pluginHooks: PluginHooks, localeDefaults: RawCalendarOptions, optionOverrides: RawCalendarOptions, dynamicOptionOverrides: RawCalendarOptions) {
     let raw = mergeRawOptions([
       RAW_BASE_DEFAULTS,
       viewSpec.optionDefaults,
@@ -484,6 +483,7 @@ export class CalendarDataManager {
       viewSpec.optionOverrides,
       dynamicOptionOverrides
     ])
+    let refiners = { ...BASE_OPTION_REFINERS, ...CALENDAR_OPTION_REFINERS, ...VIEW_OPTION_REFINERS, ...pluginHooks.optionRefiners }
     let refined: Partial<RefinedViewOptions> = {}
     let currentRaw = this.currentRawViewOptions
     let currentRefined = this.currentRefinedViewOptions

+ 1 - 2
packages/common/src/reducers/data-types.ts

@@ -13,7 +13,7 @@ import { Theme } from '../theme/Theme'
 import { EventStore } from '../structs/event-store'
 import { DateSpan } from '../structs/date-span'
 import { EventInteractionState } from '../interactions/event-interaction-state'
-import { RefinedCalendarOptions, RefinedViewOptions, GenericRefiners, RawCalendarOptions } from '../options'
+import { RefinedCalendarOptions, RefinedViewOptions, RawCalendarOptions } from '../options'
 
 
 export interface CalendarDataManagerState {
@@ -39,7 +39,6 @@ export interface CalendarOptionsData {
   calendarOptions: RefinedCalendarOptions
   toolbarConfig: any
   availableRawLocales: any
-  refiners: GenericRefiners
   dateEnv: DateEnv
   theme: Theme
   pluginHooks: PluginHooks

+ 2 - 1
packages/common/src/util/misc.ts

@@ -1,4 +1,5 @@
 import { preventDefault } from './dom-event'
+import { EventApi } from '../api/EventApi'
 
 
 let guidNumber = 0
@@ -63,7 +64,7 @@ export interface OrderSpec {
   func?: (a, b) => boolean
 }
 
-export function parseFieldSpecs(input) {
+export function parseFieldSpecs(input: string | Array<((a: EventApi, b: EventApi) => number) | (string | ((a: EventApi, b: EventApi) => number))>) {
   let specs: OrderSpec[] = []
   let tokens = []
   let i

+ 1 - 1
packages/daygrid/src/TableRow.tsx

@@ -88,7 +88,7 @@ export class TableRow extends DateComponent<TableRowProps, TableRowState> {
       state.segHeights,
       state.maxContentHeight,
       colCnt,
-      context.options.eventOrderSpecs
+      context.options.eventOrder
     )
 
     let selectedInstanceHash = // TODO: messy way to compute this

+ 2 - 2
packages/daygrid/src/event-placement.ts

@@ -1,5 +1,5 @@
 import { TableSeg } from './TableSeg'
-import { sortEventSegs } from '@fullcalendar/common'
+import { sortEventSegs, OrderSpec } from '@fullcalendar/common'
 
 
 interface TableSegPlacement {
@@ -16,7 +16,7 @@ export function computeFgSegPlacement( // for one row. TODO: print mode?
   eventHeights: { [instanceId: string]: number },
   maxContentHeight: number | null,
   colCnt: number,
-  eventOrderSpecs: any
+  eventOrderSpecs: OrderSpec[]
 ) {
   let colPlacements: TableSegPlacement[][] = [] // if event spans multiple cols, its present in each col
   let moreCnts: number[] = [] // by-col

+ 1 - 1
packages/list/src/ListView.tsx

@@ -135,7 +135,7 @@ export class ListView extends DateComponent<ViewProps> {
               />
             )
 
-            daySegs = sortEventSegs(daySegs, options.eventOrderSpecs)
+            daySegs = sortEventSegs(daySegs, options.eventOrder)
 
             for (let seg of daySegs) {
               innerNodes.push(

+ 1 - 1
packages/timegrid/src/TimeCol.tsx

@@ -105,7 +105,7 @@ export class TimeCol extends BaseComponent<TimeColProps> {
 
     // assigns TO THE SEGS THEMSELVES
     // also, receives resorted array
-    segs = computeSegCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight, context.options.eventOrderSpecs) as TimeColsSeg[]
+    segs = computeSegCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight, context.options.eventOrder) as TimeColsSeg[]
 
     return segs.map((seg) => {
       let instanceId = seg.eventRange.instance.instanceId

+ 3 - 3
packages/timegrid/src/event-placement.ts

@@ -1,5 +1,5 @@
 import {
-  Seg, DateMarker, buildSegCompareObj, compareByFieldSpecs, sortEventSegs
+  Seg, DateMarker, buildSegCompareObj, compareByFieldSpecs, sortEventSegs, OrderSpec
 } from '@fullcalendar/common'
 import { TimeColsSlatsCoords } from './TimeColsSlatsCoords'
 
@@ -8,7 +8,7 @@ import { TimeColsSlatsCoords } from './TimeColsSlatsCoords'
 // TODO: return hash (by instanceId) of results
 
 
-export function computeSegCoords(segs: Seg[], dayDate: DateMarker, slatCoords: TimeColsSlatsCoords, eventMinHeight: number, eventOrderSpecs) {
+export function computeSegCoords(segs: Seg[], dayDate: DateMarker, slatCoords: TimeColsSlatsCoords, eventMinHeight: number, eventOrderSpecs: OrderSpec[]) {
   computeSegVerticals(segs, dayDate, slatCoords, eventMinHeight)
   return computeSegHorizontals(segs, eventOrderSpecs) // requires top/bottom from computeSegVerticals
 }
@@ -29,7 +29,7 @@ export function computeSegVerticals(segs: Seg[], dayDate: DateMarker, slatCoords
 // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
 // Assumed the segs are already ordered.
 // NOTE: Also reorders the given array by date!
-function computeSegHorizontals(segs: Seg[], eventOrderSpecs) {
+function computeSegHorizontals(segs: Seg[], eventOrderSpecs: OrderSpec[]) {
 
   // IMPORTANT TO CLEAR OLD RESULTS :(
   for (let seg of segs) {