diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts index 18d30db638..e6e34fb9d5 100644 --- a/packages/editor-ui/src/Interface.ts +++ b/packages/editor-ui/src/Interface.ts @@ -10,6 +10,7 @@ import { INode, INodeCredentials, INodeIssues, + INodeParameters, INodePropertyOptions, INodeTypeDescription, IRunExecutionData, @@ -125,7 +126,7 @@ export interface IRestApi { makeRestApiRequest(method: string, endpoint: string, data?: any): Promise; // tslint:disable-line:no-any getSettings(): Promise; getNodeTypes(): Promise; - getNodeParameterOptions(nodeType: string, methodName: string, credentials?: INodeCredentials): Promise; + getNodeParameterOptions(nodeType: string, methodName: string, currentNodeParameters: INodeParameters, credentials?: INodeCredentials): Promise; removeTestWebhook(workflowId: string): Promise; runWorkflow(runData: IStartRunData): Promise; createNewWorkflow(sendData: IWorkflowData): Promise; diff --git a/packages/editor-ui/src/components/MainSidebar.vue b/packages/editor-ui/src/components/MainSidebar.vue index ccaca17a30..9b333e9021 100644 --- a/packages/editor-ui/src/components/MainSidebar.vue +++ b/packages/editor-ui/src/components/MainSidebar.vue @@ -171,6 +171,7 @@ import { genericHelpers } from '@/components/mixins/genericHelpers'; import { restApi } from '@/components/mixins/restApi'; import { showMessage } from '@/components/mixins/showMessage'; import { workflowHelpers } from '@/components/mixins/workflowHelpers'; +import { workflowSave } from '@/components/mixins/workflowSave'; import { workflowRun } from '@/components/mixins/workflowRun'; import { saveAs } from 'file-saver'; @@ -183,6 +184,7 @@ export default mixins( showMessage, workflowHelpers, workflowRun, + workflowSave, ) .extend({ name: 'MainHeader', diff --git a/packages/editor-ui/src/components/NodeWebhooks.vue b/packages/editor-ui/src/components/NodeWebhooks.vue index 2128037fcf..b649575a0b 100644 --- a/packages/editor-ui/src/components/NodeWebhooks.vue +++ b/packages/editor-ui/src/components/NodeWebhooks.vue @@ -57,6 +57,7 @@ import mixins from 'vue-typed-mixins'; export default mixins( copyPaste, + showMessage, workflowHelpers, ) .extend({ diff --git a/packages/editor-ui/src/components/ParameterInput.vue b/packages/editor-ui/src/components/ParameterInput.vue index 51b139baa5..07776493b0 100644 --- a/packages/editor-ui/src/components/ParameterInput.vue +++ b/packages/editor-ui/src/components/ParameterInput.vue @@ -125,6 +125,7 @@ import { import { NodeHelpers, NodeParameterValue, + INodeParameters, INodePropertyOptions, Workflow, } from 'n8n-workflow'; @@ -421,6 +422,21 @@ export default mixins( }, }, 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 () { if (this.node === null || this.remoteMethod === undefined || this.remoteParameterOptionsLoading) { return; @@ -429,8 +445,12 @@ export default mixins( this.remoteParameterOptionsLoading = true; 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 { - 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); } catch (error) { this.remoteParameterOptionsLoadingIssues = error.message; diff --git a/packages/editor-ui/src/components/mixins/restApi.ts b/packages/editor-ui/src/components/mixins/restApi.ts index aae1965a26..875e366153 100644 --- a/packages/editor-ui/src/components/mixins/restApi.ts +++ b/packages/editor-ui/src/components/mixins/restApi.ts @@ -26,6 +26,7 @@ import { ICredentialType, IDataObject, INodeCredentials, + INodeParameters, INodePropertyOptions, INodeTypeDescription, } from 'n8n-workflow'; @@ -152,12 +153,12 @@ export const restApi = Vue.extend({ }, // Returns all the parameter options from the server - getNodeParameterOptions: (nodeType: string, methodName: string, credentials?: INodeCredentials): Promise => { + getNodeParameterOptions: (nodeType: string, methodName: string, currentNodeParameters: INodeParameters, credentials?: INodeCredentials): Promise => { const sendData = { nodeType, methodName, credentials, - currentNodeParameters: this.$store.getters.activeNode.parameters, + currentNodeParameters, }; return self.restApi().makeRestApiRequest('GET', '/node-parameter-options', sendData); },