diff --git a/frontend/src/metabase/actions/containers/ActionParametersInputForm/ActionParametersInputForm.tsx b/frontend/src/metabase/actions/containers/ActionParametersInputForm/ActionParametersInputForm.tsx index 267c7ad430784940239e11072eb69e61ca46ce04..da6bfbee330fac16c4f6e95f1261925c32817667 100644 --- a/frontend/src/metabase/actions/containers/ActionParametersInputForm/ActionParametersInputForm.tsx +++ b/frontend/src/metabase/actions/containers/ActionParametersInputForm/ActionParametersInputForm.tsx @@ -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; diff --git a/frontend/src/metabase/dashboard/actions/actions.ts b/frontend/src/metabase/dashboard/actions/actions.ts index dc59406addd0adc7e2e732b71043f2e073f976c9..bc90ff8e767175b0639e69ed6a8b891af54e7dfa 100644 --- a/frontend/src/metabase/dashboard/actions/actions.ts +++ b/frontend/src/metabase/dashboard/actions/actions.ts @@ -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({ diff --git a/frontend/src/metabase/services.js b/frontend/src/metabase/services.js index c6f4f2074cde929b03ec92f595345ae26e469a67..dbc2fcd266768bb4f1a813ee3e8e0773766be3c8 100644 --- a/frontend/src/metabase/services.js +++ b/frontend/src/metabase/services.js @@ -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 = {