Finish UI

This commit is contained in:
pauladamseniii
2023-10-17 23:34:33 -04:00
parent 2fa9feb963
commit d0e6a43a01
6 changed files with 187 additions and 8 deletions

View File

@@ -342,6 +342,18 @@ export const CarUpdatesProvider = ({ children }) => {
return result;
};
const addSUMSVersionRxSwins = async (sums_version, data, token) => {
try {
setBusy(true);
const result = await api.addSUMSVersionRxSwins(sums_version, data, token);
if (result.error)
throw new Error(`Add software version rxswin error. ${result.message}`);
return result;
} finally {
setBusy(false);
}
};
return (
<CarUpdatesContext.Provider
value={{
@@ -363,6 +375,7 @@ export const CarUpdatesProvider = ({ children }) => {
updateSUMSVersion,
getSUMSVersionRxSwins,
deleteSUMSVersionRxSwins,
addSUMSVersionRxSwins,
}}
>
{children}

View File

@@ -155,5 +155,6 @@ export const useCarUpdatesContext = () => ({
getSUMSVersions: jest.fn(() => sumsVersions),
getSUMSVersionRxSwins: jest.fn(() => sumsVersionRxSwins),
deleteSUMSVersionRxSwins: jest.fn(),
addSUMSVersionRxSwins: jest.fn(),
updateSUMSVersion: jest.fn(),
});

View File

@@ -42,6 +42,7 @@ const SuppliersList = React.lazy(() => import("../Suppliers/List"));
const SupplierDetails = React.lazy(() => import("../Suppliers/Details"));
const Datascope = React.lazy(() => import("../Dashboard"));
const SumsRxSwin = React.lazy(() => import("../SUMS"));
const SumsRxSwinAdd = React.lazy(() => import("../SUMS/Add"));
const DashboardCustom = React.lazy(() => import("../DashboardCustom"));
const SiteRoutes = () => {
@@ -315,6 +316,15 @@ const SiteRoutes = () => {
rolesPerGroup={Permissions.FiskerMagnaCreate}
providers={providers}
/>
<AuthRoute
path="/sums-rxswin-add/:sums_version"
render={() => <SumsRxSwinAdd />}
type={TYPES.PROTECTED}
token={token}
groups={groups}
rolesPerGroup={Permissions.FiskerMagnaCreate}
providers={providers}
/>
<PageNotFound />
</Switch>
</Suspense>

View File

@@ -0,0 +1,120 @@
import {
Button,
TextField
} from "@material-ui/core";
import { useParams } from "react-router";
import React, { useEffect, useState } from "react";
import { Redirect } from "react-router";
import { logger } from "../../../services/monitoring";
import { useStatusContext } from "../../Contexts/StatusContext";
import {
CarUpdatesProvider,
useCarUpdatesContext
} from "../../Contexts/CarUpdatesContext";
import { useUserContext } from "../../Contexts/UserContext";
import useStyles from "../../useStyles";
const MainForm = () => {
const { addSUMSVersionRxSwins, busy } = useCarUpdatesContext();
const {
token: {
idToken: { jwtToken: token },
},
} = useUserContext();
const classes = useStyles();
const [redirect, setRedirect] = useState(null);
const { sums_version } = useParams();
const { setMessage, setTitle, setSitePath } = useStatusContext();
const [rxswin, setRxswin] = useState("");
useEffect(() => {
setTitle(`Add RXSWIN to SUMS Version ${sums_version}`);
setSitePath([
{
label: `SUMS Version ${sums_version}`,
link: `/sums/${sums_version}`,
},
{
label: `SUMS Version ${sums_version}`,
link: `/sums-rxswin-add/${sums_version}`,
},
{
label: `Add RXSWIN`,
},
]);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const onRxswinChange = (event) => {
setRxswin(event.target.value);
}
const onSubmit = async (event) => {
try {
event.preventDefault();
const data = {
"swversion_rxswins": [
{
"version": sums_version,
"rxswin": rxswin,
},
],
};
const result = await addSUMSVersionRxSwins(sums_version, data, token);
if (!result || result.error) return;
setMessage(`Added ${rxswin}`);
setRedirect(`/sums/${sums_version}`);
} 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="rxswin"
name="rxswin"
label="RX Software Identification Number (RXSWIN)"
variant="outlined"
margin="normal"
inputProps={{
maxLength: "255",
}}
required
fullWidth
value={rxswin}
onChange={onRxswinChange}
type="text"
/>
<Button
type="submit"
disabled={busy}
fullWidth
variant="contained"
color="primary"
className={classes.submit}
onClick={onSubmit}
>
{busy ? "Submitting..." : "Submit"}
</Button>
</form>
</div>
);
};
const SumsRxSwinAdd = () => (
<CarUpdatesProvider>
<MainForm />
</CarUpdatesProvider>
);
export default SumsRxSwinAdd;

View File

@@ -1,4 +1,5 @@
import {
Grid,
IconButton,
Table,
TableBody,
@@ -7,7 +8,10 @@ import {
TablePagination,
TableRow,
} from "@material-ui/core";
import AddCircleIcon from "@material-ui/icons/AddCircle";
import DeleteIcon from "@material-ui/icons/Delete";
import clsx from "clsx";
import { LocalDateTimeString } from "../../utils/dates";
import { logger } from "../../services/monitoring";
import React, { useEffect, useState } from "react";
import { useParams } from "react-router";
@@ -17,6 +21,7 @@ import {
} from "../Contexts/CarUpdatesContext";
import { useStatusContext } from "../Contexts/StatusContext";
import { useUserContext } from "../Contexts/UserContext";
import { Link } from "react-router-dom";
import TableHeaderSortable from "../Table/HeaderSortable";
import { useLocalStorage } from "../useLocalStorage";
import DeleteConfirmation from "../DeleteConfirmation";
@@ -26,12 +31,12 @@ import { RoleWrap } from "../Controls/RoleWrap";
const tableColumns = [
{
id: "sums_version",
label: "SUMS Version",
id: "sums_rxswin",
label: "RXSWIN (RX Software Identification Number)",
},
{
id: "sums_rxswin",
label: "RXSwin Version",
id: "created_at",
label: "Created",
},
];
@@ -59,7 +64,18 @@ const MainForm = () => {
groups,
providers,
} = useUserContext();
const { setMessage } = useStatusContext();
const { setMessage, setTitle, setSitePath } = useStatusContext();
useEffect(() => {
setTitle(`SUMS Version ${sums_version}`);
setSitePath([
{
label: `SUMS Version ${sums_version}`,
link: `/sums/${sums_version}`,
},
]);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
useEffect(() => {
(async () => {
@@ -122,6 +138,13 @@ const MainForm = () => {
return (
<div>
<Grid container className={classes.root} spacing={2}>
<Grid item md={4} className={clsx(classes.textJustifyAlign, classes.actionsBar)}>
<Link to={`/sums-rxswin-add/${sums_version}`} className={classes.labelInline}>
<AddCircleIcon fontSize="large" />
</Link>
</Grid>
</Grid>
<Table>
<TableHeaderSortable
classes={classes}
@@ -134,10 +157,10 @@ const MainForm = () => {
{versionRxSwins.map((row, index) => (
<TableRow key={index}>
<TableCell align="center">
{row.version}
{row.rxswin}
</TableCell>
<TableCell align="center">
{row.rxswin}
{LocalDateTimeString(row.created)}
</TableCell>
<TableCell>
<RoleWrap