MachineAccordion component upgrade
parent
367db653f1
commit
f25f0d5438
|
@ -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 (
|
|
||||||
<Grid item xs={12} md={6} lg={3}>
|
|
||||||
<DataLabel label={label} data={mask(value)} />
|
|
||||||
</Grid>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
GridCell.propTypes = {
|
|
||||||
label: PropTypes.string.isRequired,
|
|
||||||
value: PropTypes.string.isRequired
|
|
||||||
};
|
|
||||||
|
|
||||||
const MachineAccordion = ({ machine, actions, logs, addLog }) => {
|
|
||||||
const { t } = useTranslation();
|
|
||||||
return (
|
|
||||||
<Accordion>
|
|
||||||
<IconLeftAccordionSummary
|
|
||||||
expandIcon={<ExpandMoreIcon />}
|
|
||||||
aria-label="Expand"
|
|
||||||
aria-controls="additional-actions1-content"
|
|
||||||
id="additional-actions1-header"
|
|
||||||
IconButtonProps={{ edge: "start" }}
|
|
||||||
>
|
|
||||||
<Grid
|
|
||||||
container
|
|
||||||
sx={{
|
|
||||||
justifyContent: "center",
|
|
||||||
alignItems: "center"
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Grid item xs={11}>
|
|
||||||
<Grid container>
|
|
||||||
<GridCell label={t("Machine.FullName")} value={machine.fullMachineName} />
|
|
||||||
<GridCell label={t("Machine.Name")} value={machine.machineName} />
|
|
||||||
<GridCell label={t("Machine.IP")} value={machine.iPv4Address} />
|
|
||||||
<GridCell label={t("Machine.MAC")} value={machine.macAddress} />
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={1} style={{ textAlign: "right" }}>
|
|
||||||
<ActionsGroup machine={machine} actions={actions} addLog={addLog} />
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</IconLeftAccordionSummary>
|
|
||||||
<AccordionDetails>
|
|
||||||
<MachineCollapsedContent description={machine.description} logs={logs} style={{ width: "100%" }} />
|
|
||||||
</AccordionDetails>
|
|
||||||
</Accordion>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
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;
|
|
|
@ -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) => <MuiAccordion disableGutters elevation={0} square {...props} />)(
|
||||||
|
({ theme }) => ({
|
||||||
|
border: `1px solid ${theme.palette.divider}`,
|
||||||
|
"&:not(:last-child)": {
|
||||||
|
borderBottom: 0
|
||||||
|
},
|
||||||
|
"&::before": {
|
||||||
|
display: "none"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
const AccordionSummary = styled((props: AccordionSummaryProps) => (
|
||||||
|
<MuiAccordionSummary expandIcon={<ExpandMoreIcon />} {...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<GridCellProps> = ({ label, value }) => {
|
||||||
|
const { mask } = useSensitiveInfo();
|
||||||
|
return (
|
||||||
|
<Grid item xs={12} md={6} lg={3}>
|
||||||
|
<DataLabel label={label} data={mask(value)} />
|
||||||
|
</Grid>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
machine: models.Machine;
|
||||||
|
actions: Array<any>; // Replace any with the actual type of the actions
|
||||||
|
logs: Array<any>; // Replace any with the actual type of the logs
|
||||||
|
addLog: () => void; // Replace with the actual function signature
|
||||||
|
};
|
||||||
|
|
||||||
|
const MachineAccordion: React.FC<Props> = ({ machine, actions, logs, addLog }) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
return (
|
||||||
|
<Accordion>
|
||||||
|
<AccordionSummary aria-controls={`machine-${machine.machineId}-summary`} id={`machine-${machine.machineId}`}>
|
||||||
|
<Grid
|
||||||
|
container
|
||||||
|
sx={{
|
||||||
|
justifyContent: "center",
|
||||||
|
alignItems: "center"
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Grid item xs={11}>
|
||||||
|
<Grid container>
|
||||||
|
<GridCell label={t("Machine.FullName")} value={machine.fullMachineName} />
|
||||||
|
<GridCell label={t("Machine.Name")} value={machine.machineName} />
|
||||||
|
<GridCell label={t("Machine.IP")} value={machine.iPv4Address || ""} />
|
||||||
|
<GridCell label={t("Machine.MAC")} value={machine.macAddress} />
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={1} style={{ textAlign: "right" }}>
|
||||||
|
<ActionsGroup machine={machine} actions={actions} addLog={addLog} />
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</AccordionSummary>
|
||||||
|
<AccordionDetails>
|
||||||
|
<MachineCollapsedContent description={machine.description} logs={logs} style={{ width: "100%" }} />
|
||||||
|
</AccordionDetails>
|
||||||
|
</Accordion>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default MachineAccordion;
|
|
@ -0,0 +1,5 @@
|
||||||
|
import * as models from "./models";
|
||||||
|
|
||||||
|
export * from "./models";
|
||||||
|
|
||||||
|
export { models };
|
|
@ -0,0 +1,8 @@
|
||||||
|
export type Machine = {
|
||||||
|
machineId: number;
|
||||||
|
machineName: string;
|
||||||
|
fullMachineName: string;
|
||||||
|
macAddress: string;
|
||||||
|
iPv4Address?: string;
|
||||||
|
description?: string;
|
||||||
|
};
|
Loading…
Reference in New Issue