diff options
Diffstat (limited to 'app/assets/javascripts')
28 files changed, 835 insertions, 0 deletions
diff --git a/app/assets/javascripts/es6_browserified/actions/index.js b/app/assets/javascripts/es6_browserified/itineraries/actions/index.js index 7d225f2f6..7d225f2f6 100644 --- a/app/assets/javascripts/es6_browserified/actions/index.js +++ b/app/assets/javascripts/es6_browserified/itineraries/actions/index.js diff --git a/app/assets/javascripts/es6_browserified/components/App.js b/app/assets/javascripts/es6_browserified/itineraries/components/App.js index 7488b0b39..7488b0b39 100644 --- a/app/assets/javascripts/es6_browserified/components/App.js +++ b/app/assets/javascripts/es6_browserified/itineraries/components/App.js diff --git a/app/assets/javascripts/es6_browserified/components/BSelect2.js b/app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js index 0bf3ebf38..0bf3ebf38 100644 --- a/app/assets/javascripts/es6_browserified/components/BSelect2.js +++ b/app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js diff --git a/app/assets/javascripts/es6_browserified/components/Todo.js b/app/assets/javascripts/es6_browserified/itineraries/components/Todo.js index f2932ab1d..f2932ab1d 100644 --- a/app/assets/javascripts/es6_browserified/components/Todo.js +++ b/app/assets/javascripts/es6_browserified/itineraries/components/Todo.js diff --git a/app/assets/javascripts/es6_browserified/components/TodoList.js b/app/assets/javascripts/es6_browserified/itineraries/components/TodoList.js index 3ea2c90e1..3ea2c90e1 100644 --- a/app/assets/javascripts/es6_browserified/components/TodoList.js +++ b/app/assets/javascripts/es6_browserified/itineraries/components/TodoList.js diff --git a/app/assets/javascripts/es6_browserified/containers/AddTodo.js b/app/assets/javascripts/es6_browserified/itineraries/containers/AddTodo.js index d0128f16d..d0128f16d 100644 --- a/app/assets/javascripts/es6_browserified/containers/AddTodo.js +++ b/app/assets/javascripts/es6_browserified/itineraries/containers/AddTodo.js diff --git a/app/assets/javascripts/es6_browserified/containers/VisibleTodoList.js b/app/assets/javascripts/es6_browserified/itineraries/containers/VisibleTodoList.js index 464d6e482..464d6e482 100644 --- a/app/assets/javascripts/es6_browserified/containers/VisibleTodoList.js +++ b/app/assets/javascripts/es6_browserified/itineraries/containers/VisibleTodoList.js diff --git a/app/assets/javascripts/es6_browserified/form_helper.js b/app/assets/javascripts/es6_browserified/itineraries/form_helper.js index d48718841..d48718841 100644 --- a/app/assets/javascripts/es6_browserified/form_helper.js +++ b/app/assets/javascripts/es6_browserified/itineraries/form_helper.js diff --git a/app/assets/javascripts/es6_browserified/reducers/index.js b/app/assets/javascripts/es6_browserified/itineraries/reducers/index.js index 381b32d8b..381b32d8b 100644 --- a/app/assets/javascripts/es6_browserified/reducers/index.js +++ b/app/assets/javascripts/es6_browserified/itineraries/reducers/index.js diff --git a/app/assets/javascripts/es6_browserified/reducers/todos.js b/app/assets/javascripts/es6_browserified/itineraries/reducers/todos.js index 215a3e2c2..215a3e2c2 100644 --- a/app/assets/javascripts/es6_browserified/reducers/todos.js +++ b/app/assets/javascripts/es6_browserified/itineraries/reducers/todos.js diff --git a/app/assets/javascripts/es6_browserified/stop_points.js b/app/assets/javascripts/es6_browserified/itineraries/stop_points.js index d5f53fb4f..d5f53fb4f 100644 --- a/app/assets/javascripts/es6_browserified/stop_points.js +++ b/app/assets/javascripts/es6_browserified/itineraries/stop_points.js diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js new file mode 100644 index 000000000..0342b5df1 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js @@ -0,0 +1,130 @@ +const actions = { + receiveJourneyPatterns : (json) => ({ + type: "RECEIVE_JOURNEY_PATTERNS", + json + }), + loadFirstPage: (dispatch) => ({ + type: 'LOAD_FIRST_PAGE', + dispatch + }), + goToPreviousPage : (dispatch, currentPage) => ({ + type: 'GO_TO_PREVIOUS_PAGE', + dispatch, + currentPage, + nextPage : false + }), + goToNextPage : (dispatch, currentPage) => ({ + type: 'GO_TO_NEXT_PAGE', + dispatch, + currentPage, + nextPage : true + }), + updateCheckboxValue : (e, index) => ({ + type : 'UPDATE_CHECKBOX_VALUE', + id : e.currentTarget.id, + index + }), + openEditModal : (index, journeyPattern) => ({ + type : 'EDIT_JOURNEYPATTERN_MODAL', + index, + journeyPattern + }), + openCreateModal : () => ({ + type : 'CREATE_JOURNEYPATTERN_MODAL' + }), + deleteJourneyPattern : (index, journeyPattern) => ({ + type : 'DELETE_JOURNEYPATTERN', + index, + journeyPattern + }), + closeModal : () => ({ + type : 'CLOSE_MODAL' + }), + saveModal : (index, data) => ({ + type: 'SAVE_MODAL', + data, + index + }), + addJourneyPattern : (index, data) => ({ + type: 'ADD_JOURNEYPATTERN', + data, + index + }), + savePage : (dispatch, currentPage) => ({ + type: 'SAVE_PAGE', + dispatch + }), + submitJourneyPattern : (dispatch, state) => { + let urlJSON = window.location.pathname + ".json" + let req = new Request(urlJSON, { + credentials: 'same-origin', + method: 'PATCH', + contentType: 'application/json; charset=utf-8', + Accept: 'application/json', + body: JSON.stringify(state), + headers: { + 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') + } + }) + fetch(req) + .then(response => response.json()) + .then((json) => { + console.log('request for submit') + // dispatch(actions.receiveJourneyPatterns(journeyPatterns)) + }) + }, + fetchJourneyPatterns : (dispatch, currentPage, nextPage) => { + if(currentPage == undefined){ + currentPage = 1 + } + let journeyPatterns = [] + let page + switch (nextPage) { + case true: + page = currentPage + 1 + break + case false: + if(currentPage > 1){ + page = currentPage - 1 + } + break + default: + page = currentPage + break + } + let str = ".json" + if(page > 1){ + str = '.json?page=' + page.toString() + } + let urlJSON = window.location.pathname + str + let req = new Request(urlJSON, { + credentials: 'same-origin', + }) + fetch(req) + .then(response => response.json()) + .then((json) => { + let val + for (val of json){ + for (let stop_point of val.route_short_description.stop_points){ + stop_point.checked = false + val.stop_area_short_descriptions.map((element) => { + if(element.stop_area_short_description.id === stop_point.id){ + stop_point.checked = true + } + }) + } + journeyPatterns.push({ + name: val.name, + object_id: val.object_id, + published_name: val.published_name, + registration_number: val.registration_number, + stop_points: val.route_short_description.stop_points, + deletable: false + }) + } + dispatch(actions.receiveJourneyPatterns(journeyPatterns)) + }) + } +} + +module.exports = actions diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/App.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/App.js new file mode 100644 index 000000000..5c2454dac --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/App.js @@ -0,0 +1,20 @@ +var React = require('react') +var AddJourneyPattern = require('../containers/AddJourneyPattern') +var Navigate = require('../containers/Navigate') +var Modal = require('../containers/Modal') +var SaveJourneyPattern = require('../containers/SaveJourneyPattern') +var JourneyPatternList = require('../containers/JourneyPatternList') + +const App = () => ( + <div> + <div className='clearfix' style={{ marginBottom: 10 }}> + <Navigate /> + <AddJourneyPattern /> + </div> + <JourneyPatternList /> + <SaveJourneyPattern /> + <Modal/> + </div> +) + +module.exports = App diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js new file mode 100644 index 000000000..c9142e9ab --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js @@ -0,0 +1,105 @@ +var React = require('react') +var Component = require('react').Component +var PropTypes = require('react').PropTypes + +class CreateModal extends Component { + constructor(props) { + super(props) + } + handleSubmit(e) { + e.preventDefault() + this.props.onAddJourneyPattern((this.props.journeyPatterns.length + 1), this.refs) + } + + render() { + return ( + <div className='pull-right'> + <button + type='button' + className='btn btn-primary btn-sm' + data-toggle='modal' + data-target='#NewJourneyPatternModal' + onClick={this.props.onOpenCreateModal} + > + <span className='fa fa-plus'></span> Ajouter une mission + </button> + + <div className={ 'modal fade ' + (this.props.modal.create ? 'in' : '') } id='NewJourneyPatternModal'> + <div className='modal-dialog'> + <div className='modal-content'> + <div className='modal-header clearfix'> + <h4>Ajouter une mission</h4> + </div> + + <div className='modal-body'> + {this.props.modal.create && ( + <form> + <div className='form-group'> + <label>Nom</label> + <input + type='text' + ref='name' + className='form-control' + /> + </div> + <div className='row'> + <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'> + <div className='form-group'> + <label>Nom public</label> + <input + type='text' + ref='published_name' + className='form-control' + /> + </div> + </div> + <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'> + <div className='form-group'> + <label>N° d'enregistrement</label> + <input + type='text' + ref='registration_number' + className='form-control' + /> + </div> + </div> + </div> + </form> + )} + </div> + + <div className='modal-footer'> + <button + className='btn btn-default' + data-dismiss='modal' + type='button' + onClick={this.props.onModalClose} + > + Annuler + </button> + <button + className='btn btn-danger' + data-dismiss='modal' + type='button' + onClick={this.handleSubmit.bind(this)} + > + Valider + </button> + </div> + </div> + </div> + </div> + </div> + ) + } +} + +CreateModal.propTypes = { + index: PropTypes.number, + modal: PropTypes.object, + onOpenCreateModal: PropTypes.func.isRequired, + onModalClose: PropTypes.func.isRequired, + onAddJourneyPattern: PropTypes.func.isRequired +} + +module.exports = CreateModal diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js new file mode 100644 index 000000000..560e44a26 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js @@ -0,0 +1,130 @@ +var React = require('react') +var Component = require('react').Component +var PropTypes = require('react').PropTypes + +class EditModal extends Component { + constructor(props) { + super(props) + } + handleSubmit(e) { + e.preventDefault() + this.props.saveModal(this.props.modal.modalProps.index, this.refs) + } + + render() { + return ( + <div className={ 'modal fade ' + (this.props.modal.edit ? 'in' : '') } id='JourneyPatternModal'> + <div className='modal-dialog'> + <div className='modal-content'> + <div className='modal-header clearfix'> + <h4 className='pull-left'> + Modifier la mission + {this.props.modal.open && ( + <em> "{this.props.modal.modalProps.journeyPattern.name}"</em> + )} + </h4> + <div className='btn-group btn-group-sm pull-right'> + <button + type='button' + className='btn btn-primary dropdown-toggle' + data-toggle='dropdown' + > + <span className='fa fa-bars'></span> + <span className='caret'></span> + </button> + + <ul className='dropdown-menu'> + <li><a href='#'>Horaires des courses</a></li> + <li> + <a + href='#' + data-dismiss='modal' + onClick={(e) => { + e.preventDefault() + this.props.onDeleteJourneyPattern(this.props.modal.modalProps.index, this.props.modal.modalProps.journeyPattern)} + } + > + Supprimer la mission + </a> + </li> + </ul> + </div> + </div> + <div className='modal-body'> + {this.props.modal.edit && ( + <form> + <div className='form-group'> + <label>Nom</label> + <input + type='text' + ref='name' + className='form-control' + id={this.props.modal.modalProps.index} + defaultValue={this.props.modal.modalProps.journeyPattern.name} + /> + </div> + + <div className='row'> + <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'> + <div className='form-group'> + <label>Nom public</label> + <input + type='text' + ref='published_name' + className='form-control' + id={this.props.modal.modalProps.index} + defaultValue={this.props.modal.modalProps.journeyPattern.published_name} + /> + </div> + </div> + <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'> + <div className='form-group'> + <label>N° d'enregistrement</label> + <input + type='text' + ref='registration_number' + className='form-control' + id={this.props.modal.modalProps.index} + defaultValue={this.props.modal.modalProps.journeyPattern.registration_number} + /> + </div> + </div> + </div> + + </form> + )} + </div> + <div className='modal-footer'> + <button + className='btn btn-default' + data-dismiss='modal' + type='button' + onClick={this.props.onModalClose} + > + Annuler + </button> + <button + className='btn btn-danger' + data-dismiss='modal' + type='button' + onClick={this.handleSubmit.bind(this)} + > + Valider + </button> + </div> + </div> + </div> + </div> + ) + } +} + +EditModal.propTypes = { + index: PropTypes.number, + modal: PropTypes.object, + onModalClose: PropTypes.func.isRequired, + saveModal: PropTypes.func.isRequired, + onDeleteJourneyPattern: PropTypes.func.isRequired +} + +module.exports = EditModal diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js new file mode 100644 index 000000000..78e2e6d9c --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js @@ -0,0 +1,55 @@ +var React = require('react') +var PropTypes = require('react').PropTypes + +const JourneyPattern = (props) => { + return ( + <div className={'list-group-item ' + (props.value.deletable ? 'disabled' : '') + (props.value.object_id ? '' : 'to_record')}> + <div style={{display: 'inline-block', verticalAlign: 'top', width: '40%'}}> + <p className='small'><strong>Index: </strong>{props.index}</p> + <p className='small'><strong>Name: </strong>{props.value.name}</p> + </div> + + <div style={{display: 'inline-block', verticalAlign: 'top', width: '40%'}}> + <p className='small'><strong>ObjectID: </strong>{props.value.object_id}</p> + <p className='small'><strong>Published name: </strong>{props.value.published_name}</p> + </div> + + <div className='clearfix' style={{display: 'inline-block', verticalAlign: 'top', width: '20%'}}> + <button className={(props.value.deletable ? 'disabled' : '') + ' btn btn-xs btn-danger pull-right'} onClick={props.onOpenEditModal} data-toggle='modal' data-target='#JourneyPatternModal'> + <span className='fa fa-pencil'></span> + </button> + </div> + + <p className='small'><strong>Stop points: </strong></p> + <ul className='list-group'> + {props.value.stop_points.map((stopPoint, i) => + <li + key={ i } + className='list-group-item clearfix' + > + <span className='label label-default' style={{marginRight: 5}}>{stopPoint.id}</span> + <span>{stopPoint.name}</span> + <span className='pull-right'> + <input + onChange = {(e) => props.onCheckboxChange(e)} + type='checkbox' + id={stopPoint.id} + checked={stopPoint.checked} + disabled={props.value.deletable ? 'disabled' : ''} + ></input> + </span> + </li> + )} + </ul> + </div> + ) +} + +JourneyPattern.propTypes = { + value: PropTypes.object, + index: PropTypes.number, + onCheckboxChange: PropTypes.func.isRequired, + onOpenEditModal: PropTypes.func.isRequired +} + +module.exports = JourneyPattern diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js new file mode 100644 index 000000000..160631697 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js @@ -0,0 +1,38 @@ +var React = require('react') +var Component = require('react').Component +var PropTypes = require('react').PropTypes +var JourneyPattern = require('./JourneyPattern') + +class JourneyPatterns extends Component{ + constructor(props){ + super(props) + } + + componentDidMount() { + this.props.onLoadFirstPage() + } + + render() { + return ( + <div className='list-group'> + {this.props.journeyPatterns.map((journeyPattern, index) => + <JourneyPattern + value={ journeyPattern } + key={ index } + onCheckboxChange= {(e) => this.props.onCheckboxChange(e, index)} + onOpenEditModal= {() => this.props.onOpenEditModal(index, journeyPattern)} + /> + )} + </div> + ) + } +} + +JourneyPatterns.propTypes = { + journeyPatterns: PropTypes.array.isRequired, + onCheckboxChange: PropTypes.func.isRequired, + onLoadFirstPage: PropTypes.func.isRequired, + onOpenEditModal: PropTypes.func.isRequired +} + +module.exports = JourneyPatterns diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/AddJourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/AddJourneyPattern.js new file mode 100644 index 000000000..a4c5c09c9 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/AddJourneyPattern.js @@ -0,0 +1,28 @@ +var actions = require('../actions') +var connect = require('react-redux').connect +var CreateModal = require('../components/CreateModal') + +const mapStateToProps = (state) => { + return { + modal: state.modal, + journeyPatterns: state.journeyPatterns + } +} + +const mapDispatchToProps = (dispatch) => { + return { + onModalClose: () =>{ + dispatch(actions.closeModal()) + }, + onAddJourneyPattern: (index, data) =>{ + dispatch(actions.addJourneyPattern(index, data)) + }, + onOpenCreateModal: () =>{ + dispatch(actions.openCreateModal()) + } + } +} + +const AddJourneyPattern = connect(mapStateToProps, mapDispatchToProps)(CreateModal) + +module.exports = AddJourneyPattern diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/JourneyPatternList.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/JourneyPatternList.js new file mode 100644 index 000000000..73dc6a1c7 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/JourneyPatternList.js @@ -0,0 +1,27 @@ +var actions = require('../actions') +var connect = require('react-redux').connect +var JourneyPatterns = require('../components/JourneyPatterns') + +const mapStateToProps = (state) => { + return { + journeyPatterns: state.journeyPatterns + } +} + +const mapDispatchToProps = (dispatch) => { + return { + onLoadFirstPage: () =>{ + dispatch(actions.loadFirstPage(dispatch)) + }, + onCheckboxChange: (e, index) =>{ + dispatch(actions.updateCheckboxValue(e, index)) + }, + onOpenEditModal: (index, journeyPattern) =>{ + dispatch(actions.openEditModal(index, journeyPattern)) + } + } +} + +const JourneyPatternList = connect(mapStateToProps, mapDispatchToProps)(JourneyPatterns) + +module.exports = JourneyPatternList diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/Modal.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Modal.js new file mode 100644 index 000000000..553d69119 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Modal.js @@ -0,0 +1,29 @@ +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()) + }, + saveModal: (index, data) =>{ + dispatch(actions.saveModal(index, data)) + }, + onDeleteJourneyPattern: (index, journeyPattern) =>{ + dispatch(actions.deleteJourneyPattern(index, journeyPattern)) + } + } +} + +const ModalContainer = connect(mapStateToProps, mapDispatchToProps)(EditModal, CreateModal) + +module.exports = ModalContainer diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js new file mode 100644 index 000000000..c8e681edb --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js @@ -0,0 +1,45 @@ +var React = require('react') +var connect = require('react-redux').connect +var actions = require('../actions') + +let Navigate = ({ dispatch, journeyPatterns, page, length }) => { + let firstPage = 1 + let lastPage = Math.ceil(length / 12) + + return ( + <form className='btn-group btn-group-sm' onSubmit={e => { + e.preventDefault() + }}> + <button + onClick={e => { + e.preventDefault() + dispatch(actions.goToPreviousPage(dispatch, page)) + }} + type="submit" + className={ (page == firstPage ? "hidden" : "") + " btn btn-default" }> + <span className="fa fa-chevron-left"></span> + </button> + <button + onClick={e => { + e.preventDefault() + dispatch(actions.goToNextPage(dispatch, page)) + }} + type="submit" + className={ (page == lastPage ? "hidden" : "") + " btn btn-default" }> + <span className="fa fa-chevron-right"></span> + </button> + </form> + ) +} + +const mapStateToProps = (state) => { + return { + journeyPatterns: state.journeyPatterns, + page: state.pagination, + length: state.totalCount + } +} + +Navigate = connect(mapStateToProps)(Navigate) + +module.exports = Navigate diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/SaveJourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/SaveJourneyPattern.js new file mode 100644 index 000000000..1fdc385a5 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/SaveJourneyPattern.js @@ -0,0 +1,31 @@ +var React = require('react') +var connect = require('react-redux').connect +var actions = require('../actions') + +let SaveJourneyPattern = ({ dispatch, journeyPatterns, page }) => { + return ( + <form className='clearfix' onSubmit={e => {e.preventDefault()}}> + <button + className='btn btn-danger pull-right' + type='submit' + onClick={e => { + e.preventDefault() + dispatch(actions.savePage(dispatch, page)) + }} + > + Valider + </button> + </form> + ) +} + +const mapStateToProps = (state) => { + return { + journeyPatterns: state.journeyPatterns, + page: state.pagination + } +} + +SaveJourneyPattern = connect(mapStateToProps)(SaveJourneyPattern) + +module.exports = SaveJourneyPattern diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/index.js new file mode 100644 index 000000000..aab21fb0b --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/index.js @@ -0,0 +1,37 @@ +var React = require('react') +var render = require('react-dom').render +var Provider = require('react-redux').Provider +var createStore = require('redux').createStore +var journeyPatternsApp = require('./reducers') +var App = require('./components/App') + +// logger, DO NOT REMOVE +// var applyMiddleware = require('redux').applyMiddleware +// var createLogger = require('redux-logger') +// var thunkMiddleware = require('redux-thunk').default +// var promise = require('redux-promise') + +var initialState = { + journeyPatterns: [], + pagination: 1, + totalCount: window.journeyPatternLength, + modal: { + edit: false, + create: false, + modalProps: {} + } +} +// const loggerMiddleware = createLogger() + +let store = createStore( + journeyPatternsApp, + initialState + // applyMiddleware(thunkMiddleware, promise, loggerMiddleware) +) + +render( + <Provider store={store}> + <App /> + </Provider>, + document.getElementById('journey_patterns') +) diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/index.js new file mode 100644 index 000000000..71ff8b6f5 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/index.js @@ -0,0 +1,14 @@ +var combineReducers = require('redux').combineReducers +var journeyPatterns = require('./journeyPatterns') +var pagination = require('./pagination') +var totalCount = require('./totalCount') +var modal = require('./modal') + +const journeyPatternsApp = combineReducers({ + journeyPatterns, + pagination, + totalCount, + modal +}) + +module.exports = journeyPatternsApp diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js new file mode 100644 index 000000000..68346b242 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js @@ -0,0 +1,87 @@ +var actions = require("../actions") + +const journeyPattern = (state = {}, action) => { + switch (action.type) { + case 'ADD_JOURNEYPATTERN': + const stop_points = state[0].stop_points.map((s)=>{ + s.checked = false + return s + }) + return { + name: action.data.name.value, + published_name: action.data.published_name.value, + registration_number: action.data.registration_number.value, + stop_points: stop_points, + deletable: false + } + case 'UPDATE_CHECKBOX_VALUE': + var updatedStopPoints = state.stop_points.map((s) => { + if (s.id.toString() == action.id) { + return Object.assign({}, s, {checked : !s.checked}) + }else { + return s + } + }) + return Object.assign({}, state, {stop_points: updatedStopPoints}) + default: + return state + } +} + +const journeyPatterns = (state = {}, action) => { + switch (action.type) { + case 'RECEIVE_JOURNEY_PATTERNS': + return [...action.json] + case 'LOAD_FIRST_PAGE': + actions.fetchJourneyPatterns(action.dispatch) + case 'GO_TO_PREVIOUS_PAGE': + if(action.currentPage > 1){ + actions.fetchJourneyPatterns(action.dispatch, action.currentPage, action.nextPage) + } + return state + case 'GO_TO_NEXT_PAGE': + if (window.journeyPatternLength - (action.currentPage * 12) > 0){ + actions.fetchJourneyPatterns(action.dispatch, action.currentPage, action.nextPage) + } + return state + case 'UPDATE_CHECKBOX_VALUE': + return state.map((j, i) =>{ + if(i == action.index) { + return journeyPattern(j, action) + } else { + return j + } + }) + case 'DELETE_JOURNEYPATTERN': + return state.map((j, i) =>{ + if(i == action.index) { + return Object.assign({}, j, {deletable: true}) + } else { + return j + } + }) + case 'ADD_JOURNEYPATTERN': + return [ + ...state, + journeyPattern(state, action) + ] + case 'SAVE_MODAL': + return state.map((j, i) =>{ + if(i == action.index) { + return Object.assign({}, j, { + name: action.data.name.value, + published_name: action.data.published_name.value, + registration_number: action.data.registration_number.value + }) + } else { + return j + } + }) + case 'SAVE_PAGE': + actions.submitJourneyPattern(action.dispatch, state) + default: + return state + } +} + +module.exports = journeyPatterns diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js new file mode 100644 index 000000000..16f89be3e --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js @@ -0,0 +1,33 @@ +const modal = (state = {}, action) => { + switch (action.type) { + case 'EDIT_JOURNEYPATTERN_MODAL': + return { + edit: true, + create: false, + modalProps: { + index: action.index, + journeyPattern: action.journeyPattern + } + } + case 'CREATE_JOURNEYPATTERN_MODAL': + return { + create: true, + edit: false, + modalProps: { index: action.index } + } + case 'DELETE_JOURNEYPATTERN': + return Object.assign({}, state, { edit: false, create: false }) + case 'SAVE_MODAL': + return Object.assign({}, state, { edit: false, create: false }) + case 'CLOSE_MODAL': + return { + edit: false, + create: false, + modalProps: {} + } + default: + return state + } +} + +module.exports = modal diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js new file mode 100644 index 000000000..0103fe248 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js @@ -0,0 +1,18 @@ +const pagination = (state = 0, action) => { + switch (action.type) { + case 'GO_TO_PREVIOUS_PAGE': + if (action.currentPage > 1){ + return state - 1 + } + return state + case 'GO_TO_NEXT_PAGE': + if (window.journeyPatternLength - (action.currentPage * 12) > 0){ + return state + 1 + } + return state + default: + return state + } +} + +module.exports = pagination diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/totalCount.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/totalCount.js new file mode 100644 index 000000000..830de28aa --- /dev/null +++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/totalCount.js @@ -0,0 +1,8 @@ +const totalCount = (state = 0, action) => { + switch (action.type) { + default: + return state + } +} + +module.exports = totalCount |
