From dd8487d6771ac76ebc60eff7e50730b2314a0ec2 Mon Sep 17 00:00:00 2001 From: Thomas Haddad Date: Tue, 21 Feb 2017 16:56:41 +0100 Subject: Refs #2521: Add shift vj schedules, no implementation of day offset yet Signed-off-by: Thomas Shawarma Haddad --- .../vehicle_journeys/actions/index.js | 44 ++++++-- .../vehicle_journeys/components/App.js | 6 +- .../vehicle_journeys/components/CreateModal.js | 109 -------------------- .../components/DeleteVehicleJourneys.js | 22 ---- .../components/tools/CreateModal.js | 109 ++++++++++++++++++++ .../components/tools/DeleteVehicleJourneys.js | 22 ++++ .../components/tools/ShiftVehicleJourney.js | 114 +++++++++++++++++++++ .../containers/AddVehicleJourney.js | 29 ------ .../containers/DeleteVehicleJourneys.js | 21 ---- .../containers/tools/AddVehicleJourney.js | 29 ++++++ .../containers/tools/DeleteVehicleJourneys.js | 21 ++++ .../containers/tools/ShiftVehicleJourney.js | 29 ++++++ .../vehicle_journeys/reducers/modal.js | 6 ++ .../vehicle_journeys/reducers/vehicleJourneys.js | 26 +++++ 14 files changed, 396 insertions(+), 191 deletions(-) delete mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/components/CreateModal.js delete mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/components/DeleteVehicleJourneys.js create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js delete mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/containers/AddVehicleJourney.js delete mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/containers/DeleteVehicleJourneys.js create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/AddVehicleJourney.js create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DeleteVehicleJourneys.js create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/ShiftVehicleJourney.js (limited to 'app/assets/javascripts') 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 2b505824d..e5e3c6512 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js @@ -36,6 +36,9 @@ const actions = { openCreateModal : () => ({ type : 'CREATE_VEHICLEJOURNEY_MODAL' }), + openShiftModal : () => ({ + type : 'SHIFT_VEHICLEJOURNEY_MODAL' + }), selectVehicleJourney : (index) => ({ type : 'SELECT_VEHICLEJOURNEY', index @@ -44,6 +47,10 @@ const actions = { type: 'ADD_VEHICLEJOURNEY', data, }), + shiftVehicleJourney : (data) => ({ + type: 'SHIFT_VEHICLEJOURNEY', + data, + }), deleteVehicleJourneys : () => ({ type: 'DELETE_VEHICLEJOURNEYS' }), @@ -159,14 +166,6 @@ const actions = { } }) }, - getDelta: (vjas) => { - let delta = 0 - if (vjas.departure_time.hour != '' && vjas.departure_time.minute != '' && vjas.arrival_time.hour != '' && vjas.departure_time.minute != ''){ - delta = (vjas.departure_time.hour - vjas.arrival_time.hour) * 60 + (vjas.departure_time.minute - vjas.arrival_time.minute) - } - vjas.delta = delta - return vjas - }, submitVehicleJourneys : (dispatch, state, next) => { dispatch(actions.fetchingApi()) let urlJSON = window.location.pathname + "_collection.json" @@ -199,6 +198,35 @@ const actions = { } }) }, + + // VJAS HELPERS + pad: (d) => { + return (d < 10) ? '0' + d.toString() : d.toString(); + }, + getDelta: (vjas) => { + let delta = 0 + if (vjas.departure_time.hour != '' && vjas.departure_time.minute != '' && vjas.arrival_time.hour != '' && vjas.departure_time.minute != ''){ + delta = (vjas.departure_time.hour - vjas.arrival_time.hour) * 60 + (vjas.departure_time.minute - vjas.arrival_time.minute) + } + vjas.delta = delta + return vjas + }, + checkSchedules: (schedule) => { + if (parseInt(schedule.departure_time.minute) > 59){ + schedule.departure_time.minute = actions.pad(parseInt(schedule.departure_time.minute) - 60) + schedule.departure_time.hour = actions.pad(parseInt(schedule.departure_time.hour) + 1) + } + if (parseInt(schedule.arrival_time.minute) > 59){ + schedule.arrival_time.minute = actions.pad(parseInt(schedule.arrival_time.minute) - 60) + schedule.arrival_time.hour = actions.pad(parseInt(schedule.arrival_time.hour) + 1) + } + if (parseInt(schedule.departure_time.hour) > 23){ + schedule.departure_time.hour = actions.pad(parseInt(schedule.departure_time.hour) - 24) + } + if (parseInt(schedule.arrival_time.hour) > 23){ + schedule.arrival_time.hour = actions.pad(parseInt(schedule.arrival_time.hour) - 24) + } + } } module.exports = actions diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/App.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/App.js index bf7f604ae..62b1f8019 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/App.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/App.js @@ -4,8 +4,9 @@ var Navigate = require('../containers/Navigate') var FiltersList = require('../containers/FiltersList') var SaveVehicleJourneys = require('../containers/SaveVehicleJourneys') var ConfirmModal = require('../containers/ConfirmModal') -var AddVehicleJourney = require('../containers/AddVehicleJourney') -var DeleteVehicleJourneys = require('../containers/DeleteVehicleJourneys') +var AddVehicleJourney = require('../containers/tools/AddVehicleJourney') +var DeleteVehicleJourneys = require('../containers/tools/DeleteVehicleJourneys') +var ShiftVehicleJourney = require('../containers/tools/ShiftVehicleJourney') const App = () => (
@@ -14,6 +15,7 @@ const App = () => ( +
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/CreateModal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/CreateModal.js deleted file mode 100644 index 34b1a3afc..000000000 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/CreateModal.js +++ /dev/null @@ -1,109 +0,0 @@ -var React = require('react') -var Component = require('react').Component -var PropTypes = require('react').PropTypes -var actions = require('../actions') - -class CreateModal extends Component { - constructor(props) { - super(props) - } - - handleSubmit() { - if(actions.validateFields(this.refs) == true) { - this.props.onAddVehicleJourney(this.refs) - $('#NewVehicleJourneyModal').modal('hide') - } - } - - render() { - if(this.props.status.isFetching == true) { - return false - } - if(this.props.status.fetchSuccess == true) { - return ( -
- - -
-
-
-
-

Ajouter une mission

-
- - {(this.props.modal.type == 'create') && ( -
-
-
- - actions.resetValidation(e.currentTarget)} - required - /> -
-
-
-
- - actions.resetValidation(e.currentTarget)} - required - /> -
-
-
-
-
- - -
-
- )} -
-
-
-
- ) - } else { - return false - } - } -} - -CreateModal.propTypes = { - index: PropTypes.number, - modal: PropTypes.object.isRequired, - status: PropTypes.object.isRequired, - onOpenCreateModal: PropTypes.func.isRequired, - onModalClose: PropTypes.func.isRequired, - onAddVehicleJourney: PropTypes.func.isRequired -} - -module.exports = CreateModal diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/DeleteVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/DeleteVehicleJourneys.js deleted file mode 100644 index 8bf2a719d..000000000 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/DeleteVehicleJourneys.js +++ /dev/null @@ -1,22 +0,0 @@ -var React = require('react') -var PropTypes = require('react').PropTypes - -const DeleteVehicleJourneys = ({onDeleteVehicleJourneys}) => { - return ( -
- -
- ) -} - -DeleteVehicleJourneys.propTypes = { - onDeleteVehicleJourneys: PropTypes.func.isRequired -} - -module.exports = DeleteVehicleJourneys diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js new file mode 100644 index 000000000..50660a2f3 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js @@ -0,0 +1,109 @@ +var React = require('react') +var Component = require('react').Component +var PropTypes = require('react').PropTypes +var actions = require('../../actions') + +class CreateModal extends Component { + constructor(props) { + super(props) + } + + handleSubmit() { + if(actions.validateFields(this.refs) == true) { + this.props.onAddVehicleJourney(this.refs) + $('#NewVehicleJourneyModal').modal('hide') + } + } + + render() { + if(this.props.status.isFetching == true) { + return false + } + if(this.props.status.fetchSuccess == true) { + return ( +
+ + +
+
+
+
+

Ajouter une mission

+
+ + {(this.props.modal.type == 'create') && ( +
+
+
+ + actions.resetValidation(e.currentTarget)} + required + /> +
+
+
+
+ + actions.resetValidation(e.currentTarget)} + required + /> +
+
+
+
+
+ + +
+
+ )} +
+
+
+
+ ) + } else { + return false + } + } +} + +CreateModal.propTypes = { + index: PropTypes.number, + modal: PropTypes.object.isRequired, + status: PropTypes.object.isRequired, + onOpenCreateModal: PropTypes.func.isRequired, + onModalClose: PropTypes.func.isRequired, + onAddVehicleJourney: PropTypes.func.isRequired +} + +module.exports = CreateModal diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js new file mode 100644 index 000000000..8bf2a719d --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js @@ -0,0 +1,22 @@ +var React = require('react') +var PropTypes = require('react').PropTypes + +const DeleteVehicleJourneys = ({onDeleteVehicleJourneys}) => { + return ( +
+ +
+ ) +} + +DeleteVehicleJourneys.propTypes = { + onDeleteVehicleJourneys: PropTypes.func.isRequired +} + +module.exports = DeleteVehicleJourneys diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js new file mode 100644 index 000000000..08c9a7e12 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js @@ -0,0 +1,114 @@ +var React = require('react') +var Component = require('react').Component +var PropTypes = require('react').PropTypes +var actions = require('../../actions') + +class ShiftVehicleJourney extends Component { + constructor(props) { + super(props) + } + + handleSubmit() { + if(actions.validateFields(this.refs) == true) { + this.props.onShiftVehicleJourney(this.refs) + $('#ShiftVehicleJourneyModal').modal('hide') + } + } + + render() { + if(this.props.status.isFetching == true) { + return false + } + if(this.props.status.fetchSuccess == true) { + return ( +
+ + +
+
+
+
+

Mettre à jour une course

+
+ + {(this.props.modal.type == 'shift') && ( +
+
+
+ + +
+
+
+
+ + actions.resetValidation(e.currentTarget)} + required + /> +
+
+
+
+
+ + +
+
+ )} +
+
+
+
+ ) + } else { + return false + } + } +} + +ShiftVehicleJourney.propTypes = { + onOpenShiftModal: PropTypes.func.isRequired, + onModalClose: PropTypes.func.isRequired, +} + +module.exports = ShiftVehicleJourney diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/AddVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/AddVehicleJourney.js deleted file mode 100644 index a0ff923bf..000000000 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/AddVehicleJourney.js +++ /dev/null @@ -1,29 +0,0 @@ -var actions = require('../actions') -var connect = require('react-redux').connect -var CreateModal = require('../components/CreateModal') - -const mapStateToProps = (state) => { - return { - modal: state.modal, - vehicleJourneys: state.vehicleJourneys, - status: state.status - } -} - -const mapDispatchToProps = (dispatch) => { - return { - onModalClose: () =>{ - dispatch(actions.closeModal()) - }, - onAddVehicleJourney: (data) =>{ - dispatch(actions.addVehicleJourney(data)) - }, - onOpenCreateModal: () =>{ - dispatch(actions.openCreateModal()) - } - } -} - -const AddVehicleJourney = connect(mapStateToProps, mapDispatchToProps)(CreateModal) - -module.exports = AddVehicleJourney diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/DeleteVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/DeleteVehicleJourneys.js deleted file mode 100644 index eb07dec0e..000000000 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/DeleteVehicleJourneys.js +++ /dev/null @@ -1,21 +0,0 @@ -var actions = require('../actions') -var connect = require('react-redux').connect -var DeleteVJComponent = require('../components/DeleteVehicleJourneys') - -const mapStateToProps = (state) => { - return { - vehicleJourneys: state.vehicleJourneys - } -} - -const mapDispatchToProps = (dispatch) => { - return { - onDeleteVehicleJourneys: () =>{ - dispatch(actions.deleteVehicleJourneys()) - }, - } -} - -const DeleteVehicleJourneys = connect(mapStateToProps, mapDispatchToProps)(DeleteVJComponent) - -module.exports = DeleteVehicleJourneys diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/AddVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/AddVehicleJourney.js new file mode 100644 index 000000000..01b8f8d3e --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/AddVehicleJourney.js @@ -0,0 +1,29 @@ +var actions = require('../../actions') +var connect = require('react-redux').connect +var CreateModal = require('../../components/tools/CreateModal') + +const mapStateToProps = (state) => { + return { + modal: state.modal, + vehicleJourneys: state.vehicleJourneys, + status: state.status + } +} + +const mapDispatchToProps = (dispatch) => { + return { + onModalClose: () =>{ + dispatch(actions.closeModal()) + }, + onAddVehicleJourney: (data) =>{ + dispatch(actions.addVehicleJourney(data)) + }, + onOpenCreateModal: () =>{ + dispatch(actions.openCreateModal()) + } + } +} + +const AddVehicleJourney = connect(mapStateToProps, mapDispatchToProps)(CreateModal) + +module.exports = AddVehicleJourney diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DeleteVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DeleteVehicleJourneys.js new file mode 100644 index 000000000..6bde7fd3c --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DeleteVehicleJourneys.js @@ -0,0 +1,21 @@ +var actions = require('../../actions') +var connect = require('react-redux').connect +var DeleteVJComponent = require('../../components/tools/DeleteVehicleJourneys') + +const mapStateToProps = (state) => { + return { + vehicleJourneys: state.vehicleJourneys + } +} + +const mapDispatchToProps = (dispatch) => { + return { + onDeleteVehicleJourneys: () =>{ + dispatch(actions.deleteVehicleJourneys()) + }, + } +} + +const DeleteVehicleJourneys = connect(mapStateToProps, mapDispatchToProps)(DeleteVJComponent) + +module.exports = DeleteVehicleJourneys diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/ShiftVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/ShiftVehicleJourney.js new file mode 100644 index 000000000..9fd6e12e8 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/ShiftVehicleJourney.js @@ -0,0 +1,29 @@ +var actions = require('../../actions') +var connect = require('react-redux').connect +var ShiftVJComponent = require('../../components/tools/ShiftVehicleJourney') + +const mapStateToProps = (state) => { + return { + modal: state.modal, + vehicleJourneys: state.vehicleJourneys, + status: state.status + } +} + +const mapDispatchToProps = (dispatch) => { + return { + onModalClose: () =>{ + dispatch(actions.closeModal()) + }, + onOpenShiftModal: () =>{ + dispatch(actions.openShiftModal()) + }, + onShiftVehicleJourney: (data) =>{ + dispatch(actions.shiftVehicleJourney(data)) + } + } +} + +const ShiftVehicleJourney = connect(mapStateToProps, mapDispatchToProps)(ShiftVJComponent) + +module.exports = ShiftVehicleJourney 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 127b69686..2f24b29c2 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js @@ -14,6 +14,12 @@ const modal = (state = {}, action) => { modalProps: {}, confirmModal: {} } + case 'SHIFT_VEHICLEJOURNEY_MODAL': + return { + type: 'shift', + modalProps: {}, + confirmModal: {} + } case 'CLOSE_MODAL': return { type: '', diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js index eac2138ce..241ebb378 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js @@ -14,6 +14,24 @@ const vehicleJourney= (state = {}, action) => { vehicle_journey_at_stops: [], deletable: false } + case 'SHIFT_VEHICLEJOURNEY': + let shiftedArray, shiftedSchedule, shiftedVjas + shiftedArray = state.vehicle_journey_at_stops.map((vjas, i) => { + shiftedSchedule = { + departure_time: { + hour: vjas.departure_time.hour, + minute: String(parseInt(vjas.departure_time.minute) + parseInt(action.data.additional_time.value)) + }, + arrival_time: { + hour: vjas.arrival_time.hour, + minute: String(parseInt(vjas.arrival_time.minute) + parseInt(action.data.additional_time.value)) + } + } + actions.checkSchedules(shiftedSchedule) + shiftedVjas = Object.assign({}, state.vehicle_journey_at_stops[i], shiftedSchedule) + return Object.assign({}, state.vehicle_journey_at_stops[i], shiftedVjas) + }) + return Object.assign({}, state, {vehicle_journey_at_stops: shiftedArray}) case 'UPDATE_TIME': let vj, vjas, vjasArray, newSchedule vjasArray = state.vehicle_journey_at_stops.map((vjas, i) =>{ @@ -64,6 +82,14 @@ const vehicleJourneys = (state = [], action) => { vehicleJourney(state, action), ...state ] + case 'SHIFT_VEHICLEJOURNEY': + return state.map((vj, i) => { + if (vj.objectid == action.data.objectid.value){ + return vehicleJourney(vj, action) + }else{ + return vj + } + }) case 'DELETE_VEHICLEJOURNEYS': return state.map((vj, i) =>{ if (vj.selected){ -- cgit v1.2.3