diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte index 9c987c89d8..05cae46cfc 100644 --- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte +++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte @@ -12,6 +12,7 @@ notifications, Modal, } from "@budibase/bbui" + import { ActionStepID } from "constants/backend/automations" export let automation let testDataModal @@ -82,7 +83,7 @@ in:fly|local={{ x: 500, duration: 500 }} out:fly|local={{ x: 500, duration: 500 }} > - {#if block.stepId !== "LOOP"} + {#if block.stepId !== ActionStepID.LOOP} {/if} diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte index 291575f3f2..412683721f 100644 --- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte +++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte @@ -10,11 +10,15 @@ Select, ActionButton, notifications, + Label, } from "@budibase/bbui" import AutomationBlockSetup from "../../SetupPanel/AutomationBlockSetup.svelte" import CreateWebhookModal from "components/automation/Shared/CreateWebhookModal.svelte" import ActionModal from "./ActionModal.svelte" import FlowItemHeader from "./FlowItemHeader.svelte" + import RoleSelect from "components/design/settings/controls/RoleSelect.svelte" + import { ActionStepID, TriggerStepID } from "constants/backend/automations" + import { permissions } from "stores/backend" export let block export let testDataModal @@ -23,9 +27,12 @@ let actionModal let blockComplete let showLooping = false + let role + $: automationId = $automationStore.selectedAutomation?.automation._id $: showBindingPicker = - block.stepId === "CREATE_ROW" || block.stepId === "UPDATE_ROW" + block.stepId === ActionStepID.CREATE_ROW || + block.stepId === ActionStepID.UPDATE_ROW $: isTrigger = block.type === "TRIGGER" @@ -45,6 +52,32 @@ x => x.blockToLoop === block.id ) + $: setPermissions(role) + $: getPermissions(automationId) + + async function setPermissions(role) { + if (!role || !automationId) { + return + } + await permissions.save({ + level: "execute", + role, + resource: automationId, + }) + } + + async function getPermissions(automationId) { + if (!automationId) { + return + } + const perms = await permissions.forResource(automationId) + if (!perms["execute"]) { + role = "BASIC" + } else { + role = perms["execute"] + } + } + async function removeLooping() { loopingSelected = false let loopBlock = @@ -205,6 +238,10 @@ {/if} + {#if block.stepId === TriggerStepID.APP} + + + {/if} import { Icon, Divider, Tabs, Tab, TextArea, Label } from "@budibase/bbui" import FlowItemHeader from "./FlowChart/FlowItemHeader.svelte" + import { ActionStepID } from "constants/backend/automations" export let automation export let testResults @@ -10,7 +11,7 @@ let blocks function prepTestResults(results) { - return results?.steps.filter(x => x.stepId !== "LOOP" || []) + return results?.steps.filter(x => x.stepId !== ActionStepID.LOOP || []) } function textArea(results, message) { @@ -30,7 +31,7 @@ } blocks = blocks .concat(automation.definition.steps || []) - .filter(x => x.stepId !== "LOOP") + .filter(x => x.stepId !== ActionStepID.LOOP) } else if (filteredResults) { blocks = filteredResults || [] // make sure there is an ID for each block being displayed @@ -45,7 +46,7 @@
{#each blocks as block, idx}
- {#if block.stepId !== "LOOP"} + {#if block.stepId !== ActionStepID.LOOP} x.stepId !== "LOOP") + .filter(x => x.stepId !== ActionStepID.LOOP) } else if (testResults) { blocks = testResults.steps || [] } diff --git a/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte b/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte index 9543a9c552..eb148534f3 100644 --- a/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte +++ b/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte @@ -11,6 +11,7 @@ Body, Icon, } from "@budibase/bbui" + import { TriggerStepID } from "constants/backend/automations" let name let selectedTrigger @@ -35,7 +36,7 @@ ) automationStore.actions.addBlockToAutomation(newBlock) - if (triggerVal.stepId === "WEBHOOK") { + if (triggerVal.stepId === TriggerStepID.WEBHOOK) { webhookModal.show } diff --git a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte index c149b6a00e..8b34cf8cd2 100644 --- a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte +++ b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte @@ -30,6 +30,7 @@ import { LuceneUtils } from "@budibase/frontend-core" import { getSchemaForTable } from "builderStore/dataBinding" import { Utils } from "@budibase/frontend-core" + import { TriggerStepID, ActionStepID } from "constants/backend/automations" export let block export let testData @@ -54,12 +55,13 @@ $: schema = getSchemaForTable(tableId, { searchableSchema: true }).schema $: schemaFields = Object.values(schema || {}) $: queryLimit = tableId?.includes("datasource") ? "∞" : "1000" + $: isTrigger = block?.type === "TRIGGER" const onChange = Utils.sequential(async (e, key) => { try { if (isTestModal) { // Special case for webhook, as it requires a body, but the schema already brings back the body's contents - if (stepId === "WEBHOOK") { + if (stepId === TriggerStepID.WEBHOOK) { automationStore.actions.addTestDataToAutomation({ body: { [key]: e.detail, @@ -100,9 +102,9 @@ // Extract all outputs from all previous steps as available bindins let bindings = [] for (let idx = 0; idx < blockIdx; idx++) { - let wasLoopBlock = allSteps[idx]?.stepId === "LOOP" + let wasLoopBlock = allSteps[idx]?.stepId === ActionStepID.LOOP let isLoopBlock = - allSteps[idx]?.stepId === "LOOP" && + allSteps[idx]?.stepId === ActionStepID.LOOP && allSteps.find(x => x.blockToLoop === block.id) // If the previous block was a loop block, decerement the index so the following @@ -261,6 +263,7 @@ /> {:else if value.customType === "table"} onChange(e, key)} /> @@ -343,7 +346,7 @@ -{#if stepId === "WEBHOOK"} +{#if stepId === TriggerStepID.WEBHOOK} {/if} diff --git a/packages/builder/src/components/automation/SetupPanel/CronBuilder.svelte b/packages/builder/src/components/automation/SetupPanel/CronBuilder.svelte index 1b410cd86a..93b8394b49 100644 --- a/packages/builder/src/components/automation/SetupPanel/CronBuilder.svelte +++ b/packages/builder/src/components/automation/SetupPanel/CronBuilder.svelte @@ -1,5 +1,5 @@
- - + (touched = true)} /> + {#if touched && !value} + + {/if}
diff --git a/packages/builder/src/components/automation/SetupPanel/TableSelector.svelte b/packages/builder/src/components/automation/SetupPanel/TableSelector.svelte index ceb28a37ca..1645ded66b 100644 --- a/packages/builder/src/components/automation/SetupPanel/TableSelector.svelte +++ b/packages/builder/src/components/automation/SetupPanel/TableSelector.svelte @@ -2,10 +2,16 @@ import { tables } from "stores/backend" import { Select } from "@budibase/bbui" import { createEventDispatcher } from "svelte" + import { TableNames } from "constants" const dispatch = createEventDispatcher() export let value + export let isTrigger + + $: filteredTables = $tables.list.filter(table => { + return !isTrigger || table._id !== TableNames.USERS + }) const onChange = e => { value = e.detail @@ -16,7 +22,7 @@