diff --git a/frontend/src/features/machines/components/MachineAccordion.js b/frontend/src/features/machines/components/MachineAccordion.js deleted file mode 100644 index 6fd5266..0000000 --- a/frontend/src/features/machines/components/MachineAccordion.js +++ /dev/null @@ -1,94 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { Accordion, AccordionSummary, AccordionDetails, Grid } from "@mui/material"; -import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import MachineCollapsedContent from "./common/MachineCollapsedContent"; -import { DataLabel } from "../../../components/common"; -import { useTranslation } from "react-i18next"; -import { useSensitiveInfo } from "../../../hooks"; -import ActionsGroup from "./common/ActionsGroup"; -import { styled } from "@mui/system"; - -const IconLeftAccordionSummary = styled(AccordionSummary)(({ theme }) => ({ - root: { - minHeight: "20px", - height: "42px", - [theme.breakpoints.down("md")]: { - height: "62px" - }, - [theme.breakpoints.down("sm")]: { - height: "102px" - } - }, - expandIcon: { - order: -1 - } -})); - -const GridCell = ({ label, value }) => { - const { mask } = useSensitiveInfo(); - return ( - - - - ); -}; - -GridCell.propTypes = { - label: PropTypes.string.isRequired, - value: PropTypes.string.isRequired -}; - -const MachineAccordion = ({ machine, actions, logs, addLog }) => { - const { t } = useTranslation(); - return ( - - } - aria-label="Expand" - aria-controls="additional-actions1-content" - id="additional-actions1-header" - IconButtonProps={{ edge: "start" }} - > - - - - - - - - - - - - - - - - - - - ); -}; - -MachineAccordion.propTypes = { - machine: PropTypes.shape({ - machineId: PropTypes.number.isRequired, - machineName: PropTypes.string.isRequired, - fullMachineName: PropTypes.string.isRequired, - macAddress: PropTypes.string.isRequired, - iPv4Address: PropTypes.string, - description: PropTypes.string - }).isRequired, - actions: PropTypes.array.isRequired, - logs: PropTypes.array.isRequired, - addLog: PropTypes.func.isRequired -}; - -export default MachineAccordion; diff --git a/frontend/src/features/machines/components/MachineAccordion.tsx b/frontend/src/features/machines/components/MachineAccordion.tsx new file mode 100644 index 0000000..e78598b --- /dev/null +++ b/frontend/src/features/machines/components/MachineAccordion.tsx @@ -0,0 +1,106 @@ +import React from "react"; +import { styled } from "@mui/material/styles"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import MuiAccordion, { AccordionProps } from "@mui/material/Accordion"; +import MuiAccordionSummary, { AccordionSummaryProps } from "@mui/material/AccordionSummary"; +import MuiAccordionDetails from "@mui/material/AccordionDetails"; +import { models } from "types"; +import { Grid } from "@mui/material"; +import ActionsGroup from "./common/ActionsGroup"; +import { useTranslation } from "react-i18next"; +import { useSensitiveInfo } from "hooks"; +import { DataLabel } from "components/common"; +import MachineCollapsedContent from "./common/MachineCollapsedContent"; + +const Accordion = styled((props: AccordionProps) => )( + ({ theme }) => ({ + border: `1px solid ${theme.palette.divider}`, + "&:not(:last-child)": { + borderBottom: 0 + }, + "&::before": { + display: "none" + } + }) +); + +const AccordionSummary = styled((props: AccordionSummaryProps) => ( + } {...props} /> +))(({ theme }) => ({ + backgroundColor: theme.palette.mode === "dark" ? "rgba(255, 255, 255, .05)" : "rgba(0, 0, 0, .03)", + flexDirection: "row-reverse", + "& .MuiAccordionSummary-expandIconWrapper.Mui-expanded": { + transform: "rotate(180deg)" + }, + "& .MuiAccordionSummary-content": { + marginLeft: theme.spacing(1) + }, + minHeight: "20px", + height: "42px", + [theme.breakpoints.down("md")]: { + height: "62px" + }, + [theme.breakpoints.down("sm")]: { + height: "102px" + } +})); + +const AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({ + padding: theme.spacing(1), + borderTop: "1px solid rgba(0, 0, 0, .125)" +})); + +type GridCellProps = { + label: string; + value: string; +}; + +const GridCell: React.FC = ({ label, value }) => { + const { mask } = useSensitiveInfo(); + return ( + + + + ); +}; + +type Props = { + machine: models.Machine; + actions: Array; // Replace any with the actual type of the actions + logs: Array; // Replace any with the actual type of the logs + addLog: () => void; // Replace with the actual function signature +}; + +const MachineAccordion: React.FC = ({ machine, actions, logs, addLog }) => { + const { t } = useTranslation(); + return ( + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default MachineAccordion; diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts new file mode 100644 index 0000000..b471b7f --- /dev/null +++ b/frontend/src/types/index.ts @@ -0,0 +1,5 @@ +import * as models from "./models"; + +export * from "./models"; + +export { models }; diff --git a/frontend/src/types/models.ts b/frontend/src/types/models.ts new file mode 100644 index 0000000..769e43b --- /dev/null +++ b/frontend/src/types/models.ts @@ -0,0 +1,8 @@ +export type Machine = { + machineId: number; + machineName: string; + fullMachineName: string; + macAddress: string; + iPv4Address?: string; + description?: string; +};