Merge pull request #522 from Fisker-Inc/CEC-5542
CEC-5542 - Indicate how many fleet vehicles are what flashpack versions
This commit is contained in:
@@ -20,7 +20,7 @@ export default forwardRef(({
|
|||||||
if (data.error) {
|
if (data.error) {
|
||||||
setMessage(`${data.error}: ${data.message}`);
|
setMessage(`${data.error}: ${data.message}`);
|
||||||
} else if (selectAll) {
|
} else if (selectAll) {
|
||||||
setMessage(`Updating flashpack number all VINs in ${fleet}`);
|
setMessage(`Updating flashpack numbers for all VINs in fleet: ${fleet}`);
|
||||||
} else if (ids.length === 1) {
|
} else if (ids.length === 1) {
|
||||||
setMessage(`Updating flashpack number for ${ids[0]}`);
|
setMessage(`Updating flashpack number for ${ids[0]}`);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ export const FleetProvider = ({ children }) => {
|
|||||||
const [fleetCANFilters, setFleetCANFilters] = useState([]);
|
const [fleetCANFilters, setFleetCANFilters] = useState([]);
|
||||||
const [totalFleetCANFilters, setTotalFleetCANFilters] = useState(0);
|
const [totalFleetCANFilters, setTotalFleetCANFilters] = useState(0);
|
||||||
|
|
||||||
|
const [fleetFlashpackInfo, setFleetFlashpackInfo] = useState([]);
|
||||||
|
|
||||||
const addFleet = async (f, token) => {
|
const addFleet = async (f, token) => {
|
||||||
try {
|
try {
|
||||||
setBusy(true);
|
setBusy(true);
|
||||||
@@ -351,6 +353,25 @@ export const FleetProvider = ({ children }) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getFleetFlashpackInfo = async (name, token) => {
|
||||||
|
try {
|
||||||
|
setBusy(true);
|
||||||
|
|
||||||
|
validateFleetName(name);
|
||||||
|
|
||||||
|
const result = await api.getFlashpackVersionInfoFleet(name, token);
|
||||||
|
if (result.error) {
|
||||||
|
throw new Error(`Get flashpack version fleet into error. ${result.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
setFleetFlashpackInfo(result);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
setBusy(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setCarUpdateIds(() => fleetVehicles
|
setCarUpdateIds(() => fleetVehicles
|
||||||
.filter((vehicle) => vehicle.car_update_status && vehicle.car_update_status !== "installed")
|
.filter((vehicle) => vehicle.car_update_status && vehicle.car_update_status !== "installed")
|
||||||
@@ -384,7 +405,10 @@ export const FleetProvider = ({ children }) => {
|
|||||||
getFleetCANFilters,
|
getFleetCANFilters,
|
||||||
addFleetCANFilter,
|
addFleetCANFilter,
|
||||||
updateFleetCANFilter,
|
updateFleetCANFilter,
|
||||||
deleteFleetCANFilter
|
deleteFleetCANFilter,
|
||||||
|
|
||||||
|
fleetFlashpackInfo,
|
||||||
|
getFleetFlashpackInfo,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -198,6 +198,27 @@ exports[`FleetDetailsTab Render 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-textCenterAlign-0 MuiGrid-item MuiGrid-grid-md-12"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="makeStyles-paper-0 makeStyles-tableSize-0"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-root-0 MuiGrid-container MuiGrid-spacing-xs-2"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-textCenterAlign-0 MuiGrid-item MuiGrid-grid-md-12"
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
<b>
|
||||||
|
Flashpack Information
|
||||||
|
</b>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div />
|
<div />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ import { Redirect } from "react-router";
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import {
|
import {
|
||||||
Grid,
|
Grid,
|
||||||
|
Table,
|
||||||
|
TableBody,
|
||||||
|
TableCell,
|
||||||
|
TableFooter,
|
||||||
|
TableRow,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
} from "@material-ui/core";
|
} from "@material-ui/core";
|
||||||
import EditIcon from "@material-ui/icons/Edit"
|
import EditIcon from "@material-ui/icons/Edit"
|
||||||
@@ -16,11 +21,23 @@ import useStyles from "../../../useStyles";
|
|||||||
import { logger } from "../../../../services/monitoring";
|
import { logger } from "../../../../services/monitoring";
|
||||||
import DeleteConfirmation from "../../../DeleteConfirmation";
|
import DeleteConfirmation from "../../../DeleteConfirmation";
|
||||||
import BulkActions from "../../../BulkActions";
|
import BulkActions from "../../../BulkActions";
|
||||||
|
import TableHeaderSortable from "../../../Table/HeaderSortable";
|
||||||
|
|
||||||
|
const tableColumns = [
|
||||||
|
{
|
||||||
|
id: "flashpack",
|
||||||
|
label: "Flashpack",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "vehicles",
|
||||||
|
label: "# of Vehicles in Fleet",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
const MainForm = ({ name }) => {
|
const MainForm = ({ name }) => {
|
||||||
const classes = useStyles();
|
const classes = useStyles();
|
||||||
const { setMessage } = useStatusContext();
|
const { setMessage } = useStatusContext();
|
||||||
const { fleet, getFleet, deleteFleet } = useFleetContext();
|
const { fleet, getFleet, deleteFleet, fleetFlashpackInfo, getFleetFlashpackInfo } = useFleetContext();
|
||||||
const [redirect, setRedirect] = useState(null);
|
const [redirect, setRedirect] = useState(null);
|
||||||
const [showDeleteModal, setShowDeleteModal] = useState(false)
|
const [showDeleteModal, setShowDeleteModal] = useState(false)
|
||||||
const { token: { idToken: { jwtToken: token } } } = useUserContext();
|
const { token: { idToken: { jwtToken: token } } } = useUserContext();
|
||||||
@@ -32,6 +49,7 @@ const MainForm = ({ name }) => {
|
|||||||
try {
|
try {
|
||||||
if (!name || !token) return;
|
if (!name || !token) return;
|
||||||
await getFleet(name, token);
|
await getFleet(name, token);
|
||||||
|
await getFleetFlashpackInfo(name, token);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
setMessage(e.message);
|
setMessage(e.message);
|
||||||
logger.warn(e.stack);
|
logger.warn(e.stack);
|
||||||
@@ -104,6 +122,43 @@ const MainForm = ({ name }) => {
|
|||||||
<BulkActions ids={fleet.vehicles} actions={["addTags", "updateConfig", "sms"]} />
|
<BulkActions ids={fleet.vehicles} actions={["addTags", "updateConfig", "sms"]} />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
<Grid item md={12} className={classes.textCenterAlign}>
|
||||||
|
<div className={clsx(classes.paper, classes.tableSize)}>
|
||||||
|
<Grid container className={classes.root} spacing={2}>
|
||||||
|
<Grid item md={12} className={classes.textCenterAlign}>
|
||||||
|
<p>
|
||||||
|
<b>Flashpack Information</b>
|
||||||
|
</p>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
{fleetFlashpackInfo && (<Table size="small" >
|
||||||
|
<TableHeaderSortable
|
||||||
|
classes={classes}
|
||||||
|
orderBy={"flashpack"}
|
||||||
|
order={"asc"}
|
||||||
|
columnData={tableColumns}
|
||||||
|
onSortRequest={() => { return null }}
|
||||||
|
/>
|
||||||
|
<TableBody>
|
||||||
|
{
|
||||||
|
fleetFlashpackInfo.data && Object.entries(fleetFlashpackInfo.data).map(([flashpack, occurrences]) => (
|
||||||
|
<TableRow key={`${flashpack}-${occurrences.toString()}`}>
|
||||||
|
<TableCell align="center">{flashpack}</TableCell>
|
||||||
|
<TableCell align="center">{occurrences.toString()}</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</TableBody>
|
||||||
|
<TableFooter>
|
||||||
|
<TableRow>
|
||||||
|
{!fleetFlashpackInfo || fleetFlashpackInfo.length === 0 ? (
|
||||||
|
<TableCell colSpan={2} align="center">No flashpack info for fleet</TableCell>
|
||||||
|
) : <></>}
|
||||||
|
</TableRow>
|
||||||
|
</TableFooter>
|
||||||
|
</Table>)}
|
||||||
|
</div>
|
||||||
|
</Grid>
|
||||||
<DeleteConfirmation message={name} open={showDeleteModal} close={() => setShowDeleteModal(false)} deleteFunction={onDelete} />
|
<DeleteConfirmation message={name} open={showDeleteModal} close={() => setShowDeleteModal(false)} deleteFunction={onDelete} />
|
||||||
</div >
|
</div >
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -206,6 +206,27 @@ exports[`DetailsTab Render 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-textCenterAlign-0 MuiGrid-item MuiGrid-grid-md-12"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="makeStyles-paper-0 makeStyles-tableSize-0"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-root-0 MuiGrid-container MuiGrid-spacing-xs-2"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-textCenterAlign-0 MuiGrid-item MuiGrid-grid-md-12"
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
<b>
|
||||||
|
Flashpack Information
|
||||||
|
</b>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div />
|
<div />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -295,6 +295,27 @@ exports[`FleetStatus Render 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-textCenterAlign-0 MuiGrid-item MuiGrid-grid-md-12"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="makeStyles-paper-0 makeStyles-tableSize-0"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-root-0 MuiGrid-container MuiGrid-spacing-xs-2"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="MuiGrid-root makeStyles-textCenterAlign-0 MuiGrid-item MuiGrid-grid-md-12"
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
<b>
|
||||||
|
Flashpack Information
|
||||||
|
</b>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div />
|
<div />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -143,6 +143,17 @@ const fleetsAPI = {
|
|||||||
})
|
})
|
||||||
.then(fetchRespHandler)
|
.then(fetchRespHandler)
|
||||||
.catch(errorHandler),
|
.catch(errorHandler),
|
||||||
|
|
||||||
|
getFlashpackVersionInfoFleet: async (name, token) =>
|
||||||
|
fetch(`${API_ENDPOINT}/flashpack_version_info_fleet/${name}`, {
|
||||||
|
method: "GET",
|
||||||
|
headers: Object.assign(
|
||||||
|
{ "Content-Type": "application/json" },
|
||||||
|
getAuthHeaderOptions(token)
|
||||||
|
),
|
||||||
|
})
|
||||||
|
.then(fetchRespHandler)
|
||||||
|
.catch(errorHandler),
|
||||||
};
|
};
|
||||||
|
|
||||||
export default fleetsAPI;
|
export default fleetsAPI;
|
||||||
|
|||||||
Reference in New Issue
Block a user