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