1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-19 17:52:45 +02:00

refactor: extract YourAdmins component

This commit is contained in:
Thomas Heartman 2024-10-14 13:58:24 +02:00
parent 9d49070cee
commit e6abaaccfb
No known key found for this signature in database
GPG Key ID: BD1F880DAED1EE78
3 changed files with 64 additions and 55 deletions

View File

@ -1,6 +1,5 @@
import { Typography, styled } from '@mui/material'; import { Typography, styled } from '@mui/material';
import { AvatarGroupFromOwners } from 'component/common/AvatarGroupFromOwners/AvatarGroupFromOwners'; import { AvatarGroupFromOwners } from 'component/common/AvatarGroupFromOwners/AvatarGroupFromOwners';
import { UserAvatar } from 'component/common/UserAvatar/UserAvatar';
import type { PersonalDashboardSchemaAdminsItem } from 'openapi/models/personalDashboardSchemaAdminsItem'; import type { PersonalDashboardSchemaAdminsItem } from 'openapi/models/personalDashboardSchemaAdminsItem';
import type { PersonalDashboardSchemaProjectOwnersItem } from 'openapi/models/personalDashboardSchemaProjectOwnersItem'; import type { PersonalDashboardSchemaProjectOwnersItem } from 'openapi/models/personalDashboardSchemaProjectOwnersItem';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
@ -10,6 +9,7 @@ import {
ProjectGrid, ProjectGrid,
GridItem, GridItem,
} from './SharedComponents'; } from './SharedComponents';
import { YourAdmins } from './YourAdmins';
const PaddedEmptyGridItem = styled(EmptyGridItem)(({ theme }) => ({ const PaddedEmptyGridItem = styled(EmptyGridItem)(({ theme }) => ({
padding: theme.spacing(4), padding: theme.spacing(4),
@ -48,62 +48,11 @@ const BoxMainContent = styled('article')(({ theme }) => ({
gap: theme.spacing(2), gap: theme.spacing(2),
})); }));
const AdminList = styled('ul')(({ theme }) => ({
padding: 0,
'li + li': {
marginTop: theme.spacing(2),
},
}));
const AdminListItem = styled('li')(({ theme }) => ({
display: 'flex',
flexFlow: 'row',
gap: theme.spacing(2),
}));
type Props = { type Props = {
owners: PersonalDashboardSchemaProjectOwnersItem[]; owners: PersonalDashboardSchemaProjectOwnersItem[];
admins: PersonalDashboardSchemaAdminsItem[]; admins: PersonalDashboardSchemaAdminsItem[];
}; };
export const AdminListRendered: React.FC<Pick<Props, 'admins'>> = ({
admins,
}) => {
return (
<BoxMainContent>
{admins.length ? (
<>
<p>
Your Unleash administrator
{admins.length > 1 ? 's are' : ' is'}:
</p>
<AdminList>
{admins.map((admin) => {
return (
<AdminListItem key={admin.id}>
<UserAvatar
sx={{
margin: 0,
}}
user={admin}
/>
<Typography>
{admin.name ||
admin.username ||
admin.email}
</Typography>
</AdminListItem>
);
})}
</AdminList>
</>
) : (
<p>You have no Unleash administrators to contact.</p>
)}
</BoxMainContent>
);
};
export const ContentGridNoProjects: React.FC<Props> = ({ owners, admins }) => { export const ContentGridNoProjects: React.FC<Props> = ({ owners, admins }) => {
return ( return (
<ContentGridContainer> <ContentGridContainer>
@ -130,7 +79,7 @@ export const ContentGridNoProjects: React.FC<Props> = ({ owners, admins }) => {
<NeutralCircleContainer>1</NeutralCircleContainer> <NeutralCircleContainer>1</NeutralCircleContainer>
Contact Unleash admin Contact Unleash admin
</TitleContainer> </TitleContainer>
<AdminListRendered admins={admins} /> <YourAdmins admins={admins} />
</GridContent> </GridContent>
</GridItem> </GridItem>
<GridItem gridArea='box2'> <GridItem gridArea='box2'>

View File

@ -1,7 +1,7 @@
import { styled } from '@mui/material'; import { styled } from '@mui/material';
import type { PersonalDashboardSchemaAdminsItem } from 'openapi'; import type { PersonalDashboardSchemaAdminsItem } from 'openapi';
import type { FC } from 'react'; import type { FC } from 'react';
import { AdminListRendered } from './ContentGridNoProjects'; import { YourAdmins } from './YourAdmins';
const TitleContainer = styled('div')(({ theme }) => ({ const TitleContainer = styled('div')(({ theme }) => ({
display: 'flex', display: 'flex',
@ -48,7 +48,7 @@ export const ContactAdmins: FC<{
<TitleContainer> <TitleContainer>
Consider contacting one of your Unleash admins for help. Consider contacting one of your Unleash admins for help.
</TitleContainer> </TitleContainer>
<AdminListRendered admins={admins} /> <YourAdmins admins={admins} />
</ActionBox> </ActionBox>
); );
}; };

View File

@ -0,0 +1,60 @@
import { UserAvatar } from 'component/common/UserAvatar/UserAvatar';
import { Typography, styled } from '@mui/material';
import type { PersonalDashboardSchemaAdminsItem } from 'openapi';
const StyledList = styled('ul')(({ theme }) => ({
padding: 0,
'li + li': {
marginTop: theme.spacing(2),
},
}));
const StyledListItem = styled('li')(({ theme }) => ({
display: 'flex',
flexFlow: 'row',
gap: theme.spacing(2),
}));
const Wrapper = styled('article')(({ theme }) => ({
display: 'flex',
flexFlow: 'column',
gap: theme.spacing(2),
}));
export const YourAdmins: React.FC<{
admins: PersonalDashboardSchemaAdminsItem[];
}> = ({ admins }) => {
return (
<Wrapper>
{admins.length ? (
<>
<p>
Your Unleash administrator
{admins.length > 1 ? 's are' : ' is'}:
</p>
<StyledList>
{admins.map((admin) => {
return (
<StyledListItem key={admin.id}>
<UserAvatar
sx={{
margin: 0,
}}
user={admin}
/>
<Typography>
{admin.name ||
admin.username ||
admin.email}
</Typography>
</StyledListItem>
);
})}
</StyledList>
</>
) : (
<p>You have no Unleash administrators to contact.</p>
)}
</Wrapper>
);
};