diff --git a/lerna.json b/lerna.json index 16dc73aa30..b29f82c71a 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.25.0", + "version": "2.26.1", "npmClient": "yarn", "packages": [ "packages/*", diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 030fec8728..ff35ccee22 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -73,7 +73,6 @@ "chance": "1.1.8", "ioredis-mock": "8.9.0", "jest": "29.7.0", - "jest-environment-node": "29.7.0", "jest-serial-runner": "1.2.1", "pino-pretty": "10.0.0", "pouchdb-adapter-memory": "7.2.2", diff --git a/packages/builder/package.json b/packages/builder/package.json index f29ae3f7f2..a00936bdca 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -93,7 +93,6 @@ "identity-obj-proxy": "^3.0.0", "jest": "29.7.0", "jsdom": "^21.1.1", - "ncp": "^2.0.0", "svelte-jester": "^1.3.2", "vite": "^4.5.0", "vite-plugin-static-copy": "^0.17.0", diff --git a/packages/builder/src/components/common/FontAwesomeIcon.svelte b/packages/builder/src/components/common/FontAwesomeIcon.svelte index 16c065cfaa..0e10dfc86c 100644 --- a/packages/builder/src/components/common/FontAwesomeIcon.svelte +++ b/packages/builder/src/components/common/FontAwesomeIcon.svelte @@ -23,6 +23,7 @@ faQuestionCircle, faCircleCheck, faGear, + faRectangleList, } from "@fortawesome/free-solid-svg-icons" import { faGithub, faDiscord } from "@fortawesome/free-brands-svg-icons" @@ -37,6 +38,7 @@ faFileArrowUp, faChevronLeft, faCircleInfo, + faRectangleList, // -- Required for easyMDE use in the builder. faBold, diff --git a/packages/builder/src/components/common/HelpMenu.svelte b/packages/builder/src/components/common/HelpMenu.svelte index 63156676d2..0ce5ab9c8e 100644 --- a/packages/builder/src/components/common/HelpMenu.svelte +++ b/packages/builder/src/components/common/HelpMenu.svelte @@ -4,6 +4,7 @@ import { isEnabled, TENANT_FEATURE_FLAGS } from "helpers/featureFlags" import { licensing } from "stores/portal" import { isPremiumOrAbove } from "helpers/planTitle" + import { ChangelogURL } from "constants" $: premiumOrAboveLicense = isPremiumOrAbove($licensing?.license?.plan?.type) @@ -30,6 +31,13 @@ Help docs
+ +
+ +
+ Changelog +
+
{/if} + + Find the changelog for the latest release + here + {#if revertAvailable} You can revert this app to version diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte index 096341783d..a857bc7ede 100644 --- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte +++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte @@ -49,17 +49,20 @@ }, ] - $: tables = findAllMatchingComponents($selectedScreen?.props, component => - component._component.endsWith("table") - ) - $: tableBlocks = findAllMatchingComponents( + $: components = findAllMatchingComponents( $selectedScreen?.props, - component => component._component.endsWith("tableblock") + component => { + const type = component._component + return ( + type.endsWith("/table") || + type.endsWith("/tableblock") || + type.endsWith("/gridblock") + ) + } ) - $: components = tables.concat(tableBlocks) $: componentOptions = components.map(table => ({ label: table._instanceName, - value: table._component.includes("tableblock") + value: table._component.endsWith("/tableblock") ? `${table._id}-table` : table._id, })) @@ -69,6 +72,7 @@ $: selectedTable = components.find( component => component._id === selectedTableId ) + $: parameters.rows = `{{ literal [${parameters.tableComponentId}].[selectedRows] }}` onMount(() => { if (!parameters.type) { diff --git a/packages/builder/src/constants/index.js b/packages/builder/src/constants/index.js index f556ee4b05..44c71f2e3b 100644 --- a/packages/builder/src/constants/index.js +++ b/packages/builder/src/constants/index.js @@ -70,3 +70,5 @@ export const PlanModel = { PER_USER: "perUser", DAY_PASS: "dayPass", } + +export const ChangelogURL = "https://docs.budibase.com/changelog" diff --git a/packages/builder/src/stores/builder/automations.js b/packages/builder/src/stores/builder/automations.js index a31b05a8d8..cbe48cef33 100644 --- a/packages/builder/src/stores/builder/automations.js +++ b/packages/builder/src/stores/builder/automations.js @@ -166,10 +166,16 @@ const automationActions = store => ({ await store.actions.save(newAutomation) }, test: async (automation, testData) => { - const result = await API.testAutomation({ - automationId: automation?._id, - testData, - }) + let result + try { + result = await API.testAutomation({ + automationId: automation?._id, + testData, + }) + } catch (err) { + const message = err.message || err.status || JSON.stringify(err) + throw `Automation test failed - ${message}` + } if (!result?.trigger && !result?.steps?.length) { if (result?.err?.code === "usage_limit_exceeded") { throw "You have exceeded your automation quota" diff --git a/packages/client/manifest.json b/packages/client/manifest.json index cf5ed8140b..2fae9c0213 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -7017,10 +7017,22 @@ ] } ], - "context": { - "type": "schema", - "scope": "local" - }, + "context": [ + { + "type": "schema", + "scope": "local" + }, + { + "type": "static", + "values": [ + { + "label": "Selected rows", + "key": "selectedRows", + "type": "array" + } + ] + } + ], "actions": ["RefreshDatasource"] }, "bbreferencefield": { diff --git a/packages/client/src/components/app/GridBlock.svelte b/packages/client/src/components/app/GridBlock.svelte index e365429cb6..4ed8f91f2a 100644 --- a/packages/client/src/components/app/GridBlock.svelte +++ b/packages/client/src/components/app/GridBlock.svelte @@ -1,8 +1,8 @@
- - onRowClick?.({ row: e.detail })} - /> - + onRowClick?.({ row: e.detail })} + />
+ +