javascript - FullCalendar React App Component 未将事件添加到 Week 和 Day 视图,也没有消磨时间
问题描述
我正在尝试使用 FullCalendar 来安排活动。我可以添加一个事件,但只能在月视图中。我无法在日视图或周视图中这样做。此外,我似乎无法将在“日”或“周”视图中选择的时间传递给我的计划模式,也不能在添加时返回。我尝试从日期字符串重新格式化时间,它在控制台中看起来是正确的,但它只是没有粘在模态中。任何帮助是极大的赞赏。我试图不使用 FullCalendar 的任何插件或付费选项,并试图坚持使用 Vanilla Javascript。
//调度组件
import React from 'react';
import FullCalendar from '@fullcalendar/react';
import dayGridPlugin from '@fullcalendar/daygrid';
import interactionPlugin from "@fullcalendar/interaction";
import timeGridPlugin from "@fullcalendar/timegrid";
import {ScheduleModal} from "./ScheduleModal";
import {Modal,Button,Row,Col, Form,ButtonToolbar} from 'react-bootstrap';
import 'jquery/dist/jquery.min.js';
import $ from "jquery";
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap/dist/js/bootstrap.bundle.min.js';
import '../Schedule.css';
import Header from "./Header";
import { INITIAL_EVENTS, createEventId } from './event-utils'
import { formatDate, formatIsoTimeString } from '@fullcalendar/core'
export default class Schedule extends React.Component {
calendarComponentRef = React.createRef();
constructor(props){
super(props);
this.state = {addModalShow : false, sent : false,
calendarEvents: [
// initial event data needs to loop through CourierService table
{ title: "Test Event", start: '2020-06-25' }
]}
}
state = {
calendarWeekends: true,
};
//Add Event button handler
handleAddClick =()=>{
this.setState({addModalShow: true,
firstName:null,
lastName: null,
cellNum : null})
};
render() {
let addModalClose =() => this.setState({addModalShow: false})
return (
<div>
<Header></Header>
<br></br>
<br></br>
<br></br>
<div className="demo-app">
<div className="demo-app-top">
<br></br>
<br></br>
<ButtonToolbar>
<Button style={{marginLeft:'170px'}} //onClick ={()=>this.setState({addModalShow: true})}
onClick={()=>this.handleAddClick()}
>Add Event</Button>
<ScheduleModal
show={this.state.addModalShow}
onHide = {addModalClose}
date = {this.state.date}
saveEvent = {this.addEvent}
firstName = {this.state.firstName}
eventTime = {this.state.eventTime}
/>
</ButtonToolbar>
</div>
<div className="demo-app-calendar">
<FullCalendar className = 'calendar' id = 'calendar'
defaultView="dayGridMonth"
header={{
left: "prev,next today",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay,listWeek"
}}
titleFormat = {{
month: '2-digit',
day:'2-digit',
year: 'numeric'
}}
eventTimeFormat= {{
hour: "numeric",
minute: "2-digit",
meridiem: "short",
}}
plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin]}
ref={this.calendarComponentRef}
weekends={this.state.calendarWeekends}
selectable={true}
editable = {true}
eventLimit={true}
events={ [...this.state.calendarEvents]}
initialEvents = {INITIAL_EVENTS}
select ={this.handleSelect}
//eventClick ={this.editEvent}
//eventContent={renderEventContent}
eventsSet={this.handleEvents}
//select={this.handleDateSelect}
dateClick={this.handleDateClick} // maybe here pass the date and time :(?)
displayEventTime= {true}
timeFormat ={
'hh:mm A'
}
//slotLabelFormat={"HH:mm"}
/>
</div>
</div>
</div>
);
}
toggleWeekends = () => {
this.setState({
// update a property
calendarWeekends: !this.state.calendarWeekends
});
};
gotoPast = () => {
let calendarApi = this.calendarComponentRef.current.getApi();
calendarApi.gotoDate("2000-01-01"); // call a method on the Calendar object
};
addEvent =(e,firstName, date,eventTime) =>{
//let title = prompt('Please enter a new title for your event')
alert('this is the time',eventTime)
var array = this.state.calendarEvents;
array.push({title: firstName, start:this.state.start });
this.setState({calendarEvents: array,addModalShow: false });
};
handleSelect = (selectInfo) => {
//save the dates
console.log()
console.log("handleSelect")
this.setState({start: selectInfo.startStr})
}
handleDateClick = arg => {
//this.setState({addShowModule: true})
let eventDate = formatDate(arg.dateStr, {
month: '2-digit',
day:'2-digit',
year: 'numeric'
})
let eventTime = formatDate(arg.dateStr,{
hour: "2-digit",
minute: "2-digit",
meridiem: " long",
});
console.log(eventTime)
this.setState({addModalShow: true,
date:arg.dateStr,
eventTime: eventTime})
};
};
//Schedule Modal
import React, {Component} from 'react';
import {Modal,Button,Row,Col, Form} from 'react-bootstrap';
export class ScheduleModal extends React.Component {
constructor(props){
super(props);
this.state ={
firstName :null,
date: null,
eventTime:null
}
}
onClickJobEntry=()=>{
this.props.history.push('/JobOrderEntryTicket')
};
handleChange = (event) => {
event.preventDefault();
console.log(event.target.value)
this.setState({
[event.target.name]: event.target.value
}) }
render() {
return (
<Modal
{...this.props}
size="lg"
aria-labelledby="contained-modal-title-vcenter"
centered
>
<Modal.Header >
<Modal.Title id="contained-modal-title-vcenter">
Schedule Pick Up or Delivery
</Modal.Title>
</Modal.Header>
<Modal.Body>
<div className = "container">
<Form onChange ={this.handleChange} >
<Form.Row>
<Form.Group as={Col} controlId="formJobID">
<Form.Label>JobID</Form.Label>
<Form.Control as="select" defaultValue="Choose...">
<option>1</option>
</Form.Control>
</Form.Group>
<Form.Group as={Col} controlId="formAssignedCourier">
<Form.Label>Assigned Courier</Form.Label>
<Form.Control as="select" defaultValue="Choose...">
<option>Arturo</option>
<option>Kristofer</option>
</Form.Control>
</Form.Group>
<Form.Group as={Col} controlId="formAssignedCourier">
<Form.Label>Select Customer</Form.Label>
<Form.Control as="select" defaultValue="Choose...">
<option>Jason Statham 305-834-0372</option>
<option>Will Smith 305-333-4555</option>
</Form.Control>
</Form.Group>
</Form.Row>
<Form.Row>
<Form.Group as={Col} controlId="formServiceRequested">
<Form.Label>Service</Form.Label>
<Form.Control as="select" defaultValue="Choose...">
<option>Pick-Up</option>
<option>Delivery</option>
</Form.Control>
</Form.Group>
<Form.Group as={Col} controlId="formScheduleDate">
<Form.Label>Date</Form.Label>
<Form.Control name = 'date' type='date' value = {this.props.date} >
</Form.Control>
</Form.Group>
<Form.Group as={Col} controlId="formScheduleTime">
<Form.Label>Time</Form.Label>
<Form.Control name = 'time' type ='time' defaultvalue = {this.props.eventTime}>
</Form.Control>
</Form.Group>
</Form.Row>
<Form.Row>
<Form.Group as={Col} controlId="formGridFirstName">
<Form.Label>First Name</Form.Label>
<Form.Control name = 'firstName' placeholder="First Name" defaultValue= {this.props.firsName}/>
</Form.Group>
<Form.Group as={Col} controlId="formGridLastName">
<Form.Label>Last Name</Form.Label>
<Form.Control placeholder="Last Name" />
</Form.Group>
</Form.Row>
<Form.Row>
<Form.Group as={Col} controlId="formGridPassword">
<Form.Label>Phone</Form.Label>
<Form.Control type = "phone" placeholder="Phone" />
</Form.Group>
<Form.Group as={Col} controlId="formGridEmail">
<Form.Label>Email</Form.Label>
<Form.Control type= "email" placeholder="Email" />
</Form.Group>
</Form.Row>
<Form.Group controlId="formGridAddress1">
<Form.Label>Address</Form.Label>
<Form.Control placeholder="1234 Main St" />
</Form.Group>
<Form.Group controlId="formGridAddress2">
<Form.Label>Address 2</Form.Label>
<Form.Control placeholder="Apartment, studio, or floor" />
</Form.Group>
<Form.Row>
<Form.Group as={Col} controlId="formGridCity">
<Form.Label>City</Form.Label>
<Form.Control />
</Form.Group>
<Form.Group as={Col} controlId="formGridState">
<Form.Label>State</Form.Label>
<Form.Control as="select" defaultValue="FL">
<option>FL</option>
<option>...</option>
</Form.Control>
</Form.Group>
<Form.Group as={Col} controlId="formGridZip">
<Form.Label>Zip</Form.Label>
<Form.Control />
</Form.Group>
</Form.Row>
<Form.Group id="formConfirmed">
<Form.Check type="checkbox" label="Confirmed" />
</Form.Group>
<Button variant="primary" onClick ={(e)=>this.props.saveEvent(e,this.state.firstName,this.state.date, this.state.eventTime)}>
Save
</Button>
<Button variant="success" /*onClick={(props)=>this.onClickJobEntry}*/>
Job Order Entry Ticket
</Button>
</Form>
</div>
</Modal.Body>
<Modal.Footer>
<Button onClick={this.props.onHide}>Close</Button>
</Modal.Footer>
</Modal>
)}}
解决方案
推荐阅读
- c# - 如何使用 Json.Net 序列化和反序列化自定义类型的集合
- flutter - 我想在文本小部件中使用来自异步函数的值
- c++ - 将 float ** 映射到 Eigen::MatrixXf
- android - 使用 proguard 时收到不明确的运行时错误消息
- blazor - 如何在 blazor webassembly MSAL 中处理多个资源的令牌
- python - 找出数学表达式中的所有变量
- node.js - 是否有任何技术原因可以避免 npm 中的自依赖本地依赖(文件引用)?
- r - 考虑插入符号中的技术复制
- spring-boot - 如何在spring boot中以dd-mm-yyy格式插入日期
- laravel-8 - API 端点是否可以返回多个模型(例如在前端配置创建/更新表单时)?