I got the code for a collapsible table from this website:
https://mui.com/material-ui/react-table/#collapsible-table
But whenever I expand a row, the table “grows up” since it increases in size, which is not desirable. I’d like it to stay in place, but growing down is fine. Here’s a minimal reproducible example:
import * as React from 'react';
import Box from '@mui/material/Box';
import Collapse from '@mui/material/Collapse';
import IconButton from '@mui/material/IconButton';
import Table from '@mui/material/Table';
import TableBody from '@mui/material/TableBody';
import TableCell from '@mui/material/TableCell';
import TableContainer from '@mui/material/TableContainer';
import TableHead from '@mui/material/TableHead';
import TableRow from '@mui/material/TableRow';
import Typography from '@mui/material/Typography';
import Paper from '@mui/material/Paper';
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';
function Row() {
const [open, setOpen] = React.useState(false);
return (
<React.Fragment>
<TableRow>
<TableCell>
<IconButton
aria-label="expand row"
size="small"
onClick={() => setOpen(!open)}
>
{open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />}
</IconButton>
</TableCell>
<TableCell component="th" scope="row">
Yogurt
</TableCell>
</TableRow>
<TableRow>
<TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={6}>
<Collapse in={open} timeout="auto" unmountOnExit>
<Box sx={{ margin: 1 }}>
<Typography variant="h6" gutterBottom component="div">
History
</Typography>
<Table sx={{maxWidth:'25vw'}}>
Lorem ipsum dolor sit amet, duo in alii inimicus praesent, sea te sonet maiorum maluisset.
Has ad quis oratio aliquando, stet facer consectetuer te eos.
Usu ne iusto everti, ea labore moderatius definitiones has, at vim everti diceret.
Quot quidam est cu, vim hinc ubique ad. Sea ex nobis clita deseruisse, impetus nusquam eam at,
in labitur neglegentur contentiones pri.
</Table>
</Box>
</Collapse>
</TableCell>
</TableRow>
</React.Fragment>
);
}
export default function CollapsibleTable() {
return (
<Box >
<TableContainer component={Paper}>
<Table aria-label="collapsible table">
<TableHead>
<TableRow>
<TableCell />
<TableCell>Dessert</TableCell>
</TableRow>
</TableHead>
<TableBody>
<Row />
</TableBody>
</Table>
</TableContainer>
</Box>
);
}