diff --git a/frontend/src/component/project/Project/CreateProject/CreateProject.tsx b/frontend/src/component/project/Project/CreateProject/CreateProject.tsx index a9b5e6c528..7324dfdc22 100644 --- a/frontend/src/component/project/Project/CreateProject/CreateProject.tsx +++ b/frontend/src/component/project/Project/CreateProject/CreateProject.tsx @@ -1,5 +1,6 @@ import { useNavigate } from 'react-router-dom'; import ProjectForm from '../ProjectForm/ProjectForm'; +import { NewProjectForm } from './NewProjectForm'; import useProjectForm, { DEFAULT_PROJECT_STICKINESS, } from '../hooks/useProjectForm'; @@ -14,6 +15,7 @@ import { formatUnknownError } from 'utils/formatUnknownError'; import { GO_BACK } from 'constants/navigate'; import { usePlausibleTracker } from 'hooks/usePlausibleTracker'; import { Button, styled } from '@mui/material'; +import { useUiFlag } from 'hooks/useUiFlag'; const CREATE_PROJECT_BTN = 'CREATE_PROJECT_BTN'; @@ -45,6 +47,8 @@ const CreateProject = () => { errors, } = useProjectForm(); + const useNewProjectForm = useUiFlag('newCreateProjectUI'); + const { createProject, loading } = useProjectApi(); const handleSubmit = async (e: Event) => { @@ -89,6 +93,21 @@ const CreateProject = () => { navigate(GO_BACK); }; + if (useNewProjectForm) { + return ( + + + + ); + } + return ( ({ + 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 ( + + + icon + New project + + No template + + + + + + + + + + + + + + + + + ); +};