From 3a747a47a686bdc4a4daccd0fc0d0d6f25b3dd91 Mon Sep 17 00:00:00 2001 From: Tom Robinson <tlrobinson@gmail.com> Date: Thu, 29 Aug 2019 12:46:06 -0700 Subject: [PATCH] Fix showing "saved questions" db in permissions editor (#10692) --- .../src/metabase-lib/lib/metadata/Metadata.js | 11 ++++++--- .../metabase/admin/permissions/selectors.js | 8 +++---- .../lib/metadata/Metadata.unit.spec.js | 24 +++++++++++++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 frontend/test/metabase-lib/lib/metadata/Metadata.unit.spec.js diff --git a/frontend/src/metabase-lib/lib/metadata/Metadata.js b/frontend/src/metabase-lib/lib/metadata/Metadata.js index 28a9e330df0..644207c340b 100644 --- a/frontend/src/metabase-lib/lib/metadata/Metadata.js +++ b/frontend/src/metabase-lib/lib/metadata/Metadata.js @@ -1,5 +1,7 @@ /* @flow weak */ +import _ from "underscore"; + import Base from "./Base"; import Database from "./Database"; @@ -25,9 +27,12 @@ export default class Metadata extends Base { segments: { [id: SegmentId]: Segment }; // DEPRECATED: this won't be sorted or filtered in a meaningful way - databasesList(): Database[] { - // $FlowFixMe - return (Object.values(this.databases): Database[]); + databasesList({ savedQuestions = true } = {}): Database[] { + return _.chain(this.databases) + .values() + .filter(db => savedQuestions || !db.is_saved_questions) + .sortBy(db => db.name) + .value(); } // DEPRECATED: this won't be sorted or filtered in a meaningful way diff --git a/frontend/src/metabase/admin/permissions/selectors.js b/frontend/src/metabase/admin/permissions/selectors.js index ebcdb90a59e..038fd89febc 100644 --- a/frontend/src/metabase/admin/permissions/selectors.js +++ b/frontend/src/metabase/admin/permissions/selectors.js @@ -305,7 +305,7 @@ export const getTablesPermissionsGrid = createSelector( databaseId: DatabaseId, schemaName: SchemaName, ) => { - const database = metadata.databases[databaseId]; + const database = metadata.database(databaseId); if (!groups || !permissions || !database) { return null; @@ -411,7 +411,7 @@ export const getSchemasPermissionsGrid = createSelector( permissions: GroupsPermissions, databaseId: DatabaseId, ) => { - const database = metadata.databases[databaseId]; + const database = metadata.database(databaseId); if (!groups || !permissions || !database) { return null; @@ -515,7 +515,7 @@ export const getDatabasesPermissionsGrid = createSelector( return null; } - const databases = Object.values(metadata.databases); + const databases = metadata.databasesList({ savedQuestions: false }); const defaultGroup = _.find(groups, isDefaultGroup); return { @@ -543,7 +543,7 @@ export const getDatabasesPermissionsGrid = createSelector( }, postAction(groupId, { databaseId }, value) { if (value === "controlled") { - const database = metadata.databases[databaseId]; + const database = metadata.database(databaseId); const schemas = database ? database.schemaNames() : []; if ( schemas.length === 0 || diff --git a/frontend/test/metabase-lib/lib/metadata/Metadata.unit.spec.js b/frontend/test/metabase-lib/lib/metadata/Metadata.unit.spec.js new file mode 100644 index 00000000000..6ece4e7f398 --- /dev/null +++ b/frontend/test/metabase-lib/lib/metadata/Metadata.unit.spec.js @@ -0,0 +1,24 @@ +import { state } from "__support__/sample_dataset_fixture"; + +import { getMetadata } from "metabase/selectors/metadata"; + +describe("databasesList", () => { + it("should filter out saved questions", () => { + const metadata = getMetadata(state); + const savedQuestionDb = { + id: "saved-question-id", + name: "Saved Questions", + is_saved_questions: true, + }; + metadata.databases[savedQuestionDb.id] = savedQuestionDb; + + expect( + metadata.databasesList().find(d => d.name === "Saved Questions"), + ).toEqual(savedQuestionDb); + expect( + metadata + .databasesList({ savedQuestions: false }) + .find(d => d.name === "Saved Questions"), + ).toBeUndefined(); + }); +}); -- GitLab