diff options
| author | Thomas Haddad | 2017-04-24 16:00:25 +0200 |
|---|---|---|
| committer | Thomas Haddad | 2017-04-24 16:00:54 +0200 |
| commit | 6d3a6bd8153d0fabefca6db4d50f64c0f79b9bae (patch) | |
| tree | fdbd6687fddb5e58cf753ddca48358c03538c36b /app/assets/javascripts | |
| parent | c9f6d0e6923f01b99788847880054f4c32ed585d (diff) | |
| download | chouette-core-6d3a6bd8153d0fabefca6db4d50f64c0f79b9bae.tar.bz2 | |
Refs #3151: Add error handlers when updating time_table_periods
Signed-off-by: Thomas Shawarma Haddad <thomas.haddad@af83.com>
Diffstat (limited to 'app/assets/javascripts')
6 files changed, 56 insertions, 15 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 d83612211..8af08f97a 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js +++ b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js @@ -85,9 +85,11 @@ const actions = { group, selectType }), - validatePeriodForm: (modalProps) => ({ + validatePeriodForm: (modalProps, timeTablePeriods, metas) => ({ type: 'VALIDATE_PERIOD_FORM', - modalProps + modalProps, + timeTablePeriods, + metas }), includeDateInPeriod: (index, day, dayTypes) => ({ type: 'INCLUDE_DATE_IN_PERIOD', @@ -169,6 +171,18 @@ const actions = { formatDate: (props) => { return props.year + '-' + props.month + '-' + props.day }, + checkErrorsInPeriods: (start, end, index, periods) => { + let error = '' + start = new Date(start) + end = new Date(end) + _.each(periods, (period, i) => { + if(index != i){ + if((new Date(period.period_start) <= start && new Date(period.period_end) >= start) || (new Date(period.period_start) <= end && new Date(period.period_end) >= end)) + error = 'Les périodes ne peuvent pas se chevaucher' + } + }) + return error + }, fetchTimeTables: (dispatch, nextPage) => { let urlJSON = window.location.pathname.split('/', 5).join('/') // console.log(nextPage) diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js b/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js index c46fb2c18..0fc8b7cf4 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js +++ b/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js @@ -31,7 +31,7 @@ const makeYearsOptions = (yearSelected) => { return arr } -const PeriodForm = ({modal, timetable, onOpenAddPeriodForm, onClosePeriodForm, onUpdatePeriodForm, onValidatePeriodForm}) => ( +const PeriodForm = ({modal, timetable, metas, onOpenAddPeriodForm, onClosePeriodForm, onUpdatePeriodForm, onValidatePeriodForm}) => ( <div> {modal.modalProps.active && <div className="form-group date filter_menu-item"> @@ -66,10 +66,11 @@ const PeriodForm = ({modal, timetable, onOpenAddPeriodForm, onClosePeriodForm, o Annuler </button> <button - onClick={() => onValidatePeriodForm(modal.modalProps)} + onClick={() => onValidatePeriodForm(modal.modalProps, timetable.time_table_periods, metas)} > Valider </button> + <span>{modal.modalProps.error}</span> </div> </div> } @@ -85,6 +86,7 @@ const PeriodForm = ({modal, timetable, onOpenAddPeriodForm, onClosePeriodForm, o PeriodForm.propTypes = { modal: PropTypes.object.isRequired, + metas: PropTypes.object.isRequired, onOpenAddPeriodForm: PropTypes.func.isRequired, onClosePeriodForm: PropTypes.func.isRequired, onUpdatePeriodForm: PropTypes.func.isRequired, diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js b/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js index 68ee5beef..b6004c7f1 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js +++ b/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js @@ -5,7 +5,8 @@ var actions = require('../actions') const mapStateToProps = (state) => { return { modal: state.modal, - timetable: state.timetable + timetable: state.timetable, + metas: state.metas } } @@ -20,8 +21,8 @@ const mapDispatchToProps = (dispatch) => { onUpdatePeriodForm: (val, group, selectType) => { dispatch(actions.updatePeriodForm(val, group, selectType)) }, - onValidatePeriodForm: (props) => { - dispatch(actions.validatePeriodForm(props)) + onValidatePeriodForm: (modalProps, timeTablePeriods, metas) => { + dispatch(actions.validatePeriodForm(modalProps, timeTablePeriods, metas)) } } } diff --git a/app/assets/javascripts/es6_browserified/time_tables/index.js b/app/assets/javascripts/es6_browserified/time_tables/index.js index c78df5f1e..132b1dd95 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/index.js +++ b/app/assets/javascripts/es6_browserified/time_tables/index.js @@ -50,7 +50,7 @@ var initialState = { year: String(new Date().getFullYear()) }, index: false, - errors: [] + error: '' }, confirmModal: {} } 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 58466fa70..474c70ea5 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js +++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js @@ -1,10 +1,13 @@ var _ = require('lodash') +var actions = require('../actions') + let newModalProps = {} let emptyDate = { - begin: '01', + day: '01', month: '01', year: String(new Date().getFullYear()) } +let period_start = '', period_end = '' const modal = (state = {}, action) => { switch (action.type) { @@ -12,8 +15,8 @@ const modal = (state = {}, action) => { newModalProps = _.assign({}, state.modalProps, {active: false}) return _.assign({}, state, {modalProps: newModalProps}) case 'OPEN_EDIT_PERIOD_FORM': - let period_start = action.period.period_start.split('-') - let period_end = action.period.period_end.split('-') + period_start = action.period.period_start.split('-') + period_end = action.period.period_end.split('-') newModalProps = JSON.parse(JSON.stringify(state.modalProps)) newModalProps.begin.year = period_start[0] @@ -26,16 +29,29 @@ const modal = (state = {}, action) => { newModalProps.active = true newModalProps.index = action.index + newModalProps.error = '' return _.assign({}, state, {modalProps: newModalProps}) case 'OPEN_ADD_PERIOD_FORM': - newModalProps = _.assign({}, state.modalProps, {active: true, begin: emptyDate, end: emptyDate, index: false, errors: []}) + newModalProps = _.assign({}, state.modalProps, {active: true, begin: emptyDate, end: emptyDate, index: false, error: ''}) return _.assign({}, state, {modalProps: newModalProps}) case 'UPDATE_PERIOD_FORM': newModalProps = JSON.parse(JSON.stringify(state.modalProps)) newModalProps[action.group][action.selectType] = action.val return _.assign({}, state, {modalProps: newModalProps}) case 'VALIDATE_PERIOD_FORM': - newModalProps = _.assign({}, state.modalProps, {active: false}) + period_start = actions.formatDate(action.modalProps.begin) + period_end = actions.formatDate(action.modalProps.end) + newModalProps = _.assign({}, state.modalProps) + + if(new Date(period_end) <= new Date(period_start)){ + newModalProps.error = 'La date de départ doit être antérieure à la date de fin' + return _.assign({}, state, {modalProps: newModalProps}) + } + + let newPeriods = JSON.parse(JSON.stringify(action.timeTablePeriods)) + let error = actions.checkErrorsInPeriods(period_start, period_end, action.modalProps.index, newPeriods) + newModalProps.error = error + newModalProps.active = (error == '') ? false : true return _.assign({}, state, {modalProps: newModalProps}) default: return state diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js index dc13684fb..f84223b23 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js +++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js @@ -58,7 +58,14 @@ const timetable = (state = {}, action) => { case 'VALIDATE_PERIOD_FORM': let period_start = actions.formatDate(action.modalProps.begin) let period_end = actions.formatDate(action.modalProps.end) - let newPeriods = JSON.parse(JSON.stringify(state.time_table_periods)) + if(new Date(period_end) <= new Date(period_start)){ + return state + } + let newPeriods = JSON.parse(JSON.stringify(action.timeTablePeriods)) + let error = actions.checkErrorsInPeriods(period_start, period_end, action.modalProps.index, newPeriods) + if(error != ''){ + return state + } if (action.modalProps.index !== false){ newPeriods[action.modalProps.index].period_start = period_start newPeriods[action.modalProps.index].period_end = period_end @@ -69,7 +76,8 @@ const timetable = (state = {}, action) => { } newPeriods.push(newPeriod) } - return _.assign({}, state, {time_table_periods: newPeriods}) + newState =_.assign({}, state, {time_table_periods: newPeriods}) + return _.assign({}, newState, {current_month: actions.updateSynthesis(newState, action.metas.day_types)}) default: return state |
