From 22a928fe23c141d7a6647e8df0f9a24cd665762e Mon Sep 17 00:00:00 2001 From: Tristan Timblin Date: Mon, 16 Oct 2023 08:40:30 -0700 Subject: [PATCH 1/2] CEC-5182: fix missing data (#468) --- src/components/Contexts/FleetContext.jsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/Contexts/FleetContext.jsx b/src/components/Contexts/FleetContext.jsx index 022efae..2173d9d 100644 --- a/src/components/Contexts/FleetContext.jsx +++ b/src/components/Contexts/FleetContext.jsx @@ -155,8 +155,10 @@ export const FleetProvider = ({ children }) => { const result = await updatesApi.getCarUpdateProgress( carUpdateIdsRef.current.join(","), token - ); - let pivot = result.statuses.length - 1; + ).catch(() => { + return Promise.reject(); + }); + let pivot = result.statuses?.length ? result.statuses.length - 1 : 0; setFleetVehicles((fleetVehicles) => fleetVehicles.map((vehicle) => { result.statuses.find((status, i) => { if (vehicle.car_update_id !== status.car_update_id) { @@ -313,7 +315,7 @@ export const FleetProvider = ({ children }) => { useEffect(() => { setCarUpdateIds(() => fleetVehicles - .filter((vehicle) => vehicle.car_update_status !== "installed") + .filter((vehicle) => vehicle.car_update_status && vehicle.car_update_status !== "installed") .map((vehicle) => vehicle.car_update_id)); }, [fleetVehicles, setCarUpdateIds]); From 2a71d87c93ceb74401f506025f927918144a397b Mon Sep 17 00:00:00 2001 From: Tristan Timblin Date: Mon, 16 Oct 2023 10:29:21 -0700 Subject: [PATCH 2/2] CEC-5183 add bulk actions to fleets page (#470) * add multi-select * select all * add bulk-actions component * update tests * remove console.log --- .../Table/__snapshots__/index.test.jsx.snap | 40 ++++++++++++++++- .../Fleets/Status/Vehicles/Table/index.jsx | 43 +++++++++++++++---- .../__snapshots__/VehiclesTab.test.jsx.snap | 40 ++++++++++++++++- 3 files changed, 111 insertions(+), 12 deletions(-) diff --git a/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap b/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap index 5b065c6..4511aac 100644 --- a/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap +++ b/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap @@ -21,10 +21,9 @@ exports[`FleetVehiclesTable Render 1`] = ` class="MuiGrid-root makeStyles-root-0 MuiGrid-container MuiGrid-spacing-xs-2" > +
+ + + + + + + + + { const [order, setOrder] = useState("desc"); const [search, setSearch] = useState(""); const [showDeleteModal, setShowDeleteModal] = useState(false); + const [selected, setSelected] = useState([]); const classes = useStyles(); const { setMessage } = useStatusContext(); const { @@ -135,6 +138,19 @@ const MainForm = ({ name }) => { } }; + const handleSelect = (vin, setState) => { + setSelected(selected => setState + ? [...selected, vin] + : selected.filter(select => select !== vin)); + }; + + const handleSelectAll = (event) => { + const allSelected = !event.target.checked; + setSelected(() => allSelected + ? [] + : fleetVehicles.map((vehicle) => vehicle.vin)); + } + const onDelete = async (vin) => { try { await deleteFleetVehicle(name, { vin: vin }, token); @@ -188,14 +204,14 @@ const MainForm = ({ name }) => { return (
- - + + + + + @@ -207,10 +223,21 @@ const MainForm = ({ name }) => { order={order} columnData={tableColumns} onSortRequest={handleSort} + multiSelect={true} + onSelectAll={handleSelectAll} + selectCount={selected.length} + rowCount={fleetVehicles.length} /> - {fleetVehicles && fleetVehicles.map((car) => ( - (car.vin && + {fleetVehicles && fleetVehicles.map((car) => { + const isSelected = selected.includes(car.vin); + return (car.vin && + + handleSelect(car.vin, !isSelected)} + /> + {(car.connected || car.connectedHMI) && { {Actions(car.vin)} ) - ))} + })} diff --git a/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap b/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap index c45ef81..54bf98f 100644 --- a/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap +++ b/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap @@ -20,10 +20,9 @@ exports[`VehiclesTab Render 1`] = ` class="MuiGrid-root makeStyles-root-0 MuiGrid-container MuiGrid-spacing-xs-2" > +
+ + + + + + + + +