summaryrefslogtreecommitdiffstats
path: root/front/odiparpack/app/containers/Pages/Calendar
diff options
context:
space:
mode:
authorgabrhr <[email protected]>2022-04-20 10:19:29 -0500
committergabrhr <[email protected]>2022-04-20 10:19:29 -0500
commite13e630cd6e4fc0b1ff92098a28a770794c7bb9a (patch)
treee68ad2f947d1b3ec454529b35f37ca2f223e5431 /front/odiparpack/app/containers/Pages/Calendar
parent457816ac1129fcc6019d2fc795b6693ee6776d59 (diff)
downloadDP1_project-e13e630cd6e4fc0b1ff92098a28a770794c7bb9a.tar.gz
DP1_project-e13e630cd6e4fc0b1ff92098a28a770794c7bb9a.tar.bz2
DP1_project-e13e630cd6e4fc0b1ff92098a28a770794c7bb9a.zip
AƱadir plantilla
Base para front
Diffstat (limited to 'front/odiparpack/app/containers/Pages/Calendar')
-rw-r--r--front/odiparpack/app/containers/Pages/Calendar/index.js137
1 files changed, 137 insertions, 0 deletions
diff --git a/front/odiparpack/app/containers/Pages/Calendar/index.js b/front/odiparpack/app/containers/Pages/Calendar/index.js
new file mode 100644
index 0000000..fd5f412
--- /dev/null
+++ b/front/odiparpack/app/containers/Pages/Calendar/index.js
@@ -0,0 +1,137 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { withStyles } from '@material-ui/core/styles';
+import events from 'ba-api/eventData';
+import { bindActionCreators } from 'redux';
+import { connect } from 'react-redux';
+import { Helmet } from 'react-helmet';
+import brand from 'ba-api/brand';
+import 'ba-styles/vendors/react-big-calendar/react-big-calendar.css';
+import { EventCalendar, DetailEvent, AddEvent, Notification } from 'ba-components';
+import {
+ fetchAction,
+ addAction,
+ discardAction,
+ submitAction,
+ deleteAction,
+ closeNotifAction
+} from 'ba-actions/CalendarEventActions';
+
+const styles = {
+ root: {
+ display: 'block'
+ }
+};
+
+class Calendar extends React.Component {
+ state = {
+ anchorEl: false,
+ event: null,
+ anchorPos: { top: 0, left: 0 }
+ };
+
+ componentDidMount() {
+ this.props.fetchEventsData(events);
+ }
+
+ handleClick = event => {
+ setTimeout(() => {
+ const target = document.getElementsByClassName('rbc-selected')[0];
+ const targetBounding = target.getBoundingClientRect();
+ this.setState({
+ event,
+ anchorEl: true,
+ anchorPos: { top: targetBounding.top, left: targetBounding.left }
+ });
+ }, 200);
+ };
+
+ handleClose = () => {
+ this.setState({
+ anchorEl: false,
+ });
+ };
+
+ render() {
+ const title = brand.name + ' - Calendar';
+ const description = brand.desc;
+ const { anchorEl, anchorPos, event } = this.state;
+ const {
+ classes,
+ eventData,
+ openFrm,
+ addEvent,
+ discardEvent,
+ submit,
+ remove,
+ closeNotif,
+ messageNotif
+ } = this.props;
+ return (
+ <div>
+ <Helmet>
+ <title>{title}</title>
+ <meta name="description" content={description} />
+ <meta property="og:title" content={title} />
+ <meta property="og:description" content={description} />
+ <meta property="twitter:title" content={title} />
+ <meta property="twitter:description" content={description} />
+ </Helmet>
+ <Notification close={() => closeNotif()} message={messageNotif} />
+ <div className={classes.root}>
+ <EventCalendar events={eventData.toJS()} handleEventClick={this.handleClick} />
+ <DetailEvent
+ event={event}
+ anchorEl={anchorEl}
+ anchorPos={anchorPos}
+ close={this.handleClose}
+ remove={remove}
+ />
+ <AddEvent
+ openForm={openFrm}
+ addEvent={addEvent}
+ closeForm={discardEvent}
+ submit={submit}
+ />
+ </div>
+ </div>
+ );
+ }
+}
+
+Calendar.propTypes = {
+ classes: PropTypes.object.isRequired,
+ eventData: PropTypes.object.isRequired,
+ fetchEventsData: PropTypes.func.isRequired,
+ addEvent: PropTypes.func.isRequired,
+ submit: PropTypes.func.isRequired,
+ discardEvent: PropTypes.func.isRequired,
+ remove: PropTypes.func.isRequired,
+ openFrm: PropTypes.bool.isRequired,
+ closeNotif: PropTypes.func.isRequired,
+ messageNotif: PropTypes.string.isRequired,
+};
+
+const reducer = 'calendar';
+const mapStateToProps = state => ({
+ force: state, // force state from reducer
+ eventData: state.getIn([reducer, 'events']),
+ openFrm: state.getIn([reducer, 'openFrm']),
+ messageNotif: state.getIn([reducer, 'notifMsg']),
+});
+
+const constDispatchToProps = dispatch => ({
+ fetchEventsData: bindActionCreators(fetchAction, dispatch),
+ submit: bindActionCreators(submitAction, dispatch),
+ remove: bindActionCreators(deleteAction, dispatch),
+ addEvent: () => dispatch(addAction),
+ discardEvent: () => dispatch(discardAction),
+ closeNotif: () => dispatch(closeNotifAction),
+});
+
+const CalendarMapped = connect(
+ mapStateToProps,
+ constDispatchToProps
+)(Calendar);
+
+export default withStyles(styles)(CalendarMapped);