diff --git a/frontend/src/metabase-lib/lib/metadata/Metadata.js b/frontend/src/metabase-lib/lib/metadata/Metadata.js index 28a9e330df0bd05c8b96545c3ccdb25c2a1c0f6e..644207c340b84d1169d8007f4b7c8bb79e7d2ccc 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 ebcdb90a59e3813c915325d5ed6bb28143a5ece6..038fd89febc815d0f1c22dbf3028d436fa34d1d6 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 0000000000000000000000000000000000000000..6ece4e7f3983fede36238f30a1024383f8c52868 --- /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(); + }); +});