fix bindings references being updated
This commit is contained in:
parent
b1dabe7dc5
commit
38fe8375ce
|
@ -3,6 +3,7 @@ import { API } from "api"
|
||||||
import { cloneDeep } from "lodash/fp"
|
import { cloneDeep } from "lodash/fp"
|
||||||
import { generate } from "shortid"
|
import { generate } from "shortid"
|
||||||
import { selectedAutomation } from "builderStore"
|
import { selectedAutomation } from "builderStore"
|
||||||
|
import { notifications } from "@budibase/bbui"
|
||||||
|
|
||||||
const initialAutomationState = {
|
const initialAutomationState = {
|
||||||
automations: [],
|
automations: [],
|
||||||
|
@ -21,6 +22,38 @@ export const getAutomationStore = () => {
|
||||||
return store
|
return store
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateReferencesInObject(obj, modifiedIndex, action) {
|
||||||
|
const regex = /{{\s*steps\.(\d+)\./g
|
||||||
|
|
||||||
|
for (const key in obj) {
|
||||||
|
if (typeof obj[key] === "string") {
|
||||||
|
let matches
|
||||||
|
while ((matches = regex.exec(obj[key])) !== null) {
|
||||||
|
const referencedStep = parseInt(matches[1])
|
||||||
|
if (action === "add" && referencedStep >= modifiedIndex) {
|
||||||
|
obj[key] = obj[key].replace(
|
||||||
|
`{{ steps.${referencedStep}.`,
|
||||||
|
`{{ steps.${referencedStep + 1}.`
|
||||||
|
)
|
||||||
|
} else if (action === "delete" && referencedStep > modifiedIndex) {
|
||||||
|
obj[key] = obj[key].replace(
|
||||||
|
`{{ steps.${referencedStep}.`,
|
||||||
|
`{{ steps.${referencedStep - 1}.`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (typeof obj[key] === "object" && obj[key] !== null) {
|
||||||
|
updateReferencesInObject(obj[key], modifiedIndex, action)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateStepReferences(steps, modifiedIndex, action) {
|
||||||
|
steps.forEach(step => {
|
||||||
|
updateReferencesInObject(step.inputs, modifiedIndex, action)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const automationActions = store => ({
|
const automationActions = store => ({
|
||||||
definitions: async () => {
|
definitions: async () => {
|
||||||
const response = await API.getAutomationDefinitions()
|
const response = await API.getAutomationDefinitions()
|
||||||
|
@ -218,6 +251,12 @@ const automationActions = store => ({
|
||||||
if (!automation) {
|
if (!automation) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
updateStepReferences(newAutomation.definition.steps, blockIdx, "add")
|
||||||
|
} catch (e) {
|
||||||
|
notifications.error("Error adding automation block")
|
||||||
|
}
|
||||||
newAutomation.definition.steps.splice(blockIdx, 0, block)
|
newAutomation.definition.steps.splice(blockIdx, 0, block)
|
||||||
await store.actions.save(newAutomation)
|
await store.actions.save(newAutomation)
|
||||||
},
|
},
|
||||||
|
@ -245,7 +284,7 @@ const automationActions = store => ({
|
||||||
await store.actions.save(newAutomation)
|
await store.actions.save(newAutomation)
|
||||||
},
|
},
|
||||||
|
|
||||||
deleteAutomationBlock: async block => {
|
deleteAutomationBlock: async (block, blockIdx) => {
|
||||||
const automation = get(selectedAutomation)
|
const automation = get(selectedAutomation)
|
||||||
let newAutomation = cloneDeep(automation)
|
let newAutomation = cloneDeep(automation)
|
||||||
|
|
||||||
|
@ -259,6 +298,12 @@ const automationActions = store => ({
|
||||||
)
|
)
|
||||||
delete newAutomation.definition.stepNames[block.id]
|
delete newAutomation.definition.stepNames[block.id]
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
updateStepReferences(newAutomation.definition.steps, blockIdx, "delete")
|
||||||
|
} catch (e) {
|
||||||
|
notifications.error("Error deleting automation block")
|
||||||
|
}
|
||||||
|
|
||||||
await store.actions.save(newAutomation)
|
await store.actions.save(newAutomation)
|
||||||
},
|
},
|
||||||
replace: async (automationId, automation) => {
|
replace: async (automationId, automation) => {
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
if (loopBlock) {
|
if (loopBlock) {
|
||||||
await automationStore.actions.deleteAutomationBlock(loopBlock)
|
await automationStore.actions.deleteAutomationBlock(loopBlock)
|
||||||
}
|
}
|
||||||
await automationStore.actions.deleteAutomationBlock(block)
|
await automationStore.actions.deleteAutomationBlock(block, blockIdx)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
notifications.error("Error saving automation")
|
notifications.error("Error saving automation")
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
let fillWidth = true
|
let fillWidth = true
|
||||||
let inputData
|
let inputData
|
||||||
let codeBindingOpen = false
|
let codeBindingOpen = false
|
||||||
|
$: console.log($selectedAutomation?.definition)
|
||||||
$: filters = lookForFilters(schemaProperties) || []
|
$: filters = lookForFilters(schemaProperties) || []
|
||||||
$: tempFilters = filters
|
$: tempFilters = filters
|
||||||
$: stepId = block.stepId
|
$: stepId = block.stepId
|
||||||
|
@ -136,6 +136,7 @@
|
||||||
await automationStore.actions.addTestDataToAutomation(newTestData)
|
await automationStore.actions.addTestDataToAutomation(newTestData)
|
||||||
} else {
|
} else {
|
||||||
const data = { schema, [key]: e.detail }
|
const data = { schema, [key]: e.detail }
|
||||||
|
console.log(data)
|
||||||
await automationStore.actions.updateBlockInputs(block, data)
|
await automationStore.actions.updateBlockInputs(block, data)
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
@ -195,8 +196,8 @@
|
||||||
bindingRank = idx - loopBlockCount
|
bindingRank = idx - loopBlockCount
|
||||||
}
|
}
|
||||||
let bindingName =
|
let bindingName =
|
||||||
automation.stepNames?.[allSteps[bindingRank - loopBlockCount].id]
|
automation.stepNames?.[allSteps[idx - loopBlockCount].id]
|
||||||
|
console.log(bindingName)
|
||||||
bindings = bindings.concat(
|
bindings = bindings.concat(
|
||||||
outputs.map(([name, value]) => {
|
outputs.map(([name, value]) => {
|
||||||
let runtimeName = isLoopBlock
|
let runtimeName = isLoopBlock
|
||||||
|
|
Loading…
Reference in New Issue