From f93b488e3c34af8c89433c3cfc6921661453ba5e Mon Sep 17 00:00:00 2001
From: Ryan Laurie <30528226+iethree@users.noreply.github.com>
Date: Wed, 21 Sep 2022 08:13:35 -0600
Subject: [PATCH] rename all the action-button to action (#25517)

---
 frontend/src/metabase-lib/lib/Mode/utils.ts   |  2 +-
 frontend/src/metabase-types/api/data-app.ts   |  8 ++++---
 .../src/metabase-types/api/mocks/data-app.ts  | 10 +++------
 frontend/src/metabase-types/api/writeback.ts  |  8 ++-----
 .../src/metabase/dashboard/actions/cards.js   |  4 ++--
 .../metabase/dashboard/actions/writeback.ts   |  4 ++--
 .../ActionOptions/ActionClickMappings.tsx     |  8 +++----
 .../ActionOptions/ActionOptions.tsx           | 10 ++++-----
 .../ActionOptions/utils.ts                    | 10 ++++-----
 .../ActionOptions/utils.unit.spec.ts          |  6 +++---
 .../ClickBehaviorSidebarHeader.tsx            |  4 ++--
 .../ClickBehaviorSidebarMainView.tsx          |  4 ++--
 .../TypeSelector/TypeSelector.tsx             |  4 ++--
 .../dashboard/components/DashCard.jsx         | 10 ++++-----
 .../dashboard/containers/DashboardHeader.jsx  | 12 +++++------
 .../ActionClickDrill.unit.spec.ts             |  6 +++---
 .../drill/ActionClickDrill/types.ts           |  4 ++--
 .../drill/ActionClickDrill/utils.ts           |  8 +++----
 .../parameters/utils/mapping-options.js       |  4 ++--
 .../src/metabase/visualizations/register.js   |  4 ++--
 .../components/ActionButtonViz/index.ts       |  1 -
 .../ActionButton.tsx => ActionViz/Action.tsx} | 10 ++++-----
 .../ActionButton.styled.tsx                   |  0
 .../ActionButtonView.tsx                      |  0
 .../ActionViz.tsx}                            | 20 ++++++++++++++----
 .../DefaultActionButton.tsx                   |  0
 .../ImplicitActionButton.tsx                  |  0
 .../ImplicitDeleteModal.tsx                   |  0
 .../ImplicitInsertModal.tsx                   |  0
 .../ImplicitUpdateModal.tsx                   |  0
 .../writeback/components/ActionViz/index.ts   |  1 +
 frontend/src/metabase/writeback/utils.ts      | 21 +++++++++----------
 .../src/metabase/writeback/utils.unit.spec.ts | 10 ++++-----
 33 files changed, 99 insertions(+), 94 deletions(-)
 delete mode 100644 frontend/src/metabase/writeback/components/ActionButtonViz/index.ts
 rename frontend/src/metabase/writeback/components/{ActionButtonViz/ActionButton.tsx => ActionViz/Action.tsx} (62%)
 rename frontend/src/metabase/writeback/components/{ActionButtonViz => ActionViz}/ActionButton.styled.tsx (100%)
 rename frontend/src/metabase/writeback/components/{ActionButtonViz => ActionViz}/ActionButtonView.tsx (100%)
 rename frontend/src/metabase/writeback/components/{ActionButtonViz/ActionButtonViz.tsx => ActionViz/ActionViz.tsx} (69%)
 rename frontend/src/metabase/writeback/components/{ActionButtonViz => ActionViz}/DefaultActionButton.tsx (100%)
 rename frontend/src/metabase/writeback/components/{ActionButtonViz => ActionViz}/ImplicitActionButton.tsx (100%)
 rename frontend/src/metabase/writeback/components/{ActionButtonViz => ActionViz}/ImplicitDeleteModal.tsx (100%)
 rename frontend/src/metabase/writeback/components/{ActionButtonViz => ActionViz}/ImplicitInsertModal.tsx (100%)
 rename frontend/src/metabase/writeback/components/{ActionButtonViz => ActionViz}/ImplicitUpdateModal.tsx (100%)
 create mode 100644 frontend/src/metabase/writeback/components/ActionViz/index.ts

diff --git a/frontend/src/metabase-lib/lib/Mode/utils.ts b/frontend/src/metabase-lib/lib/Mode/utils.ts
index e98e35e5769..974e2f7e472 100644
--- a/frontend/src/metabase-lib/lib/Mode/utils.ts
+++ b/frontend/src/metabase-lib/lib/Mode/utils.ts
@@ -18,7 +18,7 @@ export function getMode(question: Question): ModeType | null {
     return null;
   }
 
-  if (question.card().display === "action-button") {
+  if (question.card().display === "action") {
     return MODE_TYPE_ACTION;
   }
 
diff --git a/frontend/src/metabase-types/api/data-app.ts b/frontend/src/metabase-types/api/data-app.ts
index a06a7ce5043..02b2356a654 100644
--- a/frontend/src/metabase-types/api/data-app.ts
+++ b/frontend/src/metabase-types/api/data-app.ts
@@ -6,6 +6,7 @@ import {
   DashboardParameterMapping,
 } from "./dashboard";
 import { WritebackAction } from "./writeback";
+import { FormType } from "./writeback-form-settings";
 
 export type DataAppId = number;
 export type DataAppPageId = Dashboard["id"];
@@ -36,20 +37,21 @@ export interface DataAppSearchItem {
   collection: Collection;
 }
 
-export type ActionButtonParametersMapping = Pick<
+export type ActionParametersMapping = Pick<
   DashboardParameterMapping,
   "parameter_id" | "target"
 >;
 
-export interface ActionButtonDashboardCard
+export interface ActionDashboardCard
   extends Omit<BaseDashboardOrderedCard, "parameter_mappings"> {
   action_id: number | null;
   action?: WritebackAction;
 
-  parameter_mappings?: ActionButtonParametersMapping[] | null;
+  parameter_mappings?: ActionParametersMapping[] | null;
   visualization_settings: {
     [key: string]: unknown;
     "button.label"?: string;
     click_behavior?: ClickBehavior;
+    actionDisplayType?: FormType;
   };
 }
diff --git a/frontend/src/metabase-types/api/mocks/data-app.ts b/frontend/src/metabase-types/api/mocks/data-app.ts
index 3670bf52b71..526a6441b1c 100644
--- a/frontend/src/metabase-types/api/mocks/data-app.ts
+++ b/frontend/src/metabase-types/api/mocks/data-app.ts
@@ -1,9 +1,5 @@
 import { merge } from "icepick";
-import {
-  ActionButtonDashboardCard,
-  DataApp,
-  Dashboard,
-} from "metabase-types/api";
+import { ActionDashboardCard, DataApp, Dashboard } from "metabase-types/api";
 import { createMockCollection } from "./collection";
 import { createMockDashboard } from "./dashboard";
 
@@ -32,14 +28,14 @@ export const createMockDataAppPage = (
 export const createMockDashboardActionButton = ({
   visualization_settings,
   ...opts
-}: Partial<ActionButtonDashboardCard> = {}): ActionButtonDashboardCard => ({
+}: Partial<ActionDashboardCard> = {}): ActionDashboardCard => ({
   id: 1,
   action_id: null,
   parameter_mappings: null,
   visualization_settings: merge(
     {
       virtual_card: {
-        display: "action-button",
+        display: "action",
       },
     },
     visualization_settings,
diff --git a/frontend/src/metabase-types/api/writeback.ts b/frontend/src/metabase-types/api/writeback.ts
index 85e31ff9697..0c6f899a58a 100644
--- a/frontend/src/metabase-types/api/writeback.ts
+++ b/frontend/src/metabase-types/api/writeback.ts
@@ -1,9 +1,5 @@
-import { Card, ActionFormSettings } from "metabase-types/api";
-import {
-  Parameter,
-  ParameterId,
-  ParameterTarget,
-} from "metabase-types/types/Parameter";
+import { Card, ActionFormSettings, ParameterId } from "metabase-types/api";
+import { Parameter, ParameterTarget } from "metabase-types/types/Parameter";
 
 export interface WritebackParameter extends Parameter {
   target: ParameterTarget;
diff --git a/frontend/src/metabase/dashboard/actions/cards.js b/frontend/src/metabase/dashboard/actions/cards.js
index 03f816eced3..de2f843e45c 100644
--- a/frontend/src/metabase/dashboard/actions/cards.js
+++ b/frontend/src/metabase/dashboard/actions/cards.js
@@ -85,10 +85,10 @@ export const addTextDashCardToDashboard = function ({ dashId }) {
   });
 };
 
-export const addActionButtonDashCardToDashboard = ({ dashId }) => {
+export const addActionDashCardToDashboard = ({ dashId }) => {
   const virtualActionsCard = {
     ...createCard(),
-    display: "action-button",
+    display: "action",
     archived: false,
   };
   const dashcardOverrides = {
diff --git a/frontend/src/metabase/dashboard/actions/writeback.ts b/frontend/src/metabase/dashboard/actions/writeback.ts
index 1dc86d2c6e8..2f2e6dcf76a 100644
--- a/frontend/src/metabase/dashboard/actions/writeback.ts
+++ b/frontend/src/metabase/dashboard/actions/writeback.ts
@@ -21,7 +21,7 @@ import { ActionsApi } from "metabase/services";
 import type {
   Dashboard,
   DashboardOrderedCard,
-  ActionButtonDashboardCard,
+  ActionDashboardCard,
   ParameterMappedForActionExecution,
 } from "metabase-types/api";
 import type { Dispatch } from "metabase-types/store";
@@ -231,7 +231,7 @@ export const deleteManyRowsFromDataApp = (
 
 export type ExecuteRowActionPayload = {
   dashboard: Dashboard;
-  dashcard: ActionButtonDashboardCard;
+  dashcard: ActionDashboardCard;
   parameters: ParameterMappedForActionExecution[];
   extra_parameters: ParameterMappedForActionExecution[];
 };
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/ActionClickMappings.tsx b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/ActionClickMappings.tsx
index 31706b1bc8e..9caab85bcb4 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/ActionClickMappings.tsx
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/ActionClickMappings.tsx
@@ -3,8 +3,8 @@ import React, { useCallback, useMemo } from "react";
 import ClickMappings from "metabase/dashboard/components/ClickMappings";
 
 import type {
-  ActionButtonDashboardCard,
-  ActionButtonParametersMapping,
+  ActionDashboardCard,
+  ActionParametersMapping,
   ClickBehaviorParameterMapping,
   WritebackAction,
 } from "metabase-types/api";
@@ -27,9 +27,9 @@ interface IntermediateActionClickBehavior {
 
 interface ActionClickMappingsProps {
   action?: WritebackAction;
-  dashcard: ActionButtonDashboardCard;
+  dashcard: ActionDashboardCard;
   parameters: UiParameter[];
-  onChange: (parameterMappings: ActionButtonParametersMapping[] | null) => void;
+  onChange: (parameterMappings: ActionParametersMapping[] | null) => void;
 }
 
 function ActionClickMappings({
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/ActionOptions.tsx b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/ActionOptions.tsx
index e79e33ed693..c9612ae5951 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/ActionOptions.tsx
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/ActionOptions.tsx
@@ -7,8 +7,8 @@ import Actions from "metabase/entities/actions";
 import { updateButtonActionMapping } from "metabase/dashboard/actions";
 
 import type {
-  ActionButtonDashboardCard,
-  ActionButtonParametersMapping,
+  ActionDashboardCard,
+  ActionParametersMapping,
   WritebackAction,
 } from "metabase-types/api";
 import type { State } from "metabase-types/store";
@@ -21,7 +21,7 @@ import ActionOptionItem from "./ActionOptionItem";
 import { ClickMappingsContainer } from "./ActionOptions.styled";
 
 interface ActionOptionsOwnProps {
-  dashcard: ActionButtonDashboardCard;
+  dashcard: ActionDashboardCard;
   parameters: UiParameter[];
 }
 
@@ -30,7 +30,7 @@ interface ActionOptionsDispatchProps {
     dashCardId: number,
     settings: {
       action_id?: number | null;
-      parameter_mappings?: ActionButtonParametersMapping[] | null;
+      parameter_mappings?: ActionParametersMapping[] | null;
     },
   ) => void;
 }
@@ -67,7 +67,7 @@ function ActionOptions({
   );
 
   const handleParameterMappingChange = useCallback(
-    (parameter_mappings: ActionButtonParametersMapping[] | null) => {
+    (parameter_mappings: ActionParametersMapping[] | null) => {
       onUpdateButtonActionMapping(dashcard.id, {
         parameter_mappings,
       });
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/utils.ts b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/utils.ts
index 2bc8eddcb87..d37b03b5f95 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/utils.ts
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/utils.ts
@@ -1,15 +1,15 @@
 import _ from "underscore";
 
 import type {
-  ActionButtonDashboardCard,
-  ActionButtonParametersMapping,
+  ActionDashboardCard,
+  ActionParametersMapping,
   ClickBehaviorParameterMapping,
   WritebackAction,
 } from "metabase-types/api";
 import type { UiParameter } from "metabase/parameters/types";
 
 export function turnDashCardParameterMappingsIntoClickBehaviorMappings(
-  dashCard: ActionButtonDashboardCard,
+  dashCard: ActionDashboardCard,
   parameters: UiParameter[],
   action: WritebackAction,
 ): ClickBehaviorParameterMapping {
@@ -51,9 +51,9 @@ export function turnDashCardParameterMappingsIntoClickBehaviorMappings(
 export function turnClickBehaviorParameterMappingsIntoDashCardMappings(
   clickBehaviorParameterMappings: ClickBehaviorParameterMapping,
   action: WritebackAction,
-): ActionButtonParametersMapping[] {
+): ActionParametersMapping[] {
   const mappings = Object.values(clickBehaviorParameterMappings);
-  const parameter_mappings: ActionButtonParametersMapping[] = [];
+  const parameter_mappings: ActionParametersMapping[] = [];
 
   mappings.forEach(mapping => {
     const { source, target } = mapping;
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/utils.unit.spec.ts b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/utils.unit.spec.ts
index ed558170fd8..1e05ae7c712 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/utils.unit.spec.ts
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ActionOptions/utils.unit.spec.ts
@@ -1,5 +1,5 @@
 import type {
-  ActionButtonParametersMapping,
+  ActionParametersMapping,
   ClickBehaviorParameterMapping,
   WritebackParameter,
 } from "metabase-types/api";
@@ -30,7 +30,7 @@ const DASHBOARD_FILTER_PARAMETER: UiParameter = {
   value: 5,
 };
 
-const PARAMETER_MAPPING: ActionButtonParametersMapping = {
+const PARAMETER_MAPPING: ActionParametersMapping = {
   parameter_id: DASHBOARD_FILTER_PARAMETER.id,
   target: WRITEBACK_PARAMETER.target,
 };
@@ -53,7 +53,7 @@ const CLICK_BEHAVIOR_PARAMETER_MAPPINGS: ClickBehaviorParameterMapping = {
 describe("turnDashCardParameterMappingsIntoClickBehaviorMappings", () => {
   type SetupOpts = {
     actionParameters?: WritebackParameter[] | undefined;
-    dashCardParameterMappings?: ActionButtonParametersMapping[] | null;
+    dashCardParameterMappings?: ActionParametersMapping[] | null;
   };
 
   function setup({
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ClickBehaviorSidebarHeader/ClickBehaviorSidebarHeader.tsx b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ClickBehaviorSidebarHeader/ClickBehaviorSidebarHeader.tsx
index 029c6ecb78b..a1a339f268b 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ClickBehaviorSidebarHeader/ClickBehaviorSidebarHeader.tsx
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ClickBehaviorSidebarHeader/ClickBehaviorSidebarHeader.tsx
@@ -5,7 +5,7 @@ import Icon from "metabase/components/Icon";
 
 import { isTableDisplay } from "metabase/lib/click-behavior";
 import {
-  isActionButtonDashCard,
+  isActionDashCard,
   getActionButtonLabel,
 } from "metabase/writeback/utils";
 
@@ -47,7 +47,7 @@ function HeaderContent({ dashcard, selectedColumn, onUnsetColumn }: Props) {
     }
     return <Heading>{t`On-click behavior for each column`}</Heading>;
   }
-  if (isActionButtonDashCard(dashcard)) {
+  if (isActionDashCard(dashcard)) {
     const label = getActionButtonLabel(dashcard);
     return <DefaultHeader>{label || t`an action button`}</DefaultHeader>;
   }
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ClickBehaviorSidebarMainView/ClickBehaviorSidebarMainView.tsx b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ClickBehaviorSidebarMainView/ClickBehaviorSidebarMainView.tsx
index 738af073074..0967a49a8fe 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ClickBehaviorSidebarMainView/ClickBehaviorSidebarMainView.tsx
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/ClickBehaviorSidebarMainView/ClickBehaviorSidebarMainView.tsx
@@ -2,7 +2,7 @@ import React from "react";
 
 import type { UiParameter } from "metabase/parameters/types";
 import type {
-  ActionButtonDashboardCard,
+  ActionDashboardCard,
   Dashboard,
   DashboardOrderedCard,
   ClickBehavior,
@@ -55,7 +55,7 @@ function ClickBehaviorOptions({
   }
   return (
     <ActionOptions
-      dashcard={dashcard as unknown as ActionButtonDashboardCard}
+      dashcard={dashcard as unknown as ActionDashboardCard}
       parameters={parameters}
     />
   );
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.tsx b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.tsx
index 743f1411e29..d1e4cc9b671 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.tsx
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.tsx
@@ -3,7 +3,7 @@ import React, { useCallback, useMemo } from "react";
 import Icon from "metabase/components/Icon";
 import { color } from "metabase/lib/colors";
 
-import { isActionButtonDashCard } from "metabase/writeback/utils";
+import { isActionDashCard } from "metabase/writeback/utils";
 
 import type { UiParameter } from "metabase/parameters/types";
 import type { DashboardOrderedCard, ClickBehavior } from "metabase-types/api";
@@ -67,7 +67,7 @@ function TypeSelector({
   moveToNextPage,
 }: TypeSelectorProps) {
   const options = useMemo(() => {
-    if (isActionButtonDashCard(dashcard)) {
+    if (isActionDashCard(dashcard)) {
       return clickBehaviorOptions;
     }
     return clickBehaviorOptions.filter(option => option.value !== "action");
diff --git a/frontend/src/metabase/dashboard/components/DashCard.jsx b/frontend/src/metabase/dashboard/components/DashCard.jsx
index 1b9f8e0dcff..ef25af8905f 100644
--- a/frontend/src/metabase/dashboard/components/DashCard.jsx
+++ b/frontend/src/metabase/dashboard/components/DashCard.jsx
@@ -29,7 +29,7 @@ import { isVirtualDashCard } from "metabase/dashboard/utils";
 import { IS_EMBED_PREVIEW } from "metabase/lib/embed";
 import { getClickBehaviorDescription } from "metabase/lib/click-behavior";
 
-import { isActionButtonCard } from "metabase/writeback/utils";
+import { isActionCard } from "metabase/writeback/utils";
 
 import { getParameterValuesBySlug } from "metabase/parameters/utils/parameter-values";
 import Utils from "metabase/lib/utils";
@@ -179,13 +179,13 @@ export default class DashCard extends Component {
       parameterValues,
     );
 
-    const isActionButton = isActionButtonCard(mainCard);
+    const isAction = isActionCard(mainCard);
 
     const hideBackground =
       !isEditing &&
       (mainCard.visualization_settings["dashcard.background"] === false ||
         mainCard.display === "list" ||
-        isActionButton);
+        isAction);
 
     const isEditingDashboardLayout =
       isEditing && clickBehaviorSidebarDashcard == null && !isEditingParameter;
@@ -279,7 +279,7 @@ export default class DashCard extends Component {
                     : t`Action button`}
                 </h4>
               </div>
-            ) : isEditingParameter && !isActionButton ? (
+            ) : isEditingParameter && !isAction ? (
               <DashCardParameterMapper
                 dashcard={dashcard}
                 isMobile={isMobile}
@@ -383,7 +383,7 @@ const DashCardActionButtons = ({
         />,
       );
     }
-    if (!isVirtualDashCard || isActionButtonCard(card)) {
+    if (!isVirtualDashCard || isActionCard(card)) {
       buttons.push(
         <Tooltip key="click-behavior-tooltip" tooltip={t`Click behavior`}>
           <a
diff --git a/frontend/src/metabase/dashboard/containers/DashboardHeader.jsx b/frontend/src/metabase/dashboard/containers/DashboardHeader.jsx
index 22e84458925..54c3386f083 100644
--- a/frontend/src/metabase/dashboard/containers/DashboardHeader.jsx
+++ b/frontend/src/metabase/dashboard/containers/DashboardHeader.jsx
@@ -109,8 +109,8 @@ class DashboardHeader extends Component {
     this.props.addTextDashCardToDashboard({ dashId: this.props.dashboard.id });
   }
 
-  onAddActionButton() {
-    this.props.addActionButtonDashCardToDashboard({
+  onAddAction() {
+    this.props.addActionDashCardToDashboard({
       dashId: this.props.dashboard.id,
     });
   }
@@ -239,12 +239,12 @@ class DashboardHeader extends Component {
 
       if (isAdmin && dashboard.is_app_page) {
         buttons.push(
-          <Tooltip key="add-action-button" tooltip={t`Add action button`}>
+          <Tooltip key="add-action" tooltip={t`Add action`}>
             <a
-              data-metabase-event="Dashboard;Add Action Button"
-              key="add-action-button"
+              data-metabase-event="Dashboard;Add Action"
+              key="add-action"
               className="text-brand-hover cursor-pointer"
-              onClick={() => this.onAddActionButton()}
+              onClick={() => this.onAddAction()}
             >
               <DashboardHeaderButton>
                 <Icon name="play" size={18} />
diff --git a/frontend/src/metabase/modes/components/drill/ActionClickDrill/ActionClickDrill.unit.spec.ts b/frontend/src/metabase/modes/components/drill/ActionClickDrill/ActionClickDrill.unit.spec.ts
index 80263bf9eee..c8adbb1da88 100644
--- a/frontend/src/metabase/modes/components/drill/ActionClickDrill/ActionClickDrill.unit.spec.ts
+++ b/frontend/src/metabase/modes/components/drill/ActionClickDrill/ActionClickDrill.unit.spec.ts
@@ -1,7 +1,7 @@
 import * as dashboardActions from "metabase/dashboard/actions/writeback";
 
 import type {
-  ActionButtonParametersMapping,
+  ActionParametersMapping,
   DashboardOrderedCard,
   WritebackParameter,
 } from "metabase-types/api";
@@ -42,7 +42,7 @@ const DASHBOARD_FILTER_PARAMETER: UiParameter = {
   value: 5,
 };
 
-const PARAMETER_MAPPING: ActionButtonParametersMapping = {
+const PARAMETER_MAPPING: ActionParametersMapping = {
   parameter_id: DASHBOARD_FILTER_PARAMETER.id,
   target: WRITEBACK_PARAMETER.target,
 };
@@ -230,7 +230,7 @@ describe("ActionClickDrill", () => {
   }: {
     actionParameters?: WritebackParameter[];
     dashboardParameters?: UiParameter[];
-    parameterMappings?: ActionButtonParametersMapping[];
+    parameterMappings?: ActionParametersMapping[];
     parameterValuesBySlug?: Record<string, { value: ParameterValueOrArray }>;
   } = {}) {
     const executeActionSpy = jest.spyOn(dashboardActions, "executeRowAction");
diff --git a/frontend/src/metabase/modes/components/drill/ActionClickDrill/types.ts b/frontend/src/metabase/modes/components/drill/ActionClickDrill/types.ts
index 6bb5295eda2..92ef6cf4663 100644
--- a/frontend/src/metabase/modes/components/drill/ActionClickDrill/types.ts
+++ b/frontend/src/metabase/modes/components/drill/ActionClickDrill/types.ts
@@ -1,4 +1,4 @@
-import type { ActionButtonDashboardCard, Dashboard } from "metabase-types/api";
+import type { ActionDashboardCard, Dashboard } from "metabase-types/api";
 import type { Column } from "metabase-types/types/Dataset";
 import type {
   ParameterId,
@@ -8,7 +8,7 @@ import type { ClickObject } from "metabase-types/types/Visualization";
 
 type ActionClickExtraData = {
   dashboard: Dashboard;
-  dashcard: ActionButtonDashboardCard;
+  dashcard: ActionDashboardCard;
   parameterValuesBySlug: Record<string, { value: ParameterValueOrArray }>;
   userAttributes: unknown[];
 };
diff --git a/frontend/src/metabase/modes/components/drill/ActionClickDrill/utils.ts b/frontend/src/metabase/modes/components/drill/ActionClickDrill/utils.ts
index eac9c75a1a4..ef1f2cf1820 100644
--- a/frontend/src/metabase/modes/components/drill/ActionClickDrill/utils.ts
+++ b/frontend/src/metabase/modes/components/drill/ActionClickDrill/utils.ts
@@ -1,7 +1,7 @@
 import _ from "underscore";
 
 import type {
-  ActionButtonParametersMapping,
+  ActionParametersMapping,
   ParameterMappedForActionExecution,
   WritebackAction,
   WritebackParameter,
@@ -18,7 +18,7 @@ function formatParameterValue(value: ParameterValueOrArray) {
 }
 
 export function prepareParameter(
-  mapping: ActionButtonParametersMapping,
+  mapping: ActionParametersMapping,
   {
     data,
     action,
@@ -49,7 +49,7 @@ export function prepareParameter(
 
 function isMappedParameter(
   parameter: WritebackParameter,
-  parameterMappings: ActionButtonParametersMapping[],
+  parameterMappings: ActionParametersMapping[],
 ) {
   return parameterMappings.some(mapping =>
     _.isEqual(mapping.target, parameter.target),
@@ -58,7 +58,7 @@ function isMappedParameter(
 
 export function getNotProvidedActionParameters(
   action: WritebackAction,
-  parameterMappings: ActionButtonParametersMapping[],
+  parameterMappings: ActionParametersMapping[],
   mappedParameters: ParameterMappedForActionExecution[],
 ) {
   const emptyParameterTargets: ParameterTarget[] = [];
diff --git a/frontend/src/metabase/parameters/utils/mapping-options.js b/frontend/src/metabase/parameters/utils/mapping-options.js
index 62b1de90db7..96417c70734 100644
--- a/frontend/src/metabase/parameters/utils/mapping-options.js
+++ b/frontend/src/metabase/parameters/utils/mapping-options.js
@@ -1,5 +1,5 @@
 import { tag_names } from "cljs/metabase.shared.parameters.parameters";
-import { isActionButtonCard } from "metabase/writeback/utils";
+import { isActionCard } from "metabase/writeback/utils";
 import Question from "metabase-lib/lib/Question";
 import { ExpressionDimension } from "metabase-lib/lib/Dimension";
 
@@ -60,7 +60,7 @@ export function getParameterMappingOptions(
     return tagNames ? tagNames.map(buildTextTagOption) : [];
   }
 
-  if (isActionButtonCard(card)) {
+  if (isActionCard(card)) {
     // Action parameters are mapped via click behavior UI for now
     return [];
   }
diff --git a/frontend/src/metabase/visualizations/register.js b/frontend/src/metabase/visualizations/register.js
index 6276bee0a98..0924342c7c3 100644
--- a/frontend/src/metabase/visualizations/register.js
+++ b/frontend/src/metabase/visualizations/register.js
@@ -3,7 +3,7 @@ import {
   setDefaultVisualization,
 } from "metabase/visualizations";
 
-import ActionButtonViz from "metabase/writeback/components/ActionButtonViz";
+import ActionViz from "metabase/writeback/components/ActionViz";
 
 import Scalar from "./visualizations/Scalar";
 import SmartScalar from "./visualizations/SmartScalar";
@@ -45,6 +45,6 @@ export default function () {
   registerVisualization(ObjectDetail);
   registerVisualization(PivotTable);
   registerVisualization(ListViz);
-  registerVisualization(ActionButtonViz);
+  registerVisualization(ActionViz);
   setDefaultVisualization(Table);
 }
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/index.ts b/frontend/src/metabase/writeback/components/ActionButtonViz/index.ts
deleted file mode 100644
index b18b44ee942..00000000000
--- a/frontend/src/metabase/writeback/components/ActionButtonViz/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from "./ActionButtonViz";
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/ActionButton.tsx b/frontend/src/metabase/writeback/components/ActionViz/Action.tsx
similarity index 62%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/ActionButton.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/Action.tsx
index 793f3581d1f..ba44c785f89 100644
--- a/frontend/src/metabase/writeback/components/ActionButtonViz/ActionButton.tsx
+++ b/frontend/src/metabase/writeback/components/ActionViz/Action.tsx
@@ -2,22 +2,22 @@ import React from "react";
 
 import { isImplicitActionButton } from "metabase/writeback/utils";
 
-import type { ActionButtonDashboardCard, Dashboard } from "metabase-types/api";
+import type { ActionDashboardCard, Dashboard } from "metabase-types/api";
 import type { VisualizationProps } from "metabase-types/types/Visualization";
 
 import DefaultActionButton from "./DefaultActionButton";
 import ImplicitActionButton from "./ImplicitActionButton";
 
-interface ActionButtonProps extends VisualizationProps {
-  dashcard: ActionButtonDashboardCard;
+interface ActionProps extends VisualizationProps {
+  dashcard: ActionDashboardCard;
   dashboard: Dashboard;
 }
 
-function ActionButton({ dashcard, ...props }: ActionButtonProps) {
+function Action({ dashcard, ...props }: ActionProps) {
   if (isImplicitActionButton(dashcard)) {
     return <ImplicitActionButton {...props} />;
   }
   return <DefaultActionButton {...props} />;
 }
 
-export default ActionButton;
+export default Action;
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/ActionButton.styled.tsx b/frontend/src/metabase/writeback/components/ActionViz/ActionButton.styled.tsx
similarity index 100%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/ActionButton.styled.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/ActionButton.styled.tsx
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/ActionButtonView.tsx b/frontend/src/metabase/writeback/components/ActionViz/ActionButtonView.tsx
similarity index 100%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/ActionButtonView.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/ActionButtonView.tsx
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/ActionButtonViz.tsx b/frontend/src/metabase/writeback/components/ActionViz/ActionViz.tsx
similarity index 69%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/ActionButtonViz.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/ActionViz.tsx
index d20161e0b0c..50ea1c9ebcc 100644
--- a/frontend/src/metabase/writeback/components/ActionButtonViz/ActionButtonViz.tsx
+++ b/frontend/src/metabase/writeback/components/ActionViz/ActionViz.tsx
@@ -1,9 +1,9 @@
 import { t } from "ttag";
-import ActionButton from "./ActionButton";
+import Action from "./Action";
 
-export default Object.assign(ActionButton, {
-  uiName: t`Action button`,
-  identifier: "action-button",
+export default Object.assign(Action, {
+  uiName: t`Action`,
+  identifier: "action",
   iconName: "play",
 
   noHeader: true,
@@ -23,6 +23,18 @@ export default Object.assign(ActionButton, {
     "card.description": {
       dashboard: false,
     },
+    actionDisplayType: {
+      section: t`Display`,
+      title: t`Action Display`,
+      widget: "radio",
+      default: "inline",
+      props: {
+        options: [
+          { name: t`Inline`, value: "inline" },
+          { name: t`Modal`, value: "modal" },
+        ],
+      },
+    },
     "button.label": {
       section: t`Display`,
       title: t`Label`,
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/DefaultActionButton.tsx b/frontend/src/metabase/writeback/components/ActionViz/DefaultActionButton.tsx
similarity index 100%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/DefaultActionButton.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/DefaultActionButton.tsx
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/ImplicitActionButton.tsx b/frontend/src/metabase/writeback/components/ActionViz/ImplicitActionButton.tsx
similarity index 100%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/ImplicitActionButton.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/ImplicitActionButton.tsx
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/ImplicitDeleteModal.tsx b/frontend/src/metabase/writeback/components/ActionViz/ImplicitDeleteModal.tsx
similarity index 100%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/ImplicitDeleteModal.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/ImplicitDeleteModal.tsx
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/ImplicitInsertModal.tsx b/frontend/src/metabase/writeback/components/ActionViz/ImplicitInsertModal.tsx
similarity index 100%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/ImplicitInsertModal.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/ImplicitInsertModal.tsx
diff --git a/frontend/src/metabase/writeback/components/ActionButtonViz/ImplicitUpdateModal.tsx b/frontend/src/metabase/writeback/components/ActionViz/ImplicitUpdateModal.tsx
similarity index 100%
rename from frontend/src/metabase/writeback/components/ActionButtonViz/ImplicitUpdateModal.tsx
rename to frontend/src/metabase/writeback/components/ActionViz/ImplicitUpdateModal.tsx
diff --git a/frontend/src/metabase/writeback/components/ActionViz/index.ts b/frontend/src/metabase/writeback/components/ActionViz/index.ts
new file mode 100644
index 00000000000..c728c4b2f45
--- /dev/null
+++ b/frontend/src/metabase/writeback/components/ActionViz/index.ts
@@ -0,0 +1 @@
+export { default } from "./ActionViz";
diff --git a/frontend/src/metabase/writeback/utils.ts b/frontend/src/metabase/writeback/utils.ts
index 21614c7ea4a..1fdab78d2c1 100644
--- a/frontend/src/metabase/writeback/utils.ts
+++ b/frontend/src/metabase/writeback/utils.ts
@@ -1,7 +1,7 @@
 import { TYPE } from "metabase/lib/types";
 
 import type {
-  ActionButtonDashboardCard,
+  ActionDashboardCard,
   BaseDashboardOrderedCard,
   ClickBehavior,
   Database as IDatabase,
@@ -61,14 +61,13 @@ export const isEditableField = (field: Field) => {
   return true;
 };
 
-export const isActionButtonCard = (card: SavedCard) =>
-  card?.display === "action-button";
+export const isActionCard = (card: SavedCard) => card?.display === "action";
 
-export function isActionButtonDashCard(
+export function isActionDashCard(
   dashCard: BaseDashboardOrderedCard,
-): dashCard is ActionButtonDashboardCard {
+): dashCard is ActionDashboardCard {
   const virtualCard = dashCard?.visualization_settings?.virtual_card;
-  return isActionButtonCard(virtualCard as SavedCard);
+  return isActionCard(virtualCard as SavedCard);
 }
 
 /**
@@ -81,8 +80,8 @@ export function isActionButtonDashCard(
  */
 export function isMappedExplicitActionButton(
   dashCard: BaseDashboardOrderedCard,
-): dashCard is ActionButtonDashboardCard {
-  const isAction = isActionButtonDashCard(dashCard);
+): dashCard is ActionDashboardCard {
+  const isAction = isActionDashCard(dashCard);
   return isAction && typeof dashCard.action_id === "number";
 }
 
@@ -110,8 +109,8 @@ export function isValidImplicitActionClickBehavior(
 
 export function isImplicitActionButton(
   dashCard: BaseDashboardOrderedCard,
-): dashCard is ActionButtonDashboardCard {
-  const isAction = isActionButtonDashCard(dashCard);
+): boolean {
+  const isAction = isActionDashCard(dashCard);
   return (
     isAction &&
     dashCard.action_id == null &&
@@ -121,7 +120,7 @@ export function isImplicitActionButton(
   );
 }
 
-export function getActionButtonLabel(dashCard: ActionButtonDashboardCard) {
+export function getActionButtonLabel(dashCard: ActionDashboardCard) {
   const label = dashCard.visualization_settings?.["button.label"];
   return label || "";
 }
diff --git a/frontend/src/metabase/writeback/utils.unit.spec.ts b/frontend/src/metabase/writeback/utils.unit.spec.ts
index 04b1e8c67d2..3c46d3d2b51 100644
--- a/frontend/src/metabase/writeback/utils.unit.spec.ts
+++ b/frontend/src/metabase/writeback/utils.unit.spec.ts
@@ -3,8 +3,8 @@ import {
   createMockQueryAction,
 } from "metabase-types/api/mocks";
 import type {
-  ActionButtonDashboardCard,
-  ActionButtonParametersMapping,
+  ActionDashboardCard,
+  ActionParametersMapping,
 } from "metabase-types/api";
 import { isMappedExplicitActionButton, isImplicitActionButton } from "./utils";
 
@@ -22,7 +22,7 @@ const EXPLICIT_ACTION = createMockDashboardActionButton({
   visualization_settings: { click_behavior: undefined },
 });
 
-const PARAMETER_MAPPINGS: ActionButtonParametersMapping[] = [
+const PARAMETER_MAPPINGS: ActionParametersMapping[] = [
   {
     parameter_id: "param",
     target: ["variable", ["template-tag", "foo"]],
@@ -96,7 +96,7 @@ describe("isMappedExplicitActionButton", () => {
   });
 
   it("returns false for button without an explicit action attached, but with parameter mappings", () => {
-    const button: ActionButtonDashboardCard = {
+    const button: ActionDashboardCard = {
       ...PLAIN_BUTTON,
       parameter_mappings: PARAMETER_MAPPINGS,
     };
@@ -109,7 +109,7 @@ describe("isMappedExplicitActionButton", () => {
   });
 
   it("returns true for button with an explicit action attached and defined parameter mappings", () => {
-    const button: ActionButtonDashboardCard = {
+    const button: ActionDashboardCard = {
       ...EXPLICIT_ACTION,
       parameter_mappings: PARAMETER_MAPPINGS,
     };
-- 
GitLab