diff options
| author | Thomas Haddad | 2017-03-08 15:01:37 +0100 |
|---|---|---|
| committer | Thomas Haddad | 2017-03-08 15:03:09 +0100 |
| commit | bb10391face1fb10689e2210d192a918a2078aa0 (patch) | |
| tree | e9686a385952ca6ca727176aab1504109df9245d /app/assets/javascripts | |
| parent | c6f1b8de3efa57c647cf44d23a2c39383075f508 (diff) | |
| download | chouette-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')
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': |
