aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Haddad2017-03-03 18:08:20 +0100
committerThomas Haddad2017-03-03 18:08:20 +0100
commit284d590435ab85b86d3722eb50ce4e1c3b3abf2c (patch)
treebdbc3d536f986f7bf96d337391e63f2e75c03240
parent89e744d0f430889acc88a5e0e15c588baa962f6a (diff)
downloadchouette-core-284d590435ab85b86d3722eb50ce4e1c3b3abf2c.tar.bz2
Refs #2521: Add timetable to one or more vj
Signed-off-by: Thomas Shawarma Haddad <thomas.haddad@af83.com>
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js13
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/CalendarsEditVehicleJourney.js4
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js31
-rw-r--r--package.json1
-rw-r--r--spec/javascripts/vehicle_journeys/actions_spec.js26
-rw-r--r--spec/javascripts/vehicle_journeys/reducers/modal_spec.js37
8 files changed, 101 insertions, 15 deletions
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
index 74d2903e0..c97728f4e 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
@@ -63,12 +63,16 @@ const actions = {
vehicleJourneys
}),
selectTTCalendarsModal: (selectedTT) =>({
- type: 'SEELCT_TT_CALENDAR_MODAL',
+ type: 'SELECT_TT_CALENDAR_MODAL',
selectedItem:{
- id: selectedTT.id
- // TODO add relevant attributes
+ id: selectedTT.id,
+ comment: selectedTT.comment,
+ objectid: selectedTT.objectid
}
}),
+ addSelectedTimetable: () => ({
+ type: 'ADD_SELECTED_TIMETABLE'
+ }),
deleteCalendarModal : (timetable) => ({
type : 'DELETE_CALENDAR_MODAL',
timetable
@@ -202,7 +206,8 @@ const actions = {
for (tt of val.time_tables){
timeTables.push({
objectid: tt.objectid,
- comment: tt.comment
+ comment: tt.comment,
+ id: tt.id
})
}
let vjasWithDelta = val.vehicle_journey_at_stops.map((vjas, i) => {
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js
index fca2934cd..3359ca44d 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js
@@ -64,6 +64,7 @@ class CalendarsEditVehicleJourney extends Component {
<label className='control-label is-required'>Ajouter un calendrier</label>
<TimetableSelect2 onSelect2Timetable={this.props.onSelect2Timetable} />
<button
+ onClick={this.props.onAddSelectedTimetable}
type='button'
><span className='fa fa-times'>Ajouter</span>
</button>
@@ -109,6 +110,7 @@ CalendarsEditVehicleJourney.propTypes = {
onCalendarsEditVehicleJourney: PropTypes.func.isRequired,
onDeleteCalendarModal: PropTypes.func.isRequired,
onSelect2Timetable: PropTypes.func.isRequired,
+ onAddSelectedTimetable: PropTypes.func.isRequired,
filters: PropTypes.object.isRequired
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
index 170150a36..93ed4e0c1 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
@@ -40,7 +40,7 @@ class BSelect4 extends React.Component{
item => Object.assign(
{},
item,
- {text: item.published_name, complete_jp: item}
+ {text: item.comment}
)
)
};
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/CalendarsEditVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/CalendarsEditVehicleJourney.js
index 1e58ed5fd..130acb017 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/CalendarsEditVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/CalendarsEditVehicleJourney.js
@@ -26,8 +26,10 @@ const mapDispatchToProps = (dispatch) => {
dispatch(actions.editVehicleJourneyCalendars(calendars))
},
onSelect2Timetable: (e) =>{
- console.log(e.params.data)
dispatch(actions.selectTTCalendarsModal(e.params.data))
+ },
+ onAddSelectedTimetable: () => {
+ dispatch(actions.addSelectedTimetable())
}
}
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
index 34c8e2dad..de424c25e 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
let vehicleJourneysModal, newModalProps
const modal = (state = {}, action) => {
switch (action.type) {
@@ -40,7 +41,7 @@ const modal = (state = {}, action) => {
let timetable = {}
vehicleJourneysModal.map((vj, i) => {
vj.time_tables.map((tt, j) =>{
- if(!isInArray(tt, uniqTimetables)){
+ if(!(_.find(uniqTimetables, tt))){
uniqTimetables.push(tt)
}
})
@@ -53,6 +54,28 @@ const modal = (state = {}, action) => {
},
confirmModal: {}
}
+ case 'SELECT_TT_CALENDAR_MODAL':
+ newModalProps = Object.assign({}, state.modalProps, {selectedTimetable : action.selectedItem})
+ return Object.assign({}, state, {modalProps: newModalProps})
+ case 'ADD_SELECTED_TIMETABLE':
+ if(state.modalProps.selectedTimetable){
+ newModalProps = JSON.parse(JSON.stringify(state.modalProps))
+ newModalProps.vehicleJourneys.map((vj) => {
+ let isPresent = false
+ vj.time_tables.forEach((tt) =>{
+ if (_.isEqual(newModalProps.selectedTimetable.objectid, tt.objectid)){
+ isPresent = true
+ }
+ })
+ if (!isPresent){
+ vj.time_tables.push(newModalProps.selectedTimetable)
+ }
+ })
+ if (!_.find(newModalProps.timetables, newModalProps.selectedTimetable)){
+ newModalProps.timetables.push(newModalProps.selectedTimetable)
+ }
+ return Object.assign({}, state, {modalProps: newModalProps})
+ }
case 'DELETE_CALENDAR_MODAL':
newModalProps = JSON.parse(JSON.stringify(state.modalProps))
let timetablesModal = state.modalProps.timetables.slice(0)
@@ -64,7 +87,7 @@ const modal = (state = {}, action) => {
vehicleJourneysModal = state.modalProps.vehicleJourneys.slice(0)
vehicleJourneysModal.map((vj) =>{
vj.time_tables.map((tt, i) =>{
- if (tt == action.timetable){
+ if (_.isEqual(tt, action.timetable)){
vj.time_tables.splice(i, 1)
}
})
@@ -104,8 +127,4 @@ const modal = (state = {}, action) => {
}
}
-function isInArray(value, array) {
- return array.indexOf(value) > -1;
-}
-
module.exports = modal
diff --git a/package.json b/package.json
index 786578453..019e63063 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
"babelify": "7.3.0",
"browserify": "13.1.1",
"browserify-incremental": "3.1.1",
+ "lodash": "^4.17.4",
"react": "15.3.2",
"react-dom": "15.3.2",
"react-redux": "4.4.5",
diff --git a/spec/javascripts/vehicle_journeys/actions_spec.js b/spec/javascripts/vehicle_journeys/actions_spec.js
index 3824893e4..56a2e8511 100644
--- a/spec/javascripts/vehicle_journeys/actions_spec.js
+++ b/spec/javascripts/vehicle_journeys/actions_spec.js
@@ -244,3 +244,29 @@ describe('when clicking on validate button inside calendars modal', () => {
expect(actions.editVehicleJourneyCalendars(vehicleJourneys)).toEqual(expectedAction)
})
})
+describe('when clicking on add button inside calendars modal', () => {
+ it('should create an action to add the selected timetable to preselected vjs', () => {
+ const expectedAction = {
+ type: 'ADD_SELECTED_TIMETABLE',
+ }
+ expect(actions.addSelectedTimetable()).toEqual(expectedAction)
+ })
+})
+describe('when using select2 to pick a timetable', () => {
+ it('should create an action to select a timetable inside modal', () => {
+ let selectedTT = {
+ id: 1,
+ objectid: 2,
+ comment: 'test',
+ }
+ const expectedAction = {
+ type: 'SELECT_TT_CALENDAR_MODAL',
+ selectedItem:{
+ id: selectedTT.id,
+ objectid: selectedTT.objectid,
+ comment: selectedTT.comment,
+ }
+ }
+ expect(actions.selectTTCalendarsModal(selectedTT)).toEqual(expectedAction)
+ })
+})
diff --git a/spec/javascripts/vehicle_journeys/reducers/modal_spec.js b/spec/javascripts/vehicle_journeys/reducers/modal_spec.js
index edf55ca65..7c81d729b 100644
--- a/spec/javascripts/vehicle_journeys/reducers/modal_spec.js
+++ b/spec/javascripts/vehicle_journeys/reducers/modal_spec.js
@@ -105,14 +105,45 @@ describe('modal reducer', () => {
).toEqual(Object.assign({}, state, {type: 'calendars_edit', modalProps: modalPropsResult}))
})
+ it('should handle SELECT_TT_CALENDAR_MODAL', () => {
+ let newModalProps = {selectedTimetable : {id: 1}}
+ expect(
+ modalReducer(state, {
+ type: 'SELECT_TT_CALENDAR_MODAL',
+ selectedItem: {id: 1}
+ })
+ ).toEqual(Object.assign({}, state, {modalProps: newModalProps}))
+ })
+
+ it('should handle ADD_SELECTED_TIMETABLE', () => {
+ let fakeTimetables = [{'test': 'test'}, {'test 2': 'test 2'}, {'add': 'add'}]
+ let newTimeTables = [{'test': 'test'}, {'test 2': 'test 2'}, {'add': 'add'}]
+ let fakeVehicleJourneys= [{time_tables: fakeTimetables}, {time_tables: newTimeTables}]
+ state.modalProps.vehicleJourneys = fakeVehicleJourneys
+ state.modalProps.timetables = fakeTimetables
+ state.modalProps.selectedTimetable = {'add': 'add'}
+ let newState = {
+ type: '',
+ modalProps:{
+ vehicleJourneys: [{time_tables: newTimeTables},{time_tables: newTimeTables}],
+ timetables: [{'test': 'test'},{'test 2': 'test 2'},{'add': 'add'}],
+ selectedTimetable: {'add': 'add'}
+ },
+ confirmModal: {}
+ }
+ expect(
+ modalReducer(state, {
+ type: 'ADD_SELECTED_TIMETABLE',
+ })
+ ).toEqual(newState)
+ })
+
it('should handle DELETE_CALENDAR_MODAL', () => {
- // TODO spec more for vehiclejourneys
let deletableTimetable = {'delete': 'delete'}
let fakeTimetables = [{'test': 'test'}, {'test 2': 'test 2'}, deletableTimetable]
let newTimeTables = [{'test': 'test'}, {'test 2': 'test 2'}]
let fakeVehicleJourneys= [{time_tables: fakeTimetables}, {time_tables: fakeTimetables}]
- state.modalProps = {vehicleJourneys : fakeVehicleJourneys, timetables: fakeTimetables }
- let footnote = {}
+ state.modalProps = Object.assign({}, state.modalProps,{vehicleJourneys : fakeVehicleJourneys, timetables: fakeTimetables })
let newState = {
// for the sake of the test, no need to specify the type
type: '',