Skip to content
Snippets Groups Projects
Unverified Commit c0ff9841 authored by Ryan Laurie's avatar Ryan Laurie Committed by GitHub
Browse files

Support action execution in public dashboards (#27905)

* support executing actions in public dashboards

* fix conflict with public actions
parent fab68320
No related branches found
No related tags found
No related merge requests found
......@@ -18,11 +18,12 @@ import type {
ActionFormSettings,
} from "metabase-types/api";
import { ActionsApi } from "metabase/services";
import { ActionsApi, PublicApi } from "metabase/services";
import {
shouldPrefetchValues,
generateFieldSettingsFromParameters,
} from "metabase/actions/utils";
import { getDashboardType } from "metabase/dashboard/utils";
import type Field from "metabase-lib/metadata/Field";
......@@ -56,8 +57,13 @@ function ActionParametersInputForm({
const shouldPrefetch = useMemo(() => shouldPrefetchValues(action), [action]);
const prefetchEndpoint =
getDashboardType(dashboard?.id) === "public"
? PublicApi.prefetchValues
: ActionsApi.prefetchValues;
const fetchInitialValues = useCallback(async () => {
const fetchedValues = await ActionsApi.prefetchValues({
const fetchedValues = await prefetchEndpoint({
dashboardId: dashboard?.id,
dashcardId: dashcard?.id,
parameters: JSON.stringify(dashcardParamValues),
......@@ -66,7 +72,7 @@ function ActionParametersInputForm({
if (fetchedValues) {
setPrefetchValues(fetchedValues);
}
}, [dashboard?.id, dashcard?.id, dashcardParamValues]);
}, [dashboard?.id, dashcard?.id, dashcardParamValues, prefetchEndpoint]);
useEffect(() => {
const hasValueFromDashboard = Object.keys(dashcardParamValues).length > 0;
......
......@@ -7,7 +7,7 @@ import {
import { addUndo } from "metabase/redux/undo";
import { ActionsApi } from "metabase/services";
import { ActionsApi, PublicApi } from "metabase/services";
import type {
ActionDashboardCard,
......@@ -21,6 +21,7 @@ import type {
} from "metabase-types/api";
import type { Dispatch } from "metabase-types/store";
import { getDashboardType } from "../utils";
import { setDashCardAttributes } from "./core";
import { reloadDashboardCards } from "./data-fetching";
......@@ -91,7 +92,10 @@ export const executeRowAction = async ({
dispatch,
shouldToast = true,
}: ExecuteRowActionPayload): Promise<ActionFormSubmitResult> => {
const executeAction = ActionsApi.execute;
const executeAction =
getDashboardType(dashboard.id) === "public"
? PublicApi.executeDashcardAction
: ActionsApi.execute;
try {
const result = await executeAction({
......
......@@ -162,6 +162,9 @@ const PIVOT_PUBLIC_PREFIX = "/api/public/pivot/";
export const PublicApi = {
action: GET("/api/public/action/:uuid"),
executeDashcardAction: POST(
"/api/public/dashboard/:dashboardId/dashcard/:dashcardId/execute",
),
executeAction: POST("/api/public/action/:uuid/execute"),
card: GET("/api/public/card/:uuid"),
cardQuery: GET("/api/public/card/:uuid/query"),
......@@ -173,6 +176,9 @@ export const PublicApi = {
dashboardCardQueryPivot: GET(
PIVOT_PUBLIC_PREFIX + "dashboard/:uuid/dashcard/:dashcardId/card/:cardId",
),
prefetchValues: GET(
"/api/public/dashboard/:dashboardId/dashcard/:dashcardId/execute",
),
};
export const EmbedApi = {
......
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