more parsing of output bindings

This commit is contained in:
Peter Clement 2022-03-29 10:29:51 +01:00
parent 6ccf744557
commit 2381048c0f
5 changed files with 37 additions and 40 deletions

View File

@ -98,7 +98,6 @@ const automationActions = store => ({
automationId: automation?._id,
testData,
})
console.log(result)
store.update(state => {
state.selectedAutomation.testResults = result
return state

View File

@ -34,7 +34,6 @@
$: testResult = $automationStore.selectedAutomation.testResults?.steps.filter(
step => (block.id ? step.id === block.id : step.stepId === block.stepId)
)
$: console.log(testResult)
$: isTrigger = block.type === "TRIGGER"
$: selected = $automationStore.selectedBlock?.id === block.id
@ -57,6 +56,7 @@
x => x.blockToLoop === block.id
)
$: showLooping = false
async function deleteStep() {
try {
automationStore.actions.deleteAutomationBlock(block)
@ -81,18 +81,6 @@
)
}
async function removeLooping() {
loopingSelected = false
const loopToDelete =
$automationStore.selectedAutomation.automation.definition.steps.findIndex(
x => x.blockToLoop === block.id
)
automationStore.actions.deleteAutomationBlock(loopToDelete)
await automationStore.actions.save(
$automationStore.selectedAutomation?.automation
)
}
async function addLooping() {
loopingSelected = true
const loopDefinition = $automationStore.blockDefinitions.ACTION.LOOP
@ -103,6 +91,7 @@
loopDefinition
)
loopBlock.blockToLoop = block.id
block.loopBlock = loopBlock.id
automationStore.actions.addBlockToAutomation(loopBlock, blockIdx - 1)
await automationStore.actions.save(
$automationStore.selectedAutomation?.automation
@ -142,6 +131,16 @@
</div>
<div class="blockTitle">
{#if testResult && testResult[0]}
<div style="float: right;" on:click={() => resultsModal.show()}>
<StatusLight
positive={isTrigger || testResult[0].outputs?.success}
negative={!testResult[0].outputs?.success}
><Body size="XS">View response</Body></StatusLight
>
</div>
{/if}
<div
style="margin-left: 10px;"
on:click={() => {

View File

@ -104,7 +104,13 @@
)
bindings = bindings.concat(
outputs.map(([name, value]) => {
const runtime = idx === 0 ? `trigger.${name}` : `steps.${idx}.${name}`
let runtimeName =
$automationStore.selectedAutomation.automation.definition.steps.find(
x => block.id === x.blockToLoop
)
? `loop.${name}`
: `steps.${idx}.${name}`
const runtime = idx === 0 ? `trigger.${name}` : runtimeName
return {
label: runtime,
type: value.type,
@ -115,6 +121,7 @@
})
)
}
return bindings
}

View File

@ -36,7 +36,7 @@ exports.definition = {
},
success: {
type: "boolean",
description: "Whether the message sent successfully",
description: "Whether the message loop was successfully",
},
iterations: {
type: "number",

View File

@ -17,7 +17,6 @@ const LOOP_STEP_ID = actions.ACTION_DEFINITIONS.LOOP.stepId
const CRON_STEP_ID = triggerDefs.CRON.stepId
const STOPPED_STATUS = { success: false, status: "STOPPED" }
const { cloneDeep } = require("lodash/fp")
const { loop } = require("svelte/internal")
/**
* The automation orchestrator is a class responsible for executing automations.
@ -89,6 +88,7 @@ class Orchestrator {
let stepCount = 0
let loopStepNumber
let loopSteps = []
let lastLoopStep
for (let step of automation.definition.steps) {
stepCount++
if (step.stepId === LOOP_STEP_ID) {
@ -145,13 +145,9 @@ class Orchestrator {
})
continue
}
if (loopStep) {
loopSteps.push({
id: step.id,
stepId: step.stepId,
inputs: step.inputs,
outputs,
})
this._context.steps.splice(loopStepNumber, 1)
if (loopStep && loopSteps) {
loopSteps.push(outputs)
} else {
this.updateExecutionOutput(
step.id,
@ -166,34 +162,30 @@ class Orchestrator {
}
if (index === iterations - 1) {
lastLoopStep = loopStep
loopStep = null
break
}
}
if (loopSteps) {
this.executionOutput.steps.splice(loopStepNumber, 0, {
id: step.id,
stepId: step.stepId,
outputs: {
success: true,
outputs: loopSteps,
iterations: iterations,
},
})
this._context.steps.splice(loopStepNumber, 0, {
id: step.id,
stepId: step.stepId,
steps: loopSteps,
iterations,
success: true,
if (loopSteps && loopSteps.length) {
let tempOutput = { success: true, outputs: loopSteps }
this.executionOutput.steps.splice(loopStep, 0, {
id: lastLoopStep.id,
stepId: lastLoopStep.stepId,
outputs: tempOutput,
inputs: step.inputs,
})
this._context.steps.splice(loopStep, 0, tempOutput)
loopSteps = null
}
}
// Increment quota for automation runs
if (!env.SELF_HOSTED && !isDevAppID(this._appId)) {
await usage.update(usage.Properties.AUTOMATION, 1)
}
console.log(JSON.stringify(this._context, null, 2))
// make that we don't loop the next step if we have already been looping (loop block only has one step)
return this.executionOutput
}