aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Haddad2017-01-10 17:23:58 +0100
committerThomas Haddad2017-01-10 17:25:27 +0100
commit1ed5294c5227c2f8d24cb78c71a87f8f4d58f1b9 (patch)
treec48fb6f1e8738b05ab74e4145e2df159e689eaa4
parent60bd5e945f959c080b3c478b0495dc39466ca80f (diff)
downloadchouette-core-1ed5294c5227c2f8d24cb78c71a87f8f4d58f1b9.tar.bz2
Refs #2205: Fix confirm modal being opened only when journey patterns state changed
Signed-off-by: Thomas Shawarma Haddad <thomas.haddad@af83.com>
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js12
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/ConfirmModal.js4
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js48
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js39
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/index.js3
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js2
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js4
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js19
-rw-r--r--spec/javascripts/journey_patterns/actions_spec.js7
-rw-r--r--spec/javascripts/journey_patterns/reducers/modal_spec.js9
-rw-r--r--spec/javascripts/journey_patterns/reducers/pagination_spec.js4
-rw-r--r--spec/javascripts/spec_helper.js2
12 files changed, 96 insertions, 57 deletions
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
index a294e69ba..1819ee742 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
@@ -28,10 +28,16 @@ const actions = {
id : e.currentTarget.id,
index
}),
- openConfirmModal : (accept, cancel) => ({
+ checkConfirmModal : (event, callback, stateChanged) => {
+ if(stateChanged === true){
+ return actions.openConfirmModal(callback)
+ }else{
+ return callback
+ }
+ },
+ openConfirmModal : (callback) => ({
type : 'OPEN_CONFIRM_MODAL',
- accept,
- cancel
+ callback
}),
openEditModal : (index, journeyPattern) => ({
type : 'EDIT_JOURNEYPATTERN_MODAL',
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/ConfirmModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/ConfirmModal.js
index 86bbe3acb..d9fbf07f8 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/components/ConfirmModal.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/ConfirmModal.js
@@ -14,7 +14,7 @@ const ConfirmModal = ({dispatch, modal, onModalAccept, onModalCancel, journeyPat
className='btn btn-default'
data-dismiss='modal'
type='button'
- onClick= {() => {onModalCancel(modal.confirmModal.cancel)}}
+ onClick= {() => {onModalCancel(modal.confirmModal.callback)}}
>
Ne pas enregistrer
</button>
@@ -22,7 +22,7 @@ const ConfirmModal = ({dispatch, modal, onModalAccept, onModalCancel, journeyPat
className='btn btn-danger'
data-dismiss='modal'
type='button'
- onClick = {() => {onModalAccept(modal.confirmModal.accept, journeyPatterns)}}
+ onClick = {() => {onModalAccept(modal.confirmModal.callback, journeyPatterns)}}
>
Enregistrer
</button>
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js
new file mode 100644
index 000000000..3c771417d
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js
@@ -0,0 +1,48 @@
+var React = require('react')
+var Component = require('react').Component
+var PropTypes = require('react').PropTypes
+var actions = require('../actions')
+
+let Navigate = ({ dispatch, journeyPatterns, page, length, stateChanged }) => {
+ 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.checkConfirmModal(e, actions.goToPreviousPage(dispatch, page), stateChanged))
+ }}
+ type="submit"
+ data-toggle=''
+ data-target='#ConfirmModal'
+ className={ (page == firstPage ? "hidden" : "") + " btn btn-default" }>
+ <span className="fa fa-chevron-left"></span>
+ </button>
+ <button
+ onClick={e => {
+ e.preventDefault()
+ dispatch(actions.checkConfirmModal(e, actions.goToNextPage(dispatch, page), stateChanged))
+ }}
+ type="submit"
+ data-toggle=''
+ data-target='#ConfirmModal'
+ className={ (page == lastPage ? "hidden" : "") + " btn btn-default" }>
+ <span className="fa fa-chevron-right"></span>
+ </button>
+ </form>
+ )
+}
+
+Navigate.propTypes = {
+ page: PropTypes.number.isRequired,
+ length: PropTypes.number.isRequired,
+ stateChanged: PropTypes.bool.isRequired,
+ journeyPatterns: PropTypes.array.isRequired,
+ dispatch: PropTypes.func.isRequired
+}
+
+module.exports = Navigate
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js
index 1c9f7113f..d324e6064 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js
@@ -1,49 +1,18 @@
var React = require('react')
var connect = require('react-redux').connect
var actions = require('../actions')
+var NavigateComponent = require('../components/Navigate')
-let Navigate = ({ dispatch, journeyPatterns, page, length, onOpenConfirmModal }) => {
- 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.openConfirmModal(actions.goToPreviousPage(dispatch, page), actions.goToPreviousPage(dispatch, page)))
- }}
- type="submit"
- data-toggle='modal'
- data-target='#ConfirmModal'
- className={ (page == firstPage ? "hidden" : "") + " btn btn-default" }>
- <span className="fa fa-chevron-left"></span>
- </button>
- <button
- onClick={e => {
- e.preventDefault()
- dispatch(actions.openConfirmModal(actions.goToNextPage(dispatch, page), actions.goToNextPage(dispatch, page)))
- }}
- type="submit"
- data-toggle='modal'
- data-target='#ConfirmModal'
- 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.page,
length: state.pagination.totalCount,
- confirmModalActions: state.modal.confirmActions
+ stateChanged: state.pagination.stateChanged
}
}
-Navigate = connect(mapStateToProps)(Navigate)
+
+const Navigate = connect(mapStateToProps)(NavigateComponent)
module.exports = Navigate
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/index.js
index 449cd3202..47d6dc31f 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/index.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/index.js
@@ -15,7 +15,8 @@ var initialState = {
journeyPatterns: [],
pagination: {
page : 1,
- totalCount: window.journeyPatternLength
+ totalCount: window.journeyPatternLength,
+ stateChanged: false
},
modal: {
type: '',
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js
index 9215f801b..8dd1a46e6 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js
@@ -38,11 +38,13 @@ const journeyPatterns = (state = [], action) => {
case 'LOAD_FIRST_PAGE':
actions.fetchJourneyPatterns(action.dispatch)
case 'GO_TO_PREVIOUS_PAGE':
+ $('#ConfirmModal').modal('hide')
if(action.currentPage > 1){
actions.fetchJourneyPatterns(action.dispatch, action.currentPage, action.nextPage)
}
return state
case 'GO_TO_NEXT_PAGE':
+ $('#ConfirmModal').modal('hide')
if (window.journeyPatternLength - (action.currentPage * 12) > 0){
actions.fetchJourneyPatterns(action.dispatch, action.currentPage, action.nextPage)
}
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js
index 85df48954..cb274d767 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js
@@ -1,11 +1,11 @@
const modal = (state = {}, action) => {
switch (action.type) {
case 'OPEN_CONFIRM_MODAL':
+ $('#ConfirmModal').modal('show')
return Object.assign({}, state, {
type: 'confirm',
confirmModal: {
- accept: action.accept,
- cancel: action.cancel
+ callback: action.callback,
}
})
case 'EDIT_JOURNEYPATTERN_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
index a17e9f292..3ac5ba7c0 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js
@@ -1,18 +1,33 @@
const pagination = (state = {}, action) => {
switch (action.type) {
+ case 'RECEIVE_JOURNEY_PATTERNS':
+ return Object.assign({}, state, {stateChanged: false})
case 'GO_TO_PREVIOUS_PAGE':
if (action.currentPage > 1){
- return Object.assign({}, state, {page : action.currentPage - 1})
+ toggleOnConfirmModal()
+ return Object.assign({}, state, {page : action.currentPage - 1, stateChanged: false})
}
return state
case 'GO_TO_NEXT_PAGE':
if (state.totalCount - (action.currentPage * 12) > 0){
- return Object.assign({}, state, {page : action.currentPage + 1})
+ toggleOnConfirmModal()
+ return Object.assign({}, state, {page : action.currentPage + 1, stateChanged: false})
}
return state
+ case 'UPDATE_CHECKBOX_VALUE':
+ case 'ADD_JOURNEYPATTERN':
+ case 'SAVE_MODAL':
+ toggleOnConfirmModal('modal')
+ return Object.assign({}, state, {stateChanged: true})
default:
return state
}
}
+const toggleOnConfirmModal = (arg = '') =>{
+ $('.confirm').each(function(){
+ $(this).data('toggle','')
+ })
+}
+
module.exports = pagination
diff --git a/spec/javascripts/journey_patterns/actions_spec.js b/spec/javascripts/journey_patterns/actions_spec.js
index ced053935..03198c2c4 100644
--- a/spec/javascripts/journey_patterns/actions_spec.js
+++ b/spec/javascripts/journey_patterns/actions_spec.js
@@ -53,13 +53,12 @@ describe('when clicking on a journey pattern checkbox', () => {
})
describe('when clicking on next button', () => {
it('should create an action to open a confirm modal', () => {
- const accept = {}, cancel = {}
+ const callback = function(){}
const expectedAction = {
type: 'OPEN_CONFIRM_MODAL',
- accept,
- cancel,
+ callback
}
- expect(actions.openConfirmModal(accept, cancel)).toEqual(expectedAction)
+ expect(actions.openConfirmModal(callback)).toEqual(expectedAction)
})
})
describe('when clicking on edit button', () => {
diff --git a/spec/javascripts/journey_patterns/reducers/modal_spec.js b/spec/javascripts/journey_patterns/reducers/modal_spec.js
index 46ab2d905..0bc7c9240 100644
--- a/spec/javascripts/journey_patterns/reducers/modal_spec.js
+++ b/spec/javascripts/journey_patterns/reducers/modal_spec.js
@@ -11,8 +11,7 @@ let fakeJourneyPattern = {
deletable: false
}
-const accept = function(){}
-const cancel = function(){}
+const cb = function(){}
describe('modal reducer', () => {
beforeEach(() => {
@@ -33,15 +32,13 @@ describe('modal reducer', () => {
let newState = Object.assign({}, state, {
type: 'confirm',
confirmModal: {
- accept: accept,
- cancel: cancel
+ callback: cb
}
})
expect(
modalReducer(state, {
type: 'OPEN_CONFIRM_MODAL',
- accept,
- cancel
+ callback: cb
})
).toEqual(newState)
})
diff --git a/spec/javascripts/journey_patterns/reducers/pagination_spec.js b/spec/javascripts/journey_patterns/reducers/pagination_spec.js
index a99e8ff85..1c8011fca 100644
--- a/spec/javascripts/journey_patterns/reducers/pagination_spec.js
+++ b/spec/javascripts/journey_patterns/reducers/pagination_spec.js
@@ -22,7 +22,7 @@ describe('pagination reducer, given parameters allowing page change', () => {
currentPage,
nextPage : true
})
- ).toEqual(Object.assign({}, state, {page : state.page + 1}))
+ ).toEqual(Object.assign({}, state, {page : state.page + 1, stateChanged: false}))
})
it('should return GO_TO_PREVIOUS_PAGE and change state', () => {
@@ -33,7 +33,7 @@ describe('pagination reducer, given parameters allowing page change', () => {
currentPage,
nextPage : false
})
- ).toEqual(Object.assign({}, state, {page : state.page - 1}))
+ ).toEqual(Object.assign({}, state, {page : state.page - 1, stateChanged: false}))
})
})
diff --git a/spec/javascripts/spec_helper.js b/spec/javascripts/spec_helper.js
index a2fde3860..a0285cccf 100644
--- a/spec/javascripts/spec_helper.js
+++ b/spec/javascripts/spec_helper.js
@@ -4,6 +4,8 @@
// require support/jasmine-jquery-2.1.0
// require support/sinon
// require support/your-support-file
+//= require jquery
+//= require bootstrap-sass-official
require('es6-object-assign').polyfill();
//
// PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion.