Skip to content

Commit 7f307ce

Browse files
authored
Feature/combine tools (#296)
* Fix empty planning message bug * Set parameter values when writing SQL queries
1 parent 5cd87a4 commit 7f307ce

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

apps/src/metabase/appController.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ export class MetabaseController extends AppController<MetabaseAppState> {
163163
return {text: `Using ${Object.keys(template_tags || {}).length} template tags and ${(parameters || []).length} parameters`, code: sql, oldCode: sqlQuery}
164164
}
165165
})
166-
async updateSQLQueryWithParams({ sql, template_tags = {}, parameters = [], executeImmediately = true, _type = "markdown", ctes = [] }: { sql: string, template_tags?: object, parameters?: any[], executeImmediately?: boolean, _type?: string, ctes: CTE[] }) {
166+
async updateSQLQueryWithParams({ sql, template_tags = {}, parameters = [], parameterValues = [], executeImmediately = true, _type = "markdown", ctes = [] }: { sql: string, template_tags?: object, parameters?: any[], parameterValues?: Array<{id: string, value: string[]}>, executeImmediately?: boolean, _type?: string, ctes: CTE[] }) {
167167
const actionContent: BlankMessageContent = {
168168
type: "BLANK",
169169
};
@@ -216,6 +216,13 @@ export class MetabaseController extends AppController<MetabaseAppState> {
216216
await RPCs.dispatchMetabaseAction('metabase/qb/TOGGLE_TEMPLATE_TAGS_EDITOR');
217217
await RPCs.dispatchMetabaseAction('metabase/qb/TOGGLE_TEMPLATE_TAGS_EDITOR');
218218

219+
// Set parameter values if provided
220+
if (parameterValues && Array.isArray(parameterValues) && parameterValues.length > 0) {
221+
await Promise.all(parameterValues.map(async ({id, value}) => {
222+
return RPCs.dispatchMetabaseAction('metabase/qb/SET_PARAMETER_VALUE', { id, value });
223+
}));
224+
}
225+
219226
if (executeImmediately) {
220227
return await this._executeSQLQueryInternal(_type);
221228
} else {
@@ -371,7 +378,7 @@ export class MetabaseController extends AppController<MetabaseAppState> {
371378
labelRunning: "Setting parameter values for a query",
372379
labelDone: "Parameter values set",
373380
labelTask: "Parameter values set",
374-
description: "Sets parameter values for a query in the Metabase SQL editor and execute.",
381+
description: "Sets parameter values for a query in the Metabase SQL editor and execute. Use ExecuteQuery with parameterValues argument instead unless solely updating parameter values.",
375382
renderBody: ({ parameterValues }: { parameterValues: Array<{id: string, value: string[]}> }) => {
376383
return {text: null, code: JSON.stringify({ parameterValues })}
377384
}
@@ -388,14 +395,15 @@ export class MetabaseController extends AppController<MetabaseAppState> {
388395
labelDone: "Executed query",
389396
labelTask: "Kick off SQL query",
390397
description: "Executes the SQL query in the Metabase SQL editor with support for template tags and parameters.",
391-
renderBody: ({ sql, explanation, template_tags={}, parameters=[] }: { sql: string, explanation: string, template_tags?: object, parameters?: any[] }, appState: MetabaseAppStateSQLEditor | MetabaseAppStateSQLEditorV2) => {
398+
renderBody: ({ sql, explanation, template_tags={}, parameters=[], parameterValues=[] }: { sql: string, explanation: string, template_tags?: object, parameters?: any[], parameterValues?: Array<{id: string, value: string[]}> }, appState: MetabaseAppStateSQLEditor | MetabaseAppStateSQLEditorV2) => {
392399
const currentQuery = appState?.currentCard?.dataset_query?.native?.query || appState?.sqlQuery || "";
393400
const currentTemplateTags = appState?.currentCard?.dataset_query?.native?.['template-tags'] || {};
394401
const currentParameters = appState?.currentCard?.parameters || [];
395-
return {text: explanation, code: sql, oldCode: currentQuery, language: "sql", extraArgs: {old: {template_tags: currentTemplateTags, parameters: currentParameters}, new: {template_tags, parameters}}}
402+
const paramValuesInfo = parameterValues && parameterValues.length > 0 ? ` with ${parameterValues.length} parameter values` : '';
403+
return {text: `${explanation}${paramValuesInfo}`, code: sql, oldCode: currentQuery, language: "sql", extraArgs: {old: {template_tags: currentTemplateTags, parameters: currentParameters}, new: {template_tags, parameters, parameterValues}}}
396404
}
397405
})
398-
async ExecuteQuery({ sql, _ctes = [], explanation = "", template_tags={}, parameters=[] }: { sql: string, _ctes?: CTE[], explanation?: string, template_tags?: object, parameters?: any[] }) {
406+
async ExecuteQuery({ sql, _ctes = [], explanation = "", template_tags={}, parameters=[], parameterValues=[] }: { sql: string, _ctes?: CTE[], explanation?: string, template_tags?: object, parameters?: any[], parameterValues?: Array<{id: string, value: string[]}> }) {
399407
// console.log('Template tags are', template_tags)
400408
// console.log('Parameters are', parameters)
401409
// Try parsing template_tags and parameters if they are strings
@@ -413,6 +421,13 @@ export class MetabaseController extends AppController<MetabaseAppState> {
413421
} catch (error) {
414422
console.error('Error parsing parameters:', error);
415423
}
424+
try {
425+
if (typeof parameterValues === 'string') {
426+
parameterValues = JSON.parse(parameterValues);
427+
}
428+
} catch (error) {
429+
console.error('Error parsing parameterValues:', error);
430+
}
416431
const metabaseState = this.app as App<MetabaseAppState>;
417432
const pageType = metabaseState.useStore().getState().toolContext?.pageType;
418433

@@ -421,7 +436,7 @@ export class MetabaseController extends AppController<MetabaseAppState> {
421436

422437
if (pageType === 'sql') {
423438
// if (hasTemplateTagsOrParams) {
424-
return await this.updateSQLQueryWithParams({ sql, template_tags, parameters, executeImmediately: true, _type: "csv", ctes: _ctes });
439+
return await this.updateSQLQueryWithParams({ sql, template_tags, parameters, parameterValues, executeImmediately: true, _type: "csv", ctes: _ctes });
425440
// } else {
426441
// return await this.updateSQLQuery({ sql, executeImmediately: true, _type: "csv", ctes: _ctes });
427442
// }

web/src/components/common/ActionStack.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ const PlanningActionStack: React.FC = () => {
311311
>
312312
<HStack>
313313
<Box>
314-
<Text key={currentTitleIndex} animation={currentTitleIndex > 0 ? `${scrollUp} 0.5s ease-in-out` : ""} >{planningActions[currentTitleIndex]}</Text>
314+
<Text key={currentTitleIndex} animation={currentTitleIndex > 0 ? `${scrollUp} 0.5s ease-in-out` : ""} >{planningActions[currentTitleIndex % planningActions.length]}</Text>
315315
</Box>
316316
<Spinner size="xs" speed={'0.75s'} color="minusxBW.100" aria-label={"planning-spinner"}/>
317317
</HStack>

0 commit comments

Comments
 (0)