Skip to content
Snippets Groups Projects
Commit 770b935d authored by Tom Robinson's avatar Tom Robinson
Browse files

Fix dashboard parameters field values

parent e60f653e
Branches
Tags
No related merge requests found
......@@ -8,10 +8,8 @@ import { createSelector } from 'reselect';
import * as Dashboard from "metabase/meta/Dashboard";
import Metadata from "metabase/meta/metadata/Metadata";
import Query from "metabase/lib/query";
import type { CardObject } from "metabase/meta/types/Card";
import type { ParameterMappingOption, ParameterObject } from "metabase/meta/types/Dashboard";
import type { ParameterMappingOption, ParameterObject, ParameterMappingObject } from "metabase/meta/types/Dashboard";
export const getDashboardId = state => state.dashboard.dashboardId;
export const getIsEditing = state => state.dashboard.isEditing;
......@@ -89,17 +87,13 @@ export const getMappingsByParameter = createSelector(
let countsByParameter = {};
let mappings = [];
for (const dashcard of dashboard.ordered_cards) {
for (let mapping of (dashcard.parameter_mappings || [])) {
let values = null;
if (mapping.target[0] === "dimension") {
let dimension = mapping.target[1];
let field = metadata.field(Query.getFieldTargetId(dimension));
values = field && field.values() ;
if (values) {
for (const value of values) {
countsByParameter = updateIn(countsByParameter, [mapping.parameter_id, value], (count = 0) => count + 1)
}
}
const cards: Array<CardObject> = [dashcard.card].concat(dashcard.series);
for (let mapping: ParameterMappingObject of (dashcard.parameter_mappings || [])) {
let card = _.findWhere(cards, { id: mapping.card_id });
let field = Dashboard.getParameterMappingTargetField(metadata, card, mapping.target);
let values = field && field.values() || [];
for (const value of values) {
countsByParameter = updateIn(countsByParameter, [mapping.parameter_id, value], (count = 0) => count + 1)
}
mapping = {
...mapping,
......
......@@ -5,11 +5,12 @@ import type Table from "./metadata/Table";
import type Field from "./metadata/Field";
import type { TemplateTag } from "./types/Query";
import type { CardObject } from "./types/Card";
import type { ParameterOption, ParameterObject, ParameterMappingOption, DimensionTarget, VariableTarget } from "./types/Dashboard";
import type { ParameterOption, ParameterObject, ParameterMappingOption, ParameterMappingTarget, DimensionTarget, VariableTarget } from "./types/Dashboard";
import { getTemplateTags } from "./Card";
import { slugify, stripId } from "metabase/lib/formatting";
import Query from "metabase/lib/query";
import _ from "underscore";
......@@ -179,6 +180,23 @@ export function getCardVariables(metadata: Metadata, card: CardObject, filter: T
return [];
}
export function getParameterMappingTargetField(metadata: Metadata, card: CardObject, target: ParameterMappingTarget): ?Field {
if (target[0] === "dimension") {
let dimension = target[1];
if (Array.isArray(dimension) && dimension[0] === "template-tag") {
if (card.dataset_query.type === "native") {
let templateTag = card.dataset_query.native.template_tags[dimension[1]];
if (templateTag && templateTag.type === "dimension") {
return metadata.field(Query.getFieldTargetId(templateTag.dimension));
}
}
} else {
return metadata.field(Query.getFieldTargetId(dimension));
}
}
return null;
}
function fieldFilterForParameter(parameter: ParameterObject): FieldFilter {
const [type, subtype] = parameter.type.split("/");
switch (type) {
......
......@@ -39,7 +39,7 @@ export default class Field extends Base {
isID() { return isPK(this.special_type); }
values() {
return (this._object.values && this._object.values.length > 0 && this._object.values[0].values) || []
return (this._object.values && this._object.values.values) || []
}
icon() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment