mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-23 00:22:19 +01:00
feat: cr overview title (#3516)
This commit is contained in:
parent
5d31d26530
commit
6874df66f0
@ -1,32 +1,42 @@
|
|||||||
import { Box } from '@mui/material';
|
import { Box } from '@mui/material';
|
||||||
import { FC } from 'react';
|
import React, { FC, useState } from 'react';
|
||||||
import { Typography, Tooltip } from '@mui/material';
|
import { Typography, Tooltip } from '@mui/material';
|
||||||
import TimeAgo from 'react-timeago';
|
import TimeAgo from 'react-timeago';
|
||||||
import { IChangeRequest } from 'component/changeRequest/changeRequest.types';
|
import { IChangeRequest } from 'component/changeRequest/changeRequest.types';
|
||||||
import { ChangeRequestStatusBadge } from 'component/changeRequest/ChangeRequestStatusBadge/ChangeRequestStatusBadge';
|
import { ChangeRequestStatusBadge } from 'component/changeRequest/ChangeRequestStatusBadge/ChangeRequestStatusBadge';
|
||||||
import {
|
import {
|
||||||
StyledPaper,
|
StyledPaper,
|
||||||
StyledContainer,
|
|
||||||
StyledHeader,
|
StyledHeader,
|
||||||
StyledInnerContainer,
|
StyledInnerContainer,
|
||||||
StyledAvatar,
|
StyledAvatar,
|
||||||
StyledCard,
|
StyledCard,
|
||||||
} from './ChangeRequestHeader.styles';
|
} from './ChangeRequestHeader.styles';
|
||||||
import { Separator } from '../../ChangeRequestSidebar/ChangeRequestSidebar';
|
import { Separator } from '../../ChangeRequestSidebar/ChangeRequestSidebar';
|
||||||
|
import { ChangeRequestTitle } from '../../ChangeRequestSidebar/EnvironmentChangeRequest/ChangeRequestTitle';
|
||||||
|
|
||||||
export const ChangeRequestHeader: FC<{ changeRequest: IChangeRequest }> = ({
|
export const ChangeRequestHeader: FC<{ changeRequest: IChangeRequest }> = ({
|
||||||
changeRequest,
|
changeRequest,
|
||||||
}) => {
|
}) => {
|
||||||
|
const [title, setTitle] = useState(changeRequest.title);
|
||||||
return (
|
return (
|
||||||
<StyledPaper elevation={0}>
|
<StyledPaper elevation={0}>
|
||||||
<StyledContainer>
|
<ChangeRequestTitle
|
||||||
|
environmentChangeRequest={changeRequest}
|
||||||
|
title={title}
|
||||||
|
setTitle={setTitle}
|
||||||
|
>
|
||||||
<StyledHeader variant="h1" sx={{ mr: 1.5 }}>
|
<StyledHeader variant="h1" sx={{ mr: 1.5 }}>
|
||||||
Change request #{changeRequest.id}
|
{title}
|
||||||
</StyledHeader>
|
</StyledHeader>
|
||||||
<ChangeRequestStatusBadge state={changeRequest.state} />
|
</ChangeRequestTitle>
|
||||||
</StyledContainer>
|
|
||||||
<StyledInnerContainer>
|
<StyledInnerContainer>
|
||||||
<Typography variant="body2" sx={{ margin: 'auto 0' }}>
|
<ChangeRequestStatusBadge state={changeRequest.state} />
|
||||||
|
<Typography
|
||||||
|
variant="body2"
|
||||||
|
sx={theme => ({
|
||||||
|
margin: theme.spacing('auto', 0, 'auto', 2),
|
||||||
|
})}
|
||||||
|
>
|
||||||
Created{' '}
|
Created{' '}
|
||||||
<TimeAgo
|
<TimeAgo
|
||||||
minPeriod={60}
|
minPeriod={60}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import React, { FC, useState } from 'react';
|
import React, { FC, useState } from 'react';
|
||||||
import { Box, Button, IconButton, styled } from '@mui/material';
|
import { Box, Button, IconButton, styled, Typography } from '@mui/material';
|
||||||
import Input from 'component/common/Input/Input';
|
import Input from 'component/common/Input/Input';
|
||||||
import { IChangeRequest } from '../../changeRequest.types';
|
import { IChangeRequest } from '../../changeRequest.types';
|
||||||
import { Edit } from '@mui/icons-material';
|
import { Edit } from '@mui/icons-material';
|
||||||
@ -14,12 +14,21 @@ const StyledBox = styled(Box)(({ theme }) => ({
|
|||||||
width: '100%',
|
width: '100%',
|
||||||
'& > div': { width: '100%' },
|
'& > div': { width: '100%' },
|
||||||
justifyContent: 'space-between',
|
justifyContent: 'space-between',
|
||||||
|
marginBottom: theme.spacing(1),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export const EnvironmentChangeRequestTitle: FC<{
|
export const StyledHeader = styled(Typography)(({ theme }) => ({
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
marginRight: theme.spacing(1),
|
||||||
|
fontSize: theme.fontSizes.mainHeader,
|
||||||
|
}));
|
||||||
|
|
||||||
|
export const ChangeRequestTitle: FC<{
|
||||||
environmentChangeRequest: IChangeRequest;
|
environmentChangeRequest: IChangeRequest;
|
||||||
}> = ({ environmentChangeRequest }) => {
|
title: string;
|
||||||
const [title, setTitle] = useState(environmentChangeRequest.title);
|
setTitle: React.Dispatch<React.SetStateAction<string>>;
|
||||||
|
}> = ({ environmentChangeRequest, title, setTitle, children }) => {
|
||||||
const [isDisabled, setIsDisabled] = useState(true);
|
const [isDisabled, setIsDisabled] = useState(true);
|
||||||
const { updateTitle } = useChangeRequestApi();
|
const { updateTitle } = useChangeRequestApi();
|
||||||
const { setToastData, setToastApiError } = useToast();
|
const { setToastData, setToastApiError } = useToast();
|
||||||
@ -46,6 +55,10 @@ export const EnvironmentChangeRequestTitle: FC<{
|
|||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<StyledBox>
|
<StyledBox>
|
||||||
|
<ConditionallyRender
|
||||||
|
condition={isDisabled}
|
||||||
|
show={children}
|
||||||
|
elseShow={
|
||||||
<Input
|
<Input
|
||||||
label="Change request title"
|
label="Change request title"
|
||||||
id="group-name"
|
id="group-name"
|
||||||
@ -54,6 +67,8 @@ export const EnvironmentChangeRequestTitle: FC<{
|
|||||||
onChange={e => setTitle(e.target.value)}
|
onChange={e => setTitle(e.target.value)}
|
||||||
disabled={isDisabled}
|
disabled={isDisabled}
|
||||||
/>
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
<ConditionallyRender
|
<ConditionallyRender
|
||||||
condition={isDisabled}
|
condition={isDisabled}
|
||||||
show={
|
show={
|
||||||
@ -69,7 +84,7 @@ export const EnvironmentChangeRequestTitle: FC<{
|
|||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant="contained"
|
||||||
color="primary"
|
color="primary"
|
||||||
sx={theme => ({ marginLeft: theme.spacing(4) })}
|
sx={theme => ({ marginLeft: theme.spacing(2) })}
|
||||||
onClick={() => saveTitle()}
|
onClick={() => saveTitle()}
|
||||||
>
|
>
|
||||||
Save
|
Save
|
@ -21,7 +21,8 @@ import {
|
|||||||
import { CloudCircle } from '@mui/icons-material';
|
import { CloudCircle } from '@mui/icons-material';
|
||||||
import { AddCommentField } from '../../ChangeRequestOverview/ChangeRequestComments/AddCommentField';
|
import { AddCommentField } from '../../ChangeRequestOverview/ChangeRequestComments/AddCommentField';
|
||||||
import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser';
|
import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser';
|
||||||
import { EnvironmentChangeRequestTitle } from './EnvironmentChangeRequestTitle';
|
import Input from 'component/common/Input/Input';
|
||||||
|
import { ChangeRequestTitle } from './ChangeRequestTitle';
|
||||||
|
|
||||||
const SubmitChangeRequestButton: FC<{ onClick: () => void; count: number }> = ({
|
const SubmitChangeRequestButton: FC<{ onClick: () => void; count: number }> = ({
|
||||||
onClick,
|
onClick,
|
||||||
@ -43,7 +44,7 @@ const ChangeRequestHeader = styled(Box)(({ theme }) => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
const ChangeRequestContent = styled(Box)(({ theme }) => ({
|
const ChangeRequestContent = styled(Box)(({ theme }) => ({
|
||||||
padding: theme.spacing(0, 3, 3, 3),
|
padding: theme.spacing(3, 3, 3, 3),
|
||||||
border: '2px solid',
|
border: '2px solid',
|
||||||
mb: 5,
|
mb: 5,
|
||||||
borderColor: theme.palette.divider,
|
borderColor: theme.palette.divider,
|
||||||
@ -62,6 +63,7 @@ export const EnvironmentChangeRequest: FC<{
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [commentText, setCommentText] = useState('');
|
const [commentText, setCommentText] = useState('');
|
||||||
const { user } = useAuthUser();
|
const { user } = useAuthUser();
|
||||||
|
const [title, setTitle] = useState(environmentChangeRequest.title);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box key={environmentChangeRequest.id}>
|
<Box key={environmentChangeRequest.id}>
|
||||||
@ -94,9 +96,20 @@ export const EnvironmentChangeRequest: FC<{
|
|||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
<Divider sx={{ my: 3 }} />
|
<Divider sx={{ my: 3 }} />
|
||||||
<EnvironmentChangeRequestTitle
|
<ChangeRequestTitle
|
||||||
environmentChangeRequest={environmentChangeRequest}
|
environmentChangeRequest={environmentChangeRequest}
|
||||||
|
title={title}
|
||||||
|
setTitle={setTitle}
|
||||||
|
>
|
||||||
|
<Input
|
||||||
|
label="Change request title"
|
||||||
|
id="group-name"
|
||||||
|
fullWidth
|
||||||
|
value={title}
|
||||||
|
onChange={() => {}}
|
||||||
|
disabled={true}
|
||||||
/>
|
/>
|
||||||
|
</ChangeRequestTitle>
|
||||||
</ChangeRequestHeader>
|
</ChangeRequestHeader>
|
||||||
<ChangeRequestContent>
|
<ChangeRequestContent>
|
||||||
<Typography variant="body2" color="text.secondary">
|
<Typography variant="body2" color="text.secondary">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React, { FC, useState } from 'react';
|
||||||
import { screen } from '@testing-library/react';
|
import { screen } from '@testing-library/react';
|
||||||
import { EnvironmentChangeRequestTitle } from './EnvironmentChangeRequestTitle';
|
import { ChangeRequestTitle } from './ChangeRequestTitle';
|
||||||
import { ChangeRequestState } from '../../changeRequest.types';
|
import { ChangeRequestState } from '../../changeRequest.types';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { testServerRoute, testServerSetup } from '../../../../utils/testServer';
|
import { testServerRoute, testServerSetup } from '../../../../utils/testServer';
|
||||||
@ -32,14 +32,25 @@ testServerRoute(
|
|||||||
|
|
||||||
testServerRoute(server, '/api/admin/ui-config', {});
|
testServerRoute(server, '/api/admin/ui-config', {});
|
||||||
|
|
||||||
|
const TestComponent: FC = () => {
|
||||||
|
const [title, setTitle] = useState(changeRequest.title);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ChangeRequestTitle
|
||||||
|
environmentChangeRequest={changeRequest}
|
||||||
|
title={title}
|
||||||
|
setTitle={setTitle}
|
||||||
|
>
|
||||||
|
<h1>{title}</h1>
|
||||||
|
</ChangeRequestTitle>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
test('can edit and save title', async () => {
|
test('can edit and save title', async () => {
|
||||||
const user = userEvent.setup();
|
const user = userEvent.setup();
|
||||||
|
|
||||||
render(
|
render(
|
||||||
<UIProviderContainer>
|
<UIProviderContainer>
|
||||||
<EnvironmentChangeRequestTitle
|
<TestComponent />
|
||||||
environmentChangeRequest={changeRequest}
|
|
||||||
/>
|
|
||||||
</UIProviderContainer>
|
</UIProviderContainer>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -53,6 +64,6 @@ test('can edit and save title', async () => {
|
|||||||
const saveButton = await screen.findByText('Save');
|
const saveButton = await screen.findByText('Save');
|
||||||
await user.click(saveButton);
|
await user.click(saveButton);
|
||||||
|
|
||||||
const newTitle = await screen.findByDisplayValue('New title');
|
const newTitle = await screen.findByText('New title');
|
||||||
expect(newTitle).toBeInTheDocument();
|
expect(newTitle).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user