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
}