From 8f7a88ce862e86f96469cff1bb5c8b07a55c3ad2 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Tue, 30 Jul 2024 16:04:33 +0100 Subject: [PATCH] Moving logic to frontend - definitions are returned unless they are deprecated, frontend decides which it can use to create. --- .../CreateAutomationModal.svelte | 4 +- .../grid/GridCreateAutomationButton.svelte | 2 +- .../builder/src/stores/builder/automations.js | 37 ++++++++++++++----- .../server/src/api/controllers/automation.ts | 9 ++--- .../src/api/routes/tests/automation.spec.ts | 6 +-- packages/server/src/automations/utils.ts | 8 +--- 6 files changed, 39 insertions(+), 27 deletions(-) diff --git a/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte b/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte index 41799cd7f3..365d3d358f 100644 --- a/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte +++ b/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte @@ -21,7 +21,9 @@ $: nameError = nameTouched && !name ? "Please specify a name for the automation." : null - $: triggers = Object.entries($automationStore.blockDefinitions.TRIGGER) + $: triggers = Object.entries( + $automationStore.blockDefinitions.CREATABLE_TRIGGER + ) async function createAutomation() { try { diff --git a/packages/builder/src/components/backend/DataTable/buttons/grid/GridCreateAutomationButton.svelte b/packages/builder/src/components/backend/DataTable/buttons/grid/GridCreateAutomationButton.svelte index 8e3d90be41..148db7554c 100644 --- a/packages/builder/src/components/backend/DataTable/buttons/grid/GridCreateAutomationButton.svelte +++ b/packages/builder/src/components/backend/DataTable/buttons/grid/GridCreateAutomationButton.svelte @@ -13,7 +13,7 @@ const { datasource } = getContext("grid") - $: triggers = $automationStore.blockDefinitions.TRIGGER + $: triggers = $automationStore.blockDefinitions.CREATABLE_TRIGGER $: table = $tables.list.find(table => table._id === $datasource.tableId) diff --git a/packages/builder/src/stores/builder/automations.js b/packages/builder/src/stores/builder/automations.js index cab8090424..fdb0991911 100644 --- a/packages/builder/src/stores/builder/automations.js +++ b/packages/builder/src/stores/builder/automations.js @@ -5,14 +5,16 @@ import { generate } from "shortid" import { createHistoryStore } from "stores/builder/history" import { notifications } from "@budibase/bbui" import { updateReferencesInObject } from "dataBinding" +import { AutomationTriggerStepId } from "@budibase/types" const initialAutomationState = { automations: [], testResults: null, showTestPanel: false, blockDefinitions: { - TRIGGER: [], - ACTION: [], + TRIGGER: {}, + CREATABLE_TRIGGER: {}, + ACTION: {}, }, selectedAutomationId: null, automationDisplayData: {}, @@ -46,14 +48,29 @@ const updateStepReferences = (steps, modifiedIndex, action) => { }) } +const getFinalDefinitions = (triggers, actions) => { + const creatable = {} + Object.entries(triggers).forEach(entry => { + if (entry[0] === AutomationTriggerStepId.ROW_ACTION) { + return + } + creatable[entry[0]] = entry[1] + }) + return { + TRIGGER: triggers, + CREATABLE_TRIGGER: creatable, + ACTION: actions, + } +} + const automationActions = store => ({ definitions: async () => { const response = await API.getAutomationDefinitions() store.update(state => { - state.blockDefinitions = { - TRIGGER: response.trigger, - ACTION: response.action, - } + state.blockDefinitions = getFinalDefinitions( + response.trigger, + response.action + ) return state }) return response @@ -69,10 +86,10 @@ const automationActions = store => ({ return a.name < b.name ? -1 : 1 }) state.automationDisplayData = automationResponse.builderData - state.blockDefinitions = { - TRIGGER: definitions.trigger, - ACTION: definitions.action, - } + state.blockDefinitions = getFinalDefinitions( + definitions.trigger, + definitions.action + ) return state }) }, diff --git a/packages/server/src/api/controllers/automation.ts b/packages/server/src/api/controllers/automation.ts index f2b9428f69..6177868303 100644 --- a/packages/server/src/api/controllers/automation.ts +++ b/packages/server/src/api/controllers/automation.ts @@ -1,10 +1,7 @@ import * as triggers from "../../automations/triggers" import { sdk as coreSdk } from "@budibase/shared-core" import { DocumentType } from "../../db/utils" -import { - updateTestHistory, - removeInvalidDefinitions, -} from "../../automations/utils" +import { updateTestHistory, removeDeprecated } from "../../automations/utils" import { setTestFlag, clearTestFlag } from "../../utilities/redis" import { context, cache, events, db as dbCore } from "@budibase/backend-core" import { automations, features } from "@budibase/pro" @@ -23,11 +20,11 @@ import { builderSocket } from "../../websockets" import env from "../../environment" async function getActionDefinitions() { - return removeInvalidDefinitions(await actionDefs()) + return removeDeprecated(await actionDefs()) } function getTriggerDefinitions() { - return removeInvalidDefinitions(triggers.TRIGGER_DEFINITIONS) + return removeDeprecated(triggers.TRIGGER_DEFINITIONS) } /************************* diff --git a/packages/server/src/api/routes/tests/automation.spec.ts b/packages/server/src/api/routes/tests/automation.spec.ts index f420c57cf7..d9d48ede38 100644 --- a/packages/server/src/api/routes/tests/automation.spec.ts +++ b/packages/server/src/api/routes/tests/automation.spec.ts @@ -14,7 +14,7 @@ import sdk from "../../../sdk" import { Automation, FieldType, Table } from "@budibase/types" import { mocks } from "@budibase/backend-core/tests" import { FilterConditions } from "../../../automations/steps/filter" -import { removeInvalidDefinitions } from "../../../automations/utils" +import { removeDeprecated } from "../../../automations/utils" const MAX_RETRIES = 4 let { @@ -71,14 +71,14 @@ describe("/automations", () => { .expect(200) let definitionsLength = Object.keys( - removeInvalidDefinitions(BUILTIN_ACTION_DEFINITIONS) + removeDeprecated(BUILTIN_ACTION_DEFINITIONS) ).length expect(Object.keys(res.body.action).length).toBeGreaterThanOrEqual( definitionsLength ) expect(Object.keys(res.body.trigger).length).toEqual( - Object.keys(removeInvalidDefinitions(TRIGGER_DEFINITIONS)).length + Object.keys(removeDeprecated(TRIGGER_DEFINITIONS)).length ) }) }) diff --git a/packages/server/src/automations/utils.ts b/packages/server/src/automations/utils.ts index e7f3dad225..775fdfe7fb 100644 --- a/packages/server/src/automations/utils.ts +++ b/packages/server/src/automations/utils.ts @@ -117,16 +117,12 @@ export async function updateTestHistory( ) } -export function removeInvalidDefinitions( +export function removeDeprecated( definitions: Record ) { - const disallowedStepIds: ( - | AutomationTriggerStepId - | AutomationActionStepId - )[] = [AutomationTriggerStepId.ROW_ACTION] const base = cloneDeep(definitions) for (let key of Object.keys(base)) { - if (base[key].deprecated || disallowedStepIds.includes(base[key].stepId)) { + if (base[key].deprecated) { delete base[key] } }