I need to call cancelMethod
with params from Button onClick inside popover
. However I could not access this method. Can you explain is it possible to access. If yes how can I do it?
JavaScript
x
76
76
1
const popover = (
2
<Popover id="popover-basic">
3
<Popover.Title as="h3">Cancel reservation</Popover.Title>
4
<Popover.Content>
5
for <strong>canceling</strong> course. Click here:
6
<Button onClick={cancelMethod()} variant='danger'>Cancel</Button>
7
</Popover.Content>
8
</Popover>
9
);
10
11
const Event = ({event}) => (
12
<OverlayTrigger trigger="click" placement="top" overlay={popover}>
13
<Button
14
style={{background:"transparent", border:"none"}}
15
>{event.title} <br/> Lecture Room:{event.room}<br/> Teacher: {event.instructor}</Button>
16
</OverlayTrigger>
17
);
18
19
20
export default class NewCalendarView extends Component {
21
22
cancelMethod(id){
23
alert("Hello"+id);
24
}
25
26
componentDidMount() {
27
API.getLectures().then((res)=>{
28
console.log(res)
29
const cal=res.map((lec)=>{
30
let lecture= {
31
instructor: lec.teacherName,
32
room: lec.room,
33
title: lec.subject,
34
startDate : moment(lec.date+"T"+lec.hour).toDate(),
35
endDate: moment(lec.date+"T"+lec.hour+"-02:00").toDate()
36
}
37
return lecture;
38
})
39
this.setState({events:cal,loading:null,serverErr:null})
40
}).catch((err)=>{
41
this.setState({serverErr:true,loading:null})
42
})
43
}
44
constructor(props) {
45
super(props);
46
47
this.state = {
48
events: []
49
}
50
}
51
52
render() {
53
return (
54
<div style={{
55
flex: 1
56
}}>
57
{console.log(this.state.events)}
58
59
<Calendar
60
localizer={localizer}
61
events={this.state.events}
62
startAccessor='startDate'
63
endAccessor='endDate'
64
defaultView='week'
65
views={['month', 'week', 'day']}
66
culture='en'
67
components={{
68
event: Event
69
}}
70
71
/>
72
</div>
73
);
74
}
75
}
76
Advertisement
Answer
You can define the functions Popover and Event within the class and the call the function with this keyword.
JavaScript
1
76
76
1
export default class NewCalendarView extends Component {
2
cancelMethod(id){
3
alert("Hello"+id);
4
}
5
6
componentDidMount() {
7
API.getLectures().then((res)=>{
8
console.log(res)
9
const cal=res.map((lec)=>{
10
let lecture= {
11
instructor: lec.teacherName,
12
room: lec.room,
13
title: lec.subject,
14
startDate : moment(lec.date+"T"+lec.hour).toDate(),
15
endDate: moment(lec.date+"T"+lec.hour+"-02:00").toDate()
16
}
17
return lecture;
18
})
19
this.setState({events:cal,loading:null,serverErr:null})
20
}).catch((err)=>{
21
this.setState({serverErr:true,loading:null})
22
})
23
}
24
constructor(props) {
25
super(props);
26
27
this.state = {
28
events: []
29
}
30
}
31
32
Popover = (
33
<Popover id="popover-basic">
34
<Popover.Title as="h3">Cancel reservation</Popover.Title>
35
<Popover.Content>
36
for <strong>canceling</strong> course. Click here:
37
<Button onClick={cancelMethod()} variant='danger'>Cancel</Button>
38
</Popover.Content>
39
</Popover>
40
);
41
42
Event = ({event}) => (
43
<OverlayTrigger trigger="click" placement="top" overlay={this.popover}> // added the this keyword
44
<Button
45
style={{background:"transparent", border:"none"}}
46
>{event.title} <br/> Lecture Room:{event.room}<br/> Teacher: {event.instructor}</Button>
47
</OverlayTrigger>
48
);
49
50
render() {
51
return (
52
<div style={{
53
flex: 1
54
}}>
55
{console.log(this.state.events)}
56
57
<Calendar
58
localizer={localizer}
59
events={this.state.events}
60
startAccessor='startDate'
61
endAccessor='endDate'
62
defaultView='week'
63
views={['month', 'week', 'day']}
64
min={new Date(2020, 1, 0, 7, 0, 0)}
65
max={new Date(2022, 1, 0, 21, 0, 0)}
66
culture='en'
67
components={{
68
event: this.Event // added the this keyword
69
}}
70
71
/>
72
</div>
73
);
74
}
75
}
76