import { Grid, IconButton, Table, TableBody, TableCell, TableFooter, 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 { Link } from "react-router-dom"; import { logger } from "../../services/monitoring"; import React, { useEffect, useState } from "react"; import { useVehicleContext, VehicleProvider } from "../Contexts/VehicleContext"; import { useStatusContext } from "../Contexts/StatusContext"; import { useUserContext } from "../Contexts/UserContext"; import TableHeaderSortable from "../Table/HeaderSortable"; import { useLocalStorage } from "../useLocalStorage"; import DeleteConfirmation from "../DeleteConfirmation"; import { RoleWrap } from "../Controls/RoleWrap"; import { DropDownList } from "../Controls/DropDownList"; import useStyles from "../useStyles"; import modelsTrimsYears from './modelsTrimsYears.json'; const tableColumns = [ { id: "flashpack", label: "Flashpack Number", }, { id: "os_version", label: "Part of OS Version", }, { id: "car_model", label: "Model", }, { id: "car_trim", label: "Trim", }, { id: "car_year", label: "Year", }, { id: "delete", label: "Delete", }, ]; const PAGE_SIZE = "FLASHPACKS_TABLE_PAGE_SIZE"; const MainForm = () => { const classes = useStyles(); const { setMessage, setTitle, setSitePath } = useStatusContext(); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10); const [pageIndex, setPageIndex] = useState(0); const [showDeleteModal, setShowDeleteModal] = useState(false); const [rowToDelete, setRowToDelete] = useState({}); const [model, setModel] = useLocalStorage("FLASHPACKS_MODEL", "Ocean"); const [trim, setTrim] = useLocalStorage("FLASHPACKS_TRIM", "Sport"); const [year, setYear] = useLocalStorage("FLASHPACKS_YEAR", 2024); const [trims, setTrims] = useLocalStorage("FLASHPACKS_TRIMS", modelsTrimsYears.oceanTrims); const [years, setYears] = useLocalStorage("FLASHPACKS_YEARS", modelsTrimsYears.oceanYears); const { getAllFlashpacks, flashpacks, totalFlashpacks, deleteFlashpackVersion, } = useVehicleContext(); const { token: { idToken: { jwtToken: token }, }, groups, providers, } = useUserContext(); useEffect(() => { setTitle("Flashpack Versions"); setSitePath([ { label: "Tools", link: "/tools/flashpacks", }, { label: "Flashpack Versions", }, ]); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { loadFlashpacks(model, trim, year); // eslint-disable-next-line react-hooks/exhaustive-deps }, [token, pageIndex, pageSize]); const loadFlashpacks = async (model, trim, year) => { try { if (!token) return; await getAllFlashpacks( model, trim, year, { limit: pageSize, offset: pageSize * pageIndex, }, token ); } catch (e) { setMessage(e.message); logger.warn(e.stack); } }; const onModelChange = (event) => { let newModel = event.target.value setModel(newModel) switch (newModel) { case "Ocean": setTrims(modelsTrimsYears.oceanTrims); setYears(modelsTrimsYears.oceanYears); break; default: break; } if (trim && year) { loadFlashpacks(newModel, trim, year) } }; const onTrimChange = (event) => { let newTrim = event.target.value setTrim(newTrim) if (model && year) { loadFlashpacks(model, newTrim, year) } }; const onYearChange = (event) => { let newYear = event.target.value setYear(newYear) if (model && trim) { loadFlashpacks(model, trim, newYear) } }; const handleChangePageIndex = (event, newIndex) => { setPageIndex(newIndex); }; const handleChangePageSize = (event) => { setPageSize(parseInt(event.target.value, 10)); setPageIndex(0); }; const onDeleteClick = (row) => { setRowToDelete(row); setShowDeleteModal(true); } const sendDelete = async () => { if (rowToDelete) { try { const result = await deleteFlashpackVersion(rowToDelete.car_model, rowToDelete.car_trim, rowToDelete.car_year, rowToDelete.flashpack, token); if (!result || result.error) return; setMessage(`Deleted ${rowToDelete.car_year} ${rowToDelete.car_model} ${rowToDelete.car_trim} ${rowToDelete.flashpack}`); loadFlashpacks(model, trim, year); } catch (e) { setMessage(e.message); logger.warn(e.stack); } } }; return (