Skip to content

Commit 0ebd700

Browse files
rueckstiesspzrq
authored andcommitted
COMPASS-334 active sidebar (#637)
* COMPASS-334 active state for sidebar entries * make refresh icon white as well
1 parent 1d78639 commit 0ebd700

File tree

6 files changed

+54
-11
lines changed

6 files changed

+54
-11
lines changed

src/internal-packages/sidebar/lib/components/sidebar-collection.jsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
const app = require('ampersand-app');
22
const React = require('react');
3+
// const debug = require('debug')('mongodb-compass:sidebar:sidebar-collection');
34

45
const { NamespaceStore } = require('hadron-reflux-store');
56

67
class SidebarCollection extends React.Component {
78
constructor() {
89
super();
10+
this.state = {
11+
active: false
12+
};
913
this.handleClick = this.handleClick.bind(this);
1014
this.CollectionStore = app.appRegistry.getStore('App.CollectionStore');
1115
}
@@ -33,10 +37,14 @@ class SidebarCollection extends React.Component {
3337

3438
render() {
3539
const collectionName = this.getCollectionName();
40+
let className = 'compass-sidebar-title compass-sidebar-title-is-actionable';
41+
if (this.props.activeNamespace === this.props._id) {
42+
className += ' compass-sidebar-title-is-active';
43+
}
3644
return (
3745
<div className="compass-sidebar-item">
3846
<div onClick={this.handleClick}
39-
className="compass-sidebar-title compass-sidebar-title-is-actionable"
47+
className={className}
4048
title={this.props._id}>
4149
{collectionName}&nbsp;
4250
{this.renderReadonly()}
@@ -51,7 +59,8 @@ SidebarCollection.propTypes = {
5159
database: React.PropTypes.string,
5260
capped: React.PropTypes.bool,
5361
power_of_two: React.PropTypes.bool,
54-
readonly: React.PropTypes.bool
62+
readonly: React.PropTypes.bool,
63+
activeNamespace: React.PropTypes.string.isRequired
5564
};
5665

5766
module.exports = SidebarCollection;

src/internal-packages/sidebar/lib/components/sidebar-database.jsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ class SidebarDatabase extends React.Component {
1919
database: c.database,
2020
capped: c.capped,
2121
power_of_two: c.power_of_two,
22-
readonly: c.readonly
22+
readonly: c.readonly,
23+
activeNamespace: this.props.activeNamespace
2324
};
2425

2526
return (
@@ -46,9 +47,13 @@ class SidebarDatabase extends React.Component {
4647
}
4748

4849
render() {
50+
let className = 'compass-sidebar-item-header compass-sidebar-item-header-is-expandable compass-sidebar-item-header-is-actionable';
51+
if (this.props.activeNamespace === this.props._id) {
52+
className += ' compass-sidebar-item-header-is-active';
53+
}
4954
return (
5055
<div className="compass-sidebar-item compass-sidebar-item-is-top-level">
51-
<div className="compass-sidebar-item-header compass-sidebar-item-header-is-expandable">
56+
<div className={className}>
5257
<i onClick={this.handleDBClick.bind(this, this.props._id)} className="compass-sidebar-database-icon mms-icon-database"></i>
5358
<i onClick={this.handleArrowClick.bind(this)} className={this.getArrowIconClasses()}></i>
5459
<div onClick={this.handleDBClick.bind(this, this.props._id)} className="compass-sidebar-title" title={this.props._id}>
@@ -65,6 +70,7 @@ class SidebarDatabase extends React.Component {
6570

6671
SidebarDatabase.propTypes = {
6772
_id: React.PropTypes.string,
73+
activeNamespace: React.PropTypes.string.isRequired,
6874
collections: React.PropTypes.array
6975
};
7076

src/internal-packages/sidebar/lib/components/sidebar-instance-properties.jsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,14 @@ class SidebarInstanceProperties extends React.Component {
5858
const hostnameAndPort = this.getHostnameAndPort();
5959
const sshTunnelViaPort = this.getSshTunnelViaPort();
6060
const versionName = this.getVersionName();
61+
let className = 'compass-sidebar-instance';
62+
// empty string for active namespace means instance level
63+
if (this.props.activeNamespace === '') {
64+
className += ' compass-sidebar-instance-is-active';
65+
}
6166
return (
6267
<div className="compass-sidebar-properties">
63-
<div className="compass-sidebar-instance" onClick={this.handleClickHostname}>
68+
<div className={className} onClick={this.handleClickHostname}>
6469
<i className="fa fa-home compass-sidebar-instance-icon"></i>
6570
<div className="compass-sidebar-instance-hostname" >{hostnameAndPort}</div>
6671
{sshTunnelViaPort}
@@ -85,7 +90,8 @@ class SidebarInstanceProperties extends React.Component {
8590
SidebarInstanceProperties.propTypes = {
8691
connection: React.PropTypes.object,
8792
instance: React.PropTypes.object,
88-
fetching: React.PropTypes.bool
93+
fetching: React.PropTypes.bool,
94+
activeNamespace: React.PropTypes.string.isRequired
8995
};
9096

9197
module.exports = SidebarInstanceProperties;

src/internal-packages/sidebar/lib/components/sidebar.jsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ const SidebarActions = require('../actions');
77
const SidebarDatabase = require('./sidebar-database');
88
const SidebarInstanceProperties = require('./sidebar-instance-properties');
99

10+
// const debug = require('debug')('mongodb-compass:sidebar:sidebar');
11+
12+
1013
class Sidebar extends React.Component {
1114

1215
handleFilter(event) {
@@ -26,7 +29,10 @@ class Sidebar extends React.Component {
2629
return (
2730
<div className="compass-sidebar">
2831
<StoreConnector store={InstanceStore}>
29-
<SidebarInstanceProperties connection={app.connection}/>
32+
<SidebarInstanceProperties
33+
connection={app.connection}
34+
activeNamespace={this.props.activeNamespace}
35+
/>
3036
</StoreConnector>
3137
<div className="compass-sidebar-filter">
3238
<i className="fa fa-search compass-sidebar-search-icon"></i>
@@ -37,7 +43,8 @@ class Sidebar extends React.Component {
3743
this.props.databases.map(db => {
3844
const props = {
3945
_id: db._id,
40-
collections: db.collections
46+
collections: db.collections,
47+
activeNamespace: this.props.activeNamespace
4148
};
4249
return (
4350
<SidebarDatabase key={db._id} {...props} />
@@ -52,7 +59,8 @@ class Sidebar extends React.Component {
5259

5360
Sidebar.propTypes = {
5461
instance: React.PropTypes.object,
55-
databases: React.PropTypes.array
62+
databases: React.PropTypes.array,
63+
activeNamespace: React.PropTypes.string
5664
};
5765

5866
module.exports = Sidebar;

src/internal-packages/sidebar/lib/stores/index.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const StateMixin = require('reflux-state-mixin');
44

55
const SidebarActions = require('../actions');
66
const InstanceActions = app.appRegistry.getAction('App.InstanceActions');
7+
const { NamespaceStore } = require('hadron-reflux-store');
78

89
const debug = require('debug')('mongodb-compass:stores:sidebar');
910

@@ -26,7 +27,9 @@ const SidebarStore = Reflux.createStore({
2627
/**
2728
* Initialize everything that is not part of the store's state.
2829
*/
29-
init() {},
30+
init() {
31+
NamespaceStore.listen(this.onNamespaceChanged.bind(this));
32+
},
3033

3134
/**
3235
* Initialize the Compass Sidebar store state.
@@ -37,10 +40,17 @@ const SidebarStore = Reflux.createStore({
3740
return {
3841
instance: {},
3942
databases: [],
40-
filterRegex: /.*/
43+
filterRegex: /.*/,
44+
activeNamespace: ''
4145
};
4246
},
4347

48+
onNamespaceChanged() {
49+
this.setState({
50+
activeNamespace: NamespaceStore.ns || ''
51+
});
52+
},
53+
4454
setInstance(instance) {
4555
this.setState({
4656
instance,

src/internal-packages/sidebar/styles/index.less

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@
107107
color: #9DA4AA;
108108
}
109109

110+
&.fa-rotate-90 {
111+
color: #fff;
112+
}
113+
110114
&-database-icon {
111115
position: absolute;
112116
top: 6px;

0 commit comments

Comments
 (0)