mirror of
https://github.com/n8n-io/n8n.git
synced 2025-02-21 02:56:40 -08:00
fix(n8n Form Node): Form Trigger does not wait in multi-form mode (#11404)
This commit is contained in:
parent
8b0a48f530
commit
151f4dd7b8
|
@ -38,6 +38,25 @@ export class WaitingForms extends WaitingWebhooks {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async reloadForm(req: WaitingWebhookRequest, res: express.Response) {
|
||||||
|
try {
|
||||||
|
await sleep(1000);
|
||||||
|
|
||||||
|
const url = `${req.protocol}://${req.get('host')}${req.originalUrl}`;
|
||||||
|
const page = await axios({ url });
|
||||||
|
|
||||||
|
if (page) {
|
||||||
|
res.send(`
|
||||||
|
<script>
|
||||||
|
setTimeout(function() {
|
||||||
|
window.location.reload();
|
||||||
|
}, 1);
|
||||||
|
</script>
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
} catch (error) {}
|
||||||
|
}
|
||||||
|
|
||||||
async executeWebhook(
|
async executeWebhook(
|
||||||
req: WaitingWebhookRequest,
|
req: WaitingWebhookRequest,
|
||||||
res: express.Response,
|
res: express.Response,
|
||||||
|
@ -56,30 +75,17 @@ export class WaitingForms extends WaitingWebhooks {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (execution.data.resultData.error) {
|
if (execution.data.resultData.error) {
|
||||||
throw new ConflictError(`The execution "${executionId}" has finished with error.`);
|
const message = `The execution "${executionId}" has finished with error.`;
|
||||||
|
this.logger.debug(message, { error: execution.data.resultData.error });
|
||||||
|
throw new ConflictError(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (execution.status === 'running') {
|
if (execution.status === 'running') {
|
||||||
if (this.includeForms && req.method === 'GET') {
|
if (this.includeForms && req.method === 'GET') {
|
||||||
await sleep(1000);
|
await this.reloadForm(req, res);
|
||||||
|
return { noWebhookResponse: true };
|
||||||
const url = `${req.protocol}://${req.get('host')}${req.originalUrl}`;
|
|
||||||
const page = await axios({ url });
|
|
||||||
|
|
||||||
if (page) {
|
|
||||||
res.send(`
|
|
||||||
<script>
|
|
||||||
setTimeout(function() {
|
|
||||||
window.location.reload();
|
|
||||||
}, 1);
|
|
||||||
</script>
|
|
||||||
`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
|
||||||
noWebhookResponse: true,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
throw new ConflictError(`The execution "${executionId}" is running already.`);
|
throw new ConflictError(`The execution "${executionId}" is running already.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,9 @@ export class WaitingWebhooks implements IWebhookManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (execution.data?.resultData?.error) {
|
if (execution.data?.resultData?.error) {
|
||||||
throw new ConflictError(`The execution "${executionId} has finished already.`);
|
const message = `The execution "${executionId}" has finished with error.`;
|
||||||
|
this.logger.debug(message, { error: execution.data.resultData.error });
|
||||||
|
throw new ConflictError(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (execution.finished) {
|
if (execution.finished) {
|
||||||
|
@ -182,23 +184,25 @@ export class WaitingWebhooks implements IWebhookManager {
|
||||||
if (this.isSendAndWaitRequest(workflow.nodes, suffix)) {
|
if (this.isSendAndWaitRequest(workflow.nodes, suffix)) {
|
||||||
res.render('send-and-wait-no-action-required', { isTestWebhook: false });
|
res.render('send-and-wait-no-action-required', { isTestWebhook: false });
|
||||||
return { noWebhookResponse: true };
|
return { noWebhookResponse: true };
|
||||||
} else if (!execution.data.resultData.error && execution.status === 'waiting') {
|
}
|
||||||
|
|
||||||
|
if (!execution.data.resultData.error && execution.status === 'waiting') {
|
||||||
const childNodes = workflow.getChildNodes(
|
const childNodes = workflow.getChildNodes(
|
||||||
execution.data.resultData.lastNodeExecuted as string,
|
execution.data.resultData.lastNodeExecuted as string,
|
||||||
);
|
);
|
||||||
|
|
||||||
const hasChildForms = childNodes.some(
|
const hasChildForms = childNodes.some(
|
||||||
(node) =>
|
(node) =>
|
||||||
workflow.nodes[node].type === FORM_NODE_TYPE ||
|
workflow.nodes[node].type === FORM_NODE_TYPE ||
|
||||||
workflow.nodes[node].type === WAIT_NODE_TYPE,
|
workflow.nodes[node].type === WAIT_NODE_TYPE,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (hasChildForms) {
|
if (hasChildForms) {
|
||||||
return { noWebhookResponse: true };
|
return { noWebhookResponse: true };
|
||||||
} else {
|
|
||||||
throw new NotFoundError(errorMessage);
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
throw new NotFoundError(errorMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw new NotFoundError(errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
const runExecutionData = execution.data;
|
const runExecutionData = execution.data;
|
||||||
|
|
|
@ -752,6 +752,8 @@
|
||||||
console.error('Error:', error);
|
console.error('Error:', error);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isWaitingForm = window.location.href.includes('form-waiting');
|
||||||
|
if(isWaitingForm) {
|
||||||
const interval = setInterval(function() {
|
const interval = setInterval(function() {
|
||||||
const isSubmited = document.querySelector('#submitted-form').style.display;
|
const isSubmited = document.querySelector('#submitted-form').style.display;
|
||||||
if(isSubmited === 'block') {
|
if(isSubmited === 'block') {
|
||||||
|
@ -761,6 +763,7 @@
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}, 2000);
|
}, 2000);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Reference in a new issue