{"version":3,"file":"useRunningCosts-3a83b777.js","sources":["../../src/composables/useRunningCosts.ts"],"sourcesContent":["import { computed } from 'vue';\r\nimport { FuelDataType } from '../foundation/interfaces/datasources/IDataSourceProps';\r\nimport { storeToRefs } from 'pinia';\r\nimport { useContentStore } from '../foundation/stores/contentStore';\r\nimport { sitecoreVehicleType } from '../foundation/helpers';\r\n\r\ninterface IRunningCostsOptions {\r\n isSearchResult?: boolean;\r\n costToFillLabel?: string;\r\n costPer100KmLabel?: string;\r\n}\r\n\r\n/**\r\n * Composable to obtain vehicle running costs.\r\n * @param carData\r\n * @returns\r\n */\r\nexport default function useRunningCosts(carData: any, { isSearchResult = false, costToFillLabel, costPer100KmLabel }: IRunningCostsOptions) {\r\n const contentStore = useContentStore();\r\n const { fuelPrices } = storeToRefs(contentStore);\r\n\r\n const costToRunText = computed(() =>\r\n costToRunData?.value?.COST_PER_100KM?.value !== 'N/A' ? `${costToRunData.value.COST_PER_100KM.value} per 100km` : 'Data not available'\r\n );\r\n\r\n /**\r\n * Calculate the fuel price based on fuel data from API.\r\n * If electric, go straight to KWH.\r\n *\r\n * If hasOctaneValue, go straight to calculation.\r\n *\r\n * If DIESEL, use diesel default.\r\n *\r\n * Otherwise check for petrol and use default fuel\r\n */\r\n const calculatedFuelPrice = computed(() => {\r\n const DEFAULT_FUEL = 'RULP91';\r\n const ELECTRIC = 'KWH';\r\n const DIESEL_FUEL = 'Diesel';\r\n\r\n const vehicleType = sitecoreVehicleType(carData, isSearchResult);\r\n const fuelOctane: string = (isSearchResult ? carData.fuelOctane : carData.Primary_engine_motor_Fuel_octane)?.toString()?.toLowerCase();\r\n const fuelType: string = (\r\n isSearchResult ? carData.fuelType : carData.Primary_engine_fuel_type || carData.Primary_engine_motor_Fuel_type || carData.Fuel_type\r\n )?.toLowerCase();\r\n\r\n // If we know the octane value then use that and return the result.\r\n if (Number(fuelOctane)) {\r\n let result = fuelPrices.value.fuelPriceData.find((fuel) => extractNumericOctaneValueFromFuelLabel(fuel) === fuelOctane)?.fuelPrice;\r\n return Number(result);\r\n }\r\n\r\n // EVs\r\n if (fuelType === 'electric' || fuelType === 'electricity' || vehicleType === 'BEV') {\r\n return fuelPrices.value.fuelPriceData.find((fuel) => fuel.fuelType === ELECTRIC)?.fuelPrice;\r\n }\r\n\r\n // Diesel\r\n if (fuelType === 'diesel') {\r\n return fuelPrices.value.fuelPriceData.find((fuel) => fuel.fuelType === DIESEL_FUEL)?.fuelPrice;\r\n }\r\n\r\n // Fallback to petrol default\r\n if (fuelType === 'petrol') {\r\n return fuelPrices.value.fuelPriceData.find((fuel) => fuel.fuelType === DEFAULT_FUEL)?.fuelPrice;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n const costToRunData = computed(() => {\r\n const fuelConsumptionPer100km = isSearchResult ? carData?.fuelEconomy : carData.Fuel_consumption_Combined_ADR8102_lt_100km;\r\n const powerConsumptionPer100km = isSearchResult ? carData?.powerConsumption : carData.Power_consumption_Combined_kWh_100km;\r\n const vehicleType = sitecoreVehicleType(carData, isSearchResult);\r\n const fuelType: string = (\r\n isSearchResult ? carData.fuelType : carData.Primary_engine_fuel_type || carData.Primary_engine_motor_Fuel_type || carData.Fuel_type\r\n )?.toLowerCase();\r\n\r\n let costPerFill = undefined;\r\n let costPer100km;\r\n\r\n if (calculatedFuelPrice.value) {\r\n const fuelPrice = calculatedFuelPrice.value as number;\r\n\r\n if (fuelPrice > 0) {\r\n if (fuelType === 'electric' || fuelType === 'electricity' || vehicleType === 'BEV') {\r\n costPerFill = (Number(carData.Battery_Capacity_kWh) * fuelPrice) / 100;\r\n } else {\r\n costPerFill = (Number(carData.Fuel_tank_capacity_Primary_lt) * fuelPrice) / 100;\r\n }\r\n\r\n if (vehicleType == 'PHEV' && (!fuelConsumptionPer100km || !powerConsumptionPer100km)) {\r\n // DSQ-601\r\n // Display N/A if vehicle is PHEV and both fuelConsumptionPer100km and powerConsumptionPer100km are not populated\r\n costPer100km = 'N/A';\r\n } else if (powerConsumptionPer100km && Number(powerConsumptionPer100km) > 0) {\r\n costPer100km = roundedAndFixedDollarValue((Number(powerConsumptionPer100km) * fuelPrice) / 100);\r\n } else if (fuelConsumptionPer100km && Number(fuelConsumptionPer100km) > 0) {\r\n costPer100km = roundedAndFixedDollarValue((Number(fuelConsumptionPer100km) * fuelPrice) / 100);\r\n } else {\r\n costPer100km = 'N/A';\r\n }\r\n }\r\n }\r\n\r\n return {\r\n COST_PER_FILL: {\r\n label: costToFillLabel,\r\n value: costPerFill ? roundedAndFixedDollarValue(costPerFill) : 'N/A',\r\n },\r\n COST_PER_100KM: {\r\n label: costPer100KmLabel,\r\n value: costPer100km || 'N/A',\r\n },\r\n };\r\n });\r\n\r\n return { costToRunText, costToRunData };\r\n}\r\n\r\n// The fuel types are string values such as 'RULP91' or 'PULP98'.\r\n// This function extracts the digit portion of the string,\r\n// which is used to compare against the primary engine\r\n// motor fuel octane value from 'carData'.\r\nfunction extractNumericOctaneValueFromFuelLabel(fuel: FuelDataType) {\r\n return fuel.fuelType.replace(/\\D+/, '');\r\n}\r\n\r\nfunction roundedAndFixedDollarValue(val: number | string) {\r\n return new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'AUD',\r\n currencyDisplay: 'narrowSymbol',\r\n currencySign: 'accounting',\r\n maximumFractionDigits: 2,\r\n // @ts-ignore (experimental support)\r\n roundingIncrement: 5,\r\n }).format(Number(val));\r\n}\r\n"],"names":["useRunningCosts","carData","isSearchResult","costToFillLabel","costPer100KmLabel","contentStore","useContentStore","fuelPrices","storeToRefs","costToRunText","computed","_b","_a","costToRunData","calculatedFuelPrice","DEFAULT_FUEL","ELECTRIC","DIESEL_FUEL","vehicleType","sitecoreVehicleType","fuelOctane","fuelType","_c","result","_d","fuel","extractNumericOctaneValueFromFuelLabel","_e","_f","_g","fuelConsumptionPer100km","powerConsumptionPer100km","costPerFill","costPer100km","fuelPrice","roundedAndFixedDollarValue","val"],"mappings":"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"}