From 8e382b9246372e8bb99daa7674d77fed072bee14 Mon Sep 17 00:00:00 2001 From: Irakli Chalagashvili Date: Tue, 24 Jan 2023 20:40:59 +0400 Subject: [PATCH 1/2] ENG-4057 let user define custom separator --- src/locales/en.js | 1 + src/locales/it.js | 1 + src/locales/pt.js | 1 + .../attributes/AttributeEnumSettings.js | 29 ++++++++++++++++++- .../attributes/AttributeEnumSettings.test.js | 4 +-- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/locales/en.js b/src/locales/en.js index cc8cb6f1b..c829e94b3 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -973,6 +973,7 @@ export default { 'app.pages.friendlyCodeHelp': 'URL slug for the page. You can insert a max of 100 characters, lowercase letters, including numbers or \'_\' special character.', 'validateForm.friendlyCode': 'Friendly Code must be lowercase letters, including numbers or \'_\' special character.', 'validateForm.friendlyCodeUnique': 'Friendly Code must be unique for all languages.', + 'validateForm.specialCharacter': 'Please choose a single special character from this list: !@#%&_=,:;`', 'app.startTutorial': 'Start Welcome Wizard', 'emailConfig.smtpServer': 'SMTP Server', 'emailConfig.senderMgmt': 'Sender Management', diff --git a/src/locales/it.js b/src/locales/it.js index 008fec2dd..466e17a8c 100644 --- a/src/locales/it.js +++ b/src/locales/it.js @@ -1600,5 +1600,6 @@ export default { 'user.authority.addNew': 'Aggiungi nuova Autorizzazione', 'componentRepository.refreshBundleVersions': 'Aggiorna le versioni disponibili del bundle', 'componentRepository.bundle.installVersionsRefreshed': 'Aggiornato', + 'validateForm.specialCharacter': 'Si prega di scegliere un singolo carattere speciale da questo elenco: !@#%&_=,:;`', }, }; diff --git a/src/locales/pt.js b/src/locales/pt.js index 01b1f3f69..f99b5186f 100644 --- a/src/locales/pt.js +++ b/src/locales/pt.js @@ -1022,5 +1022,6 @@ export default { 'user.authority.addNew': 'Adicionar nova Autorização', 'componentRepository.refreshBundleVersions': 'Atualizar as versões disponíveis do pacote', 'componentRepository.bundle.installVersionsRefreshed': 'Atualizado', + 'validateForm.specialCharacter': 'Escolha um único caractere especial desta lista: !@#%&_=,:;`', }, }; diff --git a/src/ui/common/attributes/AttributeEnumSettings.js b/src/ui/common/attributes/AttributeEnumSettings.js index 4ce74896e..83cdd5498 100644 --- a/src/ui/common/attributes/AttributeEnumSettings.js +++ b/src/ui/common/attributes/AttributeEnumSettings.js @@ -13,6 +13,32 @@ export const element = value => (value && !/^[a-zA-Z0-9_]+(,[a-zA-Z0-9_]+)*$/i.test(value) ? : undefined); +const specialCharRegex = /^[!@#%&_=,:;`]$/; + + +const specialSymbolValidator = (value) => { + if (value && !value.match(specialCharRegex)) { + return ; + } + return undefined; +}; + + +export const separatorValidator = (value, allValues) => { + if (allValues.enumeratorStaticItemsSeparator && value && + allValues.enumeratorStaticItemsSeparator.match(specialCharRegex)) { + const regexp = + new + RegExp(`^([^${allValues.enumeratorStaticItemsSeparator}]+)(${allValues.enumeratorStaticItemsSeparator}([^${allValues.enumeratorStaticItemsSeparator}])+)*$`); + if (!regexp.test(value)) { + return ; + } + return undefined; + } + return undefined; +}; + + const msgs = defineMessages({ help: { id: 'app.enumeratorStaticItems.help', @@ -41,7 +67,7 @@ const AttributeEnumSettings = ({ intl, enumeratorExtractorBeans, mode }) => { } placeholder={intl.formatMessage(msgs.help)} - validate={[required, element]} + validate={[required, separatorValidator]} /> { label={ } + validate={[specialSymbolValidator]} /> { mode === MODE_ADD ? diff --git a/test/ui/common/attributes/AttributeEnumSettings.test.js b/test/ui/common/attributes/AttributeEnumSettings.test.js index 98616492c..a26f5c826 100644 --- a/test/ui/common/attributes/AttributeEnumSettings.test.js +++ b/test/ui/common/attributes/AttributeEnumSettings.test.js @@ -2,7 +2,7 @@ import React from 'react'; import 'test/enzyme-init'; import { mount } from 'enzyme'; -import AttributeEnumSettings, { element as elementValidation } from 'ui/common/attributes/AttributeEnumSettings'; +import AttributeEnumSettings, { separatorValidator } from 'ui/common/attributes/AttributeEnumSettings'; import RenderTextInput from 'ui/common/form/RenderTextInput'; import RenderSelectInput from 'ui/common/form/RenderSelectInput'; import { required } from '@entando/utils'; @@ -30,7 +30,7 @@ describe('AttributeEnumSettings', () => { expect(element.exists()).toBe(true); const props = element.props(); expect(props).toHaveProperty('component', RenderTextInput); - expect(props).toHaveProperty('validate', [required, elementValidation]); + expect(props).toHaveProperty('validate', [required, separatorValidator]); }); it('has a enumeratorExtractorBean select field', () => { From b0513e1f8073afbd639364bcd0e6e898b4480fbf Mon Sep 17 00:00:00 2001 From: Irakli Chalagashvili Date: Tue, 24 Jan 2023 20:46:47 +0400 Subject: [PATCH 2/2] ENG-4057 fix english error text --- src/locales/en.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/en.js b/src/locales/en.js index c829e94b3..4ac3e19c4 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -231,7 +231,7 @@ export default { 'app.maxLength': 'Maximum length', 'app.regexp': 'Regular expression', 'app.enumeratorStaticItems': 'Elements', - 'app.enumeratorStaticItems.help': 'Insert a configuration like \'lable1,lable2,lable3\'', + 'app.enumeratorStaticItems.help': 'Insert a configuration like \'label1,label2,label3\'', 'app.enumeratorStaticItemsMap.help': 'Insert a configuration like \'key1=value1,key2=value2,key3=value3\'', 'app.enumeratorStaticItemsSeparator': 'Separator', 'app.enumeratorExtractorBean': 'Extractor bean name',