diff options
| author | jpl | 2017-05-17 12:10:02 +0200 |
|---|---|---|
| committer | jpl | 2017-05-17 12:10:10 +0200 |
| commit | e217e93790f9b004ea30805e66bed5e3a25f67f4 (patch) | |
| tree | de72c908b1bed64147dee77c83b2caeea9c407d9 /app/assets/javascripts | |
| parent | 6b7e24df14a4c18cb50b96e9b308bd6f3caf924d (diff) | |
| download | chouette-core-e217e93790f9b004ea30805e66bed5e3a25f67f4.tar.bz2 | |
Refs #3399: adding objectid filter on vj
Diffstat (limited to 'app/assets/javascripts')
7 files changed, 100 insertions, 5 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 06f783620..eb7ab2c6d 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js @@ -217,6 +217,12 @@ const actions = { published_name: selectedJP.published_name } }), + filterSelect2VehicleJourney: (selectedVJ) => ({ + type : 'SELECT_VJ_FILTER', + selectedItem: { + objectid: selectedVJ.objectid + } + }), createQueryString: () => ({ type: 'CREATE_QUERY_STRING' }), 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 1895f23b7..5a8128688 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js @@ -1,16 +1,26 @@ var React = require('react') var PropTypes = require('react').PropTypes var MissionSelect2 = require('./tools/select2s/MissionSelect2') +var VJSelect2 = require('./tools/select2s/VJSelect2') var TimetableSelect2 = require('./tools/select2s/TimetableSelect2') -const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTimeFilter, onUpdateEndTimeFilter, onToggleWithoutSchedule, onSelect2Timetable, onSelect2JourneyPattern}) => { +const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTimeFilter, onUpdateEndTimeFilter, onToggleWithoutSchedule, onSelect2Timetable, onSelect2JourneyPattern, onSelect2VehicleJourney}) => { return ( <div className='row'> <div className='col-lg-12'> <div className='form form-filter'> <div className='ffg-row'> + {/* ID course */} + <div className="form-group w33"> + <VJSelect2 + onSelect2VehicleJourney={onSelect2VehicleJourney} + filters={filters} + isFilter={true} + /> + </div> + {/* Missions */} - <div className='form-group w40'> + <div className='form-group w33'> <MissionSelect2 onSelect2JourneyPattern={onSelect2JourneyPattern} filters={filters} @@ -19,7 +29,7 @@ const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTi </div> {/* Calendriers */} - <div className='form-group w40'> + <div className='form-group w33'> <TimetableSelect2 onSelect2Timetable={onSelect2Timetable} hasRoute={true} @@ -131,7 +141,8 @@ Filters.propTypes = { onUpdateStartTimeFilter: PropTypes.func.isRequired, onUpdateEndTimeFilter: PropTypes.func.isRequired, onSelect2Timetable: PropTypes.func.isRequired, - onSelect2JourneyPattern: PropTypes.func.isRequired + onSelect2JourneyPattern: PropTypes.func.isRequired, + onSelect2VehicleJourney: PropTypes.func.isRequired } module.exports = Filters diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js index bd2c84c16..c8a160510 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js @@ -32,7 +32,7 @@ class BSelect4 extends React.Component{ delay: '500', data: function(params) { return { - q: {published_name_or_objectid_cont: params.term}, + q: {published_name_cont: params.term}, }; }, processResults: function(data, params) { diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js new file mode 100644 index 000000000..fe927ac84 --- /dev/null +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js @@ -0,0 +1,67 @@ +var _ = require('lodash') +var React = require('react') +var PropTypes = require('react').PropTypes +var Select2 = require('react-select2') + +// get JSON full path +var origin = window.location.origin +var path = window.location.pathname.split('/', 7).join('/') + + +class BSelect4b extends React.Component{ + constructor(props) { + super(props) + } + humanOID(oid) { + var a = oid.split(':') + return a[a.length - 1] + } + + render() { + return ( + <Select2 + data={(this.props.isFilter) ? [this.props.filters.query.vehicleJourney.objectid] : undefined} + value={(this.props.isFilter) ? this.props.filters.query.vehicleJourney.objectid : undefined} + onSelect={(e) => this.props.onSelect2VehicleJourney(e)} + multiple={false} + ref='vehicle_journey_objectid' + options={{ + allowClear: false, + theme: 'bootstrap', + placeholder: 'Filtrer par ID course...', + width: '100%', + ajax: { + url: origin + path + '/vehicle_journeys.json', + dataType: 'json', + delay: '500', + data: function(params) { + return { + q: {objectid_cont: params.term}, + }; + }, + processResults: function(data, params) { + return { + results: data.vehicle_journeys.map( + item => _.assign( + {}, + item, + { id: item.objectid, text: _.last(_.split(item.objectid, ':')) } + ) + ) + }; + }, + cache: true + }, + minimumInputLength: 2, + templateResult: formatRepo + }} + /> + ) + } +} + +const formatRepo = (props) => { + if(props.text) return props.text +} + +module.exports = BSelect4b 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 7570dd466..9650bc646 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js @@ -33,6 +33,9 @@ const mapDispatchToProps = (dispatch) => { }, onSelect2JourneyPattern: (e) => { dispatch(actions.filterSelect2JourneyPattern(e.params.data)) + }, + onSelect2VehicleJourney: (e) => { + dispatch(actions.filterSelect2VehicleJourney(e.params.data)) } } } diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js index 4c9423c1f..d2d255b3b 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js @@ -38,6 +38,9 @@ var initialState = { journeyPattern: { published_name: '' }, + vehicleJourney: { + objectid: '' + }, company: { name: '' }, @@ -76,6 +79,7 @@ if (window.jpOrigin){ } let params = { 'q[journey_pattern_id_eq]': initialState.filters.query.journeyPattern.id, + 'q[objectid_cont]': initialState.filters.query.vehicleJourney.objectid } initialState.filters.queryString = actions.encodeParams(params) } 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 cd065e362..c1cce7492 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js @@ -44,6 +44,9 @@ const filters = (state = {}, action) => { case 'SELECT_JP_FILTER': newQuery = _.assign({}, state.query, {journeyPattern : action.selectedItem}) return _.assign({}, state, {query: newQuery}) + case 'SELECT_VJ_FILTER': + newQuery = _.assign({}, state.query, {vehicleJourney : action.selectedItem}) + return _.assign({}, state, {query: newQuery}) case 'TOGGLE_ARRIVALS': return _.assign({}, state, {toggleArrivals: !state.toggleArrivals}) case 'QUERY_FILTER_VEHICLEJOURNEYS': @@ -52,6 +55,7 @@ const filters = (state = {}, action) => { case 'CREATE_QUERY_STRING': let params = { 'q[journey_pattern_id_eq]': state.query.journeyPattern.id || undefined, + 'q[objectid_cont]': state.query.vehicleJourney.objectid || undefined, 'q[time_tables_id_eq]': state.query.timetable.id || undefined, 'q[vehicle_journey_at_stops_departure_time_gteq]': (state.query.interval.start.hour + ':' + state.query.interval.start.minute), 'q[vehicle_journey_at_stops_departure_time_lteq]': (state.query.interval.end.hour + ':' + state.query.interval.end.minute), |
