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

@@ -0,0 +1,103 @@
import React, { useEffect, useRef, useState } from "react";
import { Redirect, useParams } from "react-router";
import { Button, TextField } from "@material-ui/core";
import useStyles from "../../../../useStyles";
import {
useFleetContext,
FleetProvider
} from "../../../../Contexts/FleetContext";
import { useStatusContext } from "../../../../Contexts/StatusContext";
import { useUserContext } from "../../../../Contexts/UserContext";
import { logger } from "../../../../../services/monitoring";
const MainForm = () => {
const { name } = useParams();
const { setMessage, setTitle, setSitePath } = useStatusContext();
const { addFleetVehicle, busy } = useFleetContext();
const {
token: {
idToken: { jwtToken: token },
},
} = useUserContext();
const classes = useStyles();
const vinEl = useRef(null);
const [redirect, setRedirect] = useState(null);
useEffect(() => {
const title = "Add Vehicle";
setTitle(title);
setSitePath([
{
label: "Fleets",
link: "/fleets",
},
{
label: `${name}`,
link: `/fleet/${name}`
},
{
label: title
}
]);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const onSubmit = async (event) => {
try {
event.preventDefault();
const formData = { vin: vinEl.current.value };
const result = await addFleetVehicle(name, formData, token);
setMessage(`Added ${result.vin}`);
setRedirect(`/fleet/${name}#vehicles`);
} catch (e) {
setMessage(e.message);
logger.warn(e.stack);
}
};
if (redirect && redirect.length > 0) {
return <Redirect to={redirect} />;
}
return (
<div className={classes.paper}>
<form className={classes.form} noValidate action="{onSubmit}">
<TextField
id="vin"
name="vin"
label="VIN"
variant="outlined"
margin="normal"
inputProps={{
maxLength: "17",
}}
required
fullWidth
inputRef={vinEl}
/>
<Button
type="submit"
disabled={busy}
fullWidth
variant="contained"
color="primary"
className={classes.submit}
onClick={onSubmit}
>
{busy ? "Submitting..." : "Submit"}
</Button>
</form>
</div>
);
};
const FleetAddVehicleForm = () => (
<FleetProvider>
<MainForm />
</FleetProvider>
);
export default FleetAddVehicleForm;