diff --git a/src/components/SisIntegration/EditTerm/EditTerm.js b/src/components/SisIntegration/EditTerm/EditTerm.js new file mode 100644 index 000000000..888e27e1b --- /dev/null +++ b/src/components/SisIntegration/EditTerm/EditTerm.js @@ -0,0 +1,110 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Modal, Button } from 'react-bootstrap'; +import { CloseIcon } from '../../icons'; +import { FormattedMessage } from 'react-intl'; +import { Field, reduxForm } from 'redux-form'; +import DatetimeField from '../../forms/Fields/DatetimeField'; +import SubmitButton from '../../forms/SubmitButton'; + +const EditTerm = ({ + isOpen, + onClose, + submitting, + handleSubmit, + anyTouched, + submitFailed = false, + submitSucceeded = false, + invalid, + reset +}) => + + + + + + + + + } + /> + + } + /> + + } + /> + + + handleSubmit(data).then(() => reset())} + submitting={submitting} + dirty={anyTouched} + hasSucceeded={submitSucceeded} + hasFailed={submitFailed} + invalid={invalid} + messages={{ + submit: ( + + ), + submitting: ( + + ), + success: ( + + ) + }} + /> + + + + ; + +EditTerm.propTypes = { + handleSubmit: PropTypes.func.isRequired, + onSubmit: PropTypes.func.isRequired, + submitFailed: PropTypes.bool, + anyTouched: PropTypes.bool, + submitSucceeded: PropTypes.bool, + submitting: PropTypes.bool, + invalid: PropTypes.bool, + reset: PropTypes.func, + onClose: PropTypes.func.isRequired, + isOpen: PropTypes.bool.isRequired +}; + +export default reduxForm({ form: 'edit-sis-term' })(EditTerm); diff --git a/src/components/SisIntegration/EditTerm/index.js b/src/components/SisIntegration/EditTerm/index.js new file mode 100644 index 000000000..9e22b7450 --- /dev/null +++ b/src/components/SisIntegration/EditTerm/index.js @@ -0,0 +1 @@ +export default from './EditTerm'; diff --git a/src/pages/SisIntegration/SisIntegration.js b/src/pages/SisIntegration/SisIntegration.js index 28d1cbbba..d31446db7 100644 --- a/src/pages/SisIntegration/SisIntegration.js +++ b/src/pages/SisIntegration/SisIntegration.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; import { Row, Col, Button } from 'react-bootstrap'; +import moment from 'moment'; import PageContent from '../../components/layout/PageContent'; import { isLoggedAsSuperAdmin } from '../../redux/selectors/users'; @@ -10,7 +11,8 @@ import { loggedInUserIdSelector } from '../../redux/selectors/auth'; import { fetchAllTerms, create, - deleteTerm + deleteTerm, + editTerm } from '../../redux/modules/sisTerms'; import FetchManyResourceRenderer from '../../components/helpers/FetchManyResourceRenderer'; import { @@ -21,9 +23,12 @@ import AddSisTermForm from '../../components/forms/AddSisTermForm/AddSisTermForm import TermsList from '../../components/SisIntegration/TermsList/TermsList'; import Box from '../../components/widgets/Box/Box'; import Confirm from '../../components/forms/Confirm'; -import { DeleteIcon } from '../../components/icons'; +import { EditIcon, DeleteIcon } from '../../components/icons'; +import EditTerm from '../../components/SisIntegration/EditTerm'; class SisIntegration extends Component { + state = { openEdit: null }; + static loadAsync = (params, dispatch, userId, isSuperAdmin) => Promise.all([dispatch(fetchAllTerms)]); @@ -33,7 +38,13 @@ class SisIntegration extends Component { } render() { - const { fetchStatus, createNewTerm, deleteTerm, sisTerms } = this.props; + const { + fetchStatus, + createNewTerm, + deleteTerm, + editTerm, + sisTerms + } = this.props; return (
+ deleteTerm(id)} @@ -101,6 +124,15 @@ class SisIntegration extends Component { /> + this.setState({ openEdit: null })} + onSubmit={data => + editTerm(this.state.openEdit, data).then(() => + this.setState({ openEdit: null }) + )} + />
} /> } @@ -122,6 +154,7 @@ SisIntegration.propTypes = { fetchStatus: PropTypes.string, createNewTerm: PropTypes.func, deleteTerm: PropTypes.func, + editTerm: PropTypes.func, sisTerms: PropTypes.array.isRequired }; @@ -138,7 +171,16 @@ const mapDispatchToProps = (dispatch, { params }) => ({ loadAsync: (userId, isSuperAdmin) => SisIntegration.loadAsync(params, dispatch, userId, isSuperAdmin), createNewTerm: data => dispatch(create(data)), - deleteTerm: id => dispatch(deleteTerm(id)) + deleteTerm: id => dispatch(deleteTerm(id)), + editTerm: (id, data) => { + // convert deadline times to timestamps + const processedData = Object.assign({}, data, { + beginning: moment(data.beginning).unix(), + end: moment(data.end).unix(), + advertiseUntil: moment(data.advertiseUntil).unix() + }); + return dispatch(editTerm(id, processedData)); + } }); export default connect(mapStateToProps, mapDispatchToProps)(SisIntegration);