Displaying popover after clicking on an event in react-big-calendar

狂风中的少年 提交于 2020-01-25 11:58:23

问题


I created the Event () function that it passes as a custom component to

<Calendar components = {{
   event: Event
}}/>

Then in the Event () function I create the variable popoverClickRootClose, in which I place the react-bootstrappopover. Then popoverClickRootClose passes to the component:

<OverlayTrigger overlay = {popoverClickRootClose}>
     <div> {event.title}</ div>
</ OverlayTrigger>

After clicking in the event no popover appears. Could someone advise me what I am doing wrong?

Demo here: https://stackblitz.com/edit/react-umtvgs

import React, { Component } from 'react';
import { render } from 'react-dom';
import { Calendar, momentLocalizer } from 'react-big-calendar';
import moment from 'moment';
import 'react-big-calendar/lib/css/react-big-calendar.css';
import {Overlay} from 'react-bootstrap';
import {OverlayTrigger} from 'react-bootstrap';
import {Popover} from 'react-bootstrap';

const localizer = momentLocalizer(moment);

function Event({ event }) {
  let popoverClickRootClose = (
    <Popover id="popover-trigger-click-root-close" style={{ zIndex: 10000 }}>
      <strong>Holy guacamole!</strong> Check this info.
      <strong>{event.title}</strong>
    </Popover>
  );

  console.log(event);
  return (
    <div>
      <div>
        <OverlayTrigger id="help" trigger="click" rootClose container={this} placement="bottom" overlay={popoverClickRootClose}>
          <div>{event.title}</div>
        </OverlayTrigger>
      </div>
    </div>
  );
}

class App extends Component {
  constructor() {
    const now = new Date();
    const events = [
      {
          id: 0,
          title: 'All Day Event very long title',
          allDay: true,
          start: new Date(2019, 6, 0),
          end: new Date(2019, 6, 1),
          description: 'sdsdsdsdsdsdsdsd'
      },
      {
          id: 1,
          title: 'Long Event',
          start: new Date(2019, 3, 7),
          end: new Date(2019, 3, 10),
          description: 'yyyyyyyyyyyyyyyyyy'
      },
      {
          id: 2,
          title: 'Right now Time Event',
          start: now,
          end: now,
          description: 'cddffffffffdfdfdfd'
      },
    ]
    this.state = {
      events
    };
  }

  render() {
    return (
        <div style={{ height: '500pt'}}>
          <Calendar
            events={this.state.events}
            startAccessor="start"
            endAccessor="end"
            defaultDate={moment().toDate()}
            localizer={localizer}
             components={{
              event: Event
            }}
          />
        </div>
    );
  }
}

render(<App />, document.getElementById('root'));

回答1:


There is no issue with the Javascript code you posted. It's a CSS issue

You have included multiple bootstrap css versions (bootstrap 4 and 3) and the react-bootstrap package version is 0.32 which works well, only with bootstrap 3

Remove bootstrap 4.3.1 reference from the html as its not compatible with the react-bootstrap package you are using.

Change..

<link
  rel="stylesheet"
  href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
  integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
  crossorigin="anonymous"
/>
<link
  rel="stylesheet"
  href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
  integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
  crossorigin="anonymous"
/>

to

<link
      rel="stylesheet"
      href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
      integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
      crossorigin="anonymous"
    />

I have added the working stackblitz link as a comment.



来源:https://stackoverflow.com/questions/58538528/displaying-popover-after-clicking-on-an-event-in-react-big-calendar

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!