@@ -4,7 +4,8 @@ import { TimelineStateConsumer } from '../timeline/TimelineStateContext'
44import CustomHeader from './CustomHeader'
55import { getNextUnit } from '../utility/calendar'
66import { defaultHeaderFormats } from '../default-config'
7- import Interval from './Interval'
7+ import memoize from 'memoize-one'
8+ import { CustomDateHeader } from './CustomDateHeader'
89
910class DateHeader extends React . Component {
1011 static propTypes = {
@@ -19,7 +20,7 @@ class DateHeader extends React.Component {
1920 ] ) . isRequired ,
2021 intervalRenderer : PropTypes . func ,
2122 headerData : PropTypes . object ,
22- height : PropTypes . number ,
23+ height : PropTypes . number
2324 }
2425
2526 getHeaderUnit = ( ) => {
@@ -31,14 +32,14 @@ class DateHeader extends React.Component {
3132 return this . props . timelineUnit
3233 }
3334
34- getRootStyle = ( ) => {
35+ getRootStyle = memoize ( style => {
3536 return {
3637 height : 30 ,
37- ...this . props . style
38+ ...style
3839 }
39- }
40+ } )
4041
41- getLabelFormat ( interval , unit , labelWidth ) {
42+ getLabelFormat = ( interval , unit , labelWidth ) => {
4243 const { labelFormat } = this . props
4344 if ( typeof labelFormat === 'string' ) {
4445 const startTime = interval [ 0 ]
@@ -50,50 +51,43 @@ class DateHeader extends React.Component {
5051 }
5152 }
5253
54+ getHeaderData = memoize (
55+ (
56+ intervalRenderer ,
57+ style ,
58+ className ,
59+ getLabelFormat ,
60+ unitProp ,
61+ headerData
62+ ) => {
63+ return {
64+ intervalRenderer,
65+ style,
66+ className,
67+ getLabelFormat,
68+ unitProp,
69+ headerData
70+ }
71+ }
72+ )
73+
5374 render ( ) {
5475 const unit = this . getHeaderUnit ( )
5576 const { headerData, height } = this . props
5677 return (
57- < CustomHeader unit = { unit } height = { height } headerData = { headerData } >
58- { ( {
59- headerContext : { intervals } ,
60- getRootProps,
61- getIntervalProps,
62- showPeriod,
63- data
64- } ) => {
65- const unit = this . getHeaderUnit ( )
66-
67- return (
68- < div
69- data-testid = { `dateHeader` }
70- className = { this . props . className }
71- { ...getRootProps ( { style : this . getRootStyle ( ) } ) }
72- >
73- { intervals . map ( interval => {
74- const intervalText = this . getLabelFormat (
75- [ interval . startTime , interval . endTime ] ,
76- unit ,
77- interval . labelWidth
78- )
79- return (
80- < Interval
81- key = { `label-${ interval . startTime . valueOf ( ) } ` }
82- unit = { unit }
83- interval = { interval }
84- showPeriod = { showPeriod }
85- intervalText = { intervalText }
86- primaryHeader = { this . props . unit === 'primaryHeader' }
87- getIntervalProps = { getIntervalProps }
88- intervalRenderer = { this . props . intervalRenderer }
89- headerData = { data }
90- />
91- )
92- } ) }
93- </ div >
94- )
95- } }
96- </ CustomHeader >
78+ < CustomHeader
79+ unit = { unit }
80+ height = { height }
81+ headerData = { this . getHeaderData (
82+ this . props . intervalRenderer ,
83+ this . getRootStyle ( this . props . style ) ,
84+ this . props . className ,
85+ this . getLabelFormat ,
86+ this . props . unit ,
87+ this . props . headerData
88+ ) }
89+ children = { CustomDateHeader }
90+ />
9791 )
9892 }
9993}
@@ -105,7 +99,7 @@ const DateHeaderWrapper = ({
10599 className,
106100 intervalRenderer,
107101 headerData,
108- height,
102+ height
109103} ) => (
110104 < TimelineStateConsumer >
111105 { ( { getTimelineState } ) => {
@@ -137,7 +131,7 @@ DateHeaderWrapper.propTypes = {
137131 ] ) ,
138132 intervalRenderer : PropTypes . func ,
139133 headerData : PropTypes . object ,
140- height : PropTypes . number ,
134+ height : PropTypes . number
141135}
142136
143137DateHeaderWrapper . defaultProps = {
0 commit comments