Skip to content

Commit 80878ab

Browse files
gabrieldutraarikfr
authored andcommitted
Migrate Settings Screen to React (#4323)
* Migrate settings-screen to React * Use black instead of blue color for active item * Revert "Use black instead of blue color for active item" This reverts commit 0e4ecec. * Add selectable=false to the Menu
1 parent 6716bb3 commit 80878ab

18 files changed

+91
-96
lines changed

client/app/assets/less/inc/base.less

+3-3
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,23 @@ strong {
8585

8686
// Fixed width layout for specific pages
8787
@media (min-width: 768px) {
88-
settings-screen, home-page, page-dashboard-list, page-queries-list, page-alerts-list, alert-page, queries-search-results-page, .fixed-container {
88+
.settings-screen, home-page, page-dashboard-list, page-queries-list, page-alerts-list, alert-page, queries-search-results-page, .fixed-container {
8989
.container {
9090
width: 750px;
9191
}
9292
}
9393
}
9494

9595
@media (min-width: 992px) {
96-
settings-screen, home-page, page-dashboard-list, page-queries-list, page-alerts-list, alert-page, queries-search-results-page, .fixed-container {
96+
.settings-screen, home-page, page-dashboard-list, page-queries-list, page-alerts-list, alert-page, queries-search-results-page, .fixed-container {
9797
.container {
9898
width: 970px;
9999
}
100100
}
101101
}
102102

103103
@media (min-width: 1200px) {
104-
settings-screen, home-page, page-dashboard-list, page-queries-list, page-alerts-list, alert-page, queries-search-results-page, .fixed-container {
104+
.settings-screen, home-page, page-dashboard-list, page-queries-list, page-alerts-list, alert-page, queries-search-results-page, .fixed-container {
105105
.container {
106106
width: 1170px;
107107
}
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import React from 'react';
2+
import Menu from 'antd/lib/menu';
3+
import { PageHeader } from '@/components/PageHeader';
4+
import { $location } from '@/services/ng';
5+
import settingsMenu from '@/services/settingsMenu';
6+
7+
8+
function wrapSettingsTab(options, WrappedComponent) {
9+
if (options) {
10+
settingsMenu.add(options);
11+
}
12+
13+
return function SettingsTab(props) {
14+
const activeItem = settingsMenu.getActiveItem($location.path());
15+
return (
16+
<div className="settings-screen">
17+
<div className="container">
18+
<PageHeader title="Settings" />
19+
<div className="bg-white tiled">
20+
<Menu selectedKeys={[activeItem && activeItem.title]} selectable={false} mode="horizontal">
21+
{settingsMenu.items.map(item => (
22+
<Menu.Item key={item.title}><a href={item.path}>{item.title}</a></Menu.Item>
23+
))}
24+
</Menu>
25+
<div className="p-15">
26+
<div>
27+
<WrappedComponent {...props} />
28+
</div>
29+
</div>
30+
</div>
31+
</div>
32+
</div>
33+
);
34+
};
35+
}
36+
37+
export default wrapSettingsTab;

client/app/components/cards-list/CardsList.less

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
@import '../../assets/less/inc/variables';
33

44
.visual-card-list {
5+
width: 100%;
56
margin: -5px 0 0 -5px; // compensate for .visual-card spacing
67
}
78

client/app/components/settings-screen.html

-21
This file was deleted.

client/app/components/settings-screen.js

-16
This file was deleted.

client/app/pages/data-sources/DataSourcesList.jsx

+4-6
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React from 'react';
22
import Button from 'antd/lib/button';
33
import { react2angular } from 'react2angular';
44
import { isEmpty, get } from 'lodash';
5-
import settingsMenu from '@/services/settingsMenu';
65
import { DataSource, IMG_ROOT } from '@/services/data-source';
76
import { policy } from '@/services/policy';
87
import navigateTo from '@/services/navigateTo';
@@ -13,6 +12,7 @@ import LoadingState from '@/components/items-list/components/LoadingState';
1312
import CreateSourceDialog from '@/components/CreateSourceDialog';
1413
import DynamicComponent from '@/components/DynamicComponent';
1514
import helper from '@/components/dynamic-form/dynamicFormHelper';
15+
import wrapSettingsTab from '@/components/SettingsWrapper';
1616
import recordEvent from '@/services/recordEvent';
1717

1818
class DataSourcesList extends React.Component {
@@ -115,14 +115,12 @@ class DataSourcesList extends React.Component {
115115
}
116116

117117
export default function init(ngModule) {
118-
settingsMenu.add({
118+
ngModule.component('pageDataSourcesList', react2angular(wrapSettingsTab({
119119
permission: 'admin',
120120
title: 'Data Sources',
121121
path: 'data_sources',
122122
order: 1,
123-
});
124-
125-
ngModule.component('pageDataSourcesList', react2angular(DataSourcesList));
123+
}, DataSourcesList)));
126124

127125
return routesToAngularRoutes([
128126
{
@@ -137,7 +135,7 @@ export default function init(ngModule) {
137135
isNewDataSourcePage: true,
138136
},
139137
], {
140-
template: '<settings-screen><page-data-sources-list></page-data-sources-list></settings-screen>',
138+
template: '<page-data-sources-list></page-data-sources-list>',
141139
controller($scope, $exceptionHandler) {
142140
'ngInject';
143141

client/app/pages/data-sources/EditDataSource.jsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import LoadingState from '@/components/items-list/components/LoadingState';
1212
import DynamicForm from '@/components/dynamic-form/DynamicForm';
1313
import helper from '@/components/dynamic-form/dynamicFormHelper';
1414
import HelpTrigger, { TYPES as HELP_TRIGGER_TYPES } from '@/components/HelpTrigger';
15+
import wrapSettingsTab from '@/components/SettingsWrapper';
1516

1617
class EditDataSource extends React.Component {
1718
static propTypes = {
@@ -134,11 +135,11 @@ class EditDataSource extends React.Component {
134135
}
135136

136137
export default function init(ngModule) {
137-
ngModule.component('pageEditDataSource', react2angular(EditDataSource));
138+
ngModule.component('pageEditDataSource', react2angular(wrapSettingsTab(null, EditDataSource)));
138139

139140
return {
140141
'/data_sources/:dataSourceId': {
141-
template: '<settings-screen><page-edit-data-source on-error="handleError"></page-edit-data-source></settings-screen>',
142+
template: '<page-edit-data-source on-error="handleError"></page-edit-data-source>',
142143
title: 'Data Sources',
143144
controller($scope, $exceptionHandler) {
144145
'ngInject';

client/app/pages/destinations/DestinationsList.jsx

+4-6
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React from 'react';
22
import Button from 'antd/lib/button';
33
import { react2angular } from 'react2angular';
44
import { isEmpty, get } from 'lodash';
5-
import settingsMenu from '@/services/settingsMenu';
65
import { Destination, IMG_ROOT } from '@/services/destination';
76
import { policy } from '@/services/policy';
87
import navigateTo from '@/services/navigateTo';
@@ -12,6 +11,7 @@ import CardsList from '@/components/cards-list/CardsList';
1211
import LoadingState from '@/components/items-list/components/LoadingState';
1312
import CreateSourceDialog from '@/components/CreateSourceDialog';
1413
import helper from '@/components/dynamic-form/dynamicFormHelper';
14+
import wrapSettingsTab from '@/components/SettingsWrapper';
1515

1616
class DestinationsList extends React.Component {
1717
state = {
@@ -110,14 +110,12 @@ class DestinationsList extends React.Component {
110110
}
111111

112112
export default function init(ngModule) {
113-
settingsMenu.add({
113+
ngModule.component('pageDestinationsList', react2angular(wrapSettingsTab({
114114
permission: 'admin',
115115
title: 'Alert Destinations',
116116
path: 'destinations',
117117
order: 4,
118-
});
119-
120-
ngModule.component('pageDestinationsList', react2angular(DestinationsList));
118+
}, DestinationsList)));
121119

122120
return routesToAngularRoutes([
123121
{
@@ -132,7 +130,7 @@ export default function init(ngModule) {
132130
isNewDestinationPage: true,
133131
},
134132
], {
135-
template: '<settings-screen><page-destinations-list></page-destinations-list></settings-screen>',
133+
template: '<page-destinations-list></page-destinations-list>',
136134
controller($scope, $exceptionHandler) {
137135
'ngInject';
138136

client/app/pages/destinations/EditDestination.jsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import PromiseRejectionError from '@/lib/promise-rejection-error';
1111
import LoadingState from '@/components/items-list/components/LoadingState';
1212
import DynamicForm from '@/components/dynamic-form/DynamicForm';
1313
import helper from '@/components/dynamic-form/dynamicFormHelper';
14+
import wrapSettingsTab from '@/components/SettingsWrapper';
1415

1516
class EditDestination extends React.Component {
1617
static propTypes = {
@@ -109,11 +110,11 @@ class EditDestination extends React.Component {
109110
}
110111

111112
export default function init(ngModule) {
112-
ngModule.component('pageEditDestination', react2angular(EditDestination));
113+
ngModule.component('pageEditDestination', react2angular(wrapSettingsTab(null, EditDestination)));
113114

114115
return {
115116
'/destinations/:destinationId': {
116-
template: '<settings-screen><page-edit-destination on-error="handleError"></page-edit-destination></settings-screen>',
117+
template: '<page-edit-destination on-error="handleError"></page-edit-destination>',
117118
title: 'Alert Destinations',
118119
controller($scope, $exceptionHandler) {
119120
'ngInject';

client/app/pages/groups/GroupDataSources.jsx

+4-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import GroupName from '@/components/groups/GroupName';
2121
import ListItemAddon from '@/components/groups/ListItemAddon';
2222
import Sidebar from '@/components/groups/DetailsPageSidebar';
2323
import Layout from '@/components/layouts/ContentWithSidebar';
24+
import wrapSettingsTab from '@/components/SettingsWrapper';
2425

2526
import notification from '@/services/notification';
2627
import { currentUser } from '@/services/auth';
@@ -222,7 +223,7 @@ class GroupDataSources extends React.Component {
222223
}
223224

224225
export default function init(ngModule) {
225-
ngModule.component('pageGroupDataSources', react2angular(liveItemsList(
226+
ngModule.component('pageGroupDataSources', react2angular(wrapSettingsTab(null, liveItemsList(
226227
GroupDataSources,
227228
new ResourceItemsSource({
228229
isPlainList: true,
@@ -237,7 +238,7 @@ export default function init(ngModule) {
237238
},
238239
}),
239240
new StateStorage({ orderByField: 'name' }),
240-
)));
241+
))));
241242

242243
return routesToAngularRoutes([
243244
{
@@ -247,7 +248,7 @@ export default function init(ngModule) {
247248
},
248249
], {
249250
reloadOnSearch: false,
250-
template: '<settings-screen><page-group-data-sources on-error="handleError"></page-group-data-sources></settings-screen>',
251+
template: '<page-group-data-sources on-error="handleError"></page-group-data-sources>',
251252
controller($scope, $exceptionHandler) {
252253
'ngInject';
253254

client/app/pages/groups/GroupMembers.jsx

+4-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import GroupName from '@/components/groups/GroupName';
1818
import ListItemAddon from '@/components/groups/ListItemAddon';
1919
import Sidebar from '@/components/groups/DetailsPageSidebar';
2020
import Layout from '@/components/layouts/ContentWithSidebar';
21+
import wrapSettingsTab from '@/components/SettingsWrapper';
2122

2223
import notification from '@/services/notification';
2324
import { currentUser } from '@/services/auth';
@@ -187,7 +188,7 @@ class GroupMembers extends React.Component {
187188
}
188189

189190
export default function init(ngModule) {
190-
ngModule.component('pageGroupMembers', react2angular(liveItemsList(
191+
ngModule.component('pageGroupMembers', react2angular(wrapSettingsTab(null, liveItemsList(
191192
GroupMembers,
192193
new ResourceItemsSource({
193194
isPlainList: true,
@@ -202,7 +203,7 @@ export default function init(ngModule) {
202203
},
203204
}),
204205
new StateStorage({ orderByField: 'name' }),
205-
)));
206+
))));
206207

207208
return routesToAngularRoutes([
208209
{
@@ -212,7 +213,7 @@ export default function init(ngModule) {
212213
},
213214
], {
214215
reloadOnSearch: false,
215-
template: '<settings-screen><page-group-members on-error="handleError"></page-group-members></settings-screen>',
216+
template: '<page-group-members on-error="handleError"></page-group-members>',
216217
controller($scope, $exceptionHandler) {
217218
'ngInject';
218219

client/app/pages/groups/GroupsList.jsx

+5-7
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import ItemsTable, { Columns } from '@/components/items-list/components/ItemsTab
1414

1515
import CreateGroupDialog from '@/components/groups/CreateGroupDialog';
1616
import DeleteGroupButton from '@/components/groups/DeleteGroupButton';
17+
import wrapSettingsTab from '@/components/SettingsWrapper';
1718

1819
import { Group } from '@/services/group';
19-
import settingsMenu from '@/services/settingsMenu';
2020
import { currentUser } from '@/services/auth';
2121
import navigateTo from '@/services/navigateTo';
2222
import { routesToAngularRoutes } from '@/lib/utils';
@@ -121,14 +121,12 @@ class GroupsList extends React.Component {
121121
}
122122

123123
export default function init(ngModule) {
124-
settingsMenu.add({
124+
ngModule.component('pageGroupsList', react2angular(wrapSettingsTab({
125125
permission: 'list_users',
126126
title: 'Groups',
127127
path: 'groups',
128128
order: 3,
129-
});
130-
131-
ngModule.component('pageGroupsList', react2angular(liveItemsList(
129+
}, liveItemsList(
132130
GroupsList,
133131
new ResourceItemsSource({
134132
isPlainList: true,
@@ -143,7 +141,7 @@ export default function init(ngModule) {
143141
},
144142
}),
145143
new StateStorage({ orderByField: 'name', itemsPerPage: 10 }),
146-
)));
144+
))));
147145

148146
return routesToAngularRoutes([
149147
{
@@ -153,7 +151,7 @@ export default function init(ngModule) {
153151
},
154152
], {
155153
reloadOnSearch: false,
156-
template: '<settings-screen><page-groups-list on-error="handleError"></page-groups-list></settings-screen>',
154+
template: '<page-groups-list on-error="handleError"></page-groups-list>',
157155
controller($scope, $exceptionHandler) {
158156
'ngInject';
159157

0 commit comments

Comments
 (0)