Adam Shaw 6 anni fa
parent
commit
7d0ec07d88

+ 23 - 24
packages/core/src/CalendarComponent.ts

@@ -40,7 +40,7 @@ export default class CalendarComponent extends Component<CalendarComponentProps,
   private buildViewPropTransformers = memoize(buildViewPropTransformers)
   private updateClassNames = renderer(this._setClassNames, this._unsetClassNames)
   private renderViewContainer = renderer(this._renderViewContainer)
-  private buildToolbarProps = memoize(this._buildToolbarProps)
+  private buildToolbarProps = memoize(buildToolbarProps)
   private renderHeader = renderer(Toolbar)
   private renderFooter = renderer(Toolbar)
   private renderViews = listRenderer()
@@ -61,7 +61,7 @@ export default class CalendarComponent extends Component<CalendarComponentProps,
     let innerEls: HTMLElement[] = []
 
     this.freezeHeight() // thawed after render
-    this.updateClassNames(true)
+    this.updateClassNames({})
 
     if (context.options.header) {
       let header = this.renderHeader({
@@ -147,28 +147,6 @@ export default class CalendarComponent extends Component<CalendarComponentProps,
   }
 
 
-  _buildToolbarProps(
-    viewSpec: ViewSpec,
-    dateProfile: DateProfile,
-    dateProfileGenerator: DateProfileGenerator,
-    currentDate: DateMarker,
-    now: DateMarker,
-    title: string
-  ) {
-    let todayInfo = dateProfileGenerator.build(now)
-    let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate)
-    let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate)
-
-    return {
-      title,
-      activeButton: viewSpec.type,
-      isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
-      isPrevEnabled: prevInfo.isValid,
-      isNextEnabled: nextInfo.isValid
-    }
-  }
-
-
   renderView(props: CalendarComponentProps, viewContainerEl: HTMLElement, context: ComponentContext) {
     let { pluginHooks, options } = context
     let { viewSpec } = props
@@ -295,6 +273,27 @@ export default class CalendarComponent extends Component<CalendarComponentProps,
 
 }
 
+function buildToolbarProps(
+  viewSpec: ViewSpec,
+  dateProfile: DateProfile,
+  dateProfileGenerator: DateProfileGenerator,
+  currentDate: DateMarker,
+  now: DateMarker,
+  title: string
+) {
+  let todayInfo = dateProfileGenerator.build(now)
+  let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate)
+  let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate)
+
+  return {
+    title,
+    activeButton: viewSpec.type,
+    isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
+    isPrevEnabled: prevInfo.isValid,
+    isNextEnabled: nextInfo.isValid
+  }
+}
+
 
 // Plugin
 // -----------------------------------------------------------------------------------------------------------------

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

@@ -60,7 +60,7 @@ export default abstract class View extends DateComponent<ViewProps> {
   }
 
 
-  componentDidUpdate(prevProps, prevState, snapshot) {
+  componentDidUpdate(prevProps, prevState, snapshot) { // how do we know children element will be done?
     this.applyScroll(snapshot, false)
   }
 

+ 12 - 5
packages/core/src/view-framework.ts

@@ -6,6 +6,13 @@ import { __assign } from 'tslib'
 let guid = 0
 
 
+// TODO: accept no args to render method. if no args, never rerenders!!!!
+// htmlToNodes
+// htmlToEl
+// PRO over preact: guaranteed to update children first
+// document this.state/props
+// TODO: id should be optional. only warn on collision
+
 // top-level renderer
 // ----------------------------------------------------------------------------------------------------
 
@@ -184,7 +191,7 @@ export abstract class Component<Props, Context={}, State={}, RenderResult=void,
   renderEngine: RenderEngine
   childUnmounts: (() => void)[] = []
 
-  uid = String(guid++)
+  uid = String(guid++) // not used internally here. but other places can use it
   isMounted = false
   location: Partial<DomLocation> = {}
   rootEls: Node[] = [] // TODO: rename to rootNodes?
@@ -208,12 +215,12 @@ export abstract class Component<Props, Context={}, State={}, RenderResult=void,
   componentDidMount() {
   }
 
-  getSnapshotBeforeUpdate(prevProps: Props, prevState: State, prevContext: Context) {
-    return {} as Snapshot
+  shouldComponentUpdate(nextProps: Props, nextState: State, nextContext: Context) {
+    return true
   }
 
-  shouldComponentUpdate(nextProps: Props, nextState: State, prevContext: Context) {
-    return true
+  getSnapshotBeforeUpdate(prevProps: Props, prevState: State, prevContext: Context) {
+    return {} as Snapshot
   }
 
   componentDidUpdate(prevProps: Props, prevState: State, snapshot: Snapshot) {