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

Get FieldValuesWidget working on embedded/public dashboards

parent 99db51d8
No related branches found
No related tags found
No related merge requests found
......@@ -27,8 +27,6 @@ import {
import type { FieldValues } from "metabase/meta/types/Field";
import _ from "underscore";
/**
* Wrapper class for field metadata objects. Belongs to a Table.
*/
......
......@@ -33,7 +33,11 @@ import Utils from "metabase/lib/utils";
import { getPositionForNewDashCard } from "metabase/lib/dashboard_grid";
import { createCard } from "metabase/lib/card";
import { addParamValues, fetchDatabaseMetadata } from "metabase/redux/metadata";
import {
addParamValues,
addFields,
fetchDatabaseMetadata,
} from "metabase/redux/metadata";
import { push } from "react-router-redux";
import {
......@@ -551,6 +555,9 @@ export const fetchDashboard = createThunkAction(FETCH_DASHBOARD, function(
if (result.param_values) {
dispatch(addParamValues(result.param_values));
}
if (result.param_fields) {
dispatch(addFields(result.param_fields));
}
return {
...normalize(result, dashboard), // includes `result` and `entities`
......
......@@ -26,6 +26,11 @@ import {
import * as dashboardActions from "metabase/dashboard/dashboard";
import {
setPublicDashboardEndpoints,
setEmbedDashboardEndpoints,
} from "metabase/services";
import type { Dashboard } from "metabase/meta/types/Dashboard";
import type { Parameter } from "metabase/meta/types/Parameter";
......@@ -89,6 +94,13 @@ export default class PublicDashboard extends Component {
location,
params: { uuid, token },
} = this.props;
if (uuid) {
setPublicDashboardEndpoints(uuid);
} else if (token) {
setEmbedDashboardEndpoints(token);
}
initialize();
try {
// $FlowFixMe
......
......@@ -23,8 +23,8 @@ import {
import {
PublicApi,
EmbedApi,
enablePublicEndpoints,
enableEmbedEndpoints,
setPublicQuestionEndpoints,
setEmbedQuestionEndpoints,
} from "metabase/services";
import { setErrorPage } from "metabase/redux/app";
......@@ -78,9 +78,9 @@ export default class PublicQuestion extends Component {
} = this.props;
if (uuid) {
enablePublicEndpoints(uuid);
setPublicQuestionEndpoints(uuid);
} else if (token) {
enableEmbedEndpoints(token);
setEmbedQuestionEndpoints(token);
}
try {
......
......@@ -75,10 +75,6 @@ export const PublicApi = {
cardQuery: GET("/api/public/card/:uuid/query"),
dashboard: GET("/api/public/dashboard/:uuid"),
dashboardCardQuery: GET("/api/public/dashboard/:uuid/card/:cardId"),
field_values: GET("/api/public/card/:uuid/field/:fieldId/values"),
field_search: GET(
"/api/public/card/:uuid/field/:fieldId/search/:searchFieldId",
),
};
export const EmbedApi = {
......@@ -88,10 +84,6 @@ export const EmbedApi = {
dashboardCardQuery: GET(
embedBase + "/dashboard/:token/dashcard/:dashcardId/card/:cardId",
),
field_values: GET(embedBase + "/card/:token/field/:fieldId/values"),
field_search: GET(
embedBase + "/card/:token/field/:fieldId/search/:searchFieldId",
),
};
export const EmailApi = {
......@@ -325,22 +317,31 @@ export const I18NApi = {
locale: GET("/app/locales/:locale.json"),
};
export function enableEmbedEndpoints(token: string) {
// don't swap endpoints for embed preview, since the user is logged in
export function setPublicQuestionEndpoints(uuid) {
setFieldEndpoints("/api/public/card/:uuid", { uuid });
}
export function setPublicDashboardEndpoints(uuid) {
setFieldEndpoints("/api/public/dashboard/:uuid", { uuid });
}
export function setEmbedQuestionEndpoints(token) {
if (!IS_EMBED_PREVIEW) {
setFieldEndpoints("/api/embed/card/:token", { token });
}
}
export function setEmbedDashboardEndpoints(token) {
if (!IS_EMBED_PREVIEW) {
MetabaseApi.field_values = (data: Data, options?: Options) =>
EmbedApi.field_values({ token, ...data }, options);
MetabaseApi.field_search = (data: Data, options?: Options) =>
EmbedApi.field_search({ token, ...data }, options);
MetabaseApi.field_remapping = () => null;
setFieldEndpoints("/api/embed/dashboard/:token", { token });
}
}
export function enablePublicEndpoints(uuid: string) {
export function setFieldEndpoints(prefix, params) {
MetabaseApi.field_values = (data: Data, options?: Options) =>
PublicApi.field_values({ uuid, ...data }, options);
GET(prefix + "/field/:fieldId/values")({ ...params, ...data }, options);
MetabaseApi.field_search = (data: Data, options?: Options) =>
PublicApi.field_search({ uuid, ...data }, options);
GET(prefix + "/field/:fieldId/search/:searchFieldId")(
{ ...params, ...data },
options,
);
MetabaseApi.field_remapping = () => null;
}
......
......@@ -255,7 +255,7 @@
limit (s/maybe su/IntStringGreaterThanZero)}
(api/check-public-sharing-enabled)
(let [card-id (db/select-one-id Card :public_uuid uuid, :archived false)]
(search-card-fields card-id field-id search-field-id value limit)))
(search-card-fields card-id field-id search-field-id value (when limit (Integer/parseInt limit)))))
(api/defendpoint GET "/dashboard/:uuid/field/:field-id/search/:search-field-id"
"Search for values of a Field that is referenced by a Card in a public Dashboard."
......
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