From 46bcb2189ad44cd39cb68f59bbba27ef19803b7d Mon Sep 17 00:00:00 2001 From: royallsilwallz Date: Wed, 1 May 2024 10:26:56 +0545 Subject: [PATCH 1/4] Validate empty project name while creating project --- frontend/src/components/projectCreate/index.js | 4 ++++ frontend/src/components/projectCreate/messages.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/frontend/src/components/projectCreate/index.js b/frontend/src/components/projectCreate/index.js index d5cb5cb31c..7d50966494 100644 --- a/frontend/src/components/projectCreate/index.js +++ b/frontend/src/components/projectCreate/index.js @@ -191,6 +191,10 @@ const ProjectCreate = () => { const handleCreate = useCallback( (cloneProjectData) => { + if (!metadata.projectName.trim()) { + setErr({ error: true, message: intl.formatMessage(messages.noProjectName) }); + throw new Error('Missing project name.'); + } if (!metadata.geom) { setErr({ error: true, message: intl.formatMessage(messages.noGeometry) }); throw new Error('Missing geom.'); diff --git a/frontend/src/components/projectCreate/messages.js b/frontend/src/components/projectCreate/messages.js index 2b57df0e1d..d574727764 100644 --- a/frontend/src/components/projectCreate/messages.js +++ b/frontend/src/components/projectCreate/messages.js @@ -123,6 +123,10 @@ export default defineMessages({ id: 'management.projects.create.errors.closed_linestring', defaultMessage: 'Points do not form a closed linestring', }, + noProjectName: { + id: 'management.projects.create.errors.no_project_name', + defaultMessage: 'Name is a required field.', + }, noGeometry: { id: 'management.projects.create.errors.no_geometry', defaultMessage: "You need to define the project's area of interest.", From df967cb7b21fd1abd66d1802aef2bfba497a5fc9 Mon Sep 17 00:00:00 2001 From: royallsilwallz Date: Wed, 1 May 2024 10:27:25 +0545 Subject: [PATCH 2/4] Validate symbols and number in first charater of project name --- frontend/src/components/projectCreate/index.js | 4 ++++ frontend/src/components/projectCreate/messages.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/frontend/src/components/projectCreate/index.js b/frontend/src/components/projectCreate/index.js index 7d50966494..066c66b914 100644 --- a/frontend/src/components/projectCreate/index.js +++ b/frontend/src/components/projectCreate/index.js @@ -195,6 +195,10 @@ const ProjectCreate = () => { setErr({ error: true, message: intl.formatMessage(messages.noProjectName) }); throw new Error('Missing project name.'); } + if (!/^[a-zA-Z]/.test(metadata.projectName)) { + setErr({ error: true, message: intl.formatMessage(messages.projectNameValidationError) }); + throw new Error('Project name validation error.'); + } if (!metadata.geom) { setErr({ error: true, message: intl.formatMessage(messages.noGeometry) }); throw new Error('Missing geom.'); diff --git a/frontend/src/components/projectCreate/messages.js b/frontend/src/components/projectCreate/messages.js index d574727764..5b82a8a31d 100644 --- a/frontend/src/components/projectCreate/messages.js +++ b/frontend/src/components/projectCreate/messages.js @@ -127,6 +127,10 @@ export default defineMessages({ id: 'management.projects.create.errors.no_project_name', defaultMessage: 'Name is a required field.', }, + projectNameValidationError: { + id: 'management.projects.create.errors.project_name_validation_error', + defaultMessage: 'Project name should start with an alphabet.', + }, noGeometry: { id: 'management.projects.create.errors.no_geometry', defaultMessage: "You need to define the project's area of interest.", From 532d84af4040c20b4f6ee1236f8dd06428af8e24 Mon Sep 17 00:00:00 2001 From: royallsilwallz Date: Mon, 6 May 2024 14:44:08 +0545 Subject: [PATCH 3/4] Validate empty project name while editing project --- frontend/src/views/projectEdit.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/projectEdit.js b/frontend/src/views/projectEdit.js index 1bcc2ded81..a4491a454b 100644 --- a/frontend/src/views/projectEdit.js +++ b/frontend/src/views/projectEdit.js @@ -121,7 +121,9 @@ export function ProjectEdit() { }); } else { const mandatoryFieldsMissing = mandatoryFields.filter( - (m) => Object.keys(defaultLocaleInfo).includes(m) === false || defaultLocaleInfo[m] === '', + (m) => + Object.keys(defaultLocaleInfo).includes(m) === false || + defaultLocaleInfo[m].trim() === '', ); if (mandatoryFieldsMissing.length) { missingFields.push({ @@ -130,7 +132,6 @@ export function ProjectEdit() { }); } } - const nonLocaleMissingFields = []; if (projectInfo.mappingTypes.length === 0) nonLocaleMissingFields.push('mappingTypes'); const { mappingEditors, validationEditors, customEditor } = projectInfo; From ec2a3fcb420dd3b754291800d230fd4040861205 Mon Sep 17 00:00:00 2001 From: royallsilwallz Date: Tue, 7 May 2024 09:33:46 +0545 Subject: [PATCH 4/4] Validate symbols and number in first charater of project name during edit --- .../src/components/projectEdit/messages.js | 3 +++ frontend/src/views/projectEdit.js | 20 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/projectEdit/messages.js b/frontend/src/components/projectEdit/messages.js index 31043f0dd4..ad4a24a3f0 100644 --- a/frontend/src/components/projectEdit/messages.js +++ b/frontend/src/components/projectEdit/messages.js @@ -1,5 +1,7 @@ import { defineMessages } from 'react-intl'; +import projectCreateMessages from '../projectCreate/messages'; + /** * Internationalized messages for use on project edit. */ @@ -439,6 +441,7 @@ export default defineMessages({ id: 'projects.formInputs.name', defaultMessage: 'Name of the project', }, + projectNameValidationError: { ...projectCreateMessages.projectNameValidationError }, dueDate: { id: 'projects.formInputs.dueDate', defaultMessage: 'Due date', diff --git a/frontend/src/views/projectEdit.js b/frontend/src/views/projectEdit.js index a4491a454b..e34dff1f0a 100644 --- a/frontend/src/views/projectEdit.js +++ b/frontend/src/views/projectEdit.js @@ -161,7 +161,17 @@ export function ProjectEdit() { ) { missingFields.push({ type: 'noTeamsAssigned' }); } - + // validate name + if (!missingFields?.[0]?.fields?.includes('name')) { + const projectName = defaultLocaleInfo.name; + if (!/^[a-zA-Z]/.test(projectName)) { + missingFields.push({ + locale: projectInfo.defaultLocale, + fields: ['projectNameValidationError'], + type: 'nameValidationError', + }); + } + } if (missingFields.length > 0) { setError(missingFields); return new Promise((resolve, reject) => reject()); @@ -351,6 +361,14 @@ const ErrorTitle = ({ locale, numberOfMissingFields, type, projectInfo }) => { /> ); } + if (type === 'nameValidationError') { + return ( + + ); + } if (locale === null) { return (