Source

store/location_module/circuit-details.js

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
    },
  },
}