import React, { useContext, useState } from "react"; import api from "../../services/vehicles"; const VehicleContext = React.createContext(); const validateAdd = (vehicle) => { if (vehicle === null) { throw new Error("No vehicle data"); } if (!vehicle.vin || vehicle.vin.length === 0) { throw new Error("VIN required"); } if (vehicle.vin.length > 17) { throw new Error("VIN cannot be larger than 17 characters"); } if (!vehicle.model || vehicle.model.length === 0) { throw new Error("model required"); } if (!vehicle.year || vehicle.year < 2000 || vehicle.year > 9999) { throw new Error("year required"); } }; export const VehicleProvider = ({ children }) => { const [busy, setBusy] = useState(false); const [vehicles, setVehicles] = useState([]); const [totalVehicles, setTotalVehicles] = useState(0); const [models, setModels] = useState([]); const [years, setYears] = useState([]); const getVehicles = async (search, token) => { try { setBusy(true); const result = await api.getVehicles(search, token); if (result.error) { setVehicles([]); throw new Error(`Get vehicles error. ${result.message}`); } else { setVehicles(result.data); if (result.total) { setTotalVehicles(result.total); } } } finally { setBusy(false); } }; const addVehicle = async (vehicle, token) => { try { setBusy(true); validateAdd(vehicle); const result = await api.addVehicle(vehicle, token); if (result.error) throw new Error(`Add vehicle error. ${result.message}`); return result; } finally { setBusy(false); } }; const getModels = async (token) => { try { setBusy(true); const result = await api.getModels(token); if (result.error) throw new Error(`Get models error. ${result.message}`); setModels(result.data); } finally { setBusy(false); } }; const getYears = async (token) => { try { setBusy(true); const result = await api.getYears(token); if (result.error) throw new Error(`Get years error. ${result.message}`); setYears(result.data); } finally { setBusy(false); } }; return ( {children} ); }; export const useVehicleContext = () => useContext(VehicleContext);