aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/javascripts
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/actions/index.js (renamed from app/assets/javascripts/es6_browserified/actions/index.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/App.js (renamed from app/assets/javascripts/es6_browserified/components/App.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js (renamed from app/assets/javascripts/es6_browserified/components/BSelect2.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/Todo.js (renamed from app/assets/javascripts/es6_browserified/components/Todo.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/TodoList.js (renamed from app/assets/javascripts/es6_browserified/components/TodoList.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/containers/AddTodo.js (renamed from app/assets/javascripts/es6_browserified/containers/AddTodo.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/containers/VisibleTodoList.js (renamed from app/assets/javascripts/es6_browserified/containers/VisibleTodoList.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/form_helper.js (renamed from app/assets/javascripts/es6_browserified/form_helper.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/reducers/index.js (renamed from app/assets/javascripts/es6_browserified/reducers/index.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/reducers/todos.js (renamed from app/assets/javascripts/es6_browserified/reducers/todos.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/stop_points.js (renamed from app/assets/javascripts/es6_browserified/stop_points.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js130
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/App.js20
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js105
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js130
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js55
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js38
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/AddJourneyPattern.js28
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/JourneyPatternList.js27
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/Modal.js29
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js45
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/SaveJourneyPattern.js31
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/index.js37
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/index.js14
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js87
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js33
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js18
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/totalCount.js8
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