diff --git a/cypress/e2e/16-form-trigger-node.cy.ts b/cypress/e2e/16-form-trigger-node.cy.ts index 3c6dde5c3..0162479f7 100644 --- a/cypress/e2e/16-form-trigger-node.cy.ts +++ b/cypress/e2e/16-form-trigger-node.cy.ts @@ -78,6 +78,7 @@ describe('n8n Form Trigger', () => { //add optional submitted message cy.get('.param-options').click(); + getVisibleSelect().find('span').contains('Form Response').click(); cy.contains('span', 'Text to Show') .should('exist') .parent() diff --git a/packages/cli/templates/form-trigger.handlebars b/packages/cli/templates/form-trigger.handlebars index f89e3c0a7..8f65263ee 100644 --- a/packages/cli/templates/form-trigger.handlebars +++ b/packages/cli/templates/form-trigger.handlebars @@ -354,37 +354,40 @@ -
+ {{#if appendAttribution}} + + {{/if}} + {{#if redirectUrl}} {{/if}} diff --git a/packages/nodes-base/nodes/Form/interfaces.ts b/packages/nodes-base/nodes/Form/interfaces.ts index 2d20c8f1c..ece460a7f 100644 --- a/packages/nodes-base/nodes/Form/interfaces.ts +++ b/packages/nodes-base/nodes/Form/interfaces.ts @@ -30,4 +30,5 @@ export type FormTriggerData = { n8nWebsiteLink: string; formFields: FormTriggerInput[]; useResponseData?: boolean; + appendAttribution?: boolean; }; diff --git a/packages/nodes-base/nodes/Form/utils.ts b/packages/nodes-base/nodes/Form/utils.ts index 92531ed91..f5adc84e1 100644 --- a/packages/nodes-base/nodes/Form/utils.ts +++ b/packages/nodes-base/nodes/Form/utils.ts @@ -10,6 +10,7 @@ export const prepareFormData = ( testRun: boolean, instanceId?: string, useResponseData?: boolean, + appendAttribution = true, ) => { const validForm = formFields.length > 0; const utm_campaign = instanceId ? `&utm_campaign=${instanceId}` : ''; @@ -28,6 +29,7 @@ export const prepareFormData = ( n8nWebsiteLink, formFields: [], useResponseData, + appendAttribution, }; if (redirectUrl) { @@ -90,6 +92,7 @@ export async function formWebhook(context: IWebhookFunctions) { let formSubmittedText; let redirectUrl; + let appendAttribution = true; if (options.respondWithOptions) { const values = (options.respondWithOptions as IDataObject).values as IDataObject; @@ -103,6 +106,10 @@ export async function formWebhook(context: IWebhookFunctions) { formSubmittedText = options.formSubmittedText as string; } + if (options.appendAttribution === false) { + appendAttribution = false; + } + const useResponseData = responseMode === 'responseNode'; const data = prepareFormData( @@ -114,6 +121,7 @@ export async function formWebhook(context: IWebhookFunctions) { mode === 'test', instanceId, useResponseData, + appendAttribution, ); const res = context.getResponseObject(); diff --git a/packages/nodes-base/nodes/Form/v2/FormTriggerV2.node.ts b/packages/nodes-base/nodes/Form/v2/FormTriggerV2.node.ts index 8a59fca4d..e8afadc71 100644 --- a/packages/nodes-base/nodes/Form/v2/FormTriggerV2.node.ts +++ b/packages/nodes-base/nodes/Form/v2/FormTriggerV2.node.ts @@ -81,7 +81,18 @@ const descriptionV2: INodeTypeDescription = { responseMode: ['responseNode'], }, }, - options: [respondWithOptions], + options: [ + { + // eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased + displayName: 'Append n8n Attribution', + name: 'appendAttribution', + type: 'boolean', + default: true, + description: + 'Whether to include the link “Form automated with n8n” at the bottom of the form', + }, + respondWithOptions, + ], }, ], };