import Vue from 'vue'
import { linestringsToPolylines } from '@/mixins/map'
import {
getCircuitExecutionDetails,
getLastCircuitExecutionDetails,
} from '@/services/circuit-service.js'
import { getNestedValue } from '@/utils/object.js'
export default {
state: {
// @TODO: rename to circuitInfos
circuitDetails: {},
circuitExecutionSteps: {},
hideTripHistoryPolylinesIfCircuitTab: true,
},
getters: {
circuitDetails: (state) => state.circuitDetails,
circuitExecutionSteps: (state) => state.circuitExecutionSteps,
},
mutations: {
/**
* Will set circuitDetails and circuitExecutionSteps (if steps/troncons are available)
* @param {*} state
* @param {*} infos
*/
setCircuitExecutionDetails(state, infos = {}) {
if (infos.troncons) {
state.circuitExecutionSteps = { troncons: infos.troncons }
}
Vue.set(state, 'circuitDetails', Object.freeze(infos))
},
resetCircuitExecutionDetails(state) {
state.circuitDetails = {}
state.circuitExecutionSteps = {}
},
},
actions: {
/**
* Real-time: Load last circuit execution details
* History: Load related circuit execution details
*
* @function updateCircuitExecutionDetails
* @return {Boolean} True if success
*/
async updateCircuitExecutionDetails(
{ dispatch, commit, rootGetters, state },
options = {}
) {
/*
//Skip if data already loaded
if(Object.keys(state.circuitDetails).length>0 || Object.keys(state.circuitExecutionSteps).length>0){
return true
}*/
console.log('updateCircuitExecutionDetails', {
options,
})
commit('resetCircuitExecutionDetails')
const selectedItem = rootGetters['location_module/selectedItem']
const vehicleId = options.vehicleId || selectedItem.vehicleId
let infos = []
// If history mode by circuit, use by_circuit_dates API
// If main search by vehicle/driver and user enters last circuit tab, use by_circuit_dates API
let circuitExecutionId = getNestedValue(
selectedItem,
'circuitExecutions.0.executionId',
selectedItem.circuitExecutionId
)
if (selectedItem.searchType === 'history') {
//If no circuit, skip
if (!selectedItem.circuitId) {
return
}
infos = await getCircuitExecutionDetails({
circuitId: selectedItem.circuitId || '',
date: selectedItem.date,
circuitExecutionId,
})
} else {
//Otherwise, grab details from last execution
infos = await getLastCircuitExecutionDetails({
vehicleId,
})
}
if (infos.troncons) {
let polylines = linestringsToPolylines(
infos.troncons.map((t) => {
t.number = t.id
t.color = t.realise ? t.activite_couleur || '#70bd95' : '#ff4545'
return t
}),
{
type: 'circuit_execution',
}
)
dispatch(
'simpliciti_map/setDataset',
{
type: 'singleCircuitExecPolylines',
data: polylines,
},
{
root: true,
}
)
}
commit('setCircuitExecutionDetails', infos)
return true
},
},
}
Source