Skip to content

Commit 720675e

Browse files
committed
[added] eventPropsGetter for event markup customization
1 parent 3e354d9 commit 720675e

File tree

6 files changed

+33
-7
lines changed

6 files changed

+33
-7
lines changed

examples/App.js

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const Example = React.createClass({
4040
popup
4141
events={events}
4242
defaultDate={new Date(2015, 1, 1)}
43+
eventPropGetter={e => ({ className: 'hi-event'})}
4344
components={{
4445
event: EventWeek,
4546
agenda: {

src/Calendar.jsx

+15
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,21 @@ let Calendar = React.createClass({
8989
*/
9090
selectable: PropTypes.bool,
9191

92+
/**
93+
* Optionally provide a function that returns an object of className or style props
94+
* to be applied to the the event node.
95+
*
96+
* ```js
97+
* function(
98+
* event: object,
99+
* start: date,
100+
* end: date,
101+
* isSelected: bool
102+
* ) -> { className: string?, style: object? }
103+
* ```
104+
*/
105+
eventPropGetter: PropTypes.func,
106+
92107
/**
93108
* Accessor for the event title, used to display event information. Should
94109
* resolve to a `renderable` value.

src/DaySlot.jsx

+8-4
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ let DaySlot = React.createClass({
116116

117117
renderEvents(numSlots, totalMin) {
118118
let {
119-
events, step, min, culture
119+
events, step, min, culture, eventPropGetter
120120
, selected, eventTimeRangeFormat, eventComponent
121121
, startAccessor, endAccessor, titleAccessor } = this.props;
122122

@@ -136,14 +136,18 @@ let DaySlot = React.createClass({
136136

137137
let title = get(event, titleAccessor)
138138
let label = localizer.format({ start, end }, eventTimeRangeFormat, culture);
139+
let _isSelected = isSelected(event, selected);
140+
141+
if (eventPropGetter)
142+
var { style: xStyle, className } = eventPropGetter(event, start, end, _isSelected);
139143

140144
return (
141145
<div
142146
key={'evt_' + idx}
143-
style={style}
147+
style={{...xStyle, ...style}}
144148
onClick={this._select.bind(null, event)}
145-
className={cn('rbc-event', {
146-
'rbc-selected': isSelected(event, selected)
149+
className={cn('rbc-event', className, {
150+
'rbc-selected': _isSelected
147151
})}
148152
>
149153
<div className='rbc-event-label' title={label}>{label}</div>

src/EventCell.jsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { accessor as get } from './utils/accessors';
66
let EventCell = React.createClass({
77
render() {
88
let {
9-
className, event, selected
9+
className, event, selected, eventPropGetter
1010
, startAccessor, endAccessor, titleAccessor
1111
, slotStart, slotEnd, onSelect, component, ...props } = this.props;
1212

@@ -16,10 +16,14 @@ let EventCell = React.createClass({
1616
, end = get(event, endAccessor)
1717
, start = get(event, startAccessor)
1818

19+
if (eventPropGetter)
20+
var { style, className: xClassName } = eventPropGetter(event, start, end, selected);
21+
1922
return (
2023
<div
2124
{...props}
22-
className={cn('rbc-event', className, {
25+
style={{...props.style, ...style}}
26+
className={cn('rbc-event', className, xClassName, {
2327
'rbc-selected': selected,
2428
'rbc-event-continues-prior': dates.lt(start, slotStart),
2529
'rbc-event-continues-after': dates.gt(end, slotEnd)

src/EventRow.jsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,14 @@ let EventRow = React.createClass({
6666

6767
renderEvent(event, start, end, props = {}){
6868
let {
69-
selected, startAccessor, endAccessor
69+
eventPropGetter, selected, startAccessor, endAccessor
7070
, titleAccessor, eventComponent, onSelect } = this.props;
7171

7272

7373
return (
7474
<EventCell
7575
event={event}
76+
eventPropGetter={eventPropGetter}
7677
onSelect={onSelect}
7778
selected={isSelected(event, selected)}
7879
startAccessor={startAccessor}

src/Month.jsx

+1
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ let MonthView = React.createClass({
298298
slotEnd={overlay.end}
299299
selected={this.props.selected}
300300
onSelect={this._selectEvent}
301+
eventPropGetter={this.props.eventPropGetter}
301302
startAccessor={this.props.startAccessor}
302303
endAccessor={this.props.endAccessor}
303304
titleAccessor={this.props.titleAccessor}

0 commit comments

Comments
 (0)