diff --git a/packages/client/src/pages/projects/NewProject.tsx b/packages/client/src/pages/projects/NewProject.tsx index 7158e448..705d8386 100644 --- a/packages/client/src/pages/projects/NewProject.tsx +++ b/packages/client/src/pages/projects/NewProject.tsx @@ -1,5 +1,5 @@ import { useNavigate } from 'react-router-dom'; -import { Button, Typography } from '@mui/material'; +import { Button } from '@mui/material'; import { useEffect, useState } from 'react'; import { materialRenderers, materialCells } from '@jsonforms/material-renderers'; import { JsonForms } from '@jsonforms/react'; @@ -7,15 +7,12 @@ import { useCreateProjectMutation, useProjectExistsLazyQuery } from '../../graph import { ErrorObject } from 'ajv'; import { useTranslation } from 'react-i18next'; import { useSnackbar } from '../../context/Snackbar.context'; - -const initialData = { - name: '', - description: '' -}; +import { useProject } from '../../context/Project.context'; +import { ProjectCreate } from '../../graphql/graphql'; export const NewProject: React.FC = () => { const navigate = useNavigate(); - const [data, setData] = useState(initialData); + const [data, setData] = useState({} as any); const [createProject, { error, data: createProjectResults, loading }] = useCreateProjectMutation({ variables: { project: data } }); @@ -23,6 +20,8 @@ export const NewProject: React.FC = () => { const [additionalErrors, setAdditionalErrors] = useState([]); const { t } = useTranslation(); const { pushSnackbarMessage } = useSnackbar(); + const { updateProjectList } = useProject(); + const [valid, setValid] = useState(false); const schema = { type: 'object', @@ -73,13 +72,16 @@ export const NewProject: React.FC = () => { params: { keyword: 'uniqueProjectName' } } ]); + setValid(false); } else { setAdditionalErrors([]); + setValid(true); } }, [projectExistsResults.data]); useEffect(() => { if (createProjectResults) { + updateProjectList(); navigate('/successpage'); } }, [createProjectResults]); @@ -88,6 +90,7 @@ export const NewProject: React.FC = () => { if (error) { pushSnackbarMessage(t('errors.projectCreate'), 'error'); console.error(error); + setValid(false); } }, [error]); @@ -95,6 +98,8 @@ export const NewProject: React.FC = () => { setData(data); if (!errors || errors.length === 0) { projectExistsQuery({ variables: { name: data.name } }); + } else { + setValid(false); } }; @@ -104,11 +109,6 @@ export const NewProject: React.FC = () => { return ( <> - {error && ( - - {t('components.newProject.failMessage')} - - )} { onChange={({ data, errors }) => handleChange(data, errors)} additionalErrors={additionalErrors} /> - diff --git a/packages/server/src/project/project.service.ts b/packages/server/src/project/project.service.ts index 6531707a..88dd255a 100644 --- a/packages/server/src/project/project.service.ts +++ b/packages/server/src/project/project.service.ts @@ -7,7 +7,6 @@ import { CASBIN_PROVIDER } from '../permission/casbin.provider'; import * as casbin from 'casbin'; import { TokenPayload } from 'src/jwt/token.dto'; import { ProjectPermissions } from 'src/permission/permissions/project'; -import { Roles } from 'src/permission/permissions/roles'; @Injectable() export class ProjectService { @@ -47,6 +46,7 @@ export class ProjectService { } async findAllForUser(user: TokenPayload, organization: string): Promise { + await this.enforcer.loadPolicy(); const projects = await this.findAll(organization); const allowedProjects: Project[] = []; for (const project of projects) {