From 3c3bf04763105c5e4de8bdbf611fbb6a8dbeb03a Mon Sep 17 00:00:00 2001 From: Thomas Haddad Date: Tue, 14 Feb 2017 18:23:09 +0100 Subject: Refs #2521: Add vjas time modification for vehicle journeys Signed-off-by: Thomas Shawarma Haddad --- .../vehicle_journeys/actions/index.js | 8 +++++ .../vehicle_journeys/components/VehicleJourney.js | 36 +++++++++++++++++++--- .../vehicle_journeys/components/VehicleJourneys.js | 3 ++ .../containers/VehicleJourneysList.js | 3 ++ .../vehicle_journeys/reducers/vehicleJourneys.js | 29 +++++++++++++++++ 5 files changed, 74 insertions(+), 5 deletions(-) (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 b89f52258..fff0399f6 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js @@ -32,6 +32,14 @@ const actions = { toggleArrivals : () => ({ type: 'TOGGLE_ARRIVALS', }), + updateTime : (val, subIndex, index, timeUnit, isDeparture) => ({ + type: 'UPDATE_TIME', + val, + subIndex, + index, + timeUnit, + isDeparture + }), fetchVehicleJourneys : (dispatch, currentPage, nextPage) => { if(currentPage == undefined){ currentPage = 1 diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js index ab3375a32..46f1f777f 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js @@ -47,15 +47,39 @@ class VehicleJourney extends Component { key={i} > - {this.format(e)}} defaultValue={moment(vj.arrival_time).format('hh')}/> + {this.props.onUpdateTime(e, i, this.props.index, 'hour', true)}} + onInput={(e) => {this.format(e)}} defaultValue={moment(vj.arrival_time).utc().format('HH')} + /> : - {this.format(e)}} defaultValue={moment(vj.arrival_time).format('mm')}/> + {this.props.onUpdateTime(e, i, this.props.index, "minute", true)}} + onInput={(e) => {this.format(e)}} defaultValue={moment(vj.arrival_time).utc().format('mm')} + /> {this.props.filters.toggleArrivals && - {this.format(e)}} defaultValue={moment(vj.departure_time).format('hh')}/> + {this.props.onUpdateTime(e, i, this.props.index, 'hour', false)}} + onInput={(e) => {this.format(e)}} defaultValue={moment(vj.departure_time).utc().format('HH')} + /> : - {this.format(e)}} defaultValue={moment(vj.departure_time).format('mm')}/> + {this.props.onUpdateTime(e, i, this.props.index, 'minute', false)}} + onInput={(e) => {this.format(e)}} defaultValue={moment(vj.departure_time).utc().format('mm')} + /> } @@ -70,7 +94,9 @@ class VehicleJourney extends Component { VehicleJourney.propTypes = { value: PropTypes.object.isRequired, - filters: PropTypes.object.isRequired + filters: PropTypes.object.isRequired, + index: PropTypes.number.isRequired, + onUpdateTime: PropTypes.func.isRequired, } module.exports = VehicleJourney diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourneys.js index 0fbb5feaa..0c2a11bac 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourneys.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourneys.js @@ -31,7 +31,9 @@ class VehicleJourneys extends Component{ )} @@ -43,6 +45,7 @@ class VehicleJourneys extends Component{ VehicleJourneys.propTypes = { status: PropTypes.object.isRequired, onLoadFirstPage: PropTypes.func.isRequired, + onUpdateTime: PropTypes.func.isRequired, filters: PropTypes.object.isRequired } diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/VehicleJourneysList.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/VehicleJourneysList.js index b9aba78af..0819fed6a 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/VehicleJourneysList.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/VehicleJourneysList.js @@ -15,6 +15,9 @@ const mapDispatchToProps = (dispatch) => { onLoadFirstPage: () =>{ dispatch(actions.fetchingApi()) actions.fetchVehicleJourneys(dispatch) + }, + onUpdateTime: (e, subIndex, index, timeUnit, isDeparture) => { + dispatch(actions.updateTime(e.target.value, subIndex, index, timeUnit, isDeparture)) } } } 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 7d7db9930..dde247521 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js @@ -1,5 +1,26 @@ var actions = require("../actions") +const vehicleJourney= (state = {}, action) => { + switch (action.type) { + case 'UPDATE_TIME': + let vj, vjas, vjasArray + vjasArray = state.vehicle_journey_at_stops.map((vjas, i) =>{ + if(i == action.subIndex){ + if (action.isDeparture){ + return Object.assign({}, state.vehicle_journey_at_stops[action.subIndex], {departure_time: moment(state.vehicle_journey_at_stops[action.subIndex].departure_time).set(action.timeUnit, action.val).format()}) + }else{ + return Object.assign({}, state.vehicle_journey_at_stops[action.subIndex], {arrival_time: moment(state.vehicle_journey_at_stops[action.subIndex].arrival_time).set(action.timeUnit, action.val).format()}) + } + }else{ + return vjas + } + }) + return Object.assign({}, state, {vehicle_journey_at_stops: vjasArray}) + default: + return state + } +} + const vehicleJourneys = (state = [], action) => { switch (action.type) { case 'RECEIVE_VEHICLE_JOURNEYS': @@ -14,6 +35,14 @@ const vehicleJourneys = (state = [], action) => { actions.fetchVehicleJourneys(action.dispatch, action.pagination.page, action.nextPage) } return state + case 'UPDATE_TIME': + return state.map((vj, i) =>{ + if (i == action.index){ + return vehicleJourney(vj, action) + } else { + return vj + } + }) default: return state } -- cgit v1.2.3