aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js8
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js36
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourneys.js3
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/VehicleJourneysList.js3
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js29
-rw-r--r--app/views/vehicle_journeys/show.rabl6
-rw-r--r--spec/javascripts/spec_helper.js1
-rw-r--r--spec/javascripts/vehicle_journeys/actions_spec.js14
-rw-r--r--spec/javascripts/vehicle_journeys/reducers/vehicle_journeys_spec.js28
9 files changed, 121 insertions, 7 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 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}
>
<span>
- <input type='number' min='00' max='23' onInput={(e) => {this.format(e)}} defaultValue={moment(vj.arrival_time).format('hh')}/>
+ <input
+ type='number'
+ min='00'
+ max='23'
+ onBlur={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', true)}}
+ onInput={(e) => {this.format(e)}} defaultValue={moment(vj.arrival_time).utc().format('HH')}
+ />
<span>:</span>
- <input type='number' min='00' max='59' onInput={(e) => {this.format(e)}} defaultValue={moment(vj.arrival_time).format('mm')}/>
+ <input
+ type='number'
+ min='00'
+ max='59'
+ onBlur={(e) => {this.props.onUpdateTime(e, i, this.props.index, "minute", true)}}
+ onInput={(e) => {this.format(e)}} defaultValue={moment(vj.arrival_time).utc().format('mm')}
+ />
</span>
{this.props.filters.toggleArrivals &&
<span>
- <input type='number' min='00' max='23' onInput={(e) => {this.format(e)}} defaultValue={moment(vj.departure_time).format('hh')}/>
+ <input
+ type='number'
+ min='00'
+ max='23'
+ onBlur={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', false)}}
+ onInput={(e) => {this.format(e)}} defaultValue={moment(vj.departure_time).utc().format('HH')}
+ />
<span>:</span>
- <input type='number' min='00' max='59' onInput={(e) => {this.format(e)}} defaultValue={moment(vj.departure_time).format('mm')}/>
+ <input
+ type='number'
+ min='00'
+ max='59'
+ onBlur={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'minute', false)}}
+ onInput={(e) => {this.format(e)}} defaultValue={moment(vj.departure_time).utc().format('mm')}
+ />
</span>
}
</li>
@@ -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{
<VehicleJourney
value = {vj}
key = {index}
+ index = {index}
filters = {this.props.filters}
+ onUpdateTime = {this.props.onUpdateTime}
/>
)}
</div>
@@ -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
}
diff --git a/app/views/vehicle_journeys/show.rabl b/app/views/vehicle_journeys/show.rabl
index 0f8903a83..d6df84204 100644
--- a/app/views/vehicle_journeys/show.rabl
+++ b/app/views/vehicle_journeys/show.rabl
@@ -36,7 +36,11 @@ child :vehicle_journey_at_stops, :object_root => false do |vehicle_stops|
node(:stop_area_object_id) { vehicle_stop.stop_point.stop_area.objectid }
[ :connecting_service_id, :arrival_time, :departure_time, :boarding_alighting_possibility].each do |attr|
node( attr) do
- vehicle_stop.send(attr)
+ if vehicle_stop.send(attr).is_a? Time
+ vehicle_stop.send(attr).iso8601()
+ else
+ vehicle_stop.send(attr)
+ end
end unless vehicle_stop.send(attr).nil?
end
end
diff --git a/spec/javascripts/spec_helper.js b/spec/javascripts/spec_helper.js
index a0285cccf..321ba3525 100644
--- a/spec/javascripts/spec_helper.js
+++ b/spec/javascripts/spec_helper.js
@@ -6,6 +6,7 @@
// require support/your-support-file
//= require jquery
//= require bootstrap-sass-official
+//= require moment
require('es6-object-assign').polyfill();
//
// PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion.
diff --git a/spec/javascripts/vehicle_journeys/actions_spec.js b/spec/javascripts/vehicle_journeys/actions_spec.js
index d09531564..219fea96b 100644
--- a/spec/javascripts/vehicle_journeys/actions_spec.js
+++ b/spec/javascripts/vehicle_journeys/actions_spec.js
@@ -37,3 +37,17 @@ describe('when toggling arrivals', () => {
expect(actions.toggleArrivals()).toEqual(expectedAction)
})
})
+describe('when updating vjas time', () => {
+ it('should create an action to update time', () => {
+ const val = 33, subIndex = 0, index = 0, timeUnit = 'minute', isDeparture = true
+ const expectedAction = {
+ type: 'UPDATE_TIME',
+ val,
+ subIndex,
+ index,
+ timeUnit,
+ isDeparture
+ }
+ expect(actions.updateTime(val, subIndex, index, timeUnit, isDeparture)).toEqual(expectedAction)
+ })
+})
diff --git a/spec/javascripts/vehicle_journeys/reducers/vehicle_journeys_spec.js b/spec/javascripts/vehicle_journeys/reducers/vehicle_journeys_spec.js
index 15baa75a5..d6ad1c8bd 100644
--- a/spec/javascripts/vehicle_journeys/reducers/vehicle_journeys_spec.js
+++ b/spec/javascripts/vehicle_journeys/reducers/vehicle_journeys_spec.js
@@ -1,4 +1,5 @@
var vjReducer = require('es6_browserified/vehicle_journeys/reducers/vehicleJourneys')
+
let state = []
let fakeFootnotes = [{
id: 1,
@@ -11,7 +12,11 @@ let fakeFootnotes = [{
}]
let fakeTimeTables = []
-let fakeVJAS = []
+let fakeVJAS = [{
+ arrival_time : "2000-01-01T00:00:00+01:00",
+ departure_time : "2000-01-01T00:00:00+01:00",
+ stop_area_object_id : "FR:92024:ZDE:420553:STIF"
+}]
describe('vehicleJourneys reducer', () => {
beforeEach(()=>{
@@ -52,4 +57,25 @@ describe('vehicleJourneys reducer', () => {
})
).toEqual(state)
})
+
+ it('should handle UPDATE_TIME', () => {
+ const val = 33, subIndex = 0, index = 0, timeUnit = 'minute', isDeparture = true
+ let newVJAS = [{
+ arrival_time : "2000-01-01T00:00:00+01:00",
+ departure_time : "2000-01-01T00:33:00+01:00",
+ stop_area_object_id : "FR:92024:ZDE:420553:STIF"
+ }]
+ let newVJ = Object.assign({}, state[0], {vehicle_journey_at_stops: newVJAS})
+ expect(
+ vjReducer(state, {
+ type: 'UPDATE_TIME',
+ val,
+ subIndex,
+ index,
+ timeUnit,
+ isDeparture
+ })
+ ).toEqual([newVJ, state[1]])
+ })
+
})