diff --git a/app/client/packages/dsl/src/migrate/index.ts b/app/client/packages/dsl/src/migrate/index.ts index 9f54258ed4..3a11b3b9d6 100644 --- a/app/client/packages/dsl/src/migrate/index.ts +++ b/app/client/packages/dsl/src/migrate/index.ts @@ -92,9 +92,10 @@ import { migrateChartwidgetCustomEchartConfig } from "./migrations/087-migrate-c import { migrateCustomWidgetDynamicHeight } from "./migrations/088-migrate-custom-widget-dynamic-height"; import { migrateTableWidgetV2CurrentRowInValidationsBinding } from "./migrations/089-migrage-table-widget-v2-currentRow-binding"; import { migrateTableComputeValueBinding } from "./migrations/090-migrate-table-compute-value-binding"; +import { migrateAIChatWidget } from "./migrations/092-update-ai-chat-widget"; import type { DSLWidget } from "./types"; -export const LATEST_DSL_VERSION = 92; +export const LATEST_DSL_VERSION = 93; export const calculateDynamicHeight = () => { const DEFAULT_GRID_ROW_HEIGHT = 10; @@ -630,6 +631,11 @@ const migrateVersionedDSL = async (currentDSL: DSLWidget, newPage = false) => { * What we missed was that, the auto-commit does not handle clientVersion, which lead to this bug: https://github.com/appsmithorg/appsmith/issues/38511 * We are bumping this version to make sure that the auto-commit will handle this version bump. */ + currentDSL.version = 92; + } + + if (currentDSL.version === 92) { + currentDSL = migrateAIChatWidget(currentDSL); currentDSL.version = LATEST_DSL_VERSION; } diff --git a/app/client/packages/dsl/src/migrate/migrations/092-update-ai-chat-widget.ts b/app/client/packages/dsl/src/migrate/migrations/092-update-ai-chat-widget.ts new file mode 100644 index 0000000000..7d7f2a6e81 --- /dev/null +++ b/app/client/packages/dsl/src/migrate/migrations/092-update-ai-chat-widget.ts @@ -0,0 +1,25 @@ +// This migration updates the ai chat widget to use dynamic bindings +// Earlier we had chatQuery which was a static field of the name of the query +// Now we have queryRun which is a dynamic binding path which points to the actionId of the query +// Old format: [QueryName] +// New format: {{[QueryName].actionId}} + +import type { DSLWidget, WidgetProps } from "../types"; +import { traverseDSLAndMigrate } from "../utils"; + +export const migrateAIChatWidget = (currentDSL: DSLWidget) => { + return traverseDSLAndMigrate(currentDSL, (widget: WidgetProps) => { + if (widget.type !== "WDS_AI_CHAT_WIDGET") return; + + const queryName = widget.chatQuery; + + if (!queryName) return; + + widget.queryRun = `{{${queryName}.actionId}}`; + widget.dynamicBindingPathList = widget.dynamicBindingPathList + .filter((path: string) => path !== "chatQuery") + .concat({ key: "queryRun" }); + + delete widget.chatQuery; + }); +}; diff --git a/app/client/packages/dsl/src/migrate/tests/DSLMigration.test.ts b/app/client/packages/dsl/src/migrate/tests/DSLMigration.test.ts index 90a2d19cb5..a8e1a1b0b2 100644 --- a/app/client/packages/dsl/src/migrate/tests/DSLMigration.test.ts +++ b/app/client/packages/dsl/src/migrate/tests/DSLMigration.test.ts @@ -91,6 +91,7 @@ import * as m87 from "../migrations/087-migrate-chart-widget-customechartdata"; import * as m88 from "../migrations/088-migrate-custom-widget-dynamic-height"; import * as m89 from "../migrations/089-migrage-table-widget-v2-currentRow-binding"; import * as m90 from "../migrations/090-migrate-table-compute-value-binding"; +import * as m92 from "../migrations/092-update-ai-chat-widget"; interface Migration { functionLookup: { @@ -941,9 +942,19 @@ const migrations: Migration[] = [ version: 90, }, { + // This migration is skipped functionLookup: [], version: 91, }, + { + functionLookup: [ + { + moduleObj: m92, + functionName: "migrateAIChatWidget", + }, + ], + version: 92, + }, ]; const mockFnObj: Record = {}; diff --git a/app/client/src/ce/sagas/DatasourcesSagas.ts b/app/client/src/ce/sagas/DatasourcesSagas.ts index 52edd1169e..5e6c39721c 100644 --- a/app/client/src/ce/sagas/DatasourcesSagas.ts +++ b/app/client/src/ce/sagas/DatasourcesSagas.ts @@ -1168,6 +1168,8 @@ export function* createOrUpdateDataSourceWithAction( type: ReduxActionTypes.CREATE_ACTION_REQUEST, }); + yield take(ReduxActionTypes.CREATE_ACTION_SUCCESS); + yield put(setIdeEditorViewMode(EditorViewMode.SplitScreen)); const actions: ActionDataState = yield select(getActions);