aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/actions/index.js28
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js8
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/index.js12
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js18
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js13
-rw-r--r--spec/javascripts/time_table/actions_spec.js6
-rw-r--r--spec/javascripts/time_table/reducers/modal_spec.js13
-rw-r--r--spec/javascripts/time_table/reducers/timetable_spec.js3
8 files changed, 50 insertions, 51 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 61667f5ab..02ece1654 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
@@ -105,12 +105,13 @@ const actions = {
group,
selectType
}),
- validatePeriodForm: (modalProps, timeTablePeriods, metas, timetableInDates) => ({
+ validatePeriodForm: (modalProps, timeTablePeriods, metas, timetableInDates, error) => ({
type: 'VALIDATE_PERIOD_FORM',
modalProps,
timeTablePeriods,
metas,
- timetableInDates
+ timetableInDates,
+ error
}),
includeDateInPeriod: (index, dayTypes, date) => ({
type: 'INCLUDE_DATE_IN_PERIOD',
@@ -209,16 +210,20 @@ const actions = {
formatDate: (props) => {
return props.year + '-' + props.month + '-' + props.day
},
- checkErrorsInPeriods: (start, end, index, periods, days) => {
+ checkErrorsInPeriods: (start, end, index, periods) => {
let error = ''
start = new Date(start)
end = new Date(end)
- _.each(periods, (period, i) => {
- if(index !== i && !period.deleted){
- 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) || (start >= new Date(period.period_start) && end <= new Date(period.period_end)) || (start <= new Date(period.period_start) && end >= new Date(period.period_end)))
- error = 'Les périodes ne peuvent pas se chevaucher'
+
+ for (let i = 0; i < periods.length; i++) {
+ let period = periods[i]
+ if (index !== i && !period.deleted) {
+ if (new Date(period.period_start) <= end && new Date(period.period_end) >= start) {
+ error = 'Les périodes ne peuvent pas se chevaucher'
+ break
+ }
}
- })
+ }
return error
},
checkErrorsInDates: (start, end, in_days) => {
@@ -226,11 +231,12 @@ const actions = {
start = new Date(start)
end = new Date(end)
- _.each(in_days, ({date}) => {
- if (start <= new Date(date) && end >= new Date(date)) {
+ for (let day of in_days) {
+ if (start <= new Date(day.date) && end >= new Date(day.date)) {
error = 'Une période ne peut chevaucher une date dans un calendrier'
+ break
}
- })
+ }
return error
},
fetchTimeTables: (dispatch, nextPage) => {
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 723a4a7fb..951a09741 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js
@@ -28,7 +28,13 @@ const mapDispatchToProps = (dispatch) => {
dispatch(actions.updatePeriodForm(val, group, 'day'))
},
onValidatePeriodForm: (modalProps, timeTablePeriods, metas, timetableInDates) => {
- dispatch(actions.validatePeriodForm(modalProps, timeTablePeriods, metas, timetableInDates))
+ let period_start = actions.formatDate(modalProps.begin)
+ let period_end = actions.formatDate(modalProps.end)
+ let error = ''
+ if (new Date(period_end) <= new Date(period_start)) error = 'La date de départ doit être antérieure à la date de fin'
+ if (error == '') error = actions.checkErrorsInPeriods(period_start, period_end, modalProps.index, timeTablePeriods)
+ if (error == '') error = actions.checkErrorsInDates(period_start, period_end, timetableInDates)
+ dispatch(actions.validatePeriodForm(modalProps, timeTablePeriods, metas, timetableInDates, error))
}
}
}
diff --git a/app/assets/javascripts/es6_browserified/time_tables/index.js b/app/assets/javascripts/es6_browserified/time_tables/index.js
index a91747991..9873f5532 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/index.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/index.js
@@ -6,10 +6,10 @@ var timeTablesApp = require('./reducers')
var App = require('./containers/App')
// logger, DO NOT REMOVE
-// var applyMiddleware = require('redux').applyMiddleware
-// var createLogger = require('redux-logger')
-// var thunkMiddleware = require('redux-thunk').default
-// var promise = require('redux-promise')
+var applyMiddleware = require('redux').applyMiddleware
+var createLogger = require('redux-logger')
+var thunkMiddleware = require('redux-thunk').default
+var promise = require('redux-promise')
var initialState = {
status: {
@@ -58,12 +58,12 @@ var initialState = {
confirmModal: {}
}
}
-// const loggerMiddleware = createLogger()
+const loggerMiddleware = createLogger()
let store = createStore(
timeTablesApp,
initialState,
- // applyMiddleware(thunkMiddleware, promise, loggerMiddleware)
+ applyMiddleware(thunkMiddleware, promise, loggerMiddleware)
)
render(
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 3fe4e43a2..652b42449 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
@@ -54,21 +54,9 @@ const modal = (state = {}, action) => {
newModalProps[action.group][action.selectType] = action.val
return _.assign({}, state, {modalProps: newModalProps})
case 'VALIDATE_PERIOD_FORM':
- 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 newDays = JSON.parse(JSON.stringify(action.timetableInDates))
- let error = actions.checkErrorsInPeriods(period_start, period_end, action.modalProps.index, newPeriods)
- if (error == '') error = actions.checkErrorsInDates(period_start, period_end, newDays)
- newModalProps.error = error
- newModalProps.active = (error == '') ? false : true
+ newModalProps = JSON.parse(JSON.stringify(state.modalProps))
+ newModalProps.error = action.error
+ newModalProps.active = (newModalProps.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 84d90d53c..390bdffb0 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
@@ -73,19 +73,13 @@ const timetable = (state = {}, action) => {
case 'UPDATE_CURRENT_MONTH_FROM_DAYTYPES':
return _.assign({}, state, {current_month: actions.updateSynthesis(state, action.dayTypes)})
case 'VALIDATE_PERIOD_FORM':
+ if (action.error != '') return state
+
let period_start = actions.formatDate(action.modalProps.begin)
let period_end = actions.formatDate(action.modalProps.end)
- if(new Date(period_end) <= new Date(period_start)){
- return state
- }
+
let newPeriods = JSON.parse(JSON.stringify(action.timeTablePeriods))
- let newDays = JSON.parse(JSON.stringify(action.timetableInDates))
- let error = actions.checkErrorsInPeriods(period_start, period_end, action.modalProps.index, newPeriods)
- if (error == '') error = actions.checkErrorsInDates(period_start, period_end, newDays)
- 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
@@ -98,7 +92,6 @@ const timetable = (state = {}, action) => {
}
newState =_.assign({}, state, {time_table_periods: newPeriods})
return _.assign({}, newState, {current_month: actions.updateSynthesis(newState, action.metas.day_types)})
-
default:
return state
}
diff --git a/spec/javascripts/time_table/actions_spec.js b/spec/javascripts/time_table/actions_spec.js
index f32e93327..f052aeece 100644
--- a/spec/javascripts/time_table/actions_spec.js
+++ b/spec/javascripts/time_table/actions_spec.js
@@ -159,14 +159,16 @@ describe('actions', () => {
let timeTablePeriods = []
let metas = {}
let timetableInDates = []
+ let error = ''
const expectedAction = {
type: 'VALIDATE_PERIOD_FORM',
modalProps,
timeTablePeriods,
metas,
- timetableInDates
+ timetableInDates,
+ error
}
- expect(actions.validatePeriodForm(modalProps, timeTablePeriods, metas, timetableInDates)).toEqual(expectedAction)
+ expect(actions.validatePeriodForm(modalProps, timeTablePeriods, metas, timetableInDates, error)).toEqual(expectedAction)
})
it('should create an action to include date in period', () => {
diff --git a/spec/javascripts/time_table/reducers/modal_spec.js b/spec/javascripts/time_table/reducers/modal_spec.js
index 160f3955f..570eb85ed 100644
--- a/spec/javascripts/time_table/reducers/modal_spec.js
+++ b/spec/javascripts/time_table/reducers/modal_spec.js
@@ -154,7 +154,7 @@ describe('modal reducer', () => {
error: ''
}
let newModalProps = {
- active: false,
+ active: true,
begin: {
day: '01',
month: '01',
@@ -177,7 +177,8 @@ describe('modal reducer', () => {
type: 'VALIDATE_PERIOD_FORM',
modalProps : modProps,
timeTablePeriods: ttperiods,
- timetableInDates: ttdates
+ timetableInDates: ttdates,
+ error: 'La date de départ doit être antérieure à la date de fin'
})
).toEqual(Object.assign({}, state, {modalProps: newModalProps}))
})
@@ -247,7 +248,8 @@ describe('modal reducer', () => {
type: 'VALIDATE_PERIOD_FORM',
modalProps : modProps2,
timeTablePeriods: ttperiods2,
- timetableInDates: ttdates2
+ timetableInDates: ttdates2,
+ error: "Les périodes ne peuvent pas se chevaucher"
})
).toEqual(Object.assign({}, state2, {modalProps: newModalProps2}))
})
@@ -273,7 +275,7 @@ describe('modal reducer', () => {
type: ''
}
let modProps3 = {
- active: false,
+ active: true,
begin: {
day: '01',
month: '08',
@@ -312,7 +314,8 @@ describe('modal reducer', () => {
type: 'VALIDATE_PERIOD_FORM',
modalProps : modProps3,
timeTablePeriods: ttperiods3,
- timetableInDates: ttdates3
+ timetableInDates: ttdates3,
+ error: "Une période ne peut chevaucher une date dans un calendrier"
})
).toEqual(Object.assign({}, state3, {modalProps: newModalProps3}))
})
diff --git a/spec/javascripts/time_table/reducers/timetable_spec.js b/spec/javascripts/time_table/reducers/timetable_spec.js
index 5b3561a5f..6585a78a0 100644
--- a/spec/javascripts/time_table/reducers/timetable_spec.js
+++ b/spec/javascripts/time_table/reducers/timetable_spec.js
@@ -231,7 +231,8 @@ describe('timetable reducer with filled state', () => {
metas: {
day_types: arrDayTypes
},
- timetableInDates: state.time_table_dates.filter(d => d.in_out == true)
+ timetableInDates: state.time_table_dates.filter(d => d.in_out == true),
+ error: modalProps.error
})
).toEqual(newState)
})