From 5c2ef2ff78727a395b5281c9615c1c4d2cd6301d Mon Sep 17 00:00:00 2001 From: Levko Kravets Date: Fri, 25 Jan 2019 12:25:10 +0200 Subject: [PATCH 1/3] Refine SettingsMenu service and component --- client/app/components/settings-screen.html | 6 +++- client/app/components/settings-screen.js | 10 ++---- client/app/lib/settings-menu.js | 15 -------- client/app/pages/data-sources/list.js | 2 +- client/app/pages/destinations/list.js | 2 +- client/app/pages/groups/list.js | 2 +- client/app/pages/query-snippets/list.js | 2 +- client/app/pages/settings/organization.js | 2 +- client/app/pages/users/list.js | 4 +-- client/app/pages/users/show.js | 2 +- client/app/services/SettingsMenu.js | 40 ++++++++++++++++++++++ 11 files changed, 55 insertions(+), 32 deletions(-) delete mode 100644 client/app/lib/settings-menu.js create mode 100644 client/app/services/SettingsMenu.js diff --git a/client/app/components/settings-screen.html b/client/app/components/settings-screen.html index fb0510dc5e..d3a3c0a9ed 100644 --- a/client/app/components/settings-screen.html +++ b/client/app/components/settings-screen.html @@ -3,7 +3,11 @@
    -
  • +
  • {{menuItem.title}}
  • diff --git a/client/app/components/settings-screen.js b/client/app/components/settings-screen.js index d6e424a781..d0463e55e9 100644 --- a/client/app/components/settings-screen.js +++ b/client/app/components/settings-screen.js @@ -1,5 +1,4 @@ -import settingsMenu from '@/lib/settings-menu'; -import { isFunction } from 'lodash'; +import settingsMenu from '@/services/SettingsMenu'; import template from './settings-screen.html'; export default function init(ngModule) { @@ -8,12 +7,7 @@ export default function init(ngModule) { template, controller($location, currentUser) { this.settingsMenu = settingsMenu; - this.isActive = (menuItem) => { - if (isFunction(menuItem.isActive)) { - return menuItem.isActive($location); - } - return $location.path().startsWith(menuItem.pathPrefix); - }; + this.isActive = menuItem => menuItem.isActive($location.path()); this.isAvailable = permission => permission === undefined || currentUser.hasPermission(permission); }, }); diff --git a/client/app/lib/settings-menu.js b/client/app/lib/settings-menu.js deleted file mode 100644 index 6bfc2cc844..0000000000 --- a/client/app/lib/settings-menu.js +++ /dev/null @@ -1,15 +0,0 @@ -import { sortBy } from 'lodash'; - -const settingsMenu = { - menus: [], - add(menu) { - if (menu.pathPrefix === undefined) { - menu.pathPrefix = `/${menu.path}`; - } - - this.menus.push(menu); - this.menus = sortBy(this.menus, 'order'); - }, -}; - -export default settingsMenu; diff --git a/client/app/pages/data-sources/list.js b/client/app/pages/data-sources/list.js index 558357e6f1..aad9644126 100644 --- a/client/app/pages/data-sources/list.js +++ b/client/app/pages/data-sources/list.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/lib/settings-menu'; +import settingsMenu from '@/services/SettingsMenu'; import template from './list.html'; function DataSourcesCtrl(Policy, DataSource) { diff --git a/client/app/pages/destinations/list.js b/client/app/pages/destinations/list.js index d35139bcba..ebe0fe1cc6 100644 --- a/client/app/pages/destinations/list.js +++ b/client/app/pages/destinations/list.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/lib/settings-menu'; +import settingsMenu from '@/services/SettingsMenu'; import template from './list.html'; function DestinationsCtrl($scope, $location, toastr, currentUser, Destination) { diff --git a/client/app/pages/groups/list.js b/client/app/pages/groups/list.js index 6795116a98..019b87f344 100644 --- a/client/app/pages/groups/list.js +++ b/client/app/pages/groups/list.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/lib/settings-menu'; +import settingsMenu from '@/services/SettingsMenu'; import { Paginator } from '@/lib/pagination'; import template from './list.html'; diff --git a/client/app/pages/query-snippets/list.js b/client/app/pages/query-snippets/list.js index 1a05ced632..44cbc6d156 100644 --- a/client/app/pages/query-snippets/list.js +++ b/client/app/pages/query-snippets/list.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/lib/settings-menu'; +import settingsMenu from '@/services/SettingsMenu'; import { Paginator } from '@/lib/pagination'; import template from './list.html'; diff --git a/client/app/pages/settings/organization.js b/client/app/pages/settings/organization.js index 749a019732..354b1c8dbb 100644 --- a/client/app/pages/settings/organization.js +++ b/client/app/pages/settings/organization.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/lib/settings-menu'; +import settingsMenu from '@/services/SettingsMenu'; import template from './organization.html'; function OrganizationSettingsCtrl($http, toastr, clientConfig, Events) { diff --git a/client/app/pages/users/list.js b/client/app/pages/users/list.js index 9dda5f648b..e2539a6a64 100644 --- a/client/app/pages/users/list.js +++ b/client/app/pages/users/list.js @@ -1,6 +1,6 @@ import { extend } from 'lodash'; import ListCtrl from '@/lib/list-ctrl'; -import settingsMenu from '@/lib/settings-menu'; +import settingsMenu from '@/services/SettingsMenu'; import template from './list.html'; class UsersListCtrl extends ListCtrl { @@ -33,7 +33,7 @@ export default function init(ngModule) { permission: 'list_users', title: 'Users', path: 'users', - isActive: $location => $location.path().startsWith('/users') && $location.path() !== '/users/me', + isActive: path => path.startsWith('/users') && (path !== '/users/me'), order: 2, }); diff --git a/client/app/pages/users/show.js b/client/app/pages/users/show.js index 318b197960..8483df9000 100644 --- a/client/app/pages/users/show.js +++ b/client/app/pages/users/show.js @@ -1,5 +1,5 @@ import { each } from 'lodash'; -import settingsMenu from '@/lib/settings-menu'; +import settingsMenu from '@/services/SettingsMenu'; import { absoluteUrl } from '@/services/utils'; import template from './show.html'; import './settings.less'; diff --git a/client/app/services/SettingsMenu.js b/client/app/services/SettingsMenu.js new file mode 100644 index 0000000000..5e4814ac49 --- /dev/null +++ b/client/app/services/SettingsMenu.js @@ -0,0 +1,40 @@ +import { isFunction, extend, omit, sortBy } from 'lodash'; + +class SettingsMenuItem { + constructor(menuItem) { + extend( + this, + { pathPrefix: `/${menuItem.path}` }, + omit(menuItem, ['isActive']), + ); + if (isFunction(menuItem.isActive)) { + this.isActive = menuItem.isActive; + } + } + + isActive(path) { + return path.startsWith(this.pathPrefix); + } +} + +class SettingsMenu { + constructor() { + this._items = []; + this._dirty = false; + } + + get items() { + if (this._dirty) { + this._items = sortBy(this._items, 'order'); + this._dirty = false; + } + return this._items; + } + + add(item) { + this._items.push(new SettingsMenuItem(item)); + this._dirty = true; + } +} + +export default new SettingsMenu(); From 80f791b93e2071e9a1edcf54d01beb302b24e83c Mon Sep 17 00:00:00 2001 From: Levko Kravets Date: Fri, 25 Jan 2019 13:07:41 +0200 Subject: [PATCH 2/3] Rename services/settingsMenu file to match default export name --- client/app/components/settings-screen.js | 2 +- client/app/pages/data-sources/list.js | 2 +- client/app/pages/destinations/list.js | 2 +- client/app/pages/groups/list.js | 2 +- client/app/pages/query-snippets/list.js | 2 +- client/app/pages/settings/organization.js | 2 +- client/app/pages/users/list.js | 2 +- client/app/pages/users/show.js | 2 +- client/app/services/{SettingsMenu.js => settingsMenu.js} | 0 9 files changed, 8 insertions(+), 8 deletions(-) rename client/app/services/{SettingsMenu.js => settingsMenu.js} (100%) diff --git a/client/app/components/settings-screen.js b/client/app/components/settings-screen.js index d0463e55e9..ad2ba158e3 100644 --- a/client/app/components/settings-screen.js +++ b/client/app/components/settings-screen.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/services/SettingsMenu'; +import settingsMenu from '@/services/settingsMenu'; import template from './settings-screen.html'; export default function init(ngModule) { diff --git a/client/app/pages/data-sources/list.js b/client/app/pages/data-sources/list.js index aad9644126..f1d64e1e5d 100644 --- a/client/app/pages/data-sources/list.js +++ b/client/app/pages/data-sources/list.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/services/SettingsMenu'; +import settingsMenu from '@/services/settingsMenu'; import template from './list.html'; function DataSourcesCtrl(Policy, DataSource) { diff --git a/client/app/pages/destinations/list.js b/client/app/pages/destinations/list.js index ebe0fe1cc6..72c3857312 100644 --- a/client/app/pages/destinations/list.js +++ b/client/app/pages/destinations/list.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/services/SettingsMenu'; +import settingsMenu from '@/services/settingsMenu'; import template from './list.html'; function DestinationsCtrl($scope, $location, toastr, currentUser, Destination) { diff --git a/client/app/pages/groups/list.js b/client/app/pages/groups/list.js index 019b87f344..c097a91fc6 100644 --- a/client/app/pages/groups/list.js +++ b/client/app/pages/groups/list.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/services/SettingsMenu'; +import settingsMenu from '@/services/settingsMenu'; import { Paginator } from '@/lib/pagination'; import template from './list.html'; diff --git a/client/app/pages/query-snippets/list.js b/client/app/pages/query-snippets/list.js index 44cbc6d156..547792b423 100644 --- a/client/app/pages/query-snippets/list.js +++ b/client/app/pages/query-snippets/list.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/services/SettingsMenu'; +import settingsMenu from '@/services/settingsMenu'; import { Paginator } from '@/lib/pagination'; import template from './list.html'; diff --git a/client/app/pages/settings/organization.js b/client/app/pages/settings/organization.js index 354b1c8dbb..e826497aed 100644 --- a/client/app/pages/settings/organization.js +++ b/client/app/pages/settings/organization.js @@ -1,4 +1,4 @@ -import settingsMenu from '@/services/SettingsMenu'; +import settingsMenu from '@/services/settingsMenu'; import template from './organization.html'; function OrganizationSettingsCtrl($http, toastr, clientConfig, Events) { diff --git a/client/app/pages/users/list.js b/client/app/pages/users/list.js index e2539a6a64..ffdeba3541 100644 --- a/client/app/pages/users/list.js +++ b/client/app/pages/users/list.js @@ -1,6 +1,6 @@ import { extend } from 'lodash'; import ListCtrl from '@/lib/list-ctrl'; -import settingsMenu from '@/services/SettingsMenu'; +import settingsMenu from '@/services/settingsMenu'; import template from './list.html'; class UsersListCtrl extends ListCtrl { diff --git a/client/app/pages/users/show.js b/client/app/pages/users/show.js index 8483df9000..b5bfbd39b5 100644 --- a/client/app/pages/users/show.js +++ b/client/app/pages/users/show.js @@ -1,5 +1,5 @@ import { each } from 'lodash'; -import settingsMenu from '@/services/SettingsMenu'; +import settingsMenu from '@/services/settingsMenu'; import { absoluteUrl } from '@/services/utils'; import template from './show.html'; import './settings.less'; diff --git a/client/app/services/SettingsMenu.js b/client/app/services/settingsMenu.js similarity index 100% rename from client/app/services/SettingsMenu.js rename to client/app/services/settingsMenu.js From f8319b28fef88a758cd704d278e644794341af70 Mon Sep 17 00:00:00 2001 From: Levko Kravets Date: Fri, 25 Jan 2019 14:27:52 +0200 Subject: [PATCH 3/3] CR1 --- client/app/services/settingsMenu.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/client/app/services/settingsMenu.js b/client/app/services/settingsMenu.js index 5e4814ac49..45ee63015e 100644 --- a/client/app/services/settingsMenu.js +++ b/client/app/services/settingsMenu.js @@ -19,21 +19,12 @@ class SettingsMenuItem { class SettingsMenu { constructor() { - this._items = []; - this._dirty = false; - } - - get items() { - if (this._dirty) { - this._items = sortBy(this._items, 'order'); - this._dirty = false; - } - return this._items; + this.items = []; } add(item) { - this._items.push(new SettingsMenuItem(item)); - this._dirty = true; + this.items.push(new SettingsMenuItem(item)); + this.items = sortBy(this.items, 'order'); } }