aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/javascripts
diff options
context:
space:
mode:
authorThomas Haddad2017-03-08 15:01:37 +0100
committerThomas Haddad2017-03-08 15:03:09 +0100
commitbb10391face1fb10689e2210d192a918a2078aa0 (patch)
treee9686a385952ca6ca727176aab1504109df9245d /app/assets/javascripts
parentc6f1b8de3efa57c647cf44d23a2c39383075f508 (diff)
downloadchouette-core-bb10391face1fb10689e2210d192a918a2078aa0.tar.bz2
Refs #2507: fix whole query system with batchActions and queryString
Signed-off-by: Thomas Shawarma Haddad <thomas.haddad@af83.com>
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js47
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/batch.js26
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js7
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/Navigate.js6
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js11
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Navigate.js3
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/index.js4
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js5
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js4
10 files changed, 89 insertions, 26 deletions
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 8042f74e5..82aae7ec0 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
@@ -1,3 +1,5 @@
+var batchActions = require('../batch').batchActions
+
const actions = {
receiveVehicleJourneys : (json) => ({
type: "RECEIVE_VEHICLE_JOURNEYS",
@@ -13,17 +15,19 @@ const actions = {
unavailableServer : () => ({
type: 'UNAVAILABLE_SERVER'
}),
- goToPreviousPage : (dispatch, pagination) => ({
+ goToPreviousPage : (dispatch, pagination, queryString) => ({
type: 'GO_TO_PREVIOUS_PAGE',
dispatch,
pagination,
- nextPage : false
+ nextPage : false,
+ queryString
}),
- goToNextPage : (dispatch, pagination) => ({
+ goToNextPage : (dispatch, pagination, queryString) => ({
type: 'GO_TO_NEXT_PAGE',
dispatch,
pagination,
- nextPage : true
+ nextPage : true,
+ queryString
}),
checkConfirmModal : (event, callback, stateChanged, dispatch) => {
if(stateChanged === true){
@@ -161,7 +165,7 @@ const actions = {
isDeparture,
isArrivalsToggled
}),
- resetFilters: () => ({
+ resetStateFilters: () => ({
type: 'RESET_FILTERS'
}),
toggleWithoutSchedule: () => ({
@@ -194,10 +198,31 @@ const actions = {
published_name: selectedJP.published_name
}
}),
- filterQuery: () => ({
- type: 'FILTER_QUERY'
- }),
- fetchVehicleJourneys : (dispatch, currentPage, nextPage) => {
+ createQueryString: () => ({
+ type: 'CREATE_QUERY_STRING'
+ }),
+ resetPagination: () => ({
+ type: 'RESET_PAGINATION'
+ }),
+ queryFilterVehicleJourneys: (dispatch) => ({
+ type: 'QUERY_FILTER_VEHICLEJOURNEYS',
+ dispatch
+ }),
+ resetFilters: (dispatch) => (
+ batchActions([
+ actions.resetStateFilters(),
+ actions.resetPagination(),
+ actions.queryFilterVehicleJourneys(dispatch)
+ ])
+ ),
+ filterQuery: (dispatch) => (
+ batchActions([
+ actions.createQueryString(),
+ actions.resetPagination(),
+ actions.queryFilterVehicleJourneys(dispatch)
+ ])
+ ),
+ fetchVehicleJourneys : (dispatch, currentPage, nextPage, queryString) => {
if(currentPage == undefined){
currentPage = 1
}
@@ -221,6 +246,9 @@ const actions = {
str = '.json?page=' + page.toString()
}
let urlJSON = window.location.pathname + str
+ if (queryString){
+ urlJSON += queryString
+ }
let req = new Request(urlJSON, {
credentials: 'same-origin',
})
@@ -303,7 +331,6 @@ const actions = {
}
})
},
-
// VJAS HELPERS
getSelected: (vj) => {
return vj.filter((obj) =>{
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/batch.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/batch.js
new file mode 100644
index 000000000..284d7b268
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/batch.js
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.batchActions = batchActions;
+exports.enableBatching = enableBatching;
+var BATCH = exports.BATCH = 'BATCH';
+
+function batchActions(actions) {
+ return {
+ type: BATCH,
+ payload: actions
+ };
+}
+
+function enableBatching(reduce) {
+ return function batchingReducer(state, action) {
+ switch (action.type) {
+ case BATCH:
+ return action.payload.reduce(batchingReducer, state);
+ default:
+ return reduce(state, action);
+ }
+ };
+}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
index 77284210a..9cef77ba8 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
@@ -3,7 +3,7 @@ var PropTypes = require('react').PropTypes
var MissionSelect2 = require('./tools/select2s/MissionSelect2')
var TimetableSelect2 = require('./tools/select2s/TimetableSelect2')
-const Filters = ({filters, onFilter, onResetFilters, onUpdateStartTimeFilter, onUpdateEndTimeFilter, onToggleWithoutSchedule, onSelect2Timetable, onSelect2JourneyPattern}) => {
+const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTimeFilter, onUpdateEndTimeFilter, onToggleWithoutSchedule, onSelect2Timetable, onSelect2JourneyPattern}) => {
return (
<div className = 'form-filter mb-lg'>
<div className = 'form-group'>
@@ -70,12 +70,12 @@ const Filters = ({filters, onFilter, onResetFilters, onUpdateStartTimeFilter, on
<div className = 'actions'>
<span
className = 'btn btn-link'
- onClick = {onResetFilters}>
+ onClick = {(e) => onResetFilters(e, pagination)}>
EFFACER
</span>
<span
className='btn btn-primary'
- onClick={onFilter}>
+ onClick={(e) => onFilter(e, pagination)}>
FILTRER
</span>
</div>
@@ -85,6 +85,7 @@ const Filters = ({filters, onFilter, onResetFilters, onUpdateStartTimeFilter, on
Filters.propTypes = {
filters : PropTypes.object.isRequired,
+ pagination : PropTypes.object.isRequired,
onFilter: PropTypes.func.isRequired,
onResetFilters: PropTypes.func.isRequired,
onUpdateStartTimeFilter: PropTypes.func.isRequired,
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Navigate.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Navigate.js
index d330870e3..9b95c1bc6 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Navigate.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Navigate.js
@@ -3,7 +3,7 @@ var Component = require('react').Component
var PropTypes = require('react').PropTypes
var actions = require('../actions')
-let Navigate = ({ dispatch, vehicleJourneys, pagination, status }) => {
+let Navigate = ({ dispatch, vehicleJourneys, pagination, status, filters}) => {
let firstPage = 1
let lastPage = Math.ceil(pagination.totalCount / pagination.perPage)
let minVJ = (pagination.page - 1) * pagination.perPage + 1
@@ -20,7 +20,7 @@ let Navigate = ({ dispatch, vehicleJourneys, pagination, status }) => {
<button
onClick={e => {
e.preventDefault()
- dispatch(actions.checkConfirmModal(e, actions.goToPreviousPage(dispatch, pagination), pagination.stateChanged, dispatch))
+ dispatch(actions.checkConfirmModal(e, actions.goToPreviousPage(dispatch, pagination, filters.queryString), pagination.stateChanged, dispatch))
}}
type='button'
data-target='#ConfirmModal'
@@ -30,7 +30,7 @@ let Navigate = ({ dispatch, vehicleJourneys, pagination, status }) => {
<button
onClick={e => {
e.preventDefault()
- dispatch(actions.checkConfirmModal(e, actions.goToNextPage(dispatch, pagination), pagination.stateChanged, dispatch))
+ dispatch(actions.checkConfirmModal(e, actions.goToNextPage(dispatch, pagination, filters.queryString), pagination.stateChanged, dispatch))
}}
type='button'
data-target='#ConfirmModal'
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js
index fb4efd672..7570dd466 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js
@@ -4,7 +4,8 @@ var Filters = require('../components/Filters')
const mapStateToProps = (state) => {
return {
- filters: state.filters
+ filters: state.filters,
+ pagination: state.pagination
}
}
@@ -21,11 +22,11 @@ const mapDispatchToProps = (dispatch) => {
onToggleWithoutSchedule: () =>{
dispatch(actions.toggleWithoutSchedule())
},
- onResetFilters: () =>{
- dispatch(actions.resetFilters())
+ onResetFilters: (e, pagination) =>{
+ dispatch(actions.checkConfirmModal(e, actions.resetFilters(dispatch), pagination.stateChanged, dispatch))
},
- onFilter: () =>{
- dispatch(actions.filterQuery())
+ onFilter: (e, pagination) =>{
+ dispatch(actions.checkConfirmModal(e, actions.filterQuery(dispatch), pagination.stateChanged, dispatch))
},
onSelect2Timetable: (e) => {
dispatch(actions.filterSelect2Timetable(e.params.data))
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Navigate.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Navigate.js
index 71a14155d..a3eca13c8 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Navigate.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Navigate.js
@@ -7,7 +7,8 @@ const mapStateToProps = (state) => {
return {
vehicleJourneys: state.vehicleJourneys,
status: state.status,
- pagination: state.pagination
+ pagination: state.pagination,
+ filters: state.filters
}
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
index 5a803e96f..d0226caaa 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
@@ -4,6 +4,7 @@ var Provider = require('react-redux').Provider
var createStore = require('redux').createStore
var vehicleJourneysApp = require('./reducers')
var App = require('./components/App')
+var enableBatching = require('./batch').enableBatching
// logger, DO NOT REMOVE
var applyMiddleware = require('redux').applyMiddleware
@@ -21,6 +22,7 @@ var initialState = {
selectedJourneyPatterns : selectedJP,
policy: window.perms,
toggleArrivals: false,
+ queryString: '',
query: {
interval: {
start:{
@@ -63,7 +65,7 @@ var initialState = {
const loggerMiddleware = createLogger()
let store = createStore(
- vehicleJourneysApp,
+ enableBatching(vehicleJourneysApp),
initialState,
applyMiddleware(thunkMiddleware, promise, loggerMiddleware)
)
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
index 8d9a0cc5d..c0c7d3a53 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
@@ -15,7 +15,7 @@ const filters = (state = {}, action) => {
}
}
newQuery = Object.assign({}, state.query, {interval: interval, journeyPattern: {}, timetable: {}, withoutSchedule: false })
- return Object.assign({}, state, {query: newQuery})
+ return Object.assign({}, state, {query: newQuery, queryString: ''})
case 'TOGGLE_WITHOUT_SCHEDULE':
newQuery = Object.assign({}, state.query, {withoutSchedule: !state.query.withoutSchedule})
return Object.assign({}, state, {query: newQuery})
@@ -45,6 +45,9 @@ const filters = (state = {}, action) => {
return Object.assign({}, state, {query: newQuery})
case 'TOGGLE_ARRIVALS':
return Object.assign({}, state, {toggleArrivals: !state.toggleArrivals})
+ case 'QUERY_FILTER_VEHICLEJOURNEYS':
+ actions.fetchVehicleJourneys(action.dispatch, undefined, undefined, state.queryString)
+ return state
default:
return state
}
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 c9bcec6de..e603753e2 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js
@@ -16,6 +16,8 @@ const pagination = (state = {}, action) => {
case 'UPDATE_TIME':
toggleOnConfirmModal('modal')
return Object.assign({}, state, {stateChanged: true})
+ case 'RESET_PAGINATION':
+ return Object.assign({}, state, {page: 1, stateChanged: false})
default:
return state
}
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 341506b82..7efb33c17 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
@@ -82,12 +82,12 @@ const vehicleJourneys = (state = [], action) => {
return [...action.json]
case 'GO_TO_PREVIOUS_PAGE':
if(action.pagination.page > 1){
- actions.fetchVehicleJourneys(action.dispatch, action.pagination.page, action.nextPage)
+ actions.fetchVehicleJourneys(action.dispatch, action.pagination.page, action.nextPage, action.queryString)
}
return state
case 'GO_TO_NEXT_PAGE':
if (action.pagination.totalCount - (action.pagination.page * action.pagination.perPage) > 0){
- actions.fetchVehicleJourneys(action.dispatch, action.pagination.page, action.nextPage)
+ actions.fetchVehicleJourneys(action.dispatch, action.pagination.page, action.nextPage, action.queryString)
}
return state
case 'ADD_VEHICLEJOURNEY':