From b5e13bd3f367b6bf5a4e300fb4352e750ca27121 Mon Sep 17 00:00:00 2001 From: Julian Gernun <17549662+jcger@users.noreply.github.com> Date: Tue, 2 Dec 2025 12:50:24 +0100 Subject: [PATCH 1/5] first commit --- .../shared/response-ops/form-generator/src/field_builder.tsx | 3 +-- .../shared/response-ops/form-generator/src/widgets/types.ts | 1 + .../action_connector_form/encrypted_fields_callout.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/platform/packages/shared/response-ops/form-generator/src/field_builder.tsx b/src/platform/packages/shared/response-ops/form-generator/src/field_builder.tsx index 7e3bd72e21747..ac44bf4e15bd1 100644 --- a/src/platform/packages/shared/response-ops/form-generator/src/field_builder.tsx +++ b/src/platform/packages/shared/response-ops/form-generator/src/field_builder.tsx @@ -140,6 +140,7 @@ export const renderField = ({ field }: RenderFieldProps) => { schema={schema} formConfig={formConfig} fieldConfig={{ + label, defaultValue, validations: [ { @@ -148,10 +149,8 @@ export const renderField = ({ field }: RenderFieldProps) => { ], }} fieldProps={{ - label, helpText, fullWidth: true, - labelAppend: isOptional ? ( {OPTIONAL_LABEL} diff --git a/src/platform/packages/shared/response-ops/form-generator/src/widgets/types.ts b/src/platform/packages/shared/response-ops/form-generator/src/widgets/types.ts index 420f0f21ba5f6..2a1a1878accc7 100644 --- a/src/platform/packages/shared/response-ops/form-generator/src/widgets/types.ts +++ b/src/platform/packages/shared/response-ops/form-generator/src/widgets/types.ts @@ -33,6 +33,7 @@ export interface BaseWidgetProps< formConfig: FormConfig; /* Configuration specific to the field */ fieldConfig: { + label?: string; validations: [ { validator: (...args: Parameters) => ReturnType>; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.tsx index 444e80332955c..4d46f4532d725 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.tsx @@ -30,7 +30,7 @@ const isEmpty = (value: string | undefined): value is string => value != null || const getSecretFields = (fields: FieldsMap): FieldsMap => Object.keys(fields) - .filter((fieldPath) => fieldPath.includes('secrets')) + .filter((fieldPath) => fieldPath.includes('secrets') && fields[fieldPath].label) .reduce((filteredFields, path) => ({ ...filteredFields, [path]: fields[path] }), {}); const getLabelsFromFields = (fields: FieldsMap): string[] => From 39be8eaa989827ba7bafe62d00e6fbabbd895b5e Mon Sep 17 00:00:00 2001 From: Julian Gernun <17549662+jcger@users.noreply.github.com> Date: Tue, 2 Dec 2025 13:10:09 +0100 Subject: [PATCH 2/5] callout test --- .../action_connector_form/encrypted_fields_callout.test.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.test.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.test.tsx index b96501ef3594f..8856c1d478f8b 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.test.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.test.tsx @@ -35,6 +35,8 @@ const renderWithSecretFields = ({ /> ); })} + // Will be ignored because it has no label + ); From 084880fefbcce97fabdd766be3e4db88dcf1f2eb Mon Sep 17 00:00:00 2001 From: Julian Gernun <17549662+jcger@users.noreply.github.com> Date: Tue, 2 Dec 2025 15:48:34 +0100 Subject: [PATCH 3/5] add test --- .../form-generator/src/field_builder.test.tsx | 65 +++++++++++++++++++ .../encrypted_fields_callout.test.tsx | 2 +- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/src/platform/packages/shared/response-ops/form-generator/src/field_builder.test.tsx b/src/platform/packages/shared/response-ops/form-generator/src/field_builder.test.tsx index 81d9af8c9e771..6ca10dc17f8b6 100644 --- a/src/platform/packages/shared/response-ops/form-generator/src/field_builder.test.tsx +++ b/src/platform/packages/shared/response-ops/form-generator/src/field_builder.test.tsx @@ -20,6 +20,17 @@ import { import { getFieldFromSchema, getFieldsFromSchema, renderField } from './field_builder'; import type { FormConfig } from './form'; import { addMeta } from './schema_connector_metadata'; +import { getWidgetComponent } from './widgets'; + +jest.mock('./widgets', () => { + const module = jest.requireActual('./widgets'); + return { + ...module, + getWidgetComponent: jest.fn(module.getWidgetComponent), + }; +}); + +const getWidgetComponentMock = getWidgetComponent as jest.Mock; const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} @@ -364,3 +375,57 @@ describe('Field Builder', () => { }); }); }); + +describe('mocked getWidgetComponent', () => { + const formConfig: FormConfig = { isEdit: true }; + const mockWidgetComponent = jest.fn((props) => { + return
; + }); + + beforeAll(() => { + getWidgetComponentMock.mockReturnValue(mockWidgetComponent); + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should pass correct props structure to WidgetComponent', () => { + const schema = z.string().default('default-value').meta({ + label: 'Username Label', + placeholder: 'Enter your username', + helpText: 'This is help text', + disabled: true, + }); + + const path = 'username'; + + const field = getFieldFromSchema({ schema, path, formConfig }); + render(renderField({ field })); + + expect(mockWidgetComponent).toHaveBeenCalledTimes(1); + + const receivedProps = mockWidgetComponent.mock.calls[0][0]; + + expect(receivedProps.path).toBe('username'); + expect(receivedProps.formConfig).toBe(formConfig); + + expect(receivedProps.fieldConfig).toBeDefined(); + expect(receivedProps.fieldConfig.label).toBe('Username Label'); + expect(receivedProps.fieldConfig.defaultValue).toBe('default-value'); + expect(receivedProps.fieldConfig.validations).toHaveLength(1); + expect(typeof receivedProps.fieldConfig.validations[0].validator).toBe('function'); + + expect(receivedProps.fieldProps).toBeDefined(); + expect(receivedProps.fieldProps.helpText).toBe('This is help text'); + expect(receivedProps.fieldProps.fullWidth).toBe(true); + expect(receivedProps.fieldProps.labelAppend).toBeNull(); + + expect(receivedProps.fieldProps.euiFieldProps).toBeDefined(); + expect(receivedProps.fieldProps.euiFieldProps.placeholder).toBe('Enter your username'); + expect(receivedProps.fieldProps.euiFieldProps.disabled).toBe(true); + expect(receivedProps.fieldProps.euiFieldProps['data-test-subj']).toBe( + 'generator-field-username' + ); + }); +}); diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.test.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.test.tsx index 8856c1d478f8b..37d427d56e6a3 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.test.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/encrypted_fields_callout.test.tsx @@ -35,7 +35,7 @@ const renderWithSecretFields = ({ /> ); })} - // Will be ignored because it has no label + {/* will be ignored because it has no label */} From 2296dbb91b2ede4cae906a660f2701b72a1f1332 Mon Sep 17 00:00:00 2001 From: Julian Gernun <17549662+jcger@users.noreply.github.com> Date: Wed, 3 Dec 2025 07:26:45 +0100 Subject: [PATCH 4/5] add bearer token input label --- .../shared/kbn-connector-specs/src/auth_types/bearer.ts | 2 +- .../shared/kbn-connector-specs/src/auth_types/translations.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/platform/packages/shared/kbn-connector-specs/src/auth_types/bearer.ts b/src/platform/packages/shared/kbn-connector-specs/src/auth_types/bearer.ts index c9cd666bd9fc5..9703b606b3a0a 100644 --- a/src/platform/packages/shared/kbn-connector-specs/src/auth_types/bearer.ts +++ b/src/platform/packages/shared/kbn-connector-specs/src/auth_types/bearer.ts @@ -17,7 +17,7 @@ const authSchema = z token: z .string() .min(1, { message: i18n.BEARER_AUTH_REQUIRED_MESSAGE }) - .meta({ sensitive: true }), + .meta({ sensitive: true, label: i18n.BEARER_TOKEN_LABEL }), }) .meta({ label: i18n.BEARER_AUTH_LABEL }); diff --git a/src/platform/packages/shared/kbn-connector-specs/src/auth_types/translations.ts b/src/platform/packages/shared/kbn-connector-specs/src/auth_types/translations.ts index 163ac8bfde672..690ef8914250a 100644 --- a/src/platform/packages/shared/kbn-connector-specs/src/auth_types/translations.ts +++ b/src/platform/packages/shared/kbn-connector-specs/src/auth_types/translations.ts @@ -68,6 +68,10 @@ export const BEARER_AUTH_LABEL = i18n.translate('connectorSpecs.authType.bearerA defaultMessage: 'Bearer token', }); +export const BEARER_TOKEN_LABEL = i18n.translate('connectorSpecs.bearerAuth.token.label', { + defaultMessage: 'Token', +}); + export const BEARER_AUTH_REQUIRED_MESSAGE = i18n.translate( 'connectorSpecs.bearerAuth.token.requiredMessage', { From 45124261c7400500a3b6cd9759045a6cdaead4f3 Mon Sep 17 00:00:00 2001 From: Julian Gernun <17549662+jcger@users.noreply.github.com> Date: Wed, 3 Dec 2025 12:03:34 +0100 Subject: [PATCH 5/5] fix test --- .../__snapshots__/generate_secrets_schema_from_spec.test.ts.snap | 1 + 1 file changed, 1 insertion(+) diff --git a/src/platform/packages/shared/kbn-connector-specs/src/lib/__snapshots__/generate_secrets_schema_from_spec.test.ts.snap b/src/platform/packages/shared/kbn-connector-specs/src/lib/__snapshots__/generate_secrets_schema_from_spec.test.ts.snap index 3aa8cf3b3e733..995dd86721b68 100644 --- a/src/platform/packages/shared/kbn-connector-specs/src/lib/__snapshots__/generate_secrets_schema_from_spec.test.ts.snap +++ b/src/platform/packages/shared/kbn-connector-specs/src/lib/__snapshots__/generate_secrets_schema_from_spec.test.ts.snap @@ -54,6 +54,7 @@ Object { "type": "string", }, "token": Object { + "label": "Token", "minLength": 1, "sensitive": true, "type": "string",