diff --git a/package-lock.json b/package-lock.json index e559e8400..7715e01ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@devtron-labs/devtron-fe-common-lib", - "version": "1.14.1-pre-6", + "version": "1.14.1-pre-7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@devtron-labs/devtron-fe-common-lib", - "version": "1.14.1-pre-6", + "version": "1.14.1-pre-7", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 07b7862cb..e86923f23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@devtron-labs/devtron-fe-common-lib", - "version": "1.14.1-pre-6", + "version": "1.14.1-pre-7", "description": "Supporting common component library", "type": "module", "main": "dist/index.js", diff --git a/src/Assets/IconV2/ic-email.svg b/src/Assets/IconV2/ic-email.svg new file mode 100644 index 000000000..27c3e1fd8 --- /dev/null +++ b/src/Assets/IconV2/ic-email.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/Common/Constants.ts b/src/Common/Constants.ts index 3243f76c2..09012d7dc 100644 --- a/src/Common/Constants.ts +++ b/src/Common/Constants.ts @@ -41,6 +41,7 @@ export const PATTERNS = { CONFIG_MAP_AND_SECRET_KEY: /^[-._a-zA-Z0-9]+$/, CONFIGMAP_AND_SECRET_NAME: /^[a-z0-9][a-z0-9-.]*[a-z0-9]$/, ALPHANUMERIC_WITH_SPECIAL_CHAR_AND_SLASH: /^[A-Za-z0-9._/-]+$/, // allow alphanumeric,(.) ,(-),(_),(/) + EMAIL: /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, } const GLOBAL_CONFIG_TEMPLATES_DEVTRON_APP = '/global-config/templates/devtron-apps' diff --git a/src/Shared/Components/Icon/Icon.tsx b/src/Shared/Components/Icon/Icon.tsx index 9fb4e2049..d406cedd7 100644 --- a/src/Shared/Components/Icon/Icon.tsx +++ b/src/Shared/Components/Icon/Icon.tsx @@ -59,6 +59,7 @@ import { ReactComponent as ICDiscordFill } from '@IconsV2/ic-discord-fill.svg' import { ReactComponent as ICDockerhub } from '@IconsV2/ic-dockerhub.svg' import { ReactComponent as ICEcr } from '@IconsV2/ic-ecr.svg' import { ReactComponent as ICEdit } from '@IconsV2/ic-edit.svg' +import { ReactComponent as ICEmail } from '@IconsV2/ic-email.svg' import { ReactComponent as ICEnterpriseFeat } from '@IconsV2/ic-enterprise-feat.svg' import { ReactComponent as ICEnterpriseTag } from '@IconsV2/ic-enterprise-tag.svg' import { ReactComponent as ICEnv } from '@IconsV2/ic-env.svg' @@ -223,6 +224,7 @@ export const iconMap = { 'ic-dockerhub': ICDockerhub, 'ic-ecr': ICEcr, 'ic-edit': ICEdit, + 'ic-email': ICEmail, 'ic-enterprise-feat': ICEnterpriseFeat, 'ic-enterprise-tag': ICEnterpriseTag, 'ic-env': ICEnv, diff --git a/src/Shared/validations.tsx b/src/Shared/validations.tsx index 7f2c3cf06..c55244015 100644 --- a/src/Shared/validations.tsx +++ b/src/Shared/validations.tsx @@ -497,3 +497,25 @@ export const validateYAML = (yamlString: string, isRequired?: boolean): Validati } } } + +export const validateEmail = (email: string): ValidationResponseType => { + if (!email) { + return { + isValid: false, + message: 'Email is required', + } + } + + const result = PATTERNS.EMAIL.test(String(email).toLowerCase()) + + if (result) { + return { + isValid: true, + } + } + + return { + isValid: false, + message: 'Please provide a valid email address', + } +}