aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/javascripts
diff options
context:
space:
mode:
authorXinhui2017-05-23 10:03:52 +0200
committerXinhui2017-05-23 10:03:52 +0200
commit4f5cc7d35777f3b4bfa1c63c1223c679f713424e (patch)
tree8c3fa28f8f1f4b238248037dce4a6c5974a82e02 /app/assets/javascripts
parentaf2c4b003ca0bf856a1f1d532865963b40f159ee (diff)
parent5e3c2d8daba5617a72d0bfd06e0b6b3f03628f56 (diff)
downloadchouette-core-4f5cc7d35777f3b4bfa1c63c1223c679f713424e.tar.bz2
Merge branch 'master' into staging
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/show.js99
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/actions/index.js22
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/ExceptionsInDay.js18
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/Metas.js2
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js2
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/TimeTableDay.js2
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/Timetable.js4
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/Metas.js7
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js4
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js16
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js44
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/Tools.js4
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js11
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js1
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/TimetablesEditVehicleJourney.js (renamed from app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js)10
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js1
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js15
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js1
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js68
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/fr.js9
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js6
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/TimetablesEditVehicleJourney.js (renamed from app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/CalendarsEditVehicleJourney.js)10
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/index.js21
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js17
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js11
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js19
-rw-r--r--app/assets/javascripts/select2.coffee47
-rw-r--r--app/assets/javascripts/time_table_combinations.coffee6
29 files changed, 376 insertions, 103 deletions
diff --git a/app/assets/javascripts/es6_browserified/itineraries/show.js b/app/assets/javascripts/es6_browserified/itineraries/show.js
new file mode 100644
index 000000000..79a11701f
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/itineraries/show.js
@@ -0,0 +1,99 @@
+route = JSON.parse(decodeURIComponent(route))
+const geoColPts = []
+const geoColLns= []
+const geoColEdges = [
+ new ol.Feature({
+ geometry: new ol.geom.Point(ol.proj.fromLonLat([parseFloat(route[0].longitude), parseFloat(route[0].latitude)]))
+ }),
+ new ol.Feature({
+ geometry: new ol.geom.Point(ol.proj.fromLonLat([parseFloat(route[route.length - 1].longitude), parseFloat(route[route.length - 1].latitude)]))
+ })
+]
+route.forEach(function(stop, i){
+ if (i < route.length - 1){
+ geoColLns.push(new ol.Feature({
+ geometry: new ol.geom.LineString([
+ ol.proj.fromLonLat([parseFloat(route[i].longitude), parseFloat(route[i].latitude)]),
+ ol.proj.fromLonLat([parseFloat(route[i+1].longitude), parseFloat(route[i+1].latitude)])
+ ])
+ }))
+ }
+ geoColPts.push(new ol.Feature({
+ geometry: new ol.geom.Point(ol.proj.fromLonLat([parseFloat(stop.longitude), parseFloat(stop.latitude)]))
+ })
+ )
+})
+var edgeStyles = new ol.style.Style({
+ image: new ol.style.Circle(({
+ radius: 5,
+ stroke: new ol.style.Stroke({
+ color: '#007fbb',
+ width: 2
+ }),
+ fill: new ol.style.Fill({
+ color: '#007fbb',
+ width: 2
+ })
+ }))
+})
+var defaultStyles = new ol.style.Style({
+ image: new ol.style.Circle(({
+ radius: 4,
+ stroke: new ol.style.Stroke({
+ color: '#007fbb',
+ width: 2
+ }),
+ fill: new ol.style.Fill({
+ color: '#ffffff',
+ width: 2
+ })
+ }))
+})
+var lineStyle = new ol.style.Style({
+ stroke: new ol.style.Stroke({
+ color: '#007fbb',
+ width: 3
+ })
+})
+
+var vectorPtsLayer = new ol.layer.Vector({
+ source: new ol.source.Vector({
+ features: geoColPts
+ }),
+ style: defaultStyles,
+ zIndex: 2
+})
+var vectorEdgesLayer = new ol.layer.Vector({
+ source: new ol.source.Vector({
+ features: geoColEdges
+ }),
+ style: edgeStyles,
+ zIndex: 3
+})
+var vectorLnsLayer = new ol.layer.Vector({
+ source: new ol.source.Vector({
+ features: geoColLns
+ }),
+ style: [lineStyle],
+ zIndex: 1
+})
+
+var map = new ol.Map({
+ target: 'route_map',
+ layers: [
+ new ol.layer.Tile({
+ source: new ol.source.OSM()
+ }),
+ vectorPtsLayer,
+ vectorEdgesLayer,
+ vectorLnsLayer
+ ],
+ controls: [ new ol.control.ScaleLine(), new ol.control.Zoom(), new ol.control.ZoomSlider() ],
+ interactions: ol.interaction.defaults({
+ zoom: true
+ }),
+ view: new ol.View({
+ center: ol.proj.fromLonLat([parseFloat(route[0].longitude), parseFloat(route[0].latitude)]),
+ zoom: 13
+ })
+});
diff --git a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
index 3f15b7f01..41d247b21 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
@@ -50,9 +50,13 @@ const actions = {
dispatch,
page: val
}),
- updateDayTypes: (index) => ({
+ updateDayTypes: (dayTypes) => ({
type: 'UPDATE_DAY_TYPES',
- index
+ dayTypes
+ }),
+ updateCurrentMonthFromDaytypes: (dayTypes) => ({
+ type: 'UPDATE_CURRENT_MONTH_FROM_DAYTYPES',
+ dayTypes
}),
updateComment: (comment) => ({
type: 'UPDATE_COMMENT',
@@ -162,11 +166,8 @@ const actions = {
if(testDate === false){
if(currentDate >= begin && currentDate <= end) {
- if(daytypes[d.wday] === false) {
- testDate = false
- } else {
- testDate = true
- }
+ testDate = true
+ p.include_date = false
}
}
})
@@ -174,8 +175,11 @@ const actions = {
}
let improvedCM = state.current_month.map((d, i) => {
+ let bool = isInPeriod(state.current_month[i])
return _.assign({}, state.current_month[i], {
- in_periods: isInPeriod(state.current_month[i])
+ in_periods: bool,
+ include_date: bool ? false : state.current_month[i].include_date,
+ excluded_date: !bool ? false : state.current_month[i].excluded_date
})
})
return improvedCM
@@ -197,7 +201,7 @@ const actions = {
start = new Date(start)
end = new Date(end)
_.each(periods, (period, i) => {
- if(index != i){
+ if(index != i && !period.deleted){
if((new Date(period.period_start) <= start && new Date(period.period_end) >= start) || (new Date(period.period_start) <= end && new Date(period.period_end) >= end))
error = 'Les périodes ne peuvent pas se chevaucher'
}
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/ExceptionsInDay.js b/app/assets/javascripts/es6_browserified/time_tables/components/ExceptionsInDay.js
index cc7980b22..10b558373 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/ExceptionsInDay.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/ExceptionsInDay.js
@@ -10,9 +10,8 @@ class ExceptionsInDay extends Component {
render() {
{/* display add or remove link, only if true in daytypes */}
- if(this.props.outFromDaytypes == true) {
{/* display add or remove link, according to context (presence in period, or not) */}
- if(this.props.value.current_month[this.props.index].in_periods == true) {
+ if(this.props.value.current_month[this.props.index].in_periods == true && this.props.blueDaytype == true) {
return (
<div className='td'>
<button
@@ -28,7 +27,7 @@ class ExceptionsInDay extends Component {
</button>
</div>
)
- } else {
+ } else if(this.props.value.current_month[this.props.index].in_periods == false) {
return (
<div className='td'>
<button
@@ -44,19 +43,20 @@ class ExceptionsInDay extends Component {
</button>
</div>
)
+ } else if(this.props.value.current_month[this.props.index].in_periods == true && this.props.blueDaytype == false){
+ return (
+ <div className='td'></div>
+ )
+ } else{
+ return false
}
- } else {
- return (
- <div className='td'></div>
- )
- }
}
}
ExceptionsInDay.propTypes = {
value: PropTypes.object.isRequired,
metas: PropTypes.object.isRequired,
- outFromDaytypes: PropTypes.bool.isRequired,
+ blueDaytype: PropTypes.bool.isRequired,
onExcludeDateFromPeriod: PropTypes.func.isRequired,
onIncludeDateInPeriod: PropTypes.func.isRequired,
index: PropTypes.number.isRequired
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/Metas.js b/app/assets/javascripts/es6_browserified/time_tables/components/Metas.js
index 792d75520..502320c27 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/Metas.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/Metas.js
@@ -107,7 +107,7 @@ const Metas = ({metas, onUpdateDayTypes, onUpdateComment, onUpdateColor, onSelec
<div className="checkbox">
<label>
<input
- onChange={(e) => {onUpdateDayTypes(i)}}
+ onChange={(e) => {onUpdateDayTypes(i, metas.day_types)}}
id={i}
type="checkbox"
checked={day ? 'checked' : ''}
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js b/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js
index 5beb80573..1a6c67b6b 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js
@@ -118,7 +118,7 @@ const PeriodForm = ({modal, timetable, metas, onOpenAddPeriodForm, onClosePeriod
<div className="text-right">
<button
type='button'
- className='btn btn-outline-primary add_fields'
+ className='btn btn-outline-primary'
onClick={onOpenAddPeriodForm}
>
Ajouter une période
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/TimeTableDay.js b/app/assets/javascripts/es6_browserified/time_tables/components/TimeTableDay.js
index 29c894565..71621c874 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/TimeTableDay.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/TimeTableDay.js
@@ -17,7 +17,7 @@ class TimeTableDay extends Component {
{((this.props.value.day).charAt(0) == 'm') ? (this.props.value.day).substr(0, 2) : (this.props.value.day).charAt(0)}
</span>
<span
- className={'daynumber' + (((this.props.value.in_periods && this.props.dayTypeActive && !this.props.value.excluded_date) || (this.props.value.include_date && this.props.dayTypeActive)) ? ' included' : '')}
+ className={'daynumber' + (((this.props.value.in_periods && this.props.dayTypeActive && !this.props.value.excluded_date) || (this.props.value.include_date)) ? ' included' : '')}
>
{this.props.value.mday}
</span>
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/Timetable.js b/app/assets/javascripts/es6_browserified/time_tables/components/Timetable.js
index 1830bfcde..d562655b9 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/Timetable.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/Timetable.js
@@ -60,7 +60,7 @@ class Timetable extends Component{
{this.props.timetable.current_month.map((d, i) =>
<div
key={i}
- className={'td-group' + (this.props.metas.day_types[d.wday] ? '' : ' out_from_daytypes') + (d.wday == 0 ? ' last_wday' : '')}
+ className={'td-group' + (this.props.metas.day_types[d.wday] || !d.in_periods ? '' : ' out_from_daytypes') + (d.wday == 0 ? ' last_wday' : '')}
>
{/* day_types */}
<div className="td"></div>
@@ -80,7 +80,7 @@ class Timetable extends Component{
index={i}
value={this.props.timetable}
metas={this.props.metas}
- outFromDaytypes={this.props.metas.day_types[d.wday]}
+ blueDaytype={this.props.metas.day_types[d.wday]}
onExcludeDateFromPeriod={this.props.onExcludeDateFromPeriod}
onIncludeDateInPeriod={this.props.onIncludeDateInPeriod}
/>
diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/Metas.js b/app/assets/javascripts/es6_browserified/time_tables/containers/Metas.js
index a8639d89f..c4ab2d5b3 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/containers/Metas.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/containers/Metas.js
@@ -10,8 +10,11 @@ const mapStateToProps = (state) => {
const mapDispatchToProps = (dispatch) => {
return {
- onUpdateDayTypes: (index) => {
- dispatch(actions.updateDayTypes(index))
+ onUpdateDayTypes: (index, dayTypes) => {
+ let newDayTypes = dayTypes.slice(0)
+ newDayTypes[index] = !newDayTypes[index]
+ dispatch(actions.updateDayTypes(newDayTypes))
+ dispatch(actions.updateCurrentMonthFromDaytypes(newDayTypes))
},
onUpdateComment: (comment) => {
dispatch(actions.updateComment(comment))
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js
index dd6b484f3..97de90225 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js
@@ -18,9 +18,7 @@ const metas = (state = {}, action) => {
case 'VALIDATE_PERIOD_FORM':
return _.assign({}, state, {calendar: {name: 'Aucun'}})
case 'UPDATE_DAY_TYPES':
- let dayTypes = state.day_types.slice(0)
- dayTypes[action.index] = !dayTypes[action.index]
- return _.assign({}, state, {day_types: dayTypes, calendar : {name: 'Aucun'}})
+ return _.assign({}, state, {day_types: action.dayTypes, calendar : {name: 'Aucun'}})
case 'UPDATE_COMMENT':
return _.assign({}, state, {comment: action.comment})
case 'UPDATE_COLOR':
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
index f84223b23..65cd9231a 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
@@ -55,6 +55,8 @@ const timetable = (state = {}, action) => {
})
newState = _.assign({}, state, {current_month: newCMe})
return _.assign({}, newState, {current_month: actions.updateSynthesis(newState, action.dayTypes)})
+ case 'UPDATE_CURRENT_MONTH_FROM_DAYTYPES':
+ return _.assign({}, state, {current_month: actions.updateSynthesis(state, action.dayTypes)})
case 'VALIDATE_PERIOD_FORM':
let period_start = actions.formatDate(action.modalProps.begin)
let period_end = actions.formatDate(action.modalProps.end)
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 0e6f5ed12..0af1bb53d 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
@@ -88,9 +88,10 @@ const actions = {
type : 'DELETE_CALENDAR_MODAL',
timetable
}),
- editVehicleJourneyCalendars : (vehicleJourneys) => ({
- type: 'EDIT_VEHICLEJOURNEYS_CALENDARS',
- vehicleJourneys
+ editVehicleJourneyTimetables : (vehicleJourneys, timetables) => ({
+ type: 'EDIT_VEHICLEJOURNEYS_TIMETABLES',
+ vehicleJourneys,
+ timetables
}),
openShiftModal : () => ({
type : 'SHIFT_VEHICLEJOURNEY_MODAL'
@@ -189,6 +190,9 @@ const actions = {
toggleWithoutSchedule: () => ({
type: 'TOGGLE_WITHOUT_SCHEDULE'
}),
+ toggleWithoutTimeTable: () => ({
+ type: 'TOGGLE_WITHOUT_TIMETABLE'
+ }),
updateStartTimeFilter: (val, unit) => ({
type: 'UPDATE_START_TIME_FILTER',
val,
@@ -216,6 +220,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 6f07dd880..e2d03e195 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, onToggleWithoutTimeTable, 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}
@@ -87,9 +97,9 @@ const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTi
</div>
{/* Switch avec/sans horaires */}
- <div className='form-group has_switch w40'>
- <label className='control-label col-sm-8'>Afficher les courses sans horaires</label>
- <div className='form-group col-sm-4' style={{padding: 0}}>
+ <div className='form-group has_switch'>
+ <label className='control-label pull-left'>Afficher les courses sans horaires</label>
+ <div className='form-group pull-left' style={{padding: 0}}>
<div className='checkbox'>
<label>
<input
@@ -104,6 +114,25 @@ const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTi
</div>
</div>
+ <div className="ffg-row">
+ {/* Switch avec/sans calendrier */}
+ <div className='form-group has_switch'>
+ <label className='control-label pull-left'>Afficher les courses sans calendrier</label>
+ <div className='form-group pull-left' style={{padding: 0}}>
+ <div className='checkbox'>
+ <label>
+ <input
+ type='checkbox'
+ onChange={onToggleWithoutTimeTable}
+ checked={filters.query.withoutTimeTable}
+ ></input>
+ <span className='switch-label' data-checkedvalue='Oui' data-uncheckedvalue='Non'></span>
+ </label>
+ </div>
+ </div>
+ </div>
+ </div>
+
{/* Actions */}
<div className='actions'>
<span
@@ -131,7 +160,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.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Tools.js
index e486dd155..b417828db 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Tools.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Tools.js
@@ -6,7 +6,7 @@ var ShiftVehicleJourney = require('../containers/tools/ShiftVehicleJourney')
var DuplicateVehicleJourney = require('../containers/tools/DuplicateVehicleJourney')
var EditVehicleJourney = require('../containers/tools/EditVehicleJourney')
var NotesEditVehicleJourney = require('../containers/tools/NotesEditVehicleJourney')
-var CalendarsEditVehicleJourney = require('../containers/tools/CalendarsEditVehicleJourney')
+var TimetablesEditVehicleJourney = require('../containers/tools/TimetablesEditVehicleJourney')
var actions = require('../actions')
const Tools = ({vehicleJourneys, onCancelSelection}) => {
@@ -17,7 +17,7 @@ const Tools = ({vehicleJourneys, onCancelSelection}) => {
<DuplicateVehicleJourney />
<ShiftVehicleJourney />
<EditVehicleJourney />
- <CalendarsEditVehicleJourney />
+ <TimetablesEditVehicleJourney />
<NotesEditVehicleJourney />
<DeleteVehicleJourneys />
</ul>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js
index 6f338f747..de370ac1b 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js
@@ -15,6 +15,7 @@ class VehicleJourney extends Component {
bool = true
this.previousCity = sp.stop_area_cityname
}
+
return bool
}
@@ -51,9 +52,11 @@ class VehicleJourney extends Component {
<div className='th'>
<div className='strong mb-xs'>{this.props.value.objectid ? actions.humanOID(this.props.value.objectid) : '-'}</div>
<div>{actions.humanOID(this.props.value.journey_pattern.objectid)}</div>
- {this.props.value.time_tables.map((tt, i)=>
- <div key={i}>{this.timeTableURL(tt)}</div>
- )}
+ <div>
+ {this.props.value.time_tables.map((tt, i)=>
+ <span key={i} className='vj_tt'>{this.timeTableURL(tt)}</span>
+ )}
+ </div>
{(this.props.filters.policy['vehicle_journeys.edit'] == true) &&
<div className={(this.props.value.deletable ? 'disabled ' : '') + 'checkbox'}>
@@ -73,7 +76,7 @@ class VehicleJourney extends Component {
</div>
{this.props.value.vehicle_journey_at_stops.map((vj, i) =>
<div key={i} className='td text-center'>
- <div className={'cellwrap' + (vj.dummy ? ' headlined' : '') + (this.cityNameChecker(vj) ? ' headlined' : '')}>
+ <div className={'cellwrap' + (this.cityNameChecker(vj) ? ' headlined' : '')}>
{this.props.filters.toggleArrivals &&
<div data-headline='Arrivée à'>
<span className={((this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false) ? 'disabled ' : '') + 'input-group time'}>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js
index 1e121b473..314d481d4 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js
@@ -71,6 +71,7 @@ class CreateModal extends Component {
<div className='form-group'>
<label className='control-label is-required'>Nom public de la mission</label>
<MissionSelect2
+ selection={this.props.modal.modalProps}
onSelect2JourneyPattern={this.props.onSelect2JourneyPattern}
isFilter={false}
/>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/TimetablesEditVehicleJourney.js
index e32c873e6..d6c1179ba 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/TimetablesEditVehicleJourney.js
@@ -4,13 +4,13 @@ var PropTypes = require('react').PropTypes
var actions = require('../../actions')
var TimetableSelect2 = require('./select2s/TimetableSelect2')
-class CalendarsEditVehicleJourney extends Component {
+class TimetablesEditVehicleJourney extends Component {
constructor(props) {
super(props)
}
handleSubmit() {
- this.props.onCalendarsEditVehicleJourney(this.props.modal.modalProps.vehicleJourneys)
+ this.props.onTimetablesEditVehicleJourney(this.props.modal.modalProps.vehicleJourneys, this.props.modal.modalProps.timetables)
this.props.onModalClose()
$('#CalendarsEditVehicleJourneyModal').modal('hide')
}
@@ -134,14 +134,14 @@ class CalendarsEditVehicleJourney extends Component {
}
}
-CalendarsEditVehicleJourney.propTypes = {
+TimetablesEditVehicleJourney.propTypes = {
onOpenCalendarsEditModal: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired,
- onCalendarsEditVehicleJourney: PropTypes.func.isRequired,
+ onTimetablesEditVehicleJourney: PropTypes.func.isRequired,
onDeleteCalendarModal: PropTypes.func.isRequired,
onSelect2Timetable: PropTypes.func.isRequired,
onAddSelectedTimetable: PropTypes.func.isRequired,
filters: PropTypes.object.isRequired
}
-module.exports = CalendarsEditVehicleJourney
+module.exports = TimetablesEditVehicleJourney
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js
index 1f5e5e98f..a6b8dcfa1 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js
@@ -27,6 +27,7 @@ class BSelect4 extends React.Component{
theme: 'bootstrap',
width: '100%',
placeholder: 'Filtrer par transporteur...',
+ language: require('./fr'),
ajax: {
url: origin + path + '/companies.json' + '?line_id=' + line,
dataType: 'json',
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 75cbd1f3c..36aaa5cfd 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
@@ -13,18 +13,20 @@ class BSelect4 extends React.Component{
super(props)
}
+
render() {
return (
<Select2
- data={(this.props.isFilter) ? [this.props.filters.query.journeyPattern.published_name] : undefined}
- value={(this.props.isFilter) ? this.props.filters.query.journeyPattern.published_name : undefined}
+ data={(this.props.isFilter) ? [this.props.filters.query.journeyPattern.published_name] : ((this.props.selection.selectedJPModal) ? [this.props.selection.selectedJPModal.published_name] : undefined)}
+ value={(this.props.isFilter) ? this.props.filters.query.journeyPattern.published_name : ((this.props.selection.selectedJPModal) ? this.props.selection.selectedJPModal.published_name : undefined) }
onSelect={(e) => this.props.onSelect2JourneyPattern(e)}
multiple={false}
ref='journey_pattern_id'
options={{
allowClear: false,
theme: 'bootstrap',
- placeholder: 'Filtrer par mission...',
+ placeholder: 'Filtrer par code, nom ou OID de mission...',
+ language: require('./fr'),
width: '100%',
ajax: {
url: origin + path + '/journey_patterns_collection.json',
@@ -32,7 +34,7 @@ class BSelect4 extends React.Component{
delay: '500',
data: function(params) {
return {
- q: {published_name_cont: params.term},
+ q: {published_name_or_objectid_or_registration_number_cont: params.term},
};
},
processResults: function(data, params) {
@@ -41,14 +43,15 @@ class BSelect4 extends React.Component{
item => _.assign(
{},
item,
- {text: item.published_name}
+ { text: '<small><em>Nom: </em></small>' + item.published_name + '<br/><small><em>Code: </em></small>' + item.registration_number + '<br/><small><em>ID: </em></small>' + _.last(_.split(item.object_id, ':')) }
)
)
};
},
cache: true
},
- minimumInputLength: 3,
+ minimumInputLength: 2,
+ escapeMarkup: function (markup) { return markup; },
templateResult: formatRepo
}}
/>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
index c28d8e06f..b236e7d94 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
@@ -26,6 +26,7 @@ class BSelect4 extends React.Component{
theme: 'bootstrap',
width: '100%',
placeholder: 'Filtrer par calendrier...',
+ language: require('./fr'),
ajax: {
url: origin + path + this.props.chunkURL,
dataType: 'json',
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..cc2ee4b9e
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js
@@ -0,0 +1,68 @@
+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%',
+ language: require('./fr'),
+ 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: 1,
+ templateResult: formatRepo
+ }}
+ />
+ )
+ }
+}
+
+const formatRepo = (props) => {
+ if(props.text) return props.text
+}
+
+module.exports = BSelect4b
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/fr.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/fr.js
new file mode 100644
index 000000000..20154d412
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/fr.js
@@ -0,0 +1,9 @@
+module.exports = {
+ errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},
+ inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},
+ inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},
+ loadingMore:function(){return"Chargement de résultats supplémentaires…"},
+ maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},
+ noResults:function(){return"Aucun résultat trouvé"},
+ searching:function(){return"Recherche en cours…"}
+}
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..831b47ca1 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js
@@ -22,6 +22,9 @@ const mapDispatchToProps = (dispatch) => {
onToggleWithoutSchedule: () =>{
dispatch(actions.toggleWithoutSchedule())
},
+ onToggleWithoutTimeTable: () =>{
+ dispatch(actions.toggleWithoutTimeTable())
+ },
onResetFilters: (e, pagination) =>{
dispatch(actions.checkConfirmModal(e, actions.resetFilters(dispatch), pagination.stateChanged, dispatch))
},
@@ -33,6 +36,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/containers/tools/CalendarsEditVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/TimetablesEditVehicleJourney.js
index 130acb017..6d0096019 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/CalendarsEditVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/TimetablesEditVehicleJourney.js
@@ -1,5 +1,5 @@
var connect = require('react-redux').connect
-var CalendarsEditComponent = require('../../components/tools/CalendarsEditVehicleJourney')
+var TimetablesEditComponent = require('../../components/tools/TimetablesEditVehicleJourney')
var actions = require('../../actions')
const mapStateToProps = (state) => {
@@ -22,8 +22,8 @@ const mapDispatchToProps = (dispatch) => {
onDeleteCalendarModal: (timetable) => {
dispatch(actions.deleteCalendarModal(timetable))
},
- onCalendarsEditVehicleJourney: (calendars) =>{
- dispatch(actions.editVehicleJourneyCalendars(calendars))
+ onTimetablesEditVehicleJourney: (vehicleJourneys, timetables) =>{
+ dispatch(actions.editVehicleJourneyTimetables(vehicleJourneys, timetables))
},
onSelect2Timetable: (e) =>{
dispatch(actions.selectTTCalendarsModal(e.params.data))
@@ -34,6 +34,6 @@ const mapDispatchToProps = (dispatch) => {
}
}
-const CalendarsEditVehicleJourney = connect(mapStateToProps, mapDispatchToProps)(CalendarsEditComponent)
+const TimetablesEditVehicleJourney = connect(mapStateToProps, mapDispatchToProps)(TimetablesEditComponent)
-module.exports = CalendarsEditVehicleJourney
+module.exports = TimetablesEditVehicleJourney
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
index 4c9423c1f..489446ab9 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
@@ -8,10 +8,10 @@ var actions = require("./actions")
var enableBatching = require('./batch').enableBatching
// 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 applyMiddleware = require('redux').applyMiddleware
+var createLogger = require('redux-logger')
+var thunkMiddleware = require('redux-thunk').default
+var promise = require('redux-promise')
var selectedJP = []
@@ -38,13 +38,17 @@ var initialState = {
journeyPattern: {
published_name: ''
},
+ vehicleJourney: {
+ objectid: ''
+ },
company: {
name: ''
},
timetable: {
comment: ''
},
- withoutSchedule: true
+ withoutSchedule: true,
+ withoutTimeTable: false
}
},
@@ -76,16 +80,17 @@ 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)
}
-// const loggerMiddleware = createLogger()
+const loggerMiddleware = createLogger()
let store = createStore(
enableBatching(vehicleJourneysApp),
- initialState
- // applyMiddleware(thunkMiddleware, promise, loggerMiddleware)
+ initialState,
+ applyMiddleware(thunkMiddleware, promise, loggerMiddleware)
)
render(
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 80b62c6b4..09588f824 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
@@ -15,11 +15,14 @@ const filters = (state = {}, action) => {
minute: '59'
}
}
- newQuery = _.assign({}, state.query, {interval: interval, journeyPattern: {}, timetable: {}, withoutSchedule: true })
+ newQuery = _.assign({}, state.query, {interval: interval, journeyPattern: {}, vehicleJourney: {}, timetable: {}, withoutSchedule: true, withoutTimeTable: false })
return _.assign({}, state, {query: newQuery, queryString: ''})
case 'TOGGLE_WITHOUT_SCHEDULE':
newQuery = _.assign({}, state.query, {withoutSchedule: !state.query.withoutSchedule})
return _.assign({}, state, {query: newQuery})
+ case 'TOGGLE_WITHOUT_TIMETABLE':
+ newQuery = _.assign({}, state.query, {withoutTimeTable: !state.query.withoutTimeTable})
+ return _.assign({}, state, {query: newQuery})
case 'UPDATE_END_TIME_FILTER':
newInterval = JSON.parse(JSON.stringify(state.query.interval))
newInterval.end[action.unit] = actions.pad(action.val, action.unit)
@@ -44,6 +47,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,11 +58,12 @@ 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,
- // Fixme 3358
- // '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),
- // 'q[vehicle_journey_without_departure_time]' : state.query.withoutSchedule
+ '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),
+ 'q[vehicle_journey_without_departure_time]': state.query.withoutSchedule,
+ 'q[vehicle_journey_without_time_table]': state.query.withoutTimeTable
}
let queryString = actions.encodeParams(params)
return _.assign({}, state, {queryString: queryString})
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
index 3b13ab9de..e504c2531 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
@@ -63,17 +63,6 @@ const modal = (state = {}, action) => {
case 'ADD_SELECTED_TIMETABLE':
if(state.modalProps.selectedTimetable){
newModalProps = JSON.parse(JSON.stringify(state.modalProps))
- newModalProps.vehicleJourneys.map((vj) => {
- let isPresent = false
- vj.time_tables.forEach((tt) =>{
- if (_.isEqual(newModalProps.selectedTimetable.objectid, tt.objectid)){
- isPresent = true
- }
- })
- if (!isPresent){
- vj.time_tables.push(newModalProps.selectedTimetable)
- }
- })
if (!_.find(newModalProps.timetables, newModalProps.selectedTimetable)){
newModalProps.timetables.push(newModalProps.selectedTimetable)
}
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 2db76deae..d153739ce 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
@@ -1,7 +1,7 @@
var _ = require('lodash')
var actions = require("../actions")
-const vehicleJourney= (state = {}, action) => {
+const vehicleJourney= (state = {}, action, keep) => {
switch (action.type) {
case 'SELECT_VEHICLEJOURNEY':
return _.assign({}, state, {selected: !state.selected})
@@ -61,10 +61,14 @@ const vehicleJourney= (state = {}, action) => {
actions.checkSchedules(shiftedSchedule)
shiftedVjas = _.assign({}, state.vehicle_journey_at_stops[i], shiftedSchedule)
vjas = _.assign({}, state.vehicle_journey_at_stops[i], shiftedVjas)
- delete vjas['id']
+ if(!keep){
+ delete vjas['id']
+ }
return vjas
}else {
- delete vjas['id']
+ if(!keep){
+ delete vjas['id']
+ }
return vjas
}
})
@@ -147,13 +151,14 @@ const vehicleJourneys = (state = [], action) => {
return vj
}
})
- case 'EDIT_VEHICLEJOURNEYS_CALENDARS':
+ case 'EDIT_VEHICLEJOURNEYS_TIMETABLES':
+ let newTimetables = JSON.parse(JSON.stringify(action.timetables))
return state.map((vj,i) =>{
if(vj.selected){
let updatedVJ = _.assign({}, vj)
action.vehicleJourneys.map((vjm, j) =>{
if(vj.objectid == vjm.objectid){
- updatedVJ.time_tables = vjm.time_tables
+ updatedVJ.time_tables = newTimetables
}
})
return updatedVJ
@@ -164,7 +169,7 @@ const vehicleJourneys = (state = [], action) => {
case 'SHIFT_VEHICLEJOURNEY':
return state.map((vj, i) => {
if (vj.selected){
- return vehicleJourney(vj, action)
+ return vehicleJourney(vj, action, true)
}else{
return vj
}
@@ -179,7 +184,7 @@ const vehicleJourneys = (state = [], action) => {
selectedIndex = i
for (i = 0; i< action.data.duplicate_number.value; i++){
action.data.additional_time.value = val * (i + 1)
- dupeVj = vehicleJourney(vj, action)
+ dupeVj = vehicleJourney(vj, action, false)
dupeVj.published_journey_name = dupeVj.published_journey_name + '-' + i
dupeVj.selected = false
delete dupeVj['objectid']
diff --git a/app/assets/javascripts/select2.coffee b/app/assets/javascripts/select2.coffee
index 1870f7f9a..af3dc6d75 100644
--- a/app/assets/javascripts/select2.coffee
+++ b/app/assets/javascripts/select2.coffee
@@ -1,19 +1,42 @@
+bind_select2 = (el, cfg = {}) ->
+ target = $(el)
+ default_cfg =
+ theme: 'bootstrap'
+ language: 'fr'
+ placeholder: target.data('select2ed-placeholder')
+ allowClear: false
+
+ target.select2 $.extend({}, default_cfg, cfg)
+
+bind_select2_ajax = (el, cfg = {}) ->
+ target = $(el)
+ cfg =
+ ajax:
+ data: (params) ->
+ q:
+ "#{target.data('term')}": params.term
+ url: target.data('url'),
+ dataType: 'json',
+ delay: 125,
+ processResults: (data, params) -> results: data
+ minimumInputLength: 3
+ templateResult: (item) ->
+ item.text
+ templateSelection: (item) ->
+ item.text
+
+ bind_select2(el, cfg)
+
@select_2 = ->
$("[data-select2ed='true']").each ->
- target = $(this)
- target.select2
- theme: 'bootstrap'
- language: 'fr'
- placeholder: target.data('select2ed-placeholder')
- allowClear: true
+ bind_select2(this)
+
+ $("[data-select2-ajax='true']").each ->
+ bind_select2_ajax(this)
$('select.form-control.tags').each ->
- target = $(this)
- target.select2
- theme: 'bootstrap'
- language: 'fr'
- allowClear: true
- tags: true
+ bind_select2(this, {tags: true})
+
$(document).on 'turbolinks:load', select_2
diff --git a/app/assets/javascripts/time_table_combinations.coffee b/app/assets/javascripts/time_table_combinations.coffee
new file mode 100644
index 000000000..8923af958
--- /dev/null
+++ b/app/assets/javascripts/time_table_combinations.coffee
@@ -0,0 +1,6 @@
+@combinedTypeToggle = ->
+ $('#time_table_combination_combined_type').on 'click', ->
+ $(this).closest('.has_switch').siblings('.form-group').each ->
+ $(this).toggleClass('hidden')
+
+$(document).on 'turbolinks:load', combinedTypeToggle