🐛 Fix that "getCurrentNodeParameter" did not resolve expressions

This commit is contained in:
Jan Oberhauser 2019-12-16 20:27:56 -06:00
parent ae89882951
commit a7d729842a
5 changed files with 29 additions and 4 deletions

View file

@ -10,6 +10,7 @@ import {
INode, INode,
INodeCredentials, INodeCredentials,
INodeIssues, INodeIssues,
INodeParameters,
INodePropertyOptions, INodePropertyOptions,
INodeTypeDescription, INodeTypeDescription,
IRunExecutionData, IRunExecutionData,
@ -125,7 +126,7 @@ export interface IRestApi {
makeRestApiRequest(method: string, endpoint: string, data?: any): Promise<any>; // tslint:disable-line:no-any makeRestApiRequest(method: string, endpoint: string, data?: any): Promise<any>; // tslint:disable-line:no-any
getSettings(): Promise<IN8nUISettings>; getSettings(): Promise<IN8nUISettings>;
getNodeTypes(): Promise<INodeTypeDescription[]>; getNodeTypes(): Promise<INodeTypeDescription[]>;
getNodeParameterOptions(nodeType: string, methodName: string, credentials?: INodeCredentials): Promise<INodePropertyOptions[]>; getNodeParameterOptions(nodeType: string, methodName: string, currentNodeParameters: INodeParameters, credentials?: INodeCredentials): Promise<INodePropertyOptions[]>;
removeTestWebhook(workflowId: string): Promise<boolean>; removeTestWebhook(workflowId: string): Promise<boolean>;
runWorkflow(runData: IStartRunData): Promise<IExecutionPushResponse>; runWorkflow(runData: IStartRunData): Promise<IExecutionPushResponse>;
createNewWorkflow(sendData: IWorkflowData): Promise<IWorkflowDb>; createNewWorkflow(sendData: IWorkflowData): Promise<IWorkflowDb>;

View file

@ -171,6 +171,7 @@ import { genericHelpers } from '@/components/mixins/genericHelpers';
import { restApi } from '@/components/mixins/restApi'; import { restApi } from '@/components/mixins/restApi';
import { showMessage } from '@/components/mixins/showMessage'; import { showMessage } from '@/components/mixins/showMessage';
import { workflowHelpers } from '@/components/mixins/workflowHelpers'; import { workflowHelpers } from '@/components/mixins/workflowHelpers';
import { workflowSave } from '@/components/mixins/workflowSave';
import { workflowRun } from '@/components/mixins/workflowRun'; import { workflowRun } from '@/components/mixins/workflowRun';
import { saveAs } from 'file-saver'; import { saveAs } from 'file-saver';
@ -183,6 +184,7 @@ export default mixins(
showMessage, showMessage,
workflowHelpers, workflowHelpers,
workflowRun, workflowRun,
workflowSave,
) )
.extend({ .extend({
name: 'MainHeader', name: 'MainHeader',

View file

@ -57,6 +57,7 @@ import mixins from 'vue-typed-mixins';
export default mixins( export default mixins(
copyPaste, copyPaste,
showMessage,
workflowHelpers, workflowHelpers,
) )
.extend({ .extend({

View file

@ -125,6 +125,7 @@ import {
import { import {
NodeHelpers, NodeHelpers,
NodeParameterValue, NodeParameterValue,
INodeParameters,
INodePropertyOptions, INodePropertyOptions,
Workflow, Workflow,
} from 'n8n-workflow'; } from 'n8n-workflow';
@ -421,6 +422,21 @@ export default mixins(
}, },
}, },
methods: { methods: {
getResolveNodeParameters (nodeParameters: INodeParameters): INodeParameters {
const returnData: INodeParameters = {};
for (const key of Object.keys(nodeParameters)) {
if (Array.isArray(nodeParameters[key])) {
returnData[key] = (nodeParameters[key] as string[]).map(value => {
return this.resolveExpression(value as string) as string;
});
} else if (typeof nodeParameters[key] === 'object') {
returnData[key] = this.getResolveNodeParameters(nodeParameters[key] as INodeParameters);
} else {
returnData[key] = this.resolveExpression(nodeParameters[key] as string);
}
}
return returnData;
},
async loadRemoteParameterOptions () { async loadRemoteParameterOptions () {
if (this.node === null || this.remoteMethod === undefined || this.remoteParameterOptionsLoading) { if (this.node === null || this.remoteMethod === undefined || this.remoteParameterOptionsLoading) {
return; return;
@ -429,8 +445,12 @@ export default mixins(
this.remoteParameterOptionsLoading = true; this.remoteParameterOptionsLoading = true;
this.remoteParameterOptions.length = 0; this.remoteParameterOptions.length = 0;
// Get the resolved parameter values of the current node
const currentNodeParameters = this.$store.getters.activeNode.parameters;
const resolvedNodeParameters = this.getResolveNodeParameters(currentNodeParameters);
try { try {
const options = await this.restApi().getNodeParameterOptions(this.node.type, this.remoteMethod, this.node.credentials); const options = await this.restApi().getNodeParameterOptions(this.node.type, this.remoteMethod, resolvedNodeParameters, this.node.credentials);
this.remoteParameterOptions.push.apply(this.remoteParameterOptions, options); this.remoteParameterOptions.push.apply(this.remoteParameterOptions, options);
} catch (error) { } catch (error) {
this.remoteParameterOptionsLoadingIssues = error.message; this.remoteParameterOptionsLoadingIssues = error.message;

View file

@ -26,6 +26,7 @@ import {
ICredentialType, ICredentialType,
IDataObject, IDataObject,
INodeCredentials, INodeCredentials,
INodeParameters,
INodePropertyOptions, INodePropertyOptions,
INodeTypeDescription, INodeTypeDescription,
} from 'n8n-workflow'; } from 'n8n-workflow';
@ -152,12 +153,12 @@ export const restApi = Vue.extend({
}, },
// Returns all the parameter options from the server // Returns all the parameter options from the server
getNodeParameterOptions: (nodeType: string, methodName: string, credentials?: INodeCredentials): Promise<INodePropertyOptions[]> => { getNodeParameterOptions: (nodeType: string, methodName: string, currentNodeParameters: INodeParameters, credentials?: INodeCredentials): Promise<INodePropertyOptions[]> => {
const sendData = { const sendData = {
nodeType, nodeType,
methodName, methodName,
credentials, credentials,
currentNodeParameters: this.$store.getters.activeNode.parameters, currentNodeParameters,
}; };
return self.restApi().makeRestApiRequest('GET', '/node-parameter-options', sendData); return self.restApi().makeRestApiRequest('GET', '/node-parameter-options', sendData);
}, },