var app = new Vue({
el: '#modal-subway-local',
data: {
message: 'Метро',
selectLine: Number('3'),
checkedStations: [],
metroStations: [],
metroLines: [],
},
computed: {
selectMetroStationsForLine() {
return this.metroStations.filter(function (station) {
return station.line_id == this;
}, this.selectLine).sort(compare('order'));
},
selectMetroStations() {
let items = [];
items = this.selectMetroStationsForLine;
return items;
},
selectMetroIds() {
return this.selectMetroStations.map(function (item) {
let metroId = item.id
return metroId;
}, this).flat();
},
getMetroStations() {
let items = this.selectMetroStations.map(function (item) {
return item;
});
let first = items.splice(0, Math.ceil(items.length / 2));
return [first, items];
},
currentMetroLine() {
return this.metroLines.find(line => line.id === this.selectLine);
},
},
methods: {
metroForLine(line) {
return this.metroStations.filter(function (station) {
return station.line_id == this.id;
}, line).map(function (station) {
return station['id'];
});
},
countMetroForLine(line) {
let value = this.metroForLine(line).filter(x => this.checkedStations.includes(x)).length;
return value > 0 ? value : '';
},
showLine(id) {
this.selectLine = id;
},
isActiveLine(line) {
return line.id === this.selectLine;
},
},
created: function() {
axios.get('/service/checked-json?id=63850&place=1')
.then((response) => {
this.checkedStations = response.data;
}),
axios.get('/service/stations-json?id=63850&place=1')
.then((response) => {
this.metroStations = response.data.metroStations;
}),
axios.get('/service/lines-json?id=63850&place=1')
.then((response) => {
this.metroLines = response.data.metroLines.sort(compare('id'));
})
},
})
function compare(field, order) {
var len = arguments.length;
if(len === 0) {
return (a, b) => (a < b && -1) || (a > b && 1) || 0;
}
if(len === 1) {
switch(typeof field) {
case 'number':
return field < 0 ?
((a, b) => (a < b && 1) || (a > b && -1) || 0) :
((a, b) => (a < b && -1) || (a > b && 1) || 0);
case 'string':
return (a, b) => (a[field] < b[field] && -1) || (a[field] > b[field] && 1) || 0;
}
}
if(len === 2 && typeof order === 'number') {
return order < 0 ?
((a, b) => (a[field] < b[field] && 1) || (a[field] > b[field] && -1) || 0) :
((a, b) => (a[field] < b[field] && -1) || (a[field] > b[field] && 1) || 0);
}
var fields, orders;
if(typeof field === 'object') {
fields = Object.getOwnPropertyNames(field);
orders = fields.map(key => field[key]);
len = fields.length;
} else {
fields = new Array(len);
orders = new Array(len);
for(let i = len; i--;) {
fields[i] = arguments[i];
orders[i] = 1;
}
}
return (a, b) => {
for(let i = 0; i < len; i++) {
if(a[fields[i]] < b[fields[i]]) return orders[i];
if(a[fields[i]] > b[fields[i]]) return -orders[i];
}
return 0;
};
}