From e65537766a8884a43b9bc3a3d52851c7b02d074b Mon Sep 17 00:00:00 2001 From: Mason Herron Date: Tue, 25 Feb 2025 10:14:03 -0700 Subject: [PATCH 1/9] removed hardcoded wrapper, adjusted validation for matching brackets, and added wrapper to combobox items --- .../output_form_kafka_topics.tsx | 2 +- .../output_form_validators.tsx | 29 +++++++++++++++++++ .../edit_output_flyout/use_output_form.tsx | 2 +- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx index df6befc104f7b..96149f056094e 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx @@ -33,7 +33,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm const dynamicOptions: Array> = useMemo(() => { const options = KAFKA_DYNAMIC_FIELDS.map((option) => ({ label: option, - value: option, + value: `%{[${option}]}`, })); return options; }, []); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx index 14d2430f5121a..81d4533f1fa0c 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx @@ -369,6 +369,34 @@ export function validateDynamicKafkaTopics(value: Array { + const indices = []; + let indx = str.indexOf(substring); + while (indx !== -1) { + indices.push(indx); + indx = str.indexOf(substring, indx + 1); + } + return indices; + }; + // need to make sure that there are matching amounts of opening and closing brackets + const openingBracks = getAllIndices(val?.value!, '{['); + const closingBracks = getAllIndices(val?.value!, ']}'); + if (openingBracks.length !== closingBracks.length) { + res.push( + i18n.translate('xpack.fleet.settings.outputForm.kafkaTopicBracketsError', { + defaultMessage: 'Topic should have matching amounts of opening and closing brackets', + }) + ); + } + // check for preceding percent sign + if (!openingBracks.every((item) => val?.value![item - 1] === '%')) { + res.push( + i18n.translate('xpack.fleet.settings.outputForm.kafkaTopicPercentError', { + defaultMessage: 'Opening brackets should be preceded by a percent sign', + }) + ); + } }); if (value.length === 0) { @@ -378,6 +406,7 @@ export function validateDynamicKafkaTopics(value: Array void, output?: Output, defaultOupu } : kafkaTopicsInput.value === kafkaTopicsType.Dynamic && kafkaDynamicTopicInput.value ? { - topic: `%{[${kafkaDynamicTopicInput.value}]}`, + topic: kafkaDynamicTopicInput.value, } : {}), headers: kafkaHeadersInput.value, From 734d346171e15041a4c1bb8b29a3d1560f342954 Mon Sep 17 00:00:00 2001 From: Mason Herron Date: Tue, 25 Feb 2025 14:01:05 -0700 Subject: [PATCH 2/9] cleaned up variable names, hoisted function to top level, added test coverage --- .../output_form_validators.test.tsx | 23 ++++++++ .../output_form_validators.tsx | 55 +++++++++---------- 2 files changed, 50 insertions(+), 28 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx index 888b815172bc2..06b3d3cf16de5 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx @@ -14,6 +14,7 @@ import { validateKafkaHosts, validateKibanaURL, validateKibanaAPIKey, + validateDynamicKafkaTopics, } from './output_form_validators'; describe('Output form validation', () => { @@ -336,4 +337,26 @@ describe('Output form validation', () => { ]); }); }); + + describe('validateDynamicKafkaTopics', () => { + const validTopics = [ + { label: 'field1', value: '%{[field]}' }, + { label: 'field2', value: 'field2' }, + { label: 'field3', value: '%{[field2]}-%{[field3]}' }, + ]; + const invalidBracketTopic = [{ label: '%{[field}', value: '%{[field}' }]; + const invalidPercentTopic = [{ label: '{[field]}', value: '{[field]}' }]; + it('should work with valid topics', () => { + const res = validateDynamicKafkaTopics(validTopics); + expect(res).toBeUndefined(); + }); + it("should return error with missing brackets in topic's name", () => { + const res = validateDynamicKafkaTopics(invalidBracketTopic); + expect(res).toEqual(['Topic should have matching amounts of opening and closing brackets']); + }); + it("should return error with missing percent sign before opening brackets in topic's name", () => { + const res = validateDynamicKafkaTopics(invalidPercentTopic); + expect(res).toEqual(['Opening brackets should be preceded by a percent sign']); + }); + }); }); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx index 81d4533f1fa0c..d53605d159bef 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx @@ -19,6 +19,15 @@ const toSecretValidator = return validator(value ?? ''); }; +const getAllIndices = (str: string, substring: string): number[] => { + const indices = []; + let index = str.indexOf(substring); + while (index !== -1) { + indices.push(index); + index = str.indexOf(substring, index + 1); + } + return indices; +}; export function validateKafkaHosts(value: string[]) { const res: Array<{ message: string; index?: number }> = []; const urlIndexes: { [key: string]: number[] } = {}; @@ -362,40 +371,30 @@ export function validateKafkaStaticTopic(value: string) { export function validateDynamicKafkaTopics(value: Array>) { const res = []; value.forEach((val, idx) => { - if (!val) { + if (!val || !val.value) { res.push( i18n.translate('xpack.fleet.settings.outputForm.kafkaTopicFieldRequiredMessage', { defaultMessage: 'Topic is required', }) ); - } - - const getAllIndices = (str: string, substring: string): number[] => { - const indices = []; - let indx = str.indexOf(substring); - while (indx !== -1) { - indices.push(indx); - indx = str.indexOf(substring, indx + 1); + } else { + const openingBrackets = getAllIndices(val.value, '{['); + const closingBrackets = getAllIndices(val.value, ']}'); + if (openingBrackets.length !== closingBrackets.length) { + res.push( + i18n.translate('xpack.fleet.settings.outputForm.kafkaTopicBracketsError', { + defaultMessage: 'Topic should have matching amounts of opening and closing brackets', + }) + ); + } + // check for preceding percent sign + if (!openingBrackets.every((item) => val?.value![item - 1] === '%')) { + res.push( + i18n.translate('xpack.fleet.settings.outputForm.kafkaTopicPercentError', { + defaultMessage: 'Opening brackets should be preceded by a percent sign', + }) + ); } - return indices; - }; - // need to make sure that there are matching amounts of opening and closing brackets - const openingBracks = getAllIndices(val?.value!, '{['); - const closingBracks = getAllIndices(val?.value!, ']}'); - if (openingBracks.length !== closingBracks.length) { - res.push( - i18n.translate('xpack.fleet.settings.outputForm.kafkaTopicBracketsError', { - defaultMessage: 'Topic should have matching amounts of opening and closing brackets', - }) - ); - } - // check for preceding percent sign - if (!openingBracks.every((item) => val?.value![item - 1] === '%')) { - res.push( - i18n.translate('xpack.fleet.settings.outputForm.kafkaTopicPercentError', { - defaultMessage: 'Opening brackets should be preceded by a percent sign', - }) - ); } }); From c0064137c3834317a56dfa49ad14ca1cce0645d7 Mon Sep 17 00:00:00 2001 From: Mason Herron Date: Wed, 26 Feb 2025 14:05:48 -0700 Subject: [PATCH 3/9] removed verbiage around not recommending, added doc link --- .../output_form_kafka_topics.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx index 96149f056094e..f2c36b66dd7a3 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx @@ -15,6 +15,7 @@ import { EuiTitle, EuiRadioGroup, EuiComboBox, + EuiLink, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; @@ -73,7 +74,21 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm label={ + + + ), + }} /> } {...inputs.kafkaDynamicTopicInput.formRowProps} @@ -83,7 +98,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm fullWidth isClearable={true} options={dynamicOptions} - customOptionText="Use custom field (not recommended)" + customOptionText="Use custom field" singleSelection={{ asPlainText: true }} {...inputs.kafkaDynamicTopicInput.props} /> From d99c2b71f00215ea7068328ef6d54b3096973935 Mon Sep 17 00:00:00 2001 From: Mason Herron Date: Wed, 26 Feb 2025 14:06:44 -0700 Subject: [PATCH 4/9] fixed verbiage and message id --- .../edit_output_flyout/output_form_kafka_topics.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx index f2c36b66dd7a3..533fa19e7fa95 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx @@ -74,7 +74,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm label={ From fdd2cd5b6da51a1da633f955a0350e3b41dcc70f Mon Sep 17 00:00:00 2001 From: Mason Herron Date: Thu, 27 Feb 2025 05:37:35 -0700 Subject: [PATCH 5/9] updated harcoded url to use doc links service --- .../packages/shared/kbn-doc-links/src/get_doc_links.ts | 1 + .../packages/shared/kbn-doc-links/src/types.ts | 1 + .../edit_output_flyout/output_form_kafka_topics.tsx | 10 +++++----- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts index 409b4a61dffff..9f02ae060dbf9 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts @@ -108,6 +108,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D configuration: `${ELASTIC_WEBSITE_URL}guide/en/beats/filebeat/${DOC_LINK_VERSION}/configuring-howto-filebeat.html`, elasticsearchModule: `${ELASTIC_WEBSITE_URL}guide/en/beats/filebeat/${DOC_LINK_VERSION}/filebeat-module-elasticsearch.html`, elasticsearchOutput: `${ELASTIC_WEBSITE_URL}guide/en/beats/filebeat/${DOC_LINK_VERSION}/elasticsearch-output.html`, + kafkaOutput: `${ELASTIC_WEBSITE_URL}guide/en/beats/filebeat/${DOC_LINK_VERSION}/kafka-output.html`, startup: `${ELASTIC_WEBSITE_URL}guide/en/beats/filebeat/${DOC_LINK_VERSION}/filebeat-starting.html`, exportedFields: `${ELASTIC_WEBSITE_URL}guide/en/beats/filebeat/${DOC_LINK_VERSION}/exported-fields.html`, suricataModule: `${ELASTIC_WEBSITE_URL}guide/en/beats/filebeat/${DOC_LINK_VERSION}/filebeat-module-suricata.html`, diff --git a/src/platform/packages/shared/kbn-doc-links/src/types.ts b/src/platform/packages/shared/kbn-doc-links/src/types.ts index eb13897c5be26..d3c459ec03306 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/types.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/types.ts @@ -70,6 +70,7 @@ export interface DocLinks { readonly configuration: string; readonly elasticsearchOutput: string; readonly elasticsearchModule: string; + readonly kafkaOutput: string; readonly startup: string; readonly exportedFields: string; readonly suricataModule: string; diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx index 533fa19e7fa95..8b4f9b3265f77 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx @@ -20,6 +20,8 @@ import { import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; +import { useStartServices } from '../../../../hooks'; + import { kafkaTopicsType, KAFKA_DYNAMIC_FIELDS, @@ -31,6 +33,8 @@ import type { OutputFormInputsType } from './use_output_form'; export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputFormInputsType }> = ({ inputs, }) => { + const { docLinks } = useStartServices(); + const dynamicOptions: Array> = useMemo(() => { const options = KAFKA_DYNAMIC_FIELDS.map((option) => ({ label: option, @@ -77,11 +81,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm defaultMessage="Topic from field(s). For more info, see our {guideLink}" values={{ guideLink: ( - + Date: Thu, 27 Feb 2025 06:44:37 -0700 Subject: [PATCH 6/9] fixed translation error? --- .../components/edit_output_flyout/output_form_kafka_topics.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx index 8b4f9b3265f77..6c96ffd919e06 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx @@ -83,7 +83,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm guideLink: ( From 44c3a46020b159e4b289721097654b3fc2970224 Mon Sep 17 00:00:00 2001 From: Mason Herron Date: Thu, 27 Feb 2025 06:45:12 -0700 Subject: [PATCH 7/9] missed a period, maybe fixed translation now? --- .../components/edit_output_flyout/output_form_kafka_topics.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx index 6c96ffd919e06..49c8f917524bf 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx @@ -83,7 +83,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm guideLink: ( From bfccfdbcdc75c13dbbc5ce3e66a309e61557cd74 Mon Sep 17 00:00:00 2001 From: Mason Herron Date: Thu, 27 Feb 2025 07:38:24 -0700 Subject: [PATCH 8/9] ran translation fix for embedded link --- .../plugins/private/translations/translations/fr-FR.json | 1 - .../plugins/private/translations/translations/ja-JP.json | 1 - .../plugins/private/translations/translations/zh-CN.json | 1 - .../components/edit_output_flyout/output_form_kafka_topics.tsx | 2 +- 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json index babd21643b233..6108f5a8aeadc 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -19026,7 +19026,6 @@ "xpack.fleet.settings.editOutputFlyout.kafkaCompressionTitle": "Compression", "xpack.fleet.settings.editOutputFlyout.kafkaConnectionTypeLabel": "Connexion", "xpack.fleet.settings.editOutputFlyout.kafkaDynamicTopicHelptext": "Sélectionnez un sujet dans la liste. Si un sujet n'est pas disponible, créez un sujet personnalisé.", - "xpack.fleet.settings.editOutputFlyout.kafkaDynamicTopicLabel": "Sujet du champ", "xpack.fleet.settings.editOutputFlyout.kafkaHeaderKeyInputLabel": "Clé", "xpack.fleet.settings.editOutputFlyout.kafkaHeadersTitle": "En-têtes", "xpack.fleet.settings.editOutputFlyout.kafkaHeaderValueInputLabel": "Valeur", diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json index d9c60261d2e07..ab0e510040f83 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -18887,7 +18887,6 @@ "xpack.fleet.settings.editOutputFlyout.kafkaCompressionTitle": "圧縮", "xpack.fleet.settings.editOutputFlyout.kafkaConnectionTypeLabel": "接続", "xpack.fleet.settings.editOutputFlyout.kafkaDynamicTopicHelptext": "リストからトピックを選択してください。トピックがない場合は、カスタムトピックを作成してください。", - "xpack.fleet.settings.editOutputFlyout.kafkaDynamicTopicLabel": "フィールドからのトピック", "xpack.fleet.settings.editOutputFlyout.kafkaHeaderKeyInputLabel": "キー", "xpack.fleet.settings.editOutputFlyout.kafkaHeadersTitle": "ヘッダー", "xpack.fleet.settings.editOutputFlyout.kafkaHeaderValueInputLabel": "値", diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json index a758e137f2e27..279ae7dbeecce 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -18586,7 +18586,6 @@ "xpack.fleet.settings.editOutputFlyout.kafkaCompressionTitle": "压缩", "xpack.fleet.settings.editOutputFlyout.kafkaConnectionTypeLabel": "连接", "xpack.fleet.settings.editOutputFlyout.kafkaDynamicTopicHelptext": "从列表中选择主题。如果主题不可用,请创建定制主题。", - "xpack.fleet.settings.editOutputFlyout.kafkaDynamicTopicLabel": "来自字段的主题", "xpack.fleet.settings.editOutputFlyout.kafkaHeaderKeyInputLabel": "钥匙", "xpack.fleet.settings.editOutputFlyout.kafkaHeadersTitle": "标题", "xpack.fleet.settings.editOutputFlyout.kafkaHeaderValueInputLabel": "值", diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx index 49c8f917524bf..8b4f9b3265f77 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx @@ -83,7 +83,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm guideLink: ( From 29d7fc7961d1b04a12fb8a4862ac7176bd86788a Mon Sep 17 00:00:00 2001 From: Mason Herron Date: Tue, 4 Mar 2025 08:13:17 -0700 Subject: [PATCH 9/9] updated verbiage per docs team recommendation on error text/tests --- .../edit_output_flyout/output_form_validators.test.tsx | 4 +++- .../components/edit_output_flyout/output_form_validators.tsx | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx index 06b3d3cf16de5..b0fce70d831ab 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx @@ -352,7 +352,9 @@ describe('Output form validation', () => { }); it("should return error with missing brackets in topic's name", () => { const res = validateDynamicKafkaTopics(invalidBracketTopic); - expect(res).toEqual(['Topic should have matching amounts of opening and closing brackets']); + expect(res).toEqual([ + 'The topic should have a matching number of opening and closing brackets', + ]); }); it("should return error with missing percent sign before opening brackets in topic's name", () => { const res = validateDynamicKafkaTopics(invalidPercentTopic); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx index d53605d159bef..2410ddfe2e256 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx @@ -383,7 +383,8 @@ export function validateDynamicKafkaTopics(value: Array