Scale MembersListCard children based on container

Signed-off-by: Boris Bera <beraboris@gmail.com>
This commit is contained in:
Boris Bera
2023-11-12 11:21:35 -05:00
parent 1aa1c78ad2
commit 59c24b9ccd
2 changed files with 70 additions and 54 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-org': patch
---
Fix issue where members inside of `<EntityMembersListCard>` would be rendered as squished when the card itself was shrunk down.
@@ -61,6 +61,13 @@ const useStyles = makeStyles((theme: Theme) =>
flex: '1',
minWidth: '0px',
},
cardGrid: {
display: 'grid',
gap: theme.spacing(1.5),
gridTemplateColumns: `repeat(auto-fit, minmax(auto, ${theme.spacing(
34,
)}px))`,
},
}),
);
@@ -73,49 +80,47 @@ const MemberComponent = (props: { member: UserEntity }) => {
const displayName = profile?.displayName ?? metaName;
return (
<Grid item container xs={12} sm={6} md={4} xl={2}>
<Box className={classes.card}>
<Box className={classes.card}>
<Box
display="flex"
flexDirection="column"
m={3}
alignItems="center"
justifyContent="center"
>
<Avatar
displayName={displayName}
picture={profile?.picture}
customStyles={{
position: 'absolute',
top: '-2rem',
}}
/>
<Box
display="flex"
flexDirection="column"
m={3}
alignItems="center"
justifyContent="center"
pt={2}
sx={{
width: '100%',
}}
textAlign="center"
>
<Avatar
displayName={displayName}
picture={profile?.picture}
customStyles={{
position: 'absolute',
top: '-2rem',
}}
/>
<Box
pt={2}
sx={{
width: '100%',
}}
textAlign="center"
>
<Typography variant="h6">
<EntityRefLink
data-testid="user-link"
entityRef={props.member}
title={displayName}
/>
</Typography>
{profile?.email && (
<Link to={`mailto:${profile.email}`}>
<OverflowTooltip text={profile.email} />
</Link>
)}
{description && (
<Typography variant="subtitle2">{description}</Typography>
)}
</Box>
<Typography variant="h6">
<EntityRefLink
data-testid="user-link"
entityRef={props.member}
title={displayName}
/>
</Typography>
{profile?.email && (
<Link to={`mailto:${profile.email}`}>
<OverflowTooltip text={profile.email} />
</Link>
)}
{description && (
<Typography variant="subtitle2">{description}</Typography>
)}
</Box>
</Box>
</Grid>
</Box>
);
};
@@ -134,6 +139,7 @@ export const MembersListCard = (props: {
pageSize?: number;
showAggregateMembersToggle?: boolean;
}) => {
const classes = useStyles();
const {
memberDisplayTitle = 'Members',
pageSize = 50,
@@ -219,6 +225,25 @@ export const MembersListCard = (props: {
/>
);
let memberList: React.JSX.Element;
if (members && members.length > 0) {
memberList = (
<Box className={classes.cardGrid}>
{members.slice(pageSize * (page - 1), pageSize * page).map(member => (
<MemberComponent member={member} key={member.metadata.uid} />
))}
</Box>
);
} else {
memberList = (
<Box p={2}>
<Typography>
This group has no {memberDisplayTitle.toLocaleLowerCase()}.
</Typography>
</Box>
);
}
return (
<Grid item className={classes.root}>
<InfoCard
@@ -247,21 +272,7 @@ export const MembersListCard = (props: {
{showAggregateMembers && loadingDescendantMembers ? (
<Progress />
) : (
<Grid container spacing={3}>
{members && members.length > 0 ? (
members
.slice(pageSize * (page - 1), pageSize * page)
.map(member => (
<MemberComponent member={member} key={member.metadata.uid} />
))
) : (
<Box p={2}>
<Typography>
This group has no {memberDisplayTitle.toLocaleLowerCase()}.
</Typography>
</Box>
)}
</Grid>
memberList
)}
</InfoCard>
</Grid>