diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditRow.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditRow.svelte
index 277fe63d6a..eb99e994d1 100644
--- a/packages/builder/src/components/backend/DataTable/modals/CreateEditRow.svelte
+++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditRow.svelte
@@ -7,6 +7,7 @@
import { FIELDS } from "constants/backend"
const FORMULA_TYPE = FIELDS.FORMULA.type
+ const AI_TYPE = FIELDS.AI.type
export let row = {}
@@ -60,7 +61,7 @@
}}
>
{#each tableSchema as [key, meta]}
- {#if !meta.autocolumn && meta.type !== FORMULA_TYPE}
+ {#if !meta.autocolumn && meta.type !== FORMULA_TYPE && meta.type !== AI_TYPE}
diff --git a/packages/frontend-core/src/components/grid/overlays/MenuOverlay.svelte b/packages/frontend-core/src/components/grid/overlays/MenuOverlay.svelte
index ec9ea981e5..6ae4dc2fb0 100644
--- a/packages/frontend-core/src/components/grid/overlays/MenuOverlay.svelte
+++ b/packages/frontend-core/src/components/grid/overlays/MenuOverlay.svelte
@@ -53,6 +53,13 @@
await Helpers.copyToClipboard(value)
$notifications.success("Copied to clipboard")
}
+
+ const generateAIColumns = async () => {
+ await rows.actions.saveRow({ rowId: $focusedRowId })
+ await rows.actions.refreshData()
+ menu.actions.close()
+ $notifications.success("Generated AI columns")
+ }
@@ -161,6 +168,15 @@
>
Delete row
+
{/if}
diff --git a/packages/frontend-core/src/components/grid/stores/rows.js b/packages/frontend-core/src/components/grid/stores/rows.js
index 4cfaa1cfd5..94fbdba5fa 100644
--- a/packages/frontend-core/src/components/grid/stores/rows.js
+++ b/packages/frontend-core/src/components/grid/stores/rows.js
@@ -465,6 +465,29 @@ export const createActions = context => {
return true
}
+ const saveRow = async ({ rowId }) => {
+ const $rowLookupMap = get(rowLookupMap)
+ const row = $rowLookupMap[rowId]
+ if (row == null) {
+ return
+ }
+ let savedRow
+
+ // Save row
+ try {
+ const newRow = cleanRow(row)
+ savedRow = await datasource.actions.updateRow(newRow)
+
+ if (savedRow?.id) {
+ // Handle users table edge case
+ await refreshRow(savedRow.id)
+ }
+ } catch (error) {
+ handleValidationError(rowId, error)
+ }
+ return savedRow
+ }
+
// Saves any pending changes to a row, as well as any additional changes
// specified
const applyRowChanges = async ({
@@ -685,6 +708,7 @@ export const createActions = context => {
...rows,
actions: {
addRow,
+ saveRow,
duplicateRow,
bulkDuplicate,
updateValue,
diff --git a/packages/shared-core/src/constants/ai.ts b/packages/shared-core/src/constants/ai.ts
index e3f035e72b..e9ad034469 100644
--- a/packages/shared-core/src/constants/ai.ts
+++ b/packages/shared-core/src/constants/ai.ts
@@ -4,7 +4,7 @@ import {
OperationFieldTypeEnum,
} from "@budibase/types"
-const AIOperations = {
+export const AIOperations = {
SUMMARISE_TEXT: {
label: "Summarise Text",
value: "SUMMARISE_TEXT",