/**
* @namespace Stores
* @category Stores
* @module simpliciti-map-store
* */
import Vue from 'vue'
/**
* Used by Location module.
* Applies the speed filter from MapOptions into a single position.
* @param {*} position
* @param {*} speedFilter
* @returns
*/
function isSpeedFilterCriteriaMeet(position, speedFilter) {
if (speedFilter.condition === '<') {
return position.vitesse < speedFilter.value
}
if (speedFilter.condition === '<=') {
return position.vitesse <= speedFilter.value
}
if (speedFilter.condition === '==') {
return position.vitesse === speedFilter.value
}
if (speedFilter.condition === '>=') {
return position.vitesse >= speedFilter.value
}
if (speedFilter.condition === '>') {
return position.vitesse > speedFilter.value
}
return false
}
function newState() {
return {
mapReverseGeocodingOnMouseClickEnabled: true,
tripStepsmarkers: [], // Contact Off/On colors: 1 (green) ---- 1 (red)
speedPolylines: [], //Trace vitesse
alertsMarkers: [],
vehiclePositionMarkers: [],
eventsMarkers: [],
circuitExecutionsPolylines: [],
tripHistoryPolylines: [],
singleCircuitExecPolylines: [],
singleTripHistoryPolylines: [],
chronoPolyline: [],
chronoMarkers: [],
circuitVersionsPolylines: [],
//Used by Location - Realtime/History - Details - History tab
highlightPolylineSections: {
singleCircuitExecPolylines: null,
singleTripHistoryPolylines: null,
},
identificationBacsMarkers: [],
}
}
export default {
namespaced: true,
state: newState(),
getters: {
mapReverseGeocodingOnMouseClickEnabled: (state) =>
state.mapReverseGeocodingOnMouseClickEnabled,
identificationBacsMarkers: (state) => state.identificationBacsMarkers,
hasData: (state) => (name) => state[name].length > 0,
tripStepsmarkers: (state) => state.tripStepsmarkers,
/**
* Has Contact ON/OFF data
*/
hasTripStepDataOfType: (state) => (typeName) =>
state.tripStepsmarkers.findIndex((item) => item.type === typeName) >= 0,
speedPolylines: (state) => state.speedPolylines,
vehiclePositionMarkers: (state, getters, rootState, rootGetters) => {
let speedFilter = rootGetters['map_options/speedFilter']
if (speedFilter && !!speedFilter.value) {
return state.vehiclePositionMarkers.filter((p) =>
isSpeedFilterCriteriaMeet(p, speedFilter)
)
} else {
return state.vehiclePositionMarkers
}
},
alertsMarkers: (state) => state.alertsMarkers,
eventsMarkers: (state) => state.eventsMarkers,
chronoMarkers: (state) => state.chronoMarkers,
circuitExecutionsPolylines: (state) => state.circuitExecutionsPolylines,
tripHistoryPolylines: (state) => state.tripHistoryPolylines,
singleCircuitExecPolylines: (state) => state.singleCircuitExecPolylines,
singleTripHistoryPolylines: (state) => state.singleTripHistoryPolylines,
},
mutations: {
SET_DATASET(state, { type, data }) {
state[type] = data || []
//Vue.$log.debug("SET_DATASET", type, (data || []).length);
},
resetState(state) {
let s = newState()
for (var x in s) {
state[x] = s[x]
}
},
/**
* Used by Location - History details
* @param {*} state
* @param {*} options.type singleCircuitExecPolylines/singleTripHistoryPolylines
* @param {*} options.sectionNumber History step number
* @returns
*/
highlightPolylineSection(state, { type, sectionNumber }) {
state.highlightPolylineSections[type] = sectionNumber
state[type].forEach((thp) => {
Vue.set(thp, 'highlighted', false)
})
if (sectionNumber === null) {
return
}
if (isNaN(parseInt(sectionNumber))) {
Vue.$log.warn(
'highlightPolylineSection::Invalid section number',
sectionNumber
)
}
//Support highlighting multiple polylines (#31781)
state[type].forEach((polyline, index) => {
if (parseInt(polyline.stepNumber) == parseInt(sectionNumber)) {
let item = state[type][index]
Vue.set(item, 'highlighted', true)
state[type].splice(index, 1) //Trick for reactivity
state[type].push(item)
}
})
},
clearDatasets(state, datasets) {
datasets.forEach((datasetName) => {
if (state[datasetName]) {
state[datasetName] = []
}
})
},
},
actions: {
clearDatasets({ commit }, datasets) {
commit('clearDatasets', datasets)
},
/**
* @deprecated
* @param {*} param0
*/
initialize({ dispatch }) {
dispatch('zones/syncClientZones', null, {
root: true,
})
},
/**
* Set a dataset directly
* (tripStepmarkers, speedPolylines, etc)
*/
setDataset({ commit }, { type, data }) {
if (data instanceof Array && data.length === 0) {
//Vue.$log.debug('simpliciti_map::setDataset::empty-array-skip', type)
}
commit('SET_DATASET', {
type,
data,
})
},
/**
* Set the chrono markers from chrono data
*
* @param commit
* @param data Array, the chrono data
*/
setChronoMarkers({ commit }, data) {
if (!Array.isArray(data) && !data.length > 0) {
return
}
commit('SET_DATASET', {
type: 'chronoMarkers',
data: data,
})
},
/**
* Set trip step markers from polylines data (search: linestringsToPolylines)
*/
setTripStepMarkers({ commit }, data) {
let normalizedData = []
data.forEach((item) => {
normalizedData.push({
number: item.stepNumber,
lat: item.polyline[0][0],
lng: item.polyline[0][1],
color: '#1aaa42',
type: 'contact_on',
})
normalizedData.push({
number: item.stepNumber,
lat: item.polyline[item.polyline.length - 1][0],
lng: item.polyline[item.polyline.length - 1][1],
color: 'var(--color-coral-red)',
type: 'contact_off',
})
})
commit('SET_DATASET', {
type: 'tripStepsmarkers',
data: normalizedData,
})
},
resetStore({ commit }) {
commit('resetState')
},
/**
* Used by Location - Realtime/History - Details - History tab
* @param {*} param0
* @param {*} sectionNumber
*/
highlightTripHistoryPolylineSection({ commit }, sectionNumber) {
commit('highlightPolylineSection', {
type: 'singleTripHistoryPolylines',
sectionNumber,
})
},
/**
* Used by Location - Realtime/History - Details - History tab
* @param {*} param0
* @param {*} sectionNumber
*/
highlightCircuitExecPolylineSection({ commit }, sectionNumber) {
commit('highlightPolylineSection', {
type: 'singleCircuitExecPolylines',
sectionNumber,
})
},
},
}
Source