diff --git a/frontend/src/metabase/components/EntityItem.jsx b/frontend/src/metabase/components/EntityItem.jsx index 23cb676342e2b377bf87d95b972bdc139bcbed9d..b79164ea8b15208cd9efa22eaf97738165961bd6 100644 --- a/frontend/src/metabase/components/EntityItem.jsx +++ b/frontend/src/metabase/components/EntityItem.jsx @@ -8,7 +8,6 @@ import Swapper from "metabase/components/Swapper"; import CheckBox from "metabase/core/components/CheckBox"; import Ellipsified from "metabase/core/components/Ellipsified"; import Icon from "metabase/components/Icon"; -import Tooltip from "metabase/components/Tooltip"; import { isItemPinned } from "metabase/collections/utils"; import { @@ -17,7 +16,6 @@ import { EntityItemSpinner, EntityItemWrapper, EntityMenuContainer, - PinButton, } from "./EntityItem.styled"; function EntityIconCheckBox({ @@ -97,12 +95,11 @@ function EntityItemMenu({ analyticsContext, }) { const isPinned = isItemPinned(item); - const showPinnedAction = onPin && isPinned; - const showUnpinnedAction = onPin && !isPinned; + const actions = useMemo( () => [ - showPinnedAction && { + onPin && { title: isPinned ? t`Unpin` : t`Pin this`, icon: "pin", action: onPin, @@ -148,7 +145,6 @@ function EntityItemMenu({ isBookmarked, isPreviewShown, isPreviewAvailable, - showPinnedAction, onPin, onMove, onCopy, @@ -163,11 +159,6 @@ function EntityItemMenu({ } return ( <EntityMenuContainer align="center"> - {showUnpinnedAction && ( - <Tooltip tooltip={t`Pin this`}> - <PinButton icon="pin" onClick={onPin} /> - </Tooltip> - )} <EntityMenu className={cx(className, "hover-child")} triggerIcon="ellipsis" diff --git a/frontend/src/metabase/components/EntityItem.styled.jsx b/frontend/src/metabase/components/EntityItem.styled.jsx index c0e99c89ccd223be5cf75b84471298cbb4d01960..72e7a8a8251c5dc2515f2ac86774d254e3c4f540 100644 --- a/frontend/src/metabase/components/EntityItem.styled.jsx +++ b/frontend/src/metabase/components/EntityItem.styled.jsx @@ -4,7 +4,6 @@ import { color, darken } from "metabase/lib/colors"; import IconButtonWrapper from "metabase/components/IconButtonWrapper"; import LoadingSpinner from "metabase/components/LoadingSpinner"; -import Button from "metabase/core/components/Button"; function getPinnedForeground(disabled) { return disabled ? darken(color("border"), 0.38) : color("accent4"); @@ -65,15 +64,6 @@ export const EntityMenuContainer = styled.div` color: ${color("text-medium")}; `; -export const PinButton = styled(Button)` - color: ${color("text-medium")}; - border: none; - - &:hover { - color: ${color("brand")}; - } -`; - export const EntityItemActions = styled.div` display: flex; align-items: center; diff --git a/frontend/test/metabase/scenarios/collections/collection-pinned-overview.cy.spec.js b/frontend/test/metabase/scenarios/collections/collection-pinned-overview.cy.spec.js index 7bf9fb187431c9df0deb7f27c5b63ec90f4af325..98bffdfd33d2048df628fe68853c36468dc43cb4 100644 --- a/frontend/test/metabase/scenarios/collections/collection-pinned-overview.cy.spec.js +++ b/frontend/test/metabase/scenarios/collections/collection-pinned-overview.cy.spec.js @@ -1,4 +1,4 @@ -import { restore, popover } from "__support__/e2e/cypress"; +import { popover, restore } from "__support__/e2e/cypress"; const DASHBOARD_ITEM_NAME = "Orders in a dashboard"; const CARD_ITEM_NAME = "Orders, Count"; @@ -24,11 +24,7 @@ describe("scenarios > collection pinned items overview", () => { cy.wait("@pinnedItemsGET"); // pin a dashboard - cy.findByText(DASHBOARD_ITEM_NAME) - .closest("tr") - .within(() => { - cy.icon("pin").click(); - }); + pinItem(DASHBOARD_ITEM_NAME); cy.wait("@pinnedItemsGET"); // ensure the dashboard card is showing in the pinned section @@ -44,11 +40,7 @@ describe("scenarios > collection pinned items overview", () => { cy.wait("@pinnedItemsGET"); // pin a card - cy.findByText(CARD_ITEM_NAME) - .closest("tr") - .within(() => { - cy.icon("pin").click(); - }); + pinItem(CARD_ITEM_NAME); cy.wait(["@pinnedItemsGET", "@cardQuery"]); // ensure the card visualization is showing in the pinned section @@ -62,11 +54,7 @@ describe("scenarios > collection pinned items overview", () => { cy.wait(["@pinnedItemsGET", "@cardQuery"]); // pin a model - cy.findByText(MODE_ITEM_NAME) - .closest("tr") - .within(() => { - cy.icon("pin").click(); - }); + pinItem(MODE_ITEM_NAME); cy.wait("@pinnedItemsGET"); // ensure the model card is showing in the pinned section cy.findByTestId("pinned-items").within(() => { @@ -135,3 +123,11 @@ describe("scenarios > collection pinned items overview", () => { }); }); }); + +const pinItem = name => { + cy.findByText(name) + .closest("tr") + .within(() => cy.icon("ellipsis").click()); + + popover().within(() => cy.icon("pin").click()); +}; diff --git a/frontend/test/metabase/scenarios/collections/permissions.cy.spec.js b/frontend/test/metabase/scenarios/collections/permissions.cy.spec.js index 99216b4fdcb8a20d622fc30f1576fe9b0073def3..0ff9b24edf1dd24e666908ab78f8d2f8699f8933 100644 --- a/frontend/test/metabase/scenarios/collections/permissions.cy.spec.js +++ b/frontend/test/metabase/scenarios/collections/permissions.cy.spec.js @@ -431,12 +431,10 @@ describe("collection permissions", () => { }); function openEllipsisMenuFor(item, index = 0) { - return cy - .findAllByText(item) + cy.findAllByText(item) .eq(index) .closest("tr") - .find(".Icon-ellipsis") - .click({ force: true }); + .within(() => cy.icon("ellipsis").click()); } function clickButton(name) { @@ -446,11 +444,8 @@ function clickButton(name) { } function pinItem(item) { - cy.findAllByText(item) - .closest("tr") - .within(() => { - cy.icon("pin").click(); - }); + openEllipsisMenuFor(item); + popover().within(() => cy.icon("pin").click()); } function exposeChildrenFor(collectionName) { diff --git a/frontend/test/metabase/scenarios/onboarding/home/homepage.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/home/homepage.cy.spec.js index 0b5434216cc3b6037981e91db5d526edae72daf1..90f20daac95b86d8e95585d82502d7fa10d20e86 100644 --- a/frontend/test/metabase/scenarios/onboarding/home/homepage.cy.spec.js +++ b/frontend/test/metabase/scenarios/onboarding/home/homepage.cy.spec.js @@ -1,4 +1,4 @@ -import { restore, visitDashboard } from "__support__/e2e/cypress"; +import { popover, restore, visitDashboard } from "__support__/e2e/cypress"; describe("scenarios > home > homepage", () => { beforeEach(() => { @@ -104,7 +104,7 @@ describe("scenarios > home > homepage", () => { cy.visit("/collection/root"); cy.wait("@getCollectionItems"); - getQuestionRow("Orders, Count").within(() => cy.icon("pin").click()); + pinItem("Orders, Count"); cy.wait("@getCollectionItems"); cy.wait("@getQuestionQuery"); @@ -116,8 +116,12 @@ describe("scenarios > home > homepage", () => { }); }); -const getQuestionRow = name => { - return cy.findByText(name).closest("tr"); +const pinItem = name => { + cy.findByText(name) + .closest("tr") + .within(() => cy.icon("ellipsis").click()); + + popover().within(() => cy.icon("pin").click()); }; const getXrayCandidates = () => [ diff --git a/frontend/test/metabase/scenarios/organization/bookmarks-collection.cy.spec.js b/frontend/test/metabase/scenarios/organization/bookmarks-collection.cy.spec.js index 1e1b9df34a7afb068de6fa079a140cdeec196f33..ae0990f33bc92b1e5fa28198e6c1c46006de66b8 100644 --- a/frontend/test/metabase/scenarios/organization/bookmarks-collection.cy.spec.js +++ b/frontend/test/metabase/scenarios/organization/bookmarks-collection.cy.spec.js @@ -171,11 +171,10 @@ function bookmarkThenArchive(name) { } function pin(name) { - cy.get("td") - .contains(name) - .closest("tr") - .find(".Icon-pin") - .click(); + openEllipsisMenuFor(name); + popover().within(() => { + cy.findByText("Pin this").click(); + }); } function archive(name) {