made a sticky header for the table

This commit is contained in:
csawatzky 2025-06-09 11:11:39 -06:00
parent e35e699294
commit 06a5476e93
2 changed files with 12 additions and 4 deletions

View file

@ -56,6 +56,11 @@ const useStyles = makeStyles((theme: Theme) => {
backgroundColor: "rgba(150, 150, 150, 0.15)", backgroundColor: "rgba(150, 150, 150, 0.15)",
} }
}, },
stickyHeader: {
position: "sticky",
top: 0,
zIndex: 300 //giving a really high z-index to make sure nothing is in front of it
}
})}, })},
); );
@ -100,6 +105,7 @@ interface Props<T> {
setOrder?: React.Dispatch<React.SetStateAction<"asc" | "desc">>; setOrder?: React.Dispatch<React.SetStateAction<"asc" | "desc">>;
endTitleElement?: string | JSX.Element | (() => string | JSX.Element); endTitleElement?: string | JSX.Element | (() => string | JSX.Element);
loadMore?: () => void loadMore?: () => void
stickyHeader?: boolean
} }
export default function ResponsiveTable<T extends Object>(props: Props<T>) { export default function ResponsiveTable<T extends Object>(props: Props<T>) {
@ -133,7 +139,8 @@ export default function ResponsiveTable<T extends Object>(props: Props<T>) {
setOrderBy, setOrderBy,
order, order,
setOrder, setOrder,
loadMore loadMore,
stickyHeader
} = props } = props
const classes = useStyles(); const classes = useStyles();
const columns = typeof(props.columns) === "function" ? props.columns() : props.columns const columns = typeof(props.columns) === "function" ? props.columns() : props.columns
@ -432,9 +439,9 @@ export default function ResponsiveTable<T extends Object>(props: Props<T>) {
} }
return ( return (
<TableContainer className={classes.tableContainer} component={Paper}> <Box className={classes.tableContainer} component={Paper}>
<Table> <Table>
<TableHead> <TableHead className={stickyHeader ? classes.stickyHeader : undefined}>
<TableRow sx={ !title && !setSearchText ? { display: "none" } : undefined}> <TableRow sx={ !title && !setSearchText ? { display: "none" } : undefined}>
<TableCell colSpan={10000} sx={{ border: "none" }}> <TableCell colSpan={10000} sx={{ border: "none" }}>
<Grid2 container justifyContent="space-between"> <Grid2 container justifyContent="space-between">
@ -629,6 +636,6 @@ export default function ResponsiveTable<T extends Object>(props: Props<T>) {
) )
})} })}
</Menu> </Menu>
</TableContainer> </Box>
) )
} }

View file

@ -735,6 +735,7 @@ export default function Devices() {
<ResponsiveTable<Device> <ResponsiveTable<Device>
title={<SmartBreadcrumb prependPaths={getGroup() && ["groups", getGroup().id().toString()]} groupName={getGroup() && getGroup().name()} paddingBottom={1}/>} title={<SmartBreadcrumb prependPaths={getGroup() && ["groups", getGroup().id().toString()]} groupName={getGroup() && getGroup().name()} paddingBottom={1}/>}
subtitle={subtitle} subtitle={subtitle}
stickyHeader
rows={devices} rows={devices}
renderGutter={ isMobile ? gutter : undefined } renderGutter={ isMobile ? gutter : undefined }
columns={columns} columns={columns}