diff --git a/lerna.json b/lerna.json
index c27dac0362..ebac370ac8 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "2.6.0",
+ "version": "2.6.6",
"npmClient": "yarn",
"useWorkspaces": true,
"packages": ["packages/*"],
diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json
index a9811a66c5..6373218402 100644
--- a/packages/backend-core/package.json
+++ b/packages/backend-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/backend-core",
- "version": "2.6.0",
+ "version": "2.6.6",
"description": "Budibase backend core libraries used in server and worker",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",
@@ -24,7 +24,7 @@
"dependencies": {
"@budibase/nano": "10.1.2",
"@budibase/pouchdb-replication-stream": "1.2.10",
- "@budibase/types": "^2.6.0",
+ "@budibase/types": "^2.6.6",
"@shopify/jest-koa-mocks": "5.0.1",
"@techpass/passport-openidconnect": "0.3.2",
"aws-cloudfront-sign": "2.2.0",
diff --git a/packages/backend-core/src/environment.ts b/packages/backend-core/src/environment.ts
index 1bea1f3692..155f09e6d9 100644
--- a/packages/backend-core/src/environment.ts
+++ b/packages/backend-core/src/environment.ts
@@ -96,6 +96,7 @@ const environment = {
SALT_ROUNDS: process.env.SALT_ROUNDS,
REDIS_URL: process.env.REDIS_URL || "localhost:6379",
REDIS_PASSWORD: process.env.REDIS_PASSWORD || "budibase",
+ REDIS_CLUSTERED: process.env.REDIS_CLUSTERED,
MOCK_REDIS: process.env.MOCK_REDIS,
MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY,
MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY,
diff --git a/packages/backend-core/src/queue/listeners.ts b/packages/backend-core/src/queue/listeners.ts
index e1975b5d06..331b690fe9 100644
--- a/packages/backend-core/src/queue/listeners.ts
+++ b/packages/backend-core/src/queue/listeners.ts
@@ -40,6 +40,12 @@ function logging(queue: Queue, jobQueue: JobQueue) {
case JobQueue.APP_BACKUP:
eventType = "app-backup-event"
break
+ case JobQueue.AUDIT_LOG:
+ eventType = "audit-log-event"
+ break
+ case JobQueue.SYSTEM_EVENT_QUEUE:
+ eventType = "system-event"
+ break
}
if (process.env.NODE_DEBUG?.includes("bull")) {
queue
diff --git a/packages/backend-core/src/redis/redis.ts b/packages/backend-core/src/redis/redis.ts
index 186865ccda..2d54b51a9f 100644
--- a/packages/backend-core/src/redis/redis.ts
+++ b/packages/backend-core/src/redis/redis.ts
@@ -12,7 +12,7 @@ import * as timers from "../timers"
const RETRY_PERIOD_MS = 2000
const STARTUP_TIMEOUT_MS = 5000
-const CLUSTERED = false
+const CLUSTERED = env.REDIS_CLUSTERED
const DEFAULT_SELECT_DB = SelectableDatabase.DEFAULT
// for testing just generate the client once
@@ -81,7 +81,7 @@ function init(selectDb = DEFAULT_SELECT_DB) {
if (client) {
client.disconnect()
}
- const { redisProtocolUrl, opts, host, port } = getRedisOptions(CLUSTERED)
+ const { redisProtocolUrl, opts, host, port } = getRedisOptions()
if (CLUSTERED) {
client = new Redis.Cluster([{ host, port }], opts)
diff --git a/packages/backend-core/src/redis/utils.ts b/packages/backend-core/src/redis/utils.ts
index 7606c77b87..2c49ee4941 100644
--- a/packages/backend-core/src/redis/utils.ts
+++ b/packages/backend-core/src/redis/utils.ts
@@ -57,7 +57,7 @@ export enum SelectableDatabase {
UNUSED_14 = 15,
}
-export function getRedisOptions(clustered = false) {
+export function getRedisOptions() {
let password = env.REDIS_PASSWORD
let url: string[] | string = env.REDIS_URL.split("//")
// get rid of the protocol
@@ -83,7 +83,7 @@ export function getRedisOptions(clustered = false) {
const opts: any = {
connectTimeout: CONNECT_TIMEOUT_MS,
}
- if (clustered) {
+ if (env.REDIS_CLUSTERED) {
opts.redisOptions = {}
opts.redisOptions.tls = {}
opts.redisOptions.password = password
diff --git a/packages/bbui/package.json b/packages/bbui/package.json
index 4cfad5cced..9b536c1183 100644
--- a/packages/bbui/package.json
+++ b/packages/bbui/package.json
@@ -1,7 +1,7 @@
{
"name": "@budibase/bbui",
"description": "A UI solution used in the different Budibase projects.",
- "version": "2.6.0",
+ "version": "2.6.6",
"license": "MPL-2.0",
"svelte": "src/index.js",
"module": "dist/bbui.es.js",
@@ -38,8 +38,8 @@
],
"dependencies": {
"@adobe/spectrum-css-workflow-icons": "1.2.1",
- "@budibase/shared-core": "^2.6.0",
- "@budibase/string-templates": "^2.6.0",
+ "@budibase/shared-core": "^2.6.6",
+ "@budibase/string-templates": "^2.6.6",
"@spectrum-css/accordion": "3.0.24",
"@spectrum-css/actionbutton": "1.0.1",
"@spectrum-css/actiongroup": "1.0.1",
diff --git a/packages/bbui/src/Actions/click_outside.js b/packages/bbui/src/Actions/click_outside.js
index 5b7a059493..1961dca47c 100644
--- a/packages/bbui/src/Actions/click_outside.js
+++ b/packages/bbui/src/Actions/click_outside.js
@@ -1,4 +1,8 @@
-const ignoredClasses = [".flatpickr-calendar", ".spectrum-Popover"]
+const ignoredClasses = [
+ ".flatpickr-calendar",
+ ".spectrum-Popover",
+ ".download-js-link",
+]
let clickHandlers = []
/**
@@ -22,8 +26,8 @@ const handleClick = event => {
}
// Ignore clicks for modals, unless the handler is registered from a modal
- const sourceInModal = handler.anchor.closest(".spectrum-Modal") != null
- const clickInModal = event.target.closest(".spectrum-Modal") != null
+ const sourceInModal = handler.anchor.closest(".spectrum-Underlay") != null
+ const clickInModal = event.target.closest(".spectrum-Underlay") != null
if (clickInModal && !sourceInModal) {
return
}
diff --git a/packages/builder/assets/integromat.png b/packages/builder/assets/integromat.png
deleted file mode 100644
index 1fbbe63e74..0000000000
Binary files a/packages/builder/assets/integromat.png and /dev/null differ
diff --git a/packages/builder/assets/make.svg b/packages/builder/assets/make.svg
new file mode 100644
index 0000000000..75c33cd0b5
--- /dev/null
+++ b/packages/builder/assets/make.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/builder/package.json b/packages/builder/package.json
index 4808196d7c..442e6482b2 100644
--- a/packages/builder/package.json
+++ b/packages/builder/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/builder",
- "version": "2.6.0",
+ "version": "2.6.6",
"license": "GPL-3.0",
"private": true,
"scripts": {
@@ -58,10 +58,10 @@
}
},
"dependencies": {
- "@budibase/bbui": "^2.6.0",
- "@budibase/frontend-core": "^2.6.0",
- "@budibase/shared-core": "^2.6.0",
- "@budibase/string-templates": "^2.6.0",
+ "@budibase/bbui": "^2.6.6",
+ "@budibase/frontend-core": "^2.6.6",
+ "@budibase/shared-core": "^2.6.6",
+ "@budibase/string-templates": "^2.6.6",
"@fortawesome/fontawesome-svg-core": "^6.2.1",
"@fortawesome/free-brands-svg-icons": "^6.2.1",
"@fortawesome/free-solid-svg-icons": "^6.2.1",
diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ActionModal.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ActionModal.svelte
index 3a85c7ed56..7c9f31352f 100644
--- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ActionModal.svelte
+++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ActionModal.svelte
@@ -94,7 +94,7 @@
/>
- {idx.charAt(0).toUpperCase() + idx.slice(1)}
+ {action.stepTitle || idx.charAt(0).toUpperCase() + idx.slice(1)}
diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ExternalActions.js b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ExternalActions.js
index 843445a3c2..c6f8d25640 100644
--- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ExternalActions.js
+++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ExternalActions.js
@@ -1,11 +1,11 @@
import DiscordLogo from "assets/discord.svg"
import ZapierLogo from "assets/zapier.png"
-import IntegromatLogo from "assets/integromat.png"
+import MakeLogo from "assets/make.svg"
import SlackLogo from "assets/slack.svg"
export const externalActions = {
zapier: { name: "zapier", icon: ZapierLogo },
discord: { name: "discord", icon: DiscordLogo },
slack: { name: "slack", icon: SlackLogo },
- integromat: { name: "integromat", icon: IntegromatLogo },
+ integromat: { name: "integromat", icon: MakeLogo },
}
diff --git a/packages/builder/src/components/backend/DataTable/buttons/ExistingRelationshipButton.svelte b/packages/builder/src/components/backend/DataTable/buttons/ExistingRelationshipButton.svelte
index 3d837a54f0..0f4bafb001 100644
--- a/packages/builder/src/components/backend/DataTable/buttons/ExistingRelationshipButton.svelte
+++ b/packages/builder/src/components/backend/DataTable/buttons/ExistingRelationshipButton.svelte
@@ -39,7 +39,7 @@
{#if datasource}
- Define existing relationship
+ Define relationship
diff --git a/packages/builder/src/components/backend/DataTable/buttons/grid/GridExportButton.svelte b/packages/builder/src/components/backend/DataTable/buttons/grid/GridExportButton.svelte
index 1661808e9d..b5fe202d11 100644
--- a/packages/builder/src/components/backend/DataTable/buttons/grid/GridExportButton.svelte
+++ b/packages/builder/src/components/backend/DataTable/buttons/grid/GridExportButton.svelte
@@ -9,13 +9,21 @@
$: selectedRowArray = Object.keys($selectedRows).map(id => ({ _id: id }))
-
+
+
+
+
+
diff --git a/packages/builder/src/components/backend/DataTable/buttons/grid/GridFilterButton.svelte b/packages/builder/src/components/backend/DataTable/buttons/grid/GridFilterButton.svelte
index aff98deaaf..2283862303 100644
--- a/packages/builder/src/components/backend/DataTable/buttons/grid/GridFilterButton.svelte
+++ b/packages/builder/src/components/backend/DataTable/buttons/grid/GridFilterButton.svelte
@@ -2,19 +2,19 @@
import TableFilterButton from "../TableFilterButton.svelte"
import { getContext } from "svelte"
- const { columns, config, filter, table } = getContext("grid")
+ const { columns, tableId, filter, table } = getContext("grid")
const onFilter = e => {
filter.set(e.detail || [])
}
-{#key $config.tableId}
+{#key $tableId}
{/key}
diff --git a/packages/builder/src/components/backend/DataTable/buttons/grid/GridManageAccessButton.svelte b/packages/builder/src/components/backend/DataTable/buttons/grid/GridManageAccessButton.svelte
index d41d0a1a25..154007950a 100644
--- a/packages/builder/src/components/backend/DataTable/buttons/grid/GridManageAccessButton.svelte
+++ b/packages/builder/src/components/backend/DataTable/buttons/grid/GridManageAccessButton.svelte
@@ -2,7 +2,7 @@
import ManageAccessButton from "../ManageAccessButton.svelte"
import { getContext } from "svelte"
- const { config } = getContext("grid")
+ const { tableId } = getContext("grid")
-
+
diff --git a/packages/builder/src/components/portal/licensing/licensingBanners.js b/packages/builder/src/components/portal/licensing/licensingBanners.js
index 41c6585b02..dafa8cfaed 100644
--- a/packages/builder/src/components/portal/licensing/licensingBanners.js
+++ b/packages/builder/src/components/portal/licensing/licensingBanners.js
@@ -147,6 +147,9 @@ const buildUsersAboveLimitBanner = EXPIRY_KEY => {
return {
key: EXPIRY_KEY,
type: BANNER_TYPES.WARNING,
+ onChange: () => {
+ defaultCacheFn(EXPIRY_KEY)
+ },
criteria: () => {
return userLicensing.warnUserLimit
},
diff --git a/packages/builder/src/pages/builder/portal/users/users/index.svelte b/packages/builder/src/pages/builder/portal/users/users/index.svelte
index 984ecd46ff..8006ae0294 100644
--- a/packages/builder/src/pages/builder/portal/users/users/index.svelte
+++ b/packages/builder/src/pages/builder/portal/users/users/index.svelte
@@ -261,7 +261,7 @@
header={`Users will soon be limited to ${staticUserLimit}`}
message={`Our free plan is going to be limited to ${staticUserLimit} users in ${$licensing.userLimitDays}.
- This means any users exceeding the limit have been de-activated.
+ This means any users exceeding the limit will be de-activated.
De-activated users will not able to access the builder or any published apps until you upgrade to one of our paid plans.
`}
diff --git a/packages/cli/package.json b/packages/cli/package.json
index cf40fff35c..ddf27a462e 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/cli",
- "version": "2.6.0",
+ "version": "2.6.6",
"description": "Budibase CLI, for developers, self hosting and migrations.",
"main": "dist/index.js",
"bin": {
@@ -29,9 +29,9 @@
"outputPath": "build"
},
"dependencies": {
- "@budibase/backend-core": "^2.6.0",
- "@budibase/string-templates": "^2.6.0",
- "@budibase/types": "^2.6.0",
+ "@budibase/backend-core": "^2.6.6",
+ "@budibase/string-templates": "^2.6.6",
+ "@budibase/types": "^2.6.6",
"axios": "0.21.2",
"chalk": "4.1.0",
"cli-progress": "3.11.2",
diff --git a/packages/client/package.json b/packages/client/package.json
index f2ee5fe215..515c05174b 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/client",
- "version": "2.6.0",
+ "version": "2.6.6",
"license": "MPL-2.0",
"module": "dist/budibase-client.js",
"main": "dist/budibase-client.js",
@@ -19,11 +19,11 @@
"dev:builder": "rollup -cw"
},
"dependencies": {
- "@budibase/bbui": "^2.6.0",
- "@budibase/frontend-core": "^2.6.0",
- "@budibase/shared-core": "^2.6.0",
- "@budibase/string-templates": "^2.6.0",
- "@budibase/types": "^2.6.0",
+ "@budibase/bbui": "^2.6.6",
+ "@budibase/frontend-core": "^2.6.6",
+ "@budibase/shared-core": "^2.6.6",
+ "@budibase/string-templates": "^2.6.6",
+ "@budibase/types": "^2.6.6",
"@spectrum-css/button": "^3.0.3",
"@spectrum-css/card": "^3.0.3",
"@spectrum-css/divider": "^1.0.3",
diff --git a/packages/client/src/utils/buttonActions.js b/packages/client/src/utils/buttonActions.js
index 895584b782..5a3842f9a4 100644
--- a/packages/client/src/utils/buttonActions.js
+++ b/packages/client/src/utils/buttonActions.js
@@ -384,7 +384,7 @@ const confirmTextMap = {
["Save Row"]: "Are you sure you want to save this row?",
["Execute Query"]: "Are you sure you want to execute this query?",
["Trigger Automation"]: "Are you sure you want to trigger this automation?",
- ["Prompt User"]: "Are you sure you want to contiune?",
+ ["Prompt User"]: "Are you sure you want to continue?",
}
/**
diff --git a/packages/frontend-core/package.json b/packages/frontend-core/package.json
index fad1de2c94..d6e7e13300 100644
--- a/packages/frontend-core/package.json
+++ b/packages/frontend-core/package.json
@@ -1,13 +1,13 @@
{
"name": "@budibase/frontend-core",
- "version": "2.6.0",
+ "version": "2.6.6",
"description": "Budibase frontend core libraries used in builder and client",
"author": "Budibase",
"license": "MPL-2.0",
"svelte": "src/index.js",
"dependencies": {
- "@budibase/bbui": "^2.6.0",
- "@budibase/shared-core": "^2.6.0",
+ "@budibase/bbui": "^2.6.6",
+ "@budibase/shared-core": "^2.6.6",
"dayjs": "^1.11.7",
"lodash": "^4.17.21",
"socket.io-client": "^4.6.1",
diff --git a/packages/frontend-core/src/components/grid/cells/GutterCell.svelte b/packages/frontend-core/src/components/grid/cells/GutterCell.svelte
index d9fd09fb6c..00b99c0711 100644
--- a/packages/frontend-core/src/components/grid/cells/GutterCell.svelte
+++ b/packages/frontend-core/src/components/grid/cells/GutterCell.svelte
@@ -70,7 +70,15 @@
{/if}
{/if}
- {#if $config.allowExpandRows}
+ {#if rowSelected && $config.allowDeleteRows}
+ dispatch("request-bulk-delete")}>
+
+
+ {:else if $config.allowExpandRows}
diff --git a/packages/frontend-core/src/components/grid/controls/DeleteButton.svelte b/packages/frontend-core/src/components/grid/controls/BulkDeleteHandler.svelte
similarity index 53%
rename from packages/frontend-core/src/components/grid/controls/DeleteButton.svelte
rename to packages/frontend-core/src/components/grid/controls/BulkDeleteHandler.svelte
index 8ca5f0920d..f87b529390 100644
--- a/packages/frontend-core/src/components/grid/controls/DeleteButton.svelte
+++ b/packages/frontend-core/src/components/grid/controls/BulkDeleteHandler.svelte
@@ -1,8 +1,8 @@
-{#if selectedRowCount}
-
-
-
-{/if}
-
-
-
diff --git a/packages/frontend-core/src/components/grid/controls/ColumnWidthButton.svelte b/packages/frontend-core/src/components/grid/controls/ColumnWidthButton.svelte
index 754aebbb51..5ffd968d30 100644
--- a/packages/frontend-core/src/components/grid/controls/ColumnWidthButton.svelte
+++ b/packages/frontend-core/src/components/grid/controls/ColumnWidthButton.svelte
@@ -3,7 +3,7 @@
import { ActionButton, Popover } from "@budibase/bbui"
import { DefaultColumnWidth } from "../lib/constants"
- const { stickyColumn, columns } = getContext("grid")
+ const { stickyColumn, columns, compact } = getContext("grid")
const smallSize = 120
const mediumSize = DefaultColumnWidth
const largeSize = DefaultColumnWidth * 1.5
@@ -59,12 +59,13 @@
on:click={() => (open = !open)}
selected={open}
disabled={!allCols.length}
+ tooltip={$compact ? "Width" : null}
>
- Width
+ {$compact ? "" : "Width"}
-
+
{#each sizeOptions as option}
import { getContext } from "svelte"
- import { ActionButton, Popover, Toggle } from "@budibase/bbui"
+ import { ActionButton, Popover, Toggle, Icon } from "@budibase/bbui"
+ import { getColumnIcon } from "../lib/utils"
- const { columns, stickyColumn } = getContext("grid")
+ const { columns, stickyColumn, compact } = getContext("grid")
let open = false
let anchor
@@ -47,25 +48,32 @@
on:click={() => (open = !open)}
selected={open || anyHidden}
disabled={!$columns.length}
+ tooltip={$compact ? "Columns" : ""}
>
- Columns
+ {$compact ? "" : "Columns"}
-
+
{#if $stickyColumn}
+
+
+ {$stickyColumn.label}
+
-
{$stickyColumn.label}
{/if}
{#each $columns as column}
+
+
+ {column.label}
+
toggleVisibility(column, e.detail)}
/>
- {column.label}
{/each}
@@ -90,6 +98,13 @@
.columns {
display: grid;
align-items: center;
- grid-template-columns: auto 1fr;
+ grid-template-columns: 1fr auto;
+ }
+ .columns :global(.spectrum-Switch) {
+ margin-right: 0;
+ }
+ .column {
+ display: flex;
+ gap: 8px;
}
diff --git a/packages/frontend-core/src/components/grid/controls/RowHeightButton.svelte b/packages/frontend-core/src/components/grid/controls/RowHeightButton.svelte
index e9045ac5c7..e9617ce0b6 100644
--- a/packages/frontend-core/src/components/grid/controls/RowHeightButton.svelte
+++ b/packages/frontend-core/src/components/grid/controls/RowHeightButton.svelte
@@ -7,7 +7,7 @@
SmallRowHeight,
} from "../lib/constants"
- const { rowHeight, columns, table } = getContext("grid")
+ const { rowHeight, columns, table, compact } = getContext("grid")
const sizeOptions = [
{
label: "Small",
@@ -41,12 +41,13 @@
size="M"
on:click={() => (open = !open)}
selected={open}
+ tooltip={$compact ? "Height" : null}
>
- Height
+ {$compact ? "" : "Height"}
-
+
{#each sizeOptions as option}
(open = !open)}
selected={open}
disabled={!columnOptions.length}
+ tooltip={$compact ? "Sort" : ""}
>
- Sort
+ {$compact ? "" : "Sort"}
-
+
-
@@ -131,7 +130,9 @@
-
+ {#if allowAddRows}
+
+ {/if}
{/if}
+ {#if allowDeleteRows}
+
+ {/if}
@@ -214,6 +218,7 @@
padding: var(--cell-padding);
gap: var(--cell-spacing);
background: var(--background);
+ z-index: 2;
}
.controls-left,
.controls-right {
@@ -239,7 +244,7 @@
height: 100%;
display: grid;
place-items: center;
- z-index: 10;
+ z-index: 100;
}
.grid-loading:before {
content: "";
diff --git a/packages/frontend-core/src/components/grid/layout/HeaderRow.svelte b/packages/frontend-core/src/components/grid/layout/HeaderRow.svelte
index 2ec186a4d6..be9fad00d0 100644
--- a/packages/frontend-core/src/components/grid/layout/HeaderRow.svelte
+++ b/packages/frontend-core/src/components/grid/layout/HeaderRow.svelte
@@ -4,8 +4,14 @@
import HeaderCell from "../cells/HeaderCell.svelte"
import { Icon } from "@budibase/bbui"
- const { renderedColumns, dispatch, scroll, hiddenColumnsWidth, width } =
- getContext("grid")
+ const {
+ renderedColumns,
+ dispatch,
+ scroll,
+ hiddenColumnsWidth,
+ width,
+ config,
+ } = getContext("grid")
$: columnsWidth = $renderedColumns.reduce(
(total, col) => (total += col.width),
@@ -23,13 +29,15 @@
{/each}
- dispatch("add-column")}
- >
-
-
+ {#if $config.allowAddColumns}
+ dispatch("add-column")}
+ >
+
+
+ {/if}