diff --git a/.github/AUTHORS.md b/.github/AUTHORS.md
index df346f3325..d31bb64987 100644
--- a/.github/AUTHORS.md
+++ b/.github/AUTHORS.md
@@ -8,4 +8,5 @@ Contributors
* Andrew Kingston - [@aptkingston](https://github.com/aptkingston)
* Michael Drury - [@mike12345567](https://github.com/mike12345567)
* Peter Clement - [@PClmnt](https://github.com/PClmnt)
-* Rory Powell - [@Rory-Powell](https://github.com/Rory-Powell)
\ No newline at end of file
+* Rory Powell - [@Rory-Powell](https://github.com/Rory-Powell)
+* Michaƫl St-Georges [@CSLTech](https://github.com/CSLTech)
\ No newline at end of file
diff --git a/lerna.json b/lerna.json
index b29f82c71a..f72b908897 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "2.26.1",
+ "version": "2.26.3",
"npmClient": "yarn",
"packages": [
"packages/*",
diff --git a/packages/backend-core/src/objectStore/utils.ts b/packages/backend-core/src/objectStore/utils.ts
index 5b9c2e3646..30c2fefbf1 100644
--- a/packages/backend-core/src/objectStore/utils.ts
+++ b/packages/backend-core/src/objectStore/utils.ts
@@ -9,6 +9,9 @@ import {
AutomationAttachmentContent,
BucketedContent,
} from "@budibase/types"
+import stream from "stream"
+import streamWeb from "node:stream/web"
+
/****************************************************
* NOTE: When adding a new bucket - name *
* sure that S3 usages (like budibase-infra) *
@@ -53,12 +56,10 @@ export const bucketTTLConfig = (
Rules: [lifecycleRule],
}
- const params = {
+ return {
Bucket: bucketName,
LifecycleConfiguration: lifecycleConfiguration,
}
-
- return params
}
async function processUrlAttachment(
@@ -69,9 +70,12 @@ async function processUrlAttachment(
throw new Error(`Unexpected response ${response.statusText}`)
}
const fallbackFilename = path.basename(new URL(attachment.url).pathname)
+ if (!response.body) {
+ throw new Error("No response received for attachment")
+ }
return {
filename: attachment.filename || fallbackFilename,
- content: response.body,
+ content: stream.Readable.fromWeb(response.body as streamWeb.ReadableStream),
}
}
diff --git a/packages/bbui/src/Actions/position_dropdown.js b/packages/bbui/src/Actions/position_dropdown.js
index 6c4fcab757..21635592d2 100644
--- a/packages/bbui/src/Actions/position_dropdown.js
+++ b/packages/bbui/src/Actions/position_dropdown.js
@@ -155,6 +155,8 @@ export default function positionDropdown(element, opts) {
applyXStrategy(Strategies.StartToEnd)
} else if (align === "left-outside") {
applyXStrategy(Strategies.EndToStart)
+ } else if (align === "center") {
+ applyXStrategy(Strategies.MidPoint)
} else {
applyXStrategy(Strategies.StartToStart)
}
diff --git a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
index 85af5bbafd..879927343f 100644
--- a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
@@ -374,6 +374,16 @@
return `${value.title || (key === "row" ? "Table" : key)} ${requiredSuffix}`
}
+ function handleAttachmentParams(keyValueObj) {
+ let params = {}
+ if (keyValueObj?.length) {
+ for (let param of keyValueObj) {
+ params[param.url] = param.filename
+ }
+ }
+ return params
+ }
+
onMount(async () => {
try {
await environment.loadVariables()
@@ -381,15 +391,6 @@
console.error(error)
}
})
- const handleAttachmentParams = keyValuObj => {
- let params = {}
- if (keyValuObj?.length) {
- for (let param of keyValuObj) {
- params[param.url] = param.filename
- }
- }
- return params
- }
diff --git a/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte b/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte
index 9b4e5e36f6..1b52e35314 100644
--- a/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte
@@ -25,21 +25,21 @@
return !!schema.constraints?.inclusion?.length
}
- const handleAttachmentParams = keyValuObj => {
+ function handleAttachmentParams(keyValueObj) {
let params = {}
if (
schema.type === FieldType.ATTACHMENT_SINGLE &&
- Object.keys(keyValuObj).length === 0
+ Object.keys(keyValueObj).length === 0
) {
return []
}
- if (!Array.isArray(keyValuObj)) {
- keyValuObj = [keyValuObj]
+ if (!Array.isArray(keyValueObj) && keyValueObj) {
+ keyValueObj = [keyValueObj]
}
- if (keyValuObj.length) {
- for (let param of keyValuObj) {
+ if (keyValueObj.length) {
+ for (let param of keyValueObj) {
params[param.url] = param.filename
}
}
diff --git a/packages/builder/src/components/backend/DataTable/TableDataTable.svelte b/packages/builder/src/components/backend/DataTable/TableDataTable.svelte
index 77229f3a17..26972ede16 100644
--- a/packages/builder/src/components/backend/DataTable/TableDataTable.svelte
+++ b/packages/builder/src/components/backend/DataTable/TableDataTable.svelte
@@ -1,5 +1,6 @@
@@ -14,12 +15,16 @@
-
-
-
-
+ {#if !disabled}
+
+
+
+
+
+
+ {:else}
-
+ {/if}
diff --git a/packages/builder/src/components/common/UpdateAppForm.svelte b/packages/builder/src/components/common/UpdateAppForm.svelte
new file mode 100644
index 0000000000..0e07c5c918
--- /dev/null
+++ b/packages/builder/src/components/common/UpdateAppForm.svelte
@@ -0,0 +1,214 @@
+
+
+
+
+
diff --git a/packages/builder/src/components/common/UpdateAppTopNav.svelte b/packages/builder/src/components/common/UpdateAppTopNav.svelte
new file mode 100644
index 0000000000..f4a76c4576
--- /dev/null
+++ b/packages/builder/src/components/common/UpdateAppTopNav.svelte
@@ -0,0 +1,68 @@
+
+
+
+
+
+
{
+ formPopover.show()
+ }}
+ >
+
+
+
+
+
+
+
+ {
+ formPopoverOpen = false
+ }}
+ on:open={() => {
+ formPopoverOpen = true
+ }}
+>
+
+
+ {
+ formPopover.hide()
+ }}
+ />
+
+
+
+
+
diff --git a/packages/builder/src/components/deploy/AppActions.svelte b/packages/builder/src/components/deploy/AppActions.svelte
index 105d1ed958..bb950983a6 100644
--- a/packages/builder/src/components/deploy/AppActions.svelte
+++ b/packages/builder/src/components/deploy/AppActions.svelte
@@ -8,13 +8,11 @@
ActionButton,
Icon,
Link,
- Modal,
StatusLight,
AbsTooltip,
} from "@budibase/bbui"
import RevertModal from "components/deploy/RevertModal.svelte"
import VersionModal from "components/deploy/VersionModal.svelte"
- import UpdateAppModal from "components/start/UpdateAppModal.svelte"
import { processStringSync } from "@budibase/string-templates"
import ConfirmDialog from "components/common/ConfirmDialog.svelte"
import analytics, { Events, EventSource } from "analytics"
@@ -26,7 +24,6 @@
isOnlyUser,
appStore,
deploymentStore,
- initialise,
sortedScreens,
} from "stores/builder"
import TourWrap from "components/portal/onboarding/TourWrap.svelte"
@@ -37,7 +34,6 @@
export let loaded
let unpublishModal
- let updateAppModal
let revertModal
let versionModal
let appActionPopover
@@ -61,11 +57,6 @@
$: canPublish = !publishing && loaded && $sortedScreens.length > 0
$: lastDeployed = getLastDeployedString($deploymentStore, lastOpened)
- const initialiseApp = async () => {
- const applicationPkg = await API.fetchAppPackage($appStore.devId)
- await initialise(applicationPkg)
- }
-
const getLastDeployedString = deployments => {
return deployments?.length
? processStringSync("Published {{ duration time 'millisecond' }} ago", {
@@ -247,16 +238,12 @@
appActionPopover.hide()
if (isPublished) {
viewApp()
- } else {
- updateAppModal.show()
}
}}
>
{$appStore.url}
{#if isPublished}
- {:else}
-
{/if}