Skip to content
This repository was archived by the owner on Aug 1, 2024. It is now read-only.

Commit beafbc2

Browse files
committed
Adding optional custom DateHeader component for month
1 parent 4170e6e commit beafbc2

File tree

5 files changed

+57
-12
lines changed

5 files changed

+57
-12
lines changed

src/Calendar.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ class Calendar extends React.Component {
131131
* ```
132132
*/
133133
onSelecting: PropTypes.func,
134-
135134
/**
136135
* The selected event, if any.
137136
*/
@@ -420,6 +419,7 @@ class Calendar extends React.Component {
420419
}),
421420
month: PropTypes.shape({
422421
header: elementType,
422+
dateHeader: elementType,
423423
event: elementType
424424
})
425425
}),

src/DateContentRow.js

+2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ class DateContentRow extends React.Component {
104104
date,
105105
key: `header_${index}`,
106106
style: segStyle(1, range.length),
107+
isFirstInRange: index === 0,
108+
isLastInRange: index === range.length - 1,
107109
className: cn(
108110
'rbc-date-cell',
109111
dates.eq(date, this.props.now, 'day') && 'rbc-now', // FIXME use props.now

src/DateHeader.js

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import PropTypes from 'prop-types';
2+
import React from 'react'
3+
4+
const DateHeader = ({ label, drillDownView, onDrillDown }) => {
5+
if (!drillDownView) {
6+
return (<span>{label}</span>)
7+
}
8+
9+
return (
10+
<a href="#" onClick={onDrillDown}>
11+
{label}
12+
</a>
13+
)
14+
}
15+
16+
DateHeader.propTypes = {
17+
label: PropTypes.node,
18+
date: PropTypes.instanceOf(Date),
19+
drillDownView: PropTypes.string,
20+
onDrillDown: PropTypes.func,
21+
isFirstInRange: PropTypes.bool,
22+
isLastInRange: PropTypes.bool,
23+
isOffRange: PropTypes.bool,
24+
isCurrent: PropTypes.bool
25+
}
26+
27+
export default DateHeader

src/Month.js

+12-11
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import Popup from './Popup'
1616
import Overlay from 'react-overlays/lib/Overlay'
1717
import DateContentRow from './DateContentRow'
1818
import Header from './Header'
19+
import DateHeader from './DateHeader'
1920

2021
import { accessor, dateFormat } from './utils/propTypes'
2122
import { segStyle, inRange, sortEvents } from './utils/eventLevels'
@@ -193,7 +194,7 @@ class MonthView extends React.Component {
193194
)
194195
}
195196

196-
readerDateHeading = ({ date, className, ...props }) => {
197+
readerDateHeading = ({ date, className, isFirstInRange, isLastInRange, ...props }) => {
197198
let {
198199
date: currentDate,
199200
getDrilldownView,
@@ -205,6 +206,7 @@ class MonthView extends React.Component {
205206
let isCurrent = dates.eq(date, currentDate, 'day')
206207
let drilldownView = getDrilldownView(date)
207208
let label = localizer.format(date, dateFormat, culture)
209+
let DateHeaderComponent = this.props.components.dateHeader || DateHeader
208210

209211
return (
210212
<div
@@ -215,16 +217,15 @@ class MonthView extends React.Component {
215217
isCurrent && 'rbc-current'
216218
)}
217219
>
218-
{drilldownView
219-
? <a
220-
href="#"
221-
onClick={e => this.handleHeadingClick(date, drilldownView, e)}
222-
>
223-
{label}
224-
</a>
225-
: <span>
226-
{label}
227-
</span>}
220+
<DateHeaderComponent
221+
label={label}
222+
date={date}
223+
drilldownView={drilldownView}
224+
isFirstInRange={isFirstInRange}
225+
isLastInRange={isLastInRange}
226+
isOffRange={isOffRange}
227+
isCurrent={isCurrent}
228+
onDrillDown={e => this.handleHeadingClick(date, drilldownView, e)} />
228229
</div>
229230
)
230231
}

stories/Calendar.js

+15
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,21 @@ storiesOf('module.Calendar.week', module)
261261
</div>
262262
)
263263
})
264+
.add('add custom date header', () => {
265+
return (
266+
<div style={{height: 600}}>
267+
<Calendar
268+
defaultView={Calendar.Views.MONTH}
269+
events={events}
270+
components={{
271+
month: {
272+
dateHeader: ({ label }) => <span>{label} - Custom date header</span>
273+
}
274+
}}
275+
/>
276+
</div>
277+
)
278+
})
264279
.add('no duration', () => {
265280
return (
266281
<div style={{height: 600}}>

0 commit comments

Comments
 (0)