From a88defd0b5ebb74d65ed511e9dd847d199c32a30 Mon Sep 17 00:00:00 2001 From: Arik Fraimovich Date: Thu, 30 Apr 2020 22:53:41 +0300 Subject: [PATCH 1/4] Fix: showing current settings tab broken in MULTI_ORG. --- client/app/pages/data-sources/DataSourcesList.jsx | 1 + client/app/pages/users/UsersList.jsx | 2 +- client/app/services/settingsMenu.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/app/pages/data-sources/DataSourcesList.jsx b/client/app/pages/data-sources/DataSourcesList.jsx index 1a8e285200..6638a0aed3 100644 --- a/client/app/pages/data-sources/DataSourcesList.jsx +++ b/client/app/pages/data-sources/DataSourcesList.jsx @@ -149,6 +149,7 @@ const DataSourcesListPage = wrapSettingsTab( permission: "admin", title: "Data Sources", path: "data_sources", + isActive: path => path.includes("/data_sources") && !path.includes("/groups"), order: 1, }, DataSourcesList diff --git a/client/app/pages/users/UsersList.jsx b/client/app/pages/users/UsersList.jsx index 3bb7e41c99..f22385b434 100644 --- a/client/app/pages/users/UsersList.jsx +++ b/client/app/pages/users/UsersList.jsx @@ -251,7 +251,7 @@ const UsersListPage = wrapSettingsTab( permission: "list_users", title: "Users", path: "users", - isActive: path => path.startsWith("/users") && path !== "/users/me", + isActive: path => path.includes("/users") && !path.includes("/users/me"), order: 2, }, itemsList( diff --git a/client/app/services/settingsMenu.js b/client/app/services/settingsMenu.js index ec623e2b70..65357c0891 100644 --- a/client/app/services/settingsMenu.js +++ b/client/app/services/settingsMenu.js @@ -10,7 +10,7 @@ class SettingsMenuItem { } isActive(path) { - return path.startsWith(this.pathPrefix); + return path.includes(this.pathPrefix); } isAvailable() { From ce1fce9740aef5dbe7886c755ce6c32b1dc03a1a Mon Sep 17 00:00:00 2001 From: Arik Fraimovich Date: Fri, 1 May 2020 14:10:20 +0300 Subject: [PATCH 2/4] Revert "Fix: showing current settings tab broken in MULTI_ORG." This reverts commit a88defd0b5ebb74d65ed511e9dd847d199c32a30. --- client/app/pages/data-sources/DataSourcesList.jsx | 1 - client/app/pages/users/UsersList.jsx | 2 +- client/app/services/settingsMenu.js | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/client/app/pages/data-sources/DataSourcesList.jsx b/client/app/pages/data-sources/DataSourcesList.jsx index 6638a0aed3..1a8e285200 100644 --- a/client/app/pages/data-sources/DataSourcesList.jsx +++ b/client/app/pages/data-sources/DataSourcesList.jsx @@ -149,7 +149,6 @@ const DataSourcesListPage = wrapSettingsTab( permission: "admin", title: "Data Sources", path: "data_sources", - isActive: path => path.includes("/data_sources") && !path.includes("/groups"), order: 1, }, DataSourcesList diff --git a/client/app/pages/users/UsersList.jsx b/client/app/pages/users/UsersList.jsx index f22385b434..3bb7e41c99 100644 --- a/client/app/pages/users/UsersList.jsx +++ b/client/app/pages/users/UsersList.jsx @@ -251,7 +251,7 @@ const UsersListPage = wrapSettingsTab( permission: "list_users", title: "Users", path: "users", - isActive: path => path.includes("/users") && !path.includes("/users/me"), + isActive: path => path.startsWith("/users") && path !== "/users/me", order: 2, }, itemsList( diff --git a/client/app/services/settingsMenu.js b/client/app/services/settingsMenu.js index 65357c0891..ec623e2b70 100644 --- a/client/app/services/settingsMenu.js +++ b/client/app/services/settingsMenu.js @@ -10,7 +10,7 @@ class SettingsMenuItem { } isActive(path) { - return path.includes(this.pathPrefix); + return path.startsWith(this.pathPrefix); } isAvailable() { From 259a1ef4607dc305a52fd571cc0fa409412b4600 Mon Sep 17 00:00:00 2001 From: Arik Fraimovich Date: Fri, 1 May 2020 14:12:24 +0300 Subject: [PATCH 3/4] Add test for SettingsMenu#isActive --- client/app/services/settingsMenu.test.js | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 client/app/services/settingsMenu.test.js diff --git a/client/app/services/settingsMenu.test.js b/client/app/services/settingsMenu.test.js new file mode 100644 index 0000000000..5f19f5553e --- /dev/null +++ b/client/app/services/settingsMenu.test.js @@ -0,0 +1,33 @@ +import settingsMenu from "./settingsMenu"; + +const dataSourcesItem = { + permission: "admin", + title: "Data Sources", + path: "data_sources", +}; + +const usersItem = { + title: "Users", + path: "users", +}; + +settingsMenu.add(dataSourcesItem); +settingsMenu.add(usersItem); + +describe("SettingsMenu", () => { + describe("isActive", () => { + test("works with non multi org paths", () => { + expect(settingsMenu.getActiveItem("/data_sources/").title).toBe(dataSourcesItem.title); + }); + + test("works with multi org paths", () => { + // Set base href: + const base = document.createElement("base"); + base.setAttribute("href", "http://localhost/acme/"); + document.head.appendChild(base); + + expect(settingsMenu.getActiveItem("/acme/data_sources/")).toBeTruthy(); + expect(settingsMenu.getActiveItem("/acme/data_sources/").title).toBe(dataSourcesItem.title); + }); + }); +}); From ebd5c0ea5e1e8216e8a4d3b937fb8b51f53fb687 Mon Sep 17 00:00:00 2001 From: Arik Fraimovich Date: Fri, 1 May 2020 14:12:58 +0300 Subject: [PATCH 4/4] Use stripBase to remove slug from url --- client/app/services/settingsMenu.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/app/services/settingsMenu.js b/client/app/services/settingsMenu.js index ec623e2b70..9a548ac917 100644 --- a/client/app/services/settingsMenu.js +++ b/client/app/services/settingsMenu.js @@ -1,4 +1,5 @@ import { isFunction, extend, omit, sortBy, find } from "lodash"; +import { stripBase } from "@/components/ApplicationArea/Router"; import { currentUser } from "@/services/auth"; class SettingsMenuItem { @@ -29,7 +30,8 @@ class SettingsMenu { } getActiveItem(path) { - return find(this.items, item => item.isActive(path)); + const strippedPath = stripBase(path); + return find(this.items, item => item.isActive(strippedPath)); } }