Skip to content
Snippets Groups Projects
Unverified Commit f27d115b authored by Alexander Polyankin's avatar Alexander Polyankin Committed by GitHub
Browse files

Fix the homepage dashboard being loaded everywhere (#46202)

* Fix homepage dashboard being loaded everywhere

* Fix

* Fix
parent 7b14ccd9
Branches
Tags
No related merge requests found
......@@ -25,6 +25,7 @@ import {
dashboardGrid,
entityPickerModalTab,
visitQuestion,
createDashboard,
} from "e2e/support/helpers";
const { admin } = USERS;
......@@ -527,6 +528,22 @@ describe("scenarios > home > custom homepage", () => {
`/dashboard/${ORDERS_DASHBOARD_ID}`,
);
});
it("should not load the homepage dashboard when visiting another dashboard directly (metabase#43800)", () => {
cy.intercept("GET", "/api/dashboard/*").as("getDashboard");
cy.intercept("GET", "/api/dashboard/*/query_metadata*").as(
"getDashboardMetadata",
);
const dashboardName = "Test Dashboard";
createDashboard({ name: dashboardName }).then(({ body: dashboard }) =>
visitDashboard(dashboard.id),
);
dashboardHeader().findByText(dashboardName).should("be.visible");
cy.get("@getDashboard.all").should("have.length", 1);
cy.get("@getDashboardMetadata.all").should("have.length", 1);
});
});
});
......
import { useLocation } from "react-use";
import { skipToken, useGetDashboardQuery } from "metabase/api";
import { useSelector } from "metabase/lib/redux";
import { getCustomHomePageDashboardId } from "metabase/selectors/app";
import { getSettingsLoading } from "metabase/selectors/settings";
import { useSetting } from "./use-setting";
export const useHomepageDashboard = () => {
const dashboardId = useSelector(getCustomHomePageDashboardId);
const isLoadingSettings = useSelector(getSettingsLoading);
const siteUrl = useSetting("site-url");
const location = useLocation();
const { data: dashboard, isLoading: isLoadingDashboard } =
useGetDashboardQuery(dashboardId ? { id: dashboardId } : skipToken);
const pathname = location?.href?.replace(siteUrl, "");
const isAtHomepageDashboard = Boolean(
dashboardId && pathname?.startsWith(`/dashboard/${dashboardId}`),
);
return {
dashboardId,
dashboard,
isLoading: isLoadingDashboard || isLoadingSettings,
canNavigateHome: !isAtHomepageDashboard || dashboard?.archived,
};
};
import { useLocation } from "react-use";
import { useSelector } from "metabase/lib/redux";
import { getCustomHomePageDashboardId } from "metabase/selectors/app";
import { useSetting } from "./use-setting";
export const useIsAtHomepageDashboard = () => {
const dashboardId = useSelector(getCustomHomePageDashboardId);
const siteUrl = useSetting("site-url");
const location = useLocation();
const pathname = location?.href?.replace(siteUrl, "");
return (
dashboardId != null &&
pathname != null &&
pathname.startsWith(`/dashboard/${dashboardId}`)
);
};
import type { MouseEvent } from "react";
import { useHomepageDashboard } from "metabase/common/hooks/use-homepage-dashboard";
import { useIsAtHomepageDashboard } from "metabase/common/hooks/use-is-at-homepage-dashboard";
import LogoIcon from "metabase/components/LogoIcon";
import { LogoLink } from "./AppBarLogo.styled";
......@@ -18,7 +18,7 @@ export function AppBarLogo({
isNavBarEnabled,
onLogoClick,
}: AppBarLogoProps): JSX.Element | null {
const { canNavigateHome } = useHomepageDashboard();
const isAtHomepageDashboard = useIsAtHomepageDashboard();
if (!isLogoVisible) {
return null;
......@@ -27,7 +27,7 @@ export function AppBarLogo({
const handleClick = (event: MouseEvent) => {
// Prevent navigating to the dashboard homepage when a user is already there
// https://github.com/metabase/metabase/issues/43800
if (!canNavigateHome) {
if (isAtHomepageDashboard) {
event.preventDefault();
}
onLogoClick?.();
......
......@@ -5,7 +5,7 @@ import _ from "underscore";
import { useUserSetting } from "metabase/common/hooks";
import { useHasTokenFeature } from "metabase/common/hooks/use-has-token-feature";
import { useHomepageDashboard } from "metabase/common/hooks/use-homepage-dashboard";
import { useIsAtHomepageDashboard } from "metabase/common/hooks/use-is-at-homepage-dashboard";
import TippyPopoverWithTrigger from "metabase/components/PopoverWithTrigger/TippyPopoverWithTrigger";
import { Tree } from "metabase/components/tree";
import {
......@@ -81,7 +81,7 @@ function MainNavbarView({
"expand-bookmarks-in-nav",
);
const { canNavigateHome } = useHomepageDashboard();
const isAtHomepageDashboard = useIsAtHomepageDashboard();
const {
card: cardItem,
......@@ -100,12 +100,12 @@ function MainNavbarView({
(event: MouseEvent) => {
// Prevent navigating to the dashboard homepage when a user is already there
// https://github.com/metabase/metabase/issues/43800
if (!canNavigateHome) {
if (isAtHomepageDashboard) {
event.preventDefault();
}
onItemSelect();
},
[canNavigateHome, onItemSelect],
[isAtHomepageDashboard, onItemSelect],
);
// Can upload CSVs if
......
import { createAction, createReducer } from "@reduxjs/toolkit";
import Dashboards from "metabase/entities/dashboards";
import Users from "metabase/entities/users";
import { createAsyncThunk } from "metabase/lib/redux";
import { CLOSE_QB_NEWB_MODAL } from "metabase/query_builder/actions";
......@@ -50,5 +51,15 @@ export const currentUser = createReducer<User | null>(null, builder => {
};
}
return state;
})
.addCase(Dashboards.actionTypes.UPDATE, (state, { payload }) => {
const { dashboard } = payload;
if (
state != null &&
state.custom_homepage?.dashboard_id === dashboard.id &&
dashboard.archived
) {
state.custom_homepage = null;
}
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment