flatisfy/flatisfy/web/js_src/store/getters.js

89 lines
2.8 KiB
JavaScript

import { findFlatGPS, costFilter } from '../tools'
export default {
allFlats: (state) => state.flats,
flat: (state, getters) => (id) =>
state.flats.find((flat) => flat.id === id),
isLoading: (state) => state.loading > 0,
inseeCodesFlatsBuckets: (state, getters) => (filter) => {
const buckets = {};
state.flats.forEach((flat) => {
if (!filter || filter(flat)) {
const insee = flat.flatisfy_postal_code.insee_code;
if (!buckets[insee]) {
buckets[insee] = {
name: flat.flatisfy_postal_code.name,
flats: [],
};
}
buckets[insee].flats.push(flat);
}
});
return buckets;
},
flatsMarkers: (state, getters) => (router, filter) => {
const markers = [];
state.flats.forEach((flat) => {
if (filter && filter(flat)) {
const gps = findFlatGPS(flat);
if (gps) {
const previousMarker = markers.find(
(marker) =>
marker.gps[0] === gps[0] && marker.gps[1] === gps[1]
);
if (previousMarker) {
// randomize position a bit
// gps[0] += (Math.random() - 0.5) / 500
// gps[1] += (Math.random() - 0.5) / 500
}
const href = router.resolve({
name: "details",
params: { id: flat.id },
}).href;
const cost = flat.cost
? costFilter(flat.cost, flat.currency)
: "";
markers.push({
title: "",
content:
'<a href="' +
href +
'">' +
flat.title +
"</a>" +
cost,
gps: gps,
flatId: flat.id,
});
}
}
});
return markers;
},
allTimeToPlaces: (state) => {
const places = {};
Object.keys(state.timeToPlaces).forEach((constraint) => {
const constraintTimeToPlaces = state.timeToPlaces[constraint];
Object.keys(constraintTimeToPlaces).forEach((name) => {
places[name] = constraintTimeToPlaces[name];
});
});
return places;
},
timeToPlaces: (state, getters) => (constraintName) => {
return state.timeToPlaces[constraintName];
},
metadata: (state) => state.metadata,
};