Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refine SettingsMenu service and <settings-screen> component #3339

Merged
merged 4 commits into from
Jan 25, 2019
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion client/app/components/settings-screen.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@

<div class="bg-white tiled">
<ul class="tab-nav">
<li ng-class="{'active': $ctrl.isActive(menuItem)}" ng-if="$ctrl.isAvailable(menuItem.permission)" ng-repeat="menuItem in $ctrl.settingsMenu.menus">
<li
ng-repeat="menuItem in $ctrl.settingsMenu.items"
ng-if="$ctrl.isAvailable(menuItem.permission)"
ng-class="{'active': $ctrl.isActive(menuItem)}"
>
<a href="{{menuItem.path}}">{{menuItem.title}}</a>
</li>

Expand Down
10 changes: 2 additions & 8 deletions client/app/components/settings-screen.js
Original file line number Diff line number Diff line change
@@ -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) {
Expand All @@ -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);
},
});
Expand Down
15 changes: 0 additions & 15 deletions client/app/lib/settings-menu.js

This file was deleted.

2 changes: 1 addition & 1 deletion client/app/pages/data-sources/list.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import settingsMenu from '@/lib/settings-menu';
import settingsMenu from '@/services/settingsMenu';
import template from './list.html';

function DataSourcesCtrl(Policy, DataSource) {
Expand Down
2 changes: 1 addition & 1 deletion client/app/pages/destinations/list.js
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion client/app/pages/groups/list.js
Original file line number Diff line number Diff line change
@@ -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';

Expand Down
2 changes: 1 addition & 1 deletion client/app/pages/query-snippets/list.js
Original file line number Diff line number Diff line change
@@ -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';

Expand Down
2 changes: 1 addition & 1 deletion client/app/pages/settings/organization.js
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions client/app/pages/users/list.js
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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,
});

Expand Down
2 changes: 1 addition & 1 deletion client/app/pages/users/show.js
Original file line number Diff line number Diff line change
@@ -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';
Expand Down
40 changes: 40 additions & 0 deletions client/app/services/settingsMenu.js
Original file line number Diff line number Diff line change
@@ -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();