Skip to content
Snippets Groups Projects
Commit c054eb98 authored by Sameer Al-Sakran's avatar Sameer Al-Sakran Committed by GitHub
Browse files

Merge pull request #5486 from metabase/add_action

add our first native action!
parents 983eb118 711c0358
No related branches found
No related tags found
No related merge requests found
......@@ -63,6 +63,34 @@ export const card = {
}
};
export const nativeCard = {
dataset_query: {
type: "native",
native: {
query: "SELECT count(*) from ORDERS"
}
}
};
export const savedCard = {
id: 1,
dataset_query: {
type: "query",
query: {
source_table: 10
}
}
};
export const savedNativeCard = {
id: 2,
dataset_query: {
type: "native",
native: {
query: "SELECT count(*) from ORDERS"
}
}
};
export const clickedFloatHeader = {
column: {
...FLOAT_FIELD,
......
/* @flow */
import { nestThisQuery } from "metabase/qb/lib/actions";
import type {
ClickAction,
ClickActionProps
} from "metabase/meta/types/Visualization";
export default ({ card, tableMetadata }: ClickActionProps): ClickAction[] => {
// we can only nest a query if it's already saved
if (card.id) {
return [
{
name: "nest-query",
title: "Analyze the results of this Query",
icon: "table",
card: () => nestThisQuery(card)
}
];
}
return [];
};
/* eslint-disable flowtype/require-valid-file-annotation */
import CompoundQueryAction from "./CompoundQueryAction";
import {
savedCard,
nativeCard,
savedNativeCard,
tableMetadata
} from "../__support__/fixtures";
describe("CompoundQueryAction", () => {
it("should not suggest a compount query for an unsaved native query", () => {
expect(
CompoundQueryAction({
card: nativeCard,
tableMetadata: tableMetadata
})
).toHaveLength(0);
});
it("should suggest a compound query for a mbql query", () => {
const actions = CompoundQueryAction({
card: savedCard,
tableMetadata: tableMetadata
});
expect(actions).toHaveLength(1);
const newCard = actions[0].card();
expect(newCard.dataset_query.query).toEqual({
source_table: "card__1"
});
});
it("should return a nested query for a saved native card", () => {
const actions = CompoundQueryAction({
card: savedNativeCard,
tableMetadata: tableMetadata
});
expect(actions).toHaveLength(1);
const newCard = actions[0].card();
expect(newCard.dataset_query.query).toEqual({
source_table: "card__2"
});
});
});
/* @flow */
import type { QueryMode } from "metabase/meta/types/Visualization";
import CompoundQueryAction from "../actions/CompoundQueryAction";
const NativeMode: QueryMode = {
name: "native",
actions: [],
actions: [CompoundQueryAction],
drills: []
};
......
......@@ -19,6 +19,8 @@ import type { DimensionValue } from "metabase/meta/types/Visualization";
// TODO: use icepick instead of mutation, make they handle frozen cards
const SAVED_QUESTIONS_FAUX_DATABASE = -1337;
export const toUnderlyingData = (card: CardObject): ?CardObject => {
const newCard = startNewCard("query");
newCard.dataset_query = card.dataset_query;
......@@ -40,6 +42,15 @@ export const toUnderlyingRecords = (card: CardObject): ?CardObject => {
}
};
export const nestThisQuery = (card: CardObject): ?CardObject => {
const newCard = startNewCard(
"query",
SAVED_QUESTIONS_FAUX_DATABASE,
"card__" + card.id
);
return newCard;
};
export const getFieldRefFromColumn = col => {
if (col.fk_field_id != null) {
return ["fk->", col.fk_field_id, col.id];
......
......@@ -86,10 +86,11 @@ export const getModeActions = (
card: ?CardObject,
tableMetadata: ?TableMetadata
): ClickAction[] => {
if (mode && card && tableMetadata) {
// We need a table selected for provide actions for GUI questions, but not for native
if (mode && card && (tableMetadata || mode.name == "native")) {
// FIXME: copy card because it may be frozen and action may mutate it :-/
card = Utils.copy(card);
const props: ClickActionProps = { card, tableMetadata };
const props = { card, tableMetadata };
// flatten array of arrays
return [].concat(
...mode.actions.map(actionCreator => actionCreator(props))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment