From bb693070b8f06bc9cb4845d27d58dfed9ce3411e Mon Sep 17 00:00:00 2001 From: Thomas Haddad Date: Thu, 16 Feb 2017 17:14:45 +0100 Subject: Refs #2522: Add vehicleJourney via modal, and put it first (not select2 yet for mission_id) Signed-off-by: Thomas Shawarma Haddad --- .../vehicle_journeys/actions/index.js | 34 +++++++ .../vehicle_journeys/components/App.js | 2 + .../vehicle_journeys/components/CreateModal.js | 109 +++++++++++++++++++++ .../containers/AddVehicleJourney.js | 29 ++++++ .../vehicle_journeys/containers/Modal.js | 23 +++++ .../vehicle_journeys/reducers/modal.js | 6 ++ .../vehicle_journeys/reducers/pagination.js | 1 + .../vehicle_journeys/reducers/vehicleJourneys.js | 15 +++ 8 files changed, 219 insertions(+) create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/components/CreateModal.js create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/containers/AddVehicleJourney.js create mode 100644 app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Modal.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 817dbb81c..56ed1ef07 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js @@ -33,10 +33,44 @@ const actions = { return callback } }, + openCreateModal : () => ({ + type : 'CREATE_VEHICLEJOURNEY_MODAL' + }), + addVehicleJourney : (data) => ({ + type: 'ADD_VEHICLEJOURNEY', + data, + }), openConfirmModal : (callback) => ({ type : 'OPEN_CONFIRM_MODAL', callback }), + closeModal : () => ({ + type : 'CLOSE_MODAL' + }), + resetValidation: (target) => { + $(target).parent().removeClass('has-error').children('.help-block').remove() + }, + validateFields : (fields) => { + const test = [] + + Object.keys(fields).map(function(key) { + test.push(fields[key].validity.valid) + }) + if(test.indexOf(false) >= 0) { + // Form is invalid + test.map(function(item, i) { + if(item == false) { + const k = Object.keys(fields)[i] + $(fields[k]).parent().addClass('has-error').children('.help-block').remove() + $(fields[k]).parent().append("" + fields[k].validationMessage + "") + } + }) + return false + } else { + // Form is valid + return true + } + }, toggleArrivals : () => ({ type: 'TOGGLE_ARRIVALS', }), 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 7368d4de3..99c88930a 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/App.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/App.js @@ -4,12 +4,14 @@ 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') 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 new file mode 100644 index 000000000..34b1a3afc --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/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/containers/AddVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/AddVehicleJourney.js new file mode 100644 index 000000000..a0ff923bf --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/AddVehicleJourney.js @@ -0,0 +1,29 @@ +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/Modal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Modal.js new file mode 100644 index 000000000..13190b041 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Modal.js @@ -0,0 +1,23 @@ +var connect = require('react-redux').connect +var EditModal = require('../components/EditModal') +var CreateModal = require('../components/CreateModal') +var actions = require('../actions') + +const mapStateToProps = (state) => { + return { + modal: state.modal, + journeyPattern: state.journeyPattern + } +} + +const mapDispatchToProps = (dispatch) => { + return { + onModalClose: () =>{ + dispatch(actions.closeModal()) + } + } +} + +const ModalContainer = connect(mapStateToProps, mapDispatchToProps)(CreateModal) + +module.exports = ModalContainer 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 bc9d448fe..127b69686 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js @@ -8,6 +8,12 @@ const modal = (state = {}, action) => { callback: action.callback, } }) + case 'CREATE_VEHICLEJOURNEY_MODAL': + return { + type: 'create', + modalProps: {}, + confirmModal: {} + } case 'CLOSE_MODAL': return { type: '', diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js index 4ac2a4586..c9bcec6de 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js @@ -12,6 +12,7 @@ const pagination = (state = {}, action) => { return Object.assign({}, state, {page : action.pagination.page + 1, stateChanged: false}) } return state + case 'ADD_VEHICLEJOURNEY': case 'UPDATE_TIME': toggleOnConfirmModal('modal') return Object.assign({}, state, {stateChanged: true}) 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 b48ac33b3..ccf1efea1 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js @@ -2,6 +2,16 @@ var actions = require("../actions") const vehicleJourney= (state = {}, action) => { switch (action.type) { + case 'ADD_VEHICLEJOURNEY': + return { + journey_pattern_id: parseInt(action.data.journey_pattern_id.value), + comment: action.data.comment.value, + objectid: '', + footnotes: [], + time_tables: [], + vehicle_journey_at_stops: [], + deletable: false + } case 'UPDATE_TIME': let vj, vjas, vjasArray, newSchedule vjasArray = state.vehicle_journey_at_stops.map((vjas, i) =>{ @@ -45,6 +55,11 @@ const vehicleJourneys = (state = [], action) => { actions.fetchVehicleJourneys(action.dispatch, action.pagination.page, action.nextPage) } return state + case 'ADD_VEHICLEJOURNEY': + return [ + vehicleJourney(state, action), + ...state + ] case 'UPDATE_TIME': return state.map((vj, i) =>{ if (i == action.index){ -- cgit v1.2.3