Преглед изворни кода

hook for modifying view container

Adam Shaw пре 7 година
родитељ
комит
6b85f0cba9
3 измењених фајлова са 17 додато и 4 уклоњено
  1. 5 0
      src/CalendarComponent.ts
  2. 1 1
      src/exports.ts
  3. 11 3
      src/plugin-system.ts

+ 5 - 0
src/CalendarComponent.ts

@@ -52,6 +52,11 @@ export default class CalendarComponent extends Component<CalendarComponentProps>
       this.contentEl = createElement('div', { className: 'fc-view-container' })
     )
 
+    let { calendar } = this
+    for (let modifyViewContainer of calendar.pluginSystem.hooks.viewContainerModifiers) {
+      modifyViewContainer(this.contentEl, calendar)
+    }
+
     this.toggleElClassNames(true)
 
     this.computeTitle = memoize(computeTitle)

+ 1 - 1
src/exports.ts

@@ -143,7 +143,7 @@ export { globalDefaults } from './options'
 
 export { registerRecurringType, ParsedRecurring } from './structs/recurring-event'
 
-export { createPlugin, PluginDef, PluginDefInput, ViewPropsTransformer } from './plugin-system'
+export { createPlugin, PluginDef, PluginDefInput, ViewPropsTransformer, ViewContainerModifier } from './plugin-system'
 export { reducerFunc, Action, CalendarState } from './reducers/types'
 export { CalendarComponentProps } from './CalendarComponent'
 

+ 11 - 3
src/plugin-system.ts

@@ -12,6 +12,7 @@ import { CalendarComponentProps } from './CalendarComponent'
 import { isPropsValidTester } from './validation'
 import { ExternalDefTransform } from './interactions-external/ExternalElementDragging'
 import { EventResizeJoinTransforms } from './interactions/EventResizing'
+import Calendar from './Calendar'
 import View from './View'
 
 // TODO: easier way to add new hooks? need to update a million things
@@ -31,6 +32,7 @@ export interface PluginDefInput {
   isPropsValid?: isPropsValidTester
   externalDefTransforms?: ExternalDefTransform[]
   eventResizeJoinTransforms?: EventResizeJoinTransforms[]
+  viewContainerModifiers?: ViewContainerModifier[]
 }
 
 export interface PluginHooks {
@@ -47,6 +49,7 @@ export interface PluginHooks {
   isPropsValid: isPropsValidTester | null
   externalDefTransforms: ExternalDefTransform[]
   eventResizeJoinTransforms: EventResizeJoinTransforms[]
+  viewContainerModifiers: ViewContainerModifier[]
 }
 
 export interface PluginDef extends PluginHooks {
@@ -60,6 +63,8 @@ export interface ViewPropsTransformer {
   transform(viewProps: ViewProps, viewSpec: ViewSpec, calendarProps: CalendarComponentProps, view: View): any
 }
 
+export type ViewContainerModifier = (contentEl: HTMLElement, calendar: Calendar) => void
+
 
 let uid = 0
 
@@ -79,7 +84,8 @@ export function createPlugin(input: PluginDefInput): PluginDef {
     viewPropsTransformers: input.viewPropsTransformers || [],
     isPropsValid: input.isPropsValid || null,
     externalDefTransforms: input.externalDefTransforms || [],
-    eventResizeJoinTransforms: input.eventResizeJoinTransforms || []
+    eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],
+    viewContainerModifiers: input.viewContainerModifiers || []
   }
 }
 
@@ -102,7 +108,8 @@ export class PluginSystem {
       viewPropsTransformers: [],
       isPropsValid: null,
       externalDefTransforms: [],
-      eventResizeJoinTransforms: []
+      eventResizeJoinTransforms: [],
+      viewContainerModifiers: []
     }
     this.addedHash = {}
   }
@@ -135,6 +142,7 @@ function combineHooks(hooks0: PluginHooks, hooks1: PluginHooks): PluginHooks {
     viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
     isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
     externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
-    eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms)
+    eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),
+    viewContainerModifiers: hooks0.viewContainerModifiers.concat(hooks1.viewContainerModifiers)
   }
 }