Skip to content
Snippets Groups Projects
Unverified Commit 0977dd43 authored by Nick Fitzpatrick's avatar Nick Fitzpatrick Committed by GitHub
Browse files

hiding Card Parameter Mapper header on small cards (#32272)

* hiding Card Parameter Mapper header on small cards

* adjusting for mobile, changing font size

* moving size map to sizes.ts
parent c27ab9b8
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,11 @@ import { connect } from "react-redux"; ...@@ -4,6 +4,11 @@ import { connect } from "react-redux";
import _ from "underscore"; import _ from "underscore";
import { t } from "ttag"; import { t } from "ttag";
import {
MOBILE_HEIGHT_BY_DISPLAY_TYPE,
MOBILE_DEFAULT_CARD_HEIGHT,
} from "metabase/visualizations/shared/utils/sizes";
import { Icon } from "metabase/core/components/Icon"; import { Icon } from "metabase/core/components/Icon";
import Tooltip from "metabase/core/components/Tooltip"; import Tooltip from "metabase/core/components/Tooltip";
import TippyPopover from "metabase/components/Popover/TippyPopover"; import TippyPopover from "metabase/components/Popover/TippyPopover";
...@@ -172,13 +177,19 @@ export function DashCardCardParameterMapper({ ...@@ -172,13 +177,19 @@ export function DashCardCardParameterMapper({
]); ]);
const headerContent = useMemo(() => { const headerContent = useMemo(() => {
if (!isVirtual && !(isNative && isDisabled)) { const layoutHeight = isMobile
return t`Column to filter on`; ? MOBILE_HEIGHT_BY_DISPLAY_TYPE[dashcard.card.display] ||
} else if (dashcard.size_y !== 1 || isMobile) { MOBILE_DEFAULT_CARD_HEIGHT
return t`Variable to map to`; : dashcard.size_y;
} else {
return null; if (layoutHeight > 2) {
if (!isVirtual && !(isNative && isDisabled)) {
return t`Column to filter on`;
} else {
return t`Variable to map to`;
}
} }
return null;
}, [dashcard, isVirtual, isNative, isDisabled, isMobile]); }, [dashcard, isVirtual, isNative, isDisabled, isMobile]);
const mappingInfoText = const mappingInfoText =
...@@ -189,7 +200,7 @@ export function DashCardCardParameterMapper({ ...@@ -189,7 +200,7 @@ export function DashCardCardParameterMapper({
}[virtualCardType] ?? ""; }[virtualCardType] ?? "";
return ( return (
<Container> <Container isSmall={!isMobile && dashcard.size_y < 2}>
{hasSeries && <CardLabel>{card.name}</CardLabel>} {hasSeries && <CardLabel>{card.name}</CardLabel>}
{isVirtual && isDisabled ? ( {isVirtual && isDisabled ? (
showVirtualDashCardInfoText(dashcard, isMobile) ? ( showVirtualDashCardInfoText(dashcard, isMobile) ? (
......
...@@ -7,8 +7,8 @@ import { Icon } from "metabase/core/components/Icon"; ...@@ -7,8 +7,8 @@ import { Icon } from "metabase/core/components/Icon";
import Button from "metabase/core/components/Button"; import Button from "metabase/core/components/Button";
import ExternalLink from "metabase/core/components/ExternalLink"; import ExternalLink from "metabase/core/components/ExternalLink";
export const Container = styled.div` export const Container = styled.div<{ isSmall: boolean }>`
margin: ${space(1)} 0; margin: ${({ isSmall }) => (isSmall ? 0 : space(1))} 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
...@@ -76,7 +76,6 @@ export const TargetButton = styled.div<{ variant: string }>` ...@@ -76,7 +76,6 @@ export const TargetButton = styled.div<{ variant: string }>`
background-color: ${color("white")}; background-color: ${color("white")};
text-weight: bold; text-weight: bold;
cursor: pointer; cursor: pointer;
font-size: 1.2em;
border: 2px solid ${color("brand")}; border: 2px solid ${color("brand")};
border-radius: 8px; border-radius: 8px;
min-height: 30px; min-height: 30px;
......
...@@ -5,6 +5,7 @@ import { ...@@ -5,6 +5,7 @@ import {
createMockCard, createMockCard,
createMockDashboardOrderedCard, createMockDashboardOrderedCard,
createMockActionDashboardCard, createMockActionDashboardCard,
createMockStructuredDatasetQuery,
} from "metabase-types/api/mocks"; } from "metabase-types/api/mocks";
import { getMetadata } from "metabase/selectors/metadata"; import { getMetadata } from "metabase/selectors/metadata";
...@@ -89,4 +90,88 @@ describe("DashCardParameterMapper", () => { ...@@ -89,4 +90,88 @@ describe("DashCardParameterMapper", () => {
expect(getIcon("info")).toBeInTheDocument(); expect(getIcon("info")).toBeInTheDocument();
expect(screen.getByLabelText(/in text cards/i)).toBeInTheDocument(); expect(screen.getByLabelText(/in text cards/i)).toBeInTheDocument();
}); });
it("should render a different header for virtual cards", () => {
const textCard = createMockCard({ dataset_query: {}, display: "text" });
setup({
card: textCard,
dashcard: createMockDashboardOrderedCard({
card: textCard,
size_y: 3,
visualization_settings: {
virtual_card: textCard,
},
}),
mappingOptions: ["foo", "bar"],
});
expect(screen.getByText(/Variable to map to/i)).toBeInTheDocument();
});
it("should show header content when card is more than 2 units high", () => {
const numberCard = createMockCard({
dataset_query: createMockStructuredDatasetQuery({}),
display: "scalar",
});
setup({
card: numberCard,
dashcard: createMockDashboardOrderedCard({
card: numberCard,
size_y: 3,
}),
mappingOptions: ["foo", "bar"],
});
expect(screen.getByText(/Column to filter on/i)).toBeInTheDocument();
});
it("should hide header content when card is less than 3 units high", () => {
const numberCard = createMockCard({
dataset_query: createMockStructuredDatasetQuery({}),
display: "scalar",
});
setup({
card: numberCard,
dashcard: createMockDashboardOrderedCard({
card: numberCard,
size_y: 2,
}),
mappingOptions: ["foo", "bar"],
});
expect(screen.queryByText(/Column to filter on/i)).not.toBeInTheDocument();
});
describe("mobile", () => {
it("should show header content when card is more than 2 units high", () => {
const numberCard = createMockCard({
dataset_query: createMockStructuredDatasetQuery({}),
display: "scalar",
});
setup({
card: numberCard,
dashcard: createMockDashboardOrderedCard({
card: numberCard,
size_y: 2,
}),
mappingOptions: ["foo", "bar"],
isMobile: true,
});
expect(screen.getByText(/Column to filter on/i)).toBeInTheDocument();
});
it("should hide header content when card is less than 3 units high", () => {
const textCard = createMockCard({ dataset_query: {}, display: "text" });
setup({
card: textCard,
dashcard: createMockDashboardOrderedCard({
card: textCard,
size_y: 3,
visualization_settings: {
virtual_card: textCard,
},
}),
mappingOptions: ["foo", "bar"],
isMobile: true,
});
expect(screen.queryByText(/Variable to map to/i)).not.toBeInTheDocument();
});
});
}); });
...@@ -27,10 +27,16 @@ import { ...@@ -27,10 +27,16 @@ import {
} from "metabase/lib/dashboard_grid"; } from "metabase/lib/dashboard_grid";
import { ContentViewportContext } from "metabase/core/context/ContentViewportContext"; import { ContentViewportContext } from "metabase/core/context/ContentViewportContext";
import { addUndo } from "metabase/redux/undo"; import { addUndo } from "metabase/redux/undo";
import {
MOBILE_HEIGHT_BY_DISPLAY_TYPE,
MOBILE_DEFAULT_CARD_HEIGHT,
} from "metabase/visualizations/shared/utils/sizes";
import { DashboardCard } from "./DashboardGrid.styled"; import { DashboardCard } from "./DashboardGrid.styled";
import GridLayout from "./grid/GridLayout"; import GridLayout from "./grid/GridLayout";
import { generateMobileLayout } from "./grid/utils"; import { generateMobileLayout } from "./grid/utils";
import AddSeriesModal from "./AddSeriesModal/AddSeriesModal"; import AddSeriesModal from "./AddSeriesModal/AddSeriesModal";
import DashCard from "./DashCard"; import DashCard from "./DashCard";
...@@ -233,14 +239,8 @@ class DashboardGrid extends Component { ...@@ -233,14 +239,8 @@ class DashboardGrid extends Component {
const desktop = cards.map(this.getLayoutForDashCard); const desktop = cards.map(this.getLayoutForDashCard);
const mobile = generateMobileLayout({ const mobile = generateMobileLayout({
desktopLayout: desktop, desktopLayout: desktop,
defaultCardHeight: 6, defaultCardHeight: MOBILE_DEFAULT_CARD_HEIGHT,
heightByDisplayType: { heightByDisplayType: MOBILE_HEIGHT_BY_DISPLAY_TYPE,
action: 1,
link: 1,
text: 2,
heading: 2,
scalar: 4,
},
}); });
return { desktop, mobile }; return { desktop, mobile };
} }
......
...@@ -16,7 +16,6 @@ export function sortCardsForMobile(a, b) { ...@@ -16,7 +16,6 @@ export function sortCardsForMobile(a, b) {
// for items on the same row, sort by x position // for items on the same row, sort by x position
return a.x - b.x; return a.x - b.x;
} }
export function generateMobileLayout({ export function generateMobileLayout({
desktopLayout, desktopLayout,
defaultCardHeight, defaultCardHeight,
......
...@@ -116,3 +116,13 @@ export const getMinSize = ( ...@@ -116,3 +116,13 @@ export const getMinSize = (
export const getDefaultSize = ( export const getDefaultSize = (
visualizationType: CardDisplayType, visualizationType: CardDisplayType,
): VisualizationSize => getSize(visualizationType, "default"); ): VisualizationSize => getSize(visualizationType, "default");
export const MOBILE_HEIGHT_BY_DISPLAY_TYPE = {
action: 1,
link: 1,
text: 2,
heading: 2,
scalar: 4,
};
export const MOBILE_DEFAULT_CARD_HEIGHT = 6;
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