mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-25 00:07:47 +01:00
122 lines
3.6 KiB
TypeScript
122 lines
3.6 KiB
TypeScript
|
import {
|
||
|
Button,
|
||
|
MenuItem,
|
||
|
Select,
|
||
|
TextField,
|
||
|
Typography,
|
||
|
styled,
|
||
|
} from '@mui/material';
|
||
|
import { GO_BACK } from 'constants/navigate';
|
||
|
import { CreateButton } from 'component/common/CreateButton/CreateButton';
|
||
|
import { CREATE_PROJECT } from 'component/providers/AccessProvider/permissions';
|
||
|
import { useNavigate } from 'react-router-dom';
|
||
|
|
||
|
const StyledForm = styled('form')(({ theme }) => ({
|
||
|
background: theme.palette.background.default,
|
||
|
}));
|
||
|
|
||
|
const StyledFormSection = styled('div')(({ theme }) => ({
|
||
|
'& + *': {
|
||
|
borderBlockStart: `1px solid ${theme.palette.divider}`,
|
||
|
},
|
||
|
|
||
|
padding: theme.spacing(7),
|
||
|
}));
|
||
|
|
||
|
const TopGrid = styled(StyledFormSection)(({ theme }) => ({
|
||
|
display: 'grid',
|
||
|
gridTemplateAreas:
|
||
|
'"icon header template" "icon project-name project-name" "icon description description"',
|
||
|
gridTemplateColumns: 'minmax(auto, 50px) 1fr auto',
|
||
|
gap: theme.spacing(2),
|
||
|
}));
|
||
|
|
||
|
const StyledIcon = styled('span')(({ theme }) => ({
|
||
|
border: `1px solid ${theme.palette.primary.main}`,
|
||
|
width: `100%`,
|
||
|
aspectRatio: '1',
|
||
|
borderRadius: theme.shape.borderRadius,
|
||
|
}));
|
||
|
|
||
|
const StyledHeader = styled(Typography)(({ theme }) => ({
|
||
|
gridArea: 'header',
|
||
|
}));
|
||
|
|
||
|
const StyledTemplateSelector = styled(Select)(({ theme }) => ({
|
||
|
gridArea: 'template',
|
||
|
}));
|
||
|
|
||
|
const StyledInput = styled(TextField)(({ theme }) => ({
|
||
|
width: '100%',
|
||
|
margin: 0,
|
||
|
fieldset: { border: 'none' },
|
||
|
}));
|
||
|
|
||
|
const StyledProjectName = styled(StyledInput)(({ theme }) => ({
|
||
|
gridArea: 'project-name',
|
||
|
'*': { fontSize: theme.typography.h1.fontSize },
|
||
|
}));
|
||
|
|
||
|
const StyledProjectDescription = styled(StyledInput)(({ theme }) => ({
|
||
|
gridArea: 'description',
|
||
|
'*': { fontSize: theme.typography.h2.fontSize },
|
||
|
}));
|
||
|
|
||
|
const OptionButtons = styled(StyledFormSection)(({ theme }) => ({
|
||
|
display: 'flex',
|
||
|
gap: theme.spacing(2),
|
||
|
}));
|
||
|
|
||
|
const FormActions = styled(StyledFormSection)(({ theme }) => ({
|
||
|
display: 'flex',
|
||
|
gap: theme.spacing(5),
|
||
|
justifyContent: 'flex-end',
|
||
|
}));
|
||
|
|
||
|
const CREATE_PROJECT_BTN = 'CREATE_PROJECT_BTN';
|
||
|
|
||
|
export const NewProjectForm = () => {
|
||
|
const navigate = useNavigate();
|
||
|
|
||
|
const handleCancel = () => {
|
||
|
navigate(GO_BACK);
|
||
|
};
|
||
|
|
||
|
return (
|
||
|
<StyledForm>
|
||
|
<TopGrid>
|
||
|
<StyledIcon>icon</StyledIcon>
|
||
|
<StyledHeader variant='h2'>New project</StyledHeader>
|
||
|
<StyledTemplateSelector
|
||
|
id='template-selector'
|
||
|
value={'none'}
|
||
|
label='Project creation template'
|
||
|
name='Project creation template'
|
||
|
>
|
||
|
<MenuItem value={'none'}>No template</MenuItem>
|
||
|
</StyledTemplateSelector>
|
||
|
<StyledProjectName label='Project name' required />
|
||
|
<StyledProjectDescription
|
||
|
label='Description (optional)'
|
||
|
multiline
|
||
|
/>
|
||
|
</TopGrid>
|
||
|
<OptionButtons>
|
||
|
<Button variant='outlined'>4 selected</Button>
|
||
|
<Button variant='outlined'>clientId</Button>
|
||
|
<Button variant='outlined'>Open</Button>
|
||
|
<Button variant='outlined'>1 environment configured</Button>
|
||
|
</OptionButtons>
|
||
|
<FormActions>
|
||
|
<Button onClick={handleCancel}>Cancel</Button>
|
||
|
|
||
|
<CreateButton
|
||
|
name='project'
|
||
|
permission={CREATE_PROJECT}
|
||
|
data-testid={CREATE_PROJECT_BTN}
|
||
|
/>
|
||
|
</FormActions>
|
||
|
</StyledForm>
|
||
|
);
|
||
|
};
|