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"}
- +