diff --git a/lerna.json b/lerna.json
index 77ca852955..8e53ea97a9 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,6 +1,6 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
- "version": "3.0.2",
+ "version": "3.0.3",
"npmClient": "yarn",
"packages": [
"packages/*",
diff --git a/packages/builder/src/components/automation/SetupPanel/CronBuilder.svelte b/packages/builder/src/components/automation/SetupPanel/CronBuilder.svelte
index 51538944f4..fd235a70f2 100644
--- a/packages/builder/src/components/automation/SetupPanel/CronBuilder.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/CronBuilder.svelte
@@ -9,7 +9,7 @@
} from "@budibase/bbui"
import { onMount, createEventDispatcher } from "svelte"
import { flags } from "stores/builder"
- import { featureFlags } from "stores/portal"
+ import { featureFlags, licensing } from "stores/portal"
import { API } from "api"
import MagicWand from "../../../../assets/MagicWand.svelte"
@@ -26,7 +26,9 @@
let aiCronPrompt = ""
let loadingAICronExpression = false
- $: aiEnabled = $featureFlags.AI_CUSTOM_CONFIGS || $featureFlags.BUDIBASE_AI
+ $: aiEnabled =
+ ($featureFlags.AI_CUSTOM_CONFIGS && $licensing.customAIConfigsEnabled) ||
+ ($featureFlags.BUDIBASE_AI && $licensing.budibaseAIEnabled)
$: {
if (cronExpression) {
try {
diff --git a/packages/builder/src/components/design/settings/controls/FilterEditor/FilterEditor.svelte b/packages/builder/src/components/design/settings/controls/FilterEditor/FilterEditor.svelte
index 34c317e865..c48cc3b8ce 100644
--- a/packages/builder/src/components/design/settings/controls/FilterEditor/FilterEditor.svelte
+++ b/packages/builder/src/components/design/settings/controls/FilterEditor/FilterEditor.svelte
@@ -5,13 +5,13 @@
Button,
Drawer,
DrawerContent,
- Helpers,
} from "@budibase/bbui"
import { createEventDispatcher } from "svelte"
import { getDatasourceForProvider, getSchemaForDatasource } from "dataBinding"
import FilterBuilder from "./FilterBuilder.svelte"
import { tables, selectedScreen } from "stores/builder"
import { search } from "@budibase/frontend-core"
+ import { utils } from "@budibase/shared-core"
const dispatch = createEventDispatcher()
@@ -22,7 +22,7 @@
let drawer
- $: localFilters = Helpers.cloneDeep(value)
+ $: localFilters = value
$: datasource = getDatasourceForProvider($selectedScreen, componentInstance)
$: dsSchema = getSchemaForDatasource($selectedScreen, datasource)?.schema
$: schemaFields = search.getFields(
@@ -30,8 +30,7 @@
Object.values(schema || dsSchema || {}),
{ allowLinks: true }
)
-
- $: text = getText(value?.groups)
+ $: text = getText(value)
async function saveFilter() {
dispatch("change", localFilters)
@@ -39,11 +38,14 @@
drawer.hide()
}
- const getText = (filterGroups = []) => {
- const allFilters = filterGroups.reduce((acc, group) => {
+ const getText = filters => {
+ if (Array.isArray(filters)) {
+ filters = utils.processSearchFilters(filters)
+ }
+ const groups = filters?.groups || []
+ const allFilters = groups.reduce((acc, group) => {
return (acc += group.filters.filter(filter => filter.field).length)
}, 0)
-
if (allFilters === 0) {
return "No filters set"
} else {
@@ -62,7 +64,7 @@
on:drawerShow
on:drawerShow={() => {
// Reset to the currently available value.
- localFilters = Helpers.cloneDeep(value)
+ localFilters = value
}}
>
diff --git a/packages/builder/src/pages/builder/portal/settings/ai/AISettings.spec.js b/packages/builder/src/pages/builder/portal/settings/ai/AISettings.spec.js
index 300d5d5369..e797a1c5bd 100644
--- a/packages/builder/src/pages/builder/portal/settings/ai/AISettings.spec.js
+++ b/packages/builder/src/pages/builder/portal/settings/ai/AISettings.spec.js
@@ -1,7 +1,7 @@
import { it, expect, describe, vi } from "vitest"
import AISettings from "./index.svelte"
import { render, fireEvent } from "@testing-library/svelte"
-import { admin, licensing } from "stores/portal"
+import { admin, licensing, featureFlags } from "stores/portal"
import { notifications } from "@budibase/bbui"
vi.spyOn(notifications, "error").mockImplementation(vi.fn)
@@ -12,12 +12,17 @@ const Hosting = {
Self: "self",
}
-function setupEnv(hosting, features = {}) {
+function setupEnv(hosting, features = {}, flags = {}) {
const defaultFeatures = {
budibaseAIEnabled: false,
customAIConfigsEnabled: false,
...features,
}
+ const defaultFlags = {
+ BUDIBASE_AI: false,
+ AI_CUSTOM_CONFIGS: false,
+ ...flags,
+ }
admin.subscribe = vi.fn().mockImplementation(callback => {
callback({ cloud: hosting === Hosting.Cloud })
return () => {}
@@ -26,6 +31,10 @@ function setupEnv(hosting, features = {}) {
callback(defaultFeatures)
return () => {}
})
+ featureFlags.subscribe = vi.fn().mockImplementation(callback => {
+ callback(defaultFlags)
+ return () => {}
+ })
}
describe("AISettings", () => {
@@ -72,7 +81,11 @@ describe("AISettings", () => {
let addConfigurationButton
let configModal
- setupEnv(Hosting.Cloud, { customAIConfigsEnabled: true })
+ setupEnv(
+ Hosting.Cloud,
+ { customAIConfigsEnabled: true },
+ { AI_CUSTOM_CONFIGS: true }
+ )
instance = render(AISettings)
addConfigurationButton = instance.queryByText("Add configuration")
expect(addConfigurationButton).toBeInTheDocument()
@@ -85,7 +98,11 @@ describe("AISettings", () => {
let addConfigurationButton
let configModal
- setupEnv(Hosting.Self, { customAIConfigsEnabled: true })
+ setupEnv(
+ Hosting.Self,
+ { customAIConfigsEnabled: true },
+ { AI_CUSTOM_CONFIGS: true }
+ )
instance = render(AISettings)
addConfigurationButton = instance.queryByText("Add configuration")
expect(addConfigurationButton).toBeInTheDocument()
diff --git a/packages/builder/src/pages/builder/portal/settings/ai/index.svelte b/packages/builder/src/pages/builder/portal/settings/ai/index.svelte
index bbdf46a24e..ec0ff31e58 100644
--- a/packages/builder/src/pages/builder/portal/settings/ai/index.svelte
+++ b/packages/builder/src/pages/builder/portal/settings/ai/index.svelte
@@ -12,7 +12,7 @@
Tags,
Tag,
} from "@budibase/bbui"
- import { admin, licensing } from "stores/portal"
+ import { admin, licensing, featureFlags } from "stores/portal"
import { API } from "api"
import AIConfigModal from "./ConfigModal.svelte"
import AIConfigTile from "./AIConfigTile.svelte"
@@ -27,7 +27,8 @@
let editingUuid
$: isCloud = $admin.cloud
- $: customAIConfigsEnabled = $licensing.customAIConfigsEnabled
+ $: customAIConfigsEnabled =
+ $featureFlags.AI_CUSTOM_CONFIGS && $licensing.customAIConfigsEnabled
async function fetchAIConfig() {
try {
diff --git a/packages/builder/src/pages/builder/portal/settings/index.svelte b/packages/builder/src/pages/builder/portal/settings/index.svelte
index 1448b43ec4..9ab8436f94 100644
--- a/packages/builder/src/pages/builder/portal/settings/index.svelte
+++ b/packages/builder/src/pages/builder/portal/settings/index.svelte
@@ -1,8 +1,8 @@