diff options
| author | Thomas Haddad | 2017-06-15 15:28:11 +0200 |
|---|---|---|
| committer | Thomas Haddad | 2017-06-15 15:30:12 +0200 |
| commit | 1e38848dc427f7fe5bd5b0079c2fb9b1d491dca2 (patch) | |
| tree | d2b83f8375675d92acc5b9d6a26291e3343b565e | |
| parent | d6c3eb405a77a32fb11397b985053d239adbf933 (diff) | |
| download | chouette-core-1e38848dc427f7fe5bd5b0079c2fb9b1d491dca2.tar.bz2 | |
Refs #3784 @3h: Add condition check before validating timetable
Signed-off-by: Thomas Shawarma Haddad <thomas.haddad@af83.com>
8 files changed, 94 insertions, 7 deletions
diff --git a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js index 0a6e7e1dc..951664129 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js +++ b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js @@ -122,6 +122,9 @@ const actions = { type : 'OPEN_CONFIRM_MODAL', callback }), + showErrorModal: () => ({ + type: 'OPEN_ERROR_MODAL' + }), closeModal : () => ({ type : 'CLOSE_MODAL' }), @@ -185,9 +188,13 @@ const actions = { return improvedCM }, - checkConfirmModal: (event, callback, stateChanged,dispatch) => { + checkConfirmModal: (event, callback, stateChanged, dispatch, metas, timetable) => { if(stateChanged === true){ - return actions.openConfirmModal(callback) + if(timetable.time_table_periods.length == 0 && _.some(metas.day_types)){ + return actions.showErrorModal() + }else{ + return actions.openConfirmModal(callback) + } }else{ dispatch(actions.fetchingApi()) return callback diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/ErrorModal.js b/app/assets/javascripts/es6_browserified/time_tables/components/ErrorModal.js new file mode 100644 index 000000000..31ed256ea --- /dev/null +++ b/app/assets/javascripts/es6_browserified/time_tables/components/ErrorModal.js @@ -0,0 +1,39 @@ +var React = require('react') +var Component = require('react').Component +var PropTypes = require('react').PropTypes + +const ErrorModal = ({dispatch, modal, onModalClose}) => ( + <div className={ 'modal fade ' + ((modal.type == 'error') ? 'in' : '') } id='ErrorModal'> + <div className='modal-container'> + <div className='modal-dialog'> + <div className='modal-content'> + <div className='modal-header'> + <h4 className='modal-title'>Erreur</h4> + </div> + <div className='modal-body'> + <div className='mt-md mb-md'> + <p>Un calendrier d'application ne peut pas avoir de journée(s) d'application sans période(s).</p> + </div> + </div> + <div className='modal-footer'> + <button + className='btn btn-link' + data-dismiss='modal' + type='button' + onClick= {() => {onModalClose()}} + > + Retour + </button> + </div> + </div> + </div> + </div> + </div> +) + +ErrorModal.propTypes = { + modal: PropTypes.object.isRequired, + onModalClose: PropTypes.func.isRequired +} + +module.exports = ErrorModal diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js b/app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js index 74ca36ea6..6a3690cb0 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js +++ b/app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js @@ -39,7 +39,7 @@ let Navigate = ({ dispatch, metas, timetable, pagination, status, filters}) => { value={month} onClick={e => { e.preventDefault() - dispatch(actions.checkConfirmModal(e, actions.changePage(dispatch, e.currentTarget.value), pagination.stateChanged, dispatch)) + dispatch(actions.checkConfirmModal(e, actions.changePage(dispatch, e.currentTarget.value), pagination.stateChanged, dispatch, metas, timetable)) }} > {actions.monthName(month) + ' ' + new Date(month).getFullYear()} @@ -56,7 +56,7 @@ let Navigate = ({ dispatch, metas, timetable, pagination, status, filters}) => { <button onClick={e => { e.preventDefault() - dispatch(actions.checkConfirmModal(e, actions.goToPreviousPage(dispatch, pagination), pagination.stateChanged, dispatch)) + dispatch(actions.checkConfirmModal(e, actions.goToPreviousPage(dispatch, pagination), pagination.stateChanged, dispatch, metas, timetable)) }} type='button' data-target='#ConfirmModal' @@ -66,7 +66,7 @@ let Navigate = ({ dispatch, metas, timetable, pagination, status, filters}) => { <button onClick={e => { e.preventDefault() - dispatch(actions.checkConfirmModal(e, actions.goToNextPage(dispatch, pagination), pagination.stateChanged, dispatch)) + dispatch(actions.checkConfirmModal(e, actions.goToNextPage(dispatch, pagination), pagination.stateChanged, dispatch, metas, timetable)) }} type='button' data-target='#ConfirmModal' diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js b/app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js index 24c91f282..e8c0aa3ba 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js +++ b/app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js @@ -2,6 +2,7 @@ var React = require('react') var Component = require('react').Component var PropTypes = require('react').PropTypes var actions = require('../actions') +var _ = require('lodash') class SaveTimetable extends Component{ constructor(props){ @@ -18,7 +19,11 @@ class SaveTimetable extends Component{ type='button' onClick={e => { e.preventDefault() - actions.submitTimetable(this.props.dispatch, this.props.timetable, this.props.metas) + if(this.props.timetable.time_table_periods.length == 0 && _.some(this.props.metas.day_types)){ + this.props.onShowErrorModal() + }else{ + actions.submitTimetable(this.props.getDispatch(), this.props.timetable, this.props.metas) + } }} > Valider diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/App.js b/app/assets/javascripts/es6_browserified/time_tables/containers/App.js index 7c75377ea..02f0ddbd8 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/containers/App.js +++ b/app/assets/javascripts/es6_browserified/time_tables/containers/App.js @@ -8,6 +8,7 @@ var Navigate = require('./Navigate') var PeriodForm = require('./PeriodForm') var SaveTimetable = require('./SaveTimetable') var ConfirmModal = require('./ConfirmModal') +var ErrorModal = require('./ErrorModal') class App extends Component { componentDidMount(){ @@ -24,6 +25,7 @@ class App extends Component { <PeriodForm /> <SaveTimetable /> <ConfirmModal /> + <ErrorModal /> </div> </div> ) diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/ErrorModal.js b/app/assets/javascripts/es6_browserified/time_tables/containers/ErrorModal.js new file mode 100644 index 000000000..16a7d45dd --- /dev/null +++ b/app/assets/javascripts/es6_browserified/time_tables/containers/ErrorModal.js @@ -0,0 +1,21 @@ +var actions = require('../actions') +var connect = require('react-redux').connect +var ErrorModal = require('../components/ErrorModal') + +const mapStateToProps = (state) => { + return { + modal: state.modal + } +} + +const mapDispatchToProps = (dispatch) => { + return { + onModalClose: () =>{ + dispatch(actions.closeModal()) + } + } +} + +const ErrorModalContainer = connect(mapStateToProps, mapDispatchToProps)(ErrorModal) + +module.exports = ErrorModalContainer diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js b/app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js index 7d2684dde..b5539e7d8 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js +++ b/app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js @@ -11,6 +11,16 @@ const mapStateToProps = (state) => { } } -const SaveTimetable = connect(mapStateToProps)(SaveTimetableComponent) +const mapDispatchToProps = (dispatch) => { + return { + onShowErrorModal: () => { + dispatch(actions.showErrorModal()) + }, + getDispatch: () => { + return dispatch + } + } +} +const SaveTimetable = connect(mapStateToProps, mapDispatchToProps)(SaveTimetableComponent) module.exports = SaveTimetable diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js index 56486a105..69f7b206e 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js +++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js @@ -19,6 +19,9 @@ const modal = (state = {}, action) => { callback: action.callback, } }) + case 'OPEN_ERROR_MODAL': + $('#ErrorModal').modal('show') + return _.assign({}, state, {type: 'error'}) case 'CLOSE_PERIOD_FORM': newModalProps = _.assign({}, state.modalProps, {active: false}) return _.assign({}, state, {modalProps: newModalProps}) |
