Files
ota-admin-portal/src/components/Contexts/VehicleContext.jsx
John Wu 50e6633d6d Merge development (#40)
* CEC-231 Bulk car selection control (#38)

* Bulk car selection control

* Tweak control alignment

* CEC-231 Fix control css (#39)

* Update test

Co-authored-by: Rafi Greenberg <rgreenberg@fiskerinc.com>
Co-authored-by: Roger Standridge <rstandridge@fiskerinc.com>
2021-05-10 11:42:20 -07:00

107 lines
2.6 KiB
JavaScript

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 (
<VehicleContext.Provider
value={{
busy,
vehicles,
totalVehicles,
models,
years,
getVehicles,
addVehicle,
getModels,
getYears,
}}
>
{children}
</VehicleContext.Provider>
);
};
export const useVehicleContext = () => useContext(VehicleContext);