CEC-1183/CEC-1201 fleet vehicles forms (#130)

* working fleet vehicles forms

* snapshots and api tests
This commit is contained in:
Drew Taylor
2022-03-22 14:15:49 -07:00
committed by GitHub
parent 4daf171b1e
commit 4af3c70ec7
24 changed files with 2112 additions and 41 deletions

View File

@@ -5,9 +5,13 @@ const FleetContext = React.createContext();
export const FleetProvider = ({ children }) => {
const [busy, setBusy] = useState(false);
const [fleets, setFleets] = useState([]);
const [totalFleets, setTotalFleets] = useState(0);
const [fleetVehicles, setFleetVehicles] = useState([]);
const [totalFleetVehicles, setTotalFleetVehicles] = useState(0);
const addFleet = async (fleet, token) => {
try {
setBusy(true);
@@ -31,7 +35,6 @@ export const FleetProvider = ({ children }) => {
setFleets([])
throw new Error(`Get fleets error. ${result.message}`);
}
setFleets(result.data)
if (result.total) {
setTotalFleets(result.total);
@@ -78,16 +81,80 @@ export const FleetProvider = ({ children }) => {
}
}
const getFleetVehicles = async (name, search, token) => {
try {
setBusy(true);
const result = await api.getFleetVehicles(name, search, token);
if (result.error) {
setFleetVehicles([])
throw new Error(`Get fleet vehicles error. ${result.message}`);
}
setFleetVehicles(result.data)
if (result.total) {
setTotalFleetVehicles(result.total);
}
return result;
} finally {
setBusy(false);
}
}
const addFleetVehicle = async (name, vehicle, token) => {
try {
setBusy(true);
validateFleetName(name);
validateVIN(vehicle.vin);
const result = await api.addFleetVehicle(name, vehicle, token);
if (result.error) {
throw new Error(`Add fleet vehicle error. ${result.message}`);
}
return result;
} finally {
setBusy(false);
}
}
const deleteFleetVehicle = async (name, vehicle, token) => {
try {
setBusy(true);
validateFleetName(name);
validateVIN(vehicle.vin);
const result = await api.deleteFleetVehicle(name, vehicle, token);
if (result.error) {
throw new Error(`Delete fleet vehicle error. ${result.message}`);
}
const index = fleetVehicles.findIndex(element => element === vehicle.vin);
if (index >= 0) fleetVehicles.splice(index, 1);
return result;
} finally {
setBusy(false);
}
}
return (
<FleetContext.Provider
value={{
busy,
fleets,
totalFleets,
addFleet,
getFleets,
updateFleet,
deleteFleet
deleteFleet,
fleetVehicles,
totalFleetVehicles,
getFleetVehicles,
addFleetVehicle,
deleteFleetVehicle
}}
>
{children}
@@ -104,9 +171,15 @@ const validateFleet = (fleet) => {
}
const validateFleetName = (name) => {
if (name == null || !/^[A-Za-z-]+$/.test(name)) {
if (name == null || !/^[0-9A-Za-z-]+$/.test(name)) {
throw new Error("Invalid name");
}
}
const validateVIN = (vin) => {
if (vin == null || vin.length !== 17) {
throw new Error("Invalid VIN");
}
}
export const useFleetContext = () => useContext(FleetContext);