mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
feat(n8n Form Page Node): New node (#10390)
Co-authored-by: Giulio Andreini <g.andreini@gmail.com> Co-authored-by: Shireen Missi <94372015+ShireenMissi@users.noreply.github.com>
This commit is contained in:
@@ -5,7 +5,7 @@ import type {
|
||||
NodeParameterValue,
|
||||
NodeParameterValueType,
|
||||
} from 'n8n-workflow';
|
||||
import { deepCopy } from 'n8n-workflow';
|
||||
import { deepCopy, ADD_FORM_NOTICE } from 'n8n-workflow';
|
||||
import { computed, defineAsyncComponent, onErrorCaptured, ref, watch } from 'vue';
|
||||
|
||||
import type { IUpdateInformation } from '@/Interface';
|
||||
@@ -19,7 +19,12 @@ import ParameterInputFull from '@/components/ParameterInputFull.vue';
|
||||
import ResourceMapper from '@/components/ResourceMapper/ResourceMapper.vue';
|
||||
import { useNodeHelpers } from '@/composables/useNodeHelpers';
|
||||
import { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';
|
||||
import { KEEP_AUTH_IN_NDV_FOR_NODES } from '@/constants';
|
||||
import {
|
||||
FORM_NODE_TYPE,
|
||||
FORM_TRIGGER_NODE_TYPE,
|
||||
KEEP_AUTH_IN_NDV_FOR_NODES,
|
||||
WAIT_NODE_TYPE,
|
||||
} from '@/constants';
|
||||
import { useNDVStore } from '@/stores/ndv.store';
|
||||
import { useNodeTypesStore } from '@/stores/nodeTypes.store';
|
||||
import {
|
||||
@@ -91,7 +96,20 @@ const nodeType = computed(() => {
|
||||
});
|
||||
|
||||
const filteredParameters = computed(() => {
|
||||
return props.parameters.filter((parameter: INodeProperties) => displayNodeParameter(parameter));
|
||||
const parameters = props.parameters.filter((parameter: INodeProperties) =>
|
||||
displayNodeParameter(parameter),
|
||||
);
|
||||
|
||||
const activeNode = ndvStore.activeNode;
|
||||
|
||||
if (activeNode && activeNode.type === FORM_TRIGGER_NODE_TYPE) {
|
||||
return updateFormTriggerParameters(parameters, activeNode.name);
|
||||
}
|
||||
if (activeNode && activeNode.type === WAIT_NODE_TYPE && activeNode.parameters.resume === 'form') {
|
||||
return updateWaitParameters(parameters, activeNode.name);
|
||||
}
|
||||
|
||||
return parameters;
|
||||
});
|
||||
|
||||
const filteredParameterNames = computed(() => {
|
||||
@@ -151,6 +169,90 @@ watch(filteredParameterNames, (newValue, oldValue) => {
|
||||
}
|
||||
});
|
||||
|
||||
function updateFormTriggerParameters(parameters: INodeProperties[], triggerName: string) {
|
||||
const workflow = workflowHelpers.getCurrentWorkflow();
|
||||
const connectedNodes = workflow.getChildNodes(triggerName);
|
||||
|
||||
const hasFormPage = connectedNodes.some((nodeName) => {
|
||||
const node = workflow.getNode(nodeName);
|
||||
return node && node.type === FORM_NODE_TYPE;
|
||||
});
|
||||
|
||||
if (hasFormPage) {
|
||||
const triggerParameters: INodeProperties[] = [];
|
||||
|
||||
for (const parameter of parameters) {
|
||||
if (parameter.name === 'responseMode') {
|
||||
triggerParameters.push({
|
||||
displayName: 'On submission, the user will be taken to the next form node',
|
||||
name: 'formResponseModeNotice',
|
||||
type: 'notice',
|
||||
default: '',
|
||||
});
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (parameter.name === ADD_FORM_NOTICE) continue;
|
||||
|
||||
if (parameter.name === 'options') {
|
||||
const options = (parameter.options as INodeProperties[]).filter(
|
||||
(option) => option.name !== 'respondWithOptions',
|
||||
);
|
||||
triggerParameters.push({
|
||||
...parameter,
|
||||
options,
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
triggerParameters.push(parameter);
|
||||
}
|
||||
return triggerParameters;
|
||||
}
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
function updateWaitParameters(parameters: INodeProperties[], nodeName: string) {
|
||||
const workflow = workflowHelpers.getCurrentWorkflow();
|
||||
const parentNodes = workflow.getParentNodes(nodeName);
|
||||
|
||||
const formTriggerName = parentNodes.find(
|
||||
(node) => workflow.nodes[node].type === FORM_TRIGGER_NODE_TYPE,
|
||||
);
|
||||
if (!formTriggerName) return parameters;
|
||||
|
||||
const connectedNodes = workflow.getChildNodes(formTriggerName);
|
||||
|
||||
const hasFormPage = connectedNodes.some((nodeName) => {
|
||||
const node = workflow.getNode(nodeName);
|
||||
return node && node.type === FORM_NODE_TYPE;
|
||||
});
|
||||
|
||||
if (hasFormPage) {
|
||||
const waitNodeParameters: INodeProperties[] = [];
|
||||
|
||||
for (const parameter of parameters) {
|
||||
if (parameter.name === 'options') {
|
||||
const options = (parameter.options as INodeProperties[]).filter(
|
||||
(option) => option.name !== 'respondWithOptions' && option.name !== 'webhookSuffix',
|
||||
);
|
||||
waitNodeParameters.push({
|
||||
...parameter,
|
||||
options,
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
waitNodeParameters.push(parameter);
|
||||
}
|
||||
return waitNodeParameters;
|
||||
}
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
function onParameterBlur(parameterName: string) {
|
||||
emit('parameterBlur', parameterName);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user