From b220f902ac42310c6ba33fb9367237fca3f7b7a9 Mon Sep 17 00:00:00 2001 From: Alexander Polyankin <alexander.polyankin@metabase.com> Date: Mon, 14 Aug 2023 13:06:31 +0300 Subject: [PATCH] Fix crash in admin settings in a non-default locale (#33133) --- .../33035-group-translations.cy.spec.js | 17 +++++++++++++++++ .../selectors/data-permissions/group-sidebar.ts | 3 +++ .../selectors/data-permissions/groups.ts | 12 ++---------- 3 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 e2e/test/scenarios/admin/databases/reproductions/33035-group-translations.cy.spec.js diff --git a/e2e/test/scenarios/admin/databases/reproductions/33035-group-translations.cy.spec.js b/e2e/test/scenarios/admin/databases/reproductions/33035-group-translations.cy.spec.js new file mode 100644 index 00000000000..bfb2d7bc3ff --- /dev/null +++ b/e2e/test/scenarios/admin/databases/reproductions/33035-group-translations.cy.spec.js @@ -0,0 +1,17 @@ +import { restore } from "e2e/support/helpers"; +import { SAMPLE_DB_ID } from "e2e/support/cypress_data"; + +describe("issue 33035", () => { + beforeEach(() => { + restore(); + cy.signInAsAdmin(); + cy.request("GET", "/api/user/current").then(({ body: { id: user_id } }) => { + cy.request("PUT", `/api/user/${user_id}`, { locale: "de" }); + }); + }); + + it("databases page should work in a non-default locale (metabase#33035)", () => { + cy.visit(`/admin/permissions/data/database/${SAMPLE_DB_ID}`); + cy.findByRole("main").findByText("Orders").should("be.visible"); + }); +}); diff --git a/frontend/src/metabase/admin/permissions/selectors/data-permissions/group-sidebar.ts b/frontend/src/metabase/admin/permissions/selectors/data-permissions/group-sidebar.ts index 06aac8b0f3d..6cb92d7eb0e 100644 --- a/frontend/src/metabase/admin/permissions/selectors/data-permissions/group-sidebar.ts +++ b/frontend/src/metabase/admin/permissions/selectors/data-permissions/group-sidebar.ts @@ -3,6 +3,7 @@ import { t } from "ttag"; import { State } from "metabase-types/store"; import { Group } from "metabase-types/api"; +import { getGroupNameLocalized } from "metabase/lib/groups"; import { RawGroupRouteParams } from "../../types"; import { getOrderedGroups } from "./groups"; @@ -28,11 +29,13 @@ export const getGroupsSidebar = createSelector( const pinnedGroupItems = pinnedGroups.map(group => ({ ...group, + name: getGroupNameLocalized(group), icon: "bolt", })); const unpinnedGroupItems = unpinnedGroups.map(group => ({ ...group, + name: getGroupNameLocalized(group), icon: "group", })); diff --git a/frontend/src/metabase/admin/permissions/selectors/data-permissions/groups.ts b/frontend/src/metabase/admin/permissions/selectors/data-permissions/groups.ts index a92bf4d276e..eb3daf7bf8c 100644 --- a/frontend/src/metabase/admin/permissions/selectors/data-permissions/groups.ts +++ b/frontend/src/metabase/admin/permissions/selectors/data-permissions/groups.ts @@ -1,14 +1,9 @@ import { createSelector } from "@reduxjs/toolkit"; import _ from "underscore"; -import { assoc } from "icepick"; import Groups from "metabase/entities/groups"; import { Group } from "metabase-types/api"; -import { - getGroupNameLocalized, - isAdminGroup, - isDefaultGroup, -} from "metabase/lib/groups"; +import { isAdminGroup, isDefaultGroup } from "metabase/lib/groups"; const isPinnedGroup = (group: Group) => isAdminGroup(group) || isDefaultGroup(group); @@ -16,10 +11,7 @@ const isPinnedGroup = (group: Group) => export const getOrderedGroups = createSelector( Groups.selectors.getList, (groups: Group[]) => { - const translatedGroups = groups.map(group => - assoc(group, "name", getGroupNameLocalized(group)), - ); - return _.partition(translatedGroups, isPinnedGroup); + return _.partition(groups, isPinnedGroup); }, ); -- GitLab