diff options
| author | Zog | 2017-12-26 09:57:34 +0100 | 
|---|---|---|
| committer | Zog | 2017-12-27 09:14:06 +0100 | 
| commit | 344c7f884f4c25ece7490c94dfcb82e66bff0b2d (patch) | |
| tree | 946a045c057ccaac32682ac1e2f4a5084265f877 | |
| parent | 54e6052b18a5451ed962dfaade88f8de28972e76 (diff) | |
| download | chouette-core-344c7f884f4c25ece7490c94dfcb82e66bff0b2d.tar.bz2 | |
Refs #5376 @1h; Change the behaviour of the inputs on VehicleJourney#index
We don't block user actions anymore. Instead, when the departure time is
set prior to the arrival time, we shift the arrival time accordingly
(and reversed when the user sets the arrival time)
| -rw-r--r-- | app/javascript/vehicle_journeys/actions/index.js | 14 | ||||
| -rw-r--r-- | app/javascript/vehicle_journeys/components/VehicleJourney.js | 6 | ||||
| -rw-r--r-- | app/javascript/vehicle_journeys/reducers/vehicleJourneys.js | 14 | ||||
| -rw-r--r-- | spec/javascript/vehicle_journeys/actions_spec.js | 81 | ||||
| -rw-r--r-- | spec/javascript/vehicle_journeys/reducers/vehicleJourneys_spec.js (renamed from spec/javascript/vehicle_journeys/reducers/vehicle_journeys_spec.js) | 0 | 
5 files changed, 104 insertions, 11 deletions
| diff --git a/app/javascript/vehicle_journeys/actions/index.js b/app/javascript/vehicle_journeys/actions/index.js index ce4b9209d..c82f759d6 100644 --- a/app/javascript/vehicle_journeys/actions/index.js +++ b/app/javascript/vehicle_journeys/actions/index.js @@ -439,6 +439,20 @@ const actions = {      vjas.delta = delta      return vjas    }, +  adjustSchedule: (action, schedule) => { +    // we enforce that the departure time remains after the arrival time +    actions.getDelta(schedule) +    if(schedule.delta < 0){ +      if(action.isDeparture){ +        schedule.arrival_time = schedule.departure_time +      } +      else{ +        schedule.departure_time = schedule.arrival_time +      } +      actions.getDelta(schedule) +    } +    return schedule +  },    getShiftedSchedule: ({departure_time, arrival_time}, additional_time) => {      // We create dummy dates objects to manipulate time more easily      let departureDT = new Date (Date.UTC(2017, 2, 1, parseInt(departure_time.hour), parseInt(departure_time.minute))) diff --git a/app/javascript/vehicle_journeys/components/VehicleJourney.js b/app/javascript/vehicle_journeys/components/VehicleJourney.js index 929cbc5c4..bde673345 100644 --- a/app/javascript/vehicle_journeys/components/VehicleJourney.js +++ b/app/javascript/vehicle_journeys/components/VehicleJourney.js @@ -83,6 +83,7 @@ export default class VehicleJourney extends Component {                        className='form-control'                        disabled={this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.update'] == false}                        readOnly={!this.props.editMode && !vj.dummy} +                      disabled={!this.props.editMode && !vj.dummy}                        onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', false, false)}}                        value={vj.arrival_time['hour']}                        /> @@ -94,6 +95,7 @@ export default class VehicleJourney extends Component {                        className='form-control'                        disabled={this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.update'] == false}                        readOnly={!this.props.editMode && !vj.dummy} +                      disabled={!this.props.editMode && !vj.dummy}                        onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'minute', false, false)}}                        value={vj.arrival_time['minute']}                        /> @@ -114,6 +116,7 @@ export default class VehicleJourney extends Component {                        className='form-control'                        disabled={this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.update'] == false}                        readOnly={!this.props.editMode && !vj.dummy} +                      disabled={!this.props.editMode && !vj.dummy}                        onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', true, this.props.filters.toggleArrivals)}}                        value={vj.departure_time['hour']}                        /> @@ -125,6 +128,7 @@ export default class VehicleJourney extends Component {                        className='form-control'                        disabled={this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.update'] == false}                        readOnly={!this.props.editMode && !vj.dummy} +                      disabled={!this.props.editMode && !vj.dummy}                        onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, "minute", true,  this.props.filters.toggleArrivals)}}                        value={vj.departure_time['minute']}                        /> @@ -144,4 +148,4 @@ VehicleJourney.propTypes = {    index: PropTypes.number.isRequired,    onUpdateTime: PropTypes.func.isRequired,    onSelectVehicleJourney: PropTypes.func.isRequired -}
\ No newline at end of file +} diff --git a/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js b/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js index 136e1b41a..7fed867fa 100644 --- a/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js +++ b/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js @@ -79,18 +79,12 @@ const vehicleJourney= (state = {}, action, keep) => {            if (action.isDeparture){              newSchedule.departure_time[action.timeUnit] = actions.pad(action.val, action.timeUnit)              if(!action.isArrivalsToggled) -              newSchedule.arrival_time[action.timeUnit] = actions.pad(action.val, action.timeUnit) -            newSchedule = actions.getDelta(newSchedule) -            if(newSchedule.delta < 0){ -              return vjas -            } +              newSchedule.arrival_time[action.timeUnit] = newSchedule.departure_time[action.timeUnit] +            newSchedule = actions.adjustSchedule(action, newSchedule)              return _.assign({}, state.vehicle_journey_at_stops[action.subIndex], {arrival_time: newSchedule.arrival_time, departure_time: newSchedule.departure_time, delta: newSchedule.delta})            }else{              newSchedule.arrival_time[action.timeUnit] = actions.pad(action.val, action.timeUnit) -            newSchedule = actions.getDelta(newSchedule) -            if(newSchedule.delta < 0){ -              return vjas -            } +            newSchedule = actions.adjustSchedule(action, newSchedule)              return _.assign({}, state.vehicle_journey_at_stops[action.subIndex],  {arrival_time: newSchedule.arrival_time, departure_time: newSchedule.departure_time, delta: newSchedule.delta})            }          }else{ @@ -225,4 +219,4 @@ export default function vehicleJourneys(state = [], action) {      default:        return state    } -}
\ No newline at end of file +} diff --git a/spec/javascript/vehicle_journeys/actions_spec.js b/spec/javascript/vehicle_journeys/actions_spec.js index 74765a7ef..789507482 100644 --- a/spec/javascript/vehicle_journeys/actions_spec.js +++ b/spec/javascript/vehicle_journeys/actions_spec.js @@ -447,3 +447,84 @@ describe('when using select2 to unselect a company', () => {      expect(actions.unselect2Company()).toEqual(expectedAction)    })  }) + +describe('actions.adjustSchedule', () => { +  set('time', () => { +    return { +      hour: 9, +      minute: 30 +    } +  }) +  context('when editing the departure time', () => { +    set('action', () => { return { isDeparture: true } }) +    context('with a positive delta', () => { +      set('schedule', () => { +        return { +          departure_time: time, +          arrival_time: time +        } +      }) +      it('should do nothing', () => { +        expect(actions.adjustSchedule(action, schedule)).toEqual(schedule) +      }) +    }), +    context('with a delta < 0', () => { +      set('departure_time', () => { +        return { +          hour: time.hour, +          minute: time.minute - 1 +        } +      }) +      set('schedule', () => { +        return { +          departure_time: departure_time, +          arrival_time: time +        } +      }) +      it('should adjust arrival time', () => { +        let expected = { +          departure_time: departure_time, +          arrival_time: departure_time, +          delta: 0 +        } +        expect(actions.adjustSchedule(action, schedule)).toEqual(expected) +      }) +    }) +  }), +  context('when editing the arrival time', () => { +    set('action', () => { return { isDeparture: false } }) +    context('with a positive delta', () => { +      set('schedule', () => { +        return { +          departure_time: time, +          arrival_time: time +        } +      }) +      it('should do nothing', () => { +        expect(actions.adjustSchedule(action, schedule)).toEqual(schedule) +      }) +    }), +    context('with a delta < 0', () => { +      set('arrival_time', () => { +        return { +          hour: time.hour, +          minute: time.minute + 1 +        } +      }) +      set('schedule', () => { +        return { +          departure_time: time, +          arrival_time: arrival_time +        } +      }) +      it('should adjust departure time', () => { +        let expected = { +          departure_time: arrival_time, +          arrival_time: arrival_time, +          delta: 0 +        } +        expect(actions.adjustSchedule(action, schedule)).toEqual(expected) +      }) +    }) +  }) +}) diff --git a/spec/javascript/vehicle_journeys/reducers/vehicle_journeys_spec.js b/spec/javascript/vehicle_journeys/reducers/vehicleJourneys_spec.js index 1c2cc1577..1c2cc1577 100644 --- a/spec/javascript/vehicle_journeys/reducers/vehicle_journeys_spec.js +++ b/spec/javascript/vehicle_journeys/reducers/vehicleJourneys_spec.js | 
