import React, { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { Table, TableBody, TableCell, TableFooter, TablePagination, TableRow, Toolbar, Tooltip, } from "@material-ui/core"; import SendIcon from "@material-ui/icons/Send"; import VisibilityIcon from "@material-ui/icons/Visibility"; import DeleteIcon from "@material-ui/icons/Delete"; import { useManifestsContext, ManifestsProvider, } from "../../Contexts/ManifestsContext"; import { useUserContext } from "../../Contexts/UserContext"; import { useStatusContext } from "../../Contexts/StatusContext"; import useStyles from "../../useStyles"; import { LocalDateTimeString } from "../../../utils/dates"; import TableHeaderSortable from "../../Table/HeaderSortable"; import SearchField from "../../Controls/SearchField"; import { logger } from "../../../services/monitoring"; import ECUList from "../../Controls/ECUList"; import { Roles, hasRole } from "../../../utils/roles"; const tableColumns = [ { id: "id", label: "ID", }, { id: "name", label: "Name", }, { id: "version", label: "Version", }, { id: "created_at", label: "Created", }, { id: "updated_at", label: "Updated", }, { id: "", label: "Actions", }, ]; const MainForm = () => { const classes = useStyles(); const [pageSize, setPageSize] = useState(10); const [pageIndex, setPageIndex] = useState(0); const [orderBy, setOrderBy] = useState("id"); const [order, setOrder] = useState("asc"); const [search, setSearch] = useState(""); const { getManifests, deleteManifest, manifests, totalManifests } = useManifestsContext(); const { setMessage, setTitle } = useStatusContext(); const { token: { idToken: { jwtToken: token }, }, groups, } = useUserContext(); const sortHandler = (event, property) => { if (property === orderBy) { if (order === "asc") { setOrder("desc"); } else { setOrder("asc"); } } else { setOrderBy(property); setOrder("asc"); } }; useEffect(() => { setTitle("Deploy Manifest"); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { (async () => { try { await getManifests( { limit: pageSize, offset: pageSize * pageIndex, order: `${orderBy} ${order}`, search, }, token ); } catch (e) { setMessage(e.message); logger.warn(e.stack); } })(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [pageIndex, pageSize, token, orderBy, order, search]); const handleChangePageIndex = (event, newIndex) => { setPageIndex(newIndex); }; const handleChangePageSize = (event) => { setPageSize(parseInt(event.target.value, 10)); setPageIndex(0); }; const handleSearch = (search) => { setSearch(search); }; const onDelete = async (manifest_id) => { try { await deleteManifest(parseInt(manifest_id), token); } catch (e) { setMessage(e.message); logger.warn(e.stack); } }; const Actions = (row) => { let actions = []; if (hasRole([Roles.CREATE, Roles.READ], groups)) { actions.push({ tip: `Status "${row.name} ${row.version}"`, link: `/manifest-status/${row.id}`, icon: ( ), }); } if (hasRole([Roles.CREATE], groups)) { actions = actions.concat([ { tip: `Deploy "${row.name} ${row.version}"`, link: `/manifest-deploy/${row.id}`, icon: , }, { tip: `Delete "${row.name} ${row.version}"`, id: row.id, icon: , }, ]); } if (actions.length === 0) return "No actions"; return actions.map((action) => { if (action.link != null) { return ( {action.icon} ); } else { return ( onDelete(action.id)}> {action.icon} ); } }); }; return (
{manifests.map((row) => ( {row.id} {row.name} {row.ecu_list && ( <>
)}
{row.version} {LocalDateTimeString(row.created)} {LocalDateTimeString(row.updated)} {Actions(row)}
))}
); }; const ManifestsList = () => ( ); export default ManifestsList;