Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I create a custom Event Component for react-big-calendar?

The docs mention having the ability to create custom components: http://intljusticemission.github.io/react-big-calendar/examples/index.html#prop-components

I've tried with:

<BigCalendar
  events={this.state.bookings}
  step={60}
  timeslots={1}
  defaultView='week'
  defaultDate={new Date()}
  min={new Date(this.state.today.getFullYear(), this.state.today.getMonth(), this.state.today.getDate(), 8)}
  components={{
    event: <EventComponent />
  }}
/>

Where EventComponent is:

class EventComponent extends React.Component {
  render() {
    return <h1>here we go!</h1>
  }
}

But the error I get is:

Warning: Failed prop type: Invalid prop `components.event` of type ReactElement supplied to `Calendar`, expected an element type (a string or a ReactClass).
    in Calendar (created by Uncontrolled(Calendar))
    in Uncontrolled(Calendar) (at calendar.jsx:50)
    in div (at calendar.jsx:48)
    in Calendar (created by RouterContext)
    in div (at App.js:17)
    in div (at App.js:15)
    in App (created by RouterContext)
    in RouterContext (created by Router)
    in Router (at index.js:27)
    in Provider (at index.js:26)

and

Unhandled rejection Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. Check the render method of `DaySlot`.
    at invariant (http://localhost:3000/static/js/bundle.js:11534:16)
    at instantiateReactComponent (http://localhost:3000/static/js/bundle.js:25911:24)
    at instantiateChild (http://localhost:3000/static/js/bundle.js:25716:29)
    at http://localhost:3000/static/js/bundle.js:25743:17
    at traverseAllChildrenImpl (http://localhost:3000/static/js/bundle.js:27459:6)
    at traverseAllChildren (http://localhost:3000/static/js/bundle.js:27554:11)

So what am I to do?

like image 583
Shamoon Avatar asked Feb 24 '17 00:02

Shamoon


2 Answers

You have to change this part:

components={{
    event: <EventComponent />
  }}

with this:

 components={{
    event: EventComponent
  }}
like image 63
Gino Llerena Avatar answered Sep 28 '22 23:09

Gino Llerena


@Gino Llerena's comment should be the accepted answer, by adding a console log you can see all the data in your event and customize your component accoridngly

const CustomEvent = (event) => { 
  console.log(event)
  return ( 
    <span> <strong> event.title </strong> </span> 
  ) 
}
like image 23
Pixelomo Avatar answered Sep 28 '22 21:09

Pixelomo