From 608a38489fdc90b91507621f7a986978cef39793 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Tue, 25 Apr 2023 12:34:50 +0100 Subject: [PATCH 01/16] Export undefineds as empty values in csv, instead of empty strings --- packages/server/src/api/controllers/row/internal.ts | 5 ++++- packages/server/src/api/controllers/row/utils.ts | 4 ++-- packages/server/src/api/controllers/view/exporters.ts | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/server/src/api/controllers/row/internal.ts b/packages/server/src/api/controllers/row/internal.ts index a0bebc2490..cc1450060c 100644 --- a/packages/server/src/api/controllers/row/internal.ts +++ b/packages/server/src/api/controllers/row/internal.ts @@ -37,7 +37,7 @@ import { Table, } from "@budibase/types" -const { cleanExportRows } = require("./utils") +import { cleanExportRows } from "./utils" const CALCULATION_TYPES = { SUM: "sum", @@ -391,6 +391,9 @@ export async function exportRows(ctx: UserCtx) { const table = await db.get(ctx.params.tableId) const rowIds = ctx.request.body.rows let format = ctx.query.format + if (typeof format !== "string") { + ctx.throw(400, "Format parameter is not valid") + } const { columns, query } = ctx.request.body let result diff --git a/packages/server/src/api/controllers/row/utils.ts b/packages/server/src/api/controllers/row/utils.ts index e96a4fe6ee..a7c467ea61 100644 --- a/packages/server/src/api/controllers/row/utils.ts +++ b/packages/server/src/api/controllers/row/utils.ts @@ -137,8 +137,8 @@ export function cleanExportRows( delete schema[column] }) - // Intended to avoid 'undefined' in export if (format === Format.CSV) { + // Intended to append empty values in export const schemaKeys = Object.keys(schema) for (let key of schemaKeys) { if (columns?.length && columns.indexOf(key) > 0) { @@ -146,7 +146,7 @@ export function cleanExportRows( } for (let row of cleanRows) { if (row[key] == null) { - row[key] = "" + row[key] = undefined } } } diff --git a/packages/server/src/api/controllers/view/exporters.ts b/packages/server/src/api/controllers/view/exporters.ts index 4d927bca27..ec0aca95a9 100644 --- a/packages/server/src/api/controllers/view/exporters.ts +++ b/packages/server/src/api/controllers/view/exporters.ts @@ -10,7 +10,9 @@ export function csv(headers: string[], rows: Row[]) { val = typeof val === "object" && !(val instanceof Date) ? `"${JSON.stringify(val).replace(/"/g, "'")}"` - : `"${val}"` + : val !== undefined + ? `"${val}"` + : "" return val.trim() }) .join(",")}` From 50336c80e3aba56c86374e014e8b97686a6fda1f Mon Sep 17 00:00:00 2001 From: Gerard Burns Date: Thu, 27 Apr 2023 12:01:36 +0100 Subject: [PATCH 02/16] Stop Multiple onClick Events from Firing --- packages/client/src/components/app/Button.svelte | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/client/src/components/app/Button.svelte b/packages/client/src/components/app/Button.svelte index 018f21c583..51452de199 100644 --- a/packages/client/src/components/app/Button.svelte +++ b/packages/client/src/components/app/Button.svelte @@ -5,6 +5,8 @@ const { styleable, builderStore } = getContext("sdk") const component = getContext("component") + let handlingOnClick = false + export let disabled = false export let text = "" export let onClick @@ -16,6 +18,16 @@ export let icon = null export let active = false + const handleOnClick = async () => { + if (handlingOnClick) { + return + } + + handlingOnClick = true + await onClick() + handlingOnClick = false + } + let node $: $component.editing && node?.focus() @@ -39,7 +51,7 @@ class:spectrum-Button--quiet={quiet} {disabled} use:styleable={$component.styles} - on:click={onClick} + on:click={handleOnClick} contenteditable={$component.editing && !icon} on:blur={$component.editing ? updateText : null} bind:this={node} From 8d6c00644a4604938f4e97222a977d2ed64d3105 Mon Sep 17 00:00:00 2001 From: Gerard Burns Date: Thu, 27 Apr 2023 13:33:22 +0100 Subject: [PATCH 03/16] Improve Automations Error Message --- packages/builder/src/builderStore/store/automation/index.js | 3 +++ .../AutomationBuilder/FlowChart/TestDataModal.svelte | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/builder/src/builderStore/store/automation/index.js b/packages/builder/src/builderStore/store/automation/index.js index dc1e2a2cc1..9e5516c512 100644 --- a/packages/builder/src/builderStore/store/automation/index.js +++ b/packages/builder/src/builderStore/store/automation/index.js @@ -147,6 +147,9 @@ const automationActions = store => ({ testData, }) if (!result?.trigger && !result?.steps?.length) { + if (result?.err?.code === "usage_limit_exceeded") { + throw "You have exceeded your automation quota" + } throw "Something went wrong testing your automation" } store.update(state => { diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/TestDataModal.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/TestDataModal.svelte index cd170142e4..17d5b35575 100644 --- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/TestDataModal.svelte +++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/TestDataModal.svelte @@ -52,7 +52,7 @@ await automationStore.actions.test($selectedAutomation, testData) $automationStore.showTestPanel = true } catch (error) { - notifications.error("Error testing automation") + notifications.error(error) } } From e74d4b4ddb3212db11095a7a969957bfc795f5fb Mon Sep 17 00:00:00 2001 From: Gerard Burns Date: Thu, 27 Apr 2023 14:17:09 +0100 Subject: [PATCH 04/16] PR Feedback --- packages/client/src/components/app/Button.svelte | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/client/src/components/app/Button.svelte b/packages/client/src/components/app/Button.svelte index 51452de199..a074986342 100644 --- a/packages/client/src/components/app/Button.svelte +++ b/packages/client/src/components/app/Button.svelte @@ -19,12 +19,12 @@ export let active = false const handleOnClick = async () => { - if (handlingOnClick) { - return + handlingOnClick = true + + if (onClick) { + await onClick() } - handlingOnClick = true - await onClick() handlingOnClick = false } @@ -49,7 +49,7 @@