/* eslint-disable n8n-nodes-base/node-filename-against-convention */ import { type INodeType, type INodeTypeBaseDescription, type INodeTypeDescription, type IWebhookFunctions, } from 'n8n-workflow'; import { formWebhook } from '../utils'; import { formDescription, formFields, formRespondMode, formTitle, formTriggerPanel, respondWithOptions, webhookPath, } from '../common.descriptions'; const descriptionV2: INodeTypeDescription = { displayName: 'n8n Form Trigger', name: 'formTrigger', icon: 'file:form.svg', group: ['trigger'], version: 2, description: 'Runs the flow when an n8n generated webform is submitted', defaults: { name: 'n8n Form Trigger', }, // eslint-disable-next-line n8n-nodes-base/node-class-description-inputs-wrong-regular-node inputs: [], outputs: ['main'], webhooks: [ { name: 'setup', httpMethod: 'GET', responseMode: 'onReceived', isFullPath: true, path: '={{$parameter["path"]}}', ndvHideUrl: true, isForm: true, }, { name: 'default', httpMethod: 'POST', responseMode: '={{$parameter["responseMode"]}}', responseData: '={{$parameter["responseMode"] === "lastNode" ? "noData" : undefined}}', isFullPath: true, path: '={{$parameter["path"]}}', ndvHideMethod: true, isForm: true, }, ], eventTriggerDescription: 'Waiting for you to submit the form', activationMessage: 'You can now make calls to your production Form URL.', triggerPanel: formTriggerPanel, properties: [ webhookPath, formTitle, formDescription, formFields, formRespondMode, { displayName: "In the 'Respond to Webhook' node, select 'Respond With JSON' and set the formSubmittedText key to display a custom response in the form, or the redirectURL key to redirect users to a URL", name: 'formNotice', type: 'notice', displayOptions: { show: { responseMode: ['responseNode'] }, }, default: '', }, { displayName: 'Options', name: 'options', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { hide: { responseMode: ['responseNode'], }, }, options: [respondWithOptions], }, ], }; export class FormTriggerV2 implements INodeType { description: INodeTypeDescription; constructor(baseDescription: INodeTypeBaseDescription) { this.description = { ...baseDescription, ...descriptionV2, }; } async webhook(this: IWebhookFunctions) { return await formWebhook(this); } }